modern-cmdk 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +261 -0
- package/dist/core/index.d.mts +1 -1
- package/dist/core/index.mjs +1 -1
- package/dist/{core-Bq0eDvlc.mjs → core-DZT7Vwmo.mjs} +7 -5
- package/dist/core-DZT7Vwmo.mjs.map +1 -0
- package/dist/{index-Ctz7l29k.d.mts → index-zBlDFopY.d.mts} +2 -2
- package/dist/{index-Ctz7l29k.d.mts.map → index-zBlDFopY.d.mts.map} +1 -1
- package/dist/react/index.d.mts +1 -1
- package/dist/react/index.d.mts.map +1 -1
- package/dist/react/index.mjs +1 -1
- package/dist/react/index.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/core-Bq0eDvlc.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/react/activity.tsx","../../src/react/async-items.tsx","../../src/react/badge.tsx","../../src/react/dialog.tsx","../../src/react/empty.tsx","../../src/react/group.tsx","../../src/react/highlight.tsx","../../src/react/input.tsx","../../src/react/item.tsx","../../src/react/list.tsx","../../src/react/loading.tsx","../../src/react/page.tsx","../../src/react/separator.tsx","../../src/react/shortcut.tsx","../../src/react/command.tsx","../../src/react/context.ts","../../src/react/error-boundary.tsx","../../src/react/hooks/use-command.ts","../../src/react/hooks/use-command-state.ts","../../src/react/hooks/use-devtools.ts","../../src/react/hooks/use-keyboard.ts","../../src/react/hooks/use-register.ts","../../src/react/hooks/use-virtualizer.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/react/activity.tsx","../../src/react/async-items.tsx","../../src/react/badge.tsx","../../src/react/dialog.tsx","../../src/react/empty.tsx","../../src/react/group.tsx","../../src/react/highlight.tsx","../../src/react/input.tsx","../../src/react/item.tsx","../../src/react/list.tsx","../../src/react/loading.tsx","../../src/react/page.tsx","../../src/react/separator.tsx","../../src/react/shortcut.tsx","../../src/react/command.tsx","../../src/react/context.ts","../../src/react/error-boundary.tsx","../../src/react/hooks/use-command.ts","../../src/react/hooks/use-command-state.ts","../../src/react/hooks/use-devtools.ts","../../src/react/hooks/use-keyboard.ts","../../src/react/hooks/use-register.ts","../../src/react/hooks/use-virtualizer.ts"],"mappings":";;;;;KAaY,YAAA;;UAGK,oBAAA;EAHL;EAAA,SAKD,IAAA,EAAM,YAAA;EAAA,SACN,QAAA,EAAU,SAAA;AAAA;AAHrB;;;;;AAAA,iBAuBgB,eAAA,CAAA;EAAkB,IAAA;EAAM;AAAA,GAAY,oBAAA,GAAuB,SAAA;;;UC3B1D,sBAAA;;WAEN,KAAA,EAAO,OAAA,UAAiB,aAAA;EDDvB;EAAA,SCGD,QAAA,GAAW,SAAA;EDHV;EAAA,SCKD,QAAA,GAAW,KAAA,WAAgB,aAAA,OAAkB,SAAA;AAAA;AAAA,iBA2BxC,iBAAA,CAAA;EACd,KAAA;EACA,QAAA;EACA;AAAA,GACC,sBAAA,GAAyB,SAAA;;;UCxCX,iBAAA,SAA0B,qBAAA;AAAA,iBAE3B,YAAA,CAAA;EAAe,GAAA;EAAK,QAAA;EAAA,GAAa;AAAA,GAAS,iBAAA,GAAoB,SAAA;;;UCQ7D,kBAAA,SAA2B,qBAAA;EAAA,SACjC,QAAA,GAAW,SAAA;EAAA,SACX,SAAA;EAAA,SACA,gBAAA;EAAA,SACA,gBAAA;EAAA,SACA,KAAA;EAAA,SACA,IAAA;EAAA,SACA,YAAA,IAAgB,IAAA;EHVV;EAAA,SGYN,SAAA,GAAY,WAAA;AAAA;AAAA,iBAGP,aAAA,CAAA;EACd,QAAA;EACA,SAAA;EACA,gBAAA;EACA,gBAAA;EACA,KAAA;EACA,IAAA,EAAM,cAAA;EACN,YAAA;EACA,SAAA;EAAA,GACG;AAAA,GACF,kBAAA,GAAqB,SAAA;;;UC9BP,iBAAA,SAA0B,qBAAA;AAAA,iBAE3B,YAAA,CAAA;EAAe,GAAA;EAAK,QAAA;EAAA,GAAa;AAAA,GAAS,iBAAA,GAAoB,SAAA;;;UCA7D,iBAAA,SAA0B,qBAAA;;WAEhC,OAAA;ELFX;EAAA,SKIW,QAAA;;WAEA,OAAA;AAAA;AAAA,iBAGK,YAAA,CAAA;EACd,GAAA;EACA,QAAA;EACA,OAAA;EACA,QAAA;EACA,OAAA;EAAA,GACG;AAAA,GACF,iBAAA,GAAoB,SAAA;;;UCnBN,qBAAA;;WAEN,IAAA;ENCX;EAAA,SMCW,MAAA,EAAQ,aAAA,WAAwB,KAAA,UAAe,GAAA;;WAE/C,kBAAA;AAAA;AAAA,iBAGK,gBAAA,CAAA;EACd,IAAA;EACA,MAAA;EACA;AAAA,GACC,qBAAA,GAAwB,SAAA;;;UCZV,iBAAA,SACP,IAAA,CAAK,qBAAA;EAAA,SACJ,aAAA,IAAiB,KAAA;AAAA;AAAA,iBAGZ,YAAA,CAAA;EACd,GAAA;EACA,WAAA;EACA,aAAA;EAAA,GACG;AAAA,GACF,iBAAA,GAAoB,SAAA;;;UCTN,gBAAA,SAAyB,IAAA,CAAK,qBAAA;EAAA,SACpC,KAAA;EAAA,SACA,QAAA;EAAA,SACA,QAAA;EAAA,SACA,QAAA;EAAA,SACA,QAAA;EAAA,SACA,OAAA;AAAA;AAAA,iBAGK,WAAA,CAAA;EACd,GAAA;EACA,QAAA;EACA,KAAA;EACA,QAAA;EACA,QAAA;EACA,QAAA;EACA,QAAA;EACA,OAAA;EAAA,GACG;AAAA,GACF,gBAAA,GAAmB,SAAA;;;UCjBL,gBAAA,SAAyB,qBAAA;;WAE/B,UAAA;ETHX;EAAA,SSKW,YAAA;;WAEA,QAAA;AAAA;AAAA,iBAGK,WAAA,CAAA;EACd,GAAA;EACA,QAAA;EACA,UAAA;EACA,YAAA;EACA,QAAA;EACA,KAAA;EAAA,GACG;AAAA,GACF,gBAAA,GAAmB,SAAA;;;UCpBL,mBAAA,SAA4B,qBAAA;;WAElC,OAAA;AAAA;AAAA,iBAGK,cAAA,CAAA;EACd,GAAA;EACA,QAAA;EACA,OAAA,EAAS,eAAA;EAAA,GACN;AAAA,GACF,mBAAA,GAAsB,SAAA;;;;KCTb,aAAA;EAAA,SAAoC,OAAA;AAAA;AAAA,UAE/B,gBAAA;;WAEN,EAAA,EAAI,aAAA;EAAA,SACJ,QAAA,GAAW,SAAA;AAAA;AAAA,iBAGN,WAAA,CAAA;EAAc,EAAA;EAAI;AAAA,GAAY,gBAAA,GAAmB,SAAA;;;UCXhD,qBAAA,SAA8B,qBAAA;AAAA,iBAE/B,gBAAA,CAAA;EAAmB,GAAA;EAAA,GAAQ;AAAA,GAAS,qBAAA,GAAwB,SAAA;;;UCA3D,oBAAA,SAA6B,qBAAA;;WAEnC,QAAA;AAAA;AAAA,iBAGK,eAAA,CAAA;EACd,GAAA;EACA,QAAA;EACA,QAAA;EAAA,GACG;AAAA,GACF,oBAAA,GAAuB,SAAA;;;UCUT,gBAAA,SAAyB,qBAAA;EAAA,SAC/B,QAAA,GAAW,SAAA;EAAA,SACX,SAAA;EAAA,SACA,KAAA;AAAA;AAAA,iBAGF,WAAA,CAAA;EACP,QAAA;EACA,SAAA;EACA,KAAA;EAAA,GACG;AAAA,GACF,gBAAA,GAAmB,SAAA;;cAqFT,OAAA,SAAgB,WAAA;EAAA,SAClB,KAAA,SAAc,YAAA;EAAA,SACd,IAAA,SAAa,WAAA;EAAA,SACb,IAAA,SAAa,WAAA;EAAA,SACb,KAAA,SAAc,YAAA;EAAA,SACd,KAAA,SAAc,YAAA;EAAA,SACd,OAAA,SAAgB,cAAA;EAAA,SAChB,SAAA,SAAkB,gBAAA;EAAA,SAClB,MAAA,SAAe,aAAA;EAAA,SACf,SAAA,SAAkB,gBAAA;EAAA,SAClB,QAAA,SAAiB,eAAA;EAAA,SACjB,KAAA,SAAc,YAAA;EAAA,SACd,IAAA,SAAa,WAAA;EAAA,SACb,UAAA,SAAmB,iBAAA;EAAA,SACnB,QAAA,SAAiB,eAAA;AAAA;;;;KCnIhB,aAAA;EAAA,SAAoC,OAAA;AAAA;AAAA,UAE/B,mBAAA;EAAA,SACN,OAAA,EAAS,cAAA;EAAA,SACT,KAAA,EAAO,YAAA;EAAA,SACP,SAAA;EAAA,SACA,YAAA,GAAe,KAAA;EAAA,SACf,qBAAA,GAAwB,EAAA,EAAI,MAAA;EfElB;EAAA,SeAV,aAAA,EAAe,WAAA,CAAY,MAAA;EAAA,SAC3B,MAAA,EAAQ,aAAA;EAAA,SACR,MAAA;EAAA,SACA,OAAA;EAAA,SACA,KAAA;AAAA;AAAA,UAOM,wBAAA;EAAA,SACN,OAAA;EAAA,SACA,SAAA;AAAA;;;UCxBM,yBAAA;EAAA,SACN,QAAA,EAAU,SAAA;EAAA,SACV,QAAA,GAAW,SAAA,KAAc,KAAA,EAAO,KAAA,KAAU,SAAA;EAAA,SAC1C,OAAA,IAAW,KAAA,EAAO,KAAA,EAAO,SAAA,EAAW,SAAA;AAAA;AAAA,UAGrC,yBAAA;EAAA,SACC,KAAA,EAAO,KAAA;AAAA;AAAA,cAQL,oBAAA,SAA6B,SAAA,CACxC,yBAAA,EACA,yBAAA;EAEA,KAAA,EAAgB,yBAAA;EAAA,OAET,wBAAA,CAAyB,KAAA,EAAO,KAAA,GAAQ,yBAAA;EAI/C,iBAAA,CAA2B,KAAA,EAAO,KAAA,EAAO,SAAA,EAAW,SAAA;EAIpD,MAAA,CAAA,GAAmB,SAAA;AAAA;;;UCnBJ,gBAAA;EAAA,SACN,KAAA,EAAO,YAAA;EAAA,SACP,SAAA;EAAA,SACA,YAAA,GAAe,KAAA;EAAA,SACf,qBAAA,GAAwB,EAAA,EAAI,MAAA;EjBT3B;EAAA,SiBWD,aAAA,EAAe,WAAA,CAAY,MAAA;EAAA,SAC3B,EAAA,EAAI,aAAA;AAAA;AAAA,iBAGC,UAAA,CAAW,OAAA,EAAS,cAAA,GAAiB,gBAAA;;;;iBCjBrC,eAAA,CAAA,GAAmB,YAAA;;iBAEnB,eAAA,GAAA,CAAmB,QAAA,GAAW,KAAA,EAAO,YAAA,KAAiB,CAAA,GAAI,CAAA;;;;;;;AlBA1E;;;;;AAGA;;;iBmBwBgB,kBAAA,CAAmB,KAAA;;;;iBCnBnB,oBAAA,CACd,OAAA,EAAS,cAAA,EACT,QAAA,QAAgB,YAAA,IACd,KAAA,EAAO,aAAA;;;;UCXM,mBAAA;EAAA,SACN,QAAA;EAAA,SACA,OAAA;EAAA,SACA,QAAA;EAAA,SACA,QAAA;EAAA,SACA,QAAA;EAAA,SACA,IAAA,GAAO,QAAA,CAAS,MAAA;EAAA,SAChB,OAAA;AAAA;;iBAIK,eAAA,CAAgB,KAAA,UAAe,OAAA,GAAU,mBAAA,GAAsB,MAAA;;UA2C9D,oBAAA;EAAA,SACN,QAAA;EAAA,SACA,OAAA;AAAA;;iBAIK,gBAAA,CAAiB,OAAA,WAAkB,OAAA,GAAU,oBAAA,GAAuB,OAAA;;;UC/DnE,kBAAA;EAAA,SACN,KAAA;EAAA,SACA,YAAA;EAAA,SACA,QAAA;EAAA,SACA,aAAA,EAAe,WAAA;EAAA,SACf,OAAA;AAAA;AAAA,UAGM,WAAA;EAAA,SACN,KAAA;EAAA,SACA,KAAA;EAAA,SACA,IAAA;EAAA,SACA,GAAA;AAAA;AAAA,UAGM,iBAAA;EAAA,SACN,YAAA,WAAuB,WAAA;EAAA,SACvB,SAAA;EAAA,SACA,aAAA,GAAgB,KAAA;EAAA,SAChB,cAAA,GAAiB,OAAA,EAAS,WAAA;AAAA;AAAA,iBAGrB,cAAA,CAAe,OAAA,EAAS,kBAAA,GAAqB,iBAAA"}
|
package/dist/react/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as itemId, S as groupId, d as formatShortcut, f as parseShortcut, i as createCommandMachine } from "../core-
|
|
1
|
+
import { C as itemId, S as groupId, d as formatShortcut, f as parseShortcut, i as createCommandMachine } from "../core-DZT7Vwmo.mjs";
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { Component, Suspense, createContext, use, useCallback, useEffect, useId, useInsertionEffect, useMemo, useOptimistic, useRef, useState, useSyncExternalStore, useTransition } from "react";
|
|
4
4
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
package/dist/react/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/react/activity.tsx","../../src/react/context.ts","../../src/react/async-items.tsx","../../src/react/badge.tsx","../../src/react/hooks/use-command.ts","../../src/react/hooks/use-keyboard.ts","../../src/react/dialog.tsx","../../src/react/empty.tsx","../../src/react/hooks/use-register.ts","../../src/react/group.tsx","../../src/react/highlight.tsx","../../src/react/input.tsx","../../src/react/item.tsx","../../src/react/hooks/use-virtualizer.ts","../../src/react/list.tsx","../../src/react/loading.tsx","../../src/react/page.tsx","../../src/react/separator.tsx","../../src/react/shortcut.tsx","../../src/react/command.tsx","../../src/react/error-boundary.tsx","../../src/react/hooks/use-command-state.ts","../../src/react/hooks/use-devtools.ts"],"sourcesContent":["'use client';\n\n// packages/command-react/src/activity.tsx\n// <CommandActivity> — React 19.3.0-canary Activity API for state preservation\n// Wraps palette contents in <Activity mode=\"hidden\"> when dialog closes\n// Preserves scroll position, input state, selection without remount\n// Graceful degradation: falls back to normal unmount if Activity unavailable\n// Isolated declarations: explicit return types on all exports\n\nimport type { ComponentType, ReactNode } from 'react';\nimport * as React from 'react';\n\n/** Activity mode — maps directly to React's Activity API */\nexport type ActivityMode = 'visible' | 'hidden';\n\n/** Props for the CommandActivity wrapper that controls visibility via React's Activity API. */\nexport interface CommandActivityProps {\n /** Whether the wrapped content is active (visible) */\n readonly mode: ActivityMode;\n readonly children: ReactNode;\n}\n\n/** Props shape for the internal Activity component */\ninterface ActivityComponentProps {\n readonly mode: ActivityMode;\n readonly children: ReactNode;\n}\n\n// Check if React.Activity (unstable) is available in this canary build\nconst ActivityComponent: ComponentType<ActivityComponentProps> | null =\n 'Activity' in React\n ? ((React as Record<string, unknown>).Activity as ComponentType<ActivityComponentProps>)\n : null;\n\n/**\n * Wraps content in React 19.3.0-canary Activity API.\n * When mode=\"hidden\", the component tree is preserved in memory but not rendered.\n * Falls back to conditional rendering if Activity is unavailable.\n */\nexport function CommandActivity({ mode, children }: CommandActivityProps): ReactNode {\n if (ActivityComponent) {\n return <ActivityComponent mode={mode}>{children}</ActivityComponent>;\n }\n\n // Graceful degradation — unmount when hidden\n if (mode === 'hidden') return null;\n return <>{children}</>;\n}\n","'use client';\n\n// packages/command-react/src/context.ts\n// React context definitions — use() for consuming in Suspense boundaries\n// Branded types for IDs, isolated declarations with explicit return types\n\nimport { type Context, createContext } from 'react';\nimport type { CommandMachine, CommandState, ItemId } from '../core/index.js';\n\n/** Branded newtype for the root instance ID */\nexport type CommandRootId = string & { readonly __brand: 'CommandRootId' };\n\nexport interface CommandContextValue {\n readonly machine: CommandMachine;\n readonly state: CommandState;\n readonly isPending: boolean;\n readonly updateSearch: (query: string) => void;\n readonly setOptimisticActiveId: (id: ItemId | null) => void;\n /** O(1) membership check for filtered items — avoids O(n) Array.includes per item */\n readonly filteredIdSet: ReadonlySet<ItemId>;\n readonly rootId: CommandRootId;\n readonly listId: string;\n readonly inputId: string;\n readonly label: string;\n}\n\nexport const CommandContext: Context<CommandContextValue | null> =\n createContext<CommandContextValue | null>(null);\nCommandContext.displayName = 'CommandContext';\n\nexport interface CommandGroupContextValue {\n readonly groupId: string;\n readonly headingId: string;\n}\n\nexport const CommandGroupContext: Context<CommandGroupContextValue | null> =\n createContext<CommandGroupContextValue | null>(null);\nCommandGroupContext.displayName = 'CommandGroupContext';\n","'use client';\n\n// packages/command-react/src/async-items.tsx\n// <Command.AsyncItems> — use() hook for resolving async item sources with Suspense\n// React 19: use() for both context and promise resolution\n// Isolated declarations: explicit return types on all exports\n\nimport type { ReactNode } from 'react';\nimport { Suspense, use, useEffect, useRef } from 'react';\nimport type { CommandItem } from '../core/index.js';\nimport { CommandContext } from './context.js';\n\nexport interface CommandAsyncItemsProps {\n /** Promise that resolves to items */\n readonly items: Promise<readonly CommandItem[]>;\n /** Fallback content while loading */\n readonly fallback?: ReactNode;\n /** Render function for resolved items */\n readonly children: (items: readonly CommandItem[]) => ReactNode;\n}\n\n/** Inner component that suspends via use() until items resolve */\nfunction AsyncItemsInner({\n items: itemsPromise,\n children,\n}: {\n readonly items: Promise<readonly CommandItem[]>;\n readonly children: (items: readonly CommandItem[]) => ReactNode;\n}): ReactNode {\n const ctx = use(CommandContext);\n if (!ctx) {\n throw new Error('Command.AsyncItems must be used within a <Command> component');\n }\n\n // React 19 use() — suspends until items resolve\n const items: readonly CommandItem[] = use(itemsPromise);\n\n // Register loaded items with the machine\n useEffect(() => {\n ctx.machine.send({ type: 'ITEMS_LOADED', items });\n }, [ctx.machine, items]);\n\n return <>{children(items)}</>;\n}\n\nexport function CommandAsyncItems({\n items,\n fallback,\n children,\n}: CommandAsyncItemsProps): ReactNode {\n // Stabilize promise reference — only update when a genuinely new promise is passed\n // Prevents infinite re-suspension from unstable promise identity\n const stableRef = useRef(items);\n if (stableRef.current !== items) {\n stableRef.current = items;\n }\n\n return (\n <Suspense fallback={fallback}>\n <AsyncItemsInner items={stableRef.current}>{children}</AsyncItemsInner>\n </Suspense>\n );\n}\n","'use client';\n\n// packages/command-react/src/badge.tsx\n// <Command.Badge> — renders a category/type badge on items\n// React 19: ref as prop (no forwardRef)\n// Isolated declarations: explicit return types on all exports\n\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\n\nexport interface CommandBadgeProps extends ComponentPropsWithRef<'span'> {}\n\nexport function CommandBadge({ ref, children, ...props }: CommandBadgeProps): ReactNode {\n return (\n <span ref={ref} data-command-badge=\"\" {...props}>\n {children}\n </span>\n );\n}\n","'use client';\n\n// packages/command-react/src/hooks/use-command.ts\n// Core hook — useSyncExternalStore (native React 19), useTransition, useOptimistic, useId\n// Isolated declarations: explicit return types on all exports\n// Branded CommandRootId type for type-safe ID propagation\n\nimport {\n useCallback,\n useId,\n useMemo,\n useOptimistic,\n useSyncExternalStore,\n useTransition,\n} from 'react';\nimport type { CommandMachine, CommandState, ItemId } from '../../core/index.js';\nimport type { CommandRootId } from '../context.js';\n\nexport interface UseCommandReturn {\n readonly state: CommandState;\n readonly isPending: boolean;\n readonly updateSearch: (query: string) => void;\n readonly setOptimisticActiveId: (id: ItemId | null) => void;\n /** O(1) membership set for filtered items — used by Item component */\n readonly filteredIdSet: ReadonlySet<ItemId>;\n readonly id: CommandRootId;\n}\n\nexport function useCommand(machine: CommandMachine): UseCommandReturn {\n const id = useId() as CommandRootId;\n const [isPending, startTransition] = useTransition();\n\n // Native useSyncExternalStore — machine.subscribe is already compatible (returns cleanup fn)\n const state: CommandState = useSyncExternalStore(\n machine.subscribe,\n machine.getState,\n machine.getState, // server snapshot (same — SSR safe)\n );\n\n // O(1) membership set — rebuilt only when filteredIds changes (referential equality)\n const filteredIdSet: ReadonlySet<ItemId> = useMemo(\n () => new Set(state.filteredIds),\n [state.filteredIds],\n );\n\n // Optimistic active item — instant visual feedback before filter completes\n const [optimisticActiveId, setOptimisticActiveId] = useOptimistic<ItemId | null>(state.activeId);\n\n // Search wrapped in transition — input stays responsive during re-render\n const updateSearch = useCallback(\n (query: string): void => {\n startTransition(() => {\n machine.send({ type: 'SEARCH_CHANGE', query });\n });\n },\n [machine],\n );\n\n // Build merged state with optimistic activeId overlay\n const mergedState: CommandState =\n optimisticActiveId !== state.activeId ? { ...state, activeId: optimisticActiveId } : state;\n\n return {\n state: mergedState,\n isPending,\n updateSearch,\n setOptimisticActiveId,\n filteredIdSet,\n id,\n } satisfies UseCommandReturn;\n}\n","'use client';\n\n// packages/command-react/src/hooks/use-keyboard.ts\n// Keyboard navigation — event handler factory, attached to root element\n// Isolated declarations: explicit return types on all exports\n// Uses object lookup (ES2026 style) instead of switch for cleaner dispatch\n\nimport type { CommandMachine, CommandState } from '../../core/index.js';\n\n/** Valid navigation directions */\ntype NavigationDirection = 'next' | 'prev' | 'first' | 'last';\n\n/** Navigation key to machine direction mapping */\nconst NAVIGATION_KEYS: Readonly<Record<string, NavigationDirection>> = {\n ArrowDown: 'next',\n ArrowUp: 'prev',\n Home: 'first',\n End: 'last',\n};\n\n/** Create a keydown handler for command palette keyboard navigation */\nexport function createKeydownHandler(\n machine: CommandMachine,\n getState: () => CommandState,\n): (event: KeyboardEvent) => void {\n return (event: KeyboardEvent): void => {\n const { key } = event;\n const state = getState();\n\n // Navigation keys — ArrowDown/Up/Home/End\n const direction = NAVIGATION_KEYS[key];\n if (direction) {\n event.preventDefault();\n machine.send({ type: 'NAVIGATE', direction });\n return;\n }\n\n // Action keys\n switch (key) {\n case 'Enter': {\n event.preventDefault();\n const { activeId } = state;\n if (activeId) {\n machine.send({ type: 'ITEM_SELECT', id: activeId });\n }\n break;\n }\n case 'Backspace':\n // Pop page when input is empty and backspace is pressed\n if (state.search === '' && state.pageStack.length > 0) {\n event.preventDefault();\n machine.send({ type: 'PAGE_POP' });\n }\n break;\n case 'Escape':\n event.preventDefault();\n machine.send({ type: 'CLOSE' });\n break;\n }\n };\n}\n","'use client';\n\n// packages/command-react/src/dialog.tsx\n// <Command.Dialog> — Radix Dialog.Root + Dialog.Portal + Dialog.Overlay + Dialog.Content\n// @starting-style CSS animations, transition-behavior: allow-discrete, inert on background\n// Focus trap via Radix built-in focus management\n// ES2026: satisfies operator, branded types\n// Isolated declarations: explicit return types on all exports\n\nimport { Dialog } from 'radix-ui';\nimport type { ReactNode } from 'react';\nimport { useCallback, useEffect, useId, useMemo, useRef } from 'react';\nimport type { CommandMachineOptions } from '../core/index.js';\nimport { createCommandMachine } from '../core/index.js';\nimport type { CommandContextValue, CommandRootId } from './context.js';\nimport { CommandContext } from './context.js';\nimport { useCommand } from './hooks/use-command.js';\nimport { createKeydownHandler } from './hooks/use-keyboard.js';\n\nexport interface CommandDialogProps extends CommandMachineOptions {\n readonly children?: ReactNode;\n readonly className?: string;\n readonly overlayClassName?: string;\n readonly contentClassName?: string;\n readonly label?: string;\n readonly open?: boolean;\n readonly onOpenChange?: (open: boolean) => void;\n /** Container element for the portal (default: document.body) */\n readonly container?: HTMLElement | null;\n}\n\nexport function CommandDialog({\n children,\n className,\n overlayClassName,\n contentClassName,\n label = 'Command palette',\n open: controlledOpen,\n onOpenChange,\n container,\n ...machineOptions\n}: CommandDialogProps): ReactNode {\n const rootId = useId() as CommandRootId;\n const listId = `${rootId}-list`;\n const inputId = `${rootId}-input`;\n\n // CRITICAL: useRef for stable machine reference across renders\n const machineRef = useRef<ReturnType<typeof createCommandMachine> | null>(null);\n if (machineRef.current === null) {\n machineRef.current = createCommandMachine({\n ...machineOptions,\n open: controlledOpen ?? false,\n onOpenChange: (open: boolean): void => {\n onOpenChange?.(open);\n },\n });\n }\n const machine = machineRef.current;\n\n const { state, isPending, updateSearch, setOptimisticActiveId, filteredIdSet, id } =\n useCommand(machine);\n\n // Dispose machine on unmount — nulls ref so Strict Mode remount creates fresh machine\n useEffect(() => {\n return (): void => {\n machineRef.current?.[Symbol.dispose]();\n machineRef.current = null;\n };\n // eslint-disable-next-line -- machine is stable ref, dispose runs on unmount only\n }, []);\n\n // Keyboard navigation via document listener\n const handleKeyDown = useCallback(\n createKeydownHandler(machine, () => machine.getState()),\n [],\n );\n\n useEffect(() => {\n if (!state.open) return;\n document.addEventListener('keydown', handleKeyDown);\n return (): void => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [handleKeyDown, state.open]);\n\n // Sync controlled open prop — only send if machine state doesn't match\n // Uses ref to avoid state.open in deps (prevents render loops)\n const prevControlledOpen = useRef(controlledOpen);\n useEffect(() => {\n if (controlledOpen !== undefined && controlledOpen !== prevControlledOpen.current) {\n prevControlledOpen.current = controlledOpen;\n machine.send({ type: controlledOpen ? 'OPEN' : 'CLOSE' });\n }\n }, [controlledOpen, machine]);\n\n // Radix onOpenChange callback — syncs dialog state back to machine\n const handleRadixOpenChange = useCallback(\n (open: boolean): void => {\n machine.send({ type: open ? 'OPEN' : 'CLOSE' });\n },\n [machine],\n );\n\n const contextValue = useMemo<CommandContextValue>(\n () =>\n ({\n machine,\n state,\n isPending,\n updateSearch,\n setOptimisticActiveId,\n filteredIdSet,\n rootId: id,\n listId,\n inputId,\n label,\n }) satisfies CommandContextValue,\n [\n machine,\n state,\n isPending,\n updateSearch,\n setOptimisticActiveId,\n filteredIdSet,\n id,\n listId,\n inputId,\n label,\n ],\n );\n\n return (\n <Dialog.Root open={state.open} onOpenChange={handleRadixOpenChange}>\n <Dialog.Portal container={container}>\n {/* Overlay — GPU-composited @starting-style animation */}\n <Dialog.Overlay\n data-command-overlay=\"\"\n data-state={state.open ? 'open' : 'closed'}\n className={overlayClassName}\n />\n {/* Content — focus trap via Radix, @starting-style animation */}\n <Dialog.Content\n data-command-dialog=\"\"\n data-state={state.open ? 'open' : 'closed'}\n className={className}\n aria-label={label}\n onOpenAutoFocus={(e: Event): void => {\n // Prevent Radix default focus — we auto-focus the input below\n e.preventDefault();\n // Auto-focus the input when dialog opens\n const input = document.getElementById(inputId);\n input?.focus();\n }}\n >\n <Dialog.Title className=\"sr-only\">{label}</Dialog.Title>\n <Dialog.Description className=\"sr-only\">Type a command or search...</Dialog.Description>\n <CommandContext value={contextValue}>\n <div data-command-dialog-content=\"\" className={contentClassName}>\n <div data-command-root=\"\" role=\"search\" aria-label={label}>\n {children}\n </div>\n </div>\n </CommandContext>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","'use client';\n\n// packages/command-react/src/empty.tsx\n// <Command.Empty> — role=\"status\", aria-live=\"polite\"\n// React 19: use() for context, ref as prop\n// Isolated declarations: explicit return types on all exports\n\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { use } from 'react';\nimport { CommandContext } from './context.js';\n\nexport interface CommandEmptyProps extends ComponentPropsWithRef<'div'> {}\n\nexport function CommandEmpty({ ref, children, ...props }: CommandEmptyProps): ReactNode {\n const ctx = use(CommandContext);\n if (!ctx) {\n throw new Error('Command.Empty must be used within a <Command> component');\n }\n\n // Only show when there's a search query but no results\n if (ctx.state.filteredCount > 0 || ctx.state.loading) return null;\n\n return (\n <div ref={ref} data-command-empty=\"\" role=\"status\" aria-live=\"polite\" {...props}>\n {children}\n </div>\n );\n}\n","'use client';\n\n// packages/command-react/src/hooks/use-register.ts\n// Item/group registration — useInsertionEffect for paint-before-commit\n// Isolated declarations: explicit return types on all exports\n// Branded types: ItemId / GroupId from core\n\nimport { use, useId, useInsertionEffect } from 'react';\nimport type { CommandGroup, CommandItem, GroupId, ItemId } from '../../core/index.js';\nimport { groupId, itemId } from '../../core/index.js';\nimport { CommandContext } from '../context.js';\n\n/** Options for item registration */\nexport interface RegisterItemOptions {\n readonly keywords?: readonly string[];\n readonly groupId?: string;\n readonly shortcut?: string;\n readonly disabled?: boolean;\n readonly onSelect?: () => void;\n readonly data?: Readonly<Record<string, unknown>>;\n readonly forceId?: string;\n}\n\n/** Register a command item with the machine — auto-deregisters on unmount */\nexport function useRegisterItem(value: string, options?: RegisterItemOptions): ItemId {\n const ctx = use(CommandContext);\n if (!ctx) {\n throw new Error('useRegisterItem must be used within a <Command> component');\n }\n\n const generatedId = useId();\n const id: ItemId = itemId(options?.forceId ?? generatedId);\n\n // useInsertionEffect ensures registration happens before paint\n useInsertionEffect(() => {\n const item: CommandItem = {\n id,\n value,\n keywords: options?.keywords,\n groupId: options?.groupId ? groupId(options.groupId) : undefined,\n shortcut: options?.shortcut,\n disabled: options?.disabled,\n onSelect: options?.onSelect,\n data: options?.data,\n };\n\n ctx.machine.send({ type: 'REGISTER_ITEM', item });\n\n return (): void => {\n ctx.machine.send({ type: 'UNREGISTER_ITEM', id });\n };\n }, [\n ctx.machine,\n id,\n value,\n options?.groupId,\n options?.data,\n options?.disabled,\n options?.keywords,\n options?.onSelect,\n options?.shortcut,\n ]);\n\n return id;\n}\n\n/** Options for group registration */\nexport interface RegisterGroupOptions {\n readonly priority?: number;\n readonly forceId?: string;\n}\n\n/** Register a command group with the machine — auto-deregisters on unmount */\nexport function useRegisterGroup(heading?: string, options?: RegisterGroupOptions): GroupId {\n const ctx = use(CommandContext);\n if (!ctx) {\n throw new Error('useRegisterGroup must be used within a <Command> component');\n }\n\n const generatedId = useId();\n const id: GroupId = groupId(options?.forceId ?? generatedId);\n\n useInsertionEffect(() => {\n const group: CommandGroup = {\n id,\n heading,\n priority: options?.priority,\n };\n\n ctx.machine.send({ type: 'REGISTER_GROUP', group });\n\n return (): void => {\n ctx.machine.send({ type: 'UNREGISTER_GROUP', id });\n };\n }, [ctx.machine, id, heading, options?.priority]);\n\n return id;\n}\n","'use client';\n\n// packages/command-react/src/group.tsx\n// <Command.Group> — role=\"group\" + aria-labelledby with useId() heading ID\n// React 19: use() for context, ref as prop\n// Isolated declarations: explicit return types on all exports\n\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { use, useId, useMemo } from 'react';\nimport type { CommandGroupContextValue } from './context.js';\nimport { CommandContext, CommandGroupContext } from './context.js';\nimport { useRegisterGroup } from './hooks/use-register.js';\n\nexport interface CommandGroupProps extends ComponentPropsWithRef<'div'> {\n /** Heading text displayed above the group */\n readonly heading?: string;\n /** Sort priority (lower = higher in list) */\n readonly priority?: number;\n /** Force a specific ID */\n readonly forceId?: string;\n}\n\nexport function CommandGroup({\n ref,\n children,\n heading,\n priority,\n forceId,\n ...props\n}: CommandGroupProps): ReactNode {\n const ctx = use(CommandContext);\n if (!ctx) {\n throw new Error('Command.Group must be used within a <Command> component');\n }\n\n const headingId: string = useId();\n const groupId = useRegisterGroup(heading, {\n ...(priority !== undefined && { priority }),\n ...(forceId !== undefined && { forceId }),\n });\n\n // Check if any items in this group are visible\n const groupItems = ctx.state.groupedIds.get(groupId);\n const hasVisibleItems: boolean = groupItems !== undefined && groupItems.length > 0;\n\n const groupContext = useMemo<CommandGroupContextValue>(\n () => ({ groupId: groupId as string, headingId }) satisfies CommandGroupContextValue,\n [groupId, headingId],\n );\n\n if (!hasVisibleItems) return null;\n\n return (\n <CommandGroupContext value={groupContext}>\n <div\n ref={ref}\n data-command-group=\"\"\n role=\"group\"\n aria-labelledby={heading ? headingId : undefined}\n {...props}\n >\n {heading && (\n <div data-command-group-heading=\"\" id={headingId} aria-hidden>\n {heading}\n </div>\n )}\n <div data-command-group-items=\"\">{children}</div>\n </div>\n </CommandGroupContext>\n );\n}\n","'use client';\n\n// packages/command-react/src/highlight.tsx\n// <Command.Highlight> — renders search query match highlighting\n// ES2026: Iterator Helpers (.map, .flatMap, .toArray) for range processing\n// Isolated declarations: explicit return types on all exports\n\nimport type { ReactNode } from 'react';\nimport { useMemo } from 'react';\n\nexport interface CommandHighlightProps {\n /** The full text to display */\n readonly text: string;\n /** Match ranges from search scorer — [start, end] tuples */\n readonly ranges: ReadonlyArray<readonly [start: number, end: number]>;\n /** Custom className for highlighted segments */\n readonly highlightClassName?: string;\n}\n\nexport function CommandHighlight({\n text,\n ranges,\n highlightClassName,\n}: CommandHighlightProps): ReactNode {\n // Memoize the highlighted parts to avoid recomputation on parent re-renders\n const parts: ReactNode = useMemo(() => {\n if (ranges.length === 0) return text;\n\n // Sort ranges by start position using Iterator Helpers\n const sorted = Iterator.from(ranges)\n .toArray()\n .sort((a, b) => a[0] - b[0]);\n\n const segments: ReactNode[] = [];\n let lastEnd = 0;\n\n // Build segments from sorted ranges using Iterator Helpers\n Iterator.from(sorted).forEach(([start, end], i) => {\n // Text before the match\n if (start > lastEnd) {\n segments.push(text.slice(lastEnd, start));\n }\n\n // Highlighted match\n segments.push(\n <mark key={i} data-command-highlight=\"\" className={highlightClassName}>\n {text.slice(start, end)}\n </mark>,\n );\n\n lastEnd = end;\n });\n\n // Remaining text after last match\n if (lastEnd < text.length) {\n segments.push(text.slice(lastEnd));\n }\n\n return <>{segments}</>;\n }, [text, ranges, highlightClassName]);\n\n return parts;\n}\n","'use client';\n\n// packages/command-react/src/input.tsx\n// <Command.Input> — stable callbacks, ARIA combobox role\n// React 19: use() for context, ref as prop (no forwardRef)\n// Isolated declarations: explicit return types on all exports\n\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { use, useCallback } from 'react';\nimport { CommandContext } from './context.js';\n\nexport interface CommandInputProps\n extends Omit<ComponentPropsWithRef<'input'>, 'value' | 'onChange' | 'type' | 'role'> {\n readonly onValueChange?: (value: string) => void;\n}\n\nexport function CommandInput({\n ref,\n placeholder = 'Search...',\n onValueChange,\n ...props\n}: CommandInputProps): ReactNode {\n const ctx = use(CommandContext);\n if (!ctx) {\n throw new Error('Command.Input must be used within a <Command> component');\n }\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>): void => {\n const { value } = event.target;\n ctx.updateSearch(value);\n onValueChange?.(value);\n },\n [ctx.updateSearch, onValueChange],\n );\n\n return (\n <input\n ref={ref}\n data-command-input=\"\"\n type=\"text\"\n role=\"combobox\"\n aria-expanded={ctx.state.filteredCount > 0}\n aria-controls={ctx.listId}\n aria-activedescendant={ctx.state.activeId ?? undefined}\n aria-autocomplete=\"list\"\n aria-label={ctx.label}\n id={ctx.inputId}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n spellCheck={false}\n placeholder={placeholder}\n value={ctx.state.search}\n onChange={handleChange}\n {...props}\n />\n );\n}\n","'use client';\n\n// packages/command-react/src/item.tsx\n// <Command.Item> — ref as prop (no forwardRef), useId for ARIA\n// React 19: use() for context\n// Isolated declarations: explicit return types on all exports\n\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { use, useCallback, useRef } from 'react';\nimport { CommandContext } from './context.js';\nimport { useRegisterItem } from './hooks/use-register.js';\n\nexport interface CommandItemProps extends Omit<ComponentPropsWithRef<'div'>, 'onSelect' | 'value'> {\n readonly value: string;\n readonly keywords?: readonly string[];\n readonly onSelect?: () => void;\n readonly disabled?: boolean;\n readonly shortcut?: string;\n readonly forceId?: string;\n}\n\nexport function CommandItem({\n ref,\n children,\n value,\n keywords,\n onSelect,\n disabled = false,\n shortcut,\n forceId,\n ...props\n}: CommandItemProps): ReactNode {\n const ctx = use(CommandContext);\n if (!ctx) {\n throw new Error('Command.Item must be used within a <Command> component');\n }\n\n const id = useRegisterItem(value, {\n ...(keywords !== undefined && { keywords }),\n ...(shortcut !== undefined && { shortcut }),\n disabled,\n ...(onSelect !== undefined && { onSelect }),\n ...(forceId !== undefined && { forceId }),\n });\n\n const isActive: boolean = ctx.state.activeId === id;\n // O(1) Set.has instead of O(n) Array.includes — critical for large lists\n const isFiltered: boolean = ctx.filteredIdSet.has(id);\n\n const handleSelect = useCallback((): void => {\n if (!disabled) {\n ctx.machine.send({ type: 'ITEM_SELECT', id });\n }\n }, [ctx.machine, id, disabled]);\n\n // Use ref for activeId to avoid re-creating callback on every active change\n const activeIdRef = useRef(ctx.state.activeId);\n activeIdRef.current = ctx.state.activeId;\n\n const handlePointerMove = useCallback((): void => {\n if (!disabled && activeIdRef.current !== id) {\n ctx.setOptimisticActiveId(id);\n ctx.machine.send({ type: 'ITEM_ACTIVATE', id });\n }\n }, [ctx.machine, ctx.setOptimisticActiveId, id, disabled]);\n\n if (!isFiltered) return null;\n\n return (\n <div\n ref={ref}\n data-command-item=\"\"\n data-active={isActive ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n data-value={value}\n id={id}\n role=\"option\"\n aria-selected={isActive}\n aria-disabled={disabled || undefined}\n aria-keyshortcuts={shortcut ?? undefined}\n onClick={handleSelect}\n onPointerMove={handlePointerMove}\n {...props}\n >\n {children}\n </div>\n );\n}\n","'use client';\n\n// packages/command-react/src/hooks/use-virtualizer.ts\n// Virtualization hook — ResizeObserver + requestIdleCallback for measurement\n// GPU-composited transforms via translateY, content-visibility: auto for off-screen items\n// ES2026: Iterator Helpers (.map, .filter, .reduce), Math.sumPrecise\n// Isolated declarations: explicit return types on all exports\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nexport interface VirtualizerOptions {\n readonly count: number;\n readonly estimateSize: number;\n readonly overscan?: number;\n readonly scrollElement: HTMLElement | null;\n readonly enabled?: boolean;\n}\n\nexport interface VirtualItem {\n readonly index: number;\n readonly start: number;\n readonly size: number;\n readonly key: number;\n}\n\nexport interface VirtualizerReturn {\n readonly virtualItems: readonly VirtualItem[];\n readonly totalSize: number;\n readonly scrollToIndex: (index: number) => void;\n readonly measureElement: (element: HTMLElement | null) => void;\n}\n\nexport function useVirtualizer(options: VirtualizerOptions): VirtualizerReturn {\n const { count, estimateSize, overscan = 8, scrollElement, enabled = true } = options;\n const [scrollOffset, setScrollOffset] = useState<number>(0);\n const [containerHeight, setContainerHeight] = useState<number>(0);\n const measuredSizes = useRef<Map<number, number>>(new Map<number, number>());\n const [measureVersion, setMeasureVersion] = useState<number>(0);\n\n // ResizeObserver for container measurement\n useEffect(() => {\n if (!scrollElement || !enabled) return;\n\n const observer = new ResizeObserver((entries: ResizeObserverEntry[]): void => {\n // Single observed element — take the last entry's height\n const lastEntry = entries.at(-1);\n if (lastEntry) setContainerHeight(lastEntry.contentRect.height);\n });\n\n observer.observe(scrollElement);\n return (): void => {\n observer.disconnect();\n };\n }, [scrollElement, enabled]);\n\n // Scroll event listener — passive for GPU-composited scrolling\n useEffect(() => {\n if (!scrollElement || !enabled) return;\n\n const handleScroll = (): void => {\n setScrollOffset(scrollElement.scrollTop);\n };\n\n scrollElement.addEventListener('scroll', handleScroll, { passive: true });\n return (): void => {\n scrollElement.removeEventListener('scroll', handleScroll);\n };\n }, [scrollElement, enabled]);\n\n // Get item size — O(1) via measured cache or estimate fallback\n const getItemSize = useCallback(\n (index: number): number => measuredSizes.current.get(index) ?? estimateSize,\n [estimateSize],\n );\n\n // Memoize totalSize — Iterator Helpers + Math.sumPrecise (ES2026)\n // measureVersion triggers recalc when elements are measured\n const totalSize: number = useMemo((): number => {\n void measureVersion; // dependency trigger\n if (!enabled) return 0;\n const sizes = Iterator.from({\n [Symbol.iterator]: function* (): Generator<number> {\n for (let i = 0; i < count; i++) yield getItemSize(i);\n },\n }).toArray();\n return Math.sumPrecise(sizes);\n }, [enabled, count, getItemSize, measureVersion]);\n\n // Memoize virtual items computation\n const virtualItems: readonly VirtualItem[] = useMemo((): readonly VirtualItem[] => {\n if (!enabled || containerHeight <= 0) return [];\n\n // Find the first visible item via linear scan\n let offset = 0;\n let startIdx = 0;\n while (startIdx < count && offset + getItemSize(startIdx) < scrollOffset) {\n offset += getItemSize(startIdx);\n startIdx++;\n }\n\n // Apply overscan — recalculate offset with Iterator Helpers + Math.sumPrecise\n startIdx = Math.max(0, startIdx - overscan);\n const offsetSizes = Iterator.from({\n [Symbol.iterator]: function* (): Generator<number> {\n for (let i = 0; i < startIdx; i++) yield getItemSize(i);\n },\n }).toArray();\n offset = Math.sumPrecise(offsetSizes);\n\n // Collect visible items + overscan\n const items: VirtualItem[] = [];\n let currentOffset = offset;\n const endOffset = scrollOffset + containerHeight;\n\n for (let i = startIdx; i < count; i++) {\n const size = getItemSize(i);\n items.push({\n index: i,\n start: currentOffset,\n size,\n key: i,\n } satisfies VirtualItem);\n currentOffset += size;\n\n // Stop after overscan past the viewport\n if (currentOffset > endOffset + overscan * estimateSize) break;\n }\n\n return items;\n }, [enabled, containerHeight, count, scrollOffset, overscan, estimateSize, getItemSize]);\n\n // Scroll to a specific index — Math.sumPrecise (ES2026) + smooth GPU-composited scrolling\n const scrollToIndex = useCallback(\n (index: number): void => {\n if (!scrollElement || !enabled) return;\n\n const clampedIndex = Math.min(index, count);\n const sizes = Iterator.from({\n [Symbol.iterator]: function* (): Generator<number> {\n for (let i = 0; i < clampedIndex; i++) yield getItemSize(i);\n },\n }).toArray();\n const targetOffset: number = Math.sumPrecise(sizes);\n\n scrollElement.scrollTo({ top: targetOffset, behavior: 'smooth' });\n },\n [scrollElement, enabled, count, getItemSize],\n );\n\n // Measure an element — deferred via requestIdleCallback, triggers re-render on size change\n const measureElement = useCallback(\n (element: HTMLElement | null): void => {\n if (!element || !enabled) return;\n\n const index = Number(element.dataset.index);\n if (Number.isNaN(index)) return;\n\n const measure = (): void => {\n const height = element.getBoundingClientRect().height;\n if (height > 0 && measuredSizes.current.get(index) !== height) {\n measuredSizes.current.set(index, height);\n // Trigger re-render so virtualItems and totalSize recompute with actual sizes\n setMeasureVersion((v) => v + 1);\n }\n };\n\n if ('requestIdleCallback' in globalThis) {\n requestIdleCallback(measure);\n } else {\n setTimeout(measure, 0);\n }\n },\n [enabled],\n );\n\n return {\n virtualItems,\n totalSize,\n scrollToIndex,\n measureElement,\n } satisfies VirtualizerReturn;\n}\n","'use client';\n\n// packages/command-react/src/list.tsx\n// <Command.List> — auto-virtualization when filteredCount > 100, ResizeObserver for height\n// GPU-composited scroll container, aria-live announcements, scroll-to-active on keyboard nav\n// React 19: use() for context, ref as prop (no forwardRef)\n// ES2026: Iterator Helpers for virtual item mapping\n// Isolated declarations: explicit return types on all exports\n\nimport type { ComponentPropsWithRef, CSSProperties, ReactNode, RefObject } from 'react';\nimport { use, useCallback, useEffect, useRef, useState } from 'react';\nimport { CommandContext } from './context.js';\nimport { useVirtualizer } from './hooks/use-virtualizer.js';\n\nexport interface CommandListProps extends ComponentPropsWithRef<'div'> {\n /** Override automatic virtualization (default: auto at >100 items, false to opt-out) */\n readonly virtualize?: boolean;\n /** Estimated item height for virtualization (default: 44px) */\n readonly estimateSize?: number;\n /** Overscan count for virtualization (default: 8) */\n readonly overscan?: number;\n}\n\nexport function CommandList({\n ref,\n children,\n virtualize,\n estimateSize = 44,\n overscan = 8,\n style,\n ...props\n}: CommandListProps): ReactNode {\n const ctx = use(CommandContext);\n if (!ctx) {\n throw new Error('Command.List must be used within a <Command> component');\n }\n\n const innerRef = useRef<HTMLDivElement>(null);\n const scrollRef = useRef<HTMLDivElement>(null);\n const [height, setHeight] = useState<number>(0);\n\n // Auto-virtualize when filteredCount > 100 (cmdk threshold)\n const shouldVirtualize: boolean = virtualize ?? ctx.state.filteredCount > 100;\n\n // ResizeObserver for --command-list-height CSS custom property\n useEffect(() => {\n const element = innerRef.current;\n if (!element) return;\n\n const observer = new ResizeObserver((entries: ResizeObserverEntry[]): void => {\n // Single observed element — take the last entry's height\n const lastEntry = entries.at(-1);\n if (lastEntry) setHeight(lastEntry.contentRect.height);\n });\n\n observer.observe(element);\n return (): void => {\n observer.disconnect();\n };\n }, []);\n\n // Virtualizer — only active when shouldVirtualize is true\n const virtualizer = useVirtualizer({\n count: ctx.state.filteredCount,\n estimateSize,\n overscan,\n scrollElement: shouldVirtualize ? scrollRef.current : null,\n enabled: shouldVirtualize,\n });\n\n // Scroll-to-active on keyboard navigation\n const prevActiveId = useRef<string | null>(ctx.state.activeId);\n useEffect(() => {\n if (ctx.state.activeId && ctx.state.activeId !== prevActiveId.current) {\n prevActiveId.current = ctx.state.activeId;\n\n if (shouldVirtualize) {\n // Virtual mode: use virtualizer scrollToIndex\n const idx = ctx.state.filteredIds.indexOf(ctx.state.activeId);\n if (idx >= 0) virtualizer.scrollToIndex(idx);\n } else {\n // DOM mode: scrollIntoView on the active element\n const el = scrollRef.current?.querySelector(`[id=\"${CSS.escape(ctx.state.activeId)}\"]`);\n el?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n }\n }\n }, [ctx.state.activeId, ctx.state.filteredIds, shouldVirtualize, virtualizer]);\n\n const mergedStyle: CSSProperties & Record<`--${string}`, string> = {\n ...style,\n '--command-list-height': `${height.toFixed(1)}px`,\n };\n\n // Ref merge callback — combines internal scrollRef with external ref prop\n const setScrollRef = useCallback(\n (el: HTMLDivElement | null): void => {\n (scrollRef as RefObject<HTMLDivElement | null>).current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) (ref as RefObject<HTMLDivElement | null>).current = el;\n },\n [ref],\n );\n\n return (\n <div\n ref={setScrollRef}\n data-command-list=\"\"\n role=\"listbox\"\n aria-label={ctx.label}\n aria-busy={ctx.state.loading}\n id={ctx.listId}\n style={mergedStyle}\n {...props}\n >\n {shouldVirtualize ? (\n // Virtualized rendering — GPU-composited translateY positioning\n <div\n data-command-list-virtual=\"\"\n style={{ height: `${virtualizer.totalSize}px`, position: 'relative' }}\n >\n {virtualizer.virtualItems.map((vItem) => (\n <div\n key={vItem.key}\n data-command-virtual-item=\"\"\n data-index={vItem.index}\n ref={virtualizer.measureElement}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n translate: `0 ${vItem.start}px`,\n }}\n />\n ))}\n {/* Children still render for React reconciliation */}\n {children}\n </div>\n ) : (\n <div ref={innerRef} data-command-list-inner=\"\">\n {children}\n </div>\n )}\n {/* aria-live region for screen reader announcements */}\n <div\n aria-live=\"polite\"\n aria-atomic\n role=\"status\"\n data-command-aria-live=\"\"\n className=\"sr-only\"\n >\n {ctx.state.filteredCount} result{ctx.state.filteredCount !== 1 ? 's' : ''} available.\n </div>\n </div>\n );\n}\n","'use client';\n\n// packages/command-react/src/loading.tsx\n// <Command.Loading> — aria-busy, Suspense boundary integration\n// React 19: use() for context, ref as prop\n// Isolated declarations: explicit return types on all exports\n\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { use } from 'react';\nimport { CommandContext } from './context.js';\n\nexport interface CommandLoadingProps extends ComponentPropsWithRef<'div'> {\n /** Override the loading state detection */\n readonly loading?: boolean;\n}\n\nexport function CommandLoading({\n ref,\n children,\n loading: loadingOverride,\n ...props\n}: CommandLoadingProps): ReactNode {\n const ctx = use(CommandContext);\n if (!ctx) {\n throw new Error('Command.Loading must be used within a <Command> component');\n }\n\n const isLoading: boolean = loadingOverride ?? ctx.state.loading ?? ctx.isPending;\n\n if (!isLoading) return null;\n\n return (\n <div ref={ref} data-command-loading=\"\" aria-busy aria-live=\"assertive\" role=\"status\" {...props}>\n {children}\n </div>\n );\n}\n","'use client';\n\n// packages/command-react/src/page.tsx\n// <Command.Page> — page stack management, View Transitions API\n// React 19: use() for context\n// Isolated declarations: explicit return types on all exports\n\nimport type { ReactNode } from 'react';\nimport { use } from 'react';\nimport { CommandContext } from './context.js';\n\n/** Branded page identifier */\nexport type CommandPageId = string & { readonly __brand: 'CommandPageId' };\n\nexport interface CommandPageProps {\n /** Page identifier */\n readonly id: CommandPageId | string;\n readonly children?: ReactNode;\n}\n\nexport function CommandPage({ id, children }: CommandPageProps): ReactNode {\n const ctx = use(CommandContext);\n if (!ctx) {\n throw new Error('Command.Page must be used within a <Command> component');\n }\n\n // Only render the active page\n if (ctx.state.page !== id) return null;\n\n return (\n <div data-command-page=\"\" data-command-page-id={id}>\n {children}\n </div>\n );\n}\n","'use client';\n\n// packages/command-react/src/separator.tsx\n// <Command.Separator> — role=\"separator\"\n// React 19: ref as prop (no forwardRef)\n// Isolated declarations: explicit return types on all exports\n\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\n\nexport interface CommandSeparatorProps extends ComponentPropsWithRef<'div'> {}\n\nexport function CommandSeparator({ ref, ...props }: CommandSeparatorProps): ReactNode {\n return <div ref={ref} data-command-separator=\"\" role=\"separator\" {...props} />;\n}\n","'use client';\n\n// packages/command-react/src/shortcut.tsx\n// <Command.Shortcut> — renders platform-appropriate key labels\n// React 19: ref as prop (no forwardRef)\n// Isolated declarations: explicit return types on all exports\n\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { useMemo } from 'react';\nimport { formatShortcut, parseShortcut } from '../core/index.js';\n\nexport interface CommandShortcutProps extends ComponentPropsWithRef<'kbd'> {\n /** Shortcut string to display (e.g., \"Mod+K\"). If not provided, reads from nearest Command.Item. */\n readonly shortcut?: string;\n}\n\nexport function CommandShortcut({\n ref,\n shortcut,\n children,\n ...props\n}: CommandShortcutProps): ReactNode {\n // Memoize the parsed + formatted shortcut to avoid re-parsing on every render\n const displayText: ReactNode = useMemo(\n () => (shortcut ? formatShortcut(parseShortcut(shortcut)) : children),\n [shortcut, children],\n );\n\n return (\n <kbd ref={ref} data-command-shortcut=\"\" {...props}>\n {displayText}\n </kbd>\n );\n}\n","'use client';\n\n// packages/command-react/src/command.tsx\n// <Command.Root> — useTransition for search, React Compiler compatible\n// Keyboard navigation is attached to the root element, not called as a hook before context\n// ES2026: satisfies operator, branded types\n// Isolated declarations: explicit return types on all exports\n\nimport type { ReactNode } from 'react';\nimport { useCallback, useEffect, useId, useMemo, useRef } from 'react';\nimport type { CommandMachineOptions } from '../core/index.js';\nimport { createCommandMachine } from '../core/index.js';\nimport { CommandActivity } from './activity.js';\nimport { CommandAsyncItems } from './async-items.js';\nimport { CommandBadge } from './badge.js';\nimport type { CommandContextValue, CommandRootId } from './context.js';\nimport { CommandContext } from './context.js';\nimport { CommandDialog } from './dialog.js';\nimport { CommandEmpty } from './empty.js';\nimport { CommandGroup } from './group.js';\nimport { CommandHighlight } from './highlight.js';\nimport { useCommand } from './hooks/use-command.js';\nimport { createKeydownHandler } from './hooks/use-keyboard.js';\nimport { CommandInput } from './input.js';\nimport { CommandItem } from './item.js';\nimport { CommandList } from './list.js';\nimport { CommandLoading } from './loading.js';\nimport { CommandPage } from './page.js';\nimport { CommandSeparator } from './separator.js';\nimport { CommandShortcut } from './shortcut.js';\n\nexport interface CommandRootProps extends CommandMachineOptions {\n readonly children?: ReactNode;\n readonly className?: string;\n readonly label?: string;\n}\n\nfunction CommandRoot({\n children,\n className,\n label = 'Command palette',\n ...machineOptions\n}: CommandRootProps): ReactNode {\n const rootId = useId() as CommandRootId;\n const listId = `${rootId}-list`;\n const inputId = `${rootId}-input`;\n const rootRef = useRef<HTMLDivElement>(null);\n\n // Create machine once — stable reference across renders\n const machineRef = useRef<ReturnType<typeof createCommandMachine> | null>(null);\n if (machineRef.current === null) {\n machineRef.current = createCommandMachine(machineOptions);\n }\n const machine = machineRef.current;\n\n const { state, isPending, updateSearch, setOptimisticActiveId, filteredIdSet, id } =\n useCommand(machine);\n\n // Dispose machine on unmount — prevents resource leaks (scheduler, emitter, search engine)\n // Nulls the ref so Strict Mode remount creates a fresh machine\n useEffect(() => {\n return (): void => {\n machineRef.current?.[Symbol.dispose]();\n machineRef.current = null;\n };\n // eslint-disable-next-line -- machine is stable ref, dispose runs on unmount only\n }, []);\n\n // Attach keyboard navigation to the root element — avoids hook-before-context issue\n const handleKeyDown = useCallback(\n createKeydownHandler(machine, () => machine.getState()),\n [],\n );\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyDown);\n return (): void => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [handleKeyDown]);\n\n const contextValue = useMemo<CommandContextValue>(\n () =>\n ({\n machine,\n state,\n isPending,\n updateSearch,\n setOptimisticActiveId,\n filteredIdSet,\n rootId: id,\n listId,\n inputId,\n label,\n }) satisfies CommandContextValue,\n [\n machine,\n state,\n isPending,\n updateSearch,\n setOptimisticActiveId,\n filteredIdSet,\n id,\n listId,\n inputId,\n label,\n ],\n );\n\n return (\n <CommandContext value={contextValue}>\n <div\n ref={rootRef}\n data-command-root=\"\"\n data-command-state={state.open ? 'open' : 'closed'}\n className={className}\n role=\"search\"\n aria-label={label}\n >\n {children}\n </div>\n </CommandContext>\n );\n}\n\n/** Compound component namespace */\nexport const Command: typeof CommandRoot & {\n readonly Input: typeof CommandInput;\n readonly List: typeof CommandList;\n readonly Item: typeof CommandItem;\n readonly Group: typeof CommandGroup;\n readonly Empty: typeof CommandEmpty;\n readonly Loading: typeof CommandLoading;\n readonly Separator: typeof CommandSeparator;\n readonly Dialog: typeof CommandDialog;\n readonly Highlight: typeof CommandHighlight;\n readonly Shortcut: typeof CommandShortcut;\n readonly Badge: typeof CommandBadge;\n readonly Page: typeof CommandPage;\n readonly AsyncItems: typeof CommandAsyncItems;\n readonly Activity: typeof CommandActivity;\n} = Object.assign(CommandRoot, {\n Input: CommandInput,\n List: CommandList,\n Item: CommandItem,\n Group: CommandGroup,\n Empty: CommandEmpty,\n Loading: CommandLoading,\n Separator: CommandSeparator,\n Dialog: CommandDialog,\n Highlight: CommandHighlight,\n Shortcut: CommandShortcut,\n Badge: CommandBadge,\n Page: CommandPage,\n AsyncItems: CommandAsyncItems,\n Activity: CommandActivity,\n} as const);\n","'use client';\n\n// packages/command-react/src/error-boundary.tsx\n// Error boundary — class component (required by React for componentDidCatch)\n// Isolated declarations: explicit return types on all exports\n\nimport { Component, type ErrorInfo, type ReactNode } from 'react';\n\nexport interface CommandErrorBoundaryProps {\n readonly children: ReactNode;\n readonly fallback?: ReactNode | ((error: Error) => ReactNode);\n readonly onError?: (error: Error, errorInfo: ErrorInfo) => void;\n}\n\ninterface CommandErrorBoundaryState {\n readonly error: Error | null;\n}\n\n/** Initial state — no error captured */\nconst INITIAL_STATE: CommandErrorBoundaryState = {\n error: null,\n} as const satisfies CommandErrorBoundaryState;\n\nexport class CommandErrorBoundary extends Component<\n CommandErrorBoundaryProps,\n CommandErrorBoundaryState\n> {\n override state: CommandErrorBoundaryState = INITIAL_STATE;\n\n static getDerivedStateFromError(error: Error): CommandErrorBoundaryState {\n return { error } satisfies CommandErrorBoundaryState;\n }\n\n override componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n this.props.onError?.(error, errorInfo);\n }\n\n override render(): ReactNode {\n if (this.state.error) {\n const { fallback } = this.props;\n if (typeof fallback === 'function') return fallback(this.state.error);\n if (fallback) return fallback;\n return null;\n }\n return this.props.children;\n }\n}\n","'use client';\n\n// packages/command-react/src/hooks/use-command-state.ts\n// Derived state selectors — useSyncExternalStore for proper render optimization\n// Isolated declarations: explicit return types on all exports\n\nimport { use, useCallback, useSyncExternalStore } from 'react';\nimport type { CommandState } from '../../core/index.js';\nimport { CommandContext } from '../context.js';\n\n/** Get the full command state with proper subscription */\nexport function useCommandState(): CommandState;\n/** Get a selected slice of command state — only re-renders when selected value changes */\nexport function useCommandState<T>(selector: (state: CommandState) => T): T;\nexport function useCommandState<T>(selector?: (state: CommandState) => T): CommandState | T {\n const ctx = use(CommandContext);\n if (!ctx) {\n throw new Error('useCommandState must be used within a <Command> component');\n }\n\n const getSnapshot = useCallback(\n (): CommandState | T => (selector ? selector(ctx.machine.getState()) : ctx.machine.getState()),\n [ctx.machine, selector],\n );\n\n return useSyncExternalStore(ctx.machine.subscribe, getSnapshot, getSnapshot);\n}\n","'use client';\n\n// packages/command-react/src/hooks/use-devtools.ts\n// Development-only devtools bridge — tree-shaken in production\n// Isolated declarations: explicit return types on all exports\n\nimport { use, useEffect, useRef } from 'react';\nimport { CommandContext } from '../context.js';\n\ndeclare const __DEV__: boolean;\n\ninterface DevtoolsState {\n readonly registeredItems: number;\n readonly filteredItems: number;\n readonly searchQuery: string;\n readonly activeId: string | null;\n readonly page: string;\n readonly pageStack: readonly string[];\n readonly open: boolean;\n readonly loading: boolean;\n}\n\n/** Branded key for the global devtools instance map */\nconst DEVTOOLS_KEY = '__CRIMSON_COMMAND_DEVTOOLS__' as const;\n\n/** Type-safe global devtools registry */\ntype DevtoolsRegistry = Map<string, DevtoolsState>;\n\n/**\n * Exposes command palette internals to browser devtools.\n * Only active in development — completely tree-shaken in production builds.\n *\n * @example\n * ```tsx\n * function MyPalette() {\n * useCommandDevtools('main');\n * return <Command>...</Command>;\n * }\n * ```\n */\nexport function useCommandDevtools(label: string = 'default'): void {\n if (!__DEV__) return;\n\n // eslint-disable-next-line react-hooks/rules-of-hooks -- __DEV__ is compile-time constant\n const ctx = use(CommandContext);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const stateRef = useRef<DevtoolsState | null>(null);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n if (!ctx) return;\n\n const update = (): void => {\n const s = ctx.state;\n const devState: DevtoolsState = {\n registeredItems: s.filteredCount,\n filteredItems: s.filteredIds.length,\n searchQuery: s.search,\n activeId: s.activeId,\n page: s.page,\n pageStack: s.pageStack,\n open: s.open,\n loading: s.loading,\n } satisfies DevtoolsState;\n stateRef.current = devState;\n\n // Use Map.groupBy-style registry via global singleton\n const globals = globalThis as Record<string, unknown>;\n if (!globals[DEVTOOLS_KEY]) {\n globals[DEVTOOLS_KEY] = new Map<string, DevtoolsState>();\n }\n const instances: DevtoolsRegistry = globals[DEVTOOLS_KEY] as DevtoolsRegistry;\n instances.set(label, devState);\n\n globalThis.dispatchEvent?.(\n new CustomEvent('crimson-command-devtools', { detail: { label, state: devState } }),\n );\n };\n\n const unsub = ctx.machine.subscribe(update);\n update();\n\n return (): void => {\n unsub();\n const instances = (globalThis as Record<string, unknown>)[DEVTOOLS_KEY] as\n | DevtoolsRegistry\n | undefined;\n instances?.delete(label);\n };\n }, [ctx, label]);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/react/activity.tsx","../../src/react/context.ts","../../src/react/async-items.tsx","../../src/react/badge.tsx","../../src/react/hooks/use-command.ts","../../src/react/hooks/use-keyboard.ts","../../src/react/dialog.tsx","../../src/react/empty.tsx","../../src/react/hooks/use-register.ts","../../src/react/group.tsx","../../src/react/highlight.tsx","../../src/react/input.tsx","../../src/react/item.tsx","../../src/react/hooks/use-virtualizer.ts","../../src/react/list.tsx","../../src/react/loading.tsx","../../src/react/page.tsx","../../src/react/separator.tsx","../../src/react/shortcut.tsx","../../src/react/command.tsx","../../src/react/error-boundary.tsx","../../src/react/hooks/use-command-state.ts","../../src/react/hooks/use-devtools.ts"],"sourcesContent":["'use client';\n\n// packages/command-react/src/activity.tsx\n// <CommandActivity> — React 19.3.0-canary Activity API for state preservation\n// Wraps palette contents in <Activity mode=\"hidden\"> when dialog closes\n// Preserves scroll position, input state, selection without remount\n// Graceful degradation: falls back to normal unmount if Activity unavailable\n// Isolated declarations: explicit return types on all exports\n\nimport type { ComponentType, ReactNode } from 'react';\nimport * as React from 'react';\n\n/** Activity mode — maps directly to React's Activity API */\nexport type ActivityMode = 'visible' | 'hidden';\n\n/** Props for the CommandActivity wrapper that controls visibility via React's Activity API. */\nexport interface CommandActivityProps {\n /** Whether the wrapped content is active (visible) */\n readonly mode: ActivityMode;\n readonly children: ReactNode;\n}\n\n/** Props shape for the internal Activity component */\ninterface ActivityComponentProps {\n readonly mode: ActivityMode;\n readonly children: ReactNode;\n}\n\n// Check if React.Activity (unstable) is available in this canary build\nconst ActivityComponent: ComponentType<ActivityComponentProps> | null =\n 'Activity' in React\n ? ((React as Record<string, unknown>).Activity as ComponentType<ActivityComponentProps>)\n : null;\n\n/**\n * Wraps content in React 19.3.0-canary Activity API.\n * When mode=\"hidden\", the component tree is preserved in memory but not rendered.\n * Falls back to conditional rendering if Activity is unavailable.\n */\nexport function CommandActivity({ mode, children }: CommandActivityProps): ReactNode {\n if (ActivityComponent) {\n return <ActivityComponent mode={mode}>{children}</ActivityComponent>;\n }\n\n // Graceful degradation — unmount when hidden\n if (mode === 'hidden') return null;\n return <>{children}</>;\n}\n","'use client';\n\n// packages/command-react/src/context.ts\n// React context definitions — use() for consuming in Suspense boundaries\n// Branded types for IDs, isolated declarations with explicit return types\n\nimport { type Context, createContext } from 'react';\nimport type { CommandMachine, CommandState, ItemId } from '../core/index.js';\n\n/** Branded newtype for the root instance ID */\nexport type CommandRootId = string & { readonly __brand: 'CommandRootId' };\n\nexport interface CommandContextValue {\n readonly machine: CommandMachine;\n readonly state: CommandState;\n readonly isPending: boolean;\n readonly updateSearch: (query: string) => void;\n readonly setOptimisticActiveId: (id: ItemId | null) => void;\n /** O(1) membership check for filtered items — avoids O(n) Array.includes per item */\n readonly filteredIdSet: ReadonlySet<ItemId>;\n readonly rootId: CommandRootId;\n readonly listId: string;\n readonly inputId: string;\n readonly label: string;\n}\n\nexport const CommandContext: Context<CommandContextValue | null> =\n createContext<CommandContextValue | null>(null);\nCommandContext.displayName = 'CommandContext';\n\nexport interface CommandGroupContextValue {\n readonly groupId: string;\n readonly headingId: string;\n}\n\nexport const CommandGroupContext: Context<CommandGroupContextValue | null> =\n createContext<CommandGroupContextValue | null>(null);\nCommandGroupContext.displayName = 'CommandGroupContext';\n","'use client';\n\n// packages/command-react/src/async-items.tsx\n// <Command.AsyncItems> — use() hook for resolving async item sources with Suspense\n// React 19: use() for both context and promise resolution\n// Isolated declarations: explicit return types on all exports\n\nimport type { ReactNode } from 'react';\nimport { Suspense, use, useEffect, useRef } from 'react';\nimport type { CommandItem } from '../core/index.js';\nimport { CommandContext } from './context.js';\n\nexport interface CommandAsyncItemsProps {\n /** Promise that resolves to items */\n readonly items: Promise<readonly CommandItem[]>;\n /** Fallback content while loading */\n readonly fallback?: ReactNode;\n /** Render function for resolved items */\n readonly children: (items: readonly CommandItem[]) => ReactNode;\n}\n\n/** Inner component that suspends via use() until items resolve */\nfunction AsyncItemsInner({\n items: itemsPromise,\n children,\n}: {\n readonly items: Promise<readonly CommandItem[]>;\n readonly children: (items: readonly CommandItem[]) => ReactNode;\n}): ReactNode {\n const ctx = use(CommandContext);\n if (!ctx) {\n throw new Error('Command.AsyncItems must be used within a <Command> component');\n }\n\n // React 19 use() — suspends until items resolve\n const items: readonly CommandItem[] = use(itemsPromise);\n\n // Register loaded items with the machine\n useEffect(() => {\n ctx.machine.send({ type: 'ITEMS_LOADED', items });\n }, [ctx.machine, items]);\n\n return <>{children(items)}</>;\n}\n\nexport function CommandAsyncItems({\n items,\n fallback,\n children,\n}: CommandAsyncItemsProps): ReactNode {\n // Stabilize promise reference — only update when a genuinely new promise is passed\n // Prevents infinite re-suspension from unstable promise identity\n const stableRef = useRef(items);\n if (stableRef.current !== items) {\n stableRef.current = items;\n }\n\n return (\n <Suspense fallback={fallback}>\n <AsyncItemsInner items={stableRef.current}>{children}</AsyncItemsInner>\n </Suspense>\n );\n}\n","'use client';\n\n// packages/command-react/src/badge.tsx\n// <Command.Badge> — renders a category/type badge on items\n// React 19: ref as prop (no forwardRef)\n// Isolated declarations: explicit return types on all exports\n\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\n\nexport interface CommandBadgeProps extends ComponentPropsWithRef<'span'> {}\n\nexport function CommandBadge({ ref, children, ...props }: CommandBadgeProps): ReactNode {\n return (\n <span ref={ref} data-command-badge=\"\" {...props}>\n {children}\n </span>\n );\n}\n","'use client';\n\n// packages/command-react/src/hooks/use-command.ts\n// Core hook — useSyncExternalStore (native React 19), useTransition, useOptimistic, useId\n// Isolated declarations: explicit return types on all exports\n// Branded CommandRootId type for type-safe ID propagation\n\nimport {\n useCallback,\n useId,\n useMemo,\n useOptimistic,\n useSyncExternalStore,\n useTransition,\n} from 'react';\nimport type { CommandMachine, CommandState, ItemId } from '../../core/index.js';\nimport type { CommandRootId } from '../context.js';\n\nexport interface UseCommandReturn {\n readonly state: CommandState;\n readonly isPending: boolean;\n readonly updateSearch: (query: string) => void;\n readonly setOptimisticActiveId: (id: ItemId | null) => void;\n /** O(1) membership set for filtered items — used by Item component */\n readonly filteredIdSet: ReadonlySet<ItemId>;\n readonly id: CommandRootId;\n}\n\nexport function useCommand(machine: CommandMachine): UseCommandReturn {\n const id = useId() as CommandRootId;\n const [isPending, startTransition] = useTransition();\n\n // Native useSyncExternalStore — machine.subscribe is already compatible (returns cleanup fn)\n const state: CommandState = useSyncExternalStore(\n machine.subscribe,\n machine.getState,\n machine.getState, // server snapshot (same — SSR safe)\n );\n\n // O(1) membership set — rebuilt only when filteredIds changes (referential equality)\n const filteredIdSet: ReadonlySet<ItemId> = useMemo(\n () => new Set(state.filteredIds),\n [state.filteredIds],\n );\n\n // Optimistic active item — instant visual feedback before filter completes\n const [optimisticActiveId, setOptimisticActiveId] = useOptimistic<ItemId | null>(state.activeId);\n\n // Search wrapped in transition — input stays responsive during re-render\n const updateSearch = useCallback(\n (query: string): void => {\n startTransition(() => {\n machine.send({ type: 'SEARCH_CHANGE', query });\n });\n },\n [machine],\n );\n\n // Build merged state with optimistic activeId overlay\n const mergedState: CommandState =\n optimisticActiveId !== state.activeId ? { ...state, activeId: optimisticActiveId } : state;\n\n return {\n state: mergedState,\n isPending,\n updateSearch,\n setOptimisticActiveId,\n filteredIdSet,\n id,\n } satisfies UseCommandReturn;\n}\n","'use client';\n\n// packages/command-react/src/hooks/use-keyboard.ts\n// Keyboard navigation — event handler factory, attached to root element\n// Isolated declarations: explicit return types on all exports\n// Uses object lookup (ES2026 style) instead of switch for cleaner dispatch\n\nimport type { CommandMachine, CommandState } from '../../core/index.js';\n\n/** Valid navigation directions */\ntype NavigationDirection = 'next' | 'prev' | 'first' | 'last';\n\n/** Navigation key to machine direction mapping */\nconst NAVIGATION_KEYS: Readonly<Record<string, NavigationDirection>> = {\n ArrowDown: 'next',\n ArrowUp: 'prev',\n Home: 'first',\n End: 'last',\n};\n\n/** Create a keydown handler for command palette keyboard navigation */\nexport function createKeydownHandler(\n machine: CommandMachine,\n getState: () => CommandState,\n): (event: KeyboardEvent) => void {\n return (event: KeyboardEvent): void => {\n const { key } = event;\n const state = getState();\n\n // Navigation keys — ArrowDown/Up/Home/End\n const direction = NAVIGATION_KEYS[key];\n if (direction) {\n event.preventDefault();\n machine.send({ type: 'NAVIGATE', direction });\n return;\n }\n\n // Action keys\n switch (key) {\n case 'Enter': {\n event.preventDefault();\n const { activeId } = state;\n if (activeId) {\n machine.send({ type: 'ITEM_SELECT', id: activeId });\n }\n break;\n }\n case 'Backspace':\n // Pop page when input is empty and backspace is pressed\n if (state.search === '' && state.pageStack.length > 0) {\n event.preventDefault();\n machine.send({ type: 'PAGE_POP' });\n }\n break;\n case 'Escape':\n event.preventDefault();\n machine.send({ type: 'CLOSE' });\n break;\n }\n };\n}\n","'use client';\n\n// packages/command-react/src/dialog.tsx\n// <Command.Dialog> — Radix Dialog.Root + Dialog.Portal + Dialog.Overlay + Dialog.Content\n// @starting-style CSS animations, transition-behavior: allow-discrete, inert on background\n// Focus trap via Radix built-in focus management\n// ES2026: satisfies operator, branded types\n// Isolated declarations: explicit return types on all exports\n\nimport { Dialog } from 'radix-ui';\nimport type { ReactNode } from 'react';\nimport { useCallback, useEffect, useId, useMemo, useRef } from 'react';\nimport type { CommandMachineOptions } from '../core/index.js';\nimport { createCommandMachine } from '../core/index.js';\nimport type { CommandContextValue, CommandRootId } from './context.js';\nimport { CommandContext } from './context.js';\nimport { useCommand } from './hooks/use-command.js';\nimport { createKeydownHandler } from './hooks/use-keyboard.js';\n\nexport interface CommandDialogProps extends CommandMachineOptions {\n readonly children?: ReactNode;\n readonly className?: string;\n readonly overlayClassName?: string;\n readonly contentClassName?: string;\n readonly label?: string;\n readonly open?: boolean;\n readonly onOpenChange?: (open: boolean) => void;\n /** Container element for the portal (default: document.body) */\n readonly container?: HTMLElement | null;\n}\n\nexport function CommandDialog({\n children,\n className,\n overlayClassName,\n contentClassName,\n label = 'Command palette',\n open: controlledOpen,\n onOpenChange,\n container,\n ...machineOptions\n}: CommandDialogProps): ReactNode {\n const rootId = useId() as CommandRootId;\n const listId = `${rootId}-list`;\n const inputId = `${rootId}-input`;\n\n // CRITICAL: useRef for stable machine reference across renders\n const machineRef = useRef<ReturnType<typeof createCommandMachine> | null>(null);\n if (machineRef.current === null) {\n machineRef.current = createCommandMachine({\n ...machineOptions,\n open: controlledOpen ?? false,\n onOpenChange: (open: boolean): void => {\n onOpenChange?.(open);\n },\n });\n }\n const machine = machineRef.current;\n\n const { state, isPending, updateSearch, setOptimisticActiveId, filteredIdSet, id } =\n useCommand(machine);\n\n // Dispose machine on unmount — nulls ref so Strict Mode remount creates fresh machine\n useEffect(() => {\n return (): void => {\n machineRef.current?.[Symbol.dispose]();\n machineRef.current = null;\n };\n // eslint-disable-next-line -- machine is stable ref, dispose runs on unmount only\n }, []);\n\n // Keyboard navigation via document listener\n const handleKeyDown = useCallback(\n createKeydownHandler(machine, () => machine.getState()),\n // eslint-disable-next-line -- machine is stable ref, called inline not as closure dep\n [],\n );\n\n useEffect(() => {\n if (!state.open) return;\n document.addEventListener('keydown', handleKeyDown);\n return (): void => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [handleKeyDown, state.open]);\n\n // Sync controlled open prop — only send if machine state doesn't match\n // Uses ref to avoid state.open in deps (prevents render loops)\n const prevControlledOpen = useRef(controlledOpen);\n useEffect(() => {\n if (controlledOpen !== undefined && controlledOpen !== prevControlledOpen.current) {\n prevControlledOpen.current = controlledOpen;\n machine.send({ type: controlledOpen ? 'OPEN' : 'CLOSE' });\n }\n }, [controlledOpen, machine]);\n\n // Radix onOpenChange callback — syncs dialog state back to machine\n const handleRadixOpenChange = useCallback(\n (open: boolean): void => {\n machine.send({ type: open ? 'OPEN' : 'CLOSE' });\n },\n [machine],\n );\n\n const contextValue = useMemo<CommandContextValue>(\n () =>\n ({\n machine,\n state,\n isPending,\n updateSearch,\n setOptimisticActiveId,\n filteredIdSet,\n rootId: id,\n listId,\n inputId,\n label,\n }) satisfies CommandContextValue,\n [\n machine,\n state,\n isPending,\n updateSearch,\n setOptimisticActiveId,\n filteredIdSet,\n id,\n listId,\n inputId,\n label,\n ],\n );\n\n return (\n <Dialog.Root open={state.open} onOpenChange={handleRadixOpenChange}>\n <Dialog.Portal container={container}>\n {/* Overlay — GPU-composited @starting-style animation */}\n <Dialog.Overlay\n data-command-overlay=\"\"\n data-state={state.open ? 'open' : 'closed'}\n className={overlayClassName}\n />\n {/* Content — focus trap via Radix, @starting-style animation */}\n <Dialog.Content\n data-command-dialog=\"\"\n data-state={state.open ? 'open' : 'closed'}\n className={className}\n aria-label={label}\n onOpenAutoFocus={(e: Event): void => {\n // Prevent Radix default focus — we auto-focus the input below\n e.preventDefault();\n // Auto-focus the input when dialog opens\n const input = document.getElementById(inputId);\n input?.focus();\n }}\n >\n <Dialog.Title className=\"sr-only\">{label}</Dialog.Title>\n <Dialog.Description className=\"sr-only\">Type a command or search...</Dialog.Description>\n <CommandContext value={contextValue}>\n <div data-command-dialog-content=\"\" className={contentClassName}>\n <div data-command-root=\"\" role=\"search\" aria-label={label}>\n {children}\n </div>\n </div>\n </CommandContext>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","'use client';\n\n// packages/command-react/src/empty.tsx\n// <Command.Empty> — role=\"status\", aria-live=\"polite\"\n// React 19: use() for context, ref as prop\n// Isolated declarations: explicit return types on all exports\n\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { use } from 'react';\nimport { CommandContext } from './context.js';\n\nexport interface CommandEmptyProps extends ComponentPropsWithRef<'div'> {}\n\nexport function CommandEmpty({ ref, children, ...props }: CommandEmptyProps): ReactNode {\n const ctx = use(CommandContext);\n if (!ctx) {\n throw new Error('Command.Empty must be used within a <Command> component');\n }\n\n // Only show when there's a search query but no results\n if (ctx.state.filteredCount > 0 || ctx.state.loading) return null;\n\n return (\n <div ref={ref} data-command-empty=\"\" role=\"status\" aria-live=\"polite\" {...props}>\n {children}\n </div>\n );\n}\n","'use client';\n\n// packages/command-react/src/hooks/use-register.ts\n// Item/group registration — useInsertionEffect for paint-before-commit\n// Isolated declarations: explicit return types on all exports\n// Branded types: ItemId / GroupId from core\n\nimport { use, useId, useInsertionEffect } from 'react';\nimport type { CommandGroup, CommandItem, GroupId, ItemId } from '../../core/index.js';\nimport { groupId, itemId } from '../../core/index.js';\nimport { CommandContext } from '../context.js';\n\n/** Options for item registration */\nexport interface RegisterItemOptions {\n readonly keywords?: readonly string[];\n readonly groupId?: string;\n readonly shortcut?: string;\n readonly disabled?: boolean;\n readonly onSelect?: () => void;\n readonly data?: Readonly<Record<string, unknown>>;\n readonly forceId?: string;\n}\n\n/** Register a command item with the machine — auto-deregisters on unmount */\nexport function useRegisterItem(value: string, options?: RegisterItemOptions): ItemId {\n const ctx = use(CommandContext);\n if (!ctx) {\n throw new Error('useRegisterItem must be used within a <Command> component');\n }\n\n const generatedId = useId();\n const id: ItemId = itemId(options?.forceId ?? generatedId);\n\n // useInsertionEffect ensures registration happens before paint\n useInsertionEffect(() => {\n const item: CommandItem = {\n id,\n value,\n keywords: options?.keywords,\n groupId: options?.groupId ? groupId(options.groupId) : undefined,\n shortcut: options?.shortcut,\n disabled: options?.disabled,\n onSelect: options?.onSelect,\n data: options?.data,\n };\n\n ctx.machine.send({ type: 'REGISTER_ITEM', item });\n\n return (): void => {\n ctx.machine.send({ type: 'UNREGISTER_ITEM', id });\n };\n }, [\n ctx.machine,\n id,\n value,\n options?.groupId,\n options?.data,\n options?.disabled,\n options?.keywords,\n options?.onSelect,\n options?.shortcut,\n ]);\n\n return id;\n}\n\n/** Options for group registration */\nexport interface RegisterGroupOptions {\n readonly priority?: number;\n readonly forceId?: string;\n}\n\n/** Register a command group with the machine — auto-deregisters on unmount */\nexport function useRegisterGroup(heading?: string, options?: RegisterGroupOptions): GroupId {\n const ctx = use(CommandContext);\n if (!ctx) {\n throw new Error('useRegisterGroup must be used within a <Command> component');\n }\n\n const generatedId = useId();\n const id: GroupId = groupId(options?.forceId ?? generatedId);\n\n useInsertionEffect(() => {\n const group: CommandGroup = {\n id,\n heading,\n priority: options?.priority,\n };\n\n ctx.machine.send({ type: 'REGISTER_GROUP', group });\n\n return (): void => {\n ctx.machine.send({ type: 'UNREGISTER_GROUP', id });\n };\n }, [ctx.machine, id, heading, options?.priority]);\n\n return id;\n}\n","'use client';\n\n// packages/command-react/src/group.tsx\n// <Command.Group> — role=\"group\" + aria-labelledby with useId() heading ID\n// React 19: use() for context, ref as prop\n// Isolated declarations: explicit return types on all exports\n\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { use, useId, useMemo } from 'react';\nimport type { CommandGroupContextValue } from './context.js';\nimport { CommandContext, CommandGroupContext } from './context.js';\nimport { useRegisterGroup } from './hooks/use-register.js';\n\nexport interface CommandGroupProps extends ComponentPropsWithRef<'div'> {\n /** Heading text displayed above the group */\n readonly heading?: string;\n /** Sort priority (lower = higher in list) */\n readonly priority?: number;\n /** Force a specific ID */\n readonly forceId?: string;\n}\n\nexport function CommandGroup({\n ref,\n children,\n heading,\n priority,\n forceId,\n ...props\n}: CommandGroupProps): ReactNode {\n const ctx = use(CommandContext);\n if (!ctx) {\n throw new Error('Command.Group must be used within a <Command> component');\n }\n\n const headingId: string = useId();\n const groupId = useRegisterGroup(heading, {\n ...(priority !== undefined && { priority }),\n ...(forceId !== undefined && { forceId }),\n });\n\n // Check if any items in this group are visible\n const groupItems = ctx.state.groupedIds.get(groupId);\n const hasVisibleItems: boolean = groupItems !== undefined && groupItems.length > 0;\n\n const groupContext = useMemo<CommandGroupContextValue>(\n () => ({ groupId: groupId as string, headingId }) satisfies CommandGroupContextValue,\n [groupId, headingId],\n );\n\n if (!hasVisibleItems) return null;\n\n return (\n <CommandGroupContext value={groupContext}>\n <div\n ref={ref}\n data-command-group=\"\"\n role=\"group\"\n aria-labelledby={heading ? headingId : undefined}\n {...props}\n >\n {heading && (\n <div data-command-group-heading=\"\" id={headingId} aria-hidden>\n {heading}\n </div>\n )}\n <div data-command-group-items=\"\">{children}</div>\n </div>\n </CommandGroupContext>\n );\n}\n","'use client';\n\n// packages/command-react/src/highlight.tsx\n// <Command.Highlight> — renders search query match highlighting\n// ES2026: Iterator Helpers (.map, .flatMap, .toArray) for range processing\n// Isolated declarations: explicit return types on all exports\n\nimport type { ReactNode } from 'react';\nimport { useMemo } from 'react';\n\nexport interface CommandHighlightProps {\n /** The full text to display */\n readonly text: string;\n /** Match ranges from search scorer — [start, end] tuples */\n readonly ranges: ReadonlyArray<readonly [start: number, end: number]>;\n /** Custom className for highlighted segments */\n readonly highlightClassName?: string;\n}\n\nexport function CommandHighlight({\n text,\n ranges,\n highlightClassName,\n}: CommandHighlightProps): ReactNode {\n // Memoize the highlighted parts to avoid recomputation on parent re-renders\n const parts: ReactNode = useMemo(() => {\n if (ranges.length === 0) return text;\n\n // Sort ranges by start position using Iterator Helpers\n const sorted = Iterator.from(ranges)\n .toArray()\n .sort((a, b) => a[0] - b[0]);\n\n const segments: ReactNode[] = [];\n let lastEnd = 0;\n\n // Build segments from sorted ranges using Iterator Helpers\n Iterator.from(sorted).forEach(([start, end], i) => {\n // Text before the match\n if (start > lastEnd) {\n segments.push(text.slice(lastEnd, start));\n }\n\n // Highlighted match\n segments.push(\n <mark key={i} data-command-highlight=\"\" className={highlightClassName}>\n {text.slice(start, end)}\n </mark>,\n );\n\n lastEnd = end;\n });\n\n // Remaining text after last match\n if (lastEnd < text.length) {\n segments.push(text.slice(lastEnd));\n }\n\n return <>{segments}</>;\n }, [text, ranges, highlightClassName]);\n\n return parts;\n}\n","'use client';\n\n// packages/command-react/src/input.tsx\n// <Command.Input> — stable callbacks, ARIA combobox role\n// React 19: use() for context, ref as prop (no forwardRef)\n// Isolated declarations: explicit return types on all exports\n\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { use, useCallback } from 'react';\nimport { CommandContext } from './context.js';\n\nexport interface CommandInputProps\n extends Omit<ComponentPropsWithRef<'input'>, 'value' | 'onChange' | 'type' | 'role'> {\n readonly onValueChange?: (value: string) => void;\n}\n\nexport function CommandInput({\n ref,\n placeholder = 'Search...',\n onValueChange,\n ...props\n}: CommandInputProps): ReactNode {\n const ctx = use(CommandContext);\n if (!ctx) {\n throw new Error('Command.Input must be used within a <Command> component');\n }\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>): void => {\n const { value } = event.target;\n ctx.updateSearch(value);\n onValueChange?.(value);\n },\n [ctx.updateSearch, onValueChange],\n );\n\n return (\n <input\n ref={ref}\n data-command-input=\"\"\n type=\"text\"\n role=\"combobox\"\n aria-expanded={ctx.state.filteredCount > 0}\n aria-controls={ctx.listId}\n aria-activedescendant={ctx.state.activeId ?? undefined}\n aria-autocomplete=\"list\"\n aria-label={ctx.label}\n id={ctx.inputId}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n spellCheck={false}\n placeholder={placeholder}\n value={ctx.state.search}\n onChange={handleChange}\n {...props}\n />\n );\n}\n","'use client';\n\n// packages/command-react/src/item.tsx\n// <Command.Item> — ref as prop (no forwardRef), useId for ARIA\n// React 19: use() for context\n// Isolated declarations: explicit return types on all exports\n\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { use, useCallback, useRef } from 'react';\nimport { CommandContext } from './context.js';\nimport { useRegisterItem } from './hooks/use-register.js';\n\nexport interface CommandItemProps extends Omit<ComponentPropsWithRef<'div'>, 'onSelect' | 'value'> {\n readonly value: string;\n readonly keywords?: readonly string[];\n readonly onSelect?: () => void;\n readonly disabled?: boolean;\n readonly shortcut?: string;\n readonly forceId?: string;\n}\n\nexport function CommandItem({\n ref,\n children,\n value,\n keywords,\n onSelect,\n disabled = false,\n shortcut,\n forceId,\n ...props\n}: CommandItemProps): ReactNode {\n const ctx = use(CommandContext);\n if (!ctx) {\n throw new Error('Command.Item must be used within a <Command> component');\n }\n\n const id = useRegisterItem(value, {\n ...(keywords !== undefined && { keywords }),\n ...(shortcut !== undefined && { shortcut }),\n disabled,\n ...(onSelect !== undefined && { onSelect }),\n ...(forceId !== undefined && { forceId }),\n });\n\n const isActive: boolean = ctx.state.activeId === id;\n // O(1) Set.has instead of O(n) Array.includes — critical for large lists\n const isFiltered: boolean = ctx.filteredIdSet.has(id);\n\n const handleSelect = useCallback((): void => {\n if (!disabled) {\n ctx.machine.send({ type: 'ITEM_SELECT', id });\n }\n }, [ctx.machine, id, disabled]);\n\n // Use ref for activeId to avoid re-creating callback on every active change\n const activeIdRef = useRef(ctx.state.activeId);\n activeIdRef.current = ctx.state.activeId;\n\n const handlePointerMove = useCallback((): void => {\n if (!disabled && activeIdRef.current !== id) {\n ctx.setOptimisticActiveId(id);\n ctx.machine.send({ type: 'ITEM_ACTIVATE', id });\n }\n }, [ctx.machine, ctx.setOptimisticActiveId, id, disabled]);\n\n if (!isFiltered) return null;\n\n return (\n <div\n ref={ref}\n data-command-item=\"\"\n data-active={isActive ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n data-value={value}\n id={id}\n role=\"option\"\n aria-selected={isActive}\n aria-disabled={disabled || undefined}\n aria-keyshortcuts={shortcut ?? undefined}\n onClick={handleSelect}\n onPointerMove={handlePointerMove}\n {...props}\n >\n {children}\n </div>\n );\n}\n","'use client';\n\n// packages/command-react/src/hooks/use-virtualizer.ts\n// Virtualization hook — ResizeObserver + requestIdleCallback for measurement\n// GPU-composited transforms via translateY, content-visibility: auto for off-screen items\n// ES2026: Iterator Helpers (.map, .filter, .reduce), Math.sumPrecise\n// Isolated declarations: explicit return types on all exports\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nexport interface VirtualizerOptions {\n readonly count: number;\n readonly estimateSize: number;\n readonly overscan?: number;\n readonly scrollElement: HTMLElement | null;\n readonly enabled?: boolean;\n}\n\nexport interface VirtualItem {\n readonly index: number;\n readonly start: number;\n readonly size: number;\n readonly key: number;\n}\n\nexport interface VirtualizerReturn {\n readonly virtualItems: readonly VirtualItem[];\n readonly totalSize: number;\n readonly scrollToIndex: (index: number) => void;\n readonly measureElement: (element: HTMLElement | null) => void;\n}\n\nexport function useVirtualizer(options: VirtualizerOptions): VirtualizerReturn {\n const { count, estimateSize, overscan = 8, scrollElement, enabled = true } = options;\n const [scrollOffset, setScrollOffset] = useState<number>(0);\n const [containerHeight, setContainerHeight] = useState<number>(0);\n const measuredSizes = useRef<Map<number, number>>(new Map<number, number>());\n const [measureVersion, setMeasureVersion] = useState<number>(0);\n\n // ResizeObserver for container measurement\n useEffect(() => {\n if (!scrollElement || !enabled) return;\n\n const observer = new ResizeObserver((entries: ResizeObserverEntry[]): void => {\n // Single observed element — take the last entry's height\n const lastEntry = entries.at(-1);\n if (lastEntry) setContainerHeight(lastEntry.contentRect.height);\n });\n\n observer.observe(scrollElement);\n return (): void => {\n observer.disconnect();\n };\n }, [scrollElement, enabled]);\n\n // Scroll event listener — passive for GPU-composited scrolling\n useEffect(() => {\n if (!scrollElement || !enabled) return;\n\n const handleScroll = (): void => {\n setScrollOffset(scrollElement.scrollTop);\n };\n\n scrollElement.addEventListener('scroll', handleScroll, { passive: true });\n return (): void => {\n scrollElement.removeEventListener('scroll', handleScroll);\n };\n }, [scrollElement, enabled]);\n\n // Get item size — O(1) via measured cache or estimate fallback\n const getItemSize = useCallback(\n (index: number): number => measuredSizes.current.get(index) ?? estimateSize,\n [estimateSize],\n );\n\n // Memoize totalSize — Iterator Helpers + Math.sumPrecise (ES2026)\n // measureVersion triggers recalc when elements are measured\n const totalSize: number = useMemo((): number => {\n void measureVersion; // dependency trigger\n if (!enabled) return 0;\n const sizes = Iterator.from({\n [Symbol.iterator]: function* (): Generator<number> {\n for (let i = 0; i < count; i++) yield getItemSize(i);\n },\n }).toArray();\n return Math.sumPrecise(sizes);\n }, [enabled, count, getItemSize, measureVersion]);\n\n // Memoize virtual items computation\n const virtualItems: readonly VirtualItem[] = useMemo((): readonly VirtualItem[] => {\n if (!enabled || containerHeight <= 0) return [];\n\n // Find the first visible item via linear scan\n let offset = 0;\n let startIdx = 0;\n while (startIdx < count && offset + getItemSize(startIdx) < scrollOffset) {\n offset += getItemSize(startIdx);\n startIdx++;\n }\n\n // Apply overscan — recalculate offset with Iterator Helpers + Math.sumPrecise\n startIdx = Math.max(0, startIdx - overscan);\n const offsetSizes = Iterator.from({\n [Symbol.iterator]: function* (): Generator<number> {\n for (let i = 0; i < startIdx; i++) yield getItemSize(i);\n },\n }).toArray();\n offset = Math.sumPrecise(offsetSizes);\n\n // Collect visible items + overscan\n const items: VirtualItem[] = [];\n let currentOffset = offset;\n const endOffset = scrollOffset + containerHeight;\n\n for (let i = startIdx; i < count; i++) {\n const size = getItemSize(i);\n items.push({\n index: i,\n start: currentOffset,\n size,\n key: i,\n } satisfies VirtualItem);\n currentOffset += size;\n\n // Stop after overscan past the viewport\n if (currentOffset > endOffset + overscan * estimateSize) break;\n }\n\n return items;\n }, [enabled, containerHeight, count, scrollOffset, overscan, estimateSize, getItemSize]);\n\n // Scroll to a specific index — Math.sumPrecise (ES2026) + smooth GPU-composited scrolling\n const scrollToIndex = useCallback(\n (index: number): void => {\n if (!scrollElement || !enabled) return;\n\n const clampedIndex = Math.min(index, count);\n const sizes = Iterator.from({\n [Symbol.iterator]: function* (): Generator<number> {\n for (let i = 0; i < clampedIndex; i++) yield getItemSize(i);\n },\n }).toArray();\n const targetOffset: number = Math.sumPrecise(sizes);\n\n scrollElement.scrollTo({ top: targetOffset, behavior: 'smooth' });\n },\n [scrollElement, enabled, count, getItemSize],\n );\n\n // Measure an element — deferred via requestIdleCallback, triggers re-render on size change\n const measureElement = useCallback(\n (element: HTMLElement | null): void => {\n if (!element || !enabled) return;\n\n const index = Number(element.dataset.index);\n if (Number.isNaN(index)) return;\n\n const measure = (): void => {\n const height = element.getBoundingClientRect().height;\n if (height > 0 && measuredSizes.current.get(index) !== height) {\n measuredSizes.current.set(index, height);\n // Trigger re-render so virtualItems and totalSize recompute with actual sizes\n setMeasureVersion((v) => v + 1);\n }\n };\n\n if ('requestIdleCallback' in globalThis) {\n requestIdleCallback(measure);\n } else {\n setTimeout(measure, 0);\n }\n },\n [enabled],\n );\n\n return {\n virtualItems,\n totalSize,\n scrollToIndex,\n measureElement,\n } satisfies VirtualizerReturn;\n}\n","'use client';\n\n// packages/command-react/src/list.tsx\n// <Command.List> — auto-virtualization when filteredCount > 100, ResizeObserver for height\n// GPU-composited scroll container, aria-live announcements, scroll-to-active on keyboard nav\n// React 19: use() for context, ref as prop (no forwardRef)\n// ES2026: Iterator Helpers for virtual item mapping\n// Isolated declarations: explicit return types on all exports\n\nimport type { ComponentPropsWithRef, CSSProperties, ReactNode, RefObject } from 'react';\nimport { use, useCallback, useEffect, useRef, useState } from 'react';\nimport { CommandContext } from './context.js';\nimport { useVirtualizer } from './hooks/use-virtualizer.js';\n\nexport interface CommandListProps extends ComponentPropsWithRef<'div'> {\n /** Override automatic virtualization (default: auto at >100 items, false to opt-out) */\n readonly virtualize?: boolean;\n /** Estimated item height for virtualization (default: 44px) */\n readonly estimateSize?: number;\n /** Overscan count for virtualization (default: 8) */\n readonly overscan?: number;\n}\n\nexport function CommandList({\n ref,\n children,\n virtualize,\n estimateSize = 44,\n overscan = 8,\n style,\n ...props\n}: CommandListProps): ReactNode {\n const ctx = use(CommandContext);\n if (!ctx) {\n throw new Error('Command.List must be used within a <Command> component');\n }\n\n const innerRef = useRef<HTMLDivElement>(null);\n const scrollRef = useRef<HTMLDivElement>(null);\n const [height, setHeight] = useState<number>(0);\n\n // Auto-virtualize when filteredCount > 100 (cmdk threshold)\n const shouldVirtualize: boolean = virtualize ?? ctx.state.filteredCount > 100;\n\n // ResizeObserver for --command-list-height CSS custom property\n useEffect(() => {\n const element = innerRef.current;\n if (!element) return;\n\n const observer = new ResizeObserver((entries: ResizeObserverEntry[]): void => {\n // Single observed element — take the last entry's height\n const lastEntry = entries.at(-1);\n if (lastEntry) setHeight(lastEntry.contentRect.height);\n });\n\n observer.observe(element);\n return (): void => {\n observer.disconnect();\n };\n }, []);\n\n // Virtualizer — only active when shouldVirtualize is true\n const virtualizer = useVirtualizer({\n count: ctx.state.filteredCount,\n estimateSize,\n overscan,\n scrollElement: shouldVirtualize ? scrollRef.current : null,\n enabled: shouldVirtualize,\n });\n\n // Scroll-to-active on keyboard navigation\n const prevActiveId = useRef<string | null>(ctx.state.activeId);\n useEffect(() => {\n if (ctx.state.activeId && ctx.state.activeId !== prevActiveId.current) {\n prevActiveId.current = ctx.state.activeId;\n\n if (shouldVirtualize) {\n // Virtual mode: use virtualizer scrollToIndex\n const idx = ctx.state.filteredIds.indexOf(ctx.state.activeId);\n if (idx >= 0) virtualizer.scrollToIndex(idx);\n } else {\n // DOM mode: scrollIntoView on the active element\n const el = scrollRef.current?.querySelector(`[id=\"${CSS.escape(ctx.state.activeId)}\"]`);\n el?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n }\n }\n }, [ctx.state.activeId, ctx.state.filteredIds, shouldVirtualize, virtualizer]);\n\n const mergedStyle: CSSProperties & Record<`--${string}`, string> = {\n ...style,\n '--command-list-height': `${height.toFixed(1)}px`,\n };\n\n // Ref merge callback — combines internal scrollRef with external ref prop\n const setScrollRef = useCallback(\n (el: HTMLDivElement | null): void => {\n (scrollRef as RefObject<HTMLDivElement | null>).current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) (ref as RefObject<HTMLDivElement | null>).current = el;\n },\n [ref],\n );\n\n return (\n <div\n ref={setScrollRef}\n data-command-list=\"\"\n role=\"listbox\"\n aria-label={ctx.label}\n aria-busy={ctx.state.loading}\n id={ctx.listId}\n style={mergedStyle}\n {...props}\n >\n {shouldVirtualize ? (\n // Virtualized rendering — GPU-composited translateY positioning\n <div\n data-command-list-virtual=\"\"\n style={{ height: `${virtualizer.totalSize}px`, position: 'relative' }}\n >\n {virtualizer.virtualItems.map((vItem) => (\n <div\n key={vItem.key}\n data-command-virtual-item=\"\"\n data-index={vItem.index}\n ref={virtualizer.measureElement}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n translate: `0 ${vItem.start}px`,\n }}\n />\n ))}\n {/* Children still render for React reconciliation */}\n {children}\n </div>\n ) : (\n <div ref={innerRef} data-command-list-inner=\"\">\n {children}\n </div>\n )}\n {/* aria-live region for screen reader announcements */}\n <div\n aria-live=\"polite\"\n aria-atomic\n role=\"status\"\n data-command-aria-live=\"\"\n className=\"sr-only\"\n >\n {ctx.state.filteredCount} result{ctx.state.filteredCount !== 1 ? 's' : ''} available.\n </div>\n </div>\n );\n}\n","'use client';\n\n// packages/command-react/src/loading.tsx\n// <Command.Loading> — aria-busy, Suspense boundary integration\n// React 19: use() for context, ref as prop\n// Isolated declarations: explicit return types on all exports\n\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { use } from 'react';\nimport { CommandContext } from './context.js';\n\nexport interface CommandLoadingProps extends ComponentPropsWithRef<'div'> {\n /** Override the loading state detection */\n readonly loading?: boolean;\n}\n\nexport function CommandLoading({\n ref,\n children,\n loading: loadingOverride,\n ...props\n}: CommandLoadingProps): ReactNode {\n const ctx = use(CommandContext);\n if (!ctx) {\n throw new Error('Command.Loading must be used within a <Command> component');\n }\n\n const isLoading: boolean = loadingOverride ?? ctx.state.loading ?? ctx.isPending;\n\n if (!isLoading) return null;\n\n return (\n <div ref={ref} data-command-loading=\"\" aria-busy aria-live=\"assertive\" role=\"status\" {...props}>\n {children}\n </div>\n );\n}\n","'use client';\n\n// packages/command-react/src/page.tsx\n// <Command.Page> — page stack management, View Transitions API\n// React 19: use() for context\n// Isolated declarations: explicit return types on all exports\n\nimport type { ReactNode } from 'react';\nimport { use } from 'react';\nimport { CommandContext } from './context.js';\n\n/** Branded page identifier */\nexport type CommandPageId = string & { readonly __brand: 'CommandPageId' };\n\nexport interface CommandPageProps {\n /** Page identifier */\n readonly id: CommandPageId | string;\n readonly children?: ReactNode;\n}\n\nexport function CommandPage({ id, children }: CommandPageProps): ReactNode {\n const ctx = use(CommandContext);\n if (!ctx) {\n throw new Error('Command.Page must be used within a <Command> component');\n }\n\n // Only render the active page\n if (ctx.state.page !== id) return null;\n\n return (\n <div data-command-page=\"\" data-command-page-id={id}>\n {children}\n </div>\n );\n}\n","'use client';\n\n// packages/command-react/src/separator.tsx\n// <Command.Separator> — role=\"separator\"\n// React 19: ref as prop (no forwardRef)\n// Isolated declarations: explicit return types on all exports\n\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\n\nexport interface CommandSeparatorProps extends ComponentPropsWithRef<'div'> {}\n\nexport function CommandSeparator({ ref, ...props }: CommandSeparatorProps): ReactNode {\n return <div ref={ref} data-command-separator=\"\" role=\"separator\" {...props} />;\n}\n","'use client';\n\n// packages/command-react/src/shortcut.tsx\n// <Command.Shortcut> — renders platform-appropriate key labels\n// React 19: ref as prop (no forwardRef)\n// Isolated declarations: explicit return types on all exports\n\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { useMemo } from 'react';\nimport { formatShortcut, parseShortcut } from '../core/index.js';\n\nexport interface CommandShortcutProps extends ComponentPropsWithRef<'kbd'> {\n /** Shortcut string to display (e.g., \"Mod+K\"). If not provided, reads from nearest Command.Item. */\n readonly shortcut?: string;\n}\n\nexport function CommandShortcut({\n ref,\n shortcut,\n children,\n ...props\n}: CommandShortcutProps): ReactNode {\n // Memoize the parsed + formatted shortcut to avoid re-parsing on every render\n const displayText: ReactNode = useMemo(\n () => (shortcut ? formatShortcut(parseShortcut(shortcut)) : children),\n [shortcut, children],\n );\n\n return (\n <kbd ref={ref} data-command-shortcut=\"\" {...props}>\n {displayText}\n </kbd>\n );\n}\n","'use client';\n\n// packages/command-react/src/command.tsx\n// <Command.Root> — useTransition for search, React Compiler compatible\n// Keyboard navigation is attached to the root element, not called as a hook before context\n// ES2026: satisfies operator, branded types\n// Isolated declarations: explicit return types on all exports\n\nimport type { ReactNode } from 'react';\nimport { useCallback, useEffect, useId, useMemo, useRef } from 'react';\nimport type { CommandMachineOptions } from '../core/index.js';\nimport { createCommandMachine } from '../core/index.js';\nimport { CommandActivity } from './activity.js';\nimport { CommandAsyncItems } from './async-items.js';\nimport { CommandBadge } from './badge.js';\nimport type { CommandContextValue, CommandRootId } from './context.js';\nimport { CommandContext } from './context.js';\nimport { CommandDialog } from './dialog.js';\nimport { CommandEmpty } from './empty.js';\nimport { CommandGroup } from './group.js';\nimport { CommandHighlight } from './highlight.js';\nimport { useCommand } from './hooks/use-command.js';\nimport { createKeydownHandler } from './hooks/use-keyboard.js';\nimport { CommandInput } from './input.js';\nimport { CommandItem } from './item.js';\nimport { CommandList } from './list.js';\nimport { CommandLoading } from './loading.js';\nimport { CommandPage } from './page.js';\nimport { CommandSeparator } from './separator.js';\nimport { CommandShortcut } from './shortcut.js';\n\nexport interface CommandRootProps extends CommandMachineOptions {\n readonly children?: ReactNode;\n readonly className?: string;\n readonly label?: string;\n}\n\nfunction CommandRoot({\n children,\n className,\n label = 'Command palette',\n ...machineOptions\n}: CommandRootProps): ReactNode {\n const rootId = useId() as CommandRootId;\n const listId = `${rootId}-list`;\n const inputId = `${rootId}-input`;\n const rootRef = useRef<HTMLDivElement>(null);\n\n // Create machine once — stable reference across renders\n const machineRef = useRef<ReturnType<typeof createCommandMachine> | null>(null);\n if (machineRef.current === null) {\n machineRef.current = createCommandMachine(machineOptions);\n }\n const machine = machineRef.current;\n\n const { state, isPending, updateSearch, setOptimisticActiveId, filteredIdSet, id } =\n useCommand(machine);\n\n // Dispose machine on unmount — prevents resource leaks (scheduler, emitter, search engine)\n // Nulls the ref so Strict Mode remount creates a fresh machine\n useEffect(() => {\n return (): void => {\n machineRef.current?.[Symbol.dispose]();\n machineRef.current = null;\n };\n // eslint-disable-next-line -- machine is stable ref, dispose runs on unmount only\n }, []);\n\n // Attach keyboard navigation to the root element — avoids hook-before-context issue\n const handleKeyDown = useCallback(\n createKeydownHandler(machine, () => machine.getState()),\n // eslint-disable-next-line -- machine is stable ref, called inline not as closure dep\n [],\n );\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyDown);\n return (): void => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [handleKeyDown]);\n\n const contextValue = useMemo<CommandContextValue>(\n () =>\n ({\n machine,\n state,\n isPending,\n updateSearch,\n setOptimisticActiveId,\n filteredIdSet,\n rootId: id,\n listId,\n inputId,\n label,\n }) satisfies CommandContextValue,\n [\n machine,\n state,\n isPending,\n updateSearch,\n setOptimisticActiveId,\n filteredIdSet,\n id,\n listId,\n inputId,\n label,\n ],\n );\n\n return (\n <CommandContext value={contextValue}>\n <div\n ref={rootRef}\n data-command-root=\"\"\n data-command-state={state.open ? 'open' : 'closed'}\n className={className}\n role=\"search\"\n aria-label={label}\n >\n {children}\n </div>\n </CommandContext>\n );\n}\n\n/** Compound component namespace */\nexport const Command: typeof CommandRoot & {\n readonly Input: typeof CommandInput;\n readonly List: typeof CommandList;\n readonly Item: typeof CommandItem;\n readonly Group: typeof CommandGroup;\n readonly Empty: typeof CommandEmpty;\n readonly Loading: typeof CommandLoading;\n readonly Separator: typeof CommandSeparator;\n readonly Dialog: typeof CommandDialog;\n readonly Highlight: typeof CommandHighlight;\n readonly Shortcut: typeof CommandShortcut;\n readonly Badge: typeof CommandBadge;\n readonly Page: typeof CommandPage;\n readonly AsyncItems: typeof CommandAsyncItems;\n readonly Activity: typeof CommandActivity;\n} = Object.assign(CommandRoot, {\n Input: CommandInput,\n List: CommandList,\n Item: CommandItem,\n Group: CommandGroup,\n Empty: CommandEmpty,\n Loading: CommandLoading,\n Separator: CommandSeparator,\n Dialog: CommandDialog,\n Highlight: CommandHighlight,\n Shortcut: CommandShortcut,\n Badge: CommandBadge,\n Page: CommandPage,\n AsyncItems: CommandAsyncItems,\n Activity: CommandActivity,\n} as const);\n","'use client';\n\n// packages/command-react/src/error-boundary.tsx\n// Error boundary — class component (required by React for componentDidCatch)\n// Isolated declarations: explicit return types on all exports\n\nimport { Component, type ErrorInfo, type ReactNode } from 'react';\n\nexport interface CommandErrorBoundaryProps {\n readonly children: ReactNode;\n readonly fallback?: ReactNode | ((error: Error) => ReactNode);\n readonly onError?: (error: Error, errorInfo: ErrorInfo) => void;\n}\n\ninterface CommandErrorBoundaryState {\n readonly error: Error | null;\n}\n\n/** Initial state — no error captured */\nconst INITIAL_STATE: CommandErrorBoundaryState = {\n error: null,\n} as const satisfies CommandErrorBoundaryState;\n\nexport class CommandErrorBoundary extends Component<\n CommandErrorBoundaryProps,\n CommandErrorBoundaryState\n> {\n override state: CommandErrorBoundaryState = INITIAL_STATE;\n\n static getDerivedStateFromError(error: Error): CommandErrorBoundaryState {\n return { error } satisfies CommandErrorBoundaryState;\n }\n\n override componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n this.props.onError?.(error, errorInfo);\n }\n\n override render(): ReactNode {\n if (this.state.error) {\n const { fallback } = this.props;\n if (typeof fallback === 'function') return fallback(this.state.error);\n if (fallback) return fallback;\n return null;\n }\n return this.props.children;\n }\n}\n","'use client';\n\n// packages/command-react/src/hooks/use-command-state.ts\n// Derived state selectors — useSyncExternalStore for proper render optimization\n// Isolated declarations: explicit return types on all exports\n\nimport { use, useCallback, useSyncExternalStore } from 'react';\nimport type { CommandState } from '../../core/index.js';\nimport { CommandContext } from '../context.js';\n\n/** Get the full command state with proper subscription */\nexport function useCommandState(): CommandState;\n/** Get a selected slice of command state — only re-renders when selected value changes */\nexport function useCommandState<T>(selector: (state: CommandState) => T): T;\nexport function useCommandState<T>(selector?: (state: CommandState) => T): CommandState | T {\n const ctx = use(CommandContext);\n if (!ctx) {\n throw new Error('useCommandState must be used within a <Command> component');\n }\n\n const getSnapshot = useCallback(\n (): CommandState | T => (selector ? selector(ctx.machine.getState()) : ctx.machine.getState()),\n [ctx.machine, selector],\n );\n\n return useSyncExternalStore(ctx.machine.subscribe, getSnapshot, getSnapshot);\n}\n","'use client';\n\n// packages/command-react/src/hooks/use-devtools.ts\n// Development-only devtools bridge — tree-shaken in production\n// Isolated declarations: explicit return types on all exports\n\nimport { use, useEffect, useRef } from 'react';\nimport { CommandContext } from '../context.js';\n\ndeclare const __DEV__: boolean;\n\ninterface DevtoolsState {\n readonly registeredItems: number;\n readonly filteredItems: number;\n readonly searchQuery: string;\n readonly activeId: string | null;\n readonly page: string;\n readonly pageStack: readonly string[];\n readonly open: boolean;\n readonly loading: boolean;\n}\n\n/** Branded key for the global devtools instance map */\nconst DEVTOOLS_KEY = '__CRIMSON_COMMAND_DEVTOOLS__' as const;\n\n/** Type-safe global devtools registry */\ntype DevtoolsRegistry = Map<string, DevtoolsState>;\n\n/**\n * Exposes command palette internals to browser devtools.\n * Only active in development — completely tree-shaken in production builds.\n *\n * @example\n * ```tsx\n * function MyPalette() {\n * useCommandDevtools('main');\n * return <Command>...</Command>;\n * }\n * ```\n */\nexport function useCommandDevtools(label: string = 'default'): void {\n if (!__DEV__) return;\n\n // eslint-disable-next-line react-hooks/rules-of-hooks -- __DEV__ is compile-time constant\n const ctx = use(CommandContext);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const stateRef = useRef<DevtoolsState | null>(null);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n if (!ctx) return;\n\n const update = (): void => {\n const s = ctx.state;\n const devState: DevtoolsState = {\n registeredItems: s.filteredCount,\n filteredItems: s.filteredIds.length,\n searchQuery: s.search,\n activeId: s.activeId,\n page: s.page,\n pageStack: s.pageStack,\n open: s.open,\n loading: s.loading,\n } satisfies DevtoolsState;\n stateRef.current = devState;\n\n // Use Map.groupBy-style registry via global singleton\n const globals = globalThis as Record<string, unknown>;\n if (!globals[DEVTOOLS_KEY]) {\n globals[DEVTOOLS_KEY] = new Map<string, DevtoolsState>();\n }\n const instances: DevtoolsRegistry = globals[DEVTOOLS_KEY] as DevtoolsRegistry;\n instances.set(label, devState);\n\n globalThis.dispatchEvent?.(\n new CustomEvent('crimson-command-devtools', { detail: { label, state: devState } }),\n );\n };\n\n const unsub = ctx.machine.subscribe(update);\n update();\n\n return (): void => {\n unsub();\n const instances = (globalThis as Record<string, unknown>)[DEVTOOLS_KEY] as\n | DevtoolsRegistry\n | undefined;\n instances?.delete(label);\n };\n }, [ctx, label]);\n}\n"],"mappings":"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"}
|