@alfadocs/ui-kit-debug 0.2.2 → 0.4.0
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/dist/_chunks/{ai-prompt-input-BBiDlEIS.js → ai-prompt-input-DLgY8lrW.js} +2 -2
- package/dist/_chunks/{ai-prompt-input-BBiDlEIS.js.map → ai-prompt-input-DLgY8lrW.js.map} +1 -1
- package/dist/_chunks/{audio-recorder-B4U1LuiQ.js → audio-recorder-BdBbU-UK.js} +2 -2
- package/dist/_chunks/{audio-recorder-B4U1LuiQ.js.map → audio-recorder-BdBbU-UK.js.map} +1 -1
- package/dist/_chunks/{command-palette-C_vgSgrI.js → command-palette-DkL-aW4O.js} +9 -2
- package/dist/_chunks/{command-palette-C_vgSgrI.js.map → command-palette-DkL-aW4O.js.map} +1 -1
- package/dist/_chunks/{dialog-BPD7wlGE.js → dialog-D5bK95-N.js} +24 -24
- package/dist/_chunks/dialog-D5bK95-N.js.map +1 -0
- package/dist/_chunks/{dropdown-menu-CpiF6CPz.js → dropdown-menu-dyV7gHh_.js} +2 -1
- package/dist/_chunks/{dropdown-menu-CpiF6CPz.js.map → dropdown-menu-dyV7gHh_.js.map} +1 -1
- package/dist/_chunks/{leo-sidebar-kHO45M6C.js → leo-sidebar-D1RdE54a.js} +2 -2
- package/dist/_chunks/{leo-sidebar-kHO45M6C.js.map → leo-sidebar-D1RdE54a.js.map} +1 -1
- package/dist/_chunks/{patient-shell-BlsEUKWB.js → patient-shell-IhMULVrt.js} +2 -2
- package/dist/_chunks/{patient-shell-BlsEUKWB.js.map → patient-shell-IhMULVrt.js.map} +1 -1
- package/dist/_chunks/{select-y6bXV1f1.js → select-BOU_Osnf.js} +2 -1
- package/dist/_chunks/select-BOU_Osnf.js.map +1 -0
- package/dist/_chunks/{sheet-4tgMFwj0.js → sheet-B9T3OQmz.js} +23 -23
- package/dist/_chunks/sheet-B9T3OQmz.js.map +1 -0
- package/dist/_chunks/{tabs-DaFA3Muo.js → tabs-BZQy_Rmb.js} +2 -2
- package/dist/_chunks/{tabs-DaFA3Muo.js.map → tabs-BZQy_Rmb.js.map} +1 -1
- package/dist/_chunks/{theme-toggle-B9zzCnvl.js → theme-toggle-B3UR6ouK.js} +2 -2
- package/dist/_chunks/{theme-toggle-B9zzCnvl.js.map → theme-toggle-B3UR6ouK.js.map} +1 -1
- package/dist/_chunks/{toast.agent-BwKXA0km.js → toast.agent-DihA6MON.js} +206 -203
- package/dist/_chunks/{toast.agent-BwKXA0km.js.map → toast.agent-DihA6MON.js.map} +1 -1
- package/dist/_chunks/{workflow-map-C-nlogPC.js → workflow-map-Bi5liGzo.js} +2 -2
- package/dist/_chunks/{workflow-map-C-nlogPC.js.map → workflow-map-Bi5liGzo.js.map} +1 -1
- package/dist/agent-catalog.json +1 -1
- package/dist/components/_shared/safe-html.d.ts.map +1 -1
- package/dist/components/ai-prompt-input/index.js +1 -1
- package/dist/components/audio-recorder/index.js +1 -1
- package/dist/components/command-palette/command-palette.d.ts.map +1 -1
- package/dist/components/command-palette/index.js +1 -1
- package/dist/components/dialog/index.js +1 -1
- package/dist/components/dropdown-menu/dropdown-menu.d.ts.map +1 -1
- package/dist/components/dropdown-menu/index.js +1 -1
- package/dist/components/select/index.js +1 -1
- package/dist/components/select/select.d.ts.map +1 -1
- package/dist/components/sheet/index.js +1 -1
- package/dist/components/tabs/index.js +1 -1
- package/dist/components/theme-toggle/index.js +1 -1
- package/dist/components/toast/index.js +1 -1
- package/dist/components/toast/toast.d.ts.map +1 -1
- package/dist/components/workflow/index.js +1 -1
- package/dist/index.js +13 -13
- package/dist/patterns/leo-assistant/index.js +1 -1
- package/dist/patterns/patient-shell/index.js +1 -1
- package/dist/safe-html/index.js +13 -12
- package/dist/safe-html/index.js.map +1 -1
- package/dist/tokens.css +1 -1
- package/package.json +2 -1
- package/dist/_chunks/dialog-BPD7wlGE.js.map +0 -1
- package/dist/_chunks/select-y6bXV1f1.js.map +0 -1
- package/dist/_chunks/sheet-4tgMFwj0.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-palette-C_vgSgrI.js","sources":["../../src/components/command-palette/command-palette.agent.ts","../../src/components/command-palette/command-palette.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { CommandPaletteHandle } from './command-palette';\n\nexport const commandPaletteAgent: AgentAdapter<CommandPaletteHandle> = {\n id: 'command-palette',\n capabilities: ['open', 'close', 'filter', 'pick', 'submit'],\n state: {\n query: {\n type: 'string',\n description: 'Current filter query in the command palette input.',\n read: (handle) => handle.getQuery(),\n },\n isOpen: {\n type: 'boolean',\n description: 'True when the palette is visible.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n open: {\n safety: 'read',\n description: 'Open the command palette.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n description: 'Close the command palette.',\n invoke: (handle) => {\n handle.close();\n },\n },\n apply_filter: {\n safety: 'read',\n argsType: '{ query: string }',\n description: 'Set the filter query.',\n invoke: (handle, args: { query: string }) => {\n handle.setQuery(args.query);\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'command-palette' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-command-id',\n description: 'Each command item emits its key as data-command-id.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from 'react';\nimport { Command as CommandPrimitive, defaultFilter } from 'cmdk';\nimport * as RadixDialog from '@radix-ui/react-dialog';\nimport { useTranslation } from 'react-i18next';\nimport { Search } from 'lucide-react';\nimport { useAgentRegistration } from '../../agent';\nimport { commandPaletteAgent } from './command-palette.agent';\n\n/* -------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------- */\n\nexport interface Command {\n id: string;\n label: string;\n group: string;\n keywords?: string[];\n shortcut?: string;\n onSelect: () => void;\n /** Optional leading icon. */\n icon?: ReactNode;\n}\n\n/* -------------------------------------------------------------------- */\n/* Diacritic-insensitive normaliser */\n/* -------------------------------------------------------------------- */\n\nfunction normalise(value: string): string {\n return value\n .normalize('NFD')\n .replace(/\\p{Diacritic}/gu, '')\n .toLowerCase();\n}\n\nexport const diacriticInsensitiveFilter = (\n value: string,\n search: string,\n keywords?: string[],\n) =>\n defaultFilter(normalise(value), normalise(search), keywords?.map(normalise));\n\n/* -------------------------------------------------------------------- */\n/* Recents (localStorage, SSR-safe) */\n/* -------------------------------------------------------------------- */\n\nconst RECENTS_KEY = 'ui.cmdk.recents';\nconst MAX_RECENTS = 5;\n\nfunction readRecents(): string[] {\n if (typeof window === 'undefined') return [];\n try {\n const raw = window.localStorage.getItem(RECENTS_KEY);\n if (!raw) return [];\n const parsed = JSON.parse(raw);\n return Array.isArray(parsed)\n ? parsed.slice(0, MAX_RECENTS).filter((v) => typeof v === 'string')\n : [];\n } catch {\n return [];\n }\n}\n\nfunction writeRecents(ids: string[]) {\n if (typeof window === 'undefined') return;\n try {\n window.localStorage.setItem(\n RECENTS_KEY,\n JSON.stringify(ids.slice(0, MAX_RECENTS)),\n );\n } catch {\n /* noop */\n }\n}\n\n/* -------------------------------------------------------------------- */\n/* useCommandPalette — Cmd/Ctrl+K hook */\n/* -------------------------------------------------------------------- */\n\nexport function useCommandPalette() {\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n function handler(event: KeyboardEvent) {\n const target = event.target as HTMLElement | null;\n const tag = target?.tagName.toLowerCase();\n const isEditable =\n tag === 'input' || tag === 'textarea' || target?.isContentEditable;\n if (isEditable && !(open && event.key === 'Escape')) return;\n\n const isK = event.key === 'k' || event.key === 'K';\n const isMeta = event.metaKey || event.ctrlKey;\n if (isK && isMeta) {\n event.preventDefault();\n setOpen((v) => !v);\n }\n }\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [open]);\n\n return { open, setOpen };\n}\n\n/* -------------------------------------------------------------------- */\n/* Primitives (forwardRef wrappers around cmdk + dialog chrome) */\n/* -------------------------------------------------------------------- */\n\nconst rootClasses = [\n 'ds:flex ds:h-full ds:w-full ds:flex-col ds:overflow-hidden',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:bg-[var(--background)] ds:text-[var(--foreground)]',\n].join(' ');\n\nexport type CommandPaletteRootProps = ComponentPropsWithoutRef<\n typeof CommandPrimitive\n>;\n\n// Curated agent-readiness handle — see command-palette.agent.ts.\nexport interface CommandPaletteHandle {\n getQuery: () => string;\n getIsOpen: () => boolean;\n open: () => void;\n close: () => void;\n setQuery: (query: string) => void;\n}\n\nconst CommandPalette = forwardRef<\n ElementRef<typeof CommandPrimitive>,\n CommandPaletteRootProps\n>(({ className, filter = diacriticInsensitiveFilter, id, ...rest }, ref) => (\n <CommandPrimitive\n ref={ref}\n filter={filter}\n className={[rootClasses, className].filter(Boolean).join(' ')}\n data-component=\"command-palette\"\n data-component-id={id}\n {...rest}\n />\n));\nCommandPalette.displayName = 'CommandPalette';\n\n/* -------------------------------------------------------------------- */\n/* Input */\n/* -------------------------------------------------------------------- */\n\nconst inputWrapClasses = [\n 'ds:flex ds:items-center',\n 'ds:border-block-end ds:border-[var(--border)]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-sm)]',\n].join(' ');\n\nconst inputClasses = [\n 'ds:flex ds:w-full ds:bg-transparent',\n 'ds:min-h-[var(--min-target-size)]',\n 'ds:text-[var(--font-size-base)] ds:text-[var(--foreground)]',\n 'ds:placeholder:text-[var(--muted-foreground)]',\n 'ds:outline-none',\n 'ds:disabled:cursor-not-allowed ds:disabled:opacity-50',\n 'ds:border-0',\n].join(' ');\n\nexport type CommandInputProps = ComponentPropsWithoutRef<\n typeof CommandPrimitive.Input\n>;\n\nconst CommandInput = forwardRef<\n ElementRef<typeof CommandPrimitive.Input>,\n CommandInputProps\n>(({ className, placeholder, ...rest }, ref) => {\n const { t } = useTranslation();\n return (\n <div className={inputWrapClasses}>\n <Search\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:me-2 ds:text-[var(--muted-foreground)]\"\n />\n <CommandPrimitive.Input\n ref={ref}\n placeholder={\n placeholder ??\n t('navigation.cmdk.placeholder', 'Type a command or search\\u2026')\n }\n className={[inputClasses, className].filter(Boolean).join(' ')}\n {...rest}\n />\n </div>\n );\n});\nCommandInput.displayName = 'CommandInput';\n\n/* -------------------------------------------------------------------- */\n/* List / Empty / Group / Item / Separator */\n/* -------------------------------------------------------------------- */\n\nconst CommandList = forwardRef<\n ElementRef<typeof CommandPrimitive.List>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(({ className, ...rest }, ref) => (\n <CommandPrimitive.List\n ref={ref}\n className={[\n 'ds:max-h-[20rem] ds:overflow-y-auto',\n 'ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)]',\n 'ds:py-[var(--spacing-xs)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n />\n));\nCommandList.displayName = 'CommandList';\n\nconst CommandEmpty = forwardRef<\n ElementRef<typeof CommandPrimitive.Empty>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>(({ className, children, ...rest }, ref) => {\n const { t } = useTranslation();\n return (\n <CommandPrimitive.Empty\n ref={ref}\n className={[\n 'ds:py-[var(--spacing-lg)] ds:text-center',\n 'type-body-sm ds:text-[var(--muted-foreground)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n {children ?? t('navigation.cmdk.empty', 'No results found')}\n </CommandPrimitive.Empty>\n );\n});\nCommandEmpty.displayName = 'CommandEmpty';\n\nconst CommandGroup = forwardRef<\n ElementRef<typeof CommandPrimitive.Group>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(({ className, heading, ...rest }, ref) => (\n <CommandPrimitive.Group\n ref={ref}\n heading={heading}\n className={[\n 'ds:overflow-hidden',\n 'ds:text-[var(--foreground)]',\n 'ds:[&_[cmdk-group-heading]]:ps-[var(--spacing-sm)]',\n 'ds:[&_[cmdk-group-heading]]:pe-[var(--spacing-sm)]',\n 'ds:[&_[cmdk-group-heading]]:py-[var(--spacing-xs)]',\n 'ds:[&_[cmdk-group-heading]]:type-eyebrow',\n 'ds:[&_[cmdk-group-heading]]:text-[var(--muted-foreground)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n />\n));\nCommandGroup.displayName = 'CommandGroup';\n\nconst itemClasses = [\n 'ds:relative ds:flex ds:items-center',\n 'ds:gap-[var(--spacing-sm)]',\n 'ds:min-h-[var(--min-target-size)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:text-[var(--font-size-sm)] ds:text-[var(--foreground)]',\n 'ds:cursor-pointer ds:select-none ds:outline-none',\n 'ds:data-[selected=true]:bg-[var(--primary)] ds:data-[selected=true]:text-[var(--primary-foreground)]',\n 'ds:data-[selected=true]:font-[var(--font-weight-semibold)]',\n 'ds:data-[disabled=true]:pointer-events-none ds:data-[disabled=true]:opacity-50',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n].join(' ');\n\nexport type CommandItemProps = ComponentPropsWithoutRef<\n typeof CommandPrimitive.Item\n>;\n\nconst CommandItem = forwardRef<\n ElementRef<typeof CommandPrimitive.Item>,\n CommandItemProps\n>(({ className, ...rest }, ref) => (\n <CommandPrimitive.Item\n ref={ref}\n className={[itemClasses, className].filter(Boolean).join(' ')}\n {...rest}\n />\n));\nCommandItem.displayName = 'CommandItem';\n\nconst CommandSeparator = forwardRef<\n ElementRef<typeof CommandPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(({ className, ...rest }, ref) => (\n <CommandPrimitive.Separator\n ref={ref}\n className={[\n 'ds:-ms-[var(--spacing-xs)] ds:-me-[var(--spacing-xs)]',\n 'ds:my-[var(--spacing-xs)]',\n 'ds:h-px ds:bg-[var(--border)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n />\n));\nCommandSeparator.displayName = 'CommandSeparator';\n\nexport type CommandShortcutProps = ComponentPropsWithoutRef<'kbd'>;\n\nconst CommandShortcut = forwardRef<HTMLElement, CommandShortcutProps>(\n ({ className, children, ...rest }, ref) => (\n <kbd\n ref={ref}\n className={[\n 'ds:ms-auto',\n 'ds:inline-flex ds:items-center',\n 'ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)]',\n 'ds:h-5 ds:rounded-[var(--radius-sm)]',\n 'ds:bg-[var(--muted)]/20 ds:text-[var(--muted-foreground)]',\n 'ds:text-[length:var(--font-size-xs)] ds:font-[var(--font-weight-medium)]',\n 'ds:data-[selected=true]:bg-[var(--primary-foreground)]/20',\n 'ds:data-[selected=true]:text-[var(--primary-foreground)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n {children}\n </kbd>\n ),\n);\nCommandShortcut.displayName = 'CommandShortcut';\n\n/* -------------------------------------------------------------------- */\n/* Highlight helper */\n/* -------------------------------------------------------------------- */\n\n/**\n * Returns React nodes that wrap the matching segments of `label` in `<mark>`.\n * Diacritic-insensitive. No `dangerouslySetInnerHTML`.\n */\nexport function highlightMatch(label: string, query: string): ReactNode {\n if (!query) return label;\n const norm = normalise(label);\n const normQ = normalise(query);\n const idx = norm.indexOf(normQ);\n if (idx === -1) return label;\n // Walk the original label using character-by-character correspondence with the\n // normalised string. Since normalise may drop diacritics, we use index mapping.\n const before = label.slice(0, idx);\n const match = label.slice(idx, idx + normQ.length);\n const after = label.slice(idx + normQ.length);\n return (\n <>\n {before}\n <mark className=\"ds:bg-[var(--accent)]/20 ds:text-inherit ds:rounded-[var(--radius-sm)] ds:px-[0.125em]\">\n {match}\n </mark>\n {after}\n </>\n );\n}\n\n/* -------------------------------------------------------------------- */\n/* CommandPaletteDialog — Dialog shell + commands-as-data API */\n/* -------------------------------------------------------------------- */\n\nexport interface CommandPaletteDialogProps {\n /** Controlled open state. */\n open: boolean;\n /** Fires when the dialog opens/closes. */\n onOpenChange: (open: boolean) => void;\n /** Commands to display. */\n commands: Command[];\n /** Extra content rendered above the input (optional). */\n header?: ReactNode;\n /** Stable id for agent registration / DOM addressing. */\n id?: string;\n}\n\nconst overlayClasses = [\n 'ds:fixed ds:inset-0 ds:z-[var(--z-modal-backdrop)]',\n 'ds:bg-[var(--foreground)]/40 ds:backdrop-blur-sm',\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=open]:fade-in ds:data-[state=closed]:fade-out',\n 'ds:motion-reduce:animate-none',\n].join(' ');\n\nconst dialogContentClasses = [\n 'ds:fixed ds:z-[var(--z-modal)]',\n // Logical-inset arbitrary-value positioning: `inset-inline-start-1/2`\n // isn't a real Tailwind class (the generator maps fractions only to\n // `start-*`), so use `start-1/2` for horizontal and `top-*` for the\n // top offset — matching the working Dialog component.\n 'ds:top-[12vh] ds:start-1/2 ds:-translate-x-1/2 ds:rtl:translate-x-1/2',\n 'ds:w-[92vw] ds:max-w-[var(--dialog-width-lg)]',\n 'ds:rounded-[var(--radius-lg)]',\n 'ds:bg-[var(--background)] ds:text-[var(--foreground)]',\n 'ds:shadow-[var(--shadow-xl)]',\n 'ds:border ds:border-[var(--border)]',\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=open]:zoom-in-95 ds:data-[state=closed]:zoom-out-95',\n 'ds:motion-reduce:animate-none',\n 'ds:focus:outline-none',\n].join(' ');\n\nconst VisuallyHidden = ({ children }: { children: ReactNode }) => (\n <span className=\"ds:sr-only\">{children}</span>\n);\n\nfunction CommandPaletteDialog({\n open,\n onOpenChange,\n commands,\n header,\n id,\n}: CommandPaletteDialogProps) {\n const { t } = useTranslation();\n const [search, setSearch] = useState('');\n const [recents, setRecents] = useState<string[]>(readRecents);\n\n useEffect(() => {\n if (!open) setSearch('');\n }, [open]);\n\n // Agent handle — refs mirror state for fresh reads from the memoized handle.\n const openRef = useRef(open);\n useEffect(() => {\n openRef.current = open;\n }, [open]);\n const searchRef = useRef(search);\n useEffect(() => {\n searchRef.current = search;\n }, [search]);\n const onOpenChangeRef = useRef(onOpenChange);\n useEffect(() => {\n onOpenChangeRef.current = onOpenChange;\n }, [onOpenChange]);\n\n const agentHandle = useMemo<CommandPaletteHandle>(\n () => ({\n getQuery: () => searchRef.current,\n getIsOpen: () => openRef.current,\n open: () => onOpenChangeRef.current(true),\n close: () => onOpenChangeRef.current(false),\n setQuery: (query) => setSearch(query),\n }),\n [],\n );\n useAgentRegistration(commandPaletteAgent, agentHandle, id);\n\n const grouped = useMemo(() => {\n const byGroup = new Map<string, Command[]>();\n commands.forEach((c) => {\n const list = byGroup.get(c.group) ?? [];\n list.push(c);\n byGroup.set(c.group, list);\n });\n return byGroup;\n }, [commands]);\n\n const recentCommands = useMemo(() => {\n if (search) return [];\n const byId = new Map(commands.map((c) => [c.id, c]));\n return recents.map((id) => byId.get(id)).filter(Boolean) as Command[];\n }, [commands, recents, search]);\n\n const runCommand = useCallback(\n (cmd: Command) => {\n onOpenChange(false);\n const next = [cmd.id, ...recents.filter((id) => id !== cmd.id)].slice(\n 0,\n MAX_RECENTS,\n );\n setRecents(next);\n writeRecents(next);\n // Defer so Dialog unmount doesn't swallow the callback\n setTimeout(() => cmd.onSelect(), 0);\n },\n [recents, onOpenChange],\n );\n\n const clearRecents = useCallback(() => {\n setRecents([]);\n writeRecents([]);\n }, []);\n\n return (\n <RadixDialog.Root open={open} onOpenChange={onOpenChange}>\n <RadixDialog.Portal>\n <RadixDialog.Overlay className={overlayClasses} />\n <RadixDialog.Content\n className={dialogContentClasses}\n aria-label={t('navigation.cmdk.title', 'Command palette')}\n >\n <RadixDialog.Title asChild>\n <VisuallyHidden>\n {t('navigation.cmdk.title', 'Command palette')}\n </VisuallyHidden>\n </RadixDialog.Title>\n <RadixDialog.Description asChild>\n <VisuallyHidden>\n {t(\n 'navigation.cmdk.description',\n 'Search for commands, pages, and actions',\n )}\n </VisuallyHidden>\n </RadixDialog.Description>\n <CommandPalette\n id={id}\n label={t('navigation.cmdk.title', 'Command palette')}\n >\n {header}\n <CommandInput value={search} onValueChange={setSearch} />\n <CommandList>\n <CommandEmpty />\n {recentCommands.length > 0 ? (\n <>\n <CommandGroup\n heading={t('navigation.cmdk.recents', 'Recent')}\n >\n {recentCommands.map((cmd) => (\n <CommandItem\n key={`recent-${cmd.id}`}\n value={`recent-${cmd.label}`}\n onSelect={() => runCommand(cmd)}\n >\n {cmd.icon ? (\n <span aria-hidden=\"true\">{cmd.icon}</span>\n ) : null}\n <span>{cmd.label}</span>\n {cmd.shortcut ? (\n <CommandShortcut>{cmd.shortcut}</CommandShortcut>\n ) : null}\n </CommandItem>\n ))}\n <CommandItem\n value=\"__clear-recents\"\n onSelect={clearRecents}\n >\n <span>\n {t(\n 'navigation.cmdk.clearRecents',\n 'Clear recent commands',\n )}\n </span>\n </CommandItem>\n </CommandGroup>\n <CommandSeparator />\n </>\n ) : null}\n {Array.from(grouped.entries()).map(([group, list]) => (\n <CommandGroup key={group} heading={group}>\n {list.map((cmd) => (\n <CommandItem\n key={cmd.id}\n value={cmd.label}\n keywords={cmd.keywords}\n onSelect={() => runCommand(cmd)}\n >\n {cmd.icon ? (\n <span aria-hidden=\"true\">{cmd.icon}</span>\n ) : null}\n <span>{highlightMatch(cmd.label, search)}</span>\n {cmd.shortcut ? (\n <CommandShortcut>{cmd.shortcut}</CommandShortcut>\n ) : null}\n </CommandItem>\n ))}\n </CommandGroup>\n ))}\n </CommandList>\n </CommandPalette>\n </RadixDialog.Content>\n </RadixDialog.Portal>\n </RadixDialog.Root>\n );\n}\n\nexport {\n CommandPalette,\n CommandPaletteDialog,\n CommandInput,\n CommandList,\n CommandGroup,\n CommandItem,\n CommandEmpty,\n CommandSeparator,\n CommandShortcut,\n};\n"],"names":["commandPaletteAgent","handle","args","normalise","value","diacriticInsensitiveFilter","search","keywords","defaultFilter","RECENTS_KEY","MAX_RECENTS","readRecents","raw","parsed","v","writeRecents","ids","useCommandPalette","open","setOpen","useState","useEffect","handler","event","target","tag","isK","isMeta","rootClasses","CommandPalette","forwardRef","className","filter","id","rest","ref","jsx","CommandPrimitive","inputWrapClasses","inputClasses","CommandInput","placeholder","t","useTranslation","jsxs","Search","CommandList","CommandEmpty","children","CommandGroup","heading","itemClasses","CommandItem","CommandSeparator","CommandShortcut","highlightMatch","label","query","norm","normQ","idx","before","match","after","Fragment","overlayClasses","dialogContentClasses","VisuallyHidden","CommandPaletteDialog","onOpenChange","commands","header","setSearch","recents","setRecents","openRef","useRef","searchRef","onOpenChangeRef","agentHandle","useMemo","useAgentRegistration","grouped","byGroup","c","list","recentCommands","byId","runCommand","useCallback","cmd","next","clearRecents","RadixDialog","group"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"command-palette-DkL-aW4O.js","sources":["../../src/components/command-palette/command-palette.agent.ts","../../src/components/command-palette/command-palette.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { CommandPaletteHandle } from './command-palette';\n\nexport const commandPaletteAgent: AgentAdapter<CommandPaletteHandle> = {\n id: 'command-palette',\n capabilities: ['open', 'close', 'filter', 'pick', 'submit'],\n state: {\n query: {\n type: 'string',\n description: 'Current filter query in the command palette input.',\n read: (handle) => handle.getQuery(),\n },\n isOpen: {\n type: 'boolean',\n description: 'True when the palette is visible.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n open: {\n safety: 'read',\n description: 'Open the command palette.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n description: 'Close the command palette.',\n invoke: (handle) => {\n handle.close();\n },\n },\n apply_filter: {\n safety: 'read',\n argsType: '{ query: string }',\n description: 'Set the filter query.',\n invoke: (handle, args: { query: string }) => {\n handle.setQuery(args.query);\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'command-palette' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-command-id',\n description: 'Each command item emits its key as data-command-id.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from 'react';\nimport { Command as CommandPrimitive, defaultFilter } from 'cmdk';\nimport * as RadixDialog from '@radix-ui/react-dialog';\nimport { useTranslation } from 'react-i18next';\nimport { Search } from 'lucide-react';\nimport { useAgentRegistration } from '../../agent';\nimport { commandPaletteAgent } from './command-palette.agent';\n\n/* -------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------- */\n\nexport interface Command {\n id: string;\n label: string;\n group: string;\n keywords?: string[];\n shortcut?: string;\n onSelect: () => void;\n /** Optional leading icon. */\n icon?: ReactNode;\n}\n\n/* -------------------------------------------------------------------- */\n/* Diacritic-insensitive normaliser */\n/* -------------------------------------------------------------------- */\n\nfunction normalise(value: string): string {\n return value\n .normalize('NFD')\n .replace(/\\p{Diacritic}/gu, '')\n .toLowerCase();\n}\n\nexport const diacriticInsensitiveFilter = (\n value: string,\n search: string,\n keywords?: string[],\n) =>\n defaultFilter(normalise(value), normalise(search), keywords?.map(normalise));\n\n/* -------------------------------------------------------------------- */\n/* Recents (localStorage, SSR-safe) */\n/* -------------------------------------------------------------------- */\n\nconst RECENTS_KEY = 'ui.cmdk.recents';\nconst MAX_RECENTS = 5;\n\nfunction readRecents(): string[] {\n if (typeof window === 'undefined') return [];\n try {\n const raw = window.localStorage.getItem(RECENTS_KEY);\n if (!raw) return [];\n const parsed = JSON.parse(raw);\n return Array.isArray(parsed)\n ? parsed.slice(0, MAX_RECENTS).filter((v) => typeof v === 'string')\n : [];\n } catch {\n return [];\n }\n}\n\nfunction writeRecents(ids: string[]) {\n if (typeof window === 'undefined') return;\n try {\n window.localStorage.setItem(\n RECENTS_KEY,\n JSON.stringify(ids.slice(0, MAX_RECENTS)),\n );\n } catch {\n /* noop */\n }\n}\n\n/* -------------------------------------------------------------------- */\n/* useCommandPalette — Cmd/Ctrl+K hook */\n/* -------------------------------------------------------------------- */\n\nexport function useCommandPalette() {\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n function handler(event: KeyboardEvent) {\n const target = event.target as HTMLElement | null;\n const tag = target?.tagName.toLowerCase();\n const isEditable =\n tag === 'input' || tag === 'textarea' || target?.isContentEditable;\n if (isEditable && !(open && event.key === 'Escape')) return;\n\n const isK = event.key === 'k' || event.key === 'K';\n const isMeta = event.metaKey || event.ctrlKey;\n if (isK && isMeta) {\n event.preventDefault();\n setOpen((v) => !v);\n }\n }\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [open]);\n\n return { open, setOpen };\n}\n\n/* -------------------------------------------------------------------- */\n/* Primitives (forwardRef wrappers around cmdk + dialog chrome) */\n/* -------------------------------------------------------------------- */\n\nconst rootClasses = [\n 'ds:flex ds:h-full ds:w-full ds:flex-col ds:overflow-hidden',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:bg-[var(--background)] ds:text-[var(--foreground)]',\n].join(' ');\n\nexport type CommandPaletteRootProps = ComponentPropsWithoutRef<\n typeof CommandPrimitive\n>;\n\n// Curated agent-readiness handle — see command-palette.agent.ts.\nexport interface CommandPaletteHandle {\n getQuery: () => string;\n getIsOpen: () => boolean;\n open: () => void;\n close: () => void;\n setQuery: (query: string) => void;\n}\n\nconst CommandPalette = forwardRef<\n ElementRef<typeof CommandPrimitive>,\n CommandPaletteRootProps\n>(({ className, filter = diacriticInsensitiveFilter, id, ...rest }, ref) => (\n <CommandPrimitive\n ref={ref}\n filter={filter}\n className={[rootClasses, className].filter(Boolean).join(' ')}\n data-component=\"command-palette\"\n data-component-id={id}\n {...rest}\n />\n));\nCommandPalette.displayName = 'CommandPalette';\n\n/* -------------------------------------------------------------------- */\n/* Input */\n/* -------------------------------------------------------------------- */\n\nconst inputWrapClasses = [\n 'ds:flex ds:items-center',\n 'ds:border-block-end ds:border-[var(--border)]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-sm)]',\n].join(' ');\n\nconst inputClasses = [\n 'ds:flex ds:w-full ds:bg-transparent',\n 'ds:min-h-[var(--min-target-size)]',\n 'ds:text-[var(--font-size-base)] ds:text-[var(--foreground)]',\n 'ds:placeholder:text-[var(--muted-foreground)]',\n 'ds:outline-none',\n 'ds:disabled:cursor-not-allowed ds:disabled:opacity-50',\n 'ds:border-0',\n].join(' ');\n\nexport type CommandInputProps = ComponentPropsWithoutRef<\n typeof CommandPrimitive.Input\n>;\n\nconst CommandInput = forwardRef<\n ElementRef<typeof CommandPrimitive.Input>,\n CommandInputProps\n>(({ className, placeholder, ...rest }, ref) => {\n const { t } = useTranslation();\n return (\n <div className={inputWrapClasses}>\n <Search\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:me-2 ds:text-[var(--muted-foreground)]\"\n />\n <CommandPrimitive.Input\n ref={ref}\n placeholder={\n placeholder ??\n t('navigation.cmdk.placeholder', 'Type a command or search\\u2026')\n }\n className={[inputClasses, className].filter(Boolean).join(' ')}\n {...rest}\n />\n </div>\n );\n});\nCommandInput.displayName = 'CommandInput';\n\n/* -------------------------------------------------------------------- */\n/* List / Empty / Group / Item / Separator */\n/* -------------------------------------------------------------------- */\n\nconst CommandList = forwardRef<\n ElementRef<typeof CommandPrimitive.List>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(({ className, ...rest }, ref) => (\n <CommandPrimitive.List\n ref={ref}\n className={[\n 'ds:max-h-[20rem] ds:overflow-y-auto',\n 'ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)]',\n 'ds:py-[var(--spacing-xs)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n />\n));\nCommandList.displayName = 'CommandList';\n\nconst CommandEmpty = forwardRef<\n ElementRef<typeof CommandPrimitive.Empty>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>(({ className, children, ...rest }, ref) => {\n const { t } = useTranslation();\n return (\n <CommandPrimitive.Empty\n ref={ref}\n className={[\n 'ds:py-[var(--spacing-lg)] ds:text-center',\n 'type-body-sm ds:text-[var(--muted-foreground)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n {children ?? t('navigation.cmdk.empty', 'No results found')}\n </CommandPrimitive.Empty>\n );\n});\nCommandEmpty.displayName = 'CommandEmpty';\n\nconst CommandGroup = forwardRef<\n ElementRef<typeof CommandPrimitive.Group>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(({ className, heading, ...rest }, ref) => (\n <CommandPrimitive.Group\n ref={ref}\n heading={heading}\n className={[\n 'ds:overflow-hidden',\n 'ds:text-[var(--foreground)]',\n 'ds:[&_[cmdk-group-heading]]:ps-[var(--spacing-sm)]',\n 'ds:[&_[cmdk-group-heading]]:pe-[var(--spacing-sm)]',\n 'ds:[&_[cmdk-group-heading]]:py-[var(--spacing-xs)]',\n 'ds:[&_[cmdk-group-heading]]:type-eyebrow',\n 'ds:[&_[cmdk-group-heading]]:text-[var(--muted-foreground)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n />\n));\nCommandGroup.displayName = 'CommandGroup';\n\nconst itemClasses = [\n 'ds:relative ds:flex ds:items-center',\n 'ds:gap-[var(--spacing-sm)]',\n 'ds:min-h-[var(--min-target-size)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:text-[var(--font-size-sm)] ds:text-[var(--foreground)]',\n 'ds:cursor-pointer ds:select-none ds:outline-none',\n 'ds:data-[selected=true]:bg-[var(--primary)] ds:data-[selected=true]:text-[var(--primary-foreground)]',\n 'ds:data-[selected=true]:font-[var(--font-weight-semibold)]',\n 'ds:data-[disabled=true]:pointer-events-none ds:data-[disabled=true]:opacity-50',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n].join(' ');\n\nexport type CommandItemProps = ComponentPropsWithoutRef<\n typeof CommandPrimitive.Item\n>;\n\nconst CommandItem = forwardRef<\n ElementRef<typeof CommandPrimitive.Item>,\n CommandItemProps\n>(({ className, ...rest }, ref) => (\n <CommandPrimitive.Item\n ref={ref}\n className={[itemClasses, className].filter(Boolean).join(' ')}\n {...rest}\n />\n));\nCommandItem.displayName = 'CommandItem';\n\nconst CommandSeparator = forwardRef<\n ElementRef<typeof CommandPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(({ className, ...rest }, ref) => (\n <CommandPrimitive.Separator\n ref={ref}\n className={[\n 'ds:-ms-[var(--spacing-xs)] ds:-me-[var(--spacing-xs)]',\n 'ds:my-[var(--spacing-xs)]',\n 'ds:h-px ds:bg-[var(--border)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n />\n));\nCommandSeparator.displayName = 'CommandSeparator';\n\nexport type CommandShortcutProps = ComponentPropsWithoutRef<'kbd'>;\n\nconst CommandShortcut = forwardRef<HTMLElement, CommandShortcutProps>(\n ({ className, children, ...rest }, ref) => (\n <kbd\n ref={ref}\n className={[\n 'ds:ms-auto',\n 'ds:inline-flex ds:items-center',\n 'ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)]',\n 'ds:h-5 ds:rounded-[var(--radius-sm)]',\n 'ds:bg-[var(--muted)]/20 ds:text-[var(--muted-foreground)]',\n 'ds:text-[length:var(--font-size-xs)] ds:font-[var(--font-weight-medium)]',\n 'ds:data-[selected=true]:bg-[var(--primary-foreground)]/20',\n 'ds:data-[selected=true]:text-[var(--primary-foreground)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n {children}\n </kbd>\n ),\n);\nCommandShortcut.displayName = 'CommandShortcut';\n\n/* -------------------------------------------------------------------- */\n/* Highlight helper */\n/* -------------------------------------------------------------------- */\n\n/**\n * Returns React nodes that wrap the matching segments of `label` in `<mark>`.\n * Diacritic-insensitive. No `dangerouslySetInnerHTML`.\n */\nexport function highlightMatch(label: string, query: string): ReactNode {\n if (!query) return label;\n const norm = normalise(label);\n const normQ = normalise(query);\n const idx = norm.indexOf(normQ);\n if (idx === -1) return label;\n // Walk the original label using character-by-character correspondence with the\n // normalised string. Since normalise may drop diacritics, we use index mapping.\n const before = label.slice(0, idx);\n const match = label.slice(idx, idx + normQ.length);\n const after = label.slice(idx + normQ.length);\n return (\n <>\n {before}\n <mark className=\"ds:bg-[var(--accent)]/20 ds:text-inherit ds:rounded-[var(--radius-sm)] ds:px-[0.125em]\">\n {match}\n </mark>\n {after}\n </>\n );\n}\n\n/* -------------------------------------------------------------------- */\n/* CommandPaletteDialog — Dialog shell + commands-as-data API */\n/* -------------------------------------------------------------------- */\n\nexport interface CommandPaletteDialogProps {\n /** Controlled open state. */\n open: boolean;\n /** Fires when the dialog opens/closes. */\n onOpenChange: (open: boolean) => void;\n /** Commands to display. */\n commands: Command[];\n /** Extra content rendered above the input (optional). */\n header?: ReactNode;\n /** Stable id for agent registration / DOM addressing. */\n id?: string;\n}\n\nconst overlayClasses = [\n 'ds:fixed ds:inset-0 ds:z-[var(--z-modal-backdrop)]',\n 'ds:bg-[var(--foreground)]/40 ds:backdrop-blur-sm',\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=open]:fade-in ds:data-[state=closed]:fade-out',\n 'ds:motion-reduce:animate-none',\n].join(' ');\n\nconst dialogContentClasses = [\n 'ds:fixed ds:z-[var(--z-modal)]',\n // Logical-inset arbitrary-value positioning: `inset-inline-start-1/2`\n // isn't a real Tailwind class (the generator maps fractions only to\n // `start-*`), so use `start-1/2` for horizontal and `top-*` for the\n // top offset — matching the working Dialog component.\n 'ds:top-[12vh] ds:start-1/2 ds:-translate-x-1/2 ds:rtl:translate-x-1/2',\n 'ds:w-[92vw] ds:max-w-[var(--dialog-width-lg)]',\n 'ds:rounded-[var(--radius-lg)]',\n 'ds:bg-[var(--background)] ds:text-[var(--foreground)]',\n 'ds:shadow-[var(--shadow-xl)]',\n 'ds:border ds:border-[var(--border)]',\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=open]:zoom-in-95 ds:data-[state=closed]:zoom-out-95',\n 'ds:motion-reduce:animate-none',\n 'ds:focus:outline-none',\n].join(' ');\n\nconst VisuallyHidden = ({ children }: { children: ReactNode }) => (\n <span className=\"ds:sr-only\">{children}</span>\n);\n\nfunction CommandPaletteDialog({\n open,\n onOpenChange,\n commands,\n header,\n id,\n}: CommandPaletteDialogProps) {\n const { t } = useTranslation();\n const [search, setSearch] = useState('');\n const [recents, setRecents] = useState<string[]>(readRecents);\n\n useEffect(() => {\n if (!open) setSearch('');\n }, [open]);\n\n // Agent handle — refs mirror state for fresh reads from the memoized handle.\n const openRef = useRef(open);\n useEffect(() => {\n openRef.current = open;\n }, [open]);\n const searchRef = useRef(search);\n useEffect(() => {\n searchRef.current = search;\n }, [search]);\n const onOpenChangeRef = useRef(onOpenChange);\n useEffect(() => {\n onOpenChangeRef.current = onOpenChange;\n }, [onOpenChange]);\n\n const agentHandle = useMemo<CommandPaletteHandle>(\n () => ({\n getQuery: () => searchRef.current,\n getIsOpen: () => openRef.current,\n open: () => onOpenChangeRef.current(true),\n close: () => onOpenChangeRef.current(false),\n setQuery: (query) => setSearch(query),\n }),\n [],\n );\n useAgentRegistration(commandPaletteAgent, agentHandle, id);\n\n const grouped = useMemo(() => {\n const byGroup = new Map<string, Command[]>();\n commands.forEach((c) => {\n const list = byGroup.get(c.group) ?? [];\n list.push(c);\n byGroup.set(c.group, list);\n });\n return byGroup;\n }, [commands]);\n\n const recentCommands = useMemo(() => {\n if (search) return [];\n const byId = new Map(commands.map((c) => [c.id, c]));\n return recents.map((id) => byId.get(id)).filter(Boolean) as Command[];\n }, [commands, recents, search]);\n\n const runCommand = useCallback(\n (cmd: Command) => {\n onOpenChange(false);\n const next = [cmd.id, ...recents.filter((id) => id !== cmd.id)].slice(\n 0,\n MAX_RECENTS,\n );\n setRecents(next);\n writeRecents(next);\n // Defer so Dialog unmount doesn't swallow the callback\n setTimeout(() => cmd.onSelect(), 0);\n },\n [recents, onOpenChange],\n );\n\n const clearRecents = useCallback(() => {\n setRecents([]);\n writeRecents([]);\n }, []);\n\n return (\n <RadixDialog.Root open={open} onOpenChange={onOpenChange}>\n <RadixDialog.Portal>\n <RadixDialog.Overlay\n data-component=\"command-palette-overlay\"\n className={overlayClasses}\n />\n <RadixDialog.Content\n data-component=\"command-palette-dialog\"\n className={dialogContentClasses}\n aria-label={t('navigation.cmdk.title', 'Command palette')}\n >\n <RadixDialog.Title asChild>\n <VisuallyHidden>\n {t('navigation.cmdk.title', 'Command palette')}\n </VisuallyHidden>\n </RadixDialog.Title>\n <RadixDialog.Description asChild>\n <VisuallyHidden>\n {t(\n 'navigation.cmdk.description',\n 'Search for commands, pages, and actions',\n )}\n </VisuallyHidden>\n </RadixDialog.Description>\n <CommandPalette\n id={id}\n label={t('navigation.cmdk.title', 'Command palette')}\n >\n {header}\n <CommandInput value={search} onValueChange={setSearch} />\n <CommandList>\n <CommandEmpty />\n {recentCommands.length > 0 ? (\n <>\n <CommandGroup\n heading={t('navigation.cmdk.recents', 'Recent')}\n >\n {recentCommands.map((cmd) => (\n <CommandItem\n key={`recent-${cmd.id}`}\n value={`recent-${cmd.label}`}\n onSelect={() => runCommand(cmd)}\n >\n {cmd.icon ? (\n <span aria-hidden=\"true\">{cmd.icon}</span>\n ) : null}\n <span>{cmd.label}</span>\n {cmd.shortcut ? (\n <CommandShortcut>{cmd.shortcut}</CommandShortcut>\n ) : null}\n </CommandItem>\n ))}\n <CommandItem\n value=\"__clear-recents\"\n onSelect={clearRecents}\n >\n <span>\n {t(\n 'navigation.cmdk.clearRecents',\n 'Clear recent commands',\n )}\n </span>\n </CommandItem>\n </CommandGroup>\n <CommandSeparator />\n </>\n ) : null}\n {Array.from(grouped.entries()).map(([group, list]) => (\n <CommandGroup key={group} heading={group}>\n {list.map((cmd) => (\n <CommandItem\n key={cmd.id}\n value={cmd.label}\n keywords={cmd.keywords}\n onSelect={() => runCommand(cmd)}\n >\n {cmd.icon ? (\n <span aria-hidden=\"true\">{cmd.icon}</span>\n ) : null}\n <span>{highlightMatch(cmd.label, search)}</span>\n {cmd.shortcut ? (\n <CommandShortcut>{cmd.shortcut}</CommandShortcut>\n ) : null}\n </CommandItem>\n ))}\n </CommandGroup>\n ))}\n </CommandList>\n </CommandPalette>\n </RadixDialog.Content>\n </RadixDialog.Portal>\n </RadixDialog.Root>\n );\n}\n\nexport {\n CommandPalette,\n CommandPaletteDialog,\n CommandInput,\n CommandList,\n CommandGroup,\n CommandItem,\n CommandEmpty,\n CommandSeparator,\n CommandShortcut,\n};\n"],"names":["commandPaletteAgent","handle","args","normalise","value","diacriticInsensitiveFilter","search","keywords","defaultFilter","RECENTS_KEY","MAX_RECENTS","readRecents","raw","parsed","v","writeRecents","ids","useCommandPalette","open","setOpen","useState","useEffect","handler","event","target","tag","isK","isMeta","rootClasses","CommandPalette","forwardRef","className","filter","id","rest","ref","jsx","CommandPrimitive","inputWrapClasses","inputClasses","CommandInput","placeholder","t","useTranslation","jsxs","Search","CommandList","CommandEmpty","children","CommandGroup","heading","itemClasses","CommandItem","CommandSeparator","CommandShortcut","highlightMatch","label","query","norm","normQ","idx","before","match","after","Fragment","overlayClasses","dialogContentClasses","VisuallyHidden","CommandPaletteDialog","onOpenChange","commands","header","setSearch","recents","setRecents","openRef","useRef","searchRef","onOpenChangeRef","agentHandle","useMemo","useAgentRegistration","grouped","byGroup","c","list","recentCommands","byId","runCommand","useCallback","cmd","next","clearRecents","RadixDialog","group"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as
|
|
1
|
+
import { jsx as s, jsxs as y } from "react/jsx-runtime";
|
|
2
2
|
import { useState as k, useRef as z, useEffect as E, useCallback as I, useMemo as O, forwardRef as d, useContext as B, createContext as S } from "react";
|
|
3
3
|
import * as t from "@radix-ui/react-dialog";
|
|
4
4
|
import { c as A } from "./index-D2ZczOXr.js";
|
|
@@ -73,17 +73,17 @@ const $ = {
|
|
|
73
73
|
}
|
|
74
74
|
},
|
|
75
75
|
defaultVariants: { size: "md" }
|
|
76
|
-
}),
|
|
76
|
+
}), D = S(void 0), v = ({
|
|
77
77
|
children: o,
|
|
78
78
|
id: e,
|
|
79
|
-
open:
|
|
79
|
+
open: a,
|
|
80
80
|
defaultOpen: r,
|
|
81
81
|
onOpenChange: i,
|
|
82
82
|
...p
|
|
83
83
|
}) => {
|
|
84
|
-
const l =
|
|
84
|
+
const l = a !== void 0, [m, g] = k(
|
|
85
85
|
r ?? !1
|
|
86
|
-
), n = l ? !!
|
|
86
|
+
), n = l ? !!a : m, f = z(n);
|
|
87
87
|
E(() => {
|
|
88
88
|
f.current = n;
|
|
89
89
|
}, [n]);
|
|
@@ -100,26 +100,26 @@ const $ = {
|
|
|
100
100
|
}),
|
|
101
101
|
[c]
|
|
102
102
|
);
|
|
103
|
-
return L($, j, e), /* @__PURE__ */
|
|
103
|
+
return L($, j, e), /* @__PURE__ */ s(D.Provider, { value: e, children: /* @__PURE__ */ s(t.Root, { open: n, onOpenChange: c, ...p, children: o }) });
|
|
104
104
|
};
|
|
105
105
|
v.displayName = "Dialog.Root";
|
|
106
|
-
const h = d(({ children: o, ...e },
|
|
106
|
+
const h = d(({ children: o, ...e }, a) => /* @__PURE__ */ s(t.Trigger, { ref: a, ...e, children: o }));
|
|
107
107
|
h.displayName = "Dialog.Trigger";
|
|
108
|
-
const b = d(({ children: o, ...e },
|
|
108
|
+
const b = d(({ children: o, ...e }, a) => /* @__PURE__ */ s(t.Close, { ref: a, ...e, children: o }));
|
|
109
109
|
b.displayName = "Dialog.Close";
|
|
110
110
|
const N = d(
|
|
111
111
|
({
|
|
112
112
|
size: o = "md",
|
|
113
113
|
variant: e = "default",
|
|
114
|
-
hideCloseButton:
|
|
114
|
+
hideCloseButton: a = !0,
|
|
115
115
|
className: r,
|
|
116
116
|
children: i,
|
|
117
117
|
...p
|
|
118
118
|
}, l) => {
|
|
119
|
-
const { t: m } = H(), g = B(
|
|
120
|
-
return /* @__PURE__ */
|
|
121
|
-
/* @__PURE__ */
|
|
122
|
-
/* @__PURE__ */
|
|
119
|
+
const { t: m } = H(), g = B(D), n = e === "alert" ? { role: "alertdialog" } : {};
|
|
120
|
+
return /* @__PURE__ */ y(t.Portal, { children: [
|
|
121
|
+
/* @__PURE__ */ s(t.Overlay, { "data-component": "dialog-overlay", className: P }),
|
|
122
|
+
/* @__PURE__ */ y(
|
|
123
123
|
t.Content,
|
|
124
124
|
{
|
|
125
125
|
ref: l,
|
|
@@ -130,10 +130,10 @@ const N = d(
|
|
|
130
130
|
...p,
|
|
131
131
|
children: [
|
|
132
132
|
i,
|
|
133
|
-
!
|
|
133
|
+
!a && /* @__PURE__ */ s("div", { className: "ds:absolute ds:end-[var(--spacing-md)] ds:top-[var(--spacing-md)]", children: /* @__PURE__ */ s(t.Close, { asChild: !0, children: /* @__PURE__ */ s(
|
|
134
134
|
F,
|
|
135
135
|
{
|
|
136
|
-
icon: /* @__PURE__ */
|
|
136
|
+
icon: /* @__PURE__ */ s(V, {}),
|
|
137
137
|
intent: "ghost",
|
|
138
138
|
size: "sm",
|
|
139
139
|
"aria-label": m("ui.common.close", "Close")
|
|
@@ -147,10 +147,10 @@ const N = d(
|
|
|
147
147
|
);
|
|
148
148
|
N.displayName = "Dialog.Content";
|
|
149
149
|
const w = d(
|
|
150
|
-
({ className: o, ...e },
|
|
150
|
+
({ className: o, ...e }, a) => /* @__PURE__ */ s(
|
|
151
151
|
"div",
|
|
152
152
|
{
|
|
153
|
-
ref:
|
|
153
|
+
ref: a,
|
|
154
154
|
className: [
|
|
155
155
|
"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:pe-[var(--spacing-xl)]",
|
|
156
156
|
o
|
|
@@ -160,26 +160,26 @@ const w = d(
|
|
|
160
160
|
)
|
|
161
161
|
);
|
|
162
162
|
w.displayName = "Dialog.Header";
|
|
163
|
-
const C = d(({ className: o, ...e },
|
|
163
|
+
const C = d(({ className: o, ...e }, a) => /* @__PURE__ */ s(
|
|
164
164
|
t.Title,
|
|
165
165
|
{
|
|
166
|
-
ref:
|
|
166
|
+
ref: a,
|
|
167
167
|
className: ["type-title-card ds:break-words", o].filter(Boolean).join(" "),
|
|
168
168
|
...e
|
|
169
169
|
}
|
|
170
170
|
));
|
|
171
171
|
C.displayName = "Dialog.Title";
|
|
172
|
-
const R = d(({ className: o, ...e },
|
|
172
|
+
const R = d(({ className: o, ...e }, a) => /* @__PURE__ */ s(
|
|
173
173
|
t.Description,
|
|
174
174
|
{
|
|
175
|
-
ref:
|
|
175
|
+
ref: a,
|
|
176
176
|
className: ["type-body-sm ds:text-[var(--muted-foreground)]", o].filter(Boolean).join(" "),
|
|
177
177
|
...e
|
|
178
178
|
}
|
|
179
179
|
));
|
|
180
180
|
R.displayName = "Dialog.Description";
|
|
181
181
|
const T = d(
|
|
182
|
-
({ className: o, divider: e = !1, ...
|
|
182
|
+
({ className: o, divider: e = !1, ...a }, r) => /* @__PURE__ */ s(
|
|
183
183
|
"div",
|
|
184
184
|
{
|
|
185
185
|
ref: r,
|
|
@@ -189,7 +189,7 @@ const T = d(
|
|
|
189
189
|
e && "ds:border-t ds:border-[color:var(--border)] ds:pt-[var(--spacing-md)]",
|
|
190
190
|
o
|
|
191
191
|
].filter(Boolean).join(" "),
|
|
192
|
-
...
|
|
192
|
+
...a
|
|
193
193
|
}
|
|
194
194
|
)
|
|
195
195
|
);
|
|
@@ -208,4 +208,4 @@ export {
|
|
|
208
208
|
U as D,
|
|
209
209
|
$ as d
|
|
210
210
|
};
|
|
211
|
-
//# sourceMappingURL=dialog-
|
|
211
|
+
//# sourceMappingURL=dialog-D5bK95-N.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialog-D5bK95-N.js","sources":["../../src/components/dialog/dialog.agent.ts","../../src/components/dialog/dialog.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { DialogHandle } from './dialog';\n\n/**\n * Dialog wraps Radix Dialog. The curated handle (`DialogHandle`) bridges the\n * Radix controlled-or-uncontrolled `open` state so an agent can observe and\n * drive the dialog without owning the React state itself.\n */\nexport const dialogAgent: AgentAdapter<DialogHandle> = {\n id: 'dialog',\n capabilities: ['open', 'close', 'dismiss'],\n state: {\n isOpen: {\n type: 'boolean',\n description: 'True when the dialog is currently open.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n open: {\n safety: 'read',\n description: 'Open the dialog.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'write',\n description: 'Close the dialog. Reversible by reopening.',\n invoke: (handle) => {\n handle.close();\n },\n },\n dismiss: {\n safety: 'destructive',\n description:\n 'Dismiss the dialog. Loses any in-progress input that has not been committed.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'dialog' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop on Dialog.Root.',\n },\n },\n};\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport * as RadixDialog from '@radix-ui/react-dialog';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { X } from 'lucide-react';\nimport { IconButton } from '../button/icon-button';\nimport { useAgentRegistration } from '../../agent';\nimport { dialogAgent } from './dialog.agent';\n\nconst OVERLAY_CLASSES = [\n 'ds:fixed ds:inset-0 ds:z-[var(--z-modal-backdrop)]',\n 'ds:bg-[var(--background)]/[var(--opacity-70)]',\n 'ds:backdrop-blur-sm',\n 'ds:data-[state=open]:animate-in ds:data-[state=open]:fade-in-0',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out-0',\n 'ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n].join(' ');\n\nconst CONTENT_BASE = [\n 'ds:fixed ds:z-[var(--z-modal)]',\n 'ds:bg-[var(--popover)] ds:text-[var(--popover-foreground)]',\n 'ds:shadow-[var(--shadow-xl)]',\n 'ds:p-[var(--spacing-lg)]',\n 'ds:focus-visible:outline-none',\n 'ds:data-[state=open]:animate-in ds:data-[state=open]:fade-in-0 ds:data-[state=open]:zoom-in-95',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out-0 ds:data-[state=closed]:zoom-out-95',\n 'ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n].join(' ');\n\nconst CENTERED =\n 'ds:start-1/2 ds:top-1/2 ds:-translate-x-1/2 ds:-translate-y-1/2 ds:w-[calc(100%-var(--spacing-lg)*2)]';\n\nconst contentVariants = cva(CONTENT_BASE, {\n variants: {\n size: {\n sm: `${CENTERED} ds:max-w-[448px] ds:rounded-[var(--radius-lg)] ds:overflow-y-auto ds:max-h-[85dvh]`,\n md: `${CENTERED} ds:max-w-[560px] ds:rounded-[var(--radius-lg)] ds:overflow-y-auto ds:max-h-[85dvh]`,\n lg: `${CENTERED} ds:max-w-[720px] ds:rounded-[var(--radius-lg)] ds:overflow-y-auto ds:max-h-[85dvh]`,\n fullscreen:\n 'ds:start-0 ds:top-0 ds:w-[100dvw] ds:h-[100dvh] ds:max-w-none ds:rounded-none ds:overflow-y-auto',\n },\n },\n defaultVariants: { size: 'md' },\n});\n\n// Curated agent-readiness handle — see dialog.agent.ts.\nexport interface DialogHandle {\n getIsOpen: () => boolean;\n open: () => void;\n close: () => void;\n}\n\nexport interface DialogRootProps extends ComponentPropsWithoutRef<\n typeof RadixDialog.Root\n> {\n /** Opaque instance id — forwarded to Dialog.Content as `data-component-id`. */\n id?: string;\n}\n\nconst DialogIdContext = createContext<string | undefined>(undefined);\n\nconst DialogRoot = ({\n children,\n id,\n open: openProp,\n defaultOpen,\n onOpenChange,\n ...props\n}: DialogRootProps) => {\n const isControlled = openProp !== undefined;\n const [internalOpen, setInternalOpen] = useState<boolean>(\n defaultOpen ?? false,\n );\n const open = isControlled ? Boolean(openProp) : internalOpen;\n\n const openRef = useRef(open);\n useEffect(() => {\n openRef.current = open;\n }, [open]);\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n const handle = useMemo<DialogHandle>(\n () => ({\n getIsOpen: () => openRef.current,\n open: () => setOpen(true),\n close: () => setOpen(false),\n }),\n [setOpen],\n );\n useAgentRegistration(dialogAgent, handle, id);\n\n return (\n <DialogIdContext.Provider value={id}>\n <RadixDialog.Root open={open} onOpenChange={setOpen} {...props}>\n {children}\n </RadixDialog.Root>\n </DialogIdContext.Provider>\n );\n};\nDialogRoot.displayName = 'Dialog.Root';\n\nconst DialogTrigger = forwardRef<\n HTMLButtonElement,\n ComponentPropsWithoutRef<typeof RadixDialog.Trigger>\n>(({ children, ...props }, ref) => (\n <RadixDialog.Trigger ref={ref} {...props}>\n {children}\n </RadixDialog.Trigger>\n));\nDialogTrigger.displayName = 'Dialog.Trigger';\n\nconst DialogClose = forwardRef<\n HTMLButtonElement,\n ComponentPropsWithoutRef<typeof RadixDialog.Close>\n>(({ children, ...props }, ref) => (\n <RadixDialog.Close ref={ref} {...props}>\n {children}\n </RadixDialog.Close>\n));\nDialogClose.displayName = 'Dialog.Close';\n\nexport interface DialogContentProps\n extends\n Omit<ComponentPropsWithoutRef<typeof RadixDialog.Content>, 'role'>,\n VariantProps<typeof contentVariants> {\n size?: 'sm' | 'md' | 'lg' | 'fullscreen';\n variant?: 'default' | 'alert' | 'confirmation';\n hideCloseButton?: boolean;\n className?: string;\n children: ReactNode;\n}\n\nconst DialogContent = forwardRef<HTMLDivElement, DialogContentProps>(\n (\n {\n size = 'md',\n variant = 'default',\n hideCloseButton = true,\n className,\n children,\n ...props\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const instanceId = useContext(DialogIdContext);\n // Only forward `role` when we actually need to override Radix's default\n // (`role=\"dialog\"`). Passing `role={undefined}` explicitly wins over\n // Radix's internal assignment and strips the attribute entirely.\n const roleOverride =\n variant === 'alert' ? { role: 'alertdialog' as const } : {};\n\n return (\n <RadixDialog.Portal>\n <RadixDialog.Overlay data-component=\"dialog-overlay\" className={OVERLAY_CLASSES} />\n <RadixDialog.Content\n ref={ref}\n {...roleOverride}\n data-component=\"dialog\"\n data-component-id={instanceId}\n className={contentVariants({ size, className })}\n {...props}\n >\n {children}\n\n {!hideCloseButton && (\n <div className=\"ds:absolute ds:end-[var(--spacing-md)] ds:top-[var(--spacing-md)]\">\n <RadixDialog.Close asChild>\n <IconButton\n icon={<X />}\n intent=\"ghost\"\n size=\"sm\"\n aria-label={t('ui.common.close', 'Close')}\n />\n </RadixDialog.Close>\n </div>\n )}\n </RadixDialog.Content>\n </RadixDialog.Portal>\n );\n },\n);\nDialogContent.displayName = 'Dialog.Content';\n\nconst DialogHeader = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={[\n 'ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:pe-[var(--spacing-xl)]',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n ),\n);\nDialogHeader.displayName = 'Dialog.Header';\n\nconst DialogTitle = forwardRef<\n HTMLHeadingElement,\n ComponentPropsWithoutRef<typeof RadixDialog.Title>\n>(({ className, ...props }, ref) => (\n <RadixDialog.Title\n ref={ref}\n className={['type-title-card ds:break-words', className]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n));\nDialogTitle.displayName = 'Dialog.Title';\n\nconst DialogDescription = forwardRef<\n HTMLParagraphElement,\n ComponentPropsWithoutRef<typeof RadixDialog.Description>\n>(({ className, ...props }, ref) => (\n <RadixDialog.Description\n ref={ref}\n className={['type-body-sm ds:text-[var(--muted-foreground)]', className]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n));\nDialogDescription.displayName = 'Dialog.Description';\n\ninterface DialogFooterProps extends HTMLAttributes<HTMLDivElement> {\n divider?: boolean;\n}\n\nconst DialogFooter = forwardRef<HTMLDivElement, DialogFooterProps>(\n ({ className, divider = false, ...props }, ref) => (\n <div\n ref={ref}\n className={[\n 'ds:flex ds:items-center ds:justify-end ds:gap-[var(--spacing-sm)]',\n 'ds:mt-[var(--spacing-md)]',\n divider &&\n 'ds:border-t ds:border-[color:var(--border)] ds:pt-[var(--spacing-md)]',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n ),\n);\nDialogFooter.displayName = 'Dialog.Footer';\n\nexport const Dialog = Object.assign(DialogRoot, {\n Root: DialogRoot,\n Trigger: DialogTrigger,\n Content: DialogContent,\n Header: DialogHeader,\n Title: DialogTitle,\n Description: DialogDescription,\n Footer: DialogFooter,\n Close: DialogClose,\n});\n\nexport type { DialogFooterProps };\n"],"names":["dialogAgent","handle","OVERLAY_CLASSES","CONTENT_BASE","CENTERED","contentVariants","cva","DialogIdContext","createContext","DialogRoot","children","id","openProp","defaultOpen","onOpenChange","props","isControlled","internalOpen","setInternalOpen","useState","open","openRef","useRef","useEffect","setOpen","useCallback","next","useMemo","useAgentRegistration","jsx","RadixDialog","DialogTrigger","forwardRef","ref","DialogClose","DialogContent","size","variant","hideCloseButton","className","t","useTranslation","instanceId","useContext","roleOverride","jsxs","IconButton","X","DialogHeader","DialogTitle","DialogDescription","DialogFooter","divider","Dialog"],"mappings":";;;;;;;;AAQO,MAAMA,IAA0C;AAAA,EACrD,IAAI;AAAA,EACJ,cAAc,CAAC,QAAQ,SAAS,SAAS;AAAA,EACzC,OAAO;AAAA,IACL,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,MACb,MAAM,CAACC,MAAWA,EAAO,UAAA;AAAA,IAAU;AAAA,EACrC;AAAA,EAEF,SAAS;AAAA,IACP,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ,CAACA,MAAW;AAClB,QAAAA,EAAO,KAAA;AAAA,MACT;AAAA,IAAA;AAAA,IAEF,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ,CAACA,MAAW;AAClB,QAAAA,EAAO,MAAA;AAAA,MACT;AAAA,IAAA;AAAA,IAEF,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,aACE;AAAA,MACF,QAAQ,CAACA,MAAW;AAClB,QAAAA,EAAO,MAAA;AAAA,MACT;AAAA,IAAA;AAAA,EACF;AAAA,EAEF,UAAU;AAAA,IACR,MAAM,EAAE,MAAM,kBAAkB,OAAO,SAAA;AAAA,IACvC,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,aAAa;AAAA,IAAA;AAAA,EACf;AAEJ,GC7BMC,IAAkB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG,GAEJC,IAAe;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG,GAEJC,IACJ,yGAEIC,IAAkBC,EAAIH,GAAc;AAAA,EACxC,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI,GAAGC,CAAQ;AAAA,MACf,IAAI,GAAGA,CAAQ;AAAA,MACf,IAAI,GAAGA,CAAQ;AAAA,MACf,YACE;AAAA,IAAA;AAAA,EACJ;AAAA,EAEF,iBAAiB,EAAE,MAAM,KAAA;AAC3B,CAAC,GAgBKG,IAAkBC,EAAkC,MAAS,GAE7DC,IAAa,CAAC;AAAA,EAClB,UAAAC;AAAA,EACA,IAAAC;AAAA,EACA,MAAMC;AAAA,EACN,aAAAC;AAAA,EACA,cAAAC;AAAA,EACA,GAAGC;AACL,MAAuB;AACrB,QAAMC,IAAeJ,MAAa,QAC5B,CAACK,GAAcC,CAAe,IAAIC;AAAA,IACtCN,KAAe;AAAA,EAAA,GAEXO,IAAOJ,IAAe,EAAQJ,IAAYK,GAE1CI,IAAUC,EAAOF,CAAI;AAC3B,EAAAG,EAAU,MAAM;AACd,IAAAF,EAAQ,UAAUD;AAAA,EACpB,GAAG,CAACA,CAAI,CAAC;AAET,QAAMI,IAAUC;AAAA,IACd,CAACC,MAAkB;AACjB,MAAKV,KAAcE,EAAgBQ,CAAI,GACvCZ,KAAA,QAAAA,EAAeY;AAAA,IACjB;AAAA,IACA,CAACV,GAAcF,CAAY;AAAA,EAAA,GAGvBb,IAAS0B;AAAA,IACb,OAAO;AAAA,MACL,WAAW,MAAMN,EAAQ;AAAA,MACzB,MAAM,MAAMG,EAAQ,EAAI;AAAA,MACxB,OAAO,MAAMA,EAAQ,EAAK;AAAA,IAAA;AAAA,IAE5B,CAACA,CAAO;AAAA,EAAA;AAEV,SAAAI,EAAqB5B,GAAaC,GAAQU,CAAE,qBAGzCJ,EAAgB,UAAhB,EAAyB,OAAOI,GAC/B,UAAA,gBAAAkB,EAACC,EAAY,MAAZ,EAAiB,MAAAV,GAAY,cAAcI,GAAU,GAAGT,GACtD,UAAAL,GACH,GACF;AAEJ;AACAD,EAAW,cAAc;AAEzB,MAAMsB,IAAgBC,EAGpB,CAAC,EAAE,UAAAtB,GAAU,GAAGK,EAAA,GAASkB,MACzB,gBAAAJ,EAACC,EAAY,SAAZ,EAAoB,KAAAG,GAAW,GAAGlB,GAChC,UAAAL,GACH,CACD;AACDqB,EAAc,cAAc;AAE5B,MAAMG,IAAcF,EAGlB,CAAC,EAAE,UAAAtB,GAAU,GAAGK,EAAA,GAASkB,MACzB,gBAAAJ,EAACC,EAAY,OAAZ,EAAkB,KAAAG,GAAW,GAAGlB,GAC9B,UAAAL,GACH,CACD;AACDwB,EAAY,cAAc;AAa1B,MAAMC,IAAgBH;AAAA,EACpB,CACE;AAAA,IACE,MAAAI,IAAO;AAAA,IACP,SAAAC,IAAU;AAAA,IACV,iBAAAC,IAAkB;AAAA,IAClB,WAAAC;AAAA,IACA,UAAA7B;AAAA,IACA,GAAGK;AAAA,EAAA,GAELkB,MACG;AACH,UAAM,EAAE,GAAAO,EAAA,IAAMC,EAAA,GACRC,IAAaC,EAAWpC,CAAe,GAIvCqC,IACJP,MAAY,UAAU,EAAE,MAAM,cAAA,IAA2B,CAAA;AAE3D,WACE,gBAAAQ,EAACf,EAAY,QAAZ,EACC,UAAA;AAAA,MAAA,gBAAAD,EAACC,EAAY,SAAZ,EAAoB,kBAAe,kBAAiB,WAAW5B,GAAiB;AAAA,MACjF,gBAAA2C;AAAA,QAACf,EAAY;AAAA,QAAZ;AAAA,UACC,KAAAG;AAAA,UACC,GAAGW;AAAA,UACJ,kBAAe;AAAA,UACf,qBAAmBF;AAAA,UACnB,WAAWrC,EAAgB,EAAE,MAAA+B,GAAM,WAAAG,GAAW;AAAA,UAC7C,GAAGxB;AAAA,UAEH,UAAA;AAAA,YAAAL;AAAA,YAEA,CAAC4B,KACA,gBAAAT,EAAC,OAAA,EAAI,WAAU,qEACb,UAAA,gBAAAA,EAACC,EAAY,OAAZ,EAAkB,SAAO,IACxB,UAAA,gBAAAD;AAAA,cAACiB;AAAA,cAAA;AAAA,gBACC,wBAAOC,GAAA,EAAE;AAAA,gBACT,QAAO;AAAA,gBACP,MAAK;AAAA,gBACL,cAAYP,EAAE,mBAAmB,OAAO;AAAA,cAAA;AAAA,YAAA,GAE5C,EAAA,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAEJ,GACF;AAAA,EAEJ;AACF;AACAL,EAAc,cAAc;AAE5B,MAAMa,IAAehB;AAAA,EACnB,CAAC,EAAE,WAAAO,GAAW,GAAGxB,EAAA,GAASkB,MACxB,gBAAAJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAI;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACAM;AAAA,MAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MACV,GAAGxB;AAAA,IAAA;AAAA,EAAA;AAGV;AACAiC,EAAa,cAAc;AAE3B,MAAMC,IAAcjB,EAGlB,CAAC,EAAE,WAAAO,GAAW,GAAGxB,EAAA,GAASkB,MAC1B,gBAAAJ;AAAA,EAACC,EAAY;AAAA,EAAZ;AAAA,IACC,KAAAG;AAAA,IACA,WAAW,CAAC,kCAAkCM,CAAS,EACpD,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IACV,GAAGxB;AAAA,EAAA;AACN,CACD;AACDkC,EAAY,cAAc;AAE1B,MAAMC,IAAoBlB,EAGxB,CAAC,EAAE,WAAAO,GAAW,GAAGxB,EAAA,GAASkB,MAC1B,gBAAAJ;AAAA,EAACC,EAAY;AAAA,EAAZ;AAAA,IACC,KAAAG;AAAA,IACA,WAAW,CAAC,kDAAkDM,CAAS,EACpE,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IACV,GAAGxB;AAAA,EAAA;AACN,CACD;AACDmC,EAAkB,cAAc;AAMhC,MAAMC,IAAenB;AAAA,EACnB,CAAC,EAAE,WAAAO,GAAW,SAAAa,IAAU,IAAO,GAAGrC,EAAA,GAASkB,MACzC,gBAAAJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAI;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACAmB,KACE;AAAA,QACFb;AAAA,MAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MACV,GAAGxB;AAAA,IAAA;AAAA,EAAA;AAGV;AACAoC,EAAa,cAAc;AAEpB,MAAME,IAAS,OAAO,OAAO5C,GAAY;AAAA,EAC9C,MAAMA;AAAA,EACN,SAASsB;AAAA,EACT,SAASI;AAAA,EACT,QAAQa;AAAA,EACR,OAAOC;AAAA,EACP,aAAaC;AAAA,EACb,QAAQC;AAAA,EACR,OAAOjB;AACT,CAAC;"}
|
|
@@ -271,6 +271,7 @@ const T = r(({ className: s, ...a }, o) => /* @__PURE__ */ e(t.Portal, { childre
|
|
|
271
271
|
{
|
|
272
272
|
ref: o,
|
|
273
273
|
sideOffset: 8,
|
|
274
|
+
"data-component": "dropdown-menu-sub-content",
|
|
274
275
|
className: N({ className: s }),
|
|
275
276
|
...a
|
|
276
277
|
}
|
|
@@ -297,4 +298,4 @@ export {
|
|
|
297
298
|
le as D,
|
|
298
299
|
U as d
|
|
299
300
|
};
|
|
300
|
-
//# sourceMappingURL=dropdown-menu-
|
|
301
|
+
//# sourceMappingURL=dropdown-menu-dyV7gHh_.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown-menu-CpiF6CPz.js","sources":["../../src/components/dropdown-menu/dropdown-menu.agent.ts","../../src/components/dropdown-menu/dropdown-menu.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { DropdownMenuHandle } from './dropdown-menu';\n\nexport const dropdownMenuAgent: AgentAdapter<DropdownMenuHandle> = {\n id: 'dropdown-menu',\n capabilities: ['open', 'close', 'pick'],\n state: {\n isOpen: {\n type: 'boolean',\n description: 'True when the menu is currently open.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n open: {\n safety: 'read',\n description: 'Open the menu.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n description: 'Close the menu.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'dropdown-menu' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop on DropdownMenu.Root.',\n },\n item: {\n attr: 'data-item-id',\n description: 'Each menu item emits its value as data-item-id.',\n },\n },\n};\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from 'react';\nimport * as RadixDropdownMenu from '@radix-ui/react-dropdown-menu';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Check, ChevronRight } from 'lucide-react';\nimport { Separator as DsSeparator } from '../separator/separator';\nimport { Kbd, type KbdNamedKey } from '../kbd/kbd';\nimport { useDocumentDirection } from '../_shared/use-direction';\nimport { useAgentRegistration } from '../../agent';\nimport { dropdownMenuAgent } from './dropdown-menu.agent';\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst contentVariants = cva(\n [\n 'ds:z-[var(--z-dropdown)]',\n 'ds:min-w-[8rem]',\n 'ds:rounded-[var(--radius-md)]',\n // Border kept (transparent) so the forced-colors override below can\n // repaint a visible edge in HCM. In normal modes the soft drop-shadow\n // carries the edge cue; the heavy `--border` (grey-800 since WCAG\n // 1.4.11 bump in 67fef8c) made the menu read as a charcoal box.\n 'ds:border ds:border-transparent',\n 'ds:bg-[var(--popover)] ds:text-[color:var(--popover-foreground)]',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:p-[var(--spacing-xs)]',\n // Motion — gated on --animation-duration via Tailwind's animate-in\n // preset. motion-reduce disables via the no-preference query.\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=open]:fade-in ds:data-[state=closed]:fade-out',\n 'ds:data-[state=open]:zoom-in-95 ds:data-[state=closed]:zoom-out-95',\n 'ds:motion-reduce:animate-none',\n 'ds:forced-colors:border-[CanvasText]',\n ].join(' '),\n);\n\nconst itemClasses = cva(\n [\n 'ds:relative ds:flex ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:min-h-[var(--min-target-size)]',\n 'ds:text-[length:var(--font-size-sm)] ds:text-[color:var(--foreground)]',\n 'ds:cursor-pointer ds:select-none ds:outline-none',\n // Highlighted + hover state\n 'ds:data-[highlighted]:bg-[color:var(--muted)]/40',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid ds:focus-visible:outline-[color:var(--ring)]',\n 'ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n // Disabled\n 'ds:data-[disabled]:opacity-50 ds:data-[disabled]:cursor-not-allowed',\n 'ds:data-[disabled]:pointer-events-none',\n ].join(' '),\n);\n\nconst labelClasses = cva(\n [\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n 'type-eyebrow ds:text-[color:var(--muted-foreground)]',\n 'ds:select-none',\n ].join(' '),\n);\n\nconst indicatorSlotClasses =\n 'ds:inline-flex ds:items-center ds:justify-center ds:size-4 ds:shrink-0';\n\n/* ------------------------------------------------------------------ */\n/* Root / Trigger / Portal */\n/* ------------------------------------------------------------------ */\n\n// Curated agent-readiness handle — see dropdown-menu.agent.ts.\nexport interface DropdownMenuHandle {\n getIsOpen: () => boolean;\n open: () => void;\n close: () => void;\n}\n\nexport interface DropdownMenuRootProps extends ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.Root\n> {\n /** Opaque instance id — forwarded to DropdownMenu.Content as `data-component-id`. */\n id?: string;\n}\n\nconst DropdownMenuIdContext = createContext<string | undefined>(undefined);\n\nconst Root = ({\n dir,\n id,\n open: openProp,\n defaultOpen,\n onOpenChange,\n ...props\n}: DropdownMenuRootProps) => {\n const autoDir = useDocumentDirection();\n const isControlled = openProp !== undefined;\n const [internalOpen, setInternalOpen] = useState<boolean>(\n defaultOpen ?? false,\n );\n const open = isControlled ? Boolean(openProp) : internalOpen;\n\n const openRef = useRef(open);\n useEffect(() => {\n openRef.current = open;\n }, [open]);\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n const handle = useMemo<DropdownMenuHandle>(\n () => ({\n getIsOpen: () => openRef.current,\n open: () => setOpen(true),\n close: () => setOpen(false),\n }),\n [setOpen],\n );\n useAgentRegistration(dropdownMenuAgent, handle, id);\n\n return (\n <DropdownMenuIdContext.Provider value={id}>\n <RadixDropdownMenu.Root\n dir={dir ?? autoDir}\n open={open}\n onOpenChange={setOpen}\n {...props}\n />\n </DropdownMenuIdContext.Provider>\n );\n};\nRoot.displayName = 'DropdownMenu.Root';\n\nconst Trigger = RadixDropdownMenu.Trigger;\nconst Portal = RadixDropdownMenu.Portal;\nconst RadixGroup = RadixDropdownMenu.Group;\nconst RadixRadioGroup = RadixDropdownMenu.RadioGroup;\n\n/* ------------------------------------------------------------------ */\n/* Content */\n/* ------------------------------------------------------------------ */\n\nexport interface DropdownMenuContentProps\n extends\n ComponentPropsWithoutRef<typeof RadixDropdownMenu.Content>,\n VariantProps<typeof contentVariants> {}\n\nconst Content = forwardRef<\n ElementRef<typeof RadixDropdownMenu.Content>,\n DropdownMenuContentProps\n>(({ className, sideOffset = 8, ...props }, ref) => {\n const instanceId = useContext(DropdownMenuIdContext);\n return (\n <RadixDropdownMenu.Portal>\n <RadixDropdownMenu.Content\n ref={ref}\n sideOffset={sideOffset}\n className={contentVariants({ className })}\n data-component=\"dropdown-menu\"\n data-component-id={instanceId}\n {...props}\n />\n </RadixDropdownMenu.Portal>\n );\n});\nContent.displayName = 'DropdownMenu.Content';\n\n/* ------------------------------------------------------------------ */\n/* Item */\n/* ------------------------------------------------------------------ */\n\nexport interface DropdownMenuItemProps extends ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.Item\n> {\n startIcon?: ReactNode;\n endIcon?: ReactNode;\n description?: ReactNode;\n /** Convenience — renders a DS <Kbd keys={…}> on the inline-end. */\n shortcut?: Array<KbdNamedKey | string>;\n}\n\nconst Item = forwardRef<\n ElementRef<typeof RadixDropdownMenu.Item>,\n DropdownMenuItemProps\n>(\n (\n {\n className,\n startIcon,\n endIcon,\n description,\n shortcut,\n children,\n ...props\n },\n ref,\n ) => (\n <RadixDropdownMenu.Item\n ref={ref}\n className={itemClasses({ className })}\n {...props}\n >\n {startIcon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:size-4 ds:shrink-0 ds:items-center ds:justify-center\"\n >\n {startIcon}\n </span>\n ) : null}\n <span className=\"ds:flex-1 ds:flex ds:flex-col ds:min-w-0\">\n <span className=\"ds:truncate\">{children}</span>\n {description ? (\n <span className=\"type-meta ds:text-[color:var(--muted-foreground)] ds:truncate\">\n {description}\n </span>\n ) : null}\n </span>\n {shortcut ? (\n <span className=\"ds:ms-auto\">\n <Kbd keys={shortcut} size=\"sm\" />\n </span>\n ) : endIcon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:ms-auto ds:inline-flex ds:size-4 ds:shrink-0 ds:items-center ds:justify-center\"\n >\n {endIcon}\n </span>\n ) : null}\n </RadixDropdownMenu.Item>\n ),\n);\nItem.displayName = 'DropdownMenu.Item';\n\n/* ------------------------------------------------------------------ */\n/* CheckboxItem */\n/* ------------------------------------------------------------------ */\n\nexport type DropdownMenuCheckboxItemProps = ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.CheckboxItem\n>;\n\nconst CheckboxItem = forwardRef<\n ElementRef<typeof RadixDropdownMenu.CheckboxItem>,\n DropdownMenuCheckboxItemProps\n>(({ className, children, ...props }, ref) => (\n <RadixDropdownMenu.CheckboxItem\n ref={ref}\n className={itemClasses({ className })}\n {...props}\n >\n <span className={indicatorSlotClasses}>\n <RadixDropdownMenu.ItemIndicator>\n <Check aria-hidden className=\"ds:size-4\" />\n </RadixDropdownMenu.ItemIndicator>\n </span>\n <span className=\"ds:flex-1 ds:truncate\">{children}</span>\n </RadixDropdownMenu.CheckboxItem>\n));\nCheckboxItem.displayName = 'DropdownMenu.CheckboxItem';\n\n/* ------------------------------------------------------------------ */\n/* RadioGroup / RadioItem */\n/* ------------------------------------------------------------------ */\n\nconst RadioGroup = RadixRadioGroup;\n\nexport type DropdownMenuRadioItemProps = ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.RadioItem\n>;\n\nconst RadioItem = forwardRef<\n ElementRef<typeof RadixDropdownMenu.RadioItem>,\n DropdownMenuRadioItemProps\n>(({ className, children, ...props }, ref) => (\n <RadixDropdownMenu.RadioItem\n ref={ref}\n className={itemClasses({ className })}\n {...props}\n >\n <span className={indicatorSlotClasses}>\n <RadixDropdownMenu.ItemIndicator>\n <Check\n aria-hidden\n className=\"ds:size-4 ds:text-[color:var(--accent)]\"\n />\n </RadixDropdownMenu.ItemIndicator>\n </span>\n <span className=\"ds:flex-1 ds:truncate\">{children}</span>\n </RadixDropdownMenu.RadioItem>\n));\nRadioItem.displayName = 'DropdownMenu.RadioItem';\n\n/* ------------------------------------------------------------------ */\n/* Label */\n/* ------------------------------------------------------------------ */\n\nexport type DropdownMenuLabelProps = ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.Label\n>;\n\nconst Label = forwardRef<\n ElementRef<typeof RadixDropdownMenu.Label>,\n DropdownMenuLabelProps\n>(({ className, ...props }, ref) => (\n <RadixDropdownMenu.Label\n ref={ref}\n className={labelClasses({ className })}\n {...props}\n />\n));\nLabel.displayName = 'DropdownMenu.Label';\n\n/* ------------------------------------------------------------------ */\n/* Separator */\n/* ------------------------------------------------------------------ */\n\nexport type DropdownMenuSeparatorProps = ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.Separator\n>;\n\nconst MenuSeparator = forwardRef<\n ElementRef<typeof RadixDropdownMenu.Separator>,\n DropdownMenuSeparatorProps\n>(({ className, ...props }, ref) => (\n <RadixDropdownMenu.Separator ref={ref} asChild {...props}>\n <DsSeparator\n className={['ds:my-[calc(var(--spacing-xs)/2)]', className ?? '']\n .filter(Boolean)\n .join(' ')}\n />\n </RadixDropdownMenu.Separator>\n));\nMenuSeparator.displayName = 'DropdownMenu.Separator';\n\n/* ------------------------------------------------------------------ */\n/* Shortcut — thin wrapper over DS Kbd for the right side of an Item */\n/* ------------------------------------------------------------------ */\n\nexport interface DropdownMenuShortcutProps {\n keys: Array<KbdNamedKey | string>;\n separator?: 'none' | 'plus' | 'then';\n}\n\nconst Shortcut = forwardRef<HTMLSpanElement, DropdownMenuShortcutProps>(\n ({ keys, separator = 'none' }, ref) => (\n <span ref={ref} className=\"ds:ms-auto ds:ps-[var(--spacing-sm)]\">\n <Kbd keys={keys} separator={separator} size=\"sm\" />\n </span>\n ),\n);\nShortcut.displayName = 'DropdownMenu.Shortcut';\n\n/* ------------------------------------------------------------------ */\n/* Sub-menu */\n/* ------------------------------------------------------------------ */\n\nconst Sub = RadixDropdownMenu.Sub;\n\nexport interface DropdownMenuSubTriggerProps extends ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.SubTrigger\n> {\n startIcon?: ReactNode;\n}\n\nconst SubTrigger = forwardRef<\n ElementRef<typeof RadixDropdownMenu.SubTrigger>,\n DropdownMenuSubTriggerProps\n>(({ className, startIcon, children, ...props }, ref) => (\n <RadixDropdownMenu.SubTrigger\n ref={ref}\n className={itemClasses({ className })}\n {...props}\n >\n {startIcon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:size-4 ds:shrink-0 ds:items-center ds:justify-center\"\n >\n {startIcon}\n </span>\n ) : null}\n <span className=\"ds:flex-1 ds:truncate\">{children}</span>\n <ChevronRight\n aria-hidden\n className=\"ds:ms-auto ds:size-4 ds:shrink-0 ds:rtl:-scale-x-100\"\n />\n </RadixDropdownMenu.SubTrigger>\n));\nSubTrigger.displayName = 'DropdownMenu.SubTrigger';\n\nexport type DropdownMenuSubContentProps = ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.SubContent\n>;\n\nconst SubContent = forwardRef<\n ElementRef<typeof RadixDropdownMenu.SubContent>,\n DropdownMenuSubContentProps\n>(({ className, ...props }, ref) => (\n <RadixDropdownMenu.Portal>\n <RadixDropdownMenu.SubContent\n ref={ref}\n sideOffset={8}\n className={contentVariants({ className })}\n {...props}\n />\n </RadixDropdownMenu.Portal>\n));\nSubContent.displayName = 'DropdownMenu.SubContent';\n\n/* ------------------------------------------------------------------ */\n/* Assembled namespace export */\n/* ------------------------------------------------------------------ */\n\nexport const DropdownMenu = {\n Root,\n Trigger,\n Portal,\n Content,\n Group: RadixGroup,\n Item,\n CheckboxItem,\n RadioGroup,\n RadioItem,\n Label,\n Separator: MenuSeparator,\n Shortcut,\n Sub,\n SubTrigger,\n SubContent,\n};\n"],"names":["dropdownMenuAgent","handle","contentVariants","cva","itemClasses","labelClasses","indicatorSlotClasses","DropdownMenuIdContext","createContext","Root","dir","id","openProp","defaultOpen","onOpenChange","props","autoDir","useDocumentDirection","isControlled","internalOpen","setInternalOpen","useState","open","openRef","useRef","useEffect","setOpen","useCallback","next","useMemo","useAgentRegistration","jsx","RadixDropdownMenu","Trigger","Portal","RadixGroup","RadixRadioGroup","Content","forwardRef","className","sideOffset","ref","instanceId","useContext","Item","startIcon","endIcon","description","shortcut","children","jsxs","Kbd","CheckboxItem","Check","RadioGroup","RadioItem","Label","MenuSeparator","DsSeparator","Shortcut","keys","separator","Sub","SubTrigger","ChevronRight","SubContent","DropdownMenu"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dropdown-menu-dyV7gHh_.js","sources":["../../src/components/dropdown-menu/dropdown-menu.agent.ts","../../src/components/dropdown-menu/dropdown-menu.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { DropdownMenuHandle } from './dropdown-menu';\n\nexport const dropdownMenuAgent: AgentAdapter<DropdownMenuHandle> = {\n id: 'dropdown-menu',\n capabilities: ['open', 'close', 'pick'],\n state: {\n isOpen: {\n type: 'boolean',\n description: 'True when the menu is currently open.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n open: {\n safety: 'read',\n description: 'Open the menu.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n description: 'Close the menu.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'dropdown-menu' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop on DropdownMenu.Root.',\n },\n item: {\n attr: 'data-item-id',\n description: 'Each menu item emits its value as data-item-id.',\n },\n },\n};\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from 'react';\nimport * as RadixDropdownMenu from '@radix-ui/react-dropdown-menu';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Check, ChevronRight } from 'lucide-react';\nimport { Separator as DsSeparator } from '../separator/separator';\nimport { Kbd, type KbdNamedKey } from '../kbd/kbd';\nimport { useDocumentDirection } from '../_shared/use-direction';\nimport { useAgentRegistration } from '../../agent';\nimport { dropdownMenuAgent } from './dropdown-menu.agent';\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst contentVariants = cva(\n [\n 'ds:z-[var(--z-dropdown)]',\n 'ds:min-w-[8rem]',\n 'ds:rounded-[var(--radius-md)]',\n // Border kept (transparent) so the forced-colors override below can\n // repaint a visible edge in HCM. In normal modes the soft drop-shadow\n // carries the edge cue; the heavy `--border` (grey-800 since WCAG\n // 1.4.11 bump in 67fef8c) made the menu read as a charcoal box.\n 'ds:border ds:border-transparent',\n 'ds:bg-[var(--popover)] ds:text-[color:var(--popover-foreground)]',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:p-[var(--spacing-xs)]',\n // Motion — gated on --animation-duration via Tailwind's animate-in\n // preset. motion-reduce disables via the no-preference query.\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=open]:fade-in ds:data-[state=closed]:fade-out',\n 'ds:data-[state=open]:zoom-in-95 ds:data-[state=closed]:zoom-out-95',\n 'ds:motion-reduce:animate-none',\n 'ds:forced-colors:border-[CanvasText]',\n ].join(' '),\n);\n\nconst itemClasses = cva(\n [\n 'ds:relative ds:flex ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:min-h-[var(--min-target-size)]',\n 'ds:text-[length:var(--font-size-sm)] ds:text-[color:var(--foreground)]',\n 'ds:cursor-pointer ds:select-none ds:outline-none',\n // Highlighted + hover state\n 'ds:data-[highlighted]:bg-[color:var(--muted)]/40',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid ds:focus-visible:outline-[color:var(--ring)]',\n 'ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n // Disabled\n 'ds:data-[disabled]:opacity-50 ds:data-[disabled]:cursor-not-allowed',\n 'ds:data-[disabled]:pointer-events-none',\n ].join(' '),\n);\n\nconst labelClasses = cva(\n [\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n 'type-eyebrow ds:text-[color:var(--muted-foreground)]',\n 'ds:select-none',\n ].join(' '),\n);\n\nconst indicatorSlotClasses =\n 'ds:inline-flex ds:items-center ds:justify-center ds:size-4 ds:shrink-0';\n\n/* ------------------------------------------------------------------ */\n/* Root / Trigger / Portal */\n/* ------------------------------------------------------------------ */\n\n// Curated agent-readiness handle — see dropdown-menu.agent.ts.\nexport interface DropdownMenuHandle {\n getIsOpen: () => boolean;\n open: () => void;\n close: () => void;\n}\n\nexport interface DropdownMenuRootProps extends ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.Root\n> {\n /** Opaque instance id — forwarded to DropdownMenu.Content as `data-component-id`. */\n id?: string;\n}\n\nconst DropdownMenuIdContext = createContext<string | undefined>(undefined);\n\nconst Root = ({\n dir,\n id,\n open: openProp,\n defaultOpen,\n onOpenChange,\n ...props\n}: DropdownMenuRootProps) => {\n const autoDir = useDocumentDirection();\n const isControlled = openProp !== undefined;\n const [internalOpen, setInternalOpen] = useState<boolean>(\n defaultOpen ?? false,\n );\n const open = isControlled ? Boolean(openProp) : internalOpen;\n\n const openRef = useRef(open);\n useEffect(() => {\n openRef.current = open;\n }, [open]);\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n const handle = useMemo<DropdownMenuHandle>(\n () => ({\n getIsOpen: () => openRef.current,\n open: () => setOpen(true),\n close: () => setOpen(false),\n }),\n [setOpen],\n );\n useAgentRegistration(dropdownMenuAgent, handle, id);\n\n return (\n <DropdownMenuIdContext.Provider value={id}>\n <RadixDropdownMenu.Root\n dir={dir ?? autoDir}\n open={open}\n onOpenChange={setOpen}\n {...props}\n />\n </DropdownMenuIdContext.Provider>\n );\n};\nRoot.displayName = 'DropdownMenu.Root';\n\nconst Trigger = RadixDropdownMenu.Trigger;\nconst Portal = RadixDropdownMenu.Portal;\nconst RadixGroup = RadixDropdownMenu.Group;\nconst RadixRadioGroup = RadixDropdownMenu.RadioGroup;\n\n/* ------------------------------------------------------------------ */\n/* Content */\n/* ------------------------------------------------------------------ */\n\nexport interface DropdownMenuContentProps\n extends\n ComponentPropsWithoutRef<typeof RadixDropdownMenu.Content>,\n VariantProps<typeof contentVariants> {}\n\nconst Content = forwardRef<\n ElementRef<typeof RadixDropdownMenu.Content>,\n DropdownMenuContentProps\n>(({ className, sideOffset = 8, ...props }, ref) => {\n const instanceId = useContext(DropdownMenuIdContext);\n return (\n <RadixDropdownMenu.Portal>\n <RadixDropdownMenu.Content\n ref={ref}\n sideOffset={sideOffset}\n className={contentVariants({ className })}\n data-component=\"dropdown-menu\"\n data-component-id={instanceId}\n {...props}\n />\n </RadixDropdownMenu.Portal>\n );\n});\nContent.displayName = 'DropdownMenu.Content';\n\n/* ------------------------------------------------------------------ */\n/* Item */\n/* ------------------------------------------------------------------ */\n\nexport interface DropdownMenuItemProps extends ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.Item\n> {\n startIcon?: ReactNode;\n endIcon?: ReactNode;\n description?: ReactNode;\n /** Convenience — renders a DS <Kbd keys={…}> on the inline-end. */\n shortcut?: Array<KbdNamedKey | string>;\n}\n\nconst Item = forwardRef<\n ElementRef<typeof RadixDropdownMenu.Item>,\n DropdownMenuItemProps\n>(\n (\n {\n className,\n startIcon,\n endIcon,\n description,\n shortcut,\n children,\n ...props\n },\n ref,\n ) => (\n <RadixDropdownMenu.Item\n ref={ref}\n className={itemClasses({ className })}\n {...props}\n >\n {startIcon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:size-4 ds:shrink-0 ds:items-center ds:justify-center\"\n >\n {startIcon}\n </span>\n ) : null}\n <span className=\"ds:flex-1 ds:flex ds:flex-col ds:min-w-0\">\n <span className=\"ds:truncate\">{children}</span>\n {description ? (\n <span className=\"type-meta ds:text-[color:var(--muted-foreground)] ds:truncate\">\n {description}\n </span>\n ) : null}\n </span>\n {shortcut ? (\n <span className=\"ds:ms-auto\">\n <Kbd keys={shortcut} size=\"sm\" />\n </span>\n ) : endIcon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:ms-auto ds:inline-flex ds:size-4 ds:shrink-0 ds:items-center ds:justify-center\"\n >\n {endIcon}\n </span>\n ) : null}\n </RadixDropdownMenu.Item>\n ),\n);\nItem.displayName = 'DropdownMenu.Item';\n\n/* ------------------------------------------------------------------ */\n/* CheckboxItem */\n/* ------------------------------------------------------------------ */\n\nexport type DropdownMenuCheckboxItemProps = ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.CheckboxItem\n>;\n\nconst CheckboxItem = forwardRef<\n ElementRef<typeof RadixDropdownMenu.CheckboxItem>,\n DropdownMenuCheckboxItemProps\n>(({ className, children, ...props }, ref) => (\n <RadixDropdownMenu.CheckboxItem\n ref={ref}\n className={itemClasses({ className })}\n {...props}\n >\n <span className={indicatorSlotClasses}>\n <RadixDropdownMenu.ItemIndicator>\n <Check aria-hidden className=\"ds:size-4\" />\n </RadixDropdownMenu.ItemIndicator>\n </span>\n <span className=\"ds:flex-1 ds:truncate\">{children}</span>\n </RadixDropdownMenu.CheckboxItem>\n));\nCheckboxItem.displayName = 'DropdownMenu.CheckboxItem';\n\n/* ------------------------------------------------------------------ */\n/* RadioGroup / RadioItem */\n/* ------------------------------------------------------------------ */\n\nconst RadioGroup = RadixRadioGroup;\n\nexport type DropdownMenuRadioItemProps = ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.RadioItem\n>;\n\nconst RadioItem = forwardRef<\n ElementRef<typeof RadixDropdownMenu.RadioItem>,\n DropdownMenuRadioItemProps\n>(({ className, children, ...props }, ref) => (\n <RadixDropdownMenu.RadioItem\n ref={ref}\n className={itemClasses({ className })}\n {...props}\n >\n <span className={indicatorSlotClasses}>\n <RadixDropdownMenu.ItemIndicator>\n <Check\n aria-hidden\n className=\"ds:size-4 ds:text-[color:var(--accent)]\"\n />\n </RadixDropdownMenu.ItemIndicator>\n </span>\n <span className=\"ds:flex-1 ds:truncate\">{children}</span>\n </RadixDropdownMenu.RadioItem>\n));\nRadioItem.displayName = 'DropdownMenu.RadioItem';\n\n/* ------------------------------------------------------------------ */\n/* Label */\n/* ------------------------------------------------------------------ */\n\nexport type DropdownMenuLabelProps = ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.Label\n>;\n\nconst Label = forwardRef<\n ElementRef<typeof RadixDropdownMenu.Label>,\n DropdownMenuLabelProps\n>(({ className, ...props }, ref) => (\n <RadixDropdownMenu.Label\n ref={ref}\n className={labelClasses({ className })}\n {...props}\n />\n));\nLabel.displayName = 'DropdownMenu.Label';\n\n/* ------------------------------------------------------------------ */\n/* Separator */\n/* ------------------------------------------------------------------ */\n\nexport type DropdownMenuSeparatorProps = ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.Separator\n>;\n\nconst MenuSeparator = forwardRef<\n ElementRef<typeof RadixDropdownMenu.Separator>,\n DropdownMenuSeparatorProps\n>(({ className, ...props }, ref) => (\n <RadixDropdownMenu.Separator ref={ref} asChild {...props}>\n <DsSeparator\n className={['ds:my-[calc(var(--spacing-xs)/2)]', className ?? '']\n .filter(Boolean)\n .join(' ')}\n />\n </RadixDropdownMenu.Separator>\n));\nMenuSeparator.displayName = 'DropdownMenu.Separator';\n\n/* ------------------------------------------------------------------ */\n/* Shortcut — thin wrapper over DS Kbd for the right side of an Item */\n/* ------------------------------------------------------------------ */\n\nexport interface DropdownMenuShortcutProps {\n keys: Array<KbdNamedKey | string>;\n separator?: 'none' | 'plus' | 'then';\n}\n\nconst Shortcut = forwardRef<HTMLSpanElement, DropdownMenuShortcutProps>(\n ({ keys, separator = 'none' }, ref) => (\n <span ref={ref} className=\"ds:ms-auto ds:ps-[var(--spacing-sm)]\">\n <Kbd keys={keys} separator={separator} size=\"sm\" />\n </span>\n ),\n);\nShortcut.displayName = 'DropdownMenu.Shortcut';\n\n/* ------------------------------------------------------------------ */\n/* Sub-menu */\n/* ------------------------------------------------------------------ */\n\nconst Sub = RadixDropdownMenu.Sub;\n\nexport interface DropdownMenuSubTriggerProps extends ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.SubTrigger\n> {\n startIcon?: ReactNode;\n}\n\nconst SubTrigger = forwardRef<\n ElementRef<typeof RadixDropdownMenu.SubTrigger>,\n DropdownMenuSubTriggerProps\n>(({ className, startIcon, children, ...props }, ref) => (\n <RadixDropdownMenu.SubTrigger\n ref={ref}\n className={itemClasses({ className })}\n {...props}\n >\n {startIcon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:size-4 ds:shrink-0 ds:items-center ds:justify-center\"\n >\n {startIcon}\n </span>\n ) : null}\n <span className=\"ds:flex-1 ds:truncate\">{children}</span>\n <ChevronRight\n aria-hidden\n className=\"ds:ms-auto ds:size-4 ds:shrink-0 ds:rtl:-scale-x-100\"\n />\n </RadixDropdownMenu.SubTrigger>\n));\nSubTrigger.displayName = 'DropdownMenu.SubTrigger';\n\nexport type DropdownMenuSubContentProps = ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.SubContent\n>;\n\nconst SubContent = forwardRef<\n ElementRef<typeof RadixDropdownMenu.SubContent>,\n DropdownMenuSubContentProps\n>(({ className, ...props }, ref) => (\n <RadixDropdownMenu.Portal>\n <RadixDropdownMenu.SubContent\n ref={ref}\n sideOffset={8}\n data-component=\"dropdown-menu-sub-content\"\n className={contentVariants({ className })}\n {...props}\n />\n </RadixDropdownMenu.Portal>\n));\nSubContent.displayName = 'DropdownMenu.SubContent';\n\n/* ------------------------------------------------------------------ */\n/* Assembled namespace export */\n/* ------------------------------------------------------------------ */\n\nexport const DropdownMenu = {\n Root,\n Trigger,\n Portal,\n Content,\n Group: RadixGroup,\n Item,\n CheckboxItem,\n RadioGroup,\n RadioItem,\n Label,\n Separator: MenuSeparator,\n Shortcut,\n Sub,\n SubTrigger,\n SubContent,\n};\n"],"names":["dropdownMenuAgent","handle","contentVariants","cva","itemClasses","labelClasses","indicatorSlotClasses","DropdownMenuIdContext","createContext","Root","dir","id","openProp","defaultOpen","onOpenChange","props","autoDir","useDocumentDirection","isControlled","internalOpen","setInternalOpen","useState","open","openRef","useRef","useEffect","setOpen","useCallback","next","useMemo","useAgentRegistration","jsx","RadixDropdownMenu","Trigger","Portal","RadixGroup","RadixRadioGroup","Content","forwardRef","className","sideOffset","ref","instanceId","useContext","Item","startIcon","endIcon","description","shortcut","children","jsxs","Kbd","CheckboxItem","Check","RadioGroup","RadioItem","Label","MenuSeparator","DsSeparator","Shortcut","keys","separator","Sub","SubTrigger","ChevronRight","SubContent","DropdownMenu"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import * as ee from "@radix-ui/react-dialog";
|
|
|
4
4
|
import { useTranslation as y } from "react-i18next";
|
|
5
5
|
import { F as se } from "./floating-action-button-C8OYj8mE.js";
|
|
6
6
|
import { I as B } from "./icon-button-C4CGcYuz.js";
|
|
7
|
-
import { S as E } from "./sheet-
|
|
7
|
+
import { S as E } from "./sheet-B9T3OQmz.js";
|
|
8
8
|
import { X as de } from "./x-CCcI3eJp.js";
|
|
9
9
|
import { A as L } from "./avatar-Dcr6XuDQ.js";
|
|
10
10
|
import { B as D } from "./button-DD_0Xdmr.js";
|
|
@@ -756,4 +756,4 @@ export {
|
|
|
756
756
|
we as b,
|
|
757
757
|
Ce as c
|
|
758
758
|
};
|
|
759
|
-
//# sourceMappingURL=leo-sidebar-
|
|
759
|
+
//# sourceMappingURL=leo-sidebar-D1RdE54a.js.map
|