- Name
mode- Kind
- property
- Type
"controlled" | "uncontrolled"- Requirement
- required
Docs/API reference/UI machines/navigation-menu
navigation-menu machine
The public state machine contract for @grassroot/ui-machines/navigation-menu. The machine owns behaviour; the matching headless layer owns composition.
@grassroot/ui-machines/navigation-menu
Package
View source
packages/ui-machines/src/navigation-menu/index.ts
Service example
navigation-menu.tsts
1
2
3
4
5
6
7
import { createService } from "@grassroot/statechart";import { navigationMenuMachine } from "@grassroot/ui-machines/navigation-menu"; const service = createService(navigationMenuMachine, { input: {} });service.start();service.send({ type: "…" });service.stop();17 of 17
Exports
DeclarationView source
NAVIGATION_MENU_INTENT_KEYts
export declare const NAVIGATION_MENU_INTENT_KEY: "navigation-menu.intent";DeclarationView source
NavigationMenuChangeReasonts
type NavigationMenuChangeReason = NavigationMenuOpenReason | NavigationMenuCloseReason;DeclarationView source
NavigationMenuCloseReasonts
type NavigationMenuCloseReason = "leave" | "escape" | "dismiss" | "programmatic" | "trigger" | "intent";DeclarationView source
NavigationMenuCommandts
type NavigationMenuCommand = (CommandObject & { readonly type: "OPEN_CHANGE_REQUEST"; readonly open: number | null; readonly reason: NavigationMenuChangeReason;}) | ScheduleCommand<NavigationMenuEvent> | CancelCommand;DeclarationView source
NavigationMenuContextts
type NavigationMenuContext = { readonly open: number | null; readonly mode: "controlled" | "uncontrolled";};Name
Kind
Type
Requirement
modeproperty
"controlled" | "uncontrolled"required
openproperty
number | nullrequired
- Name
open- Kind
- property
- Type
number | null- Requirement
- required
DeclarationView source
NavigationMenuDiagnosticCodests
export declare const NavigationMenuDiagnosticCodes: readonly DiagnosticCatalogueEntry[];NavigationMenuEvent
typeDeclarationView source
NavigationMenuEventts
type NavigationMenuEvent = { readonly type: "OPEN"; readonly index: number; readonly reason: NavigationMenuOpenReason;} | { readonly type: "TOGGLE"; readonly index: number; readonly reason: "trigger";} | { readonly type: "CLOSE"; readonly reason: NavigationMenuCloseReason;} | { readonly type: "HOVER"; readonly index: number; readonly intent?: NavigationMenuPointerIntent;} | { readonly type: "FOCUS"; readonly index: number;} | { readonly type: "CLICK"; readonly index: number;} | { readonly type: "LEAVE"; readonly intent?: NavigationMenuPointerIntent;} | { readonly type: "ESCAPE";} | { readonly type: "DISMISS";};NavigationMenuInput
typeDeclarationView source
NavigationMenuInputts
type NavigationMenuInput = { /** Controlled committed panel index. Defining it fixes controlled mode. */ readonly open?: number | null; /** Uncontrolled initial panel index. */ readonly defaultOpen?: number | null; /** Panel ownership is input data, never trusted from an event payload. */ readonly items: readonly NavigationMenuItem[]; /** Delay for safe pointer intent transitions. Default 0 (oracle parity). */ readonly intentDelayMs?: number;};Name
Kind
Type
Requirement
Description
defaultOpenproperty
number | nulloptional
Uncontrolled initial panel index.
intentDelayMsproperty
numberoptional
Delay for safe pointer intent transitions. Default 0 (oracle parity).
itemsproperty
readonly NavigationMenuItem[]required
Panel ownership is input data, never trusted from an event payload.
openproperty
number | nulloptional
Controlled committed panel index. Defining it fixes controlled mode.
- Name
defaultOpen- Kind
- property
- Type
number | null- Requirement
- optional
- Description
- Uncontrolled initial panel index.
- Name
intentDelayMs- Kind
- property
- Type
number- Requirement
- optional
- Description
- Delay for safe pointer intent transitions. Default 0 (oracle parity).
- Name
items- Kind
- property
- Type
readonly NavigationMenuItem[]- Requirement
- required
- Description
- Panel ownership is input data, never trusted from an event payload.
- Name
open- Kind
- property
- Type
number | null- Requirement
- optional
- Description
- Controlled committed panel index. Defining it fixes controlled mode.
NavigationMenuItem
interfaceDeclarationView source
NavigationMenuItemts
interface NavigationMenuItem { readonly hasPanel: boolean;}Name
Kind
Type
Requirement
hasPanelproperty
booleanrequired
- Name
hasPanel- Kind
- property
- Type
boolean- Requirement
- required
navigationMenuMachine
valueDeclarationView source
navigationMenuMachinets
export declare const navigationMenuMachine: NavigationMenuMachine;DeclarationView source
NavigationMenuMachinets
type NavigationMenuMachine = Machine<NavigationMenuInput, NavigationMenuStateValue, NavigationMenuContext, NavigationMenuEvent, NavigationMenuCommand>;DeclarationView source
NavigationMenuOpenReasonts
type NavigationMenuOpenReason = "programmatic" | "focus" | "hover" | "intent";DeclarationView source
NavigationMenuPointerIntentts
type NavigationMenuPointerIntent = "enter" | "preserve" | "leave";DeclarationView source
navigationMenuReplaySequencets
export declare const navigationMenuReplaySequence: readonly NavigationMenuEvent[];navigationMenuSelectors
valueDeclarationView source
navigationMenuSelectorsts
export declare const navigationMenuSelectors: { open: (snapshot: NavigationMenuSnapshot) => number | null; isOpen: (snapshot: NavigationMenuSnapshot, index: number) => boolean;};Name
Kind
Type
Requirement
isOpenproperty
(snapshot: NavigationMenuSnapshot, index: number) => booleanrequired
openproperty
(snapshot: NavigationMenuSnapshot) => number | nullrequired
- Name
isOpen- Kind
- property
- Type
(snapshot: NavigationMenuSnapshot, index: number) => boolean- Requirement
- required
- Name
open- Kind
- property
- Type
(snapshot: NavigationMenuSnapshot) => number | null- Requirement
- required
DeclarationView source
NavigationMenuSnapshotts
type NavigationMenuSnapshot = Snapshot<NavigationMenuStateValue, NavigationMenuContext>;DeclarationView source
NavigationMenuStateValuets
type NavigationMenuStateValue = "ready";