@acrylblends/ui 0.0.0-stage → 0.3.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/README.md +19 -2
- package/contracts/categories.json +598 -0
- package/contracts/components.json +1789 -0
- package/contracts/reexports.json +291 -0
- package/contracts/tokens.json +107 -0
- package/cordis.patch.yml +3 -0
- package/lib/client.js +7867 -0
- package/lib/client.js.map +1 -0
- package/lib/frame.d.ts +41 -0
- package/lib/frame.js +11 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +3 -0
- package/package.json +117 -4
- package/registry-manifest.yml +229 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","names":["useState","css","IconInfoOutlineRegular","Tag","css","useState","Menu","css","IconChevronDownOutlineRegular","useId","useRef","css","useId","css","css","css","Switch","Modal","css","Button","StateDot","useState","css","DisclosureRow","Tooltip","css","conversationPhase","css","css","css","css","css","css","css","useState","css","css","css","css","css","css","css","css","createContext","useState","css","useContext","css","createContext","useState","useContext","createContext","css","useContext","css","createContext","useContext","css","css","css","css","css","css","createContext","useState","css","useContext","css","css","css","css","useMemo","createContext","useState","useRef","useMemo","useContext","css","useState","useRef","useCallback","css","createContext","useState","useRef","useMemo","useContext","css","createContext","useState","useRef","useMemo","useContext","css","matches","createContext","useState","useRef","useId","useCallback","useMemo","css","useContext","createContext","useRef","useState","useId","useCallback","useMemo","css","useContext","createContext","useState","useRef","useMemo","useContext","css","useId","RadioGroupContext","createContext","useRef","useState","useMemo","useCallback","css","useContext","createContext","useState","useRef","useCallback","useMemo","css","useContext","useId","createContext","triggerId","useState","useRef","useCallback","useMemo","css","useContext","useId","createContext","useState","useRef","useCallback","useMemo","css","useContext","useId","useMemo","useState","useRef","useId","useCallback","css","createContext","useContext","useState","useCallback","useMemo","css","SettingsRow","css","useId","ValueField","SettingsRowLayout","tokens.roles"],"sources":["../src/client/registry/fields/fields.tsx","../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../src/client/registry/AppearanceCubes/AppearanceCubes.tsx","../src/client/registry/SelectPill/SelectPill.tsx","../src/client/registry/Tabs/Tabs.tsx","../src/client/registry/Card/Card.tsx","../src/client/registry/EmptyState/EmptyState.tsx","../src/client/registry/SwitchField/SwitchField.tsx","../src/client/registry/Dialog/Dialog.tsx","../src/client/registry/ToolCallCard/ToolCallCard.tsx","../src/client/registry/SidebarRow/SidebarRow.tsx","../src/client/registry/Stack.tsx","../src/client/chat.ts","../src/client/registry/Kbd/Kbd.tsx","../src/client/registry/Badge/Badge.tsx","../src/client/registry/Skeleton/Skeleton.tsx","../src/client/registry/Spinner/Spinner.tsx","../src/client/registry/Alert/Alert.tsx","../src/client/registry/Separator/Separator.tsx","../src/client/registry/Progress/Progress.tsx","../src/client/registry/Avatar/Avatar.tsx","../src/client/registry/Label/Label.tsx","../src/client/registry/Textarea/Textarea.tsx","../src/client/registry/Checkbox/Checkbox.tsx","../src/client/registry/AspectRatio/AspectRatio.tsx","../src/client/registry/Breadcrumb/Breadcrumb.tsx","../src/client/registry/Toggle/Toggle.tsx","../src/client/registry/ButtonGroup/ButtonGroup.tsx","../src/client/registry/Accordion/Accordion.tsx","../src/client/registry/RadioGroup/RadioGroup.tsx","../src/client/registry/Collapsible/Collapsible.tsx","../src/client/registry/ToggleGroup/ToggleGroup.tsx","../src/client/registry/Table/Table.tsx","../src/client/registry/DirectionProvider/DirectionProvider.tsx","../src/client/registry/Marker/Marker.tsx","../src/client/registry/Message/Message.tsx","../src/client/registry/Bubble/Bubble.tsx","../src/client/registry/Pagination/Pagination.tsx","../src/client/registry/NativeSelect/NativeSelect.tsx","../src/client/registry/ScrollArea/ScrollArea.tsx","../src/client/registry/InputOTP/InputOTP.tsx","../src/client/registry/Item/Item.tsx","../src/client/registry/Attachment/Attachment.tsx","../src/client/registry/InputGroup/InputGroup.tsx","../src/client/registry/FormField/FormField.tsx","../src/client/registry/Popover/Popover.tsx","../src/client/registry/Slider/Slider.tsx","../src/client/registry/Sheet/Sheet.tsx","../src/client/registry/Drawer/Drawer.tsx","../src/client/registry/Command/Command.tsx","../src/client/registry/Combobox/Combobox.tsx","../src/client/registry/ContextMenu/ContextMenu.tsx","../src/client/registry/Carousel/Carousel.tsx","../src/client/registry/ResizablePanelGroup/ResizablePanelGroup.tsx","../src/client/registry/Menubar/Menubar.tsx","../src/client/registry/NavigationMenu/NavigationMenu.tsx","../src/client/registry/Calendar/Calendar.tsx","../src/client/registry/Sidebar/Sidebar.tsx","../src/client/registry/SettingsRow/SettingsRow.tsx","../src/client/contract-adapters.tsx","../contracts/tokens.json","../src/client/roles.ts","../src/client/slot-helpers.ts","../src/client/index.ts"],"sourcesContent":["/**\n * Extracted verbatim from DSH: packages/client/ui-primitives/src/settings-form/fields.tsx (SettingsValueField, SettingsSecretField, SettingsFieldProps), pinned deepseek-harness 639ed01539.\n * Only this header and the two import lines differ from the original (its `../icons` and `../Tag.tsx` are this package's `@deepseek-ai/dsh-client-ui-primitives`). See manifest.yml.\n */\nimport { useState, type ReactNode } from 'react'\nimport { IconInfoOutlineRegular, Tag } from '@deepseek-ai/dsh-client-ui-primitives'\nimport css from './fields.module.css'\n\n/** What every settings field control needs regardless of its value type. */\nexport interface SettingsFieldProps {\n /** Stable id associating the label with its control. */\n id: string\n /** Visible label. */\n label: string\n /** One-line explanation rendered under the control. */\n hint: string\n /** Draft text this control renders. */\n text: string\n /** True when saving would leave a user-layer entry for this field. */\n overridden: boolean\n /** True when the draft is not a value this field accepts. */\n invalid: boolean\n /** Copy for the overridden badge. */\n overriddenLabel: string\n /** Copy for the reset control. */\n resetLabel: string\n /** Copy shown in place of the hint while the draft is invalid. */\n invalidLabel: string\n /** Disables every control (read-only document, or an unavailable namespace). */\n disabled: boolean\n /** Stage draft text. */\n onEdit: (text: string) => void\n /** Stage a clear so the field re-inherits the composition layer. */\n onReset: () => void\n}\n\n/**\n * A staged value field. `numeric` only hints the keypad: which drafts a field\n * accepts is decided by its spec, so the control never silently rewrites what\n * the user typed.\n * @param props - the field's copy, its staged text, and the edit actions.\n * @returns the labelled control.\n */\nexport function SettingsValueField(props: Omit<SettingsFieldProps, 'hint'> & {\n /** Optional explanation shown below the input. */\n hint?: string\n /** Rules disclosed by the information button beside the label. */\n help?: { label: string; content: ReactNode }\n /** Hints a numeric keypad without narrowing what the control accepts. */\n numeric?: boolean\n /** Placeholder shown while the draft is empty. */\n placeholder?: string\n}) {\n const [helpOpen, setHelpOpen] = useState(false)\n const helpId = `${props.id}-help`\n const messageId = `${props.id}-message`\n const hasMessage = props.invalid || Boolean(props.hint)\n const description = [hasMessage ? messageId : '', helpOpen ? helpId : ''].filter(Boolean).join(' ')\n return (\n <div className={css.field}>\n <div className={css.head}>\n <div className={css.labelGroup}>\n <label className={css.label} htmlFor={props.id}>{props.label}</label>\n {props.help !== undefined\n ? (\n <button type=\"button\" className={css.helpButton}\n aria-label={props.help.label} aria-expanded={helpOpen} aria-controls={helpId}\n onClick={() => { setHelpOpen(!helpOpen) }}>\n <IconInfoOutlineRegular size={12} />\n </button>\n )\n : null}\n </div>\n {props.overridden\n ? (\n <span className={css.badges}>\n <Tag tone=\"neutral\">{props.overriddenLabel}</Tag>\n <button\n type=\"button\"\n className={css.reset}\n disabled={props.disabled}\n onClick={props.onReset}\n >\n {props.resetLabel}\n </button>\n </span>\n )\n : null}\n </div>\n <input\n id={props.id}\n className={css.input}\n type=\"text\"\n {...props.numeric === true ? { inputMode: 'numeric' as const } : {}}\n {...props.invalid ? { 'aria-invalid': true } : {}}\n aria-describedby={description || undefined}\n value={props.text}\n placeholder={props.placeholder ?? ''}\n disabled={props.disabled}\n onChange={(event) => { props.onEdit(event.target.value) }}\n />\n {hasMessage\n ? <p id={messageId} className={props.invalid ? css.invalid : css.hint}>{props.invalid ? props.invalidLabel : props.hint}</p>\n : null}\n {props.help !== undefined && helpOpen\n ? <div id={helpId} className={css.help} role=\"region\" aria-label={props.help.label}>{props.help.content}</div>\n : null}\n </div>\n )\n}\n\n/**\n * A write-only credential control. The value never rides a response, so the\n * control reports only whether one is configured and starts blank; a blank\n * draft writes nothing, which keeps the stored key rather than clearing it.\n * The control asks browsers not to autofill saved login passwords.\n * @param props - the field's copy, its staged text, and the configured state.\n * @returns the labelled control.\n */\nexport function SettingsSecretField(props: Pick<SettingsFieldProps, 'id' | 'label' | 'hint' | 'text' | 'disabled' | 'onEdit'> & {\n /** Whether the Host reports a configured credential for this reference. */\n configured: boolean\n /** Copy describing the configured state. */\n stateLabel: string\n}) {\n return (\n <div className={css.field}>\n <div className={css.head}>\n <label className={css.label} htmlFor={props.id}>{props.label}</label>\n <span className={css.badges}>\n <Tag tone={props.configured ? 'neutral' : 'quiet'}>{props.stateLabel}</Tag>\n </span>\n </div>\n <input\n id={props.id}\n className={css.input}\n type=\"password\"\n autoComplete=\"new-password\"\n value={props.text}\n disabled={props.disabled}\n onChange={(event) => { props.onEdit(event.target.value) }}\n />\n <p className={css.hint}>{props.hint}</p>\n </div>\n )\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Extracted from DSH: packages/client/ui-theme/src/client/AppearanceRow.tsx (AppearanceRow), pinned deepseek-harness 5dda764ed3.\n * The markup and AppearanceCubes.module.css are the original's; only the slot, store and locale coupling is replaced by plain props\n * (a title, the options with their icon and label, the selected id and a change callback) so any plugin can use the same picker.\n * See manifest.yml for the provenance record.\n */\nimport type { ReactNode } from 'react'\nimport clsx from 'clsx'\nimport css from './AppearanceCubes.module.css'\n\n/** One cube: an id, its label and an optional icon (DSH shows an icon over the label). */\nexport interface CubeOption {\n id: string\n label: string\n icon?: ReactNode\n}\n\nexport interface AppearanceCubesProps {\n /** Row title (optional; DSH always shows one). */\n title?: string\n options: readonly CubeOption[]\n /** Selected option id. */\n value: string\n onChange: (id: string) => void\n}\n\n/**\n * Render the exclusive tile picker.\n * @param props - options, selection and change callback.\n * @returns the row element tree.\n */\nexport function AppearanceCubes({ title, options, value, onChange }: AppearanceCubesProps) {\n return (\n <div className={css.group}>\n {title !== undefined && <div className={css.title}>{title}</div>}\n <div className={css.cubeRow}>\n {options.map(({ id, label, icon }) => (\n <button\n key={id}\n type=\"button\"\n className={clsx(css.themeCube, value === id && css.selected)}\n aria-pressed={value === id}\n onClick={() => { onChange(id) }}\n >\n {icon}\n {label}\n </button>\n ))}\n </div>\n </div>\n )\n}\n","/**\n * Extracted from DSH: the selector of packages/client/ui-permission-presets/src/client/PermissionRow.tsx (a pill button that opens the app's Menu), pinned deepseek-harness 5dda764ed3.\n * Markup and SelectPill.module.css are the original's; the preset store and the risk confirmation stay in the feature. See manifest.yml.\n */\nimport { useState } from 'react'\nimport { IconChevronDownOutlineRegular, Menu } from '@deepseek-ai/dsh-client-ui-primitives'\nimport css from './SelectPill.module.css'\n\nexport interface SelectOption {\n id: string\n label: string\n disabled?: boolean\n}\n\nexport interface SelectPillProps {\n options: readonly SelectOption[]\n /** Selected option id. */\n value: string\n onChange: (id: string) => void\n /** Text shown when no option matches the value. */\n placeholder?: string\n disabled?: boolean\n /** Accessible name of the trigger. */\n label?: string\n}\n\n/**\n * Render the dropdown selector.\n * @param props - options, selection and change callback.\n * @returns the selector with its menu.\n */\nexport function SelectPill({ options, value, onChange, placeholder = '', disabled = false, label }: SelectPillProps) {\n const [open, setOpen] = useState(false)\n const selected = options.find(option => option.id === value)\n return (\n <Menu\n open={open}\n onClose={() => { setOpen(false) }}\n items={options.map(option => ({ id: option.id, label: option.label, ...(option.disabled === true ? { disabled: true } : {}) }))}\n selectedId={value}\n onSelect={(id) => { setOpen(false); if (id !== value) onChange(id) }}\n align=\"end\"\n portal\n anchor={(\n <button\n type=\"button\"\n className={css.selector}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n {...label === undefined ? {} : { 'aria-label': label }}\n disabled={disabled || options.length === 0}\n onClick={() => { setOpen(current => !current) }}\n >\n {selected?.label ?? placeholder}\n <IconChevronDownOutlineRegular className={css.chevron} />\n </button>\n )}\n />\n )\n}\n","/**\n * Extracted from DSH: the tab strip and panel of packages/client/ui-settings-plugins/src/client/PluginsSettingsSection.tsx, pinned deepseek-harness 5dda764ed3.\n * Markup, keyboard handling (ArrowLeft/ArrowRight/Home/End with roving tabindex) and Tabs.module.css are the original's; the slot rendering and locale\n * are replaced by plain props (tabs, the active id, the panel as children). See manifest.yml.\n */\nimport { useId, useRef } from 'react'\nimport type { ReactNode } from 'react'\nimport css from './Tabs.module.css'\n\nexport interface TabItem {\n id: string\n label: string\n}\n\nexport interface TabsProps {\n tabs: readonly TabItem[]\n /** Active tab id. */\n value: string\n onChange: (id: string) => void\n /** Accessible name of the tab list. */\n label?: string\n /** The active panel's content. */\n children?: ReactNode\n}\n\n/**\n * Render the tab strip with the active panel below it.\n * @param props - tabs, selection and the panel content.\n * @returns the strip and panel.\n */\nexport function Tabs({ tabs, value, onChange, label, children }: TabsProps) {\n const tabsId = useId()\n const tabRefs = useRef<(HTMLButtonElement | null)[]>([])\n return (\n <>\n <div className={css.tabs} role=\"tablist\" {...label === undefined ? {} : { 'aria-label': label }}>\n {tabs.map((row, index) => {\n const selected = row.id === value\n return (\n <button\n key={row.id}\n ref={(element) => { tabRefs.current[index] = element }}\n id={`${tabsId}-tab-${row.id}`}\n type=\"button\"\n role=\"tab\"\n className={css.tab}\n aria-selected={selected}\n aria-controls={`${tabsId}-panel`}\n data-active={selected ? 'true' : undefined}\n tabIndex={selected ? 0 : -1}\n onClick={() => { onChange(row.id) }}\n onKeyDown={(event) => {\n let nextIndex: number\n switch (event.key) {\n case 'ArrowRight': nextIndex = (index + 1) % tabs.length; break\n case 'ArrowLeft': nextIndex = (index - 1 + tabs.length) % tabs.length; break\n case 'Home': nextIndex = 0; break\n case 'End': nextIndex = tabs.length - 1; break\n default: return\n }\n event.preventDefault()\n const nextRow = tabs[nextIndex] as TabItem\n onChange(nextRow.id)\n tabRefs.current[nextIndex]?.focus()\n }}\n >\n {row.label}\n </button>\n )\n })}\n </div>\n <div id={`${tabsId}-panel`} className={css.panel} role=\"tabpanel\" aria-labelledby={`${tabsId}-tab-${value}`}>\n {children}\n </div>\n </>\n )\n}\n","/**\n * Card surface: the border, radius and layered background of DSH's plugin card (packages/client/ui-settings-plugins/src/client/PluginCard.module.css, pinned deepseek-harness 5dda764ed3)\n * around a title and content. The disclosure behaviour of PluginCard itself stays in that feature. See manifest.yml.\n */\nimport { useId } from 'react'\nimport clsx from 'clsx'\nimport type { ReactNode } from 'react'\nimport css from './Card.module.css'\n\nexport interface CardProps {\n title?: string\n /** Actions, right-aligned under the content. */\n footer?: ReactNode\n children?: ReactNode\n}\n\n/**\n * Render the card.\n * @param props - title, content and footer actions.\n * @returns the card element.\n */\nexport function Card({ title, footer, children }: CardProps) {\n const titleId = useId()\n return (\n <section className={clsx(css.card, css.body)} role=\"group\" {...title === undefined ? {} : { 'aria-labelledby': titleId }}>\n {title !== undefined && <h3 id={titleId} className={css.title}>{title}</h3>}\n {children}\n {footer !== undefined && <div className={css.footer}>{footer}</div>}\n </section>\n )\n}\n","/**\n * Empty state. DSH has no such component (its Plugins section renders a bare `<p className={css.empty}>`), so this is the one part of the registry that is not an extraction:\n * a title and description over that same `.empty` text style. See manifest.yml (origin: gap).\n */\nimport type { ReactNode } from 'react'\nimport css from './EmptyState.module.css'\n\nexport interface EmptyStateProps {\n title: string\n description?: string\n action?: ReactNode\n}\n\n/**\n * Render the empty message.\n * @param props - title, description and an optional action.\n * @returns the message block.\n */\nexport function EmptyState({ title, description, action }: EmptyStateProps) {\n return (\n <div className={css.root}>\n <h3 className={css.title}>{title}</h3>\n {description !== undefined && <p className={css.empty}>{description}</p>}\n {action}\n </div>\n )\n}\n","/**\n * A labelled switch with a hint: the app's own Switch primitive plus the hint style of DSH's plugin fields (fields.module.css .hint). The DSH primitive Switch carries its label only as an accessible name, so the visible label uses the fields' own head/label styles. Composition only, no new visual. Its stylesheet is a self-contained copy of the four fields.module.css rules it uses (field, head, label, hint), so this item has no cross-item dependency when consumed on its own. See manifest.yml.\n */\nimport { Switch } from '@deepseek-ai/dsh-client-ui-primitives'\nimport css from './SwitchField.module.css'\n\nexport interface SwitchFieldProps {\n label: string\n checked: boolean\n onChange: (checked: boolean) => void\n hint?: string\n}\n\n/**\n * Render the switch with its hint.\n * @param props - label, state and hint.\n * @returns the field.\n */\nexport function SwitchField({ label, checked, onChange, hint }: SwitchFieldProps) {\n return (\n <div className={css.field}>\n <div className={css.head}>\n <span className={css.label}>{label}</span>\n <Switch checked={checked} onChange={onChange} label={label} />\n </div>\n {hint !== undefined && <p className={css.hint}>{hint}</p>}\n </div>\n )\n}\n","/**\n * A confirm dialog over the app's Modal and Button primitives (composition only; the app's Button has no danger variant, DSH uses its RiskConfirmation primitive for destructive confirmations, so `danger` is terminal-only). See manifest.yml.\n */\nimport type { ReactNode } from 'react'\nimport { Button, Modal } from '@deepseek-ai/dsh-client-ui-primitives'\nimport css from './Dialog.module.css'\n\nexport interface DialogProps {\n open: boolean\n title: string\n onClose: () => void\n onConfirm: () => void\n confirmLabel?: string\n cancelLabel?: string\n children?: ReactNode\n}\n\n/**\n * Render the dialog.\n * @param props - state, copy and actions.\n * @returns the modal.\n */\nexport function Dialog({ open, title, onClose, onConfirm, confirmLabel = 'OK', cancelLabel = 'Cancel', children }: DialogProps) {\n return (\n <Modal\n open={open}\n onClose={onClose}\n title={title}\n closeLabel={cancelLabel}\n footer={(\n <div className={css.actions}>\n <Button variant=\"ghost\" onClick={onClose}>{cancelLabel}</Button>\n <Button variant=\"primary\" onClick={() => { onConfirm(); onClose() }}>{confirmLabel}</Button>\n </div>\n )}\n >\n {children}\n </Modal>\n )\n}\n","/**\n * Extracted from DSH: packages/client/ui-tool/src/client/tool/components/ToolRow.tsx (ToolRow), pinned deepseek-harness 5dda764ed3.\n * Kept from the original: the disclosure header (leading icon or state dot, title, separator dot, summary, chevron), the running sweep, the error summary that REPLACES the normal\n * summary, the visually hidden run-state label, and the IN/OUT card. Left in DSH: the tool-specific models and the specialised terminal, diff, read, search, web and image\n * cards (those are the app's TerminalBlock, DiffBlock and so on, already exported as primitives, so a consumer composes them as `children`). The wire-shaped props (ToolRowVariant,\n * models, locale `t`, slot renderer) are replaced by plain props. ToolCallCard.module.css is the original's rules for these parts. See manifest.yml.\n */\nimport { useState } from 'react'\nimport type { ReactNode } from 'react'\nimport { DisclosureRow, StateDot } from '@deepseek-ai/dsh-client-ui-primitives'\nimport clsx from 'clsx'\nimport css from './ToolCallCard.module.css'\n\nexport type ToolCallState = 'running' | 'ok' | 'error' | 'stopped'\n\nexport interface ToolCallLabels {\n /** Heading of the input section. */\n input: string\n /** Heading of the output section. */\n output: string\n /** Visually hidden run-state text (a state dot and the sweep are colour-only). */\n running: string\n failed: string\n stopped: string\n}\n\nexport interface ToolCallCardProps {\n /** Leading icon for a settled call (an error or stopped call shows a state dot instead, as in DSH). */\n icon: ReactNode\n title: string\n /** Collapsed one-line summary. */\n summary: string\n state: ToolCallState\n /** Replaces the summary on an error row (the failure's first line). */\n errorSummary?: string | null\n /** Expanded IN section text. */\n input?: string | null\n /** Expanded OUT section text. */\n output?: string | null\n labels: ToolCallLabels\n /** A specialised body (a TerminalBlock, DiffBlock ...) shown instead of the IN/OUT card. */\n children?: ReactNode\n}\n\nfunction leadingFor(state: ToolCallState, icon: ReactNode): ReactNode {\n switch (state) {\n case 'error': return <StateDot state=\"error\" />\n case 'stopped': return <StateDot state=\"warning\" />\n default: return icon\n }\n}\n\nfunction stateStatus(state: ToolCallState, labels: ToolCallLabels): string | null {\n switch (state) {\n case 'running': return labels.running\n case 'error': return labels.failed\n case 'stopped': return labels.stopped\n default: return null\n }\n}\n\n/**\n * Render a collapsible tool-call row.\n * @param props - copy, state and the optional expanded content.\n * @returns the row.\n */\nexport function ToolCallCard({ icon, title, summary, state, errorSummary = null, input = null, output = null, labels, children }: ToolCallCardProps) {\n const [expanded, setExpanded] = useState(false)\n const expandable = input !== null || output !== null || children !== undefined\n const open = expanded && expandable\n const status = stateStatus(state, labels)\n // A failure must replace, not supplement, the normal summary.\n const failureLine = state === 'error' ? errorSummary : null\n const summaryText = failureLine ?? summary\n return (\n <div className={css.root} data-state={state}>\n {status !== null && <span className={css.visuallyHidden}>{status}</span>}\n <DisclosureRow\n rowClassName={css.row}\n leadingClassName={css.leading}\n titleClassName={css.title}\n chevronClassName={css.chevron}\n icon={leadingFor(state, icon)}\n title={title}\n open={open}\n expandable={expandable}\n expandOnRowClick\n keepContentWhenOpen\n onToggle={() => { setExpanded(value => !value) }}\n collapsedContent={summaryText !== '' && (\n <>\n <span className={css.sep} aria-hidden />\n <span className={clsx(css.summary, failureLine !== null && css.errorSummary)}>{summaryText}</span>\n </>\n )}\n >\n <div className={css.bodyWrap}>\n {children !== undefined\n ? children\n : (\n <div className={css.ioCard}>\n {input !== null && (\n <div className={css.ioSection}>\n <span className={css.ioLabel}>{labels.input}</span>\n <span className={css.ioText}>{input}</span>\n </div>\n )}\n {input !== null && output !== null && <span className={css.ioDivider} aria-hidden />}\n {output !== null && (\n <div className={css.ioSection}>\n <span className={css.ioLabel}>{labels.output}</span>\n <span className={css.ioText} data-error={state === 'error' || undefined}>{output}</span>\n </div>\n )}\n </div>\n )}\n </div>\n </DisclosureRow>\n </div>\n )\n}\n","/**\n * Extracted from DSH: the New Session bar of packages/client/ui-sidebar/src/client/SidebarRoot.tsx (icon and label in the wide sidebar, a plain icon control with a tooltip on the\n * 56px rail), pinned deepseek-harness 5dda764ed3. Markup and SidebarRow.module.css are the original's rules for it; the one adaptation is that the rail form is driven by the button's\n * own `collapsed` class instead of an ancestor's (the original styles `.collapsed .newSession`). See manifest.yml.\n */\nimport type { ReactNode } from 'react'\nimport { Tooltip } from '@deepseek-ai/dsh-client-ui-primitives'\nimport clsx from 'clsx'\nimport css from './SidebarRow.module.css'\n\nexport interface SidebarRowProps {\n icon: ReactNode\n label: string\n /** True for the wide sidebar (icon and label); false for the rail (icon only, label as tooltip and accessible name). */\n wide: boolean\n onClick: () => void\n}\n\n/**\n * Render the row.\n * @param props - icon, label, width state and action.\n * @returns the row button (with its tooltip on the rail).\n */\nexport function SidebarRow({ icon, label, wide, onClick }: SidebarRowProps) {\n return (\n <Tooltip label={label} delayMs={500} disabled={wide}>\n <button type=\"button\" className={clsx(css.newSession, !wide && css.collapsed)} aria-label={label} onClick={onClick}>\n {icon}\n {wide && <span className={clsx(css.newSessionLabel, css.wide)}>{label}</span>}\n </button>\n </Tooltip>\n )\n}\n","/**\n * Stack: a flex container with a theme-consistent gap. Layout only; direction, gap and alignment are runtime props, which is what the DSH styling rules allow inline styles for\n * (doc section 23/39). Not an extraction (DSH lays out with per-feature CSS); origin: gap. See manifest.yml.\n */\nimport type { CSSProperties, ReactNode } from 'react'\n\nconst GAPS = { xs: 4, sm: 8, md: 12, lg: 20 } as const\nconst ALIGN = { start: 'flex-start', center: 'center', end: 'flex-end', stretch: 'stretch' } as const\n\nexport interface StackProps {\n direction?: 'column' | 'row'\n gap?: keyof typeof GAPS\n align?: keyof typeof ALIGN\n children?: ReactNode\n}\n\n/**\n * Render the container.\n * @param props - direction, gap and alignment.\n * @returns the flex container.\n */\nexport function Stack({ direction = 'column', gap = 'md', align = 'stretch', children }: StackProps) {\n const style: CSSProperties = { display: 'flex', flexDirection: direction, gap: GAPS[gap], alignItems: ALIGN[align] }\n return <div style={style}>{children}</div>\n}\n","/**\n * The `acrylChat` service (declared in `../frame.ts`): the chat's phase and composer notice for ACRYL's client plugins, read from DSH's own conversation and\n * session services here so the plugins name no DSH package. Part of the DSH seam (scripts/verify-layout.mjs).\n */\nimport type { Context } from '@deepseek-ai/cordis'\nimport { conversationPhase } from '@deepseek-ai/dsh-client-ui-conversation/client'\nimport type { AcrylChat, ChatSessionId } from '../frame.ts'\n\n/**\n * The service over this page's chat. The DSH services are read at each call, so a page that has none of them yet answers undefined and false.\n * @param ctx - the client context that provides it.\n * @returns the service.\n */\nexport function createAcrylChat(ctx: Context): AcrylChat {\n const scopeOf = (sessionId: ChatSessionId) => ctx.get('sessions')?.scope(sessionId)\n return {\n phase(sessionId) {\n const scope = scopeOf(sessionId)\n const session = scope === undefined ? undefined : ctx.get('sessions')?.sessionOf(scope)?.getSnapshot()\n const conversation = ctx.get('uiConversation')?.binding(sessionId).snapshot.getSnapshot()\n if (session === undefined || conversation === undefined) return undefined\n return conversationPhase(session, conversation)\n },\n notice(sessionId, level, text) {\n const scope = scopeOf(sessionId)\n const conversation = ctx.get('conversation')\n if (scope === undefined || conversation === undefined) return false\n conversation.input.for(scope).notify(level, text)\n return true\n },\n }\n}\n\n/**\n * Provide `acrylChat` for one plugin lifetime.\n * @param ctx - the client context.\n * @returns the disposer of the registration.\n */\nexport function provideAcrylChat(ctx: Context): () => void {\n const dispose = ctx.reflect.provide('acrylChat', createAcrylChat(ctx))\n return () => { void dispose() }\n}\n","/**\n * Ported from shadcn/ui's Kbd (https://ui.shadcn.com/docs/components/kbd, MIT licence, registry item `kbd`, style `new-york-v4`, fetched 2026-09-22).\n * Tailwind utility classes replaced by a CSS Module on the app's own tokens (`--dsw-alias-bg-layer-2`, `--dsw-alias-label-tertiary`); `cn()` replaced by `clsx`. `KbdGroup` is not\n * ported: use this library's own `Stack` (`direction: 'row', gap: 'xs'`) for grouping instead of a second wrapper. See manifest.yml.\n */\nimport clsx from 'clsx'\nimport type { ReactNode } from 'react'\nimport css from './Kbd.module.css'\n\nexport interface KbdProps {\n children?: ReactNode\n className?: string\n}\n\n/**\n * Render one keyboard key or shortcut segment.\n * @param props - the key's label and an optional extra class.\n * @returns the element.\n */\nexport function Kbd({ children, className }: KbdProps) {\n return <kbd className={clsx(css.kbd, className)}>{children}</kbd>\n}\n","/**\n * Ported from shadcn/ui's Badge (https://ui.shadcn.com/docs/components/badge, MIT licence, registry item `badge`, style new-york-v4, fetched 2026-09-22).\n * Tailwind's cva variant classes replaced by a CSS Module on the app's own tokens; `asChild`/Slot (a Radix dependency) dropped - render an <a> yourself and\n * style it with the returned class if you need a link badge. Variants renamed to this library's own roles (success/warning/error/info exist; shadcn's\n * generic \"destructive\"/\"secondary\" do not) rather than kept as shadcn's names. See manifest.yml.\n */\nimport clsx from 'clsx'\nimport type { ReactNode } from 'react'\nimport css from './Badge.module.css'\n\nexport type BadgeVariant = 'default' | 'primary' | 'success' | 'warning' | 'error'\n\nexport interface BadgeProps {\n children?: ReactNode\n variant?: BadgeVariant\n className?: string\n}\n\n/**\n * Render one badge.\n * @param props - content, variant and an optional extra class.\n * @returns the element.\n */\nexport function Badge({ children, variant = 'default', className }: BadgeProps) {\n return <span className={clsx(css.badge, css[variant], className)}>{children}</span>\n}\n","/**\n * Ported from shadcn/ui's Skeleton (https://ui.shadcn.com/docs/components/skeleton, MIT licence, registry item `skeleton`, style new-york-v4, fetched 2026-09-22).\n * Tailwind's `animate-pulse` and `bg-accent` replaced by a CSS Module keyframe on the app's own token. See manifest.yml.\n */\nimport clsx from 'clsx'\nimport css from './Skeleton.module.css'\n\nexport interface SkeletonProps {\n className?: string\n /** Inline width/height for this instance (a skeleton has no natural size of its own). */\n style?: { width?: string | number, height?: string | number }\n}\n\n/**\n * Render a pulsing placeholder shape.\n * @param props - an extra class and inline size.\n * @returns the element.\n */\nexport function Skeleton({ className, style }: SkeletonProps) {\n return <div className={clsx(css.skeleton, className)} style={style} />\n}\n","/**\n * Ported from shadcn/ui's Spinner (https://ui.shadcn.com/docs/components/spinner, MIT licence, registry item `spinner`, style new-york-v4, fetched 2026-09-22).\n * The original renders lucide-react's Loader2Icon; that dependency is dropped in favor of a plain inline SVG arc with the same rotation, so this library\n * adds no new runtime dependency. See manifest.yml.\n */\nimport clsx from 'clsx'\nimport css from './Spinner.module.css'\n\nexport interface SpinnerProps {\n className?: string\n}\n\n/**\n * Render a rotating loading indicator.\n * @param props - an extra class.\n * @returns the element.\n */\nexport function Spinner({ className }: SpinnerProps) {\n return (\n <svg role=\"status\" aria-label=\"Loading\" viewBox=\"0 0 24 24\" fill=\"none\" className={clsx(css.spinner, className)}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeOpacity=\"0.25\" strokeWidth=\"3\" />\n <path d=\"M22 12a10 10 0 0 0-10-10\" stroke=\"currentColor\" strokeWidth=\"3\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n","/**\n * Ported from shadcn/ui's Alert (https://ui.shadcn.com/docs/components/alert, MIT licence, registry item `alert`, style new-york-v4, fetched 2026-09-22).\n * cva's variant classes replaced by a CSS Module on the app's own tokens; the grid layout (icon column keyed by `has-[>svg]`) is kept as a plain flex row -\n * that Tailwind arbitrary-variant trick has no equivalent worth reproducing outside Tailwind, so an icon is just the first child. See manifest.yml.\n */\nimport clsx from 'clsx'\nimport type { ReactNode } from 'react'\nimport css from './Alert.module.css'\n\nexport type AlertVariant = 'default' | 'error'\n\nexport interface AlertProps {\n /** An icon, rendered before the title/description. */\n icon?: ReactNode\n title?: ReactNode\n children?: ReactNode\n variant?: AlertVariant\n className?: string\n}\n\n/**\n * Render an alert.\n * @param props - icon, title, body and variant.\n * @returns the element.\n */\nexport function Alert({ icon, title, children, variant = 'default', className }: AlertProps) {\n return (\n <div role=\"alert\" className={clsx(css.alert, css[variant], className)}>\n {icon !== undefined && <span className={css.icon}>{icon}</span>}\n <div className={css.body}>\n {title !== undefined && <div className={css.title}>{title}</div>}\n {children !== undefined && <div className={css.description}>{children}</div>}\n </div>\n </div>\n )\n}\n","/**\n * Ported from shadcn/ui's Separator (https://ui.shadcn.com/docs/components/separator, MIT licence, registry item `separator`, style new-york-v4, fetched\n * 2026-09-22). The Radix `Separator.Root` primitive it wraps is dropped - a decorative separator needs no interactive behavior, only the ARIA presentation\n * role Radix itself would apply - so this is a plain <div>. See manifest.yml.\n */\nimport clsx from 'clsx'\nimport css from './Separator.module.css'\n\nexport interface SeparatorProps {\n orientation?: 'horizontal' | 'vertical'\n /** True (the default): a layout divider, hidden from assistive tech. False: a real semantic separator (`role=\"separator\"`). */\n decorative?: boolean\n className?: string\n}\n\n/**\n * Render a thin dividing line.\n * @param props - orientation, decorative flag and an extra class.\n * @returns the element.\n */\nexport function Separator({ orientation = 'horizontal', decorative = true, className }: SeparatorProps) {\n return (\n <div\n role={decorative ? 'none' : 'separator'}\n aria-orientation={decorative ? undefined : orientation}\n className={clsx(css.separator, orientation === 'vertical' ? css.vertical : css.horizontal, className)}\n />\n )\n}\n","/**\n * Ported from shadcn/ui's Progress (https://ui.shadcn.com/docs/components/progress, MIT licence, registry item `progress`, style new-york-v4, fetched\n * 2026-09-22). The Radix `Progress.Root`/`Indicator` primitives it wraps are dropped - a determinate progress bar needs no interactive behavior, only the\n * ARIA attributes Radix itself would apply - so this sets them directly on a plain track/fill pair. See manifest.yml.\n */\nimport css from './Progress.module.css'\n\nexport interface ProgressProps {\n /** 0 to 100. */\n value: number\n className?: string\n}\n\n/**\n * Render a determinate progress bar.\n * @param props - the current value (0-100) and an extra class.\n * @returns the element.\n */\nexport function Progress({ value, className }: ProgressProps) {\n const clamped = Math.min(100, Math.max(0, value))\n return (\n <div role=\"progressbar\" aria-valuenow={clamped} aria-valuemin={0} aria-valuemax={100} className={className ?? css.track}>\n <div className={css.fill} style={{ transform: `translateX(-${100 - clamped}%)` }} />\n </div>\n )\n}\n","/**\n * Ported from shadcn/ui's Avatar (https://ui.shadcn.com/docs/components/avatar, MIT licence, registry item `avatar`, style new-york-v4, fetched 2026-09-22).\n * The Radix `Avatar.Root`/`Image`/`Fallback` primitives it wraps are dropped - the image-load-failure fallback they provide is reproduced with a plain\n * `onError` state instead. `AvatarBadge`, `AvatarGroup` and `AvatarGroupCount` are not ported (composition-only additions with no behavior of their own;\n * build them from `Stack` and this component if needed). See manifest.yml.\n */\nimport { useState } from 'react'\nimport clsx from 'clsx'\nimport type { ReactNode } from 'react'\nimport css from './Avatar.module.css'\n\nexport type AvatarSize = 'sm' | 'default' | 'lg'\n\nexport interface AvatarProps {\n src?: string\n alt?: string\n /** Shown when `src` is absent, or the image fails to load (initials, an icon, and so on). */\n fallback: ReactNode\n size?: AvatarSize\n className?: string\n}\n\n/**\n * Render an avatar: the image when it loads, the fallback otherwise.\n * @param props - image source, fallback content, size and an extra class.\n * @returns the element.\n */\nexport function Avatar({ src, alt = '', fallback, size = 'default', className }: AvatarProps) {\n const [failed, setFailed] = useState(false)\n const showImage = src !== undefined && !failed\n return (\n <span className={clsx(css.avatar, css[size], className)}>\n {showImage\n ? <img src={src} alt={alt} className={css.image} onError={() => { setFailed(true) }} />\n : <span className={css.fallback}>{fallback}</span>}\n </span>\n )\n}\n","/**\n * Ported from shadcn/ui's Label (https://ui.shadcn.com/docs/components/label, MIT licence, registry item `label`, style new-york-v4, fetched 2026-09-22).\n * The Radix `Label.Root` primitive it wraps is dropped - a form label needs no interactive behavior beyond the native `<label for>` association, which\n * this already has. See manifest.yml.\n */\nimport clsx from 'clsx'\nimport type { ReactNode } from 'react'\nimport css from './Label.module.css'\n\nexport interface LabelProps {\n htmlFor?: string\n children?: ReactNode\n className?: string\n}\n\n/**\n * Render a form label.\n * @param props - the control it labels, content and an extra class.\n * @returns the element.\n */\nexport function Label({ htmlFor, children, className }: LabelProps) {\n return <label htmlFor={htmlFor} className={clsx(css.label, className)}>{children}</label>\n}\n","/**\n * Ported from shadcn/ui's Textarea (https://ui.shadcn.com/docs/components/textarea, MIT licence, registry item `textarea`, style new-york-v4, fetched\n * 2026-09-22). Tailwind utility classes replaced by a CSS Module on the app's own tokens. See manifest.yml.\n */\nimport clsx from 'clsx'\nimport css from './Textarea.module.css'\n\nexport interface TextareaProps {\n value: string\n onChange: (value: string) => void\n placeholder?: string\n disabled?: boolean\n rows?: number\n className?: string\n}\n\n/**\n * Render a multi-line text input.\n * @param props - value, change handler and standard textarea options.\n * @returns the element.\n */\nexport function Textarea({ value, onChange, placeholder, disabled = false, rows = 3, className }: TextareaProps) {\n return (\n <textarea\n className={clsx(css.textarea, className)}\n value={value}\n onChange={(event) => { onChange(event.target.value) }}\n placeholder={placeholder}\n disabled={disabled}\n rows={rows}\n />\n )\n}\n","/**\n * Ported from shadcn/ui's Checkbox (https://ui.shadcn.com/docs/components/checkbox, MIT licence, registry item `checkbox`, style new-york-v4, fetched\n * 2026-09-22). The Radix `Checkbox.Root`/`Indicator` primitives it wraps are dropped in favor of a real `<input type=\"checkbox\">` (a native control needs\n * no Radix to be accessible); lucide-react's CheckIcon is replaced by a plain inline SVG check (no new dependency). See manifest.yml.\n */\nimport clsx from 'clsx'\nimport css from './Checkbox.module.css'\n\nexport interface CheckboxProps {\n checked: boolean\n onChange: (checked: boolean) => void\n label: string\n disabled?: boolean\n className?: string\n}\n\n/**\n * Render a checkbox with its accessible label.\n * @param props - checked state, change handler, label and disabled flag.\n * @returns the element.\n */\nexport function Checkbox({ checked, onChange, label, disabled = false, className }: CheckboxProps) {\n return (\n <label className={clsx(css.wrapper, className)}>\n <span className={css.box} data-checked={checked || undefined}>\n <input type=\"checkbox\" checked={checked} disabled={disabled} onChange={(event) => { onChange(event.target.checked) }} className={css.input} aria-label={label} />\n {checked && <svg viewBox=\"0 0 14 14\" width=\"12\" height=\"12\" aria-hidden><path d=\"M2 7l3.5 3.5L12 3.5\" stroke=\"currentColor\" strokeWidth=\"2\" fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\" /></svg>}\n </span>\n <span>{label}</span>\n </label>\n )\n}\n","/**\n * Ported from shadcn/ui's AspectRatio (https://ui.shadcn.com/docs/components/aspect-ratio, MIT licence, registry item `aspect-ratio`, style new-york-v4,\n * fetched 2026-09-22). The Radix `AspectRatio.Root` primitive it wraps is dropped - it is a pure CSS box (a fixed ratio between width and height), which\n * the CSS `aspect-ratio` property now does natively with no JS behavior needed at all. See manifest.yml.\n */\nimport type { ReactNode } from 'react'\nimport css from './AspectRatio.module.css'\n\nexport interface AspectRatioProps {\n /** Width divided by height, e.g. `16 / 9`. */\n ratio: number\n children?: ReactNode\n className?: string\n}\n\n/**\n * Render a box held to a fixed width:height ratio.\n * @param props - the ratio and content.\n * @returns the element.\n */\nexport function AspectRatio({ ratio, children, className }: AspectRatioProps) {\n return <div className={className ?? css.box} style={{ aspectRatio: ratio }}>{children}</div>\n}\n","/**\n * Ported from shadcn/ui's Breadcrumb (https://ui.shadcn.com/docs/components/breadcrumb, MIT licence, registry item `breadcrumb`, style new-york-v4,\n * fetched 2026-09-22). Tailwind utility classes replaced by a CSS Module on the app's own tokens; `asChild`/Slot (a Radix dependency) dropped from\n * BreadcrumbLink - render your own `<a>` if you need a non-anchor link. lucide-react's ChevronRight/MoreHorizontal replaced by plain inline SVGs (no\n * new dependency). See manifest.yml.\n */\nimport clsx from 'clsx'\nimport type { AnchorHTMLAttributes, ReactNode } from 'react'\nimport css from './Breadcrumb.module.css'\n\nexport function Breadcrumb({ children }: { children?: ReactNode }) {\n return <nav aria-label=\"breadcrumb\">{children}</nav>\n}\nexport function BreadcrumbList({ children }: { children?: ReactNode }) {\n return <ol className={css.list}>{children}</ol>\n}\nexport function BreadcrumbItem({ children }: { children?: ReactNode }) {\n return <li className={css.item}>{children}</li>\n}\nexport function BreadcrumbLink({ children, ...rest }: AnchorHTMLAttributes<HTMLAnchorElement>) {\n return <a className={css.link} {...rest}>{children}</a>\n}\nexport function BreadcrumbPage({ children }: { children?: ReactNode }) {\n return <span role=\"link\" aria-disabled=\"true\" aria-current=\"page\" className={css.page}>{children}</span>\n}\nexport function BreadcrumbSeparator({ children }: { children?: ReactNode }) {\n return (\n <li role=\"presentation\" aria-hidden className={css.separator}>\n {children ?? <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\"><path d=\"M5 3l4 4-4 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" /></svg>}\n </li>\n )\n}\nexport function BreadcrumbEllipsis({ label = 'More' }: { label?: string }) {\n return (\n <span role=\"presentation\" aria-hidden className={clsx(css.item, css.ellipsis)}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><circle cx=\"3\" cy=\"8\" r=\"1.3\" fill=\"currentColor\" /><circle cx=\"8\" cy=\"8\" r=\"1.3\" fill=\"currentColor\" /><circle cx=\"13\" cy=\"8\" r=\"1.3\" fill=\"currentColor\" /></svg>\n <span className={css.srOnly}>{label}</span>\n </span>\n )\n}\n","/**\n * Ported from shadcn/ui's Toggle (https://ui.shadcn.com/docs/components/toggle, MIT licence, registry item `toggle`, style new-york-v4, fetched\n * 2026-09-22). The Radix `Toggle.Root` primitive it wraps is dropped - a two-state pressed button needs no interactive behavior beyond a native\n * `<button aria-pressed>`, which this already has; cva's variant classes replaced by a CSS Module. See manifest.yml.\n */\nimport clsx from 'clsx'\nimport type { ReactNode } from 'react'\nimport css from './Toggle.module.css'\n\nexport type ToggleVariant = 'default' | 'outline'\nexport type ToggleSize = 'sm' | 'default' | 'lg'\n\nexport interface ToggleProps {\n pressed: boolean\n onPressedChange: (pressed: boolean) => void\n children?: ReactNode\n variant?: ToggleVariant\n size?: ToggleSize\n disabled?: boolean\n className?: string\n}\n\n/**\n * Render a two-state toggle button.\n * @param props - pressed state, change handler, content, variant and size.\n * @returns the element.\n */\nexport function Toggle({ pressed, onPressedChange, children, variant = 'default', size = 'default', disabled = false, className }: ToggleProps) {\n return (\n <button\n type=\"button\"\n aria-pressed={pressed}\n disabled={disabled}\n onClick={() => { onPressedChange(!pressed) }}\n className={clsx(css.toggle, css[variant], css[size], pressed && css.pressed, className)}\n >\n {children}\n </button>\n )\n}\n","/**\n * Ported from shadcn/ui's ButtonGroup (https://ui.shadcn.com/docs/components/button-group, MIT licence, registry item `button-group`, style\n * new-york-v4, fetched 2026-09-22). cva's variant classes replaced by a CSS Module; `ButtonGroupSeparator`'s dependency on shadcn's own Separator is\n * NOT replaced by this library's own `Separator` (registry/Separator) - that would be a cross-item import, breaking self-containment - it restates\n * the same two-rule divider locally instead (see the component below). `asChild`/Slot (a Radix dependency) dropped from `ButtonGroupText`. See manifest.yml.\n */\nimport clsx from 'clsx'\nimport type { ReactNode } from 'react'\nimport css from './ButtonGroup.module.css'\n\nexport interface ButtonGroupProps {\n children?: ReactNode\n orientation?: 'horizontal' | 'vertical'\n className?: string\n}\n\n/**\n * Render a row (or column) of controls with their corners merged.\n * @param props - content and orientation.\n * @returns the element.\n */\nexport function ButtonGroup({ children, orientation = 'horizontal', className }: ButtonGroupProps) {\n return <div role=\"group\" className={clsx(css.group, orientation === 'vertical' ? css.vertical : css.horizontal, className)}>{children}</div>\n}\n\nexport function ButtonGroupText({ children, className }: { children?: ReactNode, className?: string }) {\n return <div className={clsx(css.text, className)}>{children}</div>\n}\n\n// A plain divider, not this library's own Separator item: importing a sibling item's file would make\n// this item depend on another item's directory, breaking self-containment (the same class of bug found\n// and fixed in SwitchField). Same two lines, duplicated on purpose.\nexport function ButtonGroupSeparator({ orientation = 'vertical', className }: { orientation?: 'horizontal' | 'vertical', className?: string }) {\n return <div role=\"none\" className={clsx(orientation === 'vertical' ? css.separatorVertical : css.separatorHorizontal, className)} />\n}\n","/**\n * Ported from shadcn/ui's Accordion (https://ui.shadcn.com/docs/components/accordion, MIT licence, registry item `accordion`, style new-york-v4, fetched\n * 2026-09-22). The Radix `Accordion.Root`/`Item`/`Trigger`/`Content` primitives it wraps are dropped in favor of plain React state (open item id(s));\n * this library's own `DisclosureRow` already exists for a single collapsible row (see ToolCallCard's use of it), but shadcn's Accordion additionally\n * supports several sibling items sharing one open/close model (`type=\"single\"` or `\"multiple\"`), which `DisclosureRow` does not - that is the real gap\n * this fills. lucide-react's ChevronDownIcon replaced by a plain inline SVG (no new dependency). See manifest.yml.\n */\nimport { createContext, useContext, useState } from 'react'\nimport clsx from 'clsx'\nimport type { ReactNode } from 'react'\nimport css from './Accordion.module.css'\n\ninterface AccordionContextValue {\n isOpen: (id: string) => boolean\n toggle: (id: string) => void\n}\nconst AccordionContext = createContext<AccordionContextValue | null>(null)\n\nexport interface AccordionProps {\n type: 'single' | 'multiple'\n children?: ReactNode\n className?: string\n}\n\n/**\n * Render an accordion: one or more collapsible items sharing an open/close model.\n * @param props - `single` (one item open at a time) or `multiple`, and content.\n * @returns the element.\n */\nexport function Accordion({ type, children, className }: AccordionProps) {\n const [open, setOpen] = useState<Set<string>>(new Set())\n const toggle = (id: string) => {\n setOpen((current) => {\n const next = new Set(type === 'multiple' ? current : [])\n if (current.has(id)) next.delete(id)\n else next.add(id)\n return next\n })\n }\n return (\n <AccordionContext.Provider value={{ isOpen: (id) => open.has(id), toggle }}>\n <div className={className}>{children}</div>\n </AccordionContext.Provider>\n )\n}\n\nconst ItemIdContext = createContext<string>('')\n\nexport function AccordionItem({ value, children, className }: { value: string, children?: ReactNode, className?: string }) {\n return (\n <ItemIdContext.Provider value={value}>\n <div className={clsx(css.item, className)}>{children}</div>\n </ItemIdContext.Provider>\n )\n}\n\nexport function AccordionTrigger({ children, className }: { children?: ReactNode, className?: string }) {\n const ctx = useContext(AccordionContext)\n const id = useContext(ItemIdContext)\n const open = ctx?.isOpen(id) ?? false\n return (\n <button type=\"button\" aria-expanded={open} onClick={() => { ctx?.toggle(id) }} className={clsx(css.trigger, className)}>\n {children}\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" aria-hidden className={clsx(css.chevron, open && css.chevronOpen)}><path d=\"M3 5l4 4 4-4\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" /></svg>\n </button>\n )\n}\n\nexport function AccordionContent({ children, className }: { children?: ReactNode, className?: string }) {\n const ctx = useContext(AccordionContext)\n const id = useContext(ItemIdContext)\n if (!(ctx?.isOpen(id) ?? false)) return null\n return <div className={clsx(css.content, className)}>{children}</div>\n}\n","/**\n * Ported from shadcn/ui's RadioGroup (https://ui.shadcn.com/docs/components/radio-group, MIT licence, registry item `radio-group`, style new-york-v4,\n * fetched 2026-09-22). A real gap-fill, not a duplicate of this library's `AppearanceCubes`/`Segmented`: those are icon-and-label exclusive TILES (the\n * app's own Appearance picker pattern); this is the classic radio-dot list, for when the options are plain text and tiles would be overkill. The Radix\n * `RadioGroup.Root`/`Item`/`Indicator` primitives it wraps are dropped in favor of real `<input type=\"radio\">` controls (grouped by `name`, which gives\n * the native arrow-key behavior for free); lucide-react's CircleIcon replaced by a plain CSS dot. See manifest.yml.\n */\nimport clsx from 'clsx'\nimport css from './RadioGroup.module.css'\n\nexport interface RadioOption {\n id: string\n label: string\n disabled?: boolean\n}\n\nexport interface RadioGroupProps {\n name: string\n options: readonly RadioOption[]\n value: string\n onChange: (value: string) => void\n className?: string\n}\n\n/**\n * Render a list of mutually exclusive radio options.\n * @param props - the input group name, options, value and change handler.\n * @returns the element.\n */\nexport function RadioGroup({ name, options, value, onChange, className }: RadioGroupProps) {\n return (\n <div role=\"radiogroup\" className={clsx(css.group, className)}>\n {options.map(option => (\n <label key={option.id} className={css.option} data-disabled={option.disabled || undefined}>\n <span className={css.dot} data-checked={option.id === value || undefined}>\n <input type=\"radio\" name={name} value={option.id} checked={option.id === value} disabled={option.disabled} onChange={() => { onChange(option.id) }} className={css.input} />\n </span>\n <span>{option.label}</span>\n </label>\n ))}\n </div>\n )\n}\n","/**\n * Ported from shadcn/ui's Collapsible (https://ui.shadcn.com/docs/components/collapsible, MIT licence, registry item `collapsible`, style\n * new-york-v4, fetched 2026-09-22). The Radix `Collapsible.Root`/`CollapsibleTrigger`/`CollapsibleContent` primitives it wraps are dropped in favor of\n * plain React state. Distinct from this library's `DisclosureRow` (a fully-chromed row with an icon, title and chevron - see ToolCallCard): this is the\n * bare primitive with no chrome of its own, for when a plain trigger and a plain content block are all that is needed. See manifest.yml.\n */\nimport { createContext, useContext, useState } from 'react'\nimport type { ReactNode } from 'react'\n\ninterface CollapsibleContextValue {\n open: boolean\n toggle: () => void\n}\nconst CollapsibleContext = createContext<CollapsibleContextValue | null>(null)\n\nexport interface CollapsibleProps {\n defaultOpen?: boolean\n children?: ReactNode\n}\n\n/**\n * Render a collapsible section (bare: no chrome, just open/close state shared with its children).\n * @param props - initial open state and content.\n * @returns the element.\n */\nexport function Collapsible({ defaultOpen = false, children }: CollapsibleProps) {\n const [open, setOpen] = useState(defaultOpen)\n return <CollapsibleContext.Provider value={{ open, toggle: () => { setOpen(v => !v) } }}>{children}</CollapsibleContext.Provider>\n}\n\nexport function CollapsibleTrigger({ children, className }: { children?: ReactNode, className?: string }) {\n const ctx = useContext(CollapsibleContext)\n return <button type=\"button\" aria-expanded={ctx?.open ?? false} onClick={() => { ctx?.toggle() }} className={className}>{children}</button>\n}\n\nexport function CollapsibleContent({ children, className }: { children?: ReactNode, className?: string }) {\n const ctx = useContext(CollapsibleContext)\n if (!(ctx?.open ?? false)) return null\n return <div className={className}>{children}</div>\n}\n","/**\n * Ported from shadcn/ui's ToggleGroup (https://ui.shadcn.com/docs/components/toggle-group, MIT licence, registry item `toggle-group`, style\n * new-york-v4, fetched 2026-09-22). The Radix `ToggleGroup.Root`/`Item` primitives it wraps are dropped for plain React state (a selected-id set);\n * single or multiple selection is a prop, matching shadcn's own `type`. Its buttons restate this library's `Toggle` styling locally rather than\n * importing that item's file - importing a sibling item would break this item's self-containment (the same class of bug found in SwitchField and\n * ButtonGroupSeparator). cva variants replaced by a CSS Module. See manifest.yml.\n */\nimport { createContext, useContext } from 'react'\nimport clsx from 'clsx'\nimport type { ReactNode } from 'react'\nimport css from './ToggleGroup.module.css'\n\ninterface ToggleGroupContextValue {\n isSelected: (id: string) => boolean\n select: (id: string) => void\n}\nconst ToggleGroupContext = createContext<ToggleGroupContextValue | null>(null)\n\nexport interface ToggleGroupProps {\n type: 'single' | 'multiple'\n value: string | readonly string[]\n onChange: (value: string | string[]) => void\n children?: ReactNode\n className?: string\n}\n\n/**\n * Render a row of toggle buttons sharing a single- or multiple-selection model.\n * @param props - selection type, value, change handler and content.\n * @returns the element.\n */\nexport function ToggleGroup({ type, value, onChange, children, className }: ToggleGroupProps) {\n const selected = new Set(type === 'multiple' ? (value as readonly string[]) : value === '' ? [] : [value as string])\n const select = (id: string) => {\n if (type === 'multiple') {\n const next = new Set(selected)\n if (next.has(id)) next.delete(id); else next.add(id)\n onChange([...next])\n } else {\n onChange(selected.has(id) ? '' : id)\n }\n }\n return (\n <ToggleGroupContext.Provider value={{ isSelected: (id) => selected.has(id), select }}>\n <div role=\"group\" className={clsx(css.group, className)}>{children}</div>\n </ToggleGroupContext.Provider>\n )\n}\n\nexport function ToggleGroupItem({ value, children, className }: { value: string, children?: ReactNode, className?: string }) {\n const ctx = useContext(ToggleGroupContext)\n const pressed = ctx?.isSelected(value) ?? false\n return (\n <button type=\"button\" aria-pressed={pressed} onClick={() => { ctx?.select(value) }} className={clsx(css.item, pressed && css.pressed, className)}>\n {children}\n </button>\n )\n}\n","/**\n * Ported from shadcn/ui's Table (https://ui.shadcn.com/docs/components/table, MIT licence, registry item `table`, style new-york-v4, fetched\n * 2026-09-22). Tailwind utility classes replaced by a CSS Module on the app's own tokens; `cn()` replaced by `clsx`. The source's descendant\n * utilities (`[&_tr]:border-b`, `[&_tr:last-child]:border-0`) become plain descendant selectors inside the module, and `bg-muted/50` becomes the\n * app's own `--dsw-alias-interactive-bg-hover`. The source wraps every table in its own scroll container, kept as-is. No Radix primitive is\n * involved - a table needs no interactive behavior - so nothing was dropped. The doc site's \"Data Table\" page is a composition guide over this\n * item plus a data library, not a component of its own. See manifest.yml.\n */\nimport clsx from 'clsx'\nimport type {\n HTMLAttributes,\n TableHTMLAttributes,\n TdHTMLAttributes,\n ThHTMLAttributes,\n} from 'react'\nimport css from './Table.module.css'\n\n/**\n * Render a table inside its own horizontal scroll container.\n * @param props - normal `<table>` attributes; `className` lands on the table itself, not the container.\n * @returns the element.\n */\nexport function Table({ className, children, ...rest }: TableHTMLAttributes<HTMLTableElement>) {\n return (\n <div className={css.container}>\n <table className={clsx(css.table, className)} {...rest}>{children}</table>\n </div>\n )\n}\n\nexport function TableHeader({ className, children, ...rest }: HTMLAttributes<HTMLTableSectionElement>) {\n return <thead className={clsx(css.header, className)} {...rest}>{children}</thead>\n}\n\nexport function TableBody({ className, children, ...rest }: HTMLAttributes<HTMLTableSectionElement>) {\n return <tbody className={clsx(css.body, className)} {...rest}>{children}</tbody>\n}\n\nexport function TableFooter({ className, children, ...rest }: HTMLAttributes<HTMLTableSectionElement>) {\n return <tfoot className={clsx(css.footer, className)} {...rest}>{children}</tfoot>\n}\n\nexport function TableRow({ className, children, ...rest }: HTMLAttributes<HTMLTableRowElement>) {\n return <tr className={clsx(css.row, className)} {...rest}>{children}</tr>\n}\n\nexport function TableHead({ className, children, ...rest }: ThHTMLAttributes<HTMLTableCellElement>) {\n return <th className={clsx(css.head, className)} {...rest}>{children}</th>\n}\n\nexport function TableCell({ className, children, ...rest }: TdHTMLAttributes<HTMLTableCellElement>) {\n return <td className={clsx(css.cell, className)} {...rest}>{children}</td>\n}\n\nexport function TableCaption({ className, children, ...rest }: HTMLAttributes<HTMLTableCaptionElement>) {\n return <caption className={clsx(css.caption, className)} {...rest}>{children}</caption>\n}","/**\n * Ported from shadcn/ui's Direction (https://ui.shadcn.com/docs/components/direction, MIT licence, registry item `direction`, style new-york-v4,\n * fetched 2026-09-22). Radix's `Direction.DirectionProvider` and `useDirection` are dropped and reproduced with a plain `createContext`: text\n * direction is one string, so the provider needs no behavior of its own and the public API stays the same (`dir`, the source's `direction` alias,\n * and a `useDirection()` hook). The source's provider requires `dir`; here it defaults to `ltr`, which is what Radix itself falls back to. This\n * item has no stylesheet - a direction carries no styling - so there is no `.module.css` beside it. See manifest.yml.\n */\nimport { createContext, useContext } from 'react'\nimport type { ReactNode } from 'react'\n\nexport type Direction = 'ltr' | 'rtl'\n\nconst DirectionContext = createContext<Direction>('ltr')\n\nexport interface DirectionProviderProps {\n dir?: Direction\n direction?: Direction\n children?: ReactNode\n}\n\n/**\n * Provide a text direction to every descendant (and, through Radix's own behavior in the source, to portals - those are the app's concern here).\n * @param props - `dir`, or the source's `direction` alias, and the subtree.\n * @returns the element.\n */\nexport function DirectionProvider({ dir, direction, children }: DirectionProviderProps) {\n return <DirectionContext.Provider value={direction ?? dir ?? 'ltr'}>{children}</DirectionContext.Provider>\n}\n\n/**\n * Read the direction set by the nearest `DirectionProvider`.\n * @returns `ltr` when no provider is above this component, matching Radix's default.\n */\nexport function useDirection(): Direction {\n return useContext(DirectionContext)\n}","/**\n * Ported from shadcn/ui's Marker (https://ui.shadcn.com/docs/components/marker, MIT licence, registry item `marker`, style new-york-v4, fetched\n * 2026-09-22). A muted label line for between message groups: plain, ruled on both sides, or underlined at the bottom. Tailwind utility classes\n * replaced by a CSS Module on the app's own tokens; `cva`'s variants become classes; `asChild`/Slot (a Radix dependency) dropped from `Marker`;\n * the source's `group-data-[variant=separator]` rule on the content becomes the `.separator .content` descendant selector. `markerVariants` is not\n * exported - the source exported its `cva` result, and this port has no `cva`. See manifest.yml.\n */\nimport clsx from 'clsx'\nimport type { ReactNode } from 'react'\nimport css from './Marker.module.css'\n\nexport type MarkerVariant = 'default' | 'separator' | 'border'\n\nexport interface MarkerProps {\n variant?: MarkerVariant\n children?: ReactNode\n className?: string\n}\n\n/**\n * Render a muted label line.\n * @param props - the variant (a plain line, a line ruled on both sides, or one underlined at the bottom) and the line's content.\n * @returns the element.\n */\nexport function Marker({ variant = 'default', children, className }: MarkerProps) {\n return (\n <div\n data-variant={variant}\n className={clsx(css.marker, variant === 'separator' ? css.separator : variant === 'border' ? css.border : undefined, className)}\n >\n {children}\n </div>\n )\n}\n\nexport function MarkerIcon({ children, className }: { children?: ReactNode, className?: string }) {\n return <span aria-hidden=\"true\" className={clsx(css.icon, className)}>{children}</span>\n}\n\nexport function MarkerContent({ children, className }: { children?: ReactNode, className?: string }) {\n return <span className={clsx(css.content, className)}>{children}</span>\n}","/**\n * Ported from shadcn/ui's Message (https://ui.shadcn.com/docs/components/message, MIT licence, registry item `message`, style new-york-v4, fetched\n * 2026-09-22). The message row around a Bubble: avatar, header, content, footer. Tailwind utility classes replaced by a CSS Module on the app's own\n * tokens; `cn()` replaced by `clsx`. The source's two group utilities that reach across the row - `group-has-data-[slot=message-footer]/message`\n * on the avatar and `group-data-[align=end]/message:*:data-slot:self-end` on the content - become `:has()` and child-attribute selectors in the\n * module. The parts keep their `data-slot` attributes because those selectors (and the Bubble item's) key off them. No Radix primitive is\n * involved, so nothing was dropped. See manifest.yml.\n */\nimport clsx from 'clsx'\nimport type { ReactNode } from 'react'\nimport css from './Message.module.css'\n\nexport type MessageAlign = 'start' | 'end'\n\nexport interface MessageProps {\n align?: MessageAlign\n children?: ReactNode\n className?: string\n}\n\n/**\n * Render a message row: content first, avatar alongside, reversed when `align` is `end`.\n * @param props - which side the message sits on, and its parts.\n * @returns the element.\n */\nexport function Message({ align = 'start', children, className }: MessageProps) {\n return <div data-slot=\"message\" data-align={align} className={clsx(css.message, className)}>{children}</div>\n}\n\nexport function MessageGroup({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"message-group\" className={clsx(css.group, className)}>{children}</div>\n}\n\nexport function MessageAvatar({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"message-avatar\" className={clsx(css.avatar, className)}>{children}</div>\n}\n\nexport function MessageContent({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"message-content\" className={clsx(css.content, className)}>{children}</div>\n}\n\nexport function MessageHeader({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"message-header\" className={clsx(css.header, className)}>{children}</div>\n}\n\nexport function MessageFooter({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"message-footer\" className={clsx(css.footer, className)}>{children}</div>\n}","/**\n * Ported from shadcn/ui's Bubble (https://ui.shadcn.com/docs/components/bubble, MIT licence, registry item `bubble`, style new-york-v4, fetched\n * 2026-09-22). A chat bubble and its reaction pill, meant to sit inside this library's `Message`. Tailwind utility classes replaced by a CSS Module\n * on the app's own tokens; `cva`'s variants become classes; `asChild`/Slot (a Radix dependency) dropped from `BubbleContent`. Two substitutions are\n * worth naming, because they are the only places this port is not a literal translation: (1) the source colours the child `[data-slot=bubble-content]`\n * from the parent, reproduced here with `.bubble[data-variant=...] .content` descendant selectors, so `BubbleContent` must stay inside `Bubble` for\n * the variant to show; (2) the `tinted` variant's relative-colour expressions (`oklch(from var(--primary) 0.93 calc(c*0.4) h)`, and its dark twin)\n * have no equivalent in the app's token set, so they are approximated with `color-mix` over `--acryl-accent`, which at least follows the scheme the\n * same way the alias tokens do. See manifest.yml.\n */\nimport clsx from 'clsx'\nimport type { ReactNode } from 'react'\nimport css from './Bubble.module.css'\n\nexport type BubbleVariant = 'default' | 'secondary' | 'muted' | 'tinted' | 'outline' | 'ghost' | 'destructive'\nexport type BubbleAlign = 'start' | 'end'\n\nexport interface BubbleProps {\n variant?: BubbleVariant\n align?: BubbleAlign\n children?: ReactNode\n className?: string\n}\n\n/**\n * Render a chat bubble shell. Its `BubbleContent` child takes the variant's colors.\n * @param props - the variant, which side the bubble sits on, and its parts.\n * @returns the element.\n */\nexport function Bubble({ variant = 'default', align = 'start', children, className }: BubbleProps) {\n return <div data-variant={variant} data-align={align} className={clsx(css.bubble, className)}>{children}</div>\n}\n\nexport function BubbleGroup({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"bubble-group\" className={clsx(css.group, className)}>{children}</div>\n}\n\nexport function BubbleContent({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"bubble-content\" className={clsx(css.content, className)}>{children}</div>\n}\n\nexport interface BubbleReactionsProps {\n side?: 'top' | 'bottom'\n align?: BubbleAlign\n children?: ReactNode\n className?: string\n}\n\nexport function BubbleReactions({ side = 'bottom', align = 'end', children, className }: BubbleReactionsProps) {\n return <div data-side={side} data-align={align} className={clsx(css.reactions, className)}>{children}</div>\n}","/**\n * Ported from shadcn/ui's Pagination (https://ui.shadcn.com/docs/components/pagination, MIT licence, registry item `pagination`, style new-york-v4,\n * fetched 2026-09-22). `PaginationLink` is built on shadcn's own Button item in the source (`buttonVariants`); importing that item's file across\n * item boundaries would break self-containment (the bug class this registry's ingest gate rejects), so the ghost/outline link look is restated\n * locally in this module - the same precedent as `ToggleGroupItem` and `ButtonGroupSeparator`. lucide-react's ChevronLeft/ChevronRight/\n * MoreHorizontal are replaced by plain inline SVGs (no new dependency). The source's `hidden sm:block` on the Previous/Next labels is kept as a\n * width query in the module. See manifest.yml.\n */\nimport clsx from 'clsx'\nimport type { AnchorHTMLAttributes, ReactNode } from 'react'\nimport css from './Pagination.module.css'\n\n/**\n * Render the pagination landmark around a set of page links.\n * @param props - the links.\n * @returns the element.\n */\nexport function Pagination({ children, className }: { children?: ReactNode, className?: string }) {\n return <nav role=\"navigation\" aria-label=\"pagination\" className={clsx(css.pagination, className)}>{children}</nav>\n}\n\nexport function PaginationContent({ children, className }: { children?: ReactNode, className?: string }) {\n return <ul className={clsx(css.content, className)}>{children}</ul>\n}\n\nexport function PaginationItem({ children, className }: { children?: ReactNode, className?: string }) {\n return <li className={className}>{children}</li>\n}\n\nexport interface PaginationLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n isActive?: boolean\n size?: 'default' | 'icon'\n}\n\nexport function PaginationLink({ isActive, size = 'icon', children, className, ...rest }: PaginationLinkProps) {\n return (\n <a\n aria-current={isActive === true ? 'page' : undefined}\n data-active={isActive}\n className={clsx(css.link, size === 'icon' ? css.icon : undefined, isActive === true ? css.active : undefined, className)}\n {...rest}\n >\n {children}\n </a>\n )\n}\n\nexport function PaginationPrevious({ children, className, ...rest }: PaginationLinkProps) {\n return (\n <PaginationLink aria-label=\"Go to previous page\" size=\"default\" className={className} {...rest}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden><path d=\"M10 3L5 8l5 5\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" /></svg>\n <span className={css.label}>{children ?? 'Previous'}</span>\n </PaginationLink>\n )\n}\n\nexport function PaginationNext({ children, className, ...rest }: PaginationLinkProps) {\n return (\n <PaginationLink aria-label=\"Go to next page\" size=\"default\" className={className} {...rest}>\n <span className={css.label}>{children ?? 'Next'}</span>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden><path d=\"M6 3l5 5-5 5\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" /></svg>\n </PaginationLink>\n )\n}\n\nexport function PaginationEllipsis({ label = 'More pages', className }: { label?: string, className?: string }) {\n return (\n <span aria-hidden className={clsx(css.ellipsis, className)}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><circle cx=\"3\" cy=\"8\" r=\"1.3\" fill=\"currentColor\" /><circle cx=\"8\" cy=\"8\" r=\"1.3\" fill=\"currentColor\" /><circle cx=\"13\" cy=\"8\" r=\"1.3\" fill=\"currentColor\" /></svg>\n <span className={css.srOnly}>{label}</span>\n </span>\n )\n}","/**\n * Ported from shadcn/ui's Native Select (https://ui.shadcn.com/docs/components/native-select, MIT licence, registry item `native-select`, style\n * new-york-v4, fetched 2026-09-22). A styled native `<select>`, deliberately not the same thing as this library's `SelectField` (which opens a\n * menu over the app's `Menu`): this one keeps the platform's own dropdown, its keyboard behavior and its typeahead for free, and is the right\n * control for a short, static option list inside a form. Tailwind utility classes replaced by a CSS Module on the app's own tokens; the source's\n * icon slot (an `IconPlaceholder` over five icon sets) becomes one plain inline SVG (no new dependency); its `dark:` variant utilities are dropped\n * rather than reproduced, because this library's contract is that the alias tokens carry both schemes (no theme selectors in a module - the ingest\n * gate rejects them). The source's `NativeSelectOption`/`NativeSelectOptGroup` only added `bg-[Canvas] text-[CanvasText]`; those wrappers are\n * kept so callers keep the same import shape, but they deliberately add nothing, leaving the popup to the platform's own color-scheme handling.\n * See manifest.yml.\n */\nimport clsx from 'clsx'\nimport type { OptgroupHTMLAttributes, OptionHTMLAttributes, SelectHTMLAttributes } from 'react'\nimport css from './NativeSelect.module.css'\n\nexport interface NativeSelectProps extends Omit<SelectHTMLAttributes<HTMLSelectElement>, 'size'> {\n size?: 'sm' | 'default'\n}\n\n/**\n * Render the platform's own select, styled to match this library's inputs.\n * @param props - normal `<select>` attributes plus a `size` of `sm` or `default`.\n * @returns the element.\n */\nexport function NativeSelect({ size = 'default', className, children, ...rest }: NativeSelectProps) {\n return (\n <div data-size={size} className={css.wrapper}>\n <select className={clsx(css.select, size === 'sm' ? css.small : undefined, className)} {...rest}>{children}</select>\n <svg className={css.icon} viewBox=\"0 0 16 16\" aria-hidden><path d=\"M4 6l4 4 4-4\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" /></svg>\n </div>\n )\n}\n\nexport function NativeSelectOption({ className, children, ...rest }: OptionHTMLAttributes<HTMLOptionElement>) {\n return <option className={className} {...rest}>{children}</option>\n}\n\nexport function NativeSelectOptGroup({ className, children, ...rest }: OptgroupHTMLAttributes<HTMLOptGroupElement>) {\n return <optgroup className={className} {...rest}>{children}</optgroup>\n}","/**\n * Ported from shadcn/ui's Scroll Area (https://ui.shadcn.com/docs/components/scroll-area, MIT licence, registry item `scroll-area`, style\n * new-york-v4, fetched 2026-09-22). Radix's `Root`/`Viewport`/`ScrollAreaScrollbar`/`Thumb`/`Corner` are dropped: the platform's own scroller already\n * does what Radix reimplements in JavaScript, so the viewport keeps `overflow: auto` and the module styles the real scrollbar with the app's\n * `--dsw-alias-scrollbar-*` tokens. `ScrollBar` is therefore not exported - a separate thumb element would be decoration with no behaviour behind it,\n * the same call this library made for `KbdGroup`. `overscroll-behavior: contain` replaces Radix's scroll-chaining guard. See manifest.yml.\n */\nimport clsx from 'clsx'\nimport type { HTMLAttributes } from 'react'\nimport css from './ScrollArea.module.css'\n\nexport type ScrollAreaProps = HTMLAttributes<HTMLDivElement>\n\n/**\n * Render a scroll container that stays inside its own box: its scrollbars are the platform's, styled, and reaching an end does not scroll the page behind it.\n *\n * Give it a definite height, the way the source's own examples do (Radix's Root needs one too, which is why the source's Root takes full div props - and why\n * this port must as well: a scroller whose height a caller cannot set is a scroller that silently grows instead of scrolling).\n * @param props - normal `<div>` attributes; `className` and `style` land on the scroll root, which is the element that needs the height.\n * @returns the element.\n */\nexport function ScrollArea({ children, className, ...rest }: ScrollAreaProps) {\n return (\n <div data-slot=\"scroll-area\" className={clsx(css.root, className)} {...rest}>\n <div data-slot=\"scroll-area-viewport\" tabIndex={0} className={css.viewport}>{children}</div>\n </div>\n )\n}","/**\n * Ported from shadcn/ui's Input OTP (https://ui.shadcn.com/docs/components/input-otp, MIT licence, registry item `input-otp`, style new-york-v4, fetched\n * 2026-09-22). The `input-otp` package is dropped: the source's own `OTPInput` is a real `<input>` plus a context that hands each slot its character,\n * whether it is the active one, and whether to blink a caret, so that is what this port is - one real input covering the row, with the groups, slots and\n * separator as its visible decoration. Typing, backspace, arrow keys and paste are therefore the platform's behaviour, not a reimplementation.\n * lucide-react's MinusIcon is replaced by a plain inline SVG (no new dependency). See manifest.yml.\n */\nimport { createContext, useContext, useState } from 'react'\nimport clsx from 'clsx'\nimport type { ReactNode } from 'react'\nimport css from './InputOTP.module.css'\n\ninterface SlotState { char: string | undefined, hasFakeCaret: boolean, isActive: boolean }\nconst OTPContext = createContext<{ slots: SlotState[] } | null>(null)\n\nexport interface InputOTPProps {\n value?: string\n onChange?: (value: string) => void\n maxLength: number\n disabled?: boolean\n label?: string\n containerClassName?: string\n className?: string\n children?: ReactNode\n}\n\n/**\n * Render a one-time-code input: one real input over a row of slots, so the slots show what the platform is doing rather than replacing it.\n * @param props - the value, a change handler, how many digits there are, and the groups/slots as children.\n * @returns the element.\n */\nexport function InputOTP({ value = '', onChange, maxLength, disabled = false, label, containerClassName, className, children }: InputOTPProps) {\n const [activeIndex, setActiveIndex] = useState(-1)\n const slots: SlotState[] = Array.from({ length: maxLength }, (_, index) => ({\n char: value[index],\n hasFakeCaret: activeIndex === index && value[index] === undefined,\n isActive: activeIndex === index,\n }))\n const syncActive = (element: HTMLInputElement): void => {\n setActiveIndex(Math.min(element.selectionStart ?? value.length, maxLength - 1))\n }\n return (\n <OTPContext.Provider value={{ slots }}>\n <div data-slot=\"input-otp\" data-disabled={disabled} className={clsx(css.root, containerClassName)}>\n <input\n className={clsx(css.input, className)}\n value={value}\n onChange={event => { onChange?.(event.target.value.slice(0, maxLength)) }}\n maxLength={maxLength}\n disabled={disabled}\n inputMode=\"numeric\"\n autoComplete=\"one-time-code\"\n aria-label={label}\n onFocus={event => { syncActive(event.currentTarget) }}\n onSelect={event => { syncActive(event.currentTarget) }}\n onBlur={() => { setActiveIndex(-1) }}\n />\n {children}\n </div>\n </OTPContext.Provider>\n )\n}\n\nexport function InputOTPGroup({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"input-otp-group\" className={clsx(css.group, className)}>{children}</div>\n}\n\nexport function InputOTPSlot({ index, className, invalid }: { index: number, className?: string, invalid?: boolean }) {\n const slot = useContext(OTPContext)?.slots[index]\n return (\n <div data-slot=\"input-otp-slot\" data-active={slot?.isActive} aria-invalid={invalid} className={clsx(css.slot, className)}>\n {slot?.char}\n {slot?.hasFakeCaret === true && <div className={css.caretWrap}><div className={css.caret} /></div>}\n </div>\n )\n}\n\nexport function InputOTPSeparator({ className }: { className?: string }) {\n return (\n <div data-slot=\"input-otp-separator\" role=\"separator\" className={clsx(css.separator, className)}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden><path d=\"M3 8h10\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" /></svg>\n </div>\n )\n}","/**\n * Ported from shadcn/ui's Item (https://ui.shadcn.com/docs/components/item, MIT licence, registry item `item`, style new-york-v4, fetched 2026-09-22). A row of\n * media, content and actions used inside a list. Tailwind utility classes replaced by a CSS Module on the app's own tokens; `cva`'s variants become classes;\n * `asChild`/Slot (a Radix dependency) dropped from `Item`. `ItemSeparator` is built on shadcn's own Separator item in the source; importing that item's file\n * across item boundaries would break self-containment, so it restates the same one-rule divider locally - the precedent set by `ButtonGroupSeparator`. The\n * source's `group-has-[[data-slot=item-description]]/item` rule on the media becomes `:has()`, and `[&+[data-slot=item-content]]:flex-none` becomes a sibling\n * selector. See manifest.yml.\n */\nimport clsx from 'clsx'\nimport type { ReactNode } from 'react'\nimport css from './Item.module.css'\n\nexport type ItemVariant = 'default' | 'outline' | 'muted'\nexport type ItemSize = 'default' | 'sm'\nexport type ItemMediaVariant = 'default' | 'icon' | 'image'\n\nexport interface ItemProps {\n variant?: ItemVariant\n size?: ItemSize\n children?: ReactNode\n className?: string\n}\n\n/**\n * Render one row of a list: media alongside content, with room for actions.\n * @param props - the variant (plain, outlined, or a muted surface), the size, and the row's parts.\n * @returns the element.\n */\nexport function Item({ variant = 'default', size = 'default', children, className }: ItemProps) {\n return (\n <div\n data-slot=\"item\"\n data-variant={variant}\n data-size={size}\n className={clsx(css.item, variant === 'outline' ? css.outline : variant === 'muted' ? css.muted : undefined, size === 'sm' ? css.sizeSmall : css.sizeDefault, className)}\n >\n {children}\n </div>\n )\n}\n\nexport function ItemGroup({ children, className }: { children?: ReactNode, className?: string }) {\n return <div role=\"list\" data-slot=\"item-group\" className={clsx(css.group, className)}>{children}</div>\n}\n\n// A plain divider, not this library's own Separator item: importing a sibling item's file would make this item\n// depend on another item's directory, breaking self-containment (the same class of bug found and fixed in\n// SwitchField, and what the ingest gate now rejects).\nexport function ItemSeparator({ className }: { className?: string }) {\n return <div role=\"none\" data-slot=\"item-separator\" className={clsx(css.separator, className)} />\n}\n\nexport function ItemMedia({ variant = 'default', children, className }: { variant?: ItemMediaVariant, children?: ReactNode, className?: string }) {\n return (\n <div\n data-slot=\"item-media\"\n data-variant={variant}\n className={clsx(css.media, variant === 'icon' ? css.mediaIcon : variant === 'image' ? css.mediaImage : css.mediaDefault, className)}\n >\n {children}\n </div>\n )\n}\n\nexport function ItemContent({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"item-content\" className={clsx(css.content, className)}>{children}</div>\n}\n\nexport function ItemTitle({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"item-title\" className={clsx(css.title, className)}>{children}</div>\n}\n\nexport function ItemDescription({ children, className }: { children?: ReactNode, className?: string }) {\n return <p data-slot=\"item-description\" className={clsx(css.description, className)}>{children}</p>\n}\n\nexport function ItemActions({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"item-actions\" className={clsx(css.actions, className)}>{children}</div>\n}\n\nexport function ItemHeader({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"item-header\" className={clsx(css.header, className)}>{children}</div>\n}\n\nexport function ItemFooter({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"item-footer\" className={clsx(css.footer, className)}>{children}</div>\n}","/**\n * Ported from shadcn/ui's Attachment (https://ui.shadcn.com/docs/components/attachment, MIT licence, registry item `attachment`, style new-york-v4,\n * fetched 2026-09-22). A file chip for a composer: media, title, description, actions, with an idle/uploading/processing/error/done state.\n * Tailwind utility classes replaced by a CSS Module on the app's own tokens; `cva`'s variants become classes; `asChild`/Slot (a Radix dependency) dropped\n * from `AttachmentTrigger`, which is a real `<button type=\"button\">`. `AttachmentAction` is built on shadcn's own Button item in the source; the ghost\n * icon-button look is restated locally instead of importing that item, the same call `ToggleGroupItem` and `PaginationLink` already make.\n * `group-data-[...]` reach-across utilities become descendant selectors keyed off the root's own `data-state`/`data-size`/`data-orientation`, and the\n * source's `shimmer` utility is written out as the gradient-and-clip animation it is. Two substitutions worth naming: the source's `scroll-fade-x` and\n * `scrollbar-none` on `AttachmentGroup` are a mask-image gradient and a hidden scrollbar, which is what those utilities compile to. See manifest.yml.\n */\nimport clsx from 'clsx'\nimport type { ReactNode } from 'react'\nimport css from './Attachment.module.css'\n\nexport type AttachmentState = 'idle' | 'uploading' | 'processing' | 'error' | 'done'\nexport type AttachmentSize = 'default' | 'sm' | 'xs'\nexport type AttachmentOrientation = 'horizontal' | 'vertical'\nexport type AttachmentMediaVariant = 'icon' | 'image'\n\nexport interface AttachmentProps {\n state?: AttachmentState\n size?: AttachmentSize\n orientation?: AttachmentOrientation\n children?: ReactNode\n className?: string\n}\n\n/**\n * Render a file chip. Its `state` drives the dashed idle border, the error tint and the shimmer on the title while it uploads or processes.\n * @param props - the state, size and orientation, and the chip's parts.\n * @returns the element.\n */\nexport function Attachment({ state = 'done', size = 'default', orientation = 'horizontal', children, className }: AttachmentProps) {\n return (\n <div\n data-slot=\"attachment\"\n data-state={state}\n data-size={size}\n data-orientation={orientation}\n className={clsx(css.attachment, orientation === 'vertical' ? css.vertical : css.horizontal, size === 'sm' ? css.sizeSmall : size === 'xs' ? css.sizeXs : css.sizeDefault, className)}\n >\n {children}\n </div>\n )\n}\n\nexport function AttachmentMedia({ variant = 'icon', children, className }: { variant?: AttachmentMediaVariant, children?: ReactNode, className?: string }) {\n return <div data-slot=\"attachment-media\" data-variant={variant} className={clsx(css.media, variant === 'image' ? css.mediaImage : undefined, className)}>{children}</div>\n}\n\nexport function AttachmentContent({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"attachment-content\" className={clsx(css.content, className)}>{children}</div>\n}\n\nexport function AttachmentTitle({ children, className }: { children?: ReactNode, className?: string }) {\n return <span data-slot=\"attachment-title\" className={clsx(css.title, className)}>{children}</span>\n}\n\nexport function AttachmentDescription({ children, className }: { children?: ReactNode, className?: string }) {\n return <span data-slot=\"attachment-description\" className={clsx(css.description, className)}>{children}</span>\n}\n\nexport function AttachmentActions({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"attachment-actions\" className={clsx(css.actions, className)}>{children}</div>\n}\n\n/** One icon action inside the chip's actions slot. `label` becomes the accessible name. */\nexport function AttachmentAction({ label, onClick, children, className }: { label?: string, onClick?: () => void, children?: ReactNode, className?: string }) {\n return (\n <button type=\"button\" data-slot=\"attachment-action\" aria-label={label} className={clsx(css.action, className)} onClick={onClick}>\n {children}\n </button>\n )\n}\n\n/** The whole-chip click target: it covers the attachment, so clicking the card opens the file. */\nexport function AttachmentTrigger({ label, onClick, className }: { label?: string, onClick?: () => void, className?: string }) {\n return <button type=\"button\" data-slot=\"attachment-trigger\" aria-label={label} className={clsx(css.trigger, className)} onClick={onClick} />\n}\n\n/** A horizontal, snapping row of attachments. */\nexport function AttachmentGroup({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"attachment-group\" className={clsx(css.group, className)}>{children}</div>\n}","/**\n * Ported from shadcn/ui's Input Group (https://ui.shadcn.com/docs/components/input-group, MIT licence, registry item `input-group`, style new-york-v4,\n * fetched 2026-09-22). An input or textarea with addons before, after, above or below it, inside one border that carries the focus ring and the error tint.\n *\n * This is the item the T040 note deliberately left unported: shadcn builds it out of its own Input, Textarea and Button items, and importing those files\n * across item boundaries is exactly the self-containment break this registry's ingest gate rejects. The dependency is resolved the same way\n * `ToggleGroupItem`, `PaginationLink` and `AttachmentAction` resolve theirs - the control and the addon button are plain elements styled locally, so the\n * item has no cross-item import and no new dependency. The source's `has-*` variant utilities become `:has()` selectors on the group, `group-data-[...]`\n * reach-across utilities become descendant selectors, and its `dark:` background utilities are dropped because the alias tokens carry both schemes.\n * `InputGroupAddon` keeps the source's click-to-focus behavior, which is what makes a prefix look like part of the field. See manifest.yml.\n */\nimport clsx from 'clsx'\nimport type { InputHTMLAttributes, ReactNode, TextareaHTMLAttributes } from 'react'\nimport css from './InputGroup.module.css'\n\nexport type InputGroupAlign = 'inline-start' | 'inline-end' | 'block-start' | 'block-end'\nexport type InputGroupButtonSize = 'xs' | 'sm' | 'icon-xs' | 'icon-sm'\n\nexport interface InputGroupProps {\n disabled?: boolean\n children?: ReactNode\n className?: string\n}\n\n/**\n * Render one bordered field that groups an input with its addons. The focus ring and the error tint live on this wrapper, so the control inside has none.\n * @param props - `disabled` (which dims the addons), and the control with its addons.\n * @returns the element.\n */\nexport function InputGroup({ disabled = false, children, className }: InputGroupProps) {\n return <div role=\"group\" data-slot=\"input-group\" data-disabled={disabled} className={clsx(css.inputGroup, className)}>{children}</div>\n}\n\nexport interface InputGroupAddonProps {\n align?: InputGroupAlign\n children?: ReactNode\n className?: string\n}\n\n/** A prefix, suffix, or block above/below the control. Clicking it focuses the control beside it. */\nexport function InputGroupAddon({ align = 'inline-start', children, className }: InputGroupAddonProps) {\n const alignClass = align === 'inline-end' ? css.alignEnd : align === 'block-start' ? css.alignBlockStart : align === 'block-end' ? css.alignBlockEnd : css.alignStart\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={clsx(css.addon, alignClass, className)}\n onClick={event => {\n if (event.target instanceof HTMLElement && event.target.closest('button') !== null) return\n const group = event.currentTarget.parentElement\n if (group === null) return\n const control = group.querySelector('input, textarea')\n if (control instanceof HTMLElement) control.focus()\n }}\n >\n {children}\n </div>\n )\n}\n\n/** A small button inside an addon. `label` becomes the accessible name. */\nexport function InputGroupButton({ size = 'xs', label, onClick, children, className }: { size?: InputGroupButtonSize, label?: string, onClick?: () => void, children?: ReactNode, className?: string }) {\n const sizeClass = size === 'sm' ? css.buttonSmall : size === 'icon-sm' ? css.buttonIconLarge : size === 'icon-xs' ? css.buttonIconSmall : undefined\n return (\n <button type=\"button\" data-size={size} aria-label={label} className={clsx(css.button, sizeClass, className)} onClick={onClick}>\n {children}\n </button>\n )\n}\n\n/** Muted text or an icon inside an addon. */\nexport function InputGroupText({ children, className }: { children?: ReactNode, className?: string }) {\n return <span className={clsx(css.text, className)}>{children}</span>\n}\n\n/** The control itself. It carries `data-slot='input-group-control'`, which is what the group's focus and invalid rules key off. */\nexport function InputGroupInput({ className, ...rest }: InputHTMLAttributes<HTMLInputElement>) {\n return <input data-slot=\"input-group-control\" className={clsx(css.control, className)} {...rest} />\n}\n\n/** The multiline control, for a group whose addon sits above or below it. */\nexport function InputGroupTextarea({ className, ...rest }: TextareaHTMLAttributes<HTMLTextAreaElement>) {\n return <textarea data-slot=\"input-group-control\" className={clsx(css.textarea, className)} {...rest} />\n}","/**\n * Ported from shadcn/ui's Field (https://ui.shadcn.com/docs/components/field, MIT licence, registry item `field`, style new-york-v4, fetched 2026-09-22).\n * The layout around one field's parts: set, group, legend, label, title, content, description, separator and error, in vertical, horizontal or\n * container-responsive orientation.\n *\n * Renamed to `FormField` because this library already exports a `Field` - the labelled-input adapter in contract-adapters - and a port that took the same\n * name would collide with it. The sub-part names (FieldSet, FieldGroup, FieldLabel, ...) are unchanged and collide with nothing. Precedent for renaming a\n * port to this library's vocabulary: Badge's variants took this library's own roles, and `markerVariants` was not exported at all.\n *\n * `FieldLabel` is built on shadcn's own Label item and `FieldSeparator` on its own Separator item in the source; importing those files across item\n * boundaries is the self-containment break this registry's gate rejects, so both are plain elements styled locally - the `ToggleGroupItem` /\n * `PaginationLink` / `ItemSeparator` precedent. The source's `data-[variant=...]` and `group-data-[...]` utilities become attribute and descendant\n * selectors, and `@container/field-group` + `@md/field-group:` become a real container query inside the module. Two small API additions are documented\n * rather than hidden: `invalid` and `disabled` set the `data-invalid`/`data-disabled` attributes the source's own styles key off but expect the caller to\n * set. The source's `[&>.sr-only]:w-auto` accommodation for a Tailwind-hidden label has no equivalent here (a consumer cannot reach a hashed module\n * class), so it is not carried over. See manifest.yml.\n */\nimport { useMemo } from 'react'\nimport clsx from 'clsx'\nimport type { ReactNode } from 'react'\nimport css from './FormField.module.css'\n\nexport type FormFieldOrientation = 'vertical' | 'horizontal' | 'responsive'\nexport type FieldLegendVariant = 'legend' | 'label'\n\nexport interface FormFieldProps {\n orientation?: FormFieldOrientation\n invalid?: boolean\n disabled?: boolean\n children?: ReactNode\n className?: string\n}\n\n/**\n * Render one field. `horizontal` puts the label beside the control; `responsive` does that only once its `FieldGroup` is at least 28rem wide.\n * @param props - the orientation, whether the field is invalid (which tints it) or disabled (which dims its label), and the field's parts.\n * @returns the element.\n */\nexport function FormField({ orientation = 'vertical', invalid = false, disabled = false, children, className }: FormFieldProps) {\n return (\n <div\n role=\"group\"\n data-slot=\"field\"\n data-orientation={orientation}\n data-invalid={invalid}\n data-disabled={disabled}\n className={clsx(css.field, orientation === 'horizontal' ? css.horizontal : orientation === 'responsive' ? css.responsive : css.vertical, className)}\n >\n {children}\n </div>\n )\n}\n\n/** A `<fieldset>` grouping related fields. */\nexport function FieldSet({ children, className }: { children?: ReactNode, className?: string }) {\n return <fieldset data-slot=\"field-set\" className={clsx(css.set, className)}>{children}</fieldset>\n}\n\n/** The `<legend>` of a `FieldSet`. */\nexport function FieldLegend({ variant = 'legend', children, className }: { variant?: FieldLegendVariant, children?: ReactNode, className?: string }) {\n return <legend data-slot=\"field-legend\" data-variant={variant} className={clsx(css.legend, className)}>{children}</legend>\n}\n\n/** Groups fields, and is the container `responsive` orientation measures itself against. */\nexport function FieldGroup({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"field-group\" className={clsx(css.group, className)}>{children}</div>\n}\n\nexport function FieldContent({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"field-content\" className={clsx(css.content, className)}>{children}</div>\n}\n\n/** The label for the control, styled locally rather than importing this library's Label item. */\nexport function FieldLabel({ children, className }: { children?: ReactNode, className?: string }) {\n return <label data-slot=\"field-label\" className={clsx(css.label, className)}>{children}</label>\n}\n\n/** A label-shaped heading that is not bound to a control. The source gives this the label's slot attribute too, reproduced here so consumer selectors keyed off it keep working. */\nexport function FieldTitle({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"field-label\" className={clsx(css.title, className)}>{children}</div>\n}\n\nexport function FieldDescription({ children, className }: { children?: ReactNode, className?: string }) {\n return <p data-slot=\"field-description\" className={clsx(css.description, className)}>{children}</p>\n}\n\n/** A rule between field groups, optionally labelled. */\nexport function FieldSeparator({ children, className }: { children?: ReactNode, className?: string }) {\n return (\n <div data-slot=\"field-separator\" data-content={children !== undefined && children !== null} className={clsx(css.separator, className)}>\n {children !== undefined && children !== null && <span data-slot=\"field-separator-content\" className={css.separatorContent}>{children}</span>}\n </div>\n )\n}\n\nexport interface FieldErrorProps {\n errors?: Array<{ message?: string } | undefined>\n children?: ReactNode\n className?: string\n}\n\n/**\n * Render a field's error. With `children` it renders them as given; with `errors` it renders one message, or a list of the distinct ones.\n * @param props - the messages, or the content to render directly.\n * @returns the element, or nothing when there is no error to show.\n */\nexport function FieldError({ errors, children, className }: FieldErrorProps) {\n const content = useMemo(() => {\n if (children !== undefined && children !== null) return children\n if (errors === undefined || errors.length === 0) return null\n const unique = [...new Map(errors.map(error => [error?.message, error])).values()]\n if (unique.length === 1) return unique[0]?.message\n return (\n <ul className={css.errorList}>\n {unique.map((error, index) => error?.message !== undefined && <li key={index}>{error.message}</li>)}\n </ul>\n )\n }, [children, errors])\n\n if (content === null || content === undefined || content === false) return null\n return <div role=\"alert\" data-slot=\"field-error\" className={clsx(css.error, className)}>{content}</div>\n}","/**\n * Ported from shadcn/ui's Popover (https://ui.shadcn.com/docs/components/popover, MIT licence, registry item `popover`, style new-york-v4, fetched\n * 2026-09-22). Radix's Popover primitive is dropped and its behaviour reproduced by hand, because a popover is one piece of state plus three pieces of\n * platform behaviour: the root owns open state (controlled `open`/`onOpenChange`, or `defaultOpen`), the trigger toggles it, and the content is positioned\n * against the trigger's own rect, closing on Escape and on a pointerdown outside, moving focus into the panel when it opens and back to the trigger when it\n * closes. Positioning flips above the trigger when the panel would overflow the viewport bottom, and re-measures on resize and scroll.\n *\n * Restates the anchored-listbox shape written down in docs/pattern-anchored-listbox.md (points 1 to 5, its anchoring half) — a shared pattern each item\n * restates, never an importable module, because a cross-item import is what this registry's ingest gate rejects.\n *\n * `asChild`/Slot are dropped from the trigger and the anchor; `PopoverAnchor` is a wrapper element that registers itself as the position reference, which\n * is what Radix's Anchor does to the child it clones. Three substitutions to name. (1) The source renders through a portal to `document.body`; this port\n * renders the panel where it sits in the tree, because a client bundle in this library may require only react, react/jsx-runtime and the app primitives, and\n * `react-dom`'s `createPortal` is outside that set - the built-bundle test fails the build if anything else is required. Positioning is still computed from\n * the trigger's rect in viewport coordinates, so the panel lands in the same place; the caveat that buys is that an ancestor with `overflow: hidden` or a\n * transform can clip it, which a portal would have avoided. (2) Radix's `--radix-popover-content-transform-origin` and its enter/exit animations have no\n * equivalent here, so this port animates nothing rather than inventing keyframes. (3) The source's `shadow-md` becomes the app's raised surface plus a\n * border, because the token set has no shadow token and this library does not invent literal colour. See manifest.yml.\n */\nimport { createContext, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport type { CSSProperties, MutableRefObject, ReactNode } from 'react'\nimport css from './Popover.module.css'\n\nexport type PopoverAlign = 'start' | 'center' | 'end'\n\ninterface PopoverContextValue {\n isOpen: boolean\n setOpen: (open: boolean) => void\n triggerRef: MutableRefObject<HTMLButtonElement | null>\n anchorRef: MutableRefObject<HTMLElement | null>\n contentRef: MutableRefObject<HTMLDivElement | null>\n}\n\nconst PopoverContext = createContext<PopoverContextValue | null>(null)\n\nexport interface PopoverProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n children?: ReactNode\n}\n\n/** Own the popover's open state for its trigger, anchor and content. */\nexport function Popover({ open, defaultOpen = false, onOpenChange, children }: PopoverProps) {\n const [uncontrolled, setUncontrolled] = useState(defaultOpen)\n const isOpen = open ?? uncontrolled\n const triggerRef = useRef<HTMLButtonElement | null>(null)\n const anchorRef = useRef<HTMLElement | null>(null)\n const contentRef = useRef<HTMLDivElement | null>(null)\n const value = useMemo<PopoverContextValue>(() => ({\n isOpen,\n setOpen: next => { if (open === undefined) setUncontrolled(next); onOpenChange?.(next) },\n triggerRef,\n anchorRef,\n contentRef,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }), [isOpen, open, onOpenChange])\n return <PopoverContext.Provider value={value}>{children}</PopoverContext.Provider>\n}\n\n/** The button that opens the popover. `label` becomes its accessible name when the visible text cannot be one. */\nexport function PopoverTrigger({ label, children, className }: { label?: string, children?: ReactNode, className?: string }) {\n const context = useContext(PopoverContext)\n return (\n <button\n type=\"button\"\n ref={element => { if (context !== null) context.triggerRef.current = element }}\n data-slot=\"popover-trigger\"\n aria-haspopup=\"dialog\"\n aria-expanded={context?.isOpen ?? false}\n aria-label={label}\n className={clsx(css.trigger, className)}\n onClick={() => { context?.setOpen(!(context.isOpen)) }}\n >\n {children}\n </button>\n )\n}\n\n/** Position the panel against this element instead of the trigger. */\nexport function PopoverAnchor({ children, className }: { children?: ReactNode, className?: string }) {\n const context = useContext(PopoverContext)\n return <span ref={element => { if (context !== null) context.anchorRef.current = element }} data-slot=\"popover-anchor\" className={clsx(css.anchor, className)}>{children}</span>\n}\n\nexport interface PopoverContentProps {\n align?: PopoverAlign\n sideOffset?: number\n label?: string\n children?: ReactNode\n className?: string\n}\n\n/**\n * The popover panel. It renders nothing until the popover is open.\n * @param props - the alignment, the gap from the trigger, the dialog's accessible name, and the panel's content.\n * @returns the element, in a portal on `document.body`.\n */\nexport function PopoverContent({ align = 'center', sideOffset = 4, label, children, className }: PopoverContentProps) {\n const context = useContext(PopoverContext)\n const isOpen = context?.isOpen ?? false\n const [style, setStyle] = useState<CSSProperties>({ visibility: 'hidden' })\n const [positioned, setPositioned] = useState(false)\n\n useLayoutEffect(() => {\n if (!isOpen) { setPositioned(false); return }\n const measure = (): void => {\n const reference = context?.anchorRef.current ?? context?.triggerRef.current\n const panel = context?.contentRef.current\n if (reference === null || reference === undefined || panel === null || panel === undefined) return\n const rect = reference.getBoundingClientRect()\n const width = panel.offsetWidth\n const height = panel.offsetHeight\n const ideal = align === 'start' ? rect.left : align === 'end' ? rect.right - width : rect.left + rect.width / 2 - width / 2\n const left = Math.min(Math.max(ideal, 8), Math.max(8, window.innerWidth - width - 8))\n const below = rect.bottom + sideOffset\n const top = below + height > window.innerHeight - 8 ? Math.max(8, rect.top - sideOffset - height) : below\n setStyle({ left, top })\n setPositioned(true)\n }\n measure()\n window.addEventListener('resize', measure)\n window.addEventListener('scroll', measure, true)\n return () => { window.removeEventListener('resize', measure); window.removeEventListener('scroll', measure, true) }\n }, [isOpen, align, sideOffset, context])\n\n // Focus once the panel is actually visible. The first measure lands through a state update, so focusing beside it (or\n // from the passive effect below) runs while the element is still `visibility: hidden` and is silently a no-op on a\n // hidden element - that is why focus used to stay on the trigger. Keyed on `positioned`, this runs after the commit\n // that applies the position.\n useEffect(() => {\n if (!isOpen || !positioned) return\n context?.contentRef.current?.focus()\n }, [isOpen, positioned, context])\n\n useEffect(() => {\n if (!isOpen || context === null) return\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.key !== 'Escape') return\n context.setOpen(false)\n context.triggerRef.current?.focus()\n }\n const onPointerDown = (event: PointerEvent): void => {\n const target = event.target as Node | null\n if (target === null) return\n if (context.contentRef.current?.contains(target) === true) return\n if (context.triggerRef.current?.contains(target) === true) return\n context.setOpen(false)\n }\n document.addEventListener('keydown', onKeyDown)\n document.addEventListener('pointerdown', onPointerDown)\n return () => { document.removeEventListener('keydown', onKeyDown); document.removeEventListener('pointerdown', onPointerDown) }\n }, [isOpen, context])\n\n if (!isOpen) return null\n return (\n <div\n ref={element => { if (context !== null) context.contentRef.current = element }}\n role=\"dialog\"\n aria-label={label}\n data-slot=\"popover-content\"\n data-align={align}\n tabIndex={-1}\n className={clsx(css.content, className)}\n style={style}\n >\n {children}\n </div>\n )\n}\n\nexport function PopoverHeader({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"popover-header\" className={clsx(css.header, className)}>{children}</div>\n}\n\nexport function PopoverTitle({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"popover-title\" className={clsx(css.title, className)}>{children}</div>\n}\n\nexport function PopoverDescription({ children, className }: { children?: ReactNode, className?: string }) {\n return <p data-slot=\"popover-description\" className={clsx(css.description, className)}>{children}</p>\n}","/**\n * Ported from shadcn/ui's Slider (https://ui.shadcn.com/docs/components/slider, MIT licence, registry item `slider`, style new-york-v4, fetched 2026-09-22).\n * Radix's Slider is dropped and the behaviour is written here, because a slider is arithmetic plus two input paths: each thumb is a `role=\"slider\"` element\n * with `aria-valuemin`/`max`/`now`/`orientation`, moved by arrow keys (one `step`), PageUp/PageDown (ten), Home/End (the ends), and by dragging - a pointer\n * captured on the thumb, with the value computed from the track's own rect and clamped against its neighbour so the thumbs cannot cross. A press on the\n * track moves the nearest thumb, which is what Radix does.\n *\n * The one-value-per-thumb shape is kept: `value`/`defaultValue` take a number or an array, and the range fill spans from the lowest value to the highest.\n * The source's `bg-white` thumb face becomes the app's `--dsw-alias-bg-layer-1` surface, since a literal white would not follow the scheme; the source's\n * `ring-ring/50` hover and focus rings become the app's interactive surface. See manifest.yml.\n */\nimport { useCallback, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport type { CSSProperties, PointerEvent as ReactPointerEvent } from 'react'\nimport css from './Slider.module.css'\n\nexport type SliderOrientation = 'horizontal' | 'vertical'\n\nexport interface SliderProps {\n value?: number | number[]\n defaultValue?: number | number[]\n min?: number\n max?: number\n step?: number\n disabled?: boolean\n orientation?: SliderOrientation\n label?: string\n onValueChange?: (value: number[]) => void\n className?: string\n}\n\nconst toArray = (input: number | number[] | undefined, fallback: number[]): number[] =>\n Array.isArray(input) ? input : input === undefined ? fallback : [input]\n\nconst clamp = (value: number, low: number, high: number): number => Math.min(Math.max(value, low), high)\n\n/**\n * Render a slider: one thumb per value, draggable and operable from the keyboard.\n * @param props - the value(s) (controlled or with a default), the range, the step, the orientation, and a label for the thumbs.\n * @returns the element.\n */\nexport function Slider({ value, defaultValue, min = 0, max = 100, step = 1, disabled = false, orientation = 'horizontal', label, onValueChange, className }: SliderProps) {\n const [uncontrolled, setUncontrolled] = useState<number[]>(() => toArray(defaultValue, [min, max]))\n const values = toArray(value, uncontrolled)\n const trackRef = useRef<HTMLDivElement | null>(null)\n const setValues = useCallback((next: number[]): void => {\n if (value === undefined) setUncontrolled(next)\n onValueChange?.(next)\n }, [value, onValueChange])\n\n const commit = (index: number, raw: number): void => {\n const lower = index === 0 ? min : values[index - 1] ?? min\n const upper = index === values.length - 1 ? max : values[index + 1] ?? max\n const snapped = clamp(Math.round((raw - min) / step) * step + min, min, max)\n setValues(values.map((current, at) => at === index ? clamp(snapped, lower, upper) : current))\n }\n\n const valueFromPointer = (event: ReactPointerEvent, element: HTMLElement): number => {\n const rect = element.getBoundingClientRect()\n const ratio = orientation === 'vertical'\n ? 1 - (event.clientY - rect.top) / rect.height\n : (event.clientX - rect.left) / rect.width\n return min + clamp(ratio, 0, 1) * (max - min)\n }\n\n const percent = (input: number): number => max === min ? 0 : ((input - min) / (max - min)) * 100\n const lowest = Math.min(...values)\n const highest = Math.max(...values)\n const rangeStyle: CSSProperties = orientation === 'vertical'\n ? { bottom: `${percent(lowest)}%`, height: `${percent(highest) - percent(lowest)}%` }\n : { left: `${percent(lowest)}%`, width: `${percent(highest) - percent(lowest)}%` }\n\n return (\n <div\n data-slot=\"slider\"\n data-orientation={orientation}\n data-disabled={disabled}\n className={clsx(css.slider, className)}\n >\n <div\n ref={trackRef}\n data-slot=\"slider-track\"\n className={css.track}\n onPointerDown={event => {\n if (disabled) return\n const track = trackRef.current\n if (track === null) return\n const target = valueFromPointer(event, track)\n let nearest = 0\n for (let index = 1; index < values.length; index += 1) {\n if (Math.abs((values[index] ?? 0) - target) < Math.abs((values[nearest] ?? 0) - target)) nearest = index\n }\n commit(nearest, target)\n }}\n >\n <div data-slot=\"slider-range\" className={css.range} style={rangeStyle} />\n </div>\n {values.map((current, index) => (\n <div\n key={index}\n data-slot=\"slider-thumb\"\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-label={label}\n aria-orientation={orientation}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={current}\n aria-disabled={disabled}\n className={css.thumb}\n style={orientation === 'vertical' ? { bottom: `${percent(current)}%` } : { left: `${percent(current)}%` }}\n onKeyDown={event => {\n if (disabled) return\n const big = step * 10\n const moves: Record<string, number | undefined> = {\n ArrowRight: step, ArrowUp: step, ArrowLeft: -step, ArrowDown: -step,\n PageUp: big, PageDown: -big, Home: min - (current ?? 0), End: max - (current ?? 0),\n }\n const delta = moves[event.key]\n if (delta === undefined) return\n event.preventDefault()\n commit(index, current + delta)\n }}\n onPointerDown={event => {\n if (disabled) return\n event.currentTarget.setPointerCapture(event.pointerId)\n }}\n onPointerMove={event => {\n if (disabled || !event.currentTarget.hasPointerCapture(event.pointerId)) return\n const track = trackRef.current\n if (track === null) return\n commit(index, valueFromPointer(event, track))\n }}\n onPointerUp={event => { event.currentTarget.releasePointerCapture(event.pointerId) }}\n />\n ))}\n </div>\n )\n}","/**\n * Ported from shadcn/ui's Sheet (https://ui.shadcn.com/docs/components/sheet, MIT licence, registry item `sheet`, style new-york-v4, fetched\n * 2026-09-22). A panel that slides in from an edge: the root owns open state, the trigger toggles it, the overlay and the panel are\n * positioned from the side, and Escape, an overlay press or the close button dismisses it.\n *\n * Radix's Dialog primitive is dropped and its behaviour written by hand, the same way this library's Popover replaces Radix's: open state in the\n * root (controlled or defaultOpen), focus onto the panel as it opens and back to the trigger on close, and Tab wrapping inside the panel so a\n * modal sheet cannot be tabbed out of. TWO THINGS ARE NOT CARRIED OVER, stated rather than hidden. (1) There is no portal: a client bundle here\n * may require only react, react/jsx-runtime and the app primitives, and react-dom's createPortal is outside that set (the built-bundle test fails\n * the build otherwise), so `SheetPortal` does not exist and the panel renders where it sits in the tree - it lands in the same place because it is\n * position: fixed, but an ancestor with `overflow: hidden` or a transform can clip it. (2) The page behind is not made inert, so assistive tech can\n * still reach it while the sheet is open; Radix marks the rest aria-hidden. Closing that needs either the app's Modal - which is centred by design,\n * with its panel styling in DSH CSS, so it cannot become a side sheet - or an inert-based pass over the app root, which is a product decision, not a\n * port decision. lucide-react's XIcon is replaced by a plain inline SVG. See manifest.yml.\n */\nimport { createContext, useContext, useEffect, useMemo, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport type { MutableRefObject, ReactNode } from 'react'\nimport css from './Sheet.module.css'\n\nexport type SheetSide = 'top' | 'right' | 'bottom' | 'left'\n\ninterface SheetContextValue {\n isOpen: boolean\n setOpen: (open: boolean) => void\n triggerRef: MutableRefObject<HTMLButtonElement | null>\n contentRef: MutableRefObject<HTMLDivElement | null>\n}\n\nconst SheetContext = createContext<SheetContextValue | null>(null)\n\nexport interface SheetProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n children?: ReactNode\n}\n\n/** Own the sheet's open state for its trigger and panel. */\nexport function Sheet({ open, defaultOpen = false, onOpenChange, children }: SheetProps) {\n const [uncontrolled, setUncontrolled] = useState(defaultOpen)\n const isOpen = open ?? uncontrolled\n const triggerRef = useRef<HTMLButtonElement | null>(null)\n const contentRef = useRef<HTMLDivElement | null>(null)\n const value = useMemo<SheetContextValue>(() => ({\n isOpen,\n setOpen: next => { if (open === undefined) setUncontrolled(next); onOpenChange?.(next) },\n triggerRef,\n contentRef,\n }), [isOpen, open, onOpenChange])\n return <SheetContext.Provider value={value}>{children}</SheetContext.Provider>\n}\n\n/** The button that opens the sheet. */\nexport function SheetTrigger({ label, children, className }: { label?: string, children?: ReactNode, className?: string }) {\n const context = useContext(SheetContext)\n return (\n <button\n type=\"button\"\n ref={element => { if (context !== null) context.triggerRef.current = element }}\n data-slot=\"sheet-trigger\"\n aria-haspopup=\"dialog\"\n aria-expanded={context?.isOpen ?? false}\n aria-label={label}\n className={className}\n onClick={() => { context?.setOpen(!(context.isOpen)) }}\n >\n {children}\n </button>\n )\n}\n\n/** A button inside the sheet that dismisses it. */\nexport function SheetClose({ label, children, className }: { label?: string, children?: ReactNode, className?: string }) {\n const context = useContext(SheetContext)\n return (\n <button type=\"button\" data-slot=\"sheet-close\" aria-label={label} className={className} onClick={() => { context?.setOpen(false) }}>\n {children}\n </button>\n )\n}\n\nexport interface SheetContentProps {\n side?: SheetSide\n showCloseButton?: boolean\n label?: string\n children?: ReactNode\n className?: string\n}\n\n/** The sheet's overlay. It renders nothing while the sheet is closed. */\nexport function SheetOverlay({ className }: { className?: string }) {\n const context = useContext(SheetContext)\n if (context?.isOpen !== true) return null\n return <div data-slot=\"sheet-overlay\" className={clsx(css.overlay, className)} onClick={() => { context.setOpen(false) }} />\n}\n\n/**\n * The sliding panel, with its overlay. Renders nothing until the sheet is open.\n * @param props - which edge it slides from, whether to show the close button, the dialog's accessible name, and the content.\n * @returns the element.\n */\nexport function SheetContent({ side = 'right', showCloseButton = true, label, children, className }: SheetContentProps) {\n const context = useContext(SheetContext)\n const isOpen = context?.isOpen ?? false\n\n // Focus lands once the panel is in the DOM; the panel is CSS-positioned, so unlike Popover there is no measure for it to wait on.\n useEffect(() => {\n if (!isOpen || context === null) return\n context.contentRef.current?.focus()\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.key === 'Escape') {\n context.setOpen(false)\n context.triggerRef.current?.focus()\n return\n }\n if (event.key !== 'Tab') return\n const panel = context.contentRef.current\n if (panel === null) return\n const focusable = [...panel.querySelectorAll<HTMLElement>('a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])')]\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n if (first === undefined || last === undefined) return\n if (event.shiftKey && document.activeElement === first) { event.preventDefault(); last.focus(); return }\n if (!event.shiftKey && document.activeElement === last) { event.preventDefault(); first.focus() }\n }\n document.addEventListener('keydown', onKeyDown)\n return () => { document.removeEventListener('keydown', onKeyDown) }\n }, [isOpen, context])\n\n if (!isOpen) return null\n return (\n <>\n <SheetOverlay />\n <div\n ref={element => { if (context !== null) context.contentRef.current = element }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={label}\n data-slot=\"sheet-content\"\n data-side={side}\n tabIndex={-1}\n className={clsx(css.content, css[side], className)}\n >\n {children}\n {showCloseButton && (\n <button type=\"button\" data-slot=\"sheet-close\" aria-label=\"Close\" className={css.close} onClick={() => { context?.setOpen(false) }}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden><path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" /></svg>\n <span className={css.srOnly}>Close</span>\n </button>\n )}\n </div>\n </>\n )\n}\n\nexport function SheetHeader({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"sheet-header\" className={clsx(css.header, className)}>{children}</div>\n}\n\nexport function SheetFooter({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"sheet-footer\" className={clsx(css.footer, className)}>{children}</div>\n}\n\nexport function SheetTitle({ children, className }: { children?: ReactNode, className?: string }) {\n return <h3 data-slot=\"sheet-title\" className={clsx(css.title, className)}>{children}</h3>\n}\n\nexport function SheetDescription({ children, className }: { children?: ReactNode, className?: string }) {\n return <p data-slot=\"sheet-description\" className={clsx(css.description, className)}>{children}</p>\n}","/**\n * Ported from shadcn/ui's Drawer (https://ui.shadcn.com/docs/components/drawer, MIT licence, registry item `drawer`, style new-york-v4, fetched\n * 2026-09-22). A sheet you can flick away: a drawer from any edge, with a drag handle on the horizontal edges and drag-to-dismiss on the panel.\n *\n * vaul is dropped and its behaviour written by hand, reusing the overlay pattern this library's Sheet port established (open state in the root, overlay\n * and panel positioned from the direction, Escape or an overlay press to dismiss, focus onto the panel and back to the trigger, Tab wrapped inside).\n * The drag is arithmetic on the panel's own rect: a press on the panel - not on a control inside it - captures the pointer, movement is projected onto\n * the axis with the sign taken from the direction, releasing past a quarter of the panel's extent dismisses it and anything shorter springs back\n * through the module's transition. TWO THINGS ARE NOT CARRIED OVER. (1) There is no portal, for the same reason Sheet has none: a client bundle here\n * may require only react, react/jsx-runtime and the app primitives, and react-dom's createPortal is outside that set, so `DrawerPortal` does not exist\n * and the panel renders in place - it lands identically because it is position: fixed, but an ancestor with overflow: hidden or a transform can clip it.\n * (2) vaul also has velocity-based dismissal, background scaling and a snap-point system; this port implements distance only, so a fast short flick\n * will spring back rather than dismiss. Both are recorded in manifest.yml rather than left to be discovered.\n */\nimport { createContext, useContext, useEffect, useMemo, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport type { CSSProperties, MutableRefObject, PointerEvent as ReactPointerEvent, ReactNode } from 'react'\nimport css from './Drawer.module.css'\n\nexport type DrawerDirection = 'top' | 'right' | 'bottom' | 'left'\n\ninterface DrawerContextValue {\n isOpen: boolean\n setOpen: (open: boolean) => void\n direction: DrawerDirection\n triggerRef: MutableRefObject<HTMLButtonElement | null>\n contentRef: MutableRefObject<HTMLDivElement | null>\n}\n\nconst DrawerContext = createContext<DrawerContextValue | null>(null)\n\nexport interface DrawerProps {\n open?: boolean\n defaultOpen?: boolean\n direction?: DrawerDirection\n onOpenChange?: (open: boolean) => void\n children?: ReactNode\n}\n\n/** Own the drawer's open state and direction for its trigger, overlay and panel. */\nexport function Drawer({ open, defaultOpen = false, direction = 'bottom', onOpenChange, children }: DrawerProps) {\n const [uncontrolled, setUncontrolled] = useState(defaultOpen)\n const isOpen = open ?? uncontrolled\n const triggerRef = useRef<HTMLButtonElement | null>(null)\n const contentRef = useRef<HTMLDivElement | null>(null)\n const value = useMemo<DrawerContextValue>(() => ({\n isOpen,\n direction,\n setOpen: next => { if (open === undefined) setUncontrolled(next); onOpenChange?.(next) },\n triggerRef,\n contentRef,\n }), [isOpen, direction, open, onOpenChange])\n return <DrawerContext.Provider value={value}>{children}</DrawerContext.Provider>\n}\n\nexport function DrawerTrigger({ label, children, className }: { label?: string, children?: ReactNode, className?: string }) {\n const context = useContext(DrawerContext)\n return (\n <button\n type=\"button\"\n ref={element => { if (context !== null) context.triggerRef.current = element }}\n data-slot=\"drawer-trigger\"\n aria-haspopup=\"dialog\"\n aria-expanded={context?.isOpen ?? false}\n aria-label={label}\n className={className}\n onClick={() => { context?.setOpen(!(context.isOpen)) }}\n >\n {children}\n </button>\n )\n}\n\nexport function DrawerClose({ label, children, className }: { label?: string, children?: ReactNode, className?: string }) {\n const context = useContext(DrawerContext)\n return <button type=\"button\" data-slot=\"drawer-close\" aria-label={label} className={className} onClick={() => { context?.setOpen(false) }}>{children}</button>\n}\n\n/** The drawer's overlay. Renders nothing while the drawer is closed. */\nexport function DrawerOverlay({ className }: { className?: string }) {\n const context = useContext(DrawerContext)\n if (context?.isOpen !== true) return null\n return <div data-slot=\"drawer-overlay\" className={clsx(css.overlay, className)} onClick={() => { context.setOpen(false) }} />\n}\n\nexport interface DrawerContentProps {\n showHandle?: boolean\n label?: string\n children?: ReactNode\n className?: string\n}\n\n/**\n * The draggable panel, with its overlay. Renders nothing until the drawer is open.\n * @param props - whether to show the drag handle, the dialog's accessible name, and the content.\n * @returns the element.\n */\nexport function DrawerContent({ showHandle = true, label, children, className }: DrawerContentProps) {\n const context = useContext(DrawerContext)\n const isOpen = context?.isOpen ?? false\n const direction = context?.direction ?? 'bottom'\n const [offset, setOffset] = useState(0)\n const [dragging, setDragging] = useState(false)\n const dragRef = useRef<{ startX: number, startY: number, extent: number } | null>(null)\n\n useEffect(() => {\n if (!isOpen || context === null) return\n setOffset(0)\n context.contentRef.current?.focus()\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.key === 'Escape') {\n context.setOpen(false)\n context.triggerRef.current?.focus()\n return\n }\n if (event.key !== 'Tab') return\n const panel = context.contentRef.current\n if (panel === null) return\n const focusable = [...panel.querySelectorAll<HTMLElement>('a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])')]\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n if (first === undefined || last === undefined) return\n if (event.shiftKey && document.activeElement === first) { event.preventDefault(); last.focus(); return }\n if (!event.shiftKey && document.activeElement === last) { event.preventDefault(); first.focus() }\n }\n document.addEventListener('keydown', onKeyDown)\n return () => { document.removeEventListener('keydown', onKeyDown) }\n }, [isOpen, context])\n\n if (!isOpen) return null\n\n const axis = direction === 'bottom' || direction === 'top' ? 'y' : 'x'\n // How far the panel has been pulled in the direction that would dismiss it, clamped at rest.\n const dismissalSign = direction === 'bottom' || direction === 'right' ? 1 : -1\n const transform = axis === 'y'\n ? { transform: `translateY(${dismissalSign * offset}px)` }\n : { transform: `translateX(${dismissalSign * offset}px)` }\n const panelStyle: CSSProperties = dragging ? { ...transform, transition: 'none' } : transform\n\n const onPointerDown = (event: ReactPointerEvent<HTMLDivElement>): void => {\n const target = event.target as HTMLElement\n // A press that starts on a control belongs to the control, not to the drag.\n if (target.closest('button, a, input, textarea, select') !== null) return\n const panel = context?.contentRef.current\n if (panel === null || panel === undefined) return\n const rect = panel.getBoundingClientRect()\n dragRef.current = { startX: event.clientX, startY: event.clientY, extent: axis === 'y' ? rect.height : rect.width }\n setDragging(true)\n event.currentTarget.setPointerCapture(event.pointerId)\n }\n const onPointerMove = (event: ReactPointerEvent<HTMLDivElement>): void => {\n const drag = dragRef.current\n if (drag === null) return\n const delta = axis === 'y' ? event.clientY - drag.startY : event.clientX - drag.startX\n setOffset(Math.max(0, dismissalSign * delta))\n }\n const onPointerUp = (event: ReactPointerEvent<HTMLDivElement>): void => {\n const drag = dragRef.current\n dragRef.current = null\n setDragging(false)\n if (drag === null) return\n if (event.currentTarget.hasPointerCapture(event.pointerId)) event.currentTarget.releasePointerCapture(event.pointerId)\n if (offset > drag.extent / 4) { context?.setOpen(false); setOffset(0); return }\n setOffset(0)\n }\n\n return (\n <>\n <DrawerOverlay />\n <div\n ref={element => { if (context !== null) context.contentRef.current = element }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={label}\n data-slot=\"drawer-content\"\n data-direction={direction}\n data-dragging={dragging}\n data-shows-handle={showHandle && (direction === 'bottom' || direction === 'top')}\n tabIndex={-1}\n className={clsx(css.content, css[direction], className)}\n style={panelStyle}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n onPointerCancel={onPointerUp}\n >\n <div data-slot=\"drawer-handle\" className={css.handle} />\n {children}\n </div>\n </>\n )\n}\n\nexport function DrawerHeader({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"drawer-header\" className={clsx(css.header, className)}>{children}</div>\n}\n\nexport function DrawerFooter({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"drawer-footer\" className={clsx(css.footer, className)}>{children}</div>\n}\n\nexport function DrawerTitle({ children, className }: { children?: ReactNode, className?: string }) {\n return <h3 data-slot=\"drawer-title\" className={clsx(css.title, className)}>{children}</h3>\n}\n\nexport function DrawerDescription({ children, className }: { children?: ReactNode, className?: string }) {\n return <p data-slot=\"drawer-description\" className={clsx(css.description, className)}>{children}</p>\n}","/**\n * Ported from shadcn/ui's Command (https://ui.shadcn.com/docs/components/command, MIT licence, registry item `command`, style new-york-v4, fetched\n * 2026-09-22). The searchable command menu: an input, a filtered list, groups with headings, an empty state and keyboard selection.\n *\n * Restates the anchored-listbox shape written down in docs/pattern-anchored-listbox.md (points 6, 7 and 8) — a shared pattern each item restates,\n * never an importable module, because a cross-item import is what this registry's ingest gate rejects.\n *\n * cmdk is dropped and its behaviour written by hand. The root owns the query and a registry of the items mounted under it (each item's filter text,\n * its disabled flag and its select handler); matching is a case-insensitive substring, falling back to \"every word of the query is present\", which is a\n * substitution for cmdk's fuzzy scorer and is recorded in manifest.yml. Items apply their own visibility from the query, so a filtered-out item is\n * display-none rather than merely faded, and the keyboard walks the surviving items in DOM order - read from the DOM at key time rather than tracked in\n * state, because React registers children bottom-up and would otherwise reverse the order. Arrow keys, Home/End and Enter move and choose; the chosen\n * item scrolls into view with `block: nearest`, as cmdk does.\n *\n * `CommandDialog` is NOT ported: it composes shadcn's own Dialog item, and importing a sibling item's file is the cross-item dependency this registry's\n * ingest gate rejects. A consumer composes this Command inside this library's Dialog (which is itself the app's Modal). lucide-react's SearchIcon became\n * a plain inline SVG, and cmdk's own `[cmdk-*]` attribute selectors became the data-slot hooks this item already publishes. See manifest.yml.\n */\nimport { createContext, useCallback, useContext, useEffect, useId, useMemo, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport type { InputHTMLAttributes, MutableRefObject, ReactNode } from 'react'\nimport css from './Command.module.css'\n\n/** Case-insensitive substring, else every word of the query present. A substitution for cmdk's fuzzy scorer. */\nfunction matches(text: string, query: string): boolean {\n const needle = query.trim().toLowerCase()\n if (needle === '') return true\n const haystack = text.toLowerCase()\n if (haystack.includes(needle)) return true\n return needle.split(/\\s+/u).every(word => haystack.includes(word))\n}\n\ninterface ItemRecord { text: string, disabled: boolean }\n\ninterface CommandContextValue {\n query: string\n setQuery: (query: string) => void\n register: (id: string, record: ItemRecord, onSelect: () => void) => void\n unregister: (id: string) => void\n isVisible: (id: string) => boolean\n visibleCount: number\n registeredCount: number\n activeId: string | null\n setActiveId: (id: string | null) => void\n choose: (id: string) => void\n listId: string\n rootRef: MutableRefObject<HTMLDivElement | null>\n}\n\nconst CommandContext = createContext<CommandContextValue | null>(null)\n\nexport interface CommandProps {\n label?: string\n query?: string\n onQueryChange?: (query: string) => void\n children?: ReactNode\n className?: string\n}\n\n/** Own the query and the item registry for everything inside the command menu. */\nexport function Command({ label, query: controlledQuery, onQueryChange, children, className }: CommandProps) {\n const [uncontrolledQuery, setUncontrolledQuery] = useState('')\n const query = controlledQuery ?? uncontrolledQuery\n const [items, setItems] = useState<Record<string, ItemRecord>>({})\n const [activeId, setActiveId] = useState<string | null>(null)\n const handlers = useRef(new Map<string, () => void>())\n const rootRef = useRef<HTMLDivElement | null>(null)\n const listId = useId()\n\n const setQuery = useCallback((next: string) => {\n if (controlledQuery === undefined) setUncontrolledQuery(next)\n onQueryChange?.(next)\n }, [controlledQuery, onQueryChange])\n\n const register = useCallback((id: string, record: ItemRecord, onSelect: () => void) => {\n handlers.current.set(id, onSelect)\n setItems(current => current[id]?.text === record.text && current[id]?.disabled === record.disabled ? current : { ...current, [id]: record })\n }, [])\n const unregister = useCallback((id: string) => {\n handlers.current.delete(id)\n setItems(current => { if (current[id] === undefined) return current; const next = { ...current }; delete next[id]; return next })\n }, [])\n\n // An item is visible unless the registry has seen it and it does not match. Registration happens in an effect, so\n // \"unknown\" has to mean visible: otherwise every row would be hidden on the first paint, and a server render (no\n // effects at all) would show an empty menu.\n const isVisible = useCallback((id: string) => {\n const record = items[id]\n if (record === undefined) return true\n return matches(record.text, query)\n }, [items, query])\n const registeredCount = Object.keys(items).length\n const visibleCount = Object.values(items).filter(record => matches(record.text, query)).length\n\n // Keep exactly one active item while anything is visible: the current one if it survived the query, otherwise the first.\n useEffect(() => {\n const ids = Object.keys(items).filter(id => matches(items[id]?.text ?? '', query))\n setActiveId(current => current !== null && ids.includes(current) ? current : ids[0] ?? null)\n }, [items, query])\n\n useEffect(() => {\n if (activeId === null) return\n document.getElementById(activeId)?.scrollIntoView({ block: 'nearest' })\n }, [activeId])\n\n const choose = useCallback((id: string) => { handlers.current.get(id)?.() }, [])\n\n const value = useMemo<CommandContextValue>(() => ({\n query, setQuery, register, unregister, isVisible, visibleCount, registeredCount, activeId, setActiveId, choose, listId, rootRef,\n }), [query, setQuery, register, unregister, isVisible, visibleCount, registeredCount, activeId, choose, listId])\n\n return (\n <CommandContext.Provider value={value}>\n <div\n ref={rootRef}\n data-slot=\"command\"\n role=\"combobox\"\n aria-label={label}\n aria-expanded=\"true\"\n aria-controls={listId}\n className={clsx(css.command, className)}\n >\n {children}\n </div>\n </CommandContext.Provider>\n )\n}\n\nexport type CommandInputProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange'>\n\n/** The search box. Arrow keys, Home/End and Enter drive the list without leaving it. */\nexport function CommandInput({ className, onKeyDown, ...rest }: CommandInputProps) {\n const context = useContext(CommandContext)\n const move = (delta: number): void => {\n const ids = walkableIdsFrom(context)\n if (ids.length === 0) return\n const at = context?.activeId === null || context?.activeId === undefined ? -1 : ids.indexOf(context.activeId)\n const next = at === -1 ? (delta > 0 ? 0 : ids.length - 1) : (at + delta + ids.length) % ids.length\n context?.setActiveId(ids[next] ?? null)\n }\n return (\n <div data-slot=\"command-input-wrapper\" className={css.wrapper}>\n <svg className={css.search} viewBox=\"0 0 16 16\" aria-hidden><circle cx=\"7\" cy=\"7\" r=\"4.2\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" /><path d=\"M10.2 10.2L14 14\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" /></svg>\n <input\n data-slot=\"command-input\"\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-controls={context?.listId}\n aria-activedescendant={context?.activeId ?? undefined}\n aria-autocomplete=\"list\"\n autoComplete=\"off\"\n className={clsx(css.input, className)}\n value={context?.query ?? ''}\n onChange={event => { context?.setQuery(event.target.value) }}\n onKeyDown={event => {\n onKeyDown?.(event)\n if (event.defaultPrevented) return\n const active = context?.activeId ?? null\n if (event.key === 'ArrowDown') { event.preventDefault(); move(1); return }\n if (event.key === 'ArrowUp') { event.preventDefault(); move(-1); return }\n if (event.key === 'Home') { event.preventDefault(); context?.setActiveId(walkableIdsFrom(context)[0] ?? null); return }\n if (event.key === 'End') {\n event.preventDefault()\n const ids = walkableIdsFrom(context)\n context?.setActiveId(ids[ids.length - 1] ?? null)\n return\n }\n if (event.key === 'Enter' && active !== null) { event.preventDefault(); context?.choose(active) }\n }}\n {...rest}\n />\n </div>\n )\n}\n\n/** DOM order of the walkable items, read at key time so it cannot drift from what is on screen. */\nfunction walkableIdsFrom(context: CommandContextValue | null): string[] {\n const root = context?.rootRef.current\n if (root === null || root === undefined) return []\n return [...root.querySelectorAll<HTMLElement>('[data-slot=\"command-item\"]')]\n .filter(node => node.getAttribute('data-hidden') !== 'true' && node.getAttribute('data-disabled') !== 'true')\n .map(node => node.id)\n .filter(id => id !== '')\n}\n\nexport function CommandList({ children, className }: { children?: ReactNode, className?: string }) {\n const context = useContext(CommandContext)\n return <div data-slot=\"command-list\" role=\"listbox\" id={context?.listId} aria-label={context?.query ?? undefined} className={clsx(css.list, className)}>{children}</div>\n}\n\n/** Renders only once items have registered and none of them match. */\nexport function CommandEmpty({ children, className }: { children?: ReactNode, className?: string }) {\n const context = useContext(CommandContext)\n if (context !== null && (context.registeredCount === 0 || context.visibleCount > 0)) return null\n return <div data-slot=\"command-empty\" className={clsx(css.empty, className)}>{children}</div>\n}\n\nexport function CommandGroup({ heading, children, className }: { heading?: string, children?: ReactNode, className?: string }) {\n return (\n <div data-slot=\"command-group\" role=\"group\" className={clsx(css.group, className)}>\n {heading !== undefined && <div data-slot=\"command-group-heading\" className={css.heading}>{heading}</div>}\n {children}\n </div>\n )\n}\n\nexport function CommandSeparator({ className }: { className?: string }) {\n return <div data-slot=\"command-separator\" role=\"separator\" className={clsx(css.separator, className)} />\n}\n\nexport interface CommandItemProps {\n /** The text this item is matched against. Defaults to the item's own text content. */\n value?: string\n disabled?: boolean\n onSelect?: () => void\n children?: ReactNode\n className?: string\n}\n\n/** One selectable row. Filtered-out items are display-none, so they leave both the layout and the keyboard walk. */\nexport function CommandItem({ value, disabled = false, onSelect, children, className }: CommandItemProps) {\n const context = useContext(CommandContext)\n const id = useId()\n const ref = useRef<HTMLDivElement | null>(null)\n const handleSelect = useCallback(() => { onSelect?.() }, [onSelect])\n\n // Depends on `register`/`unregister` themselves, not the whole `context` object: same fix, same reason, as\n // Combobox's identical registration effect (see that file's comment) - `context` changes identity whenever\n // `items`/`query` change, which re-ran this effect on every registration and looped forever once someone typed.\n // Found the same way: a real browser, typing into a real Command, not a static check.\n const register = context?.register\n const unregister = context?.unregister\n useEffect(() => {\n if (register === undefined || unregister === undefined) return\n register(id, { text: value ?? (ref.current?.textContent ?? ''), disabled }, handleSelect)\n return () => { unregister(id) }\n }, [register, unregister, id, value, disabled, handleSelect])\n\n const visible = context === null || context.isVisible(id)\n return (\n <div\n ref={ref}\n id={id}\n data-slot=\"command-item\"\n role=\"option\"\n aria-selected={context?.activeId === id}\n aria-disabled={disabled}\n data-disabled={disabled}\n data-hidden={!visible}\n data-selected={context?.activeId === id}\n className={clsx(css.item, className)}\n onClick={() => { if (!disabled) { context?.setActiveId(id); context?.choose(id) } }}\n onPointerMove={() => { if (!disabled) context?.setActiveId(id) }}\n >\n {children}\n </div>\n )\n}\n\nexport function CommandShortcut({ children, className }: { children?: ReactNode, className?: string }) {\n return <span data-slot=\"command-shortcut\" className={clsx(css.shortcut, className)}>{children}</span>\n}","/**\n * Ported from shadcn/ui's Combobox (https://ui.shadcn.com/docs/components/combobox, MIT licence, registry item `combobox`, style new-york-v4, fetched\n * 2026-09-22). The searchable single-select combobox: a text field that filters a list, an anchored panel, groups with labels, an empty state and\n * keyboard selection.\n *\n * Restates the anchored-listbox shape written down in docs/pattern-anchored-listbox.md - points 1 to 5 for the anchoring half, 6 to 8 for the filtering\n * listbox half - and restates InputGroup's chrome for its own field, as that document's \"Restating InputGroup's chrome\" section requires. A shared\n * pattern restated, never an importable module: a cross-item import is what this registry's ingest gate rejects.\n *\n * THREE THINGS UPSTREAM HAS THAT THIS FIRST PASS DOES NOT, all deliberate and all recorded in manifest.yml:\n *\n * 1. The multi-select chips family (`ComboboxChips`, `ComboboxChip`, `ComboboxChipsInput`) is a documented follow-up rather than part of this pass, so\n * this port is single-select only. A partial is acceptable when it is stated; a silent one is not.\n * 2. `ComboboxCollection` is not ported: it is Base UI's render-prop grouping helper with no local meaning, and this library does not invent a parallel\n * rendering mechanism.\n * 3. Base UI's Positioner publishes `--anchor-width`, `--available-width`, `--available-height` and `--transform-origin`, and the source leans on all\n * four. Here the panel's width comes from the anchor's own measured rect and the list's height from the space left in the viewport, and there is no\n * portal - so an ancestor with `overflow: hidden` or a transform can clip the panel.\n *\n * Base UI's `data-highlighted` hook is kept for the active row, because that is what a caller styles against; `data-selected` marks the chosen one, and\n * `data-open`/`data-empty` carry the panel's state. The source's `data-open:animate-in`/`fade-in-0`/`zoom-in-95` animations have no equivalent, so this\n * port animates nothing rather than inventing keyframes. lucide-react's ChevronDownIcon/CheckIcon/XIcon became plain inline SVGs. See manifest.yml.\n */\nimport { createContext, useCallback, useContext, useEffect, useId, useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport type { InputHTMLAttributes, MutableRefObject, ReactNode } from 'react'\nimport css from './Combobox.module.css'\n\n/** Case-insensitive substring, else every word of the query present. The same matcher the Command port uses. */\nfunction matches(text: string, query: string): boolean {\n const needle = query.trim().toLowerCase()\n if (needle === '') return true\n const haystack = text.toLowerCase()\n if (haystack.includes(needle)) return true\n return needle.split(/\\s+/u).every(word => haystack.includes(word))\n}\n\ninterface ItemRecord { text: string, disabled: boolean }\n\ninterface ComboboxContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n value: string | null\n setValue: (value: string | null) => void\n query: string\n setQuery: (query: string) => void\n register: (id: string, record: ItemRecord, onSelect: (value: string) => void) => void\n unregister: (id: string) => void\n isVisible: (id: string) => boolean\n visibleCount: number\n registeredCount: number\n labelFor: (value: string | null) => string | null\n activeId: string | null\n setActiveId: (id: string | null) => void\n choose: (id: string) => void\n listId: string\n rootRef: MutableRefObject<HTMLDivElement | null>\n anchorRef: MutableRefObject<HTMLElement | null>\n contentRef: MutableRefObject<HTMLDivElement | null>\n triggerRef: MutableRefObject<HTMLButtonElement | null>\n}\n\nconst ComboboxContext = createContext<ComboboxContextValue | null>(null)\n\n/**\n * Marks the element the panel should align to. Attach the returned ref to any element; when nothing is marked, the panel aligns to the field.\n * @returns the ref to attach.\n */\nexport function useComboboxAnchor(): MutableRefObject<HTMLElement | null> {\n return useRef<HTMLElement | null>(null)\n}\n\nexport interface ComboboxProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n value?: string | null\n defaultValue?: string | null\n onValueChange?: (value: string | null) => void\n children?: ReactNode\n}\n\n/** Own the panel's open state, the chosen value and the query for everything inside the combobox. */\nexport function Combobox({ open: controlledOpen, defaultOpen = false, onOpenChange, value: controlledValue, defaultValue = null, onValueChange, children }: ComboboxProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen)\n const [uncontrolledValue, setUncontrolledValue] = useState<string | null>(defaultValue)\n const open = controlledOpen ?? uncontrolledOpen\n const value = controlledValue === undefined ? uncontrolledValue : controlledValue\n const [query, setQuery] = useState('')\n const [items, setItems] = useState<Record<string, ItemRecord>>({})\n const [activeId, setActiveId] = useState<string | null>(null)\n const handlers = useRef(new Map<string, (value: string) => void>())\n const rootRef = useRef<HTMLDivElement | null>(null)\n const anchorRef = useRef<HTMLElement | null>(null)\n const contentRef = useRef<HTMLDivElement | null>(null)\n const triggerRef = useRef<HTMLButtonElement | null>(null)\n const listId = useId()\n\n const setOpen = useCallback((next: boolean) => {\n if (controlledOpen === undefined) setUncontrolledOpen(next)\n onOpenChange?.(next)\n }, [controlledOpen, onOpenChange])\n const setValue = useCallback((next: string | null) => {\n if (controlledValue === undefined) setUncontrolledValue(next)\n onValueChange?.(next)\n }, [controlledValue, onValueChange])\n\n const register = useCallback((id: string, record: ItemRecord, onSelect: (value: string) => void) => {\n handlers.current.set(id, onSelect)\n setItems(current => current[id]?.text === record.text && current[id]?.disabled === record.disabled ? current : { ...current, [id]: record })\n }, [])\n const unregister = useCallback((id: string) => {\n handlers.current.delete(id)\n setItems(current => { if (current[id] === undefined) return current; const next = { ...current }; delete next[id]; return next })\n }, [])\n\n // An item the registry has not seen yet is visible: registration happens in an effect, so judging an unknown id\n // would hide every row on the first paint and in any server render.\n const isVisible = useCallback((id: string) => {\n const record = items[id]\n if (record === undefined) return true\n return matches(record.text, query)\n }, [items, query])\n const registeredCount = Object.keys(items).length\n const visibleCount = Object.values(items).filter(record => matches(record.text, query)).length\n\n /** The label a chosen value should display, taken from whatever item registered it. */\n const labelFor = useCallback((wanted: string | null) => {\n if (wanted === null) return null\n for (const record of Object.values(items)) if (record.text === wanted) return record.text\n return wanted\n }, [items])\n\n useEffect(() => {\n const ids = Object.keys(items).filter(id => matches(items[id]?.text ?? '', query))\n setActiveId(current => current !== null && ids.includes(current) ? current : ids[0] ?? null)\n }, [items, query])\n\n useEffect(() => {\n if (activeId === null) return\n document.getElementById(activeId)?.scrollIntoView({ block: 'nearest' })\n }, [activeId])\n\n // Selecting is the combobox's own job, not the item's: a single-select control owns its value, closes and resets.\n // Delegating this to each item's onSelect made the click path and the Enter path disagree.\n const choose = useCallback((id: string) => {\n const record = items[id]\n if (record === undefined || record.disabled) return\n setValue(record.text)\n handlers.current.get(id)?.(record.text)\n setOpen(false)\n setQuery('')\n }, [items, setValue, setOpen])\n\n const value_ = useMemo<ComboboxContextValue>(() => ({\n open, setOpen, value, setValue, query, setQuery, register, unregister, isVisible, visibleCount, registeredCount,\n labelFor, activeId, setActiveId, choose, listId, rootRef, anchorRef, contentRef, triggerRef,\n }), [open, setOpen, value, setValue, query, register, unregister, isVisible, visibleCount, registeredCount, labelFor, activeId, choose, listId])\n\n return (\n <ComboboxContext.Provider value={value_}>\n <div ref={rootRef} data-slot=\"combobox\" data-open={open} className={css.anchor}>{children}</div>\n </ComboboxContext.Provider>\n )\n}\n\nexport interface ComboboxInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange'> {\n placeholder?: string\n}\n\n/** The field: InputGroup's chrome restated around a control bound to the query, with a clear button. */\nexport function ComboboxInput({ className, placeholder, ...rest }: ComboboxInputProps) {\n const context = useContext(ComboboxContext)\n const move = (delta: number): void => {\n const ids = walkableIds(context)\n if (ids.length === 0) return\n const at = context?.activeId === null || context?.activeId === undefined ? -1 : ids.indexOf(context.activeId)\n const next = at === -1 ? (delta > 0 ? 0 : ids.length - 1) : (at + delta + ids.length) % ids.length\n context?.setActiveId(ids[next] ?? null)\n }\n return (\n <div data-slot=\"input-group\" className={css.group}>\n <input\n data-slot=\"input-group-control\"\n role=\"combobox\"\n aria-expanded={context?.open ?? false}\n aria-controls={context?.listId}\n aria-activedescendant={context?.open === true ? context.activeId ?? undefined : undefined}\n aria-autocomplete=\"list\"\n autoComplete=\"off\"\n placeholder={placeholder}\n className={clsx(css.control, className)}\n value={context?.query ?? ''}\n onChange={event => { context?.setQuery(event.target.value) }}\n onFocus={() => { context?.setOpen(true) }}\n onKeyDown={event => {\n if (event.key === 'ArrowDown') { event.preventDefault(); if (context?.open === true) move(1); else context?.setOpen(true); return }\n if (event.key === 'ArrowUp') { event.preventDefault(); move(-1); return }\n if (event.key === 'Home' && context?.open === true) { event.preventDefault(); context.setActiveId(walkableIds(context)[0] ?? null); return }\n if (event.key === 'End' && context?.open === true) {\n event.preventDefault()\n const ids = walkableIds(context)\n context.setActiveId(ids[ids.length - 1] ?? null)\n return\n }\n if (event.key === 'Enter' && context?.open === true && context.activeId !== null) {\n event.preventDefault()\n context.choose(context.activeId) // chooses, sets the value, closes and resets the query\n }\n }}\n {...rest}\n />\n <div data-slot=\"input-group-addon\" data-align=\"inline-end\" className={clsx(css.addon, css.addonEnd)}>\n <ComboboxClear />\n <ComboboxTrigger />\n </div>\n </div>\n )\n}\n\n/** The ids a keyboard walk should move through, in DOM order - read at key time, never tracked in state. */\nfunction walkableIds(context: ComboboxContextValue | null): string[] {\n const root = context?.rootRef.current\n if (root === null || root === undefined) return []\n return [...root.querySelectorAll<HTMLElement>('[data-slot=\"combobox-item\"]')]\n .filter(node => node.getAttribute('data-hidden') !== 'true' && node.getAttribute('data-disabled') !== 'true')\n .map(node => node.id)\n .filter(id => id !== '')\n}\n\n/** Clears the chosen value. Disabled while there is nothing to clear. */\nexport function ComboboxClear({ className }: { className?: string }) {\n const context = useContext(ComboboxContext)\n return (\n <button\n type=\"button\"\n data-slot=\"combobox-clear\"\n aria-label=\"Clear selection\"\n disabled={context?.value === null || context?.value === undefined}\n className={clsx(css.clear, className)}\n onClick={() => { context?.setValue(null); context?.setQuery('') }}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" aria-hidden><path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" /></svg>\n </button>\n )\n}\n\n/** Opens and closes the panel. */\nexport function ComboboxTrigger({ label = 'Show options', className }: { label?: string, className?: string }) {\n const context = useContext(ComboboxContext)\n return (\n <button\n type=\"button\"\n ref={element => { if (context !== null) context.triggerRef.current = element }}\n data-slot=\"combobox-trigger\"\n aria-haspopup=\"listbox\"\n aria-expanded={context?.open ?? false}\n aria-label={label}\n className={clsx(css.trigger, className)}\n onClick={() => { context?.setOpen(!(context?.open ?? false)) }}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden><path d=\"M4 6l4 4 4-4\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" /></svg>\n </button>\n )\n}\n\n/** Renders the chosen value's label, or `placeholder` when nothing is chosen. */\nexport function ComboboxValue({ placeholder = '', className }: { placeholder?: string, className?: string }) {\n const context = useContext(ComboboxContext)\n const label = context?.labelFor(context?.value ?? null) ?? null\n if (label !== null && label !== '') return <span data-slot=\"combobox-value\" className={clsx(css.value, className)}>{label}</span>\n return <span data-slot=\"combobox-value\" data-placeholder=\"true\" className={clsx(css.value, className)}>{placeholder}</span>\n}\n\nexport interface ComboboxContentProps {\n children?: ReactNode\n className?: string\n}\n\n/**\n * The anchored panel. Renders nothing until the combobox is open.\n * @param props - the panel's content.\n * @returns the element.\n */\nexport function ComboboxContent({ children, className }: ComboboxContentProps) {\n const context = useContext(ComboboxContext)\n const open = context?.open ?? false\n const [style, setStyle] = useState<{ left: number, top: number, width: number, maxHeight: number } | null>(null)\n\n useLayoutEffect(() => {\n if (!open) { setStyle(null); return }\n const measure = (): void => {\n const reference = context?.anchorRef.current ?? context?.rootRef.current?.querySelector('[data-slot=\"input-group\"]') ?? null\n const panel = context?.contentRef.current\n if (reference === null || panel === null) return\n const rect = reference.getBoundingClientRect()\n const width = rect.width\n const below = rect.bottom + 4\n const spaceBelow = window.innerHeight - below - 8\n const spaceAbove = rect.top - 8\n const flip = spaceBelow < 160 && spaceAbove > spaceBelow\n const maxHeight = Math.max(120, Math.min(320, flip ? spaceAbove : spaceBelow))\n const left = Math.min(Math.max(rect.left, 8), Math.max(8, window.innerWidth - width - 8))\n setStyle({ left, top: flip ? Math.max(8, rect.top - 4 - maxHeight) : below, width, maxHeight })\n }\n measure()\n window.addEventListener('resize', measure)\n window.addEventListener('scroll', measure, true)\n return () => { window.removeEventListener('resize', measure); window.removeEventListener('scroll', measure, true) }\n }, [open, context])\n\n useEffect(() => {\n if (!open || context === null) return\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.key !== 'Escape') return\n context.setOpen(false)\n context.rootRef.current?.querySelector<HTMLElement>('[data-slot=\"input-group-control\"]')?.focus()\n }\n const onPointerDown = (event: PointerEvent): void => {\n const target = event.target as Node | null\n if (target === null) return\n if (context.rootRef.current?.contains(target) === true) return\n if (context.contentRef.current?.contains(target) === true) return\n context.setOpen(false)\n }\n document.addEventListener('keydown', onKeyDown)\n document.addEventListener('pointerdown', onPointerDown)\n return () => { document.removeEventListener('keydown', onKeyDown); document.removeEventListener('pointerdown', onPointerDown) }\n }, [open, context])\n\n if (!open) return null\n const empty = context !== null && context.registeredCount > 0 && context.visibleCount === 0\n return (\n <div\n ref={element => { if (context !== null) context.contentRef.current = element }}\n data-slot=\"combobox-content\"\n data-open=\"true\"\n data-empty={empty}\n className={clsx(css.content, className)}\n style={style === null ? { visibility: 'hidden' } : { left: style.left, top: style.top, width: style.width, maxHeight: style.maxHeight }}\n >\n {children}\n </div>\n )\n}\n\nexport function ComboboxList({ children, className }: { children?: ReactNode, className?: string }) {\n const context = useContext(ComboboxContext)\n return <div data-slot=\"combobox-list\" role=\"listbox\" id={context?.listId} className={clsx(css.list, className)}>{children}</div>\n}\n\nexport function ComboboxGroup({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"combobox-group\" role=\"group\" className={clsx(css.groupBlock, className)}>{children}</div>\n}\n\nexport function ComboboxLabel({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"combobox-label\" className={clsx(css.label, className)}>{children}</div>\n}\n\n/** Shows only once items have registered and none of them match. The panel reports `data-empty` for the same reason. */\nexport function ComboboxEmpty({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"combobox-empty\" className={clsx(css.empty, className)}>{children}</div>\n}\n\nexport function ComboboxSeparator({ className }: { className?: string }) {\n return <div data-slot=\"combobox-separator\" role=\"separator\" className={clsx(css.separator, className)} />\n}\n\nexport interface ComboboxItemProps {\n /** The text this item is matched against and the value reported on selection. Defaults to the item's own text content. */\n value?: string\n disabled?: boolean\n onSelect?: (value: string) => void\n children?: ReactNode\n className?: string\n}\n\n/** One option. `data-highlighted` marks the active row and `data-selected` the chosen one; a filtered-out row is display-none. */\nexport function ComboboxItem({ value, disabled = false, onSelect, children, className }: ComboboxItemProps) {\n const context = useContext(ComboboxContext)\n const id = useId()\n const ref = useRef<HTMLDivElement | null>(null)\n const handleSelect = useCallback((selected: string) => { onSelect?.(selected) }, [onSelect])\n\n // Depends on `register`/`unregister` themselves, not the whole `context` object: `context` is a `useMemo` that gets\n // a new identity whenever `items` or `query` change (through `isVisible`/`labelFor`, which are keyed on both), but\n // `register`/`unregister` are their own `useCallback`s with no dependencies, so they never change identity. Depending\n // on `context` here re-ran this effect on every registration - unregistering then re-registering every item on every\n // keystroke, which is itself another `items` change, which is another `context` identity change: an infinite loop\n // (React error #185), found by typing into a real Combobox in a real browser, not by any static check.\n const register = context?.register\n const unregister = context?.unregister\n useEffect(() => {\n if (register === undefined || unregister === undefined) return\n register(id, { text: value ?? (ref.current?.textContent ?? ''), disabled }, handleSelect)\n return () => { unregister(id) }\n }, [register, unregister, id, value, disabled, handleSelect])\n\n const text = value ?? ''\n // The chosen value IS an item's text, so selecting is a straight comparison - no label lookup needed here.\n const selected = text !== '' && context?.value === text\n const visible = context === null || context.isVisible(id)\n return (\n <div\n ref={ref}\n id={id}\n data-slot=\"combobox-item\"\n role=\"option\"\n aria-selected={selected}\n aria-disabled={disabled}\n data-disabled={disabled}\n data-hidden={!visible}\n data-highlighted={context?.activeId === id}\n data-selected={selected}\n className={clsx(css.item, className)}\n onClick={() => {\n if (disabled) return\n context?.setActiveId(id)\n context?.choose(id)\n }}\n onPointerMove={() => { if (!disabled) context?.setActiveId(id) }}\n >\n {children}\n {selected && (\n <span data-slot=\"combobox-item-indicator\" className={css.itemIndicator}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden><path d=\"M3.5 8.5l3 3 6-6\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" /></svg>\n </span>\n )}\n </div>\n )\n}","/**\n * Ported from shadcn/ui's Context Menu (https://ui.shadcn.com/docs/components/context-menu, MIT licence, registry item `context-menu`, style\n * new-york-v4, fetched 2026-09-22). A menu opened by a right-click, anchored at the pointer rather than at a field.\n *\n * Restates the anchored-listbox shape in docs/pattern-anchored-listbox.md for its anchoring and dismissal half (points 1 to 5, 7 and 8) with two\n * differences the source forces: the anchor is the POINTER's coordinates captured from the contextmenu event rather than an element's rect, and there is\n * no query, so the keyboard walks every item instead of a filtered subset. A shared pattern restated, never an importable module.\n *\n * TWO THINGS UPSTREAM HAS THAT THIS PASS DOES NOT, deliberate and recorded in manifest.yml:\n *\n * 1. The submenu family (ContextMenuSub, ContextMenuSubTrigger, ContextMenuSubContent) is a documented follow-up. A submenu is a nested anchored panel\n * with hover-intent, which is a different problem from the base menu.\n * 2. ContextMenuPortal does not exist, for the same reason Sheet and Popover have no portal - a client bundle may require only react, react/jsx-runtime\n * and the app primitives, and react-dom's createPortal is outside that set - so the panel renders where it sits and an ancestor with overflow hidden\n * or a transform can clip it.\n *\n * Radix's `asChild`/Slot is not ported, so the trigger is a wrapper element carrying `tabIndex={0}`: it has to be focusable for focus to be restored to\n * it on close, and for a keyboard user to reach it at all. Radix's enter/exit animations and its collision-aware positioning have no equivalent here -\n * this port clamps the panel to the viewport instead of tracking Radix's collision algorithm. lucide-react's CheckIcon became a plain inline SVG. See\n * manifest.yml.\n */\nimport { createContext, useContext, useEffect, useId, useMemo, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport type { MutableRefObject, ReactNode } from 'react'\nimport css from './ContextMenu.module.css'\n\ninterface ContextMenuContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n point: { x: number, y: number }\n contentRef: MutableRefObject<HTMLDivElement | null>\n triggerRef: MutableRefObject<HTMLElement | null>\n}\n\nconst ContextMenuContext = createContext<ContextMenuContextValue | null>(null)\n\nexport interface ContextMenuProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n children?: ReactNode\n}\n\n/** Own the menu's open state and the pointer position it was opened at. */\nexport function ContextMenu({ open: controlledOpen, defaultOpen = false, onOpenChange, children }: ContextMenuProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen)\n const [point, setPoint] = useState({ x: 0, y: 0 })\n const contentRef = useRef<HTMLDivElement | null>(null)\n const triggerRef = useRef<HTMLElement | null>(null)\n const open = controlledOpen ?? uncontrolledOpen\n const value = useMemo<ContextMenuContextValue>(() => ({\n open,\n point,\n setOpen: next => { if (controlledOpen === undefined) setUncontrolledOpen(next); onOpenChange?.(next) },\n contentRef,\n triggerRef,\n }), [open, point, controlledOpen, onOpenChange])\n return (\n <ContextMenuContext.Provider value={value}>\n <ContextMenuPoint.Provider value={setPoint}>{children}</ContextMenuPoint.Provider>\n </ContextMenuContext.Provider>\n )\n}\n\n/** The pointer position is set by the trigger and read by the content, so it travels beside the open state. */\nconst ContextMenuPoint = createContext<(point: { x: number, y: number }) => void>(() => {})\n\n/** The region that opens the menu on a right-click. Focusable, so focus can be returned to it on close. */\nexport function ContextMenuTrigger({ children, className }: { children?: ReactNode, className?: string }) {\n const context = useContext(ContextMenuContext)\n const setPoint = useContext(ContextMenuPoint)\n return (\n <div\n ref={element => { if (context !== null) context.triggerRef.current = element }}\n data-slot=\"context-menu-trigger\"\n tabIndex={0}\n className={clsx(css.trigger, className)}\n onContextMenu={event => {\n event.preventDefault()\n setPoint({ x: event.clientX, y: event.clientY })\n context?.setOpen(true)\n }}\n >\n {children}\n </div>\n )\n}\n\nexport interface ContextMenuContentProps {\n children?: ReactNode\n className?: string\n}\n\n/**\n * The panel, placed at the pointer and clamped to the viewport. Renders nothing until the menu is open.\n * @param props - the menu's content.\n * @returns the element.\n */\nexport function ContextMenuContent({ children, className }: ContextMenuContentProps) {\n const context = useContext(ContextMenuContext)\n const open = context?.open ?? false\n const [placement, setPlacement] = useState<{ left: number, top: number } | null>(null)\n\n useEffect(() => {\n if (!open) { setPlacement(null); return }\n const panel = context?.contentRef.current\n if (panel === null || panel === undefined) return\n const width = panel.offsetWidth\n const height = panel.offsetHeight\n const left = Math.min(context?.point.x ?? 0, Math.max(8, window.innerWidth - width - 8))\n const top = Math.min(context?.point.y ?? 0, Math.max(8, window.innerHeight - height - 8))\n setPlacement({ left, top })\n panel.focus()\n }, [open, context])\n\n useEffect(() => {\n if (!open || context === null) return\n /** The items a keyboard walk moves through, in DOM order. No query here, so nothing is filtered out. */\n const walkable = (): string[] => {\n const root = context.contentRef.current\n if (root === null) return []\n return [...root.querySelectorAll<HTMLElement>('[role=\"menuitem\"], [role=\"menuitemcheckbox\"], [role=\"menuitemradio\"]')]\n .filter(node => node.getAttribute('data-disabled') !== 'true')\n .map(node => node.id)\n .filter(id => id !== '')\n }\n const highlight = (id: string | null): void => {\n const root = context.contentRef.current\n if (root === null) return\n for (const node of root.querySelectorAll<HTMLElement>('[data-highlighted=\"true\"]')) node.setAttribute('data-highlighted', 'false')\n if (id === null) return\n const next = document.getElementById(id)\n next?.setAttribute('data-highlighted', 'true')\n next?.scrollIntoView({ block: 'nearest' })\n }\n const move = (delta: number): void => {\n const ids = walkable()\n if (ids.length === 0) return\n const root = context.contentRef.current\n const current = [...(root?.querySelectorAll<HTMLElement>('[data-highlighted=\"true\"]') ?? [])][0]?.id\n const at = current === undefined ? -1 : ids.indexOf(current)\n highlight(ids[at === -1 ? (delta > 0 ? 0 : ids.length - 1) : (at + delta + ids.length) % ids.length] ?? null)\n }\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.key === 'Escape') {\n context.setOpen(false)\n context.triggerRef.current?.focus()\n return\n }\n if (event.key === 'ArrowDown') { event.preventDefault(); move(1); return }\n if (event.key === 'ArrowUp') { event.preventDefault(); move(-1); return }\n if (event.key === 'Home') { event.preventDefault(); highlight(walkable()[0] ?? null); return }\n if (event.key === 'End') {\n event.preventDefault()\n const ids = walkable()\n highlight(ids[ids.length - 1] ?? null)\n return\n }\n if (event.key === 'Enter' || event.key === ' ') {\n const root = context.contentRef.current\n const current = [...(root?.querySelectorAll<HTMLElement>('[data-highlighted=\"true\"]') ?? [])][0]\n if (current === undefined) return\n event.preventDefault()\n current.click()\n }\n }\n const onPointerDown = (event: PointerEvent): void => {\n const target = event.target as Node | null\n if (target === null) return\n if (context.contentRef.current?.contains(target) === true) return\n if (context.triggerRef.current?.contains(target) === true) return\n context.setOpen(false)\n }\n document.addEventListener('keydown', onKeyDown)\n document.addEventListener('pointerdown', onPointerDown)\n return () => { document.removeEventListener('keydown', onKeyDown); document.removeEventListener('pointerdown', onPointerDown) }\n }, [open, context])\n\n if (!open) return null\n return (\n <div\n ref={element => { if (context !== null) context.contentRef.current = element }}\n data-slot=\"context-menu-content\"\n role=\"menu\"\n tabIndex={-1}\n className={clsx(css.content, className)}\n style={placement === null ? { visibility: 'hidden' } : { left: placement.left, top: placement.top }}\n >\n {children}\n </div>\n )\n}\n\nexport interface ContextMenuItemProps {\n inset?: boolean\n variant?: 'default' | 'destructive'\n disabled?: boolean\n onSelect?: () => void\n children?: ReactNode\n className?: string\n}\n\n/** One action. `data-inset` indents it for rows that carry an indicator beside them. */\nexport function ContextMenuItem({ inset = false, variant = 'default', disabled = false, onSelect, children, className }: ContextMenuItemProps) {\n const context = useContext(ContextMenuContext)\n const id = useId()\n return (\n <div\n id={id}\n data-slot=\"context-menu-item\"\n role=\"menuitem\"\n aria-disabled={disabled}\n data-disabled={disabled}\n data-inset={inset}\n data-variant={variant}\n data-highlighted=\"false\"\n className={clsx(css.item, className)}\n onClick={() => { if (disabled) return; onSelect?.(); context?.setOpen(false) }}\n onPointerMove={() => {\n const root = context?.contentRef.current\n if (root === null || root === undefined) return\n for (const node of root.querySelectorAll<HTMLElement>('[data-highlighted=\"true\"]')) node.setAttribute('data-highlighted', 'false')\n document.getElementById(id)?.setAttribute('data-highlighted', 'true')\n }}\n >\n {children}\n </div>\n )\n}\n\nexport interface ContextMenuCheckboxItemProps extends Omit<ContextMenuItemProps, 'variant'> {\n checked?: boolean\n onCheckedChange?: (checked: boolean) => void\n}\n\nexport function ContextMenuCheckboxItem({ checked = false, inset = false, disabled = false, onCheckedChange, children, className }: ContextMenuCheckboxItemProps) {\n const context = useContext(ContextMenuContext)\n const id = useId()\n return (\n <div\n id={id}\n data-slot=\"context-menu-checkbox-item\"\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n aria-disabled={disabled}\n data-disabled={disabled}\n data-inset={inset}\n data-highlighted=\"false\"\n className={clsx(css.item, className)}\n onClick={() => { if (disabled) return; onCheckedChange?.(!checked); context?.setOpen(false) }}\n onPointerMove={() => {\n const root = context?.contentRef.current\n if (root === null || root === undefined) return\n for (const node of root.querySelectorAll<HTMLElement>('[data-highlighted=\"true\"]')) node.setAttribute('data-highlighted', 'false')\n document.getElementById(id)?.setAttribute('data-highlighted', 'true')\n }}\n >\n <span data-slot=\"context-menu-indicator\" className={css.indicator}>\n {checked && <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" aria-hidden><path d=\"M3.5 8.5l3 3 6-6\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" /></svg>}\n </span>\n {children}\n </div>\n )\n}\n\ninterface RadioContextValue { value: string | null, setValue: (value: string) => void }\nconst RadioGroupContext = createContext<RadioContextValue | null>(null)\n\nexport function ContextMenuRadioGroup({ value: controlledValue, defaultValue = null, onValueChange, children, className }: { value?: string | null, defaultValue?: string | null, onValueChange?: (value: string) => void, children?: ReactNode, className?: string }) {\n const [uncontrolled, setUncontrolled] = useState<string | null>(defaultValue)\n const value = controlledValue === undefined ? uncontrolled : controlledValue\n const contextValue = useMemo<RadioContextValue>(() => ({\n value,\n setValue: next => { if (controlledValue === undefined) setUncontrolled(next); onValueChange?.(next) },\n }), [value, controlledValue, onValueChange])\n return (\n <RadioGroupContext.Provider value={contextValue}>\n <div data-slot=\"context-menu-radio-group\" role=\"group\" className={className}>{children}</div>\n </RadioGroupContext.Provider>\n )\n}\n\nexport function ContextMenuRadioItem({ value, inset = false, disabled = false, children, className }: { value: string, inset?: boolean, disabled?: boolean, children?: ReactNode, className?: string }) {\n const context = useContext(ContextMenuContext)\n const radio = useContext(RadioGroupContext)\n const id = useId()\n const checked = radio?.value === value\n return (\n <div\n id={id}\n data-slot=\"context-menu-radio-item\"\n role=\"menuitemradio\"\n aria-checked={checked}\n aria-disabled={disabled}\n data-disabled={disabled}\n data-inset={inset}\n data-highlighted=\"false\"\n className={clsx(css.item, className)}\n onClick={() => { if (disabled) return; radio?.setValue(value); context?.setOpen(false) }}\n onPointerMove={() => {\n const root = context?.contentRef.current\n if (root === null || root === undefined) return\n for (const node of root.querySelectorAll<HTMLElement>('[data-highlighted=\"true\"]')) node.setAttribute('data-highlighted', 'false')\n document.getElementById(id)?.setAttribute('data-highlighted', 'true')\n }}\n >\n <span data-slot=\"context-menu-indicator\" className={css.indicator}>\n {checked && <svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" aria-hidden><circle cx=\"4\" cy=\"4\" r=\"3\" fill=\"currentColor\" /></svg>}\n </span>\n {children}\n </div>\n )\n}\n\nexport function ContextMenuLabel({ inset = false, children, className }: { inset?: boolean, children?: ReactNode, className?: string }) {\n return <div data-slot=\"context-menu-label\" data-inset={inset} className={clsx(css.label, className)}>{children}</div>\n}\n\nexport function ContextMenuSeparator({ className }: { className?: string }) {\n return <div data-slot=\"context-menu-separator\" role=\"separator\" className={clsx(css.separator, className)} />\n}\n\nexport function ContextMenuShortcut({ children, className }: { children?: ReactNode, className?: string }) {\n return <span data-slot=\"context-menu-shortcut\" className={clsx(css.shortcut, className)}>{children}</span>\n}\n\nexport function ContextMenuGroup({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"context-menu-group\" role=\"group\" className={className}>{children}</div>\n}","/**\n * Ported from shadcn/ui's Carousel (https://ui.shadcn.com/docs/components/carousel, MIT licence, registry item `carousel`, style new-york-v4, fetched\n * 2026-09-22). `embla-carousel-react` is dropped for CSS scroll snap, the same call the Scroll Area port made: the platform already scrolls, and it can\n * already snap. The viewport keeps `overflow: auto` with `scroll-snap-type` on the track's axis, every item takes one viewport and declares\n * `scroll-snap-align: start`, the arrows scroll by exactly one item, and `canScrollPrev`/`canScrollNext` are read off the scroller's own geometry\n * (`position > 0`, `position < span - viewport`) on `scroll`, on resize and after every render, so a caller adding items does not leave the arrows stale.\n *\n * The `CarouselApi` this item publishes is deliberately smaller than embla's: `scrollPrev`, `scrollNext`, `scrollTo(index)`, `canScrollPrev`,\n * `canScrollNext` and `selectedIndex`, exposed through the source's own `setApi` prop. Embla's `reInit` events, its `scrollTo` options, its drag physics\n * and its plugin system are NOT reproduced - a deliberate partial recorded in manifest.yml, the same shape of decision as vaul's velocity flick in Drawer.\n *\n * `CarouselPrevious`/`CarouselNext` restate shadcn's Button locally (outline, icon size, round, absolutely placed at the track's edges) because the\n * ingest gate rejects a cross-item import; PaginationLink, AttachmentAction and ToggleGroupItem already restate the same chrome.\n *\n * Kept from the source: `role=\"region\"` with `aria-roledescription=\"carousel\"` on the root, `role=\"group\"` with `aria-roledescription=\"slide\"` per item,\n * ArrowLeft/ArrowRight handled in the capture phase on the root so a focused arrow button still moves the track, a screen-reader-only label inside each\n * arrow, `disabled` from the can-scroll state, both orientations and the `data-slot` names. Nothing here keys off `:has()` and nothing transitions a\n * property a `:has()` rule sets, so this item is not exposed to the engine split InputGroup hit.\n */\nimport { createContext, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport type { ButtonHTMLAttributes, HTMLAttributes, KeyboardEvent, MutableRefObject } from 'react'\nimport css from './Carousel.module.css'\n\nexport type CarouselOrientation = 'horizontal' | 'vertical'\n\n/**\n * The handles a caller gets through `setApi`. This is a subset of embla's api, on purpose: embla's events, scroll options, drag physics and plugins have no\n * equivalent here, because the platform's scroller does the moving.\n */\nexport interface CarouselApi {\n /** Move one item towards the start. */\n scrollPrev: () => void\n /** Move one item towards the end. */\n scrollNext: () => void\n /** Move so that the item at `index` is at the start of the viewport. */\n scrollTo: (index: number) => void\n /** Whether there is anything before the first visible item. */\n canScrollPrev: () => boolean\n /** Whether there is anything after the last visible item. */\n canScrollNext: () => boolean\n /** The index of the item at the start of the viewport. */\n selectedIndex: () => number\n}\n\ninterface CarouselContextValue {\n trackRef: MutableRefObject<HTMLDivElement | null>\n orientation: CarouselOrientation\n scrollPrev: () => void\n scrollNext: () => void\n canScrollPrev: boolean\n canScrollNext: boolean\n}\n\nconst CarouselContext = createContext<CarouselContextValue | null>(null)\n\nexport interface CarouselProps extends HTMLAttributes<HTMLDivElement> {\n /** Which axis the track slides along. Vertical needs a definite height on `CarouselContent`, the way ScrollArea needs one on itself. */\n orientation?: CarouselOrientation\n /** Called once with the api, so a caller can drive the carousel from its own controls. */\n setApi?: (api: CarouselApi) => void\n}\n\n/**\n * Own the carousel: the track's scroll position, the arrow-key handling and the can-scroll state its arrows read.\n * @param props - `orientation`, `setApi`, and normal `<div>` attributes; `className` and `style` land on the root region.\n * @returns the element, with `role=\"region\"` and `aria-roledescription=\"carousel\"`.\n */\nexport function Carousel({ orientation = 'horizontal', setApi, children, className, ...rest }: CarouselProps) {\n const trackRef = useRef<HTMLDivElement | null>(null)\n const [canScrollPrev, setCanScrollPrev] = useState(false)\n const [canScrollNext, setCanScrollNext] = useState(false)\n\n const api = useMemo<CarouselApi>(() => {\n const axis = (element: HTMLDivElement): { position: number, span: number, viewport: number } => orientation === 'horizontal'\n ? { position: element.scrollLeft, span: element.scrollWidth, viewport: element.clientWidth }\n : { position: element.scrollTop, span: element.scrollHeight, viewport: element.clientHeight }\n // One item, measured off the first one rather than assumed to be the viewport: a caller who gives every item `basis-1/2` gets half-viewport steps.\n const step = (element: HTMLDivElement): number => {\n const first = element.firstElementChild?.firstElementChild ?? null\n const size = first instanceof HTMLElement ? (orientation === 'horizontal' ? first.offsetWidth : first.offsetHeight) : 0\n return size > 0 ? size : axis(element).viewport\n }\n const goTo = (target: number): void => {\n const element = trackRef.current\n if (element === null) return\n const { span, viewport } = axis(element)\n const clamped = Math.min(Math.max(target, 0), Math.max(0, span - viewport))\n element.scrollTo(orientation === 'horizontal' ? { left: clamped, behavior: 'smooth' } : { top: clamped, behavior: 'smooth' })\n }\n return {\n scrollPrev: () => { const element = trackRef.current; if (element !== null) goTo(axis(element).position - step(element)) },\n scrollNext: () => { const element = trackRef.current; if (element !== null) goTo(axis(element).position + step(element)) },\n scrollTo: index => { const element = trackRef.current; if (element !== null) goTo(index * step(element)) },\n canScrollPrev: () => { const element = trackRef.current; return element !== null && axis(element).position > 1 },\n canScrollNext: () => {\n const element = trackRef.current\n if (element === null) return false\n const { position, span, viewport } = axis(element)\n return position < span - viewport - 1\n },\n selectedIndex: () => { const element = trackRef.current; return element === null ? 0 : Math.round(axis(element).position / step(element)) },\n }\n }, [orientation])\n\n const sync = useCallback(() => {\n const element = trackRef.current\n if (element === null) return\n setCanScrollPrev(api.canScrollPrev())\n setCanScrollNext(api.canScrollNext())\n }, [api])\n\n useLayoutEffect(() => {\n const element = trackRef.current\n if (element === null) return\n sync()\n element.addEventListener('scroll', sync, { passive: true })\n window.addEventListener('resize', sync)\n const observer = new ResizeObserver(sync)\n observer.observe(element)\n return () => {\n element.removeEventListener('scroll', sync)\n window.removeEventListener('resize', sync)\n observer.disconnect()\n }\n }, [sync])\n\n // A resize observer sees the viewport change, not the content: adding or removing items moves `scrollWidth` without touching the track's box.\n useEffect(() => { sync() })\n\n useEffect(() => { setApi?.(api) }, [api, setApi])\n\n const onKeyDown = (event: KeyboardEvent<HTMLDivElement>): void => {\n if (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight') return\n event.preventDefault()\n if (event.key === 'ArrowLeft') api.scrollPrev()\n else api.scrollNext()\n }\n\n const value = useMemo<CarouselContextValue>(() => ({\n trackRef,\n orientation,\n scrollPrev: api.scrollPrev,\n scrollNext: api.scrollNext,\n canScrollPrev,\n canScrollNext,\n }), [api, orientation, canScrollPrev, canScrollNext])\n\n return (\n <CarouselContext.Provider value={value}>\n <div\n onKeyDownCapture={onKeyDown}\n role=\"region\"\n aria-roledescription=\"carousel\"\n data-slot=\"carousel\"\n className={clsx(css.root, className)}\n {...rest}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n )\n}\n\n/**\n * The scroller. Give it a height directly for a vertical carousel, the way Scroll Area's own docs give one.\n * @param props - normal `<div>` attributes; `className` and `style` land on the scroller itself, which is the element that needs the height.\n * @returns the element, wrapping the flex track that holds the items.\n */\nexport function CarouselContent({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>) {\n const context = useContext(CarouselContext)\n const orientation = context?.orientation ?? 'horizontal'\n return (\n <div\n ref={element => { if (context !== null) context.trackRef.current = element }}\n data-slot=\"carousel-content\"\n data-orientation={orientation}\n className={clsx(css.content, className)}\n {...rest}\n >\n <div data-orientation={orientation} className={css.track}>{children}</div>\n </div>\n )\n}\n\n/** One slide. It takes the whole viewport by default, and a caller can narrow it (`className` with a basis) to show several at once. */\nexport function CarouselItem({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>) {\n const context = useContext(CarouselContext)\n const orientation = context?.orientation ?? 'horizontal'\n return (\n <div\n role=\"group\"\n aria-roledescription=\"slide\"\n data-slot=\"carousel-item\"\n data-orientation={orientation}\n className={clsx(css.item, className)}\n {...rest}\n >\n {children}\n </div>\n )\n}\n\nexport interface CarouselArrowProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** The button's screen-reader-only text. It defaults to the source's own wording. */\n label?: string\n}\n\n/** The button that moves the track one item towards the start. It is disabled when there is nothing before the first visible item. */\nexport function CarouselPrevious({ label = 'Previous slide', className, ...rest }: CarouselArrowProps) {\n const context = useContext(CarouselContext)\n return (\n <button\n type=\"button\"\n data-slot=\"carousel-previous\"\n data-orientation={context?.orientation ?? 'horizontal'}\n disabled={!(context?.canScrollPrev ?? false)}\n onClick={() => context?.scrollPrev()}\n className={clsx(css.arrow, css.previous, className)}\n {...rest}\n >\n <ArrowLeftIcon />\n <span className={css.srOnly}>{label}</span>\n </button>\n )\n}\n\n/** The button that moves the track one item towards the end. It is disabled when there is nothing after the last visible item. */\nexport function CarouselNext({ label = 'Next slide', className, ...rest }: CarouselArrowProps) {\n const context = useContext(CarouselContext)\n return (\n <button\n type=\"button\"\n data-slot=\"carousel-next\"\n data-orientation={context?.orientation ?? 'horizontal'}\n disabled={!(context?.canScrollNext ?? false)}\n onClick={() => context?.scrollNext()}\n className={clsx(css.arrow, css.next, className)}\n {...rest}\n >\n <ArrowRightIcon />\n <span className={css.srOnly}>{label}</span>\n </button>\n )\n}\n\nfunction ArrowLeftIcon() {\n return (\n <svg className={css.icon} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"m12 19-7-7 7-7\" />\n <path d=\"M19 12H5\" />\n </svg>\n )\n}\n\nfunction ArrowRightIcon() {\n return (\n <svg className={css.icon} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"m12 5 7 7-7 7\" />\n <path d=\"M5 12h14\" />\n </svg>\n )\n}","/**\n * Ported from shadcn/ui's Resizable (https://ui.shadcn.com/docs/components/resizable, MIT licence, registry item `resizable`, style new-york-v4, fetched\n * 2026-09-22; the underlying prop semantics are v4 of `react-resizable-panels`, whose published types were read at 4.13.2 on the same date). The item's\n * contract key is the export that is its root, `ResizablePanelGroup`, because shadcn's item exports no component named `Resizable` and a registry contract key\n * has to be a real runtime export - the same rename `DirectionProvider` took for shadcn's `direction` item, with the catalogue's category left as Resizable.\n *\n * `react-resizable-panels` is dropped and its behaviour written by hand, because a client bundle here may require only react, react/jsx-runtime and the app\n * primitives (the built-bundle test enforces it) and because the part this library needs is a small amount of arithmetic on the group's own rect. The group\n * owns the layout as a map of panel id to percentage; a separator drags its two neighbours by capturing the pointer and projecting the movement onto the\n * group's axis, and the keyboard moves the same pair by 5 percent per arrow (Home and End to an end, the source's own steps).\n *\n * Restates the anchored-listbox shape's dismissal-free half from docs/pattern-anchored-listbox.md only where it applies: there is no overlay, no registry\n * and no anchor here, so what carries over is the pointer-capture drag the Drawer port established plus the source's ARIA contract.\n *\n * What is NOT carried over, all deliberate partials recorded in manifest.yml: pixel sizes (every size here is a percentage, and the unit of a string is\n * ignored - the source reads a bare number as pixels), `collapsedThreshold`, `groupResizeBehavior`, `defaultLayout`, `disabled`, `resizePreviewMode`, the\n * imperative `panelRef`/`groupRef` handles, `useDefaultLayout` persistence, `onLayoutChanged`'s `isUserInteraction` second argument, the F6 focus walk and\n * the double-click reset. `aria-valuemin`/`aria-valuemax` report what the pair can actually reach, which is the window the source computes by simulating a\n * delta, so a neighbour that cannot shrink narrows it. Enter acts on the panel BEFORE the separator, the one the source collapses.\n */\nimport { createContext, useCallback, useContext, useEffect, useId, useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport type { CSSProperties, HTMLAttributes, KeyboardEvent, PointerEvent as ReactPointerEvent } from 'react'\nimport css from './ResizablePanelGroup.module.css'\n\nexport type ResizableOrientation = 'horizontal' | 'vertical'\n\n/** The group's layout: panel id to its share of the group, as a percentage. */\nexport type ResizableLayout = Record<string, number>\n\n/** A panel's own limits, in percent. `floor` is where a drag or a key press stops it going below. */\nexport interface ResizableBounds {\n floor: number\n ceiling: number\n}\n\ninterface PanelRegistration {\n defaultSize: number | undefined\n minSize: number\n maxSize: number\n collapsible: boolean\n collapsedSize: number\n}\n\ninterface GroupContextValue {\n orientation: ResizableOrientation\n layout: ResizableLayout\n bounds: (id: string) => ResizableBounds\n isCollapsible: (id: string) => boolean\n register: (id: string, registration: PanelRegistration) => void\n /** Move the first panel of a pair to `target`, keeping the pair's total and both panels inside their own limits. */\n applyPair: (before: string, after: string, target: number) => void\n /** Collapse a collapsible panel to its collapsed size, or back to the size it had before it collapsed. */\n toggleCollapse: (id: string, after: string) => void\n}\n\nconst ResizableGroupContext = createContext<GroupContextValue | null>(null)\n\nconst DEFAULT_BOUNDS: ResizableBounds = { floor: 0, ceiling: 100 }\nconst EPSILON = 0.0001\n\n/**\n * Read a size prop as a percentage. This port is percentages-only: a number is a percentage, and the unit of a string is ignored, so `\"50%\"` and `\"50\"`\n * both mean half. The upstream library reads a bare number as pixels, which is why its own docs write `defaultSize=\"50%\"` - the form all the documented\n * examples use, and the one this port's rule is built around.\n */\nfunction toPercent(value: number | string): number {\n const parsed = typeof value === 'number' ? value : Number.parseFloat(value)\n return Number.isFinite(parsed) ? parsed : 0\n}\n\nfunction sameRegistration(left: PanelRegistration, right: PanelRegistration): boolean {\n return left.defaultSize === right.defaultSize && left.minSize === right.minSize && left.maxSize === right.maxSize\n && left.collapsible === right.collapsible && left.collapsedSize === right.collapsedSize\n}\n\nexport interface ResizablePanelGroupProps extends HTMLAttributes<HTMLDivElement> {\n /** Which way the panels sit and are resized. Defaults to `horizontal`. */\n orientation?: ResizableOrientation\n /** Called with the whole layout, in percent, whenever it changes - the first computed one included. */\n onLayoutChange?: (layout: ResizableLayout) => void\n}\n\n/**\n * Own the layout for a set of panels and the handles between them.\n * @param props - the orientation, an optional layout callback, and normal `<div>` attributes; give it a size, since it fills its parent.\n * @returns the flex container that the panels and handles must be direct children of.\n */\nexport function ResizablePanelGroup({ orientation = 'horizontal', onLayoutChange, children, className, ...rest }: ResizablePanelGroupProps) {\n const [panels, setPanels] = useState<Record<string, PanelRegistration>>({})\n const [layout, setLayout] = useState<ResizableLayout>({})\n const expanded = useRef<Map<string, number>>(new Map())\n\n const register = useCallback((id: string, registration: PanelRegistration) => {\n setPanels(current => {\n const existing = current[id]\n if (existing !== undefined && sameRegistration(existing, registration)) return current\n return { ...current, [id]: registration }\n })\n }, [])\n\n const bounds = useCallback((id: string): ResizableBounds => {\n const entry = panels[id]\n if (entry === undefined) return DEFAULT_BOUNDS\n return { floor: entry.collapsible ? entry.collapsedSize : entry.minSize, ceiling: entry.maxSize }\n }, [panels])\n\n const isCollapsible = useCallback((id: string): boolean => panels[id]?.collapsible ?? false, [panels])\n\n // The panels register themselves, so the group does not know their sizes while it renders; this is the pass that turns their declarations into a layout,\n // and it runs before paint. Panels without a declared size share what is left, and the result is normalised to 100 so `aria-valuenow` is a true share.\n useLayoutEffect(() => {\n setLayout(current => {\n const ids = Object.keys(panels)\n if (ids.length === 0 || ids.every(id => current[id] !== undefined)) return current\n const next: ResizableLayout = {}\n const undeclared: string[] = []\n let declared = 0\n for (const id of ids) {\n const entry = panels[id] as PanelRegistration\n const size = current[id] ?? entry.defaultSize\n if (size === undefined) { undeclared.push(id); continue }\n const clamped = Math.min(Math.max(size, entry.minSize), entry.maxSize)\n next[id] = clamped\n declared += clamped\n }\n const share = undeclared.length === 0 ? 0 : Math.max(0, 100 - declared) / undeclared.length\n for (const id of undeclared) next[id] = share\n const total = Object.values(next).reduce((sum, value) => sum + value, 0)\n if (total <= 0) {\n const even = 100 / ids.length\n for (const id of ids) next[id] = even\n return next\n }\n if (Math.abs(total - 100) > EPSILON) for (const id of ids) next[id] = (next[id] as number) / total * 100\n return next\n })\n }, [panels])\n\n // Remember the size a collapsible panel had, so the key that collapses it can also bring it back.\n useEffect(() => {\n for (const [id, size] of Object.entries(layout)) {\n const entry = panels[id]\n if (entry === undefined || !entry.collapsible) continue\n if (size > entry.collapsedSize + EPSILON) expanded.current.set(id, size)\n }\n }, [layout, panels])\n\n const notified = useRef<ResizableLayout | null>(null)\n useEffect(() => {\n if (Object.keys(layout).length === 0 || notified.current === layout) return\n notified.current = layout\n onLayoutChange?.(layout)\n }, [layout, onLayoutChange])\n\n const applyPair = useCallback((before: string, after: string, target: number) => {\n setLayout(current => {\n const beforeSize = current[before]\n const afterSize = current[after]\n if (beforeSize === undefined || afterSize === undefined) return current\n const total = beforeSize + afterSize\n const beforeBounds = bounds(before)\n const afterBounds = bounds(after)\n let next = Math.min(Math.max(target, beforeBounds.floor), beforeBounds.ceiling)\n // Keep the pair's total, so the neighbour cannot be pushed past its own limits by this move.\n next = Math.min(Math.max(next, total - afterBounds.ceiling), total - afterBounds.floor)\n if (Math.abs(next - beforeSize) < EPSILON) return current\n return { ...current, [before]: next, [after]: total - next }\n })\n }, [bounds])\n\n const toggleCollapse = useCallback((id: string, after: string) => {\n const entry = panels[id]\n if (entry === undefined || !entry.collapsible) return\n const size = layout[id] ?? 0\n const collapsed = entry.collapsedSize\n const target = Math.abs(size - collapsed) < EPSILON ? expanded.current.get(id) ?? entry.minSize : collapsed\n applyPair(id, after, target)\n }, [applyPair, layout, panels])\n\n const value = useMemo<GroupContextValue>(() => ({ orientation, layout, bounds, isCollapsible, register, applyPair, toggleCollapse }),\n [orientation, layout, bounds, isCollapsible, register, applyPair, toggleCollapse])\n\n return (\n <ResizableGroupContext.Provider value={value}>\n <div data-slot=\"resizable-panel-group\" data-orientation={orientation} className={clsx(css.group, className)} {...rest}>\n {children}\n </div>\n </ResizableGroupContext.Provider>\n )\n}\n\nexport interface ResizablePanelProps extends HTMLAttributes<HTMLDivElement> {\n /** A stable id, which is also the key this panel gets in the layout. Generated when omitted. */\n id?: string\n /** Its share of the group, in percent. Panels without one share what the others leave. */\n defaultSize?: number | string\n /** The smallest it may be resized to, in percent. */\n minSize?: number | string\n /** The largest it may be resized to, in percent. Defaults to 100. */\n maxSize?: number | string\n /** Whether the key on the adjacent handle collapses it. */\n collapsible?: boolean\n /** Where it collapses to, in percent. Defaults to 0. */\n collapsedSize?: number | string\n}\n\n/**\n * One resizable area. It must be a direct child of `ResizablePanelGroup`; its own `className` and `style` land on the inner box, which is the one that\n * carries the content, while the outer box carries the size.\n * @param props - the size and limits, and normal `<div>` attributes.\n * @returns the element.\n */\nexport function ResizablePanel({ id: idProp, defaultSize, minSize, maxSize, collapsible = false, collapsedSize = 0, className, style, children, ...rest }: ResizablePanelProps) {\n const context = useContext(ResizableGroupContext)\n const generated = useId()\n const id = idProp ?? generated\n const declared = defaultSize === undefined ? undefined : toPercent(defaultSize)\n const min = toPercent(minSize ?? 0)\n const max = toPercent(maxSize ?? 100)\n const collapsed = toPercent(collapsedSize)\n const register = context?.register\n\n useEffect(() => {\n register?.(id, { defaultSize: declared, minSize: min, maxSize: max, collapsible, collapsedSize: collapsed })\n }, [register, id, declared, min, max, collapsible, collapsed])\n\n // Before the group has computed the layout, the declared shares are themselves the flex ratios, which is the same picture one pass early.\n const size = context?.layout[id] ?? declared ?? 1\n const outerStyle: CSSProperties = { flexGrow: size, flexBasis: 0, flexShrink: 0 }\n\n return (\n <div id={id} data-slot=\"resizable-panel\" data-panel className={css.panel} style={outerStyle} {...rest}>\n <div className={clsx(css.panelInner, className)} style={style}>{children}</div>\n </div>\n )\n}\n\nexport interface ResizableHandleProps extends HTMLAttributes<HTMLDivElement> {\n /** Show the small grip in the middle of the divider. It is decoration; the whole divider is the target. */\n withHandle?: boolean\n}\n\n/**\n * The divider between two panels: drag it, or focus it and use the arrow keys, Home/End, or the key that collapses a collapsible neighbour.\n * @param props - `withHandle`, and normal `<div>` attributes.\n * @returns the element, with `role=\"separator\"` and the ARIA values its panel reports.\n */\nexport function ResizableHandle({ withHandle = false, className, ...rest }: ResizableHandleProps) {\n const context = useContext(ResizableGroupContext)\n const elementRef = useRef<HTMLDivElement | null>(null)\n const drag = useRef<{ startCoordinate: number, startSize: number, length: number, pointerId: number } | null>(null)\n const [pair, setPair] = useState<{ before: string | null, after: string | null }>({ before: null, after: null })\n const [dragging, setDragging] = useState(false)\n const orientation = context?.orientation ?? 'horizontal'\n // A horizontal group's divider runs vertically, which is what both the ARIA and the module's rules key off.\n const separatorOrientation = orientation === 'horizontal' ? 'vertical' : 'horizontal'\n\n // The panels are siblings in the DOM, and reading them here is what makes this item order-independent: React runs child effects in tree order, so a\n // registry built from them would be built bottom-up.\n useLayoutEffect(() => {\n const element = elementRef.current\n if (element === null) return\n const before = element.previousElementSibling\n const after = element.nextElementSibling\n const beforeId = before instanceof HTMLElement && before.hasAttribute('data-panel') ? before.id : null\n const afterId = after instanceof HTMLElement && after.hasAttribute('data-panel') ? after.id : null\n setPair(current => (current.before === beforeId && current.after === afterId ? current : { before: beforeId, after: afterId }))\n }, [])\n\n const beforeSize = pair.before === null ? undefined : context?.layout[pair.before]\n const afterSize = pair.after === null ? undefined : context?.layout[pair.after]\n const limits = pair.before === null ? undefined : context?.bounds(pair.before)\n const neighbour = pair.after === null ? undefined : context?.bounds(pair.after)\n // What the divider can actually reach, which is not always the panel's own window: a neighbour that cannot shrink stops it sooner. The source computes\n // the same thing by simulating a delta across the pair.\n const reach =\n beforeSize === undefined || afterSize === undefined || limits === undefined || neighbour === undefined\n ? undefined\n : {\n floor: Math.round(Math.max(limits.floor, beforeSize + afterSize - neighbour.ceiling)),\n ceiling: Math.round(Math.min(limits.ceiling, beforeSize + afterSize - neighbour.floor)),\n }\n\n const shift = (delta: number): void => {\n if (pair.before === null || pair.after === null || beforeSize === undefined) return\n context?.applyPair(pair.before, pair.after, beforeSize + delta)\n }\n\n const onKeyDown = (event: KeyboardEvent<HTMLDivElement>): void => {\n switch (event.key) {\n case 'ArrowLeft': if (orientation !== 'horizontal') return; event.preventDefault(); shift(-5); break\n case 'ArrowRight': if (orientation !== 'horizontal') return; event.preventDefault(); shift(5); break\n case 'ArrowUp': if (orientation !== 'vertical') return; event.preventDefault(); shift(-5); break\n case 'ArrowDown': if (orientation !== 'vertical') return; event.preventDefault(); shift(5); break\n case 'Home': event.preventDefault(); shift(-100); break\n case 'End': event.preventDefault(); shift(100); break\n case 'Enter':\n if (pair.before === null || pair.after === null) return\n event.preventDefault()\n context?.toggleCollapse(pair.before, pair.after)\n break\n default: break\n }\n }\n\n const onPointerDown = (event: ReactPointerEvent<HTMLDivElement>): void => {\n const element = elementRef.current\n const group = element?.parentElement ?? null\n if (element === null || group === null || pair.before === null || pair.after === null) return\n const rect = group.getBoundingClientRect()\n const length = orientation === 'horizontal' ? rect.width : rect.height\n if (length <= 0) return\n element.setPointerCapture(event.pointerId)\n drag.current = {\n startCoordinate: orientation === 'horizontal' ? event.clientX : event.clientY,\n startSize: beforeSize ?? 0,\n length,\n pointerId: event.pointerId,\n }\n setDragging(true)\n }\n\n const onPointerMove = (event: ReactPointerEvent<HTMLDivElement>): void => {\n const state = drag.current\n if (state === null || pair.before === null || pair.after === null) return\n const coordinate = orientation === 'horizontal' ? event.clientX : event.clientY\n context?.applyPair(pair.before, pair.after, state.startSize + (coordinate - state.startCoordinate) / state.length * 100)\n }\n\n const endDrag = (event: ReactPointerEvent<HTMLDivElement>): void => {\n const element = elementRef.current\n if (element !== null && drag.current !== null && element.hasPointerCapture(event.pointerId)) element.releasePointerCapture(event.pointerId)\n drag.current = null\n setDragging(false)\n }\n\n return (\n <div\n ref={elementRef}\n role=\"separator\"\n aria-orientation={separatorOrientation}\n aria-controls={pair.before ?? undefined}\n aria-valuenow={beforeSize === undefined ? undefined : Math.round(beforeSize)}\n aria-valuemin={reach?.floor}\n aria-valuemax={reach?.ceiling}\n tabIndex={0}\n data-slot=\"resizable-handle\"\n data-orientation={separatorOrientation}\n data-dragging={dragging ? 'true' : 'false'}\n onKeyDown={onKeyDown}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={endDrag}\n onPointerCancel={endDrag}\n className={clsx(css.handle, className)}\n {...rest}\n >\n {withHandle ? (\n <div className={clsx(css.grip, separatorOrientation === 'horizontal' && css.gripHorizontal)}>\n <GripIcon />\n </div>\n ) : null}\n </div>\n )\n}\n\nfunction GripIcon() {\n return (\n <svg className={css.gripIcon} viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <circle cx=\"9\" cy=\"5\" r=\"1\" /><circle cx=\"9\" cy=\"12\" r=\"1\" /><circle cx=\"9\" cy=\"19\" r=\"1\" />\n <circle cx=\"15\" cy=\"5\" r=\"1\" /><circle cx=\"15\" cy=\"12\" r=\"1\" /><circle cx=\"15\" cy=\"19\" r=\"1\" />\n </svg>\n )\n}","/**\n * Ported from shadcn/ui's Menubar (https://ui.shadcn.com/docs/components/menubar, MIT licence, registry item `menubar`, style new-york-v4, fetched\n * 2026-09-22). Radix's Menubar is dropped and its behaviour written by hand, because a client bundle here may require only react, react/jsx-runtime and the\n * app primitives (the built-bundle test enforces it).\n *\n * Restates the anchored-listbox shape from docs/pattern-anchored-listbox.md: the panel is measured against its own trigger's rect in viewport coordinates\n * with viewport clamping and re-measure on resize and scroll, renders where it sits in the tree instead of through a portal, and takes focus only once it has\n * been positioned; Escape and an outside pointerdown dismiss it; the keyboard walks the items in DOM order read at key time rather than tracked in state.\n * A pattern each item restates, never an importable module - a cross-item import is what this registry's ingest gate rejects.\n *\n * Two things the bar adds to that shape, and they are the whole difference from a plain menu. (1) Roving focus: the bar is one Tab stop, not one per\n * trigger, so only the active trigger is tabbable and the arrow keys walk the bar - moving on to open the next menu when one is already open, which is how\n * a menu bar behaves. (2) Hover intent: once any menu is open, moving the pointer onto a sibling trigger switches to it, so a reader can slide along the\n * bar without clicking.\n *\n * Not carried over, recorded in manifest.yml: the submenu family (MenubarSub, MenubarSubTrigger, MenubarSubContent), which is the same deliberate partial\n * ContextMenu took, since a submenu is a nested anchored panel with its own hover-intent problem; MenubarPortal, for the same reason Sheet and Popover have\n * none - react-dom's createPortal is outside the set a client bundle may require, so an ancestor with `overflow: hidden` or a transform can clip a panel;\n * and Radix's collision-aware positioning, which this port replaces with viewport clamping. lucide's CheckIcon and CircleIcon became plain inline SVGs.\n */\nimport { createContext, useCallback, useContext, useEffect, useId, useMemo, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport type { ButtonHTMLAttributes, CSSProperties, KeyboardEvent, MutableRefObject, ReactNode } from 'react'\nimport css from './Menubar.module.css'\n\ninterface MenuContextValue {\n id: string\n isOpen: boolean\n setOpen: (open: boolean) => void\n triggerRef: MutableRefObject<HTMLButtonElement | null>\n contentRef: MutableRefObject<HTMLDivElement | null>\n}\n\ninterface BarContextValue {\n openId: string | null\n setOpenId: (id: string | null) => void\n activeId: string | null\n setActiveId: (id: string | null) => void\n barRef: MutableRefObject<HTMLDivElement | null>\n}\n\nconst BarContext = createContext<BarContextValue | null>(null)\nconst MenuContext = createContext<MenuContextValue | null>(null)\n\nexport interface MenubarProps {\n children?: ReactNode\n className?: string\n /** Called when the open menu changes, with the id of the menu that opened, or `null` when the bar closes. */\n onValueChange?: (menuId: string | null) => void\n}\n\n/** Trigger ids are derived from the menu id, so the bar can walk its triggers and know which menu each one belongs to. */\nconst triggerId = (menuId: string): string => `${menuId}-trigger`\n\n/**\n * A horizontal bar of menus. It is one Tab stop: the arrow keys walk its triggers, and they open the menu they land on when one is already open.\n * @param props - the children, a class name, and an optional open-menu callback.\n * @returns the element, with `role=\"menubar\"`.\n */\nexport function Menubar({ children, className, onValueChange }: MenubarProps) {\n const [openId, setOpenId] = useState<string | null>(null)\n const [activeId, setActiveId] = useState<string | null>(null)\n const barRef = useRef<HTMLDivElement | null>(null)\n\n // The first trigger is the bar's Tab stop until a reader reaches one of the others. Read from the DOM, because the triggers register bottom-up.\n useEffect(() => {\n if (activeId !== null) return\n const bar = barRef.current\n if (bar === null) return\n const first = bar.querySelector<HTMLElement>('[data-slot=\"menubar-trigger\"]')\n if (first?.id !== undefined && first.id !== '') setActiveId(first.id)\n }, [activeId, children])\n\n const setOpen = useCallback((id: string | null) => {\n setOpenId(id)\n onValueChange?.(id)\n }, [onValueChange])\n\n const value = useMemo<BarContextValue>(() => ({ openId, setOpenId: setOpen, activeId, setActiveId, barRef }),\n [openId, setOpen, activeId])\n\n const onKeyDown = (event: KeyboardEvent<HTMLDivElement>): void => {\n const bar = barRef.current\n if (bar === null) return\n const ids = [...bar.querySelectorAll<HTMLElement>('[data-slot=\"menubar-trigger\"]')].map(node => node.id).filter(id => id !== '')\n if (ids.length === 0) return\n const current = document.activeElement instanceof HTMLElement && ids.includes(document.activeElement.id) ? document.activeElement.id : activeId\n const at = current === null ? -1 : ids.indexOf(current)\n const focusAt = (index: number): void => {\n const next = ids[(index + ids.length) % ids.length]\n if (next === undefined) return\n setActiveId(next)\n document.getElementById(next)?.focus()\n // With a menu already open, walking the bar opens the one it lands on - a menu bar's own behaviour, and the reason this handler is on the bar.\n if (openId !== null) setOpen(next.slice(0, -'-trigger'.length))\n }\n if (event.key === 'ArrowRight') { event.preventDefault(); focusAt(at + 1); return }\n if (event.key === 'ArrowLeft') { event.preventDefault(); focusAt(at - 1); return }\n if (event.key === 'Home') { event.preventDefault(); focusAt(0); return }\n if (event.key === 'End') { event.preventDefault(); focusAt(ids.length - 1); return }\n if (event.key === 'Escape' && openId !== null) {\n event.preventDefault()\n const open = openId\n setOpen(null)\n document.getElementById(triggerId(open))?.focus()\n }\n }\n\n return (\n <BarContext.Provider value={value}>\n <div\n ref={barRef}\n data-slot=\"menubar\"\n role=\"menubar\"\n aria-orientation=\"horizontal\"\n onKeyDown={onKeyDown}\n onBlur={event => { if (!event.currentTarget.contains(event.relatedTarget)) setOpen(null) }}\n className={clsx(css.menubar, className)}\n >\n {children}\n </div>\n </BarContext.Provider>\n )\n}\n\n/**\n * One menu in the bar: its trigger and its panel. It renders no element of its own; what it does is pair the two and hold their open state.\n * @param props - the trigger and the panel.\n * @returns the children, inside this menu's context.\n */\nexport function MenubarMenu({ children }: { children?: ReactNode }) {\n const bar = useContext(BarContext)\n const id = useId()\n const triggerRef = useRef<HTMLButtonElement | null>(null)\n const contentRef = useRef<HTMLDivElement | null>(null)\n const isOpen = bar?.openId === id\n const value = useMemo<MenuContextValue>(() => ({\n id,\n isOpen,\n setOpen: (open: boolean) => bar?.setOpenId(open ? id : null),\n triggerRef,\n contentRef,\n }), [bar, id, isOpen])\n return <MenuContext.Provider value={value}>{children}</MenuContext.Provider>\n}\n\n/**\n * The bar's visible button. Enter, Space and ArrowDown open its menu; the arrow keys across the bar are the bar's own.\n * @param props - the label and normal `<button>` attributes.\n * @returns the element.\n */\nexport function MenubarTrigger({ children, className, ...rest }: { children?: ReactNode, className?: string } & Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'id'>) {\n const bar = useContext(BarContext)\n const menu = useContext(MenuContext)\n const isOpen = menu?.isOpen ?? false\n const isActive = bar?.activeId === (menu === null ? null : triggerId(menu.id))\n return (\n <button\n type=\"button\"\n ref={element => { if (menu !== null) menu.triggerRef.current = element }}\n id={menu === null ? undefined : triggerId(menu.id)}\n data-slot=\"menubar-trigger\"\n role=\"menuitem\"\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n aria-controls={menu === null ? undefined : `${menu.id}-content`}\n data-state={isOpen ? 'open' : 'closed'}\n tabIndex={isActive ? 0 : -1}\n className={clsx(css.trigger, className)}\n onFocus={() => bar?.setActiveId(menu === null ? null : triggerId(menu.id))}\n onClick={() => menu?.setOpen(!isOpen)}\n onPointerEnter={() => { if ((bar?.openId ?? null) !== null && !isOpen) menu?.setOpen(true) }}\n onKeyDown={event => {\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n menu?.setOpen(true)\n return\n }\n if (event.key === 'Escape') { event.preventDefault(); menu?.setOpen(false) }\n }}\n {...rest}\n >\n {children}\n </button>\n )\n}\n\nexport interface MenubarContentProps {\n align?: 'start' | 'center' | 'end'\n alignOffset?: number\n sideOffset?: number\n children?: ReactNode\n className?: string\n}\n\n/**\n * The panel that hangs under this menu's trigger. It renders nothing until the menu is open.\n * @param props - the alignment, the offsets, and the panel's content.\n * @returns the element, or nothing.\n */\nexport function MenubarContent({ align = 'start', alignOffset = -4, sideOffset = 8, children, className }: MenubarContentProps) {\n const menu = useContext(MenuContext)\n const isOpen = menu?.isOpen ?? false\n const [style, setStyle] = useState<CSSProperties>({ visibility: 'hidden' })\n const [positioned, setPositioned] = useState(false)\n\n useEffect(() => {\n if (!isOpen) { setPositioned(false); return }\n const measure = (): void => {\n const trigger = menu?.triggerRef.current\n const panel = menu?.contentRef.current\n if (trigger === null || trigger === undefined || panel === null || panel === undefined) return\n const rect = trigger.getBoundingClientRect()\n const width = panel.offsetWidth\n const ideal = align === 'start' ? rect.left : align === 'end' ? rect.right - width : rect.left + rect.width / 2 - width / 2\n const left = Math.min(Math.max(ideal + alignOffset, 8), Math.max(8, window.innerWidth - width - 8))\n const below = rect.bottom + sideOffset\n const top = below + panel.offsetHeight > window.innerHeight - 8 ? Math.max(8, rect.top - sideOffset - panel.offsetHeight) : below\n setStyle({ left, top })\n setPositioned(true)\n }\n measure()\n window.addEventListener('resize', measure)\n window.addEventListener('scroll', measure, true)\n return () => { window.removeEventListener('resize', measure); window.removeEventListener('scroll', measure, true) }\n }, [isOpen, menu, align, alignOffset, sideOffset])\n\n // Focus waits for the positioning pass: the panel starts hidden, and a focus() in the same commit as the first measure lands on a hidden element and does\n // nothing. Popover's port learned this the same way.\n useEffect(() => {\n if (positioned) menu?.contentRef.current?.focus()\n }, [positioned, menu])\n\n useEffect(() => {\n if (!isOpen || menu === null) return\n const close = (): void => { menu.setOpen(false); menu.triggerRef.current?.focus() }\n /** The items a keyboard walk moves through, in DOM order. */\n const walkable = (): string[] => {\n const root = menu.contentRef.current\n if (root === null) return []\n return [...root.querySelectorAll<HTMLElement>('[role=\"menuitem\"], [role=\"menuitemcheckbox\"], [role=\"menuitemradio\"]')]\n .filter(node => node.getAttribute('data-disabled') !== 'true')\n .map(node => node.id)\n .filter(id => id !== '')\n }\n const highlight = (id: string | null): void => {\n const root = menu.contentRef.current\n if (root === null) return\n for (const node of root.querySelectorAll<HTMLElement>('[data-highlighted=\"true\"]')) node.setAttribute('data-highlighted', 'false')\n if (id === null) return\n const next = document.getElementById(id)\n next?.setAttribute('data-highlighted', 'true')\n next?.scrollIntoView({ block: 'nearest' })\n }\n const move = (delta: number): void => {\n const ids = walkable()\n if (ids.length === 0) return\n const root = menu.contentRef.current\n const current = [...(root?.querySelectorAll<HTMLElement>('[data-highlighted=\"true\"]') ?? [])][0]?.id\n const at = current === undefined ? -1 : ids.indexOf(current)\n highlight(ids[at === -1 ? (delta > 0 ? 0 : ids.length - 1) : (at + delta + ids.length) % ids.length] ?? null)\n }\n const onKeyDown = (event: globalThis.KeyboardEvent): void => {\n if (event.key === 'Escape') { close(); return }\n if (event.key === 'ArrowDown') { event.preventDefault(); move(1); return }\n if (event.key === 'ArrowUp') { event.preventDefault(); move(-1); return }\n if (event.key === 'Home') { event.preventDefault(); highlight(walkable()[0] ?? null); return }\n if (event.key === 'End') { event.preventDefault(); const ids = walkable(); highlight(ids[ids.length - 1] ?? null); return }\n if (event.key === 'Enter' || event.key === ' ') {\n const root = menu.contentRef.current\n const current = [...(root?.querySelectorAll<HTMLElement>('[data-highlighted=\"true\"]') ?? [])][0]\n if (current === undefined) return\n event.preventDefault()\n current.click()\n }\n }\n const onPointerDown = (event: globalThis.PointerEvent): void => {\n const target = event.target as Node | null\n if (target === null) return\n // A press on any trigger in the bar is the bar's own business: it either toggles that menu or switches to it.\n if (target instanceof Element && target.closest('[data-slot=\"menubar-trigger\"]') !== null) return\n if (menu.contentRef.current?.contains(target) === true) return\n menu.setOpen(false)\n }\n document.addEventListener('keydown', onKeyDown)\n document.addEventListener('pointerdown', onPointerDown)\n return () => { document.removeEventListener('keydown', onKeyDown); document.removeEventListener('pointerdown', onPointerDown) }\n }, [isOpen, menu])\n\n if (!isOpen) return null\n return (\n <div\n ref={element => { if (menu !== null) menu.contentRef.current = element }}\n id={menu === null ? undefined : `${menu.id}-content`}\n data-slot=\"menubar-content\"\n role=\"menu\"\n tabIndex={-1}\n aria-labelledby={menu === null ? undefined : triggerId(menu.id)}\n className={clsx(css.content, className)}\n style={style}\n >\n {children}\n </div>\n )\n}\n\nexport interface MenubarItemProps {\n inset?: boolean\n variant?: 'default' | 'destructive'\n disabled?: boolean\n onSelect?: () => void\n children?: ReactNode\n className?: string\n}\n\n/** One action. `data-inset` indents it for rows that carry an indicator beside them. */\nexport function MenubarItem({ inset = false, variant = 'default', disabled = false, onSelect, children, className }: MenubarItemProps) {\n const menu = useContext(MenuContext)\n const id = useId()\n const highlight = (): void => {\n const root = menu?.contentRef.current\n if (root === null || root === undefined) return\n for (const node of root.querySelectorAll<HTMLElement>('[data-highlighted=\"true\"]')) node.setAttribute('data-highlighted', 'false')\n document.getElementById(id)?.setAttribute('data-highlighted', 'true')\n }\n return (\n <div\n id={id}\n data-slot=\"menubar-item\"\n role=\"menuitem\"\n aria-disabled={disabled}\n data-disabled={disabled}\n data-inset={inset}\n data-variant={variant}\n data-highlighted=\"false\"\n className={clsx(css.item, className)}\n onClick={() => { if (disabled) return; onSelect?.(); menu?.setOpen(false) }}\n onPointerMove={highlight}\n >\n {children}\n </div>\n )\n}\n\nexport interface MenubarCheckboxItemProps extends Omit<MenubarItemProps, 'variant'> {\n checked?: boolean\n onCheckedChange?: (checked: boolean) => void\n}\n\n/** A row that holds its own state: it stays open when it is used, which is what a checkbox row is for. */\nexport function MenubarCheckboxItem({ checked = false, inset = false, disabled = false, onCheckedChange, children, className }: MenubarCheckboxItemProps) {\n const menu = useContext(MenuContext)\n const id = useId()\n return (\n <div\n id={id}\n data-slot=\"menubar-checkbox-item\"\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n aria-disabled={disabled}\n data-disabled={disabled}\n data-inset={inset}\n data-highlighted=\"false\"\n className={clsx(css.item, className)}\n onClick={() => { if (disabled) return; onCheckedChange?.(!checked) }}\n onPointerMove={() => {\n const root = menu?.contentRef.current\n if (root === null || root === undefined) return\n for (const node of root.querySelectorAll<HTMLElement>('[data-highlighted=\"true\"]')) node.setAttribute('data-highlighted', 'false')\n document.getElementById(id)?.setAttribute('data-highlighted', 'true')\n }}\n >\n <span data-slot=\"menubar-indicator\" className={css.indicator}>\n {checked ? <CheckIcon /> : null}\n </span>\n {children}\n </div>\n )\n}\n\ninterface RadioContextValue { value: string | null, setValue: (value: string) => void }\nconst RadioGroupContext = createContext<RadioContextValue | null>(null)\n\n/** A set of rows where only one is chosen. */\nexport function MenubarRadioGroup({ value: controlledValue, defaultValue = null, onValueChange, children, className }: { value?: string | null, defaultValue?: string | null, onValueChange?: (value: string) => void, children?: ReactNode, className?: string }) {\n const [uncontrolled, setUncontrolled] = useState<string | null>(defaultValue)\n const value = controlledValue === undefined ? uncontrolled : controlledValue\n const radio = useMemo<RadioContextValue>(() => ({\n value,\n setValue: next => { if (controlledValue === undefined) setUncontrolled(next); onValueChange?.(next) },\n }), [value, controlledValue, onValueChange])\n return (\n <RadioGroupContext.Provider value={radio}>\n <div data-slot=\"menubar-radio-group\" role=\"group\" className={className}>{children}</div>\n </RadioGroupContext.Provider>\n )\n}\n\n/** One choice inside a radio group. */\nexport function MenubarRadioItem({ value, inset = false, disabled = false, children, className }: { value: string, inset?: boolean, disabled?: boolean, children?: ReactNode, className?: string }) {\n const menu = useContext(MenuContext)\n const radio = useContext(RadioGroupContext)\n const id = useId()\n const checked = radio?.value === value\n return (\n <div\n id={id}\n data-slot=\"menubar-radio-item\"\n role=\"menuitemradio\"\n aria-checked={checked}\n aria-disabled={disabled}\n data-disabled={disabled}\n data-inset={inset}\n data-highlighted=\"false\"\n className={clsx(css.item, className)}\n onClick={() => { if (disabled) return; radio?.setValue(value) }}\n onPointerMove={() => {\n const root = menu?.contentRef.current\n if (root === null || root === undefined) return\n for (const node of root.querySelectorAll<HTMLElement>('[data-highlighted=\"true\"]')) node.setAttribute('data-highlighted', 'false')\n document.getElementById(id)?.setAttribute('data-highlighted', 'true')\n }}\n >\n <span data-slot=\"menubar-indicator\" className={css.indicator}>\n {checked ? <CircleIcon /> : null}\n </span>\n {children}\n </div>\n )\n}\n\n/** A heading inside a panel. */\nexport function MenubarLabel({ inset = false, children, className }: { inset?: boolean, children?: ReactNode, className?: string }) {\n return <div data-slot=\"menubar-label\" data-inset={inset} className={clsx(css.label, className)}>{children}</div>\n}\n\n/** A rule between groups of rows. */\nexport function MenubarSeparator({ className }: { className?: string }) {\n return <div data-slot=\"menubar-separator\" role=\"separator\" className={clsx(css.separator, className)} />\n}\n\n/** The keyboard hint beside a row. */\nexport function MenubarShortcut({ children, className }: { children?: ReactNode, className?: string }) {\n return <span data-slot=\"menubar-shortcut\" className={clsx(css.shortcut, className)}>{children}</span>\n}\n\n/** A named group of rows inside a panel. */\nexport function MenubarGroup({ children, className }: { children?: ReactNode, className?: string }) {\n return <div data-slot=\"menubar-group\" role=\"group\" className={clsx(css.group, className)}>{children}</div>\n}\n\nfunction CheckIcon() {\n return <svg className={css.icon} viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\"><path d=\"M3.5 8.5l3 3 6-6\" stroke=\"currentColor\" strokeWidth=\"1.5\" /></svg>\n}\n\nfunction CircleIcon() {\n return <svg className={css.icon} viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\"><circle cx=\"8\" cy=\"8\" r=\"3\" /></svg>\n}","/**\n * Ported from shadcn/ui's Navigation Menu (https://ui.shadcn.com/docs/components/navigation-menu, MIT licence, registry item `navigation-menu`, style\n * new-york-v4, fetched 2026-09-22). Radix's NavigationMenu is dropped and its behaviour written by hand, because a client bundle here may require only react,\n * react/jsx-runtime and the app primitives (the built-bundle test enforces it).\n *\n * Restates the anchored-listbox shape from docs/pattern-anchored-listbox.md for the parts that transfer - the panel is measured in viewport coordinates with\n * viewport clamping and a re-measure on resize and scroll, renders where it sits in the tree rather than through a portal, takes focus only once it is\n * positioned, and Escape and an outside pointerdown dismiss it. A pattern each item restates, never an importable module.\n *\n * Two things make this a navigation menu rather than a menubar, and both are the source's own deltas. (1) Delayed hover: hovering a trigger opens its panel\n * after a moment, because a pointer travelling across a bar should not flash panels on the way; once a panel is open, though, moving onto a sibling switches\n * immediately, so a reader can slide along the bar. It closes when the pointer has left both the bar and the panel for a short grace period. (2) A shared\n * panel: every item's panel is placed at the same coordinates, under the whole list, so switching items does not move the panel a reader is looking at -\n * which is what the source's viewport achieves by moving the open panel into one box, a move this port cannot make without a portal. `NavigationMenuViewport`\n * therefore paints the shared surface at the open panel's own box, and the panels themselves draw no surface while a viewport is in play.\n *\n * Not carried over, recorded in manifest.yml: `NavigationMenuIndicator` (the animated arrow under the open trigger) and Radix's panel morph animation, which\n * would need measurements of both panels mid-switch; and `navigationMenuTriggerStyle` is a function returning this module's own trigger class rather than the\n * source's `cva` class string, because this library publishes hashed module classes, not utility classes a caller could compose.\n */\nimport { createContext, useCallback, useContext, useEffect, useId, useMemo, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport type { CSSProperties, HTMLAttributes, KeyboardEvent, MutableRefObject, ReactNode } from 'react'\nimport css from './NavigationMenu.module.css'\n\n/** How long a pointer has to rest on a trigger before its panel opens, and how long it may be away from bar and panel before that panel closes. */\nconst OPEN_DELAY_MS = 150\nconst CLOSE_GRACE_MS = 250\n\ninterface NavigationMenuContextValue {\n openId: string | null\n activeId: string | null\n viewportEnabled: boolean\n listRef: MutableRefObject<HTMLUListElement | null>\n setActiveId: (id: string | null) => void\n openNow: (id: string | null) => void\n scheduleOpen: (id: string) => void\n keepOpen: () => void\n scheduleClose: () => void\n}\n\nconst NavigationMenuContext = createContext<NavigationMenuContextValue | null>(null)\n\ninterface ItemContextValue {\n id: string\n isOpen: boolean\n triggerRef: MutableRefObject<HTMLButtonElement | null>\n contentRef: MutableRefObject<HTMLDivElement | null>\n setOpen: (open: boolean) => void\n scheduleOpen: () => void\n}\n\nconst ItemContext = createContext<ItemContextValue | null>(null)\n\nconst triggerId = (itemId: string): string => `${itemId}-trigger`\n\nexport interface NavigationMenuProps extends HTMLAttributes<HTMLElement> {\n /** Whether the bar renders a shared panel surface under itself. The source defaults to true and so does this port. */\n viewport?: boolean\n}\n\n/**\n * A bar of links whose panels share one surface under the whole bar.\n * @param props - the children, whether to render the viewport, and normal attributes; it renders a `<nav>`.\n * @returns the element.\n */\nexport function NavigationMenu({ viewport = true, children, className, ...rest }: NavigationMenuProps) {\n const [openId, setOpenId] = useState<string | null>(null)\n const [activeId, setActiveId] = useState<string | null>(null)\n const listRef = useRef<HTMLUListElement | null>(null)\n const openTimer = useRef<number | null>(null)\n const closeTimer = useRef<number | null>(null)\n\n const clearTimers = useCallback(() => {\n if (openTimer.current !== null) { window.clearTimeout(openTimer.current); openTimer.current = null }\n if (closeTimer.current !== null) { window.clearTimeout(closeTimer.current); closeTimer.current = null }\n }, [])\n useEffect(() => clearTimers, [clearTimers])\n\n const openNow = useCallback((id: string | null) => { clearTimers(); setOpenId(id) }, [clearTimers])\n const scheduleOpen = useCallback((id: string) => {\n clearTimers()\n openTimer.current = window.setTimeout(() => { openTimer.current = null; setOpenId(id) }, OPEN_DELAY_MS)\n }, [clearTimers])\n const keepOpen = useCallback(() => {\n if (closeTimer.current !== null) { window.clearTimeout(closeTimer.current); closeTimer.current = null }\n }, [])\n const scheduleClose = useCallback(() => {\n clearTimers()\n closeTimer.current = window.setTimeout(() => { closeTimer.current = null; setOpenId(null) }, CLOSE_GRACE_MS)\n }, [clearTimers])\n\n // The first trigger is the bar's Tab stop until a reader reaches one of the others. Read from the DOM, because triggers register bottom-up.\n useEffect(() => {\n if (activeId !== null) return\n const list = listRef.current\n if (list === null) return\n const first = list.querySelector<HTMLElement>('[data-slot=\"navigation-menu-trigger\"]')\n if (first?.id !== undefined && first.id !== '') setActiveId(first.id)\n }, [activeId, children])\n\n useEffect(() => {\n if (openId === null) return\n const onPointerDown = (event: globalThis.PointerEvent): void => {\n const target = event.target as Node | null\n if (target === null) return\n if (target instanceof Element && target.closest('[data-slot=\"navigation-menu-trigger\"]') !== null) return\n if (target instanceof Element && target.closest('[data-slot=\"navigation-menu-content\"]') !== null) return\n if (target instanceof Element && target.closest('[data-slot=\"navigation-menu-list\"]') !== null) return\n openNow(null)\n }\n document.addEventListener('pointerdown', onPointerDown)\n return () => document.removeEventListener('pointerdown', onPointerDown)\n }, [openId, openNow])\n\n const value = useMemo<NavigationMenuContextValue>(() => ({\n openId, activeId, viewportEnabled: viewport, listRef, setActiveId, openNow, scheduleOpen, keepOpen, scheduleClose,\n }), [openId, activeId, viewport, openNow, scheduleOpen, keepOpen, scheduleClose])\n\n const onKeyDown = (event: KeyboardEvent<HTMLElement>): void => {\n const list = listRef.current\n if (list === null) return\n const ids = [...list.querySelectorAll<HTMLElement>('[data-slot=\"navigation-menu-trigger\"]')].map(node => node.id).filter(id => id !== '')\n if (ids.length === 0) return\n const current = document.activeElement instanceof HTMLElement && ids.includes(document.activeElement.id) ? document.activeElement.id : activeId\n const at = current === null ? -1 : ids.indexOf(current)\n const focusAt = (index: number): void => {\n const next = ids[(index + ids.length) % ids.length]\n if (next === undefined) return\n setActiveId(next)\n document.getElementById(next)?.focus()\n if (openId !== null) setOpenId(next.slice(0, -'-trigger'.length))\n }\n if (event.key === 'ArrowRight') { event.preventDefault(); focusAt(at + 1); return }\n if (event.key === 'ArrowLeft') { event.preventDefault(); focusAt(at - 1); return }\n if (event.key === 'Home') { event.preventDefault(); focusAt(0); return }\n if (event.key === 'End') { event.preventDefault(); focusAt(ids.length - 1); return }\n if (event.key === 'Escape' && openId !== null) {\n event.preventDefault()\n const open = openId\n openNow(null)\n document.getElementById(triggerId(open))?.focus()\n }\n }\n\n return (\n <NavigationMenuContext.Provider value={value}>\n <nav\n data-slot=\"navigation-menu\"\n data-viewport={viewport ? 'true' : 'false'}\n onKeyDown={onKeyDown}\n onPointerLeave={scheduleClose}\n onPointerEnter={keepOpen}\n className={clsx(css.root, className)}\n {...rest}\n >\n {children}\n {viewport ? <NavigationMenuViewport /> : null}\n </nav>\n </NavigationMenuContext.Provider>\n )\n}\n\n/** The `<ul>` the items sit in. Its own element is what the shared panel measures itself against. */\nexport function NavigationMenuList({ children, className, ...rest }: HTMLAttributes<HTMLUListElement>) {\n const context = useContext(NavigationMenuContext)\n return (\n <ul\n ref={element => { if (context !== null) context.listRef.current = element }}\n data-slot=\"navigation-menu-list\"\n className={clsx(css.list, className)}\n {...rest}\n >\n {children}\n </ul>\n )\n}\n\n/** One item: a trigger and the panel it opens. */\nexport function NavigationMenuItem({ children, className, ...rest }: HTMLAttributes<HTMLLIElement>) {\n const bar = useContext(NavigationMenuContext)\n const id = useId()\n const triggerRef = useRef<HTMLButtonElement | null>(null)\n const contentRef = useRef<HTMLDivElement | null>(null)\n const isOpen = bar?.openId === id\n const value = useMemo<ItemContextValue>(() => ({\n id,\n isOpen,\n triggerRef,\n contentRef,\n setOpen: (open: boolean) => (open ? bar?.openNow(id) : bar?.openNow(null)),\n scheduleOpen: () => bar?.scheduleOpen(id),\n }), [bar, id, isOpen])\n return (\n <ItemContext.Provider value={value}>\n <li data-slot=\"navigation-menu-item\" className={clsx(css.item, className)} {...rest}>{children}</li>\n </ItemContext.Provider>\n )\n}\n\n/**\n * The trigger: a button that opens this item's panel. It opens on a hover that rests, immediately when any panel is already open, and on Enter, Space or\n * ArrowDown from the keyboard.\n */\nexport function NavigationMenuTrigger({ children, className, ...rest }: ButtonAsButtonProps) {\n const bar = useContext(NavigationMenuContext)\n const item = useContext(ItemContext)\n if (item === null) throw new Error('NavigationMenuTrigger must be used within a NavigationMenuItem')\n const isOpen = item.isOpen\n return (\n <button\n type=\"button\"\n ref={element => { item.triggerRef.current = element }}\n id={triggerId(item.id)}\n data-slot=\"navigation-menu-trigger\"\n aria-expanded={isOpen}\n aria-controls={`${item.id}-content`}\n data-state={isOpen ? 'open' : 'closed'}\n tabIndex={bar?.activeId === triggerId(item.id) ? 0 : -1}\n className={clsx(css.trigger, className)}\n onFocus={() => bar?.setActiveId(triggerId(item.id))}\n onPointerEnter={() => {\n if (isOpen) return\n if ((bar?.openId ?? null) === null) item.scheduleOpen()\n else bar?.openNow(item.id)\n }}\n onClick={() => item.setOpen(!isOpen)}\n onKeyDown={event => {\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') { event.preventDefault(); item.setOpen(true) }\n else if (event.key === 'Escape') { event.preventDefault(); item.setOpen(false) }\n }}\n {...rest}\n >\n {children}\n <svg className={css.chevron} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n )\n}\n\nexport interface NavigationMenuContentProps {\n children?: ReactNode\n className?: string\n}\n\n/**\n * This item's panel. Every item's panel is placed at the same coordinates, under the whole list, so switching items does not move it.\n * @param props - the panel's content and a class name.\n * @returns the element, or nothing while the item is closed.\n */\nexport function NavigationMenuContent({ children, className }: NavigationMenuContentProps) {\n const bar = useContext(NavigationMenuContext)\n const item = useContext(ItemContext)\n const isOpen = item?.isOpen ?? false\n const [style, setStyle] = useState<CSSProperties>({ visibility: 'hidden' })\n const [positioned, setPositioned] = useState(false)\n const shared = bar?.viewportEnabled ?? false\n\n useEffect(() => {\n if (!isOpen) { setPositioned(false); return }\n const measure = (): void => {\n const list = bar?.listRef.current\n const panel = item?.contentRef.current\n if (list === null || list === undefined || panel === null || panel === undefined) return\n const rect = list.getBoundingClientRect()\n const width = panel.offsetWidth\n const left = Math.min(Math.max(rect.left, 8), Math.max(8, window.innerWidth - width - 8))\n const below = rect.bottom + 8\n const top = below + panel.offsetHeight > window.innerHeight - 8 ? Math.max(8, rect.top - 8 - panel.offsetHeight) : below\n setStyle({ left, top })\n setPositioned(true)\n }\n measure()\n window.addEventListener('resize', measure)\n window.addEventListener('scroll', measure, true)\n return () => { window.removeEventListener('resize', measure); window.removeEventListener('scroll', measure, true) }\n }, [isOpen, bar, item])\n\n useEffect(() => {\n if (!isOpen) return\n const onKeyDown = (event: globalThis.KeyboardEvent): void => {\n if (event.key !== 'Escape' || item == null) return\n item.setOpen(false)\n item.triggerRef.current?.focus()\n }\n document.addEventListener('keydown', onKeyDown)\n return () => document.removeEventListener('keydown', onKeyDown)\n }, [isOpen, item])\n\n if (!isOpen) return null\n return (\n <div\n ref={element => { if (item != null) item.contentRef.current = element }}\n id={item == null ? undefined : `${item.id}-content`}\n data-slot=\"navigation-menu-content\"\n data-state={positioned ? 'open' : 'pending'}\n data-shared-surface={shared ? 'true' : 'false'}\n className={clsx(css.content, className)}\n style={style}\n onPointerEnter={() => bar?.keepOpen()}\n onPointerLeave={() => bar?.scheduleClose()}\n >\n {children}\n </div>\n )\n}\n\n/**\n * The shared surface under the bar, drawn at the open panel's own box. It paints the panel's background and border so that the panel itself can stay\n * transparent and every item's panel can sit at the same coordinates.\n * @returns the element, or nothing while every item is closed.\n */\nexport function NavigationMenuViewport({ className }: { className?: string }) {\n const bar = useContext(NavigationMenuContext)\n const isOpen = (bar?.openId ?? null) !== null\n const [style, setStyle] = useState<CSSProperties>({ visibility: 'hidden' })\n const [positioned, setPositioned] = useState(false)\n\n useEffect(() => {\n if (!isOpen) { setPositioned(false); return }\n const observer = new ResizeObserver(() => { measure() })\n let observed: HTMLElement | null = null\n function measure(): void {\n const panel = document.querySelector<HTMLElement>('[data-slot=\"navigation-menu-content\"][data-state=\"open\"]')\n if (panel === null) return\n if (panel !== observed) { observer.disconnect(); observed = panel; observer.observe(panel) }\n const rect = panel.getBoundingClientRect()\n setStyle({ left: rect.left, top: rect.top, width: rect.width, height: rect.height })\n setPositioned(true)\n }\n // The panel only becomes queryable one commit after this effect runs - it publishes data-state=open as its own measurement lands - so the first\n // measure waits a frame instead of being taken now, and a resize observer keeps the surface with it afterwards.\n const frame = window.requestAnimationFrame(measure)\n window.addEventListener('resize', measure)\n window.addEventListener('scroll', measure, true)\n return () => {\n window.cancelAnimationFrame(frame)\n observer.disconnect()\n window.removeEventListener('resize', measure)\n window.removeEventListener('scroll', measure, true)\n }\n }, [isOpen, bar])\n\n if (!isOpen) return null\n return (\n <div\n data-slot=\"navigation-menu-viewport\"\n data-state={positioned ? 'open' : 'closed'}\n aria-hidden=\"true\"\n className={clsx(css.viewport, className)}\n style={style}\n />\n )\n}\n\n/** A link. `active` marks the current page, which is what `aria-current` reports. */\nexport function NavigationMenuLink({ active = false, className, children, ...rest }: AnchorAsAnchorProps & { active?: boolean }) {\n return (\n <a\n data-slot=\"navigation-menu-link\"\n data-active={active ? 'true' : 'false'}\n aria-current={active ? 'page' : undefined}\n className={clsx(css.link, className)}\n {...rest}\n >\n {children}\n </a>\n )\n}\n\n/**\n * The source's `cva` class string, as a function returning this module's own trigger class. A caller composing utility classes has no equivalent here - this\n * library publishes hashed module classes, so the function exists to keep the source's call shape, not to be composed.\n * @returns the class name that makes a link look like a trigger.\n */\nexport function navigationMenuTriggerStyle(): string {\n return css.trigger ?? ''\n}\n\ntype ButtonAsButtonProps = { children?: ReactNode, className?: string } & Omit<HTMLAttributes<HTMLButtonElement>, 'id'>\ntype AnchorAsAnchorProps = { children?: ReactNode, className?: string } & Omit<HTMLAttributes<HTMLAnchorElement>, 'aria-current'>","/**\n * Ported from shadcn/ui's Calendar (https://ui.shadcn.com/docs/components/calendar, MIT licence, registry item `calendar`, style new-york-v4, fetched\n * 2026-09-22). `react-day-picker` and `date-fns` are dropped and the month grid is hand-rolled: the item upstream is a theme over a date-picker engine, and the\n * engine is the part this library can write itself with the platform's own date arithmetic and `Intl` for the names, the same call ScrollArea made for the\n * platform's scroller and Carousel made for CSS scroll snap.\n *\n * What shipped: one month at a time, a real `role=\"grid\"` of columns and rows, single and range selection, `showOutsideDays`, a `weekStartsOn`, a day-level\n * `disabled` predicate, today marked, and the keyboard model a date grid needs - a roving tab stop on the focused day, arrows by day and by week, Home and\n * End to the week's ends, PageUp/PageDown by month, Enter or Space to choose. The month a reader is looking at follows the focused day, so paging by key\n * moves the grid rather than losing focus off the end of it.\n *\n * What did NOT come with it, all recorded in manifest.yml as deliberate partials: `react-day-picker`'s multi-month (`numberOfMonths`), its dropdown caption\n * layout, its week numbers, its `formatters`/`classNames`/`components` extension points (a consumer styles this port through its `data-*` hooks and\n * `className` instead), its uncontrolled `defaultSelected`, its rich disabled matchers (dates, ranges, day-of-week sets - this port takes a predicate), and\n * its `CalendarDayButton` export, whose purpose upstream is to let a caller replace the day button. Selection is controlled: `selected` and `onSelect`.\n */\nimport { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react'\nimport clsx from 'clsx'\nimport type { KeyboardEvent, ReactNode } from 'react'\nimport css from './Calendar.module.css'\n\nexport type CalendarMode = 'single' | 'range'\n\n/** A range as this item reports it: either end may still be open while a reader is choosing. */\nexport interface CalendarRange {\n from: Date | null\n to: Date | null\n}\n\nexport type CalendarSelection = Date | CalendarRange\n\nexport interface CalendarProps {\n /** `single` chooses one day, `range` chooses two and shades what lies between them. */\n mode?: CalendarMode\n /** The chosen day, or the chosen range. Controlled, so the caller owns it. */\n selected?: CalendarSelection\n /** Called with the next selection: a date in `single` mode, a range in `range` mode. */\n onSelect?: (selection: CalendarSelection) => void\n /** The month on screen. Controlled alongside `onMonthChange`. */\n month?: Date\n /** The month on screen to start from, when the caller does not control it. */\n defaultMonth?: Date\n /** Called when the reader pages to another month. */\n onMonthChange?: (month: Date) => void\n /** Whether the days of the neighbouring months are shown greyed. Defaults to true, as upstream does. */\n showOutsideDays?: boolean\n /** Which day a week starts on, 0 being Sunday. Defaults to 0, the en-US week upstream assumes. */\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n /** A BCP 47 tag for the month and weekday names. Defaults to `en-US`. */\n locale?: string\n /** Days this returns true for are shown, marked and unselectable. */\n disabled?: (date: Date) => boolean\n className?: string\n children?: ReactNode\n}\n\nconst startOfDay = (date: Date): Date => new Date(date.getFullYear(), date.getMonth(), date.getDate())\nconst startOfMonth = (date: Date): Date => new Date(date.getFullYear(), date.getMonth(), 1)\nconst addDays = (date: Date, days: number): Date => new Date(date.getFullYear(), date.getMonth(), date.getDate() + days)\n// Clamped to the target month's length: the Date constructor would roll 31 March plus a month into 1 May.\nconst addMonths = (date: Date, months: number): Date => {\n const target = new Date(date.getFullYear(), date.getMonth() + months, 1)\n return new Date(target.getFullYear(), target.getMonth(), Math.min(date.getDate(), daysInMonth(target)))\n}\nconst sameDay = (left: Date, right: Date): boolean => left.getFullYear() === right.getFullYear() && left.getMonth() === right.getMonth() && left.getDate() === right.getDate()\n/** The key a day is addressable by, in the DOM and in state. Local, so a reader in any zone sees the date they clicked. */\nconst dayKey = (date: Date): string => `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`\nconst daysInMonth = (date: Date): number => new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate()\n\nconst asRange = (selection: CalendarSelection | undefined): CalendarRange => {\n if (selection === undefined) return { from: null, to: null }\n return selection instanceof Date ? { from: selection, to: null } : selection\n}\n\n/**\n * Show one month as a grid of days and report what is chosen.\n * @param props - the mode, the selection, the month, the week start, the locale, a disabled predicate, and a class name.\n * @returns the element: a caption with the paging buttons above a `role=\"grid\"`.\n */\nexport function Calendar({ mode = 'single', selected, onSelect, month: controlledMonth, defaultMonth, onMonthChange, showOutsideDays = true, weekStartsOn = 0, locale = 'en-US', disabled, className }: CalendarProps) {\n const today = useMemo(() => startOfDay(new Date()), [])\n const range = asRange(selected)\n const [uncontrolledMonth, setUncontrolledMonth] = useState(() => startOfMonth(controlledMonth ?? defaultMonth ?? today))\n const view = startOfMonth(controlledMonth ?? uncontrolledMonth)\n // The roving tab stop: the chosen day while it is on screen, otherwise today if it is, otherwise the first of the month - the same rule upstream uses.\n const [focused, setFocused] = useState<Date>(() => {\n const seed = mode === 'range' ? range.from : selected instanceof Date ? selected : null\n return seed !== null && seed.getMonth() === view.getMonth() && seed.getFullYear() === view.getFullYear() ? startOfDay(seed) : startOfMonth(view)\n })\n const gridRef = useRef<HTMLTableElement | null>(null)\n const labelId = useId()\n\n const caption = useMemo(() => new Intl.DateTimeFormat(locale, { month: 'long', year: 'numeric' }).format(view), [locale, view])\n const longDay = useMemo(() => new Intl.DateTimeFormat(locale, { weekday: 'long', month: 'long', day: 'numeric', year: 'numeric' }), [locale])\n const weekdays = useMemo(() => {\n // 2024-01-07 is a Sunday, so the names follow the week start the caller asked for.\n const sunday = new Date(2024, 0, 7)\n return Array.from({ length: 7 }, (_, index) => new Intl.DateTimeFormat(locale, { weekday: 'short' }).format(addDays(sunday, (weekStartsOn + index) % 7)))\n }, [locale, weekStartsOn])\n\n const weeks = useMemo(() => {\n const first = startOfMonth(view)\n const leading = (first.getDay() - weekStartsOn + 7) % 7\n const start = addDays(first, -leading)\n const cells = Math.ceil((leading + daysInMonth(view)) / 7) * 7\n return Array.from({ length: cells / 7 }, (_, week) => Array.from({ length: 7 }, (_, day) => addDays(start, week * 7 + day)))\n }, [view, weekStartsOn])\n\n // A key press moves both the state and the real focus. The flag says which, so a click - which moves the state itself - does not steal focus back.\n const focusRequested = useRef(false)\n const goTo = useCallback((next: Date) => {\n focusRequested.current = true\n setFocused(next)\n if (startOfMonth(next).getTime() !== view.getTime()) {\n if (controlledMonth === undefined) setUncontrolledMonth(startOfMonth(next))\n onMonthChange?.(startOfMonth(next))\n }\n }, [controlledMonth, onMonthChange, view])\n\n // Focus lands after the commit, from the state rather than from a node captured before it: focusing a node captured mid-update is what left the keyboard\n // in the old day (Popover's port learned the same rule with its own panel).\n useEffect(() => {\n if (!focusRequested.current) return\n focusRequested.current = false\n gridRef.current?.querySelector<HTMLElement>(`[data-day=\"${dayKey(focused)}\"]`)?.focus()\n }, [focused])\n\n const choose = useCallback((date: Date) => {\n if (disabled?.(date) === true) return\n if (mode === 'range') {\n const current = asRange(selected)\n if (current.from === null || current.to !== null) { onSelect?.({ from: startOfDay(date), to: null }); return }\n // A second press closes the range, whichever side of the first day it lands on.\n const from = current.from\n onSelect?.(date.getTime() < from.getTime() ? { from: startOfDay(date), to: from } : { from, to: startOfDay(date) })\n return\n }\n onSelect?.(startOfDay(date))\n }, [disabled, mode, onSelect, selected])\n\n // A day the predicate disables cannot take focus, so a step that lands on one keeps going: without this the roving tab stop moved to a day whose button\n // refuses focus and the keyboard looked stuck while the state had already moved (found in the browser, on a weekend).\n const enabled = (from: Date, step: number): Date => {\n let candidate = from\n for (let attempt = 0; attempt < 366 && disabled?.(candidate) === true; attempt += 1) candidate = addDays(candidate, step)\n return disabled?.(candidate) === true ? focused : candidate\n }\n const onKeyDown = (event: KeyboardEvent<HTMLTableElement>): void => {\n const weekOffset = (focused.getDay() - weekStartsOn + 7) % 7\n const move: Record<string, () => Date> = {\n ArrowLeft: () => enabled(addDays(focused, -1), -1),\n ArrowRight: () => enabled(addDays(focused, 1), 1),\n ArrowUp: () => enabled(addDays(focused, -7), -1),\n ArrowDown: () => enabled(addDays(focused, 7), 1),\n Home: () => enabled(addDays(focused, -weekOffset), 1),\n End: () => enabled(addDays(focused, 6 - weekOffset), -1),\n PageUp: () => enabled(addMonths(focused, -1), -1),\n PageDown: () => enabled(addMonths(focused, 1), 1),\n }\n const next = move[event.key]\n if (next !== undefined) { event.preventDefault(); goTo(startOfDay(next())); return }\n if (event.key === 'Enter' || event.key === ' ') { event.preventDefault(); choose(focused) }\n }\n\n const inRange = (date: Date): boolean => range.from !== null && range.to !== null\n && date.getTime() > Math.min(range.from.getTime(), range.to.getTime())\n && date.getTime() < Math.max(range.from.getTime(), range.to.getTime())\n\n return (\n <div data-slot=\"calendar\" className={clsx(css.root, className)}>\n <div className={css.nav}>\n <button\n type=\"button\"\n data-slot=\"calendar-previous\"\n aria-label=\"Go to the previous month\"\n className={css.navButton}\n onClick={() => goTo(startOfDay(addMonths(view, -1)))}\n >\n <ChevronIcon direction=\"left\" />\n </button>\n <div id={labelId} aria-live=\"polite\" className={css.caption}>{caption}</div>\n <button\n type=\"button\"\n data-slot=\"calendar-next\"\n aria-label=\"Go to the next month\"\n className={css.navButton}\n onClick={() => goTo(startOfDay(addMonths(view, 1)))}\n >\n <ChevronIcon direction=\"right\" />\n </button>\n </div>\n <table ref={gridRef} role=\"grid\" aria-labelledby={labelId} onKeyDown={onKeyDown} className={css.grid}>\n <thead>\n <tr>\n {weekdays.map(name => (\n <th key={name} scope=\"col\" className={css.weekday}>{name}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {weeks.map((week, index) => (\n <tr key={index} className={css.week}>\n {week.map(day => {\n const outside = day.getMonth() !== view.getMonth()\n if (outside && !showOutsideDays) return <td key={dayKey(day)} className={css.empty} />\n const isDisabled = disabled?.(day) === true\n const isSelected = mode === 'range'\n ? (range.from !== null && sameDay(day, range.from)) || (range.to !== null && sameDay(day, range.to))\n : selected instanceof Date && sameDay(day, selected)\n const isToday = sameDay(day, today)\n const rangeStart = range.from !== null && sameDay(day, range.from)\n const rangeEnd = range.to !== null && sameDay(day, range.to)\n return (\n <td\n key={dayKey(day)}\n role=\"gridcell\"\n aria-selected={isSelected}\n data-selected={isSelected ? 'true' : 'false'}\n data-outside={outside ? 'true' : 'false'}\n data-today={isToday ? 'true' : 'false'}\n data-disabled={isDisabled ? 'true' : 'false'}\n data-range-start={rangeStart ? 'true' : 'false'}\n data-range-end={rangeEnd ? 'true' : 'false'}\n data-range-middle={inRange(day) ? 'true' : 'false'}\n className={css.cell}\n >\n <button\n type=\"button\"\n data-day={dayKey(day)}\n aria-label={longDay.format(day)}\n disabled={isDisabled}\n tabIndex={sameDay(day, focused) ? 0 : -1}\n data-focused={sameDay(day, focused) ? 'true' : 'false'}\n className={css.day}\n onClick={() => { focusRequested.current = false; setFocused(startOfDay(day)); choose(day) }}\n >\n {day.getDate()}\n </button>\n </td>\n )\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n}\n\nfunction ChevronIcon({ direction }: { direction: 'left' | 'right' }) {\n return (\n <svg className={css.icon} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n {direction === 'left' ? <path d=\"m15 18-6-6 6-6\" /> : <path d=\"m9 18 6-6-6-6\" />}\n </svg>\n )\n}\n","/**\n * Ported from shadcn/ui's Sidebar (https://ui.shadcn.com/docs/components/sidebar, MIT licence, registry item `sidebar`, style new-york-v4, fetched\n * 2026-09-22). Radix, `class-variance-authority` and lucide are dropped and the parts written by hand, because a client bundle here may require only react,\n * react/jsx-runtime and the app primitives (the built-bundle test enforces it).\n *\n * What shipped is the whole desktop rail: `SidebarProvider` owning the open state with the `Mod+B` shortcut and the width variables, `useSidebar`, the rail\n * itself with its `side`/`variant`/`collapsible` attributes, the trigger and the click-anywhere rail, the inset, the header/footer/content/separator, the\n * group parts, the menu parts down to the submenu, and the action and badge affordances.\n *\n * DELIBERATE PARTIALS, all recorded in manifest.yml. The mobile sidebar is not ported: upstream renders the rail inside a Sheet on a small screen, and a\n * Sheet exists here as its own item that this one may not import (self-containment is what the ingest gate enforces) - so `isMobile` is false and the rail\n * stays the desktop rail. The `sidebar_state` cookie is not written, so `open` is not remembered between sessions; a caller owns the state through\n * `open`/`onOpenChange` and can persist it. The collapsed-state tooltips are not ported (they need the Tooltip item). `SidebarInput` and\n * `SidebarMenuSkeleton` are not ported, the latter because a skeleton is the Skeleton item restated; and `SidebarMenuButton`'s `asChild` is not ported, so a\n * caller who wants a link uses its own anchor inside the row rather than the row becoming one.\n */\nimport { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'\nimport clsx from 'clsx'\nimport type { ButtonHTMLAttributes, HTMLAttributes } from 'react'\nimport css from './Sidebar.module.css'\n\nexport type SidebarSide = 'left' | 'right'\nexport type SidebarVariant = 'sidebar' | 'floating' | 'inset'\nexport type SidebarCollapsible = 'offcanvas' | 'icon' | 'none'\nexport type SidebarState = 'expanded' | 'collapsed'\n\ninterface SidebarContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n toggle: () => void\n state: SidebarState\n /** Always false in this port: the mobile rail upstream is a Sheet, which is a separate item here. */\n isMobile: boolean\n}\n\nconst SidebarContext = createContext<SidebarContextValue | null>(null)\n\n/** The rail's own state, its toggle, and the shortcut. */\nexport function useSidebar(): SidebarContextValue {\n const context = useContext(SidebarContext)\n if (context === null) throw new Error('useSidebar must be used within a SidebarProvider')\n return context\n}\n\nexport interface SidebarProviderProps extends HTMLAttributes<HTMLDivElement> {\n /** Whether the rail starts open. Defaults to true, as upstream does. */\n defaultOpen?: boolean\n /** The open state, when the caller owns it. */\n open?: boolean\n /** Called when the state should change - from the trigger, the rail or the shortcut. */\n onOpenChange?: (open: boolean) => void\n}\n\n/**\n * Own the rail's state and the `Mod+B` shortcut.\n * @param props - the open state, and normal attributes for the wrapper.\n * @returns the wrapper element, with the width variables this module reads.\n */\nexport function SidebarProvider({ defaultOpen = true, open: controlledOpen, onOpenChange, children, className, style, ...rest }: SidebarProviderProps) {\n const [uncontrolled, setUncontrolled] = useState(defaultOpen)\n const open = controlledOpen === undefined ? uncontrolled : controlledOpen\n\n const setOpen = useCallback((next: boolean) => {\n if (controlledOpen === undefined) setUncontrolled(next)\n onOpenChange?.(next)\n }, [controlledOpen, onOpenChange])\n const toggle = useCallback(() => setOpen(!open), [open, setOpen])\n\n useEffect(() => {\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.key !== 'b' || !(event.metaKey || event.ctrlKey)) return\n event.preventDefault()\n setOpen(!open)\n }\n window.addEventListener('keydown', onKeyDown)\n return () => window.removeEventListener('keydown', onKeyDown)\n }, [open, setOpen])\n\n const value = useMemo<SidebarContextValue>(() => ({ open, setOpen, toggle, state: open ? 'expanded' : 'collapsed', isMobile: false }), [open, setOpen, toggle])\n\n return (\n <SidebarContext.Provider value={value}>\n <div\n data-slot=\"sidebar-wrapper\"\n data-state={open ? 'expanded' : 'collapsed'}\n className={clsx(css.wrapper, className)}\n style={style}\n {...rest}\n >\n {children}\n </div>\n </SidebarContext.Provider>\n )\n}\n\nexport interface SidebarProps extends HTMLAttributes<HTMLDivElement> {\n /** Which edge the rail sits on. */\n side?: SidebarSide\n /** `sidebar` is flush, `floating` lifts the rail off the edge, `inset` lifts the content instead. */\n variant?: SidebarVariant\n /** What collapsing does: slide it away, narrow it to icons, or nothing. */\n collapsible?: SidebarCollapsible\n}\n\n/**\n * The rail.\n * @param props - the side, the variant, the collapse mode, and normal attributes.\n * @returns the element, carrying `data-state`, `data-side`, `data-variant` and `data-collapsible` for styling.\n */\nexport function Sidebar({ side = 'left', variant = 'sidebar', collapsible = 'offcanvas', children, className, ...rest }: SidebarProps) {\n const { state } = useSidebar()\n if (collapsible === 'none') {\n return <div data-slot=\"sidebar\" data-state={state} data-side={side} data-variant={variant} className={clsx(css.railPlain, className)} {...rest}>{children}</div>\n }\n return (\n <div\n data-slot=\"sidebar\"\n data-state={state}\n data-side={side}\n data-variant={variant}\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n className={clsx(css.rail, className)}\n {...rest}\n >\n <div data-slot=\"sidebar-inner\" className={css.inner}>{children}</div>\n </div>\n )\n}\n\n/** A button that toggles the rail, for a header or a toolbar. */\nexport function SidebarTrigger({ className, onClick, ...rest }: ButtonHTMLAttributes<HTMLButtonElement>) {\n const { toggle } = useSidebar()\n return (\n <button\n type=\"button\"\n data-slot=\"sidebar-trigger\"\n aria-label=\"Toggle the sidebar\"\n className={clsx(css.trigger, className)}\n onClick={event => { onClick?.(event); toggle() }}\n {...rest}\n >\n <svg className={css.icon} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\" /><path d=\"M9 4v16\" />\n </svg>\n </button>\n )\n}\n\n/** The thin strip on the rail's edge: pressing it toggles too, which is how a reader grabs a collapsed rail. */\nexport function SidebarRail({ className, ...rest }: HTMLAttributes<HTMLDivElement>) {\n const { toggle } = useSidebar()\n return (\n <div\n data-slot=\"sidebar-rail\"\n aria-hidden=\"true\"\n onClick={toggle}\n className={clsx(css.railHandle, className)}\n {...rest}\n />\n )\n}\n\n/** The content beside the rail. It takes the rest of the width and offers the trigger on a small screen where the rail is not shown. */\nexport function SidebarInset({ className, children, ...rest }: HTMLAttributes<HTMLElement>) {\n return <main data-slot=\"sidebar-inset\" className={clsx(css.inset, className)} {...rest}>{children}</main>\n}\n\n/** The top of the rail. */\nexport function SidebarHeader({ className, ...rest }: HTMLAttributes<HTMLDivElement>) {\n return <div data-slot=\"sidebar-header\" className={clsx(css.header, className)} {...rest} />\n}\n\n/** The bottom of the rail. */\nexport function SidebarFooter({ className, ...rest }: HTMLAttributes<HTMLDivElement>) {\n return <div data-slot=\"sidebar-footer\" className={clsx(css.footer, className)} {...rest} />\n}\n\n/** The scrolling middle of the rail. */\nexport function SidebarContent({ className, ...rest }: HTMLAttributes<HTMLDivElement>) {\n return <div data-slot=\"sidebar-content\" className={clsx(css.content, className)} {...rest} />\n}\n\n/** A rule across the rail. */\nexport function SidebarSeparator({ className, ...rest }: HTMLAttributes<HTMLDivElement>) {\n return <div data-slot=\"sidebar-separator\" role=\"separator\" className={clsx(css.separator, className)} {...rest} />\n}\n\n/** A named block of rows. */\nexport function SidebarGroup({ className, ...rest }: HTMLAttributes<HTMLDivElement>) {\n return <div data-slot=\"sidebar-group\" className={clsx(css.group, className)} {...rest} />\n}\n\n/** The group's heading. It is hidden while the rail is collapsed to icons. */\nexport function SidebarGroupLabel({ className, ...rest }: HTMLAttributes<HTMLDivElement>) {\n return <div data-slot=\"sidebar-group-label\" className={clsx(css.groupLabel, className)} {...rest} />\n}\n\n/** A small button on the group's heading, for a group-level action. */\nexport function SidebarGroupAction({ className, ...rest }: ButtonHTMLAttributes<HTMLButtonElement>) {\n return <button type=\"button\" data-slot=\"sidebar-group-action\" className={clsx(css.groupAction, className)} {...rest} />\n}\n\n/** The group's rows. */\nexport function SidebarGroupContent({ className, ...rest }: HTMLAttributes<HTMLDivElement>) {\n return <div data-slot=\"sidebar-group-content\" className={clsx(css.groupContent, className)} {...rest} />\n}\n\n/** A list of rows. */\nexport function SidebarMenu({ className, ...rest }: HTMLAttributes<HTMLUListElement>) {\n return <ul data-slot=\"sidebar-menu\" role=\"list\" className={clsx(css.menu, className)} {...rest} />\n}\n\n/** One row's wrapper. */\nexport function SidebarMenuItem({ className, ...rest }: HTMLAttributes<HTMLLIElement>) {\n return <li data-slot=\"sidebar-menu-item\" className={clsx(css.menuItem, className)} {...rest} />\n}\n\nexport interface SidebarMenuButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Whether this row is the one being shown. It reports `aria-current=\"page\"` and styles itself as chosen. */\n isActive?: boolean\n}\n\n/**\n * The row's button: an icon and a label, in that order. While the rail is collapsed to icons the LAST span inside the row is hidden, which is the same\n * convention upstream's own markup relies on, so put the icon first and the label last.\n */\nexport function SidebarMenuButton({ isActive = false, className, children, ...rest }: SidebarMenuButtonProps) {\n const { state } = useSidebar()\n return (\n <button\n type=\"button\"\n data-slot=\"sidebar-menu-button\"\n data-active={isActive ? 'true' : 'false'}\n data-state={state}\n aria-current={isActive ? 'page' : undefined}\n className={clsx(css.menuButton, className)}\n {...rest}\n >\n {children}\n </button>\n )\n}\n\n/** A small button at the row's trailing edge, for an action that is not the row's own. */\nexport function SidebarMenuAction({ className, ...rest }: ButtonHTMLAttributes<HTMLButtonElement>) {\n return <button type=\"button\" data-slot=\"sidebar-menu-action\" className={clsx(css.menuAction, className)} {...rest} />\n}\n\n/** A count or a state at the row's trailing edge. */\nexport function SidebarMenuBadge({ className, ...rest }: HTMLAttributes<HTMLDivElement>) {\n return <div data-slot=\"sidebar-menu-badge\" className={clsx(css.menuBadge, className)} {...rest} />\n}\n\n/** A nested list of rows, indented under its parent. */\nexport function SidebarMenuSub({ className, ...rest }: HTMLAttributes<HTMLUListElement>) {\n return <ul data-slot=\"sidebar-menu-sub\" role=\"list\" className={clsx(css.menuSub, className)} {...rest} />\n}\n\n/** A wrapper for one nested row. */\nexport function SidebarMenuSubItem({ className, ...rest }: HTMLAttributes<HTMLLIElement>) {\n return <li data-slot=\"sidebar-menu-sub-item\" className={clsx(css.menuSubItem, className)} {...rest} />\n}\n\n/**\n * A nested row's link. It is an anchor, because a nested row is nearly always a destination.\n */\nexport function SidebarMenuSubButton({ isActive = false, className, children, ...rest }: HTMLAttributes<HTMLAnchorElement> & { isActive?: boolean }) {\n return (\n <a\n data-slot=\"sidebar-menu-sub-button\"\n data-active={isActive ? 'true' : 'false'}\n aria-current={isActive ? 'page' : undefined}\n className={clsx(css.menuSubButton, className)}\n {...rest}\n >\n {children}\n </a>\n )\n}\n","/**\n * Extracted from DSH: the row layout of packages/client/ui-permission-presets/src/client/PermissionRow.tsx (title, description, control), pinned deepseek-harness 5dda764ed3.\n * Markup and SettingsRow.module.css are the original's. The DSH row also owns a host-backed preference and a risk confirmation; those stay in the feature, this is only\n * the layout so any settings-style screen can reuse it. See manifest.yml.\n */\nimport type { ReactNode } from 'react'\nimport css from './SettingsRow.module.css'\n\nexport interface SettingsRowProps {\n title: string\n description?: string\n /** True when the description is an error message (announced to assistive technology). */\n error?: boolean\n /** The control on the right (a SelectPill, a Switch, a button). */\n children?: ReactNode\n}\n\n/**\n * Render a settings row.\n * @param props - copy and the control.\n * @returns the row element tree.\n */\nexport function SettingsRow({ title, description, error = false, children }: SettingsRowProps) {\n return (\n <div className={css.row}>\n <div className={css.rowText}>\n <div className={css.title}>{title}</div>\n {description !== undefined && <div className={css.desc} role={error ? 'alert' : undefined}>{description}</div>}\n </div>\n {children}\n </div>\n )\n}\n","/**\n * The contract names of the cross-surface UI contract (plugins/acryl-ui/contracts/components.json) as thin adapters over the extracted DSH components: same behavior and\n * markup, the contract's simpler props. Kept separate from registry/ so the extracted files stay as close to DSH's originals as possible.\n */\nimport { useId } from 'react'\nimport { AppearanceCubes, type CubeOption } from './registry/AppearanceCubes/AppearanceCubes.tsx'\nimport { SettingsValueField as ValueField } from './registry/fields/fields.tsx'\nimport { SelectPill, type SelectOption } from './registry/SelectPill/SelectPill.tsx'\nimport { SettingsRow as SettingsRowLayout } from './registry/SettingsRow/SettingsRow.tsx'\nimport type { ReactNode } from 'react'\n\n/** Contract `Field`: a labelled text input with a hint, or an error in place of the hint (DSH `ValueField`). `onChange` receives the string. */\nexport function Field({ label, value, onChange, hint, error, placeholder }: {\n label: string\n value: string\n onChange: (value: string) => void\n hint?: string\n error?: string\n placeholder?: string\n}) {\n const id = useId()\n return (\n <ValueField\n id={id}\n label={label}\n hint={hint ?? ''}\n text={value}\n overridden={false}\n invalid={error !== undefined}\n overriddenLabel=\"\"\n resetLabel=\"\"\n invalidLabel={error ?? ''}\n disabled={false}\n onEdit={onChange}\n onReset={() => {}}\n {...placeholder === undefined ? {} : { placeholder }}\n />\n )\n}\n\n/** Contract `Segmented`: exclusive tiles (DSH `AppearanceRow`'s cubes). It is a full-width row with its own `title` above the tiles, as in DSH; `label` is the accessible name of the group. */\nexport function Segmented({ label, title, options, value, onChange }: { label?: string, title?: string, options: readonly CubeOption[], value: string, onChange: (id: string) => void }) {\n return (\n <div role=\"group\" {...label === undefined ? (title === undefined ? {} : { 'aria-label': title }) : { 'aria-label': label }}>\n <AppearanceCubes {...title === undefined ? {} : { title }} options={options} value={value} onChange={onChange} />\n </div>\n )\n}\n\n/** Contract `SelectField`: the dropdown selector (DSH `PermissionRow`'s pill over the app's Menu). */\nexport function SelectField(props: { options: readonly SelectOption[], value: string, onChange: (id: string) => void, placeholder?: string, label?: string }) {\n return <SelectPill {...props} />\n}\n\n/** Contract `SettingsRow`: `label` and `description` on the left, the control as children (DSH row layout; `title` there). `focused` is terminal-only and ignored on the web. */\nexport function SettingsRow({ label, description, children }: { label: string, description?: string, focused?: boolean, children?: ReactNode }) {\n return <SettingsRowLayout title={label} {...description === undefined ? {} : { description }}>{children}</SettingsRowLayout>\n}\n","","import tokens from '../../contracts/tokens.json' with { type: 'json' }\n\nconst kebab = (role: string): string => role.replace(/[A-Z]/gu, c => `-${c.toLowerCase()}`)\n\n/**\n * The semantic roles as CSS values a consumer can use for its own colors. Roles that map to an app token resolve to it directly (`var(--dsw-alias-*)`); accent and\n * reasoning resolve to the tokens this library registers with the theme service. `secondary` is terminal-only and absent here.\n */\nexport const roles: Readonly<Record<string, string>> = Object.freeze(Object.fromEntries(\n Object.entries(tokens.roles as Record<string, { web: string | null }>)\n .filter(([, value]) => value.web !== null)\n .map(([role, value]) => [role, role === 'accent' || role === 'reasoning' ? `var(--acryl-${kebab(role)})` : String(value.web)]),\n))\n","import type { Context } from '@deepseek-ai/cordis'\nimport type { ComponentType } from 'react'\n\ninterface SlotContext {\n slots: { inject(slot: string, register: () => unknown): unknown, register(options: { name: string, id: string, order: number, label?: string }, component: ComponentType<never>): unknown }\n}\n\n/**\n * Register a component in a slot: `ctx.slots.inject(<slot>, () => ctx.slots.register(...))`, so registration waits for the slot's own declaration and load order does not\n * matter. The consumer declares `inject = ['slots']`.\n */\nconst slotHelper = (slot: string) => (ctx: Context, { id, order = 50, label }: { id: string, order?: number, label?: string }, component: ComponentType<never>): unknown => {\n const slots = (ctx as unknown as SlotContext).slots\n return slots.inject(slot, () => slots.register({ name: slot, id, order, ...(label === undefined ? {} : { label }) }, component))\n}\n\nexport const footerAction = slotHelper('sidebar.footer.action')\nexport const headerAction = slotHelper('conversation.session.header.actions')\nexport const sidebarTab = slotHelper('sidebar.right.pane.tab')\nexport const settingsSection = slotHelper('settings.section')\n","/**\n * ACRYL UI library for the Web and Desktop client (spec 038-ui-component-library). A LIBRARY: it fills no slot itself; other client bundles `require('@acryl/ui')` after\n * listing it in `dsh.client.inject`. The parts come from DSH's own source (see registry/manifest.yml for each one's origin) and read the app's `--dsw-alias-*` tokens; the two\n * colors DSH has no token for (accent, reasoning) are registered through the theme service with a light and a dark value, never through a stylesheet.\n * The client loader treats every module as a plugin, so a library exports an `apply` too.\n */\nimport type { Context } from '@deepseek-ai/cordis'\nimport type {} from '@deepseek-ai/dsh-client-ui-theme'\nimport { SettingsValueField as ValueField, SettingsSecretField as SecretField, type SettingsFieldProps as FieldProps } from './registry/fields/fields.tsx'\nimport { AppearanceCubes, type CubeOption } from './registry/AppearanceCubes/AppearanceCubes.tsx'\nimport type { SettingsRowProps } from './registry/SettingsRow/SettingsRow.tsx'\nimport { SelectPill, type SelectOption } from './registry/SelectPill/SelectPill.tsx'\nimport { Tabs, type TabItem } from './registry/Tabs/Tabs.tsx'\nimport { Card } from './registry/Card/Card.tsx'\nimport { EmptyState } from './registry/EmptyState/EmptyState.tsx'\nimport { SwitchField } from './registry/SwitchField/SwitchField.tsx'\nimport { Dialog } from './registry/Dialog/Dialog.tsx'\nimport { ToolCallCard, type ToolCallCardProps, type ToolCallLabels, type ToolCallState } from './registry/ToolCallCard/ToolCallCard.tsx'\nimport { SidebarRow, type SidebarRowProps } from './registry/SidebarRow/SidebarRow.tsx'\nimport { Stack } from './registry/Stack.tsx'\nimport { provideAcrylChat } from './chat.ts'\nimport { Kbd, type KbdProps } from './registry/Kbd/Kbd.tsx'\nimport { Badge, type BadgeProps, type BadgeVariant } from './registry/Badge/Badge.tsx'\nimport { Skeleton, type SkeletonProps } from './registry/Skeleton/Skeleton.tsx'\nimport { Spinner, type SpinnerProps } from './registry/Spinner/Spinner.tsx'\nimport { Alert, type AlertProps, type AlertVariant } from './registry/Alert/Alert.tsx'\nimport { Separator, type SeparatorProps } from './registry/Separator/Separator.tsx'\nimport { Progress, type ProgressProps } from './registry/Progress/Progress.tsx'\nimport { Avatar, type AvatarProps, type AvatarSize } from './registry/Avatar/Avatar.tsx'\nimport { Label, type LabelProps } from './registry/Label/Label.tsx'\nimport { Textarea, type TextareaProps } from './registry/Textarea/Textarea.tsx'\nimport { Checkbox, type CheckboxProps } from './registry/Checkbox/Checkbox.tsx'\nimport { AspectRatio, type AspectRatioProps } from './registry/AspectRatio/AspectRatio.tsx'\nimport { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator, BreadcrumbEllipsis } from './registry/Breadcrumb/Breadcrumb.tsx'\nimport { Toggle, type ToggleProps, type ToggleVariant, type ToggleSize } from './registry/Toggle/Toggle.tsx'\nimport { ButtonGroup, ButtonGroupText, ButtonGroupSeparator, type ButtonGroupProps } from './registry/ButtonGroup/ButtonGroup.tsx'\nimport { Accordion, AccordionItem, AccordionTrigger, AccordionContent, type AccordionProps } from './registry/Accordion/Accordion.tsx'\nimport { RadioGroup, type RadioGroupProps, type RadioOption } from './registry/RadioGroup/RadioGroup.tsx'\nimport { Collapsible, CollapsibleTrigger, CollapsibleContent, type CollapsibleProps } from './registry/Collapsible/Collapsible.tsx'\nimport { ToggleGroup, ToggleGroupItem, type ToggleGroupProps } from './registry/ToggleGroup/ToggleGroup.tsx'\nimport { Table, TableHeader, TableBody, TableFooter, TableRow, TableHead, TableCell, TableCaption } from './registry/Table/Table.tsx'\nimport { DirectionProvider, useDirection, type Direction, type DirectionProviderProps } from './registry/DirectionProvider/DirectionProvider.tsx'\nimport { Marker, MarkerIcon, MarkerContent, type MarkerProps, type MarkerVariant } from './registry/Marker/Marker.tsx'\nimport { Message, MessageGroup, MessageAvatar, MessageContent, MessageHeader, MessageFooter, type MessageProps, type MessageAlign } from './registry/Message/Message.tsx'\nimport { Bubble, BubbleGroup, BubbleContent, BubbleReactions, type BubbleProps, type BubbleVariant, type BubbleAlign, type BubbleReactionsProps } from './registry/Bubble/Bubble.tsx'\nimport { Pagination, PaginationContent, PaginationItem, PaginationLink, PaginationPrevious, PaginationNext, PaginationEllipsis, type PaginationLinkProps } from './registry/Pagination/Pagination.tsx'\nimport { NativeSelect, NativeSelectOption, NativeSelectOptGroup, type NativeSelectProps } from './registry/NativeSelect/NativeSelect.tsx'\nimport { ScrollArea, type ScrollAreaProps } from './registry/ScrollArea/ScrollArea.tsx'\nimport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator, type InputOTPProps } from './registry/InputOTP/InputOTP.tsx'\nimport { Item, ItemGroup, ItemSeparator, ItemMedia, ItemContent, ItemTitle, ItemDescription, ItemActions, ItemHeader, ItemFooter, type ItemProps, type ItemVariant, type ItemSize, type ItemMediaVariant } from './registry/Item/Item.tsx'\nimport { Attachment, AttachmentGroup, AttachmentMedia, AttachmentContent, AttachmentTitle, AttachmentDescription, AttachmentActions, AttachmentAction, AttachmentTrigger, type AttachmentProps, type AttachmentState, type AttachmentSize, type AttachmentOrientation, type AttachmentMediaVariant } from './registry/Attachment/Attachment.tsx'\nimport { InputGroup, InputGroupAddon, InputGroupButton, InputGroupText, InputGroupInput, InputGroupTextarea, type InputGroupProps, type InputGroupAddonProps, type InputGroupAlign, type InputGroupButtonSize } from './registry/InputGroup/InputGroup.tsx'\nimport { FormField, FieldSet, FieldLegend, FieldGroup, FieldContent, FieldLabel, FieldTitle, FieldDescription, FieldSeparator, FieldError, type FormFieldProps, type FormFieldOrientation, type FieldLegendVariant, type FieldErrorProps } from './registry/FormField/FormField.tsx'\nimport { Popover, PopoverTrigger, PopoverAnchor, PopoverContent, PopoverHeader, PopoverTitle, PopoverDescription, type PopoverProps, type PopoverContentProps, type PopoverAlign } from './registry/Popover/Popover.tsx'\nimport { Slider, type SliderProps, type SliderOrientation } from './registry/Slider/Slider.tsx'\nimport { Sheet, SheetTrigger, SheetClose, SheetOverlay, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription, type SheetProps, type SheetContentProps, type SheetSide } from './registry/Sheet/Sheet.tsx'\nimport { Drawer, DrawerTrigger, DrawerClose, DrawerOverlay, DrawerContent, DrawerHeader, DrawerFooter, DrawerTitle, DrawerDescription, type DrawerProps, type DrawerContentProps, type DrawerDirection } from './registry/Drawer/Drawer.tsx'\nimport { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandShortcut, CommandSeparator, type CommandProps, type CommandInputProps, type CommandItemProps } from './registry/Command/Command.tsx'\nimport { Combobox, useComboboxAnchor, ComboboxInput, ComboboxTrigger, ComboboxClear, ComboboxValue, ComboboxContent, ComboboxList, ComboboxGroup, ComboboxLabel, ComboboxEmpty, ComboboxSeparator, ComboboxItem, type ComboboxProps, type ComboboxInputProps, type ComboboxContentProps, type ComboboxItemProps } from './registry/Combobox/Combobox.tsx'\nimport { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem, ContextMenuCheckboxItem, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuLabel, ContextMenuSeparator, ContextMenuShortcut, ContextMenuGroup, type ContextMenuProps, type ContextMenuContentProps, type ContextMenuItemProps, type ContextMenuCheckboxItemProps } from './registry/ContextMenu/ContextMenu.tsx'\nimport { Carousel, CarouselContent, CarouselItem, CarouselPrevious, CarouselNext, type CarouselProps, type CarouselArrowProps, type CarouselApi, type CarouselOrientation } from './registry/Carousel/Carousel.tsx'\nimport { ResizablePanelGroup, ResizablePanel, ResizableHandle, type ResizablePanelGroupProps, type ResizablePanelProps, type ResizableHandleProps, type ResizableOrientation, type ResizableLayout, type ResizableBounds } from './registry/ResizablePanelGroup/ResizablePanelGroup.tsx'\nimport { Menubar, MenubarMenu, MenubarTrigger, MenubarContent, MenubarGroup, MenubarLabel, MenubarItem, MenubarShortcut, MenubarCheckboxItem, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, type MenubarProps, type MenubarContentProps, type MenubarItemProps, type MenubarCheckboxItemProps } from './registry/Menubar/Menubar.tsx'\nimport { NavigationMenu, NavigationMenuList, NavigationMenuItem, NavigationMenuTrigger, NavigationMenuContent, NavigationMenuLink, NavigationMenuViewport, navigationMenuTriggerStyle, type NavigationMenuProps, type NavigationMenuContentProps } from './registry/NavigationMenu/NavigationMenu.tsx'\nimport { Calendar, type CalendarProps, type CalendarMode, type CalendarRange, type CalendarSelection } from './registry/Calendar/Calendar.tsx'\nimport { SidebarProvider, Sidebar, SidebarTrigger, SidebarRail, SidebarInset, SidebarHeader, SidebarFooter, SidebarContent, SidebarSeparator, SidebarGroup, SidebarGroupLabel, SidebarGroupAction, SidebarGroupContent, SidebarMenu, SidebarMenuItem, SidebarMenuButton, SidebarMenuAction, SidebarMenuBadge, SidebarMenuSub, SidebarMenuSubItem, SidebarMenuSubButton, useSidebar, type SidebarProviderProps, type SidebarProps, type SidebarMenuButtonProps, type SidebarSide, type SidebarVariant, type SidebarCollapsible, type SidebarState } from './registry/Sidebar/Sidebar.tsx'\nimport { Field, Segmented, SelectField, SettingsRow } from './contract-adapters.tsx'\nimport { roles } from './roles.ts'\nimport { footerAction, headerAction, settingsSection, sidebarTab } from './slot-helpers.ts'\n\nexport { Kbd, Badge, Skeleton, Spinner, Alert, Separator, Progress, Avatar, Label, Textarea, Checkbox, AspectRatio, Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator, BreadcrumbEllipsis, Toggle, ButtonGroup, ButtonGroupText, ButtonGroupSeparator, Accordion, AccordionItem, AccordionTrigger, AccordionContent, RadioGroup, Collapsible, CollapsibleTrigger, CollapsibleContent, ToggleGroup, ToggleGroupItem, Table, TableHeader, TableBody, TableFooter, TableRow, TableHead, TableCell, TableCaption, DirectionProvider, useDirection, Marker, MarkerIcon, MarkerContent, Message, MessageGroup, MessageAvatar, MessageContent, MessageHeader, MessageFooter, Bubble, BubbleGroup, BubbleContent, BubbleReactions, Pagination, PaginationContent, PaginationItem, PaginationLink, PaginationPrevious, PaginationNext, PaginationEllipsis, NativeSelect, NativeSelectOption, NativeSelectOptGroup, ScrollArea, InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator, Item, ItemGroup, ItemSeparator, ItemMedia, ItemContent, ItemTitle, ItemDescription, ItemActions, ItemHeader, ItemFooter, Attachment, AttachmentGroup, AttachmentMedia, AttachmentContent, AttachmentTitle, AttachmentDescription, AttachmentActions, AttachmentAction, AttachmentTrigger, InputGroup, InputGroupAddon, InputGroupButton, InputGroupText, InputGroupInput, InputGroupTextarea, FormField, FieldSet, FieldLegend, FieldGroup, FieldContent, FieldLabel, FieldTitle, FieldDescription, FieldSeparator, FieldError, Popover, PopoverTrigger, PopoverAnchor, PopoverContent, PopoverHeader, PopoverTitle, PopoverDescription, Slider, Sheet, SheetTrigger, SheetClose, SheetOverlay, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription, Drawer, DrawerTrigger, DrawerClose, DrawerOverlay, DrawerContent, DrawerHeader, DrawerFooter, DrawerTitle, DrawerDescription, Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandShortcut, CommandSeparator, Combobox, useComboboxAnchor, ComboboxInput, ComboboxTrigger, ComboboxClear, ComboboxValue, ComboboxContent, ComboboxList, ComboboxGroup, ComboboxLabel, ComboboxEmpty, ComboboxSeparator, ComboboxItem, ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem, ContextMenuCheckboxItem, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuLabel, ContextMenuSeparator, ContextMenuShortcut, ContextMenuGroup, Carousel, CarouselContent, CarouselItem, CarouselPrevious, CarouselNext, ResizablePanelGroup, ResizablePanel, ResizableHandle, Menubar, MenubarMenu, MenubarTrigger, MenubarContent, MenubarGroup, MenubarLabel, MenubarItem, MenubarShortcut, MenubarCheckboxItem, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, NavigationMenu, NavigationMenuList, NavigationMenuItem, NavigationMenuTrigger, NavigationMenuContent, NavigationMenuLink, NavigationMenuViewport, navigationMenuTriggerStyle, Calendar, SidebarProvider, Sidebar, SidebarTrigger, SidebarRail, SidebarInset, SidebarHeader, SidebarFooter, SidebarContent, SidebarSeparator, SidebarGroup, SidebarGroupLabel, SidebarGroupAction, SidebarGroupContent, SidebarMenu, SidebarMenuItem, SidebarMenuButton, SidebarMenuAction, SidebarMenuBadge, SidebarMenuSub, SidebarMenuSubItem, SidebarMenuSubButton, useSidebar, ToolCallCard, SidebarRow, ValueField, SecretField, AppearanceCubes, SettingsRow, SelectPill, Tabs, Card, EmptyState, SwitchField, Dialog, Stack, Field, Segmented, SelectField, roles, footerAction, headerAction, settingsSection, sidebarTab }\nexport type { KbdProps, BadgeProps, BadgeVariant, SkeletonProps, SpinnerProps, AlertProps, AlertVariant, SeparatorProps, ProgressProps, AvatarProps, AvatarSize, LabelProps, TextareaProps, CheckboxProps, AspectRatioProps, ToggleProps, ToggleVariant, ToggleSize, ButtonGroupProps, AccordionProps, RadioGroupProps, RadioOption, CollapsibleProps, ToggleGroupProps, Direction, DirectionProviderProps, MarkerProps, MarkerVariant, MessageProps, MessageAlign, BubbleProps, BubbleVariant, BubbleAlign, BubbleReactionsProps, PaginationLinkProps, NativeSelectProps, ScrollAreaProps, InputOTPProps, ItemProps, ItemVariant, ItemSize, ItemMediaVariant, AttachmentProps, AttachmentState, AttachmentSize, AttachmentOrientation, AttachmentMediaVariant, InputGroupProps, InputGroupAddonProps, InputGroupAlign, InputGroupButtonSize, FormFieldProps, FormFieldOrientation, FieldLegendVariant, FieldErrorProps, PopoverProps, PopoverContentProps, PopoverAlign, SliderProps, SliderOrientation, SheetProps, SheetContentProps, SheetSide, DrawerProps, DrawerContentProps, DrawerDirection, CommandProps, CommandInputProps, CommandItemProps, ComboboxProps, ComboboxInputProps, ComboboxContentProps, ComboboxItemProps, ContextMenuProps, ContextMenuContentProps, ContextMenuItemProps, ContextMenuCheckboxItemProps, CarouselProps, CarouselArrowProps, CarouselApi, CarouselOrientation, ResizablePanelGroupProps, ResizablePanelProps, ResizableHandleProps, ResizableOrientation, ResizableLayout, ResizableBounds, MenubarProps, MenubarContentProps, MenubarItemProps, MenubarCheckboxItemProps, NavigationMenuProps, NavigationMenuContentProps, CalendarProps, CalendarMode, CalendarRange, CalendarSelection, SidebarProviderProps, SidebarProps, SidebarMenuButtonProps, SidebarSide, SidebarVariant, SidebarCollapsible, SidebarState, ToolCallCardProps, ToolCallLabels, ToolCallState, SidebarRowProps, FieldProps, CubeOption, SettingsRowProps, SelectOption, TabItem }\n// Straight re-exports of the app's primitives, so a consumer needs one import.\nexport {\n Button, Tag, Pill, Toast, Modal, Tooltip,\n StateDot, DisclosureRow, Menu, Switch, Input, HoverCard, RiskConfirmation, ConnectionIndicator,\n JsonTree, TerminalBlock, ReadBlock, DiffBlock, SearchBlock, WebBlock, CodeBlock, JsonBlock, MarkdownText,\n ReferenceIconMedium, ReferenceIconRegular, LinkIconMedium, LinkIconRegular, classifyLinkPath, FileTypeIcon, classifyFileType, fileExtension,\n} from '@deepseek-ai/dsh-client-ui-primitives'\nexport type {\n StateDotState, DisclosureRowProps, MenuEntry, RiskConfirmationProps, ConnectionIndicatorState,\n JsonTreeProps, JsonTreeLabels, TerminalBlockProps, TerminalBlockLabels, ReadBlockProps, ReadBlockLabels,\n DiffBlockProps, DiffBlockLabels, SearchBlockLabels, WebBlockProps, CodeBlockProps, MarkdownLabels,\n ReferenceIconKind, ReferenceIconProps, LinkIconKind, LinkIconProps, FileTypeIconProps, FileTypeKind,\n} from '@deepseek-ai/dsh-client-ui-primitives'\n\nexport const version = '0.3.0'\n\n/** The two colors DSH has no token for, registered with the theme service (a light and a dark value each, as the service requires). */\nconst EXTRA_TOKENS = {\n '--acryl-accent': { light: '#4F46E5', dark: '#818CF8' },\n '--acryl-reasoning': { light: '#7C3AED', dark: '#A855F7' },\n} as const\n\nexport const inject = ['theme']\n\n/**\n * Register the extra tokens; removed with the plugin.\n * @param ctx - client plugin context.\n */\nexport function apply(ctx: Context): void {\n ctx.effect(() => provideAcrylChat(ctx), '@acryl/ui: the acrylChat service')\n const theme = (ctx as Context & { theme?: { overrideTokens(source: string, tokens: typeof EXTRA_TOKENS): () => void } }).theme\n if (theme === undefined) return\n ctx.effect(() => theme.overrideTokens('@acryl/ui', EXTRA_TOKENS), '@acryl/ui: extra theme tokens')\n}\n"],"ignoreList":[1],"mappings":"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"}
|