@wow-two-beta/ui 0.0.50 → 0.0.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions/button/Button.d.ts +3 -2
- package/dist/actions/button/Button.d.ts.map +1 -1
- package/dist/actions/index.js +2 -2
- package/dist/actions/toggleButton/ToggleButton.d.ts +3 -1
- package/dist/actions/toggleButton/ToggleButton.d.ts.map +1 -1
- package/dist/{chunk-3YNJTBYF.js → chunk-2KZJXQJ5.js} +7 -5
- package/dist/chunk-2KZJXQJ5.js.map +1 -0
- package/dist/{chunk-WU5JMO3N.js → chunk-BIJGZBQQ.js} +37 -3
- package/dist/chunk-BIJGZBQQ.js.map +1 -0
- package/dist/{chunk-23DELZVV.js → chunk-CDDBGAXP.js} +3 -3
- package/dist/{chunk-23DELZVV.js.map → chunk-CDDBGAXP.js.map} +1 -1
- package/dist/{chunk-L235NITI.js → chunk-D3N27NNO.js} +4 -4
- package/dist/{chunk-L235NITI.js.map → chunk-D3N27NNO.js.map} +1 -1
- package/dist/{chunk-2TKPRR4X.js → chunk-HDQCFWFH.js} +3 -3
- package/dist/{chunk-2TKPRR4X.js.map → chunk-HDQCFWFH.js.map} +1 -1
- package/dist/{chunk-BEOOTUFV.js → chunk-JPYWGMD4.js} +4 -4
- package/dist/{chunk-BEOOTUFV.js.map → chunk-JPYWGMD4.js.map} +1 -1
- package/dist/{chunk-CWT5VEMU.js → chunk-RFELPPTS.js} +32 -23
- package/dist/chunk-RFELPPTS.js.map +1 -0
- package/dist/{chunk-2CDU2ZKL.js → chunk-SVJVVZO6.js} +3 -3
- package/dist/{chunk-2CDU2ZKL.js.map → chunk-SVJVVZO6.js.map} +1 -1
- package/dist/{chunk-VTVWJBOP.js → chunk-V4T56XX7.js} +43 -31
- package/dist/chunk-V4T56XX7.js.map +1 -0
- package/dist/{chunk-BUWJN6SN.js → chunk-YYGII4AA.js} +10 -6
- package/dist/chunk-YYGII4AA.js.map +1 -0
- package/dist/{chunk-ZVOPRSED.js → chunk-ZDUT2XVH.js} +4 -4
- package/dist/{chunk-ZVOPRSED.js.map → chunk-ZDUT2XVH.js.map} +1 -1
- package/dist/display/index.js +3 -3
- package/dist/feedback/index.js +3 -3
- package/dist/forms/checkbox/Checkbox.d.ts +3 -2
- package/dist/forms/checkbox/Checkbox.d.ts.map +1 -1
- package/dist/forms/combobox/Combobox.d.ts.map +1 -1
- package/dist/forms/index.js +5 -5
- package/dist/icons/index.js +1 -1
- package/dist/index.js +11 -11
- package/dist/layout/index.js +3 -3
- package/dist/nav/index.js +3 -3
- package/dist/nav/navigationMenu/NavigationMenu.d.ts.map +1 -1
- package/dist/overlays/hoverCard/HoverCard.d.ts.map +1 -1
- package/dist/overlays/index.js +2 -2
- package/dist/overlays/popover/Popover.d.ts.map +1 -1
- package/dist/utils/ColorExtensions.d.ts +39 -0
- package/dist/utils/ColorExtensions.d.ts.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-3YNJTBYF.js.map +0 -1
- package/dist/chunk-BUWJN6SN.js.map +0 -1
- package/dist/chunk-CWT5VEMU.js.map +0 -1
- package/dist/chunk-VTVWJBOP.js.map +0 -1
- package/dist/chunk-WU5JMO3N.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/actions/button/Button.variants.ts","../src/actions/button/Button.tsx","../src/actions/link/Link.variants.ts","../src/actions/link/Link.tsx","../src/actions/buttonGroup/ButtonGroup.tsx","../src/actions/toggleButton/ToggleButton.variants.ts","../src/actions/toggleButton/ToggleButton.tsx","../src/actions/toggleButtonGroup/ToggleButtonGroup.tsx","../src/actions/segmentedControl/SegmentedControl.tsx","../src/actions/fab/FAB.variants.ts","../src/actions/fab/FAB.tsx","../src/actions/copyButton/CopyButton.tsx","../src/actions/disclosureButton/DisclosureButton.tsx","../src/actions/toolbar/Toolbar.tsx","../src/actions/speedDial/SpeedDial.tsx","../src/actions/backToTopButton/BackToTopButton.tsx"],"names":["forwardRef","jsx","COMPONENT_NAME","useRef","useEffect","jsxs","Toolbar","ToolbarButton","ToolbarLink","createContext","useContext","SpeedDialTrigger","SpeedDialAction","BackToTopButton"],"mappings":"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","file":"chunk-BUWJN6SN.js","sourcesContent":["import { tv, type VariantProps } from '../../utils';\n\n/** Button visual surface — see Button.standard.md + Button.spec.md. */\nexport const buttonVariants = tv({\n base: [\n // layout\n 'inline-flex items-center justify-center gap-2',\n // typography\n 'font-medium align-middle',\n // borders (forced-colors fallback)\n 'border border-transparent',\n 'forced-colors:border-[ButtonBorder]',\n // transitions (color only)\n 'transition-colors duration-150 ease-out',\n 'motion-reduce:transition-none',\n // focus\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n // disabled (native attr handles click-blocking; pointer-events-none would\n // suppress the cursor visual, so we don't add it here)\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n // skeleton state — wins over everything\n 'data-[state=skeleton]:!bg-muted data-[state=skeleton]:!text-transparent data-[state=skeleton]:!border-transparent data-[state=skeleton]:!cursor-default data-[state=skeleton]:!pointer-events-none data-[state=skeleton]:animate-pulse',\n 'data-[state=skeleton]:[&>*]:!invisible',\n ],\n variants: {\n variant: {\n solid: '',\n soft: '',\n surface: '',\n outline: 'bg-transparent',\n ghost: 'bg-transparent',\n link: 'bg-transparent !h-auto !p-0 !rounded-none underline-offset-4 hover:underline focus-visible:ring-offset-0',\n glass:\n 'bg-black/45 text-white/70 backdrop-blur-md hover:bg-black/65 hover:text-white active:bg-black/75',\n 'glass-surface':\n 'bg-black/45 text-white/70 backdrop-blur-md hover:bg-black/65 hover:text-white active:bg-black/75 border-white/10',\n },\n tone: {\n primary: '',\n neutral: '',\n danger: '',\n success: '',\n warning: '',\n },\n size: {\n xs: 'h-[calc(1.5rem*var(--ui-density-scale,1))] px-[calc(0.5rem*var(--ui-density-scale,1))] text-xs rounded-sm gap-1',\n sm: 'h-[calc(2rem*var(--ui-density-scale,1))] px-[calc(0.75rem*var(--ui-density-scale,1))] text-sm rounded-md gap-1.5',\n md: 'h-[calc(2.5rem*var(--ui-density-scale,1))] px-[calc(1rem*var(--ui-density-scale,1))] text-sm rounded-md gap-2',\n lg: 'h-[calc(3rem*var(--ui-density-scale,1))] px-[calc(1.5rem*var(--ui-density-scale,1))] text-base rounded-lg gap-2',\n xl: 'h-[calc(3.5rem*var(--ui-density-scale,1))] px-[calc(2rem*var(--ui-density-scale,1))] text-base rounded-lg gap-2.5',\n },\n shape: {\n default: '',\n square: 'aspect-square !px-0',\n circle: 'aspect-square !px-0 !rounded-full',\n },\n fullWidth: {\n true: 'w-full',\n false: '',\n },\n wrap: {\n true: 'whitespace-normal text-left',\n false: 'whitespace-nowrap text-ellipsis overflow-hidden',\n },\n },\n compoundVariants: [\n // === SOLID × tone ===\n { variant: 'solid', tone: 'primary', class: 'bg-primary text-primary-foreground hover:bg-primary/90 active:bg-primary/95' },\n { variant: 'solid', tone: 'neutral', class: 'bg-muted text-foreground hover:bg-muted/80 active:bg-muted/85' },\n { variant: 'solid', tone: 'danger', class: 'bg-destructive text-destructive-foreground hover:bg-destructive/90 active:bg-destructive/95' },\n { variant: 'solid', tone: 'success', class: 'bg-success text-success-foreground hover:bg-success/90 active:bg-success/95' },\n { variant: 'solid', tone: 'warning', class: 'bg-warning text-warning-foreground hover:bg-warning/90 active:bg-warning/95' },\n\n // === SOFT × tone ===\n { variant: 'soft', tone: 'primary', class: 'bg-primary-soft text-primary-soft-foreground hover:bg-primary-soft/80 active:bg-primary-soft/85' },\n { variant: 'soft', tone: 'neutral', class: 'bg-muted/60 text-foreground hover:bg-muted/80 active:bg-muted/85' },\n { variant: 'soft', tone: 'danger', class: 'bg-destructive-soft text-destructive-soft-foreground hover:bg-destructive-soft/80 active:bg-destructive-soft/85' },\n { variant: 'soft', tone: 'success', class: 'bg-success-soft text-success-soft-foreground hover:bg-success-soft/80 active:bg-success-soft/85' },\n { variant: 'soft', tone: 'warning', class: 'bg-warning-soft text-warning-soft-foreground hover:bg-warning-soft/80 active:bg-warning-soft/85' },\n\n // === SURFACE × tone (subtle tinted bg + visible tone-colored border) ===\n { variant: 'surface', tone: 'primary', class: 'bg-primary/5 border-primary/40 text-primary hover:bg-primary/10 active:bg-primary/15' },\n { variant: 'surface', tone: 'neutral', class: 'bg-muted/30 border-border-strong text-foreground hover:bg-muted/50 active:bg-muted/70' },\n { variant: 'surface', tone: 'danger', class: 'bg-destructive/5 border-destructive/40 text-destructive hover:bg-destructive/10 active:bg-destructive/15' },\n { variant: 'surface', tone: 'success', class: 'bg-success/5 border-success/40 text-success hover:bg-success/10 active:bg-success/15' },\n { variant: 'surface', tone: 'warning', class: 'bg-warning/10 border-warning/40 text-warning hover:bg-warning/15 active:bg-warning/20' },\n\n // === OUTLINE × tone ===\n { variant: 'outline', tone: 'primary', class: 'border-primary/50 text-primary hover:bg-primary/10 active:bg-primary/15' },\n { variant: 'outline', tone: 'neutral', class: 'border-border-strong text-foreground hover:bg-muted/50 active:bg-muted/70' },\n { variant: 'outline', tone: 'danger', class: 'border-destructive/50 text-destructive hover:bg-destructive/10 active:bg-destructive/15' },\n { variant: 'outline', tone: 'success', class: 'border-success/50 text-success hover:bg-success/10 active:bg-success/15' },\n { variant: 'outline', tone: 'warning', class: 'border-warning/60 text-warning hover:bg-warning/10 active:bg-warning/15' },\n\n // === GHOST × tone ===\n { variant: 'ghost', tone: 'primary', class: 'text-primary hover:bg-primary/10 active:bg-primary/15' },\n { variant: 'ghost', tone: 'neutral', class: 'text-foreground hover:bg-foreground/10 active:bg-foreground/15' },\n { variant: 'ghost', tone: 'danger', class: 'text-destructive hover:bg-destructive/10 active:bg-destructive/15' },\n { variant: 'ghost', tone: 'success', class: 'text-success hover:bg-success/10 active:bg-success/15' },\n { variant: 'ghost', tone: 'warning', class: 'text-warning hover:bg-warning/10 active:bg-warning/15' },\n\n // === LINK × tone (h/padding/radius cleared by variant) ===\n { variant: 'link', tone: 'primary', class: 'text-primary' },\n { variant: 'link', tone: 'neutral', class: 'text-foreground' },\n { variant: 'link', tone: 'danger', class: 'text-destructive' },\n { variant: 'link', tone: 'success', class: 'text-success' },\n { variant: 'link', tone: 'warning', class: 'text-warning' },\n\n // === GLASS / GLASS-SURFACE × tone ===\n // Only `danger` is wired today (matches old image-overlay convention: red on hover).\n // Other tones are inert — base dark glass renders identically across tones.\n { variant: 'glass', tone: 'danger', class: 'hover:bg-destructive/65 active:bg-destructive/75' },\n { variant: 'glass-surface', tone: 'danger', class: 'hover:bg-destructive/65 active:bg-destructive/75' },\n ],\n defaultVariants: {\n variant: 'solid',\n tone: 'primary',\n size: 'md',\n shape: 'default',\n fullWidth: false,\n wrap: false,\n },\n});\n\nexport type ButtonVariants = VariantProps<typeof buttonVariants>;\n","import {\n forwardRef,\n useEffect,\n useRef,\n type ButtonHTMLAttributes,\n type CSSProperties,\n type KeyboardEvent,\n type KeyboardEventHandler,\n type MouseEvent,\n type MouseEventHandler,\n type PointerEvent,\n type PointerEventHandler,\n type ReactNode,\n} from 'react';\nimport {\n cn,\n composeEventHandlers,\n ButtonType,\n CssExtensions,\n HtmlElement,\n Key,\n OptionalExtensions,\n PressExtensions,\n type BoxSizeOverrides,\n type PaddingProp,\n type PressEvent,\n type RadiusProp,\n type SizePreset,\n type SizeUnion,\n type SizeValue,\n} from '../../utils';\nimport { Slot } from '../../primitives';\nimport { Spinner } from '../../icons';\nimport { useDebounceHandler } from '../../hooks';\nimport { buttonVariants, type ButtonVariants } from './Button.variants';\n\nconst COMPONENT_NAME = 'Button';\n\n/* Named size presets — used for variant lookup. Any other string/number/object flows to box-overrides. Subset of the canonical `SizePreset` vocabulary. */\ntype ButtonSizePreset = Extract<SizePreset, 'xs' | 'sm' | 'md' | 'lg' | 'xl'>;\nconst BUTTON_SIZE_PRESETS: ReadonlySet<string> = new Set<ButtonSizePreset>(['xs', 'sm', 'md', 'lg', 'xl']);\n\n/**\n * Union accepted by Button's `size` prop:\n * - preset: `'xs' | 'sm' | 'md' | 'lg' | 'xl'` — applies the variant class (height + padding + font)\n * - `number`: raw px, applied to both width and height (square shorthand)\n * - `string` (non-preset): any CSS unit (`'2rem'`, `'24px'`), applied to both width and height\n * - object: `{ width?, height?, minWidth?, minHeight?, boxSize? }` — explicit per-dim overrides\n *\n * Raw or object forms set inline dimensions only — no padding/font baseline. Combine with `padding` if text-bearing.\n */\nexport type ButtonSize = SizeUnion<ButtonSizePreset>;\n\n/* Observable state surfaced via the `data-state` DOM attribute. */\nconst ButtonDataState = {\n Loading: 'loading',\n Skeleton: 'skeleton',\n Disabled: 'disabled',\n} as const;\ntype ButtonDataState = (typeof ButtonDataState)[keyof typeof ButtonDataState];\n\nexport interface ButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'type' | 'disabled'>,\n Omit<ButtonVariants, 'size'> {\n /* Preset name OR raw value OR explicit dim object — see `ButtonSize` for details. */\n size?: ButtonSize;\n\n /* Slot before children (logical start). */\n leadingSlot?: ReactNode;\n\n /* Slot after children (logical end). */\n trailingSlot?: ReactNode;\n\n /* Custom indicator shown in place of the built-in `<Spinner/>` when `isLoading` is true. */\n loadingSlot?: ReactNode;\n\n /* Action-loading: replaces leading w/ spinner, sets aria-busy, blocks clicks. */\n isLoading?: boolean;\n\n /* Replaces children when loading. No default — consumer supplies (i18n). */\n loadingText?: string;\n\n /* Content-loading: hides content (preserves dimensions) + shimmer. Mutually exclusive with `isLoading`. */\n isSkeleton?: boolean;\n\n /* Removes from focus order, blocks clicks. Forwards to native `disabled`. */\n isDisabled?: boolean;\n\n /* Stretches to fill container width. */\n isFullWidth?: boolean;\n\n /* Allows multi-line label wrap; default truncates to single line. */\n isMultiline?: boolean;\n\n /* Render as the single child element via Slot. */\n asChild?: boolean;\n\n /* Independent padding override (preset token or `{x, y}` object). */\n padding?: PaddingProp;\n\n /* Independent radius override (preset token or raw value). */\n radius?: RadiusProp;\n\n /* Explicit width override. Number = px; string = any CSS unit. */\n width?: SizeValue;\n\n /* Explicit height override. Number = px; string = any CSS unit. */\n height?: SizeValue;\n\n /* Reserve a min width so the button doesn't reflow when its label morphs. */\n minWidth?: SizeValue;\n\n /* Reserve a min height — symmetric with `minWidth`. */\n minHeight?: SizeValue;\n\n /* Square shorthand — applied as fallback for both `width` and `height`. Explicit `width`/`height` win when both are set. Pairs with `shape=\"square\"` / `shape=\"circle\"` for icon buttons. */\n boxSize?: SizeValue;\n\n /* Default `ButtonType.Button` — NOT browser-default `'submit'`. */\n type?: ButtonType;\n\n /* Fires on pointer-down OR Space/Enter keydown (first event in a gesture). */\n onPressStart?: (event: PressEvent<HTMLButtonElement>) => void;\n\n /* Fires on pointer-up/cancel OR Space/Enter keyup. */\n onPressEnd?: (event: PressEvent<HTMLButtonElement>) => void;\n\n /* Fires when the pointer is held for `longPressDelay` ms. Suppresses the next click. */\n onLongPress?: (event: PointerEvent<HTMLButtonElement>) => void;\n\n /* Long-press duration (ms). Default 500. Out-of-range values trigger a dev warning. */\n longPressDelay?: number;\n\n /* Throttle clicks within window — first wins; subsequent swallowed via `preventDefault()`. */\n debounceMs?: number;\n}\n\ninterface UseButtonInteractivityOptions {\n isInactive: boolean;\n isLoading: boolean;\n isSkeleton: boolean;\n longPressDelay: number;\n debounceMs?: number;\n onClick?: MouseEventHandler<HTMLButtonElement>;\n onPressStart?: (event: PressEvent<HTMLButtonElement>) => void;\n onPressEnd?: (event: PressEvent<HTMLButtonElement>) => void;\n onLongPress?: (event: PointerEvent<HTMLButtonElement>) => void;\n onPointerDown?: PointerEventHandler<HTMLButtonElement>;\n onPointerUp?: PointerEventHandler<HTMLButtonElement>;\n onPointerCancel?: PointerEventHandler<HTMLButtonElement>;\n onPointerLeave?: PointerEventHandler<HTMLButtonElement>;\n onKeyDown?: KeyboardEventHandler<HTMLButtonElement>;\n onKeyUp?: KeyboardEventHandler<HTMLButtonElement>;\n}\n\n/* Press / long-press / debounce wiring. Returns the 6 DOM event handlers for spread onto the element. */\nfunction useButtonInteractivity(opts: UseButtonInteractivityOptions) {\n const isPressingRef = useRef(false);\n const longPressTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const longPressFiredRef = useRef(false);\n\n useEffect(\n () => () => {\n if (longPressTimerRef.current !== undefined) {\n clearTimeout(longPressTimerRef.current);\n }\n },\n [],\n );\n\n const cancelLongPress = () => {\n if (longPressTimerRef.current !== undefined) {\n clearTimeout(longPressTimerRef.current);\n longPressTimerRef.current = undefined;\n }\n };\n\n const endPress = (e: PressEvent<HTMLButtonElement>) => {\n if (isPressingRef.current) {\n isPressingRef.current = false;\n opts.onPressEnd?.(e);\n }\n };\n\n const handlePointerDown = (e: PointerEvent<HTMLButtonElement>) => {\n if (opts.isInactive) return;\n if (!isPressingRef.current) {\n isPressingRef.current = true;\n longPressFiredRef.current = false;\n opts.onPressStart?.(e);\n }\n if (opts.onLongPress) {\n longPressTimerRef.current = setTimeout(() => {\n longPressFiredRef.current = true;\n opts.onLongPress?.(e);\n longPressTimerRef.current = undefined;\n }, opts.longPressDelay);\n }\n };\n\n const handlePointerUp = (e: PointerEvent<HTMLButtonElement>) => {\n cancelLongPress();\n endPress(e);\n };\n\n const handlePointerCancel = (e: PointerEvent<HTMLButtonElement>) => {\n cancelLongPress();\n endPress(e);\n };\n\n const handlePointerLeave = () => {\n // Pointer leaving cancels a pending long-press but does NOT end the press itself —\n // pointer-up/cancel handlers do that. Matches React Aria.\n cancelLongPress();\n };\n\n const isActivationKey = (e: KeyboardEvent<HTMLButtonElement>) =>\n e.key === Key.Space || e.key === Key.Enter;\n\n const handleKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (opts.isInactive) return;\n if (isActivationKey(e) && !e.repeat && !isPressingRef.current) {\n isPressingRef.current = true;\n longPressFiredRef.current = false;\n opts.onPressStart?.(e);\n }\n };\n\n const handleKeyUp = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (isActivationKey(e) && isPressingRef.current) {\n isPressingRef.current = false;\n opts.onPressEnd?.(e);\n }\n };\n\n // Long-press suppression happens BEFORE this — a suppressed click does NOT advance the throttle window.\n const debouncedOnClick = useDebounceHandler(opts.onClick, opts.debounceMs);\n\n const handleClick = (e: MouseEvent<HTMLButtonElement>) => {\n if (opts.isLoading || opts.isSkeleton) return;\n if (longPressFiredRef.current) {\n longPressFiredRef.current = false;\n e.preventDefault();\n return;\n }\n debouncedOnClick(e);\n };\n\n return {\n onClick: handleClick,\n onPointerDown: composeEventHandlers(opts.onPointerDown, handlePointerDown),\n onPointerUp: composeEventHandlers(opts.onPointerUp, handlePointerUp),\n onPointerCancel: composeEventHandlers(opts.onPointerCancel, handlePointerCancel),\n onPointerLeave: composeEventHandlers(opts.onPointerLeave, handlePointerLeave),\n onKeyDown: composeEventHandlers(opts.onKeyDown, handleKeyDown),\n onKeyUp: composeEventHandlers(opts.onKeyUp, handleKeyUp),\n };\n}\n\n/* Renders an action button — for text and/or icon content. */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n style,\n variant,\n tone,\n size,\n shape,\n isFullWidth,\n isMultiline,\n padding,\n radius,\n width,\n height,\n minWidth,\n minHeight,\n boxSize,\n leadingSlot,\n trailingSlot,\n loadingSlot,\n isLoading,\n loadingText,\n isSkeleton,\n isDisabled,\n asChild,\n type = ButtonType.Button,\n children,\n onClick,\n onPressStart,\n onPressEnd,\n onLongPress,\n longPressDelay = PressExtensions.longPressDelay.default,\n debounceMs,\n onPointerDown,\n onPointerUp,\n onPointerCancel,\n onPointerLeave,\n onKeyDown,\n onKeyUp,\n ...rest\n },\n ref,\n ) => {\n if (isLoading && isSkeleton) {\n console.warn(\n `[${COMPONENT_NAME}] \\`isLoading\\` and \\`isSkeleton\\` are mutually exclusive — \\`isSkeleton\\` takes precedence.`,\n );\n }\n\n let safeLongPressDelay = longPressDelay;\n if (\n longPressDelay < PressExtensions.longPressDelay.min ||\n longPressDelay > PressExtensions.longPressDelay.max\n ) {\n console.warn(\n `[${COMPONENT_NAME}] longPressDelay=${longPressDelay}ms is outside reasonable range (${PressExtensions.longPressDelay.min}–${PressExtensions.longPressDelay.max}ms). Falling back to ${PressExtensions.longPressDelay.default}ms.`,\n );\n safeLongPressDelay = PressExtensions.longPressDelay.default;\n }\n\n const skeletonActive = !!isSkeleton;\n const loadingActive = !skeletonActive && !!isLoading;\n const isInactive = loadingActive || skeletonActive || !!isDisabled;\n\n const dataState: ButtonDataState | undefined = skeletonActive\n ? ButtonDataState.Skeleton\n : loadingActive\n ? ButtonDataState.Loading\n : isDisabled\n ? ButtonDataState.Disabled\n : undefined;\n\n const Comp = asChild ? Slot : HtmlElement.Button;\n\n /* Parse the union-typed `size` prop into preset (for variant lookup) + box overrides (for inline dims). */\n const { preset: sizePreset, box: sizeBox } = CssExtensions.parseSizeUnion<ButtonSizePreset>(\n size,\n BUTTON_SIZE_PRESETS,\n );\n\n const overrideStyle: CSSProperties | undefined = (() => {\n const padStyle = CssExtensions.resolvePadding(padding);\n const radStyle = CssExtensions.resolveRadius(radius);\n /* Box overrides — `size` (object form or raw value) is the base; flat width/height/minWidth/minHeight/boxSize props win when both are set. */\n const composedBox: BoxSizeOverrides = {\n ...(sizeBox ?? {}),\n ...(width !== undefined ? { width } : {}),\n ...(height !== undefined ? { height } : {}),\n ...(minWidth !== undefined ? { minWidth } : {}),\n ...(minHeight !== undefined ? { minHeight } : {}),\n ...(boxSize !== undefined ? { boxSize } : {}),\n };\n const boxStyle = CssExtensions.resolveBoxSize(composedBox);\n if (!padStyle && !radStyle && !boxStyle && !style) return undefined;\n return { ...padStyle, ...radStyle, ...boxStyle, ...style };\n })();\n\n const eventHandlers = useButtonInteractivity({\n isInactive,\n isLoading: loadingActive,\n isSkeleton: skeletonActive,\n longPressDelay: safeLongPressDelay,\n debounceMs,\n onClick,\n onPressStart,\n onPressEnd,\n onLongPress,\n onPointerDown,\n onPointerUp,\n onPointerCancel,\n onPointerLeave,\n onKeyDown,\n onKeyUp,\n });\n\n const content = loadingActive ? (\n <>\n {loadingSlot ?? <Spinner />}\n {loadingText !== undefined && <span>{loadingText}</span>}\n </>\n ) : (\n <>\n {leadingSlot}\n {children}\n {trailingSlot}\n </>\n );\n\n /* asChild bypasses the fragment-wrapped content so Slot can merge className/style onto the user's element. leadingSlot/trailingSlot/isLoading rendering aren't supported in asChild mode — consumer owns the rendered children entirely. */\n const renderedContent = asChild ? children : content;\n\n return (\n <Comp\n ref={ref}\n type={asChild ? undefined : type}\n className={cn(\n buttonVariants({\n variant,\n tone,\n size: sizePreset,\n shape,\n fullWidth: isFullWidth,\n wrap: isMultiline,\n }),\n className,\n )}\n style={overrideStyle}\n disabled={OptionalExtensions.from(isDisabled, true)}\n aria-busy={OptionalExtensions.from(loadingActive || skeletonActive, true)}\n tabIndex={OptionalExtensions.from(skeletonActive, -1)}\n data-state={dataState}\n {...eventHandlers}\n {...rest}\n >\n {renderedContent}\n </Comp>\n );\n },\n);\n\nButton.displayName = COMPONENT_NAME;\n","import { tv, type VariantProps } from '../../utils';\n\nexport const linkVariants = tv({\n base: 'inline-flex items-center transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm',\n variants: {\n variant: {\n default: 'text-primary hover:text-primary/85 hover:underline',\n subtle: 'text-foreground hover:underline',\n muted: 'text-muted-foreground hover:text-foreground hover:underline',\n inherit: 'text-current underline-offset-2 hover:underline',\n },\n size: {\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n});\n\nexport type LinkVariants = VariantProps<typeof linkVariants>;\n","import { forwardRef, type AnchorHTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { Slot } from '../../primitives/slot/Slot';\nimport { linkVariants, type LinkVariants } from './Link.variants';\n\nexport interface LinkProps extends AnchorHTMLAttributes<HTMLAnchorElement>, LinkVariants {\n /** When true, render the child element as the link instead of an `<a>`.\n * Use for router `<Link>` components from Next.js / React Router. */\n asChild?: boolean;\n}\n\n/** Anchor with consistent focus/hover styling — `asChild` swaps in router links. */\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'a';\n return (\n <Comp\n ref={ref}\n className={cn(linkVariants({ variant, size }), className)}\n {...(props as AnchorHTMLAttributes<HTMLAnchorElement>)}\n />\n );\n },\n);\nLink.displayName = 'Link';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\n\nexport interface ButtonGroupProps extends ComponentPropsWithoutRef<'div'> {\n /** Visual orientation. Default `horizontal`. */\n orientation?: 'horizontal' | 'vertical';\n /** Group children with collapsed inner radii (connected look). Default `true`. */\n attached?: boolean;\n}\n\n/** Visually groups action-children — collapses inner radii when `attached`. */\nexport const ButtonGroup = forwardRef<HTMLDivElement, ButtonGroupProps>(\n ({ orientation = 'horizontal', attached = true, className, ...props }, ref) => (\n <div\n ref={ref}\n role=\"group\"\n data-orientation={orientation}\n className={cn(\n 'inline-flex',\n orientation === 'horizontal' ? 'flex-row' : 'flex-col',\n attached\n ? orientation === 'horizontal'\n ? '[&>*]:rounded-none [&>*:first-child]:rounded-l-md [&>*:last-child]:rounded-r-md [&>*:not(:first-child)]:-ml-px'\n : '[&>*]:rounded-none [&>*:first-child]:rounded-t-md [&>*:last-child]:rounded-b-md [&>*:not(:first-child)]:-mt-px'\n : 'gap-2',\n className,\n )}\n {...props}\n />\n ),\n);\nButtonGroup.displayName = 'ButtonGroup';\n","import { tv, type VariantProps } from '../../utils';\n\n/* Variant × tone matrix for ToggleButton's press-state appearance. Applied on top of Button (variant='ghost' tone='neutral' baseline). Press state is keyed off `data-pressed=\"true\"` — distinct from Button's `data-state` (loading/skeleton/disabled). */\nexport const toggleButtonVariants = tv({\n base: '',\n variants: {\n variant: {\n ghost: '',\n soft: '',\n outline: 'border',\n solid: 'border',\n glass: 'border border-transparent backdrop-blur-md',\n 'glass-surface': 'border backdrop-blur-md',\n },\n tone: {\n primary: '',\n neutral: '',\n danger: '',\n success: '',\n warning: '',\n },\n },\n compoundVariants: [\n // === GHOST × tone — text color only, transparent bg ===\n { variant: 'ghost', tone: 'primary', class: 'text-foreground/50 data-[pressed=true]:text-primary' },\n { variant: 'ghost', tone: 'neutral', class: 'text-foreground/50 data-[pressed=true]:text-foreground' },\n { variant: 'ghost', tone: 'danger', class: 'text-foreground/50 data-[pressed=true]:text-destructive' },\n { variant: 'ghost', tone: 'success', class: 'text-foreground/50 data-[pressed=true]:text-success' },\n { variant: 'ghost', tone: 'warning', class: 'text-foreground/50 data-[pressed=true]:text-warning' },\n\n // === SOFT × tone — pressed gets tone-soft bg ===\n { variant: 'soft', tone: 'primary', class: 'text-foreground/70 data-[pressed=true]:bg-primary-soft data-[pressed=true]:text-primary-soft-foreground' },\n { variant: 'soft', tone: 'neutral', class: 'text-foreground/70 data-[pressed=true]:bg-muted data-[pressed=true]:text-foreground' },\n { variant: 'soft', tone: 'danger', class: 'text-foreground/70 data-[pressed=true]:bg-destructive-soft data-[pressed=true]:text-destructive-soft-foreground' },\n { variant: 'soft', tone: 'success', class: 'text-foreground/70 data-[pressed=true]:bg-success-soft data-[pressed=true]:text-success-soft-foreground' },\n { variant: 'soft', tone: 'warning', class: 'text-foreground/70 data-[pressed=true]:bg-warning-soft data-[pressed=true]:text-warning-soft-foreground' },\n\n // === OUTLINE × tone — pressed swaps to tone border + tone text ===\n { variant: 'outline', tone: 'primary', class: 'border-input text-foreground/70 data-[pressed=true]:border-primary data-[pressed=true]:text-primary' },\n { variant: 'outline', tone: 'neutral', class: 'border-input text-foreground/70 data-[pressed=true]:border-foreground data-[pressed=true]:text-foreground' },\n { variant: 'outline', tone: 'danger', class: 'border-input text-foreground/70 data-[pressed=true]:border-destructive data-[pressed=true]:text-destructive' },\n { variant: 'outline', tone: 'success', class: 'border-input text-foreground/70 data-[pressed=true]:border-success data-[pressed=true]:text-success' },\n { variant: 'outline', tone: 'warning', class: 'border-input text-foreground/70 data-[pressed=true]:border-warning data-[pressed=true]:text-warning' },\n\n // === SOLID × tone — pressed fills with tone ===\n { variant: 'solid', tone: 'primary', class: 'border-input bg-background text-foreground/70 data-[pressed=true]:bg-primary data-[pressed=true]:border-primary data-[pressed=true]:text-primary-foreground' },\n { variant: 'solid', tone: 'neutral', class: 'border-input bg-background text-foreground/70 data-[pressed=true]:bg-foreground data-[pressed=true]:border-foreground data-[pressed=true]:text-background' },\n { variant: 'solid', tone: 'danger', class: 'border-input bg-background text-foreground/70 data-[pressed=true]:bg-destructive data-[pressed=true]:border-destructive data-[pressed=true]:text-destructive-foreground' },\n { variant: 'solid', tone: 'success', class: 'border-input bg-background text-foreground/70 data-[pressed=true]:bg-success data-[pressed=true]:border-success data-[pressed=true]:text-success-foreground' },\n { variant: 'solid', tone: 'warning', class: 'border-input bg-background text-foreground/70 data-[pressed=true]:bg-warning data-[pressed=true]:border-warning data-[pressed=true]:text-warning-foreground' },\n\n // === GLASS × tone — dark glass; pressed darkens slightly + tone-tinted text on tone variants ===\n { variant: 'glass', tone: 'primary', class: 'bg-black/45 text-white/60 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-white' },\n { variant: 'glass', tone: 'neutral', class: 'bg-black/45 text-white/60 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-white' },\n { variant: 'glass', tone: 'danger', class: 'bg-black/45 text-white/60 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-destructive' },\n { variant: 'glass', tone: 'success', class: 'bg-black/45 text-white/60 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-success' },\n { variant: 'glass', tone: 'warning', class: 'bg-black/45 text-white/60 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-warning' },\n\n // === GLASS-SURFACE × tone — same as glass + visible border emphasis on press ===\n { variant: 'glass-surface', tone: 'primary', class: 'bg-black/45 text-white/60 border-white/10 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-white data-[pressed=true]:border-white/40' },\n { variant: 'glass-surface', tone: 'neutral', class: 'bg-black/45 text-white/60 border-white/10 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-white data-[pressed=true]:border-white/40' },\n { variant: 'glass-surface', tone: 'danger', class: 'bg-black/45 text-white/60 border-white/10 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-destructive data-[pressed=true]:border-destructive/60' },\n { variant: 'glass-surface', tone: 'success', class: 'bg-black/45 text-white/60 border-white/10 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-success data-[pressed=true]:border-success/60' },\n { variant: 'glass-surface', tone: 'warning', class: 'bg-black/45 text-white/60 border-white/10 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-warning data-[pressed=true]:border-warning/60' },\n ],\n defaultVariants: {\n variant: 'ghost',\n tone: 'primary',\n },\n});\n\nexport type ToggleButtonVariants = VariantProps<typeof toggleButtonVariants>;\n","import { forwardRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Button, type ButtonProps } from '../button/Button';\nimport { toggleButtonVariants, type ToggleButtonVariants } from './ToggleButton.variants';\n\nconst COMPONENT_NAME = 'ToggleButton';\n\n/* Render-prop signature for state-aware content/labels. */\ntype PressedFn<T> = (args: { pressed: boolean }) => T;\ntype StateAware<T> = T | PressedFn<T>;\n\n/* Children may be static OR a render-prop receiving `{ pressed }` — render-prop enables icon-swap patterns (e.g., Eye ↔ EyeOff) for both controlled and uncontrolled toggles. */\ntype ToggleButtonChildren = StateAware<ReactNode>;\n\nexport interface ToggleButtonProps\n extends Omit<ButtonProps, 'variant' | 'tone' | 'children' | 'title' | 'aria-label'>,\n ToggleButtonVariants {\n /* Controlled pressed state. */\n pressed?: boolean;\n\n /* Uncontrolled initial state. Ignored if `pressed` is set. */\n defaultPressed?: boolean;\n\n /* Fires whenever pressed state changes. */\n onPressedChange?: (pressed: boolean) => void;\n\n /* Static content OR render-prop receiving `{ pressed }` for state-driven swap. */\n children?: ToggleButtonChildren;\n\n /* Tooltip text — string OR fn receiving `{ pressed }`. State-aware form keeps consumer-supplied strings (i18n discipline). */\n title?: StateAware<string>;\n\n /* Accessible label — string OR fn. Use when icon-only or when `aria-pressed` alone is insufficient context for screen readers. */\n 'aria-label'?: StateAware<string>;\n}\n\n/* Two-state action button (on/off) — sets `aria-pressed` + `data-pressed=\"true|false\"`. Wraps Button to inherit size union, shape, asChild, loading, padding/radius. Press appearance lives in `toggleButtonVariants` (variant × tone matrix); ToggleButton's own appearance overrides Button's neutral-ghost baseline via class order. */\nexport const ToggleButton = forwardRef<HTMLButtonElement, ToggleButtonProps>(\n (\n {\n pressed,\n defaultPressed,\n onPressedChange,\n onClick,\n variant = 'ghost',\n tone = 'primary',\n className,\n children,\n title,\n 'aria-label': ariaLabel,\n ...buttonProps\n },\n ref,\n ) => {\n const [value, setValue] = useControlled({\n controlled: pressed,\n default: defaultPressed ?? false,\n onChange: onPressedChange,\n });\n\n const renderedChildren =\n typeof children === 'function' ? children({ pressed: value }) : children;\n\n /* Resolve state-aware string props to plain strings for the underlying Button. */\n const resolvedTitle =\n typeof title === 'function' ? title({ pressed: value }) : title;\n const resolvedAriaLabel =\n typeof ariaLabel === 'function' ? ariaLabel({ pressed: value }) : ariaLabel;\n\n return (\n <Button\n ref={ref}\n /* Neutral baseline — ToggleButton's compound classes paint over Button's defaults via class order. */\n variant=\"ghost\"\n tone=\"neutral\"\n aria-pressed={value}\n aria-label={resolvedAriaLabel}\n data-pressed={value ? 'true' : 'false'}\n title={resolvedTitle}\n onClick={(e) => {\n onClick?.(e);\n if (!e.defaultPrevented) setValue(!value);\n }}\n className={cn(toggleButtonVariants({ variant, tone }), className)}\n {...buttonProps}\n >\n {renderedChildren}\n </Button>\n );\n },\n);\n\nToggleButton.displayName = COMPONENT_NAME;\n","import {\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n type ComponentPropsWithoutRef,\n type ReactElement,\n} from 'react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport type { ToggleButtonProps } from '../toggleButton/ToggleButton';\n\ntype Mode = 'single' | 'multi';\n\ninterface SingleProps {\n type?: 'single';\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string | null) => void;\n}\n\ninterface MultiProps {\n type: 'multi';\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (value: string[]) => void;\n}\n\ntype ToggleButtonGroupProps = Omit<ComponentPropsWithoutRef<'div'>, 'defaultValue' | 'onChange'> & {\n orientation?: 'horizontal' | 'vertical';\n attached?: boolean;\n} & (SingleProps | MultiProps);\n\ninterface ChildLike extends ToggleButtonProps {\n value?: string;\n}\n\n/** Coordinates a row/column of ToggleButton children — `type=\"single\" | \"multi\"`. */\nexport const ToggleButtonGroup = forwardRef<HTMLDivElement, ToggleButtonGroupProps>(\n (props, ref) => {\n const { orientation = 'horizontal', attached = true, className, children, ...rest } = props;\n const mode: Mode = props.type === 'multi' ? 'multi' : 'single';\n\n const [singleValue, setSingleValue] = useControlled<string | null>({\n controlled: mode === 'single' ? (rest as SingleProps).value : undefined,\n default: mode === 'single' ? (rest as SingleProps).defaultValue ?? null : null,\n onChange: mode === 'single' ? (rest as SingleProps).onValueChange : undefined,\n });\n const [multiValue, setMultiValue] = useControlled<string[]>({\n controlled: mode === 'multi' ? (rest as MultiProps).value : undefined,\n default: mode === 'multi' ? (rest as MultiProps).defaultValue ?? [] : [],\n onChange: mode === 'multi' ? (rest as MultiProps).onValueChange : undefined,\n });\n\n const isPressed = (childValue: string | undefined): boolean => {\n if (childValue === undefined) return false;\n return mode === 'single' ? singleValue === childValue : multiValue.includes(childValue);\n };\n const togglePressed = (childValue: string | undefined) => {\n if (childValue === undefined) return;\n if (mode === 'single') {\n setSingleValue(singleValue === childValue ? null : childValue);\n } else {\n setMultiValue(\n multiValue.includes(childValue)\n ? multiValue.filter((v) => v !== childValue)\n : [...multiValue, childValue],\n );\n }\n };\n\n return (\n <div\n ref={ref}\n role={mode === 'single' ? 'radiogroup' : 'group'}\n data-orientation={orientation}\n className={cn(\n 'inline-flex',\n orientation === 'horizontal' ? 'flex-row' : 'flex-col',\n attached\n ? orientation === 'horizontal'\n ? '[&>*]:rounded-none [&>*:first-child]:rounded-l-md [&>*:last-child]:rounded-r-md [&>*:not(:first-child)]:-ml-px'\n : '[&>*]:rounded-none [&>*:first-child]:rounded-t-md [&>*:last-child]:rounded-b-md [&>*:not(:first-child)]:-mt-px'\n : 'gap-2',\n className,\n )}\n >\n {Children.map(children, (child) => {\n if (!isValidElement(child)) return child;\n const c = child as ReactElement<ChildLike>;\n const childValue = c.props.value;\n return cloneElement(c, {\n pressed: isPressed(childValue),\n onPressedChange: () => togglePressed(childValue),\n } as Partial<ChildLike>);\n })}\n </div>\n );\n },\n);\nToggleButtonGroup.displayName = 'ToggleButtonGroup';\n\nexport type { ToggleButtonGroupProps };\n","import { forwardRef } from 'react';\nimport { cn } from '../../utils';\nimport { ToggleButtonGroup, type ToggleButtonGroupProps } from '../toggleButtonGroup/ToggleButtonGroup';\n\nexport type SegmentedControlProps = ToggleButtonGroupProps;\n\n/** Visual variant of ToggleButtonGroup — iOS-style connected pill row. */\nexport const SegmentedControl = forwardRef<HTMLDivElement, SegmentedControlProps>(\n ({ className, ...props }, ref) => (\n <ToggleButtonGroup\n ref={ref}\n attached\n className={cn(\n 'rounded-md bg-muted p-1',\n '[&>*]:!rounded-md [&>*]:!ml-0 [&>*]:border-transparent [&>*]:bg-transparent',\n '[&>*[data-state=on]]:!bg-background [&>*[data-state=on]]:!text-foreground [&>*[data-state=on]]:shadow-sm',\n className,\n )}\n {...(props as ToggleButtonGroupProps)}\n />\n ),\n);\nSegmentedControl.displayName = 'SegmentedControl';\n","import { tv, type VariantProps } from '../../utils';\n\nexport const fabVariants = tv({\n base: 'fixed inline-flex items-center justify-center rounded-full shadow-lg transition-all hover:shadow-xl focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n variants: {\n variant: {\n primary: 'bg-primary text-primary-foreground hover:bg-primary/90',\n secondary: 'bg-card text-card-foreground border border-border hover:bg-muted',\n destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n },\n size: {\n sm: 'h-10 w-10',\n md: 'h-14 w-14',\n lg: 'h-16 w-16',\n },\n position: {\n 'bottom-right': 'bottom-6 right-6',\n 'bottom-left': 'bottom-6 left-6',\n 'bottom-center': 'bottom-6 left-1/2 -translate-x-1/2',\n 'top-right': 'top-6 right-6',\n 'top-left': 'top-6 left-6',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n position: 'bottom-right',\n },\n});\n\nexport type FABVariants = VariantProps<typeof fabVariants>;\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport { fabVariants, type FABVariants } from './FAB.variants';\n\nexport interface FABProps extends ButtonHTMLAttributes<HTMLButtonElement>, FABVariants {\n /** Required accessible label — FAB content is typically icon-only. */\n 'aria-label': string;\n children: ReactNode;\n}\n\n/** Floating Action Button — fixed-position circular button with shadow. */\nexport const FAB = forwardRef<HTMLButtonElement, FABProps>(\n ({ className, variant, size, position, type = 'button', ...props }, ref) => (\n <button\n ref={ref}\n type={type}\n className={cn(fabVariants({ variant, size, position }), className)}\n {...props}\n />\n ),\n);\nFAB.displayName = 'FAB';\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n type ReactNode,\n} from 'react';\nimport { Check, Copy } from 'lucide-react';\nimport { Icon } from '../../icons';\nimport { useClipboard } from '../../hooks';\nimport { OptionalExtensions } from '../../utils';\nimport { Button, type ButtonProps } from '../button/Button';\n\nconst COMPONENT_NAME = 'CopyButton';\n\nexport interface CopyButtonProps\n extends Omit<ButtonProps, 'onClick' | 'children' | 'aria-label' | 'onError'> {\n /* Text to copy when the button is activated. */\n text: string;\n\n /* Reset window for the `copied` state in ms. Default 2000. Set 0 to keep `copied` true until the next mount / explicit reset. */\n resetAfter?: number;\n\n /* Static content OR render-prop receiving `{copied, error}` for state-driven swap. Falls back to icon-only Copy/Check when omitted. */\n children?:\n | ReactNode\n | ((args: { copied: boolean; error: Error | null }) => ReactNode);\n\n /* Required accessible label — clipboard buttons are commonly icon-only and need a programmatic name. */\n 'aria-label': string;\n\n /* Override aria-label while copied=true. Falls back to `aria-label` when omitted (i18n discipline — consumer supplies all user-facing strings). */\n copiedAriaLabel?: string;\n\n /* Called with the caught Error when `navigator.clipboard.writeText` rejects. Fires once per error transition. */\n onError?: (error: Error) => void;\n}\n\n/* Renders a clipboard-copy button — for code blocks, ID / URL fields, and inline copy affordances. */\nexport const CopyButton = forwardRef<HTMLButtonElement, CopyButtonProps>(\n (\n {\n text,\n resetAfter = 2000,\n children,\n variant = 'ghost',\n 'aria-label': ariaLabel,\n copiedAriaLabel,\n onError,\n ...props\n },\n ref,\n ) => {\n const { copied, error, copy } = useClipboard({ resetAfter });\n\n // Stable ref keeps the effect's deps minimal — onError can be re-passed\n // unstably without re-firing on every render where `error` is set.\n const onErrorRef = useRef(onError);\n useEffect(() => {\n onErrorRef.current = onError;\n });\n\n useEffect(() => {\n if (error) onErrorRef.current?.(error);\n }, [error]);\n\n const effectiveAriaLabel = copied\n ? (copiedAriaLabel ?? ariaLabel)\n : ariaLabel;\n\n const content =\n typeof children === 'function'\n ? children({ copied, error })\n : (children ?? <Icon icon={copied ? Check : Copy} size={16} />);\n\n const handleClick = useCallback(() => {\n void copy(text);\n }, [copy, text]);\n\n return (\n <Button\n ref={ref}\n variant={variant}\n aria-label={effectiveAriaLabel}\n data-copied={OptionalExtensions.from(copied, 'true')}\n onClick={handleClick}\n {...props}\n >\n {content}\n </Button>\n );\n },\n);\n\nCopyButton.displayName = COMPONENT_NAME;\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { cn, dataAttr } from '../../utils';\nimport { Icon } from '../../icons';\nimport { useControlled } from '../../hooks';\n\nexport interface DisclosureButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children' | 'onChange'> {\n /** Visible label (left-aligned). */\n children?: ReactNode;\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial state. */\n defaultOpen?: boolean;\n /** Fires whenever open state changes. */\n onOpenChange?: (open: boolean) => void;\n /** Side the chevron sits on. Default `right`. */\n chevronSide?: 'left' | 'right';\n}\n\n/** Button with a rotating chevron — sets `aria-expanded` + `data-state=\"open|closed\"`. */\nexport const DisclosureButton = forwardRef<HTMLButtonElement, DisclosureButtonProps>(\n (\n {\n children,\n open,\n defaultOpen = false,\n onOpenChange,\n onClick,\n chevronSide = 'right',\n className,\n type = 'button',\n ...props\n },\n ref,\n ) => {\n const [value, setValue] = useControlled({\n controlled: open,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const chevron = (\n <Icon\n icon={ChevronDown}\n size={16}\n className={cn('transition-transform', value && 'rotate-180')}\n />\n );\n return (\n <button\n ref={ref}\n type={type}\n aria-expanded={value}\n data-state={value ? 'open' : 'closed'}\n data-disabled={dataAttr(props.disabled)}\n onClick={(e) => {\n onClick?.(e);\n if (!e.defaultPrevented) setValue(!value);\n }}\n className={cn(\n 'inline-flex w-full items-center justify-between gap-2 rounded-md px-3 py-2 text-sm font-medium text-foreground transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n className,\n )}\n {...props}\n >\n {chevronSide === 'left' && chevron}\n <span className=\"flex-1 text-left\">{children}</span>\n {chevronSide === 'right' && chevron}\n </button>\n );\n },\n);\nDisclosureButton.displayName = 'DisclosureButton';\n","import {\n createContext,\n forwardRef,\n useContext,\n type AnchorHTMLAttributes,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils';\nimport { RovingFocusGroup, Slot, useRovingFocusItem } from '../../primitives';\n\ninterface ToolbarContextValue {\n orientation: 'horizontal' | 'vertical';\n}\n\nconst ToolbarContext = createContext<ToolbarContextValue | null>(null);\n\nfunction useToolbarContext() {\n const ctx = useContext(ToolbarContext);\n if (!ctx) throw new Error('Toolbar.* must be used inside <Toolbar>');\n return ctx;\n}\n\nexport interface ToolbarProps extends HTMLAttributes<HTMLDivElement> {\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport const Toolbar = forwardRef<HTMLDivElement, ToolbarProps>(function Toolbar(\n { orientation = 'horizontal', className, children, ...rest },\n ref,\n) {\n return (\n <ToolbarContext.Provider value={{ orientation }}>\n <RovingFocusGroup\n ref={ref as never}\n orientation={orientation}\n loop\n role=\"toolbar\"\n aria-orientation={orientation}\n data-orientation={orientation}\n className={cn(\n 'inline-flex items-center gap-1 rounded-md border border-border bg-background p-1',\n orientation === 'vertical' && 'flex-col items-stretch',\n className,\n )}\n {...rest}\n >\n {children}\n </RovingFocusGroup>\n </ToolbarContext.Provider>\n );\n});\n\nexport interface ToolbarButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n asChild?: boolean;\n children: ReactNode;\n}\n\nexport const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>(\n function ToolbarButton({ asChild, className, onKeyDown, onFocus, children, ...rest }, ref) {\n const roving = useRovingFocusItem();\n const Component = asChild ? Slot : 'button';\n return (\n <Component\n ref={(node: HTMLButtonElement | null) => {\n roving.ref(node);\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n type={asChild ? undefined : 'button'}\n tabIndex={roving.tabIndex}\n onFocus={(e: React.FocusEvent<HTMLButtonElement>) => {\n onFocus?.(e);\n roving.onFocus();\n }}\n onKeyDown={(e: React.KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n roving.onKeyDown(e);\n }}\n className={cn(\n asChild\n ? className\n : cn(\n 'inline-flex h-8 items-center justify-center rounded-sm px-2 text-sm transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n className,\n ),\n )}\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\nexport interface ToolbarLinkProps\n extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'children'> {\n children: ReactNode;\n}\n\nexport const ToolbarLink = forwardRef<HTMLAnchorElement, ToolbarLinkProps>(function ToolbarLink(\n { className, onKeyDown, onFocus, children, ...rest },\n ref,\n) {\n const roving = useRovingFocusItem();\n return (\n <a\n ref={(node) => {\n roving.ref(node);\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n tabIndex={roving.tabIndex}\n onFocus={(e) => {\n onFocus?.(e);\n roving.onFocus();\n }}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n roving.onKeyDown(e);\n }}\n className={cn(\n 'inline-flex h-8 items-center justify-center rounded-sm px-2 text-sm text-foreground underline-offset-2 transition-colors hover:bg-muted hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...rest}\n >\n {children}\n </a>\n );\n});\n\nexport function ToolbarSeparator(props: HTMLAttributes<HTMLDivElement>) {\n const ctx = useToolbarContext();\n return (\n <div\n role=\"separator\"\n aria-orientation={ctx.orientation === 'vertical' ? 'horizontal' : 'vertical'}\n className={cn(\n 'shrink-0 bg-border',\n ctx.orientation === 'vertical' ? 'mx-1 h-px' : 'my-1 w-px',\n )}\n {...props}\n />\n );\n}\n\ntype ToolbarComponent = typeof Toolbar & {\n Button: typeof ToolbarButton;\n Link: typeof ToolbarLink;\n Separator: typeof ToolbarSeparator;\n};\n\n(Toolbar as ToolbarComponent).Button = ToolbarButton;\n(Toolbar as ToolbarComponent).Link = ToolbarLink;\n(Toolbar as ToolbarComponent).Separator = ToolbarSeparator;\n\nexport default Toolbar as ToolbarComponent;\n","import {\n createContext,\n forwardRef,\n useContext,\n useMemo,\n useRef,\n type ButtonHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { Plus, X } from 'lucide-react';\nimport { cn, composeRefs } from '../../utils';\nimport { useControlled, useEscape, useOutsideClick } from '../../hooks';\nimport { Icon } from '../../icons';\nimport { FAB } from '../fab';\nimport type { FABVariants } from '../fab/FAB.variants';\n\nexport type SpeedDialPosition = NonNullable<FABVariants['position']>;\nexport type SpeedDialDirection = 'up' | 'down' | 'left' | 'right';\n\ninterface SpeedDialContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLButtonElement | null>;\n rootRef: React.MutableRefObject<HTMLDivElement | null>;\n direction: SpeedDialDirection;\n position: SpeedDialPosition;\n}\n\nconst SpeedDialContext = createContext<SpeedDialContextValue | null>(null);\n\nfunction useSpeedDialContext() {\n const ctx = useContext(SpeedDialContext);\n if (!ctx) throw new Error('SpeedDial.* must be used inside <SpeedDial>');\n return ctx;\n}\n\nconst POSITION_TO_DIRECTION: Record<SpeedDialPosition, SpeedDialDirection> = {\n 'bottom-right': 'up',\n 'bottom-left': 'up',\n 'bottom-center': 'up',\n 'top-right': 'down',\n 'top-left': 'down',\n};\n\nconst POSITION_OFFSETS: Record<SpeedDialPosition, string> = {\n 'bottom-right': 'bottom-6 right-6',\n 'bottom-left': 'bottom-6 left-6',\n 'bottom-center': 'bottom-6 left-1/2 -translate-x-1/2',\n 'top-right': 'top-6 right-6',\n 'top-left': 'top-6 left-6',\n};\n\nconst DIRECTION_TO_STACK: Record<SpeedDialDirection, string> = {\n up: 'flex-col-reverse bottom-full mb-3',\n down: 'flex-col top-full mt-3',\n left: 'flex-row-reverse right-full mr-3',\n right: 'flex-row top-1/2 -translate-y-1/2 left-full ml-3',\n};\n\nconst DIRECTION_LABEL_SIDE: Record<SpeedDialDirection, 'left' | 'right'> = {\n up: 'right',\n down: 'right',\n left: 'right',\n right: 'left',\n};\n\nexport interface SpeedDialProps {\n position?: SpeedDialPosition;\n direction?: SpeedDialDirection;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n gap?: number;\n className?: string;\n children: ReactNode;\n}\n\nexport function SpeedDial({\n position = 'bottom-right',\n direction,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n gap = 12,\n className,\n children,\n}: SpeedDialProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const rootRef = useRef<HTMLDivElement | null>(null);\n const resolvedDirection = direction ?? POSITION_TO_DIRECTION[position];\n\n useEscape(() => {\n if (!open) return;\n setOpen(false);\n requestAnimationFrame(() => triggerRef.current?.focus());\n }, open);\n\n useOutsideClick(\n rootRef,\n () => {\n if (open) setOpen(false);\n },\n open,\n );\n\n const ctx = useMemo<SpeedDialContextValue>(\n () => ({ open, setOpen, triggerRef, rootRef, direction: resolvedDirection, position }),\n [open, setOpen, resolvedDirection, position],\n );\n\n return (\n <SpeedDialContext.Provider value={ctx}>\n <div\n ref={rootRef}\n data-state={open ? 'open' : 'closed'}\n className={cn('fixed', POSITION_OFFSETS[position], className)}\n >\n {open && (\n <ul\n role=\"menu\"\n data-direction={resolvedDirection}\n style={{ gap }}\n className={cn(\n 'absolute flex animate-in fade-in-0',\n DIRECTION_TO_STACK[resolvedDirection],\n )}\n >\n {children}\n </ul>\n )}\n </div>\n </SpeedDialContext.Provider>\n );\n}\n\nexport interface SpeedDialTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n /** Required accessible label. Default `\"Toggle actions\"`. */\n 'aria-label'?: string;\n closedIcon?: ReactNode;\n openIcon?: ReactNode;\n variant?: FABVariants['variant'];\n size?: FABVariants['size'];\n}\n\nexport const SpeedDialTrigger = forwardRef<HTMLButtonElement, SpeedDialTriggerProps>(\n function SpeedDialTrigger(\n {\n 'aria-label': ariaLabel = 'Toggle actions',\n closedIcon,\n openIcon,\n variant,\n size,\n onClick,\n className,\n ...rest\n },\n forwardedRef,\n ) {\n const ctx = useSpeedDialContext();\n return (\n <FAB\n {...rest}\n ref={composeRefs(forwardedRef, ctx.triggerRef)}\n aria-label={ariaLabel}\n aria-haspopup=\"menu\"\n aria-expanded={ctx.open}\n variant={variant}\n size={size}\n position={ctx.position}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.setOpen(!ctx.open);\n }}\n className={cn('static !bottom-auto !left-auto !right-auto !top-auto !translate-x-0', className)}\n >\n {ctx.open ? openIcon ?? <Icon icon={X} size={20} /> : closedIcon ?? <Icon icon={Plus} size={20} />}\n </FAB>\n );\n },\n);\n\nexport interface SpeedDialActionProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n 'aria-label': string;\n icon: ReactNode;\n onSelect?: () => void;\n tooltip?: ReactNode;\n}\n\nexport const SpeedDialAction = forwardRef<HTMLButtonElement, SpeedDialActionProps>(\n function SpeedDialAction(\n { 'aria-label': ariaLabel, icon, onSelect, tooltip, className, onClick, type = 'button', ...rest },\n forwardedRef,\n ) {\n const ctx = useSpeedDialContext();\n const labelSide = DIRECTION_LABEL_SIDE[ctx.direction];\n return (\n <li className=\"flex items-center gap-2\" data-side={labelSide}>\n {tooltip && labelSide === 'left' && (\n <span className=\"rounded-md bg-popover px-2 py-1 text-xs text-popover-foreground shadow\">\n {tooltip}\n </span>\n )}\n <button\n {...rest}\n ref={forwardedRef}\n type={type}\n role=\"menuitem\"\n aria-label={ariaLabel}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n onSelect?.();\n ctx.setOpen(false);\n requestAnimationFrame(() => ctx.triggerRef.current?.focus());\n }}\n className={cn(\n 'inline-flex h-10 w-10 items-center justify-center rounded-full bg-card text-card-foreground shadow-md transition-all hover:shadow-lg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n >\n {icon}\n </button>\n {tooltip && labelSide === 'right' && (\n <span className=\"rounded-md bg-popover px-2 py-1 text-xs text-popover-foreground shadow\">\n {tooltip}\n </span>\n )}\n </li>\n );\n },\n);\n\ntype SpeedDialComponent = typeof SpeedDial & {\n Trigger: typeof SpeedDialTrigger;\n Action: typeof SpeedDialAction;\n};\n\n(SpeedDial as SpeedDialComponent).Trigger = SpeedDialTrigger;\n(SpeedDial as SpeedDialComponent).Action = SpeedDialAction;\n\nexport default SpeedDial as SpeedDialComponent;\n","import {\n forwardRef,\n useEffect,\n useState,\n type ButtonHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { ArrowUp } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\n\nexport type BackToTopPosition =\n | 'bottom-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'top-right'\n | 'top-left';\n\nexport interface BackToTopButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Scroll distance (px) before the button appears. Default 400. */\n threshold?: number;\n /** Scope to a specific scrollable element. Defaults to the window. */\n scrollContainer?: HTMLElement | null;\n position?: BackToTopPosition;\n /** Visible label. Omit for icon-only. */\n label?: ReactNode;\n 'aria-label'?: string;\n}\n\nconst POSITION: Record<BackToTopPosition, string> = {\n 'bottom-right': 'bottom-6 right-6',\n 'bottom-left': 'bottom-6 left-6',\n 'bottom-center': 'bottom-6 left-1/2 -translate-x-1/2',\n 'top-right': 'top-6 right-6',\n 'top-left': 'top-6 left-6',\n};\n\n/** Floating button revealed past `threshold` scroll — smooth-scrolls to top. */\nexport const BackToTopButton = forwardRef<HTMLButtonElement, BackToTopButtonProps>(\n function BackToTopButton(\n {\n threshold = 400,\n scrollContainer,\n position = 'bottom-right',\n label,\n 'aria-label': ariaLabel = 'Back to top',\n className,\n onClick,\n type = 'button',\n ...rest\n },\n ref,\n ) {\n const [visible, setVisible] = useState(false);\n\n useEffect(() => {\n const el: HTMLElement | Window = scrollContainer ?? window;\n const read = () => {\n const y =\n 'scrollY' in el ? (el as Window).scrollY : (el as HTMLElement).scrollTop;\n setVisible(y >= threshold);\n };\n read();\n const target = el as EventTarget;\n target.addEventListener('scroll', read, { passive: true });\n return () => target.removeEventListener('scroll', read);\n }, [threshold, scrollContainer]);\n\n if (!visible) return null;\n\n return (\n <button\n ref={ref}\n type={type}\n aria-label={ariaLabel}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n const reducedMotion =\n typeof window !== 'undefined' &&\n window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;\n const target = scrollContainer ?? window;\n if ('scrollTo' in target) {\n (target as Window | HTMLElement).scrollTo({\n top: 0,\n behavior: reducedMotion ? 'auto' : 'smooth',\n });\n }\n }}\n className={cn(\n 'fixed z-banner inline-flex items-center justify-center gap-2 rounded-full bg-card text-card-foreground shadow-lg ring-1 ring-border transition-all hover:shadow-xl focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n label ? 'h-11 px-4 text-sm font-medium' : 'h-11 w-11',\n POSITION[position],\n className,\n )}\n {...rest}\n >\n <Icon icon={ArrowUp} size={16} />\n {label}\n </button>\n );\n },\n);\nBackToTopButton.displayName = 'BackToTopButton';\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/nav/breadcrumb/Breadcrumb.tsx","../src/nav/pagination/Pagination.tsx","../src/nav/navItem/NavItem.tsx","../src/nav/menu/Menu.variants.ts","../src/nav/menu/Menu.tsx","../src/nav/dropdownMenu/DropdownMenu.tsx","../src/nav/contextMenu/ContextMenu.tsx","../src/nav/menubar/Menubar.variants.ts","../src/nav/menubar/Menubar.tsx","../src/nav/navigationMenu/NavigationMenu.tsx","../src/nav/commandPalette/CommandPalette.tsx","../src/nav/scrollSpy/ScrollSpy.tsx","../src/nav/tableOfContents/TableOfContents.tsx"],"names":["forwardRef","jsxs","jsx","ChevronRight","MenuItem","createContext","useContext","useRef","useMemo","DropdownMenuTrigger","useCallback","ContextMenuTrigger","Menubar","MenubarTrigger","useEffect","NavigationMenu","NavigationMenuList","NavigationMenuItem","useId","NavigationMenuTrigger","NavigationMenuLink","NavigationMenuContent","useState","CommandPaletteContent","CommandPaletteInput","CommandPaletteList","CommandPaletteItem","CommandPaletteEmpty","Fragment","TableOfContents"],"mappings":"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","file":"chunk-CWT5VEMU.js","sourcesContent":["import { Fragment, forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { ChevronRight } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\n\nexport interface BreadcrumbItem {\n label: ReactNode;\n /** Make this item a link. Last item is typically rendered as plain text. */\n href?: string;\n}\n\nexport interface BreadcrumbProps extends ComponentPropsWithoutRef<'nav'> {\n items: BreadcrumbItem[];\n /** Custom separator element. Default chevron-right icon. */\n separator?: ReactNode;\n}\n\n/**\n * Linear position trail — list of links + separators. The last item is\n * always rendered as `aria-current=\"page\"` and not a link. Use the L5\n * collapsing version when the chain gets long.\n */\nexport const Breadcrumb = forwardRef<HTMLElement, BreadcrumbProps>(\n ({ items, separator, className, ...props }, ref) => {\n const sep = separator ?? <Icon icon={ChevronRight} size={14} />;\n return (\n <nav ref={ref} aria-label=\"Breadcrumb\" className={cn('text-sm', className)} {...props}>\n <ol className=\"flex flex-wrap items-center gap-1.5\">\n {items.map((item, i) => {\n const isLast = i === items.length - 1;\n return (\n <Fragment key={i}>\n <li>\n {item.href && !isLast ? (\n <a\n href={item.href}\n className=\"text-muted-foreground hover:text-foreground hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm\"\n >\n {item.label}\n </a>\n ) : (\n <span aria-current={isLast ? 'page' : undefined} className=\"text-foreground\">\n {item.label}\n </span>\n )}\n </li>\n {!isLast && (\n <li aria-hidden=\"true\" className=\"text-subtle-foreground\">\n {sep}\n </li>\n )}\n </Fragment>\n );\n })}\n </ol>\n </nav>\n );\n },\n);\nBreadcrumb.displayName = 'Breadcrumb';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\n\nexport interface PaginationProps extends Omit<ComponentPropsWithoutRef<'nav'>, 'onChange'> {\n /** Total page count (1-based). */\n total: number;\n /** Current page (1-based). */\n page: number;\n /** Fires with the new page on click. */\n onPageChange: (page: number) => void;\n /** Number of page buttons surrounding the current. Default `1` (so 1 + current + 1 = 3). */\n siblings?: number;\n /** Hide first/last buttons (just show prev/next + numbers). */\n hideFirstLast?: boolean;\n}\n\nfunction range(start: number, end: number): number[] {\n return Array.from({ length: end - start + 1 }, (_, i) => start + i);\n}\n\nfunction buildPages(total: number, page: number, siblings: number): (number | 'ellipsis')[] {\n if (total <= 1) return [1];\n const left = Math.max(2, page - siblings);\n const right = Math.min(total - 1, page + siblings);\n const pages: (number | 'ellipsis')[] = [1];\n if (left > 2) pages.push('ellipsis');\n pages.push(...range(left, right));\n if (right < total - 1) pages.push('ellipsis');\n if (total > 1) pages.push(total);\n return pages;\n}\n\n/**\n * Compact page-number row with prev/next + ellipses for skipped ranges.\n * Stateless — consumer drives `page` and reacts to `onPageChange`.\n */\nexport const Pagination = forwardRef<HTMLElement, PaginationProps>(\n (\n { total, page, onPageChange, siblings = 1, className, ...props },\n ref,\n ) => {\n const pages = buildPages(total, page, siblings);\n const go = (p: number) => onPageChange(Math.min(total, Math.max(1, p)));\n\n const baseBtn =\n 'inline-flex h-8 min-w-8 items-center justify-center rounded-md border border-transparent px-2 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50';\n\n return (\n <nav ref={ref} aria-label=\"Pagination\" className={cn('inline-flex items-center gap-1', className)} {...props}>\n <button\n type=\"button\"\n aria-label=\"Previous page\"\n disabled={page <= 1}\n onClick={() => go(page - 1)}\n className={cn(baseBtn, 'hover:bg-muted')}\n >\n <Icon icon={ChevronLeft} size={16} />\n </button>\n {pages.map((p, i) =>\n p === 'ellipsis' ? (\n <span key={`e-${i}`} className=\"px-1 text-muted-foreground\">…</span>\n ) : (\n <button\n key={p}\n type=\"button\"\n aria-current={p === page ? 'page' : undefined}\n onClick={() => go(p)}\n className={cn(\n baseBtn,\n p === page ? 'border-primary bg-primary text-primary-foreground' : 'hover:bg-muted',\n )}\n >\n {p}\n </button>\n ),\n )}\n <button\n type=\"button\"\n aria-label=\"Next page\"\n disabled={page >= total}\n onClick={() => go(page + 1)}\n className={cn(baseBtn, 'hover:bg-muted')}\n >\n <Icon icon={ChevronRight} size={16} />\n </button>\n </nav>\n );\n },\n);\nPagination.displayName = 'Pagination';\n","import { forwardRef, type AnchorHTMLAttributes, type ReactNode } from 'react';\nimport { cn, dataAttr } from '../../utils';\nimport { Slot } from '../../primitives';\n\nexport interface NavItemProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n /** When true, render the child element instead of an `<a>` (router Link). */\n asChild?: boolean;\n /** Optional leading icon. */\n icon?: ReactNode;\n /** Visual label. */\n children: ReactNode;\n /** Trailing slot — typically a count badge or status dot. */\n trailing?: ReactNode;\n /** Mark active (visual + `aria-current=\"page\"`). */\n isActive?: boolean;\n /** Visual size. Default `md`. */\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst SIZE: Record<NonNullable<NavItemProps['size']>, string> = {\n sm: 'h-8 px-2 text-sm gap-2',\n md: 'h-9 px-2.5 text-sm gap-2.5',\n lg: 'h-11 px-3 text-base gap-3',\n};\n\n/**\n * Sidebar / nav row — icon + label + trailing slot + active state. Use as\n * a clickable Link (default `<a>`) or pass `asChild` to forward to a router\n * Link. Sets `aria-current=\"page\"` when `isActive`.\n */\nexport const NavItem = forwardRef<HTMLAnchorElement, NavItemProps>(\n ({ asChild, icon, children, trailing, isActive, size = 'md', className, ...props }, ref) => {\n const Comp = asChild ? Slot : 'a';\n return (\n <Comp\n ref={ref}\n aria-current={isActive ? 'page' : undefined}\n data-active={dataAttr(isActive)}\n className={cn(\n 'group inline-flex w-full items-center rounded-md font-medium text-foreground transition-colors',\n 'hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n 'data-[active]:bg-primary-soft data-[active]:text-primary-soft-foreground',\n SIZE[size],\n className,\n )}\n {...(props as AnchorHTMLAttributes<HTMLAnchorElement>)}\n >\n {icon && <span className=\"text-muted-foreground group-data-[active]:text-current\">{icon}</span>}\n <span className=\"flex-1 truncate text-left\">{children}</span>\n {trailing && <span className=\"shrink-0\">{trailing}</span>}\n </Comp>\n );\n },\n);\nNavItem.displayName = 'NavItem';\n","import { tv, type VariantProps } from '../../utils';\n\nexport const menuVariants = tv({\n base: 'flex min-w-[8rem] flex-col gap-0.5 rounded-md border border-border bg-popover p-1 text-sm text-popover-foreground shadow-md outline-none',\n});\n\nexport const menuItemVariants = tv({\n base: 'relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm outline-none transition-colors focus:bg-muted focus:text-foreground hover:bg-muted hover:text-foreground',\n variants: {\n state: {\n default: 'text-popover-foreground',\n destructive: 'text-destructive focus:bg-destructive-soft hover:bg-destructive-soft',\n disabled: 'pointer-events-none opacity-50',\n },\n },\n defaultVariants: { state: 'default' },\n});\n\nexport const menuLabelVariants = tv({\n base: 'px-2 py-1.5 text-xs font-semibold text-muted-foreground',\n});\n\nexport const menuSeparatorVariants = tv({\n base: '-mx-1 my-1 h-px bg-border',\n});\n\nexport type MenuVariants = VariantProps<typeof menuVariants>;\nexport type MenuItemVariants = VariantProps<typeof menuItemVariants>;\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { cn, composeRefs } from '../../utils';\nimport { AnchoredPositioner, DismissableLayer, Portal } from '../../primitives';\nimport {\n menuItemVariants,\n menuLabelVariants,\n menuSeparatorVariants,\n menuVariants,\n type MenuItemVariants,\n} from './Menu.variants';\n\ninterface MenuItemEntry {\n id: string;\n ref: HTMLButtonElement | null;\n disabled: boolean;\n}\n\ninterface MenuContextValue {\n registerItem: (entry: MenuItemEntry) => void;\n unregisterItem: (id: string) => void;\n itemsRef: React.MutableRefObject<MenuItemEntry[]>;\n onClose: () => void;\n}\n\nconst MenuContext = createContext<MenuContextValue | null>(null);\n\nfunction useMenuContext() {\n const ctx = useContext(MenuContext);\n if (!ctx) throw new Error('Menu.Item / Group / Label / Separator must be used inside <Menu>');\n return ctx;\n}\n\nexport interface MenuProps {\n open: boolean;\n anchor: HTMLElement | null;\n onClose: () => void;\n placement?: React.ComponentProps<typeof AnchoredPositioner>['placement'];\n offset?: number;\n /** A11y label for screen readers. */\n 'aria-label'?: string;\n className?: string;\n children: ReactNode;\n}\n\nexport function Menu({\n open,\n anchor,\n onClose,\n placement = 'bottom-start',\n offset = 6,\n 'aria-label': ariaLabel,\n className,\n children,\n}: MenuProps) {\n const itemsRef = useRef<MenuItemEntry[]>([]);\n\n const registerItem = useCallback((entry: MenuItemEntry) => {\n const idx = itemsRef.current.findIndex((i) => i.id === entry.id);\n if (idx >= 0) itemsRef.current[idx] = entry;\n else itemsRef.current.push(entry);\n }, []);\n const unregisterItem = useCallback((id: string) => {\n itemsRef.current = itemsRef.current.filter((i) => i.id !== id);\n }, []);\n\n const ctx = useMemo<MenuContextValue>(\n () => ({ registerItem, unregisterItem, itemsRef, onClose }),\n [registerItem, unregisterItem, onClose],\n );\n\n if (!open) return null;\n return (\n <MenuContext.Provider value={ctx}>\n <Portal>\n <AnchoredPositioner anchor={anchor} placement={placement} offset={offset}>\n <FocusScope asChild trapped loop>\n <DismissableLayer\n onEscape={onClose}\n onOutsidePointerDown={(e) => {\n if (anchor?.contains(e.target as Node)) return;\n onClose();\n }}\n >\n <div\n role=\"menu\"\n aria-label={ariaLabel}\n className={cn(menuVariants(), className)}\n onKeyDown={(e) => {\n if (e.key === 'Tab') {\n e.preventDefault();\n onClose();\n }\n }}\n >\n {children}\n </div>\n </DismissableLayer>\n </FocusScope>\n </AnchoredPositioner>\n </Portal>\n </MenuContext.Provider>\n );\n}\n\nexport interface MenuItemProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onSelect'>,\n MenuItemVariants {\n /** Fired when the item is activated (Enter / Space / click). Menu closes after. */\n onSelect?: () => void;\n /** Disable activation. */\n disabled?: boolean;\n}\n\nexport const MenuItem = forwardRef<HTMLButtonElement, MenuItemProps>(function MenuItem(\n { onSelect, disabled = false, state, className, onClick, onKeyDown, children, ...rest },\n forwardedRef,\n) {\n const ctx = useMenuContext();\n const id = useId();\n const ref = useRef<HTMLButtonElement | null>(null);\n\n useEffect(() => {\n ctx.registerItem({ id, ref: ref.current, disabled });\n return () => ctx.unregisterItem(id);\n }, [ctx, id, disabled]);\n\n const moveFocus = useCallback(\n (direction: 1 | -1, jump = 1) => {\n const list = ctx.itemsRef.current.filter((i) => !i.disabled);\n if (list.length === 0) return;\n const idx = list.findIndex((i) => i.id === id);\n let nextIdx = idx + direction * jump;\n if (idx === -1) nextIdx = direction === 1 ? 0 : list.length - 1;\n if (nextIdx < 0) nextIdx = list.length - 1;\n if (nextIdx >= list.length) nextIdx = 0;\n list[nextIdx]?.ref?.focus();\n },\n [ctx, id],\n );\n\n const handleKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented || disabled) return;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n moveFocus(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n moveFocus(-1);\n break;\n case 'Home':\n e.preventDefault();\n moveFocus(-1, ctx.itemsRef.current.length);\n break;\n case 'End':\n e.preventDefault();\n moveFocus(1, ctx.itemsRef.current.length);\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n onSelect?.();\n ctx.onClose();\n break;\n }\n };\n\n const itemState = state ?? (disabled ? 'disabled' : 'default');\n return (\n <button\n ref={composeRefs(forwardedRef, ref)}\n type=\"button\"\n role=\"menuitem\"\n disabled={disabled}\n aria-disabled={disabled || undefined}\n data-disabled={disabled ? '' : undefined}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented || disabled) return;\n onSelect?.();\n ctx.onClose();\n }}\n onKeyDown={handleKeyDown}\n className={cn(menuItemVariants({ state: itemState }), className)}\n {...rest}\n >\n {children}\n </button>\n );\n});\n\nexport interface MenuGroupProps extends HTMLAttributes<HTMLDivElement> {\n label?: ReactNode;\n children: ReactNode;\n}\n\nexport function MenuGroup({ label, children, className, ...rest }: MenuGroupProps) {\n const labelId = useId();\n return (\n <div\n role=\"group\"\n aria-labelledby={label ? labelId : undefined}\n className={className}\n {...rest}\n >\n {label && (\n <div id={labelId} className={menuLabelVariants()}>\n {label}\n </div>\n )}\n {children}\n </div>\n );\n}\n\nexport function MenuLabel({\n children,\n className,\n ...rest\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div className={cn(menuLabelVariants(), className)} {...rest}>\n {children}\n </div>\n );\n}\n\nexport function MenuSeparator(props: HTMLAttributes<HTMLDivElement>) {\n return <div role=\"separator\" className={menuSeparatorVariants()} {...props} />;\n}\n\ntype MenuComponent = typeof Menu & {\n Item: typeof MenuItem;\n Group: typeof MenuGroup;\n Label: typeof MenuLabel;\n Separator: typeof MenuSeparator;\n};\n\n(Menu as MenuComponent).Item = MenuItem;\n(Menu as MenuComponent).Group = MenuGroup;\n(Menu as MenuComponent).Label = MenuLabel;\n(Menu as MenuComponent).Separator = MenuSeparator;\n\nexport default Menu as MenuComponent;\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useMemo,\n useRef,\n type ButtonHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { composeRefs } from '../../utils';\nimport { Slot } from '../../primitives';\nimport { useControlled } from '../../hooks';\nimport {\n Menu,\n MenuItem,\n MenuGroup,\n MenuLabel,\n MenuSeparator,\n type MenuProps,\n} from '../menu';\n\ninterface DropdownMenuContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLButtonElement | null>;\n placement: MenuProps['placement'];\n offset: number;\n}\n\nconst DropdownMenuContext = createContext<DropdownMenuContextValue | null>(null);\n\nfunction useDropdownMenuContext() {\n const ctx = useContext(DropdownMenuContext);\n if (!ctx) throw new Error('DropdownMenu.* must be used inside <DropdownMenu>');\n return ctx;\n}\n\nexport interface DropdownMenuProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n placement?: MenuProps['placement'];\n offset?: number;\n children: ReactNode;\n}\n\nexport function DropdownMenu({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n placement = 'bottom-start',\n offset = 6,\n children,\n}: DropdownMenuProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n\n const ctx = useMemo<DropdownMenuContextValue>(\n () => ({ open, setOpen, triggerRef, placement, offset }),\n [open, setOpen, placement, offset],\n );\n\n return <DropdownMenuContext.Provider value={ctx}>{children}</DropdownMenuContext.Provider>;\n}\n\nexport interface DropdownMenuTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n /** Render the trigger as the single child (e.g., `<Button>`). */\n asChild?: boolean;\n children: ReactNode;\n}\n\nexport const DropdownMenuTrigger = forwardRef<HTMLButtonElement, DropdownMenuTriggerProps>(\n function DropdownMenuTrigger(\n { asChild, onClick, onKeyDown, children, ...rest },\n forwardedRef,\n ) {\n const ctx = useDropdownMenuContext();\n const Component = asChild ? Slot : 'button';\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.setOpen(!ctx.open);\n },\n [ctx, onClick],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n ctx.setOpen(true);\n }\n },\n [ctx, onKeyDown],\n );\n\n return (\n <Component\n ref={composeRefs(forwardedRef, ctx.triggerRef) as never}\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded={ctx.open}\n data-state={ctx.open ? 'open' : 'closed'}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\nexport interface DropdownMenuContentProps {\n className?: string;\n 'aria-label'?: string;\n children: ReactNode;\n}\n\nexport function DropdownMenuContent({\n className,\n 'aria-label': ariaLabel,\n children,\n}: DropdownMenuContentProps) {\n const ctx = useDropdownMenuContext();\n return (\n <Menu\n open={ctx.open}\n anchor={ctx.triggerRef.current}\n onClose={() => {\n ctx.setOpen(false);\n requestAnimationFrame(() => ctx.triggerRef.current?.focus());\n }}\n placement={ctx.placement}\n offset={ctx.offset}\n aria-label={ariaLabel}\n className={className}\n >\n {children}\n </Menu>\n );\n}\n\ntype DropdownMenuComponent = typeof DropdownMenu & {\n Trigger: typeof DropdownMenuTrigger;\n Content: typeof DropdownMenuContent;\n Item: typeof MenuItem;\n Group: typeof MenuGroup;\n Label: typeof MenuLabel;\n Separator: typeof MenuSeparator;\n};\n\n(DropdownMenu as DropdownMenuComponent).Trigger = DropdownMenuTrigger;\n(DropdownMenu as DropdownMenuComponent).Content = DropdownMenuContent;\n(DropdownMenu as DropdownMenuComponent).Item = MenuItem;\n(DropdownMenu as DropdownMenuComponent).Group = MenuGroup;\n(DropdownMenu as DropdownMenuComponent).Label = MenuLabel;\n(DropdownMenu as DropdownMenuComponent).Separator = MenuSeparator;\n\nexport default DropdownMenu as DropdownMenuComponent;\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { composeRefs } from '../../utils';\nimport { Slot } from '../../primitives';\nimport {\n Menu,\n MenuItem,\n MenuGroup,\n MenuLabel,\n MenuSeparator,\n type MenuProps,\n} from '../menu';\n\ninterface ContextMenuContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n anchor: HTMLElement | null;\n setAnchor: (el: HTMLElement | null) => void;\n triggerRef: React.MutableRefObject<HTMLElement | null>;\n}\n\nconst ContextMenuContext = createContext<ContextMenuContextValue | null>(null);\n\nfunction useContextMenuContext() {\n const ctx = useContext(ContextMenuContext);\n if (!ctx) throw new Error('ContextMenu.* must be used inside <ContextMenu>');\n return ctx;\n}\n\nexport interface ContextMenuProps {\n children: ReactNode;\n}\n\n/**\n * Build a virtual element at coordinates — Floating UI accepts a\n * getBoundingClientRect-only object as a \"reference\".\n */\nfunction makeVirtualAnchor(x: number, y: number): HTMLElement {\n const el = document.createElement('div');\n el.style.position = 'fixed';\n el.style.left = `${x}px`;\n el.style.top = `${y}px`;\n el.style.width = '0px';\n el.style.height = '0px';\n el.style.pointerEvents = 'none';\n document.body.appendChild(el);\n return el;\n}\n\nexport function ContextMenu({ children }: ContextMenuProps) {\n const [open, setOpen] = useState(false);\n const [anchor, setAnchorState] = useState<HTMLElement | null>(null);\n const triggerRef = useRef<HTMLElement | null>(null);\n\n const setAnchor = useCallback((el: HTMLElement | null) => {\n setAnchorState((prev) => {\n if (prev && prev.parentNode === document.body) prev.remove();\n return el;\n });\n }, []);\n\n const handleSetOpen = useCallback(\n (next: boolean) => {\n setOpen(next);\n if (!next) setAnchor(null);\n },\n [setAnchor],\n );\n\n const ctx = useMemo<ContextMenuContextValue>(\n () => ({ open, setOpen: handleSetOpen, anchor, setAnchor, triggerRef }),\n [open, handleSetOpen, anchor, setAnchor],\n );\n\n return <ContextMenuContext.Provider value={ctx}>{children}</ContextMenuContext.Provider>;\n}\n\nexport interface ContextMenuTriggerProps extends HTMLAttributes<HTMLDivElement> {\n asChild?: boolean;\n disabled?: boolean;\n children: ReactNode;\n}\n\nexport const ContextMenuTrigger = forwardRef<HTMLDivElement, ContextMenuTriggerProps>(\n function ContextMenuTrigger(\n { asChild, disabled, onContextMenu, onPointerDown, onPointerCancel, onPointerUp, children, ...rest },\n forwardedRef,\n ) {\n const ctx = useContextMenuContext();\n const longPressTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const Component = asChild ? Slot : 'div';\n\n const handleContextMenu = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n onContextMenu?.(e);\n if (e.defaultPrevented || disabled) return;\n e.preventDefault();\n ctx.setAnchor(makeVirtualAnchor(e.clientX, e.clientY));\n ctx.setOpen(true);\n },\n [ctx, disabled, onContextMenu],\n );\n\n const clearLongPress = useCallback(() => {\n if (longPressTimer.current) clearTimeout(longPressTimer.current);\n longPressTimer.current = null;\n }, []);\n\n return (\n <Component\n ref={composeRefs(forwardedRef, ctx.triggerRef) as never}\n onContextMenu={handleContextMenu}\n onPointerDown={(e: React.PointerEvent<HTMLDivElement>) => {\n onPointerDown?.(e);\n if (e.defaultPrevented || disabled || e.pointerType !== 'touch') return;\n const x = e.clientX;\n const y = e.clientY;\n longPressTimer.current = setTimeout(() => {\n ctx.setAnchor(makeVirtualAnchor(x, y));\n ctx.setOpen(true);\n }, 600);\n }}\n onPointerUp={(e: React.PointerEvent<HTMLDivElement>) => {\n onPointerUp?.(e);\n clearLongPress();\n }}\n onPointerCancel={(e: React.PointerEvent<HTMLDivElement>) => {\n onPointerCancel?.(e);\n clearLongPress();\n }}\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\nexport interface ContextMenuContentProps {\n className?: string;\n placement?: MenuProps['placement'];\n offset?: number;\n 'aria-label'?: string;\n children: ReactNode;\n}\n\nexport function ContextMenuContent({\n className,\n placement = 'bottom-start',\n offset = 2,\n 'aria-label': ariaLabel,\n children,\n}: ContextMenuContentProps) {\n const ctx = useContextMenuContext();\n return (\n <Menu\n open={ctx.open}\n anchor={ctx.anchor}\n onClose={() => ctx.setOpen(false)}\n placement={placement}\n offset={offset}\n aria-label={ariaLabel}\n className={className}\n >\n {children}\n </Menu>\n );\n}\n\ntype ContextMenuComponent = typeof ContextMenu & {\n Trigger: typeof ContextMenuTrigger;\n Content: typeof ContextMenuContent;\n Item: typeof MenuItem;\n Group: typeof MenuGroup;\n Label: typeof MenuLabel;\n Separator: typeof MenuSeparator;\n};\n\n(ContextMenu as ContextMenuComponent).Trigger = ContextMenuTrigger;\n(ContextMenu as ContextMenuComponent).Content = ContextMenuContent;\n(ContextMenu as ContextMenuComponent).Item = MenuItem;\n(ContextMenu as ContextMenuComponent).Group = MenuGroup;\n(ContextMenu as ContextMenuComponent).Label = MenuLabel;\n(ContextMenu as ContextMenuComponent).Separator = MenuSeparator;\n\nexport default ContextMenu as ContextMenuComponent;\n","import { tv, type VariantProps } from '../../utils';\n\nexport const menubarVariants = tv({\n base: 'flex items-center gap-1 rounded-md border border-border bg-background p-1',\n});\n\nexport const menubarTriggerVariants = tv({\n base: 'inline-flex select-none items-center rounded-sm px-3 py-1 text-sm font-medium text-foreground outline-none transition-colors hover:bg-muted focus-visible:bg-muted data-[state=open]:bg-muted',\n});\n\nexport type MenubarVariants = VariantProps<typeof menubarVariants>;\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn, composeRefs } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport {\n Menu,\n MenuItem,\n MenuGroup,\n MenuLabel,\n MenuSeparator,\n type MenuProps,\n} from '../menu';\nimport { menubarTriggerVariants, menubarVariants } from './Menubar.variants';\n\ninterface MenubarContextValue {\n activeId: string | null;\n setActiveId: (id: string | null) => void;\n registerTrigger: (id: string, ref: HTMLButtonElement | null) => void;\n unregisterTrigger: (id: string) => void;\n triggersRef: React.MutableRefObject<{ id: string; ref: HTMLButtonElement | null }[]>;\n}\n\nconst MenubarContext = createContext<MenubarContextValue | null>(null);\n\nfunction useMenubarContext() {\n const ctx = useContext(MenubarContext);\n if (!ctx) throw new Error('Menubar.* must be used inside <Menubar>');\n return ctx;\n}\n\ninterface MenubarMenuContextValue {\n id: string;\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLButtonElement | null>;\n}\n\nconst MenubarMenuContext = createContext<MenubarMenuContextValue | null>(null);\n\nfunction useMenubarMenuContext() {\n const ctx = useContext(MenubarMenuContext);\n if (!ctx) throw new Error('Menubar.Trigger / Content must be used inside <Menubar.Menu>');\n return ctx;\n}\n\nexport interface MenubarProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'onChange'> {\n /** Id of the currently-open menu, or `null` if none. */\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string | null) => void;\n children: ReactNode;\n}\n\nexport const Menubar = forwardRef<HTMLDivElement, MenubarProps>(function Menubar(\n { value, defaultValue = null, onValueChange, className, children, ...rest },\n ref,\n) {\n const [activeId, setActiveId] = useControlled<string | null>({\n controlled: value,\n default: defaultValue,\n onChange: onValueChange,\n });\n\n const triggersRef = useRef<{ id: string; ref: HTMLButtonElement | null }[]>([]);\n\n const registerTrigger = useCallback((id: string, triggerRef: HTMLButtonElement | null) => {\n const idx = triggersRef.current.findIndex((t) => t.id === id);\n if (idx >= 0) triggersRef.current[idx] = { id, ref: triggerRef };\n else triggersRef.current.push({ id, ref: triggerRef });\n }, []);\n const unregisterTrigger = useCallback((id: string) => {\n triggersRef.current = triggersRef.current.filter((t) => t.id !== id);\n }, []);\n\n const ctx = useMemo<MenubarContextValue>(\n () => ({ activeId, setActiveId, registerTrigger, unregisterTrigger, triggersRef }),\n [activeId, setActiveId, registerTrigger, unregisterTrigger],\n );\n\n return (\n <MenubarContext.Provider value={ctx}>\n <div\n ref={ref}\n role=\"menubar\"\n className={cn(menubarVariants(), className)}\n {...rest}\n >\n {children}\n </div>\n </MenubarContext.Provider>\n );\n});\n\nexport interface MenubarMenuProps {\n /** Stable id for this menu — used for active-menu tracking. */\n value: string;\n children: ReactNode;\n}\n\nexport function MenubarMenu({ value, children }: MenubarMenuProps) {\n const ctx = useMenubarContext();\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n\n const open = ctx.activeId === value;\n const setOpen = useCallback(\n (next: boolean) => {\n ctx.setActiveId(next ? value : null);\n },\n [ctx, value],\n );\n\n const menuCtx = useMemo<MenubarMenuContextValue>(\n () => ({ id: value, open, setOpen, triggerRef }),\n [value, open, setOpen],\n );\n\n return <MenubarMenuContext.Provider value={menuCtx}>{children}</MenubarMenuContext.Provider>;\n}\n\nexport interface MenubarTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n children: ReactNode;\n}\n\nexport const MenubarTrigger = forwardRef<HTMLButtonElement, MenubarTriggerProps>(\n function MenubarTrigger(\n { className, onClick, onKeyDown, onPointerEnter, children, ...rest },\n forwardedRef,\n ) {\n const bar = useMenubarContext();\n const menu = useMenubarMenuContext();\n\n useEffect(() => {\n bar.registerTrigger(menu.id, menu.triggerRef.current);\n return () => bar.unregisterTrigger(menu.id);\n }, [bar, menu.id, menu.triggerRef]);\n\n const moveAcross = useCallback(\n (direction: 1 | -1) => {\n const list = bar.triggersRef.current;\n const idx = list.findIndex((t) => t.id === menu.id);\n if (idx === -1) return;\n let nextIdx = idx + direction;\n if (nextIdx < 0) nextIdx = list.length - 1;\n if (nextIdx >= list.length) nextIdx = 0;\n const next = list[nextIdx];\n next?.ref?.focus();\n // If a menu is already open, switch the open menu to follow focus.\n if (bar.activeId !== null && next) bar.setActiveId(next.id);\n },\n [bar, menu.id],\n );\n\n return (\n <button\n ref={composeRefs(forwardedRef, menu.triggerRef)}\n type=\"button\"\n role=\"menuitem\"\n aria-haspopup=\"menu\"\n aria-expanded={menu.open}\n data-state={menu.open ? 'open' : 'closed'}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n menu.setOpen(!menu.open);\n }}\n onPointerEnter={(e) => {\n onPointerEnter?.(e);\n // If any menu is open, switching the trigger pointer-over switches the active menu.\n if (bar.activeId !== null && bar.activeId !== menu.id) {\n bar.setActiveId(menu.id);\n }\n }}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n switch (e.key) {\n case 'ArrowRight':\n e.preventDefault();\n moveAcross(1);\n break;\n case 'ArrowLeft':\n e.preventDefault();\n moveAcross(-1);\n break;\n case 'ArrowDown':\n case 'Enter':\n case ' ':\n e.preventDefault();\n menu.setOpen(true);\n break;\n case 'Home':\n e.preventDefault();\n bar.triggersRef.current[0]?.ref?.focus();\n break;\n case 'End': {\n e.preventDefault();\n const list = bar.triggersRef.current;\n list[list.length - 1]?.ref?.focus();\n break;\n }\n }\n }}\n className={cn(menubarTriggerVariants(), className)}\n {...rest}\n >\n {children}\n </button>\n );\n },\n);\n\nexport interface MenubarContentProps {\n className?: string;\n placement?: MenuProps['placement'];\n offset?: number;\n 'aria-label'?: string;\n children: ReactNode;\n}\n\nexport function MenubarContent({\n className,\n placement = 'bottom-start',\n offset = 4,\n 'aria-label': ariaLabel,\n children,\n}: MenubarContentProps) {\n const menu = useMenubarMenuContext();\n return (\n <Menu\n open={menu.open}\n anchor={menu.triggerRef.current}\n onClose={() => {\n menu.setOpen(false);\n requestAnimationFrame(() => menu.triggerRef.current?.focus());\n }}\n placement={placement}\n offset={offset}\n aria-label={ariaLabel}\n className={className}\n >\n {children}\n </Menu>\n );\n}\n\ntype MenubarComponent = typeof Menubar & {\n Menu: typeof MenubarMenu;\n Trigger: typeof MenubarTrigger;\n Content: typeof MenubarContent;\n Item: typeof MenuItem;\n Group: typeof MenuGroup;\n Label: typeof MenuLabel;\n Separator: typeof MenuSeparator;\n};\n\n(Menubar as MenubarComponent).Menu = MenubarMenu;\n(Menubar as MenubarComponent).Trigger = MenubarTrigger;\n(Menubar as MenubarComponent).Content = MenubarContent;\n(Menubar as MenubarComponent).Item = MenuItem;\n(Menubar as MenubarComponent).Group = MenuGroup;\n(Menubar as MenubarComponent).Label = MenuLabel;\n(Menubar as MenubarComponent).Separator = MenuSeparator;\n\nexport default Menubar as MenubarComponent;\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n type AnchorHTMLAttributes,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport {\n AnchoredPositioner,\n DismissableLayer,\n Portal,\n RovingFocusGroup,\n useRovingFocusItem,\n} from '../../primitives';\n\ninterface NavigationMenuContextValue {\n activeId: string | null;\n setActiveId: (id: string | null) => void;\n}\n\nconst NavigationMenuContext = createContext<NavigationMenuContextValue | null>(null);\n\nfunction useNavContext() {\n const ctx = useContext(NavigationMenuContext);\n if (!ctx) throw new Error('NavigationMenu.* must be used inside <NavigationMenu>');\n return ctx;\n}\n\ninterface NavigationMenuItemContextValue {\n value: string;\n open: boolean;\n triggerRef: React.MutableRefObject<HTMLButtonElement | null>;\n contentId: string;\n triggerId: string;\n}\n\nconst NavigationMenuItemContext = createContext<NavigationMenuItemContextValue | null>(null);\n\nfunction useNavItemContext() {\n const ctx = useContext(NavigationMenuItemContext);\n if (!ctx)\n throw new Error('NavigationMenu.Trigger / Content must be used inside <NavigationMenu.Item>');\n return ctx;\n}\n\nexport interface NavigationMenuProps extends Omit<HTMLAttributes<HTMLElement>, 'defaultValue'> {\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string | null) => void;\n}\n\nexport const NavigationMenu = forwardRef<HTMLElement, NavigationMenuProps>(\n function NavigationMenu(\n {\n value,\n defaultValue = null,\n onValueChange,\n 'aria-label': ariaLabel = 'Main navigation',\n className,\n children,\n ...rest\n },\n ref,\n ) {\n const [activeId, setActiveId] = useControlled<string | null>({\n controlled: value,\n default: defaultValue,\n onChange: onValueChange,\n });\n\n const ctx = useMemo<NavigationMenuContextValue>(\n () => ({ activeId, setActiveId }),\n [activeId, setActiveId],\n );\n\n return (\n <NavigationMenuContext.Provider value={ctx}>\n <nav\n ref={ref}\n aria-label={ariaLabel}\n className={cn('relative', className)}\n {...rest}\n >\n {children}\n </nav>\n </NavigationMenuContext.Provider>\n );\n },\n);\n\nexport interface NavigationMenuListProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const NavigationMenuList = forwardRef<HTMLDivElement, NavigationMenuListProps>(\n function NavigationMenuList({ className, children, ...rest }, ref) {\n return (\n <RovingFocusGroup\n ref={ref}\n orientation=\"horizontal\"\n loop\n role=\"list\"\n className={cn('flex items-center gap-1', className)}\n {...rest}\n >\n {children}\n </RovingFocusGroup>\n );\n },\n);\n\nexport interface NavigationMenuItemProps extends HTMLAttributes<HTMLLIElement> {\n /** Stable id for active-state tracking. Required when item has a Trigger + Content. */\n value: string;\n children: ReactNode;\n}\n\nexport const NavigationMenuItem = forwardRef<HTMLLIElement, NavigationMenuItemProps>(\n function NavigationMenuItem({ value, className, children, ...rest }, ref) {\n const nav = useNavContext();\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const contentId = useId();\n const triggerId = useId();\n const open = nav.activeId === value;\n\n const itemCtx = useMemo<NavigationMenuItemContextValue>(\n () => ({ value, open, triggerRef, contentId, triggerId }),\n [value, open, contentId, triggerId],\n );\n\n return (\n <NavigationMenuItemContext.Provider value={itemCtx}>\n <li ref={ref} className={cn('relative', className)} {...rest}>\n {children}\n </li>\n </NavigationMenuItemContext.Provider>\n );\n },\n);\n\nexport interface NavigationMenuTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n children: ReactNode;\n}\n\nexport const NavigationMenuTrigger = forwardRef<HTMLButtonElement, NavigationMenuTriggerProps>(\n function NavigationMenuTrigger(\n { className, onClick, onPointerEnter, onKeyDown, onFocus, children, ...rest },\n ref,\n ) {\n const nav = useNavContext();\n const item = useNavItemContext();\n const roving = useRovingFocusItem();\n return (\n <button\n ref={(node) => {\n item.triggerRef.current = node;\n roving.ref(node);\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n id={item.triggerId}\n type=\"button\"\n aria-haspopup=\"true\"\n aria-expanded={item.open}\n aria-controls={item.contentId}\n data-state={item.open ? 'open' : 'closed'}\n tabIndex={roving.tabIndex}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n nav.setActiveId(item.open ? null : item.value);\n }}\n onPointerEnter={(e) => {\n onPointerEnter?.(e);\n if (nav.activeId !== null && nav.activeId !== item.value) {\n nav.setActiveId(item.value);\n }\n }}\n onFocus={(e) => {\n onFocus?.(e);\n roving.onFocus();\n }}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n roving.onKeyDown(e);\n }}\n className={cn(\n 'inline-flex items-center gap-1 rounded-md px-3 py-1.5 text-sm font-medium text-foreground transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring data-[state=open]:bg-muted',\n className,\n )}\n {...rest}\n >\n {children}\n <ChevronDown\n className={cn('h-4 w-4 transition-transform', item.open && 'rotate-180')}\n />\n </button>\n );\n },\n);\n\nexport interface NavigationMenuLinkProps\n extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'children'> {\n children: ReactNode;\n}\n\nexport const NavigationMenuLink = forwardRef<HTMLAnchorElement, NavigationMenuLinkProps>(\n function NavigationMenuLink({ className, onKeyDown, onFocus, children, ...rest }, ref) {\n const roving = useRovingFocusItem();\n return (\n <a\n ref={(node) => {\n roving.ref(node);\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n tabIndex={roving.tabIndex}\n onFocus={(e) => {\n onFocus?.(e);\n roving.onFocus();\n }}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n roving.onKeyDown(e);\n }}\n className={cn(\n 'inline-flex items-center rounded-md px-3 py-1.5 text-sm font-medium text-foreground transition-colors hover:bg-muted hover:underline-offset-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...rest}\n >\n {children}\n </a>\n );\n },\n);\n\nexport interface NavigationMenuContentProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const NavigationMenuContent = forwardRef<HTMLDivElement, NavigationMenuContentProps>(\n function NavigationMenuContent({ className, children, ...rest }, ref) {\n const nav = useNavContext();\n const item = useNavItemContext();\n\n const handleClose = useCallback(() => {\n nav.setActiveId(null);\n requestAnimationFrame(() => item.triggerRef.current?.focus());\n }, [nav, item.triggerRef]);\n\n // Close on outside click that lands outside the trigger AND outside the content.\n useEffect(() => {\n // Use the existing DismissableLayer below — this effect intentionally empty.\n }, []);\n\n if (!item.open) return null;\n return (\n <Portal>\n <AnchoredPositioner anchor={item.triggerRef.current} placement=\"bottom-start\" offset={6}>\n <DismissableLayer\n onEscape={handleClose}\n onOutsidePointerDown={(e) => {\n if (item.triggerRef.current?.contains(e.target as Node)) return;\n nav.setActiveId(null);\n }}\n >\n <div\n ref={ref}\n id={item.contentId}\n aria-labelledby={item.triggerId}\n data-state=\"open\"\n className={cn(\n 'z-dropdown min-w-[12rem] rounded-md border border-border bg-popover p-3 text-popover-foreground shadow-md outline-none animate-in fade-in-0 zoom-in-95',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n </DismissableLayer>\n </AnchoredPositioner>\n </Portal>\n );\n },\n);\n\ntype NavigationMenuComponent = typeof NavigationMenu & {\n List: typeof NavigationMenuList;\n Item: typeof NavigationMenuItem;\n Trigger: typeof NavigationMenuTrigger;\n Content: typeof NavigationMenuContent;\n Link: typeof NavigationMenuLink;\n};\n\n(NavigationMenu as NavigationMenuComponent).List = NavigationMenuList;\n(NavigationMenu as NavigationMenuComponent).Item = NavigationMenuItem;\n(NavigationMenu as NavigationMenuComponent).Trigger = NavigationMenuTrigger;\n(NavigationMenu as NavigationMenuComponent).Content = NavigationMenuContent;\n(NavigationMenu as NavigationMenuComponent).Link = NavigationMenuLink;\n\nexport default NavigationMenu as NavigationMenuComponent;\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type InputHTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { Search } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Icon } from '../../icons';\nimport { Dialog, DialogContent } from '../../overlays/dialog';\nimport {\n listboxEmptyVariants,\n listboxGroupLabelVariants,\n listboxItemVariants,\n listboxSeparatorVariants,\n} from '../../forms/listbox/Listbox.variants';\n\ninterface CommandItemEntry {\n id: string;\n value: string;\n searchText: string;\n disabled: boolean;\n onSelect: () => void;\n closeOnSelect: boolean;\n}\n\ninterface CommandPaletteContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n inputValue: string;\n setInputValue: (input: string) => void;\n activeId: string | null;\n setActiveId: (id: string | null) => void;\n itemsRef: React.MutableRefObject<CommandItemEntry[]>;\n registerItem: (entry: CommandItemEntry) => void;\n unregisterItem: (id: string) => void;\n filter: (searchText: string, search: string) => boolean;\n inputId: string;\n listboxId: string;\n inputRef: React.MutableRefObject<HTMLInputElement | null>;\n}\n\nconst CommandPaletteContext = createContext<CommandPaletteContextValue | null>(null);\n\nfunction useCommandPaletteContext() {\n const ctx = useContext(CommandPaletteContext);\n if (!ctx) throw new Error('CommandPalette.* must be used inside <CommandPalette>');\n return ctx;\n}\n\nconst defaultFilter = (searchText: string, search: string) =>\n searchText.toLowerCase().includes(search.toLowerCase());\n\nexport interface CommandPaletteProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n inputValue?: string;\n defaultInputValue?: string;\n onInputChange?: (input: string) => void;\n triggerKey?: string;\n filter?: (searchText: string, search: string) => boolean;\n children: ReactNode;\n}\n\nexport function CommandPalette({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n inputValue: inputProp,\n defaultInputValue,\n onInputChange,\n triggerKey,\n filter = defaultFilter,\n children,\n}: CommandPaletteProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const [inputValue, setInputValue] = useControlled({\n controlled: inputProp,\n default: defaultInputValue ?? '',\n onChange: onInputChange,\n });\n\n const itemsRef = useRef<CommandItemEntry[]>([]);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const [activeId, setActiveId] = useState<string | null>(null);\n const inputId = useId();\n const listboxId = useId();\n\n const registerItem = useCallback((entry: CommandItemEntry) => {\n const idx = itemsRef.current.findIndex((i) => i.id === entry.id);\n if (idx >= 0) itemsRef.current[idx] = entry;\n else itemsRef.current.push(entry);\n }, []);\n\n const unregisterItem = useCallback((id: string) => {\n itemsRef.current = itemsRef.current.filter((i) => i.id !== id);\n }, []);\n\n // Global keybinding (cmd-/ctrl-K).\n useEffect(() => {\n if (!triggerKey) return;\n const onKey = (e: KeyboardEvent | globalThis.KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === triggerKey.toLowerCase()) {\n e.preventDefault();\n setOpen(true);\n }\n };\n document.addEventListener('keydown', onKey as (e: globalThis.KeyboardEvent) => void);\n return () =>\n document.removeEventListener(\n 'keydown',\n onKey as (e: globalThis.KeyboardEvent) => void,\n );\n }, [triggerKey, setOpen]);\n\n // Reset search + active id on open/close transitions.\n useEffect(() => {\n if (!open) {\n setActiveId(null);\n }\n }, [open]);\n\n const ctx = useMemo<CommandPaletteContextValue>(\n () => ({\n open,\n setOpen,\n inputValue,\n setInputValue,\n activeId,\n setActiveId,\n itemsRef,\n registerItem,\n unregisterItem,\n filter,\n inputId,\n listboxId,\n inputRef,\n }),\n [\n open,\n setOpen,\n inputValue,\n setInputValue,\n activeId,\n registerItem,\n unregisterItem,\n filter,\n inputId,\n listboxId,\n ],\n );\n\n return (\n <CommandPaletteContext.Provider value={ctx}>\n <Dialog open={open} onOpenChange={setOpen}>\n {children}\n </Dialog>\n </CommandPaletteContext.Provider>\n );\n}\n\nexport type CommandPaletteContentProps = HTMLAttributes<HTMLDivElement>;\n\nexport const CommandPaletteContent = forwardRef<HTMLDivElement, CommandPaletteContentProps>(\n function CommandPaletteContent({ className, children, ...rest }, forwardedRef) {\n return (\n <DialogContent\n ref={forwardedRef}\n className={cn('w-full max-w-xl gap-0 overflow-hidden p-0', className)}\n {...rest}\n >\n {children}\n </DialogContent>\n );\n },\n);\n\nexport type CommandPaletteInputProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'value' | 'onChange'\n>;\n\nexport const CommandPaletteInput = forwardRef<HTMLInputElement, CommandPaletteInputProps>(\n function CommandPaletteInput(\n { className, placeholder = 'Type a command…', onKeyDown, ...rest },\n forwardedRef,\n ) {\n const ctx = useCommandPaletteContext();\n\n // Keep DOM focus on the input whenever palette is open.\n useEffect(() => {\n if (ctx.open && ctx.inputRef.current) ctx.inputRef.current.focus();\n }, [ctx.open, ctx.inputRef]);\n\n const visibleItems = useCallback(() => {\n return ctx.itemsRef.current.filter(\n (i) => !i.disabled && (ctx.inputValue === '' || ctx.filter(i.searchText, ctx.inputValue)),\n );\n }, [ctx]);\n\n // Auto-set first match when filter changes.\n useEffect(() => {\n const list = visibleItems();\n if (list.length > 0 && !list.some((i) => i.id === ctx.activeId)) {\n ctx.setActiveId(list[0]!.id);\n } else if (list.length === 0) {\n ctx.setActiveId(null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ctx.inputValue, ctx.itemsRef.current.length]);\n\n const moveActive = (direction: 1 | -1) => {\n const list = visibleItems();\n if (list.length === 0) return;\n const idx = list.findIndex((i) => i.id === ctx.activeId);\n let nextIdx = idx + direction;\n if (idx === -1) nextIdx = direction === 1 ? 0 : list.length - 1;\n if (nextIdx < 0) nextIdx = list.length - 1;\n if (nextIdx >= list.length) nextIdx = 0;\n ctx.setActiveId(list[nextIdx]!.id);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n moveActive(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n moveActive(-1);\n break;\n case 'Home':\n if (e.target === ctx.inputRef.current) {\n const list = visibleItems();\n if (list.length > 0) ctx.setActiveId(list[0]!.id);\n }\n break;\n case 'End':\n if (e.target === ctx.inputRef.current) {\n const list = visibleItems();\n if (list.length > 0) ctx.setActiveId(list[list.length - 1]!.id);\n }\n break;\n case 'Enter': {\n if (!ctx.activeId) return;\n const entry = ctx.itemsRef.current.find((i) => i.id === ctx.activeId);\n if (!entry || entry.disabled) return;\n e.preventDefault();\n entry.onSelect();\n if (entry.closeOnSelect) ctx.setOpen(false);\n break;\n }\n }\n };\n\n return (\n <div className=\"flex items-center gap-2 border-b border-border px-3\">\n <Icon icon={Search} size={16} className=\"text-muted-foreground\" />\n <input\n {...rest}\n ref={(el) => {\n ctx.inputRef.current = el;\n if (typeof forwardedRef === 'function') forwardedRef(el);\n else if (forwardedRef)\n (forwardedRef as React.MutableRefObject<HTMLInputElement | null>).current = el;\n }}\n id={ctx.inputId}\n type=\"text\"\n role=\"combobox\"\n aria-expanded\n aria-controls={ctx.listboxId}\n aria-activedescendant={ctx.activeId ?? undefined}\n aria-autocomplete=\"list\"\n placeholder={placeholder}\n value={ctx.inputValue}\n onChange={(e) => ctx.setInputValue(e.target.value)}\n onKeyDown={handleKeyDown}\n className={cn(\n 'flex h-12 w-full bg-transparent text-sm text-foreground placeholder:text-subtle-foreground outline-none disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n />\n </div>\n );\n },\n);\n\nexport type CommandPaletteListProps = HTMLAttributes<HTMLDivElement>;\n\nexport const CommandPaletteList = forwardRef<HTMLDivElement, CommandPaletteListProps>(\n function CommandPaletteList({ className, children, ...rest }, forwardedRef) {\n const ctx = useCommandPaletteContext();\n return (\n <div\n ref={forwardedRef}\n id={ctx.listboxId}\n role=\"listbox\"\n aria-labelledby={ctx.inputId}\n className={cn('max-h-80 overflow-y-auto p-1', className)}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nexport interface CommandPaletteGroupProps extends HTMLAttributes<HTMLDivElement> {\n label?: ReactNode;\n}\n\nexport function CommandPaletteGroup({\n label,\n children,\n className,\n ...rest\n}: CommandPaletteGroupProps) {\n const labelId = useId();\n return (\n <div\n role=\"group\"\n aria-labelledby={label ? labelId : undefined}\n className={className}\n {...rest}\n >\n {label && (\n <div id={labelId} className={listboxGroupLabelVariants()}>\n {label}\n </div>\n )}\n {children}\n </div>\n );\n}\n\nexport function CommandPaletteSeparator(props: HTMLAttributes<HTMLDivElement>) {\n return <div role=\"separator\" className={listboxSeparatorVariants()} {...props} />;\n}\n\nexport interface CommandPaletteItemProps extends HTMLAttributes<HTMLDivElement> {\n value: string;\n /** Text used by the filter; defaults to `value`. Pass when children include icons. */\n searchText?: string;\n disabled?: boolean;\n onSelect?: () => void;\n closeOnSelect?: boolean;\n children: ReactNode;\n}\n\nexport const CommandPaletteItem = forwardRef<HTMLDivElement, CommandPaletteItemProps>(\n function CommandPaletteItem(\n {\n value,\n searchText,\n disabled = false,\n onSelect,\n closeOnSelect = true,\n className,\n children,\n onClick,\n onPointerEnter,\n ...rest\n },\n forwardedRef,\n ) {\n const ctx = useCommandPaletteContext();\n const id = useId();\n\n // Resolve text for filter — fall back to children if string.\n const resolvedSearch =\n searchText ??\n (typeof children === 'string' ? children : Array.isArray(children) ? children.filter((c) => typeof c === 'string').join(' ') : value);\n\n useEffect(() => {\n ctx.registerItem({\n id,\n value,\n searchText: resolvedSearch,\n disabled,\n onSelect: () => onSelect?.(),\n closeOnSelect,\n });\n return () => ctx.unregisterItem(id);\n }, [ctx, id, value, resolvedSearch, disabled, onSelect, closeOnSelect]);\n\n // Hide if filtered out.\n const matches = ctx.inputValue === '' || ctx.filter(resolvedSearch, ctx.inputValue);\n if (!matches) return null;\n\n const isActive = ctx.activeId === id;\n const state = disabled ? 'disabled' : isActive ? 'active' : 'default';\n\n return (\n <div\n ref={forwardedRef}\n id={id}\n role=\"option\"\n aria-selected={isActive}\n aria-disabled={disabled || undefined}\n data-active={isActive ? '' : undefined}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented || disabled) return;\n onSelect?.();\n if (closeOnSelect) ctx.setOpen(false);\n }}\n onPointerEnter={(e) => {\n onPointerEnter?.(e);\n if (!disabled) ctx.setActiveId(id);\n }}\n className={cn(listboxItemVariants({ state }), className)}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nexport type CommandPaletteEmptyProps = HTMLAttributes<HTMLDivElement>;\n\nexport const CommandPaletteEmpty = forwardRef<HTMLDivElement, CommandPaletteEmptyProps>(\n function CommandPaletteEmpty({ className, children, ...rest }, forwardedRef) {\n const ctx = useCommandPaletteContext();\n // Show only when zero items match.\n const matchCount = ctx.itemsRef.current.filter(\n (i) => ctx.inputValue === '' || ctx.filter(i.searchText, ctx.inputValue),\n ).length;\n if (matchCount > 0) return null;\n return (\n <div\n ref={forwardedRef}\n role=\"presentation\"\n className={cn(listboxEmptyVariants(), className)}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\ntype CommandPaletteComponent = typeof CommandPalette & {\n Content: typeof CommandPaletteContent;\n Input: typeof CommandPaletteInput;\n List: typeof CommandPaletteList;\n Group: typeof CommandPaletteGroup;\n Item: typeof CommandPaletteItem;\n Empty: typeof CommandPaletteEmpty;\n Separator: typeof CommandPaletteSeparator;\n};\n\n(CommandPalette as CommandPaletteComponent).Content = CommandPaletteContent;\n(CommandPalette as CommandPaletteComponent).Input = CommandPaletteInput;\n(CommandPalette as CommandPaletteComponent).List = CommandPaletteList;\n(CommandPalette as CommandPaletteComponent).Group = CommandPaletteGroup;\n(CommandPalette as CommandPaletteComponent).Item = CommandPaletteItem;\n(CommandPalette as CommandPaletteComponent).Empty = CommandPaletteEmpty;\n(CommandPalette as CommandPaletteComponent).Separator = CommandPaletteSeparator;\n\nexport default CommandPalette as CommandPaletteComponent;\n","import { useEffect, useState, type ReactNode } from 'react';\n\nexport interface UseScrollSpyOptions {\n rootMargin?: string;\n threshold?: number | number[];\n /** Element to observe within. Defaults to viewport. */\n root?: Element | Document | null;\n}\n\n/**\n * Track which of `ids` is currently the topmost in-view section.\n * Uses `IntersectionObserver` — returns `null` until the first intersection.\n */\nexport function useScrollSpy(\n ids: string[],\n { rootMargin = '0px 0px -60% 0px', threshold = 0, root = null }: UseScrollSpyOptions = {},\n): string | null {\n const [activeId, setActiveId] = useState<string | null>(null);\n\n useEffect(() => {\n if (typeof IntersectionObserver === 'undefined' || ids.length === 0) return;\n\n const seen = new Map<string, number>(); // id → top offset\n const elements = ids\n .map((id) => document.getElementById(id))\n .filter((el): el is HTMLElement => el != null);\n\n const observer = new IntersectionObserver(\n (entries) => {\n for (const e of entries) {\n if (e.isIntersecting) {\n seen.set(e.target.id, e.boundingClientRect.top);\n } else {\n seen.delete(e.target.id);\n }\n }\n if (seen.size === 0) return;\n // Pick the section whose top is closest to (but above) the rootMargin band.\n let bestId: string | null = null;\n let bestTop = Number.POSITIVE_INFINITY;\n for (const [id, top] of seen) {\n if (top < bestTop) {\n bestTop = top;\n bestId = id;\n }\n }\n setActiveId(bestId);\n },\n { rootMargin, threshold, root: root as Element | Document | null },\n );\n\n for (const el of elements) observer.observe(el);\n return () => observer.disconnect();\n }, [ids, rootMargin, threshold, root]);\n\n return activeId;\n}\n\nexport interface ScrollSpyProps extends UseScrollSpyOptions {\n ids: string[];\n onActiveChange?: (id: string | null) => void;\n children?: (ctx: { activeId: string | null }) => ReactNode;\n}\n\n/**\n * Render-prop variant of `useScrollSpy`. Emits `activeId` via callback or\n * render prop. Renders nothing by default.\n */\nexport function ScrollSpy({\n ids,\n rootMargin,\n threshold,\n root,\n onActiveChange,\n children,\n}: ScrollSpyProps) {\n const activeId = useScrollSpy(ids, { rootMargin, threshold, root });\n\n useEffect(() => {\n onActiveChange?.(activeId);\n }, [activeId, onActiveChange]);\n\n return children ? <>{children({ activeId })}</> : null;\n}\n","import {\n forwardRef,\n useEffect,\n useMemo,\n useState,\n type HTMLAttributes,\n type ReactNode,\n type RefObject,\n} from 'react';\nimport { cn } from '../../utils';\nimport { useScrollSpy } from '../scrollSpy/ScrollSpy';\n\nexport interface TableOfContentsItem {\n id: string;\n label: ReactNode;\n /** Indent level. 0 = top, 1 = nested, … */\n depth?: number;\n}\n\nexport interface TableOfContentsProps extends HTMLAttributes<HTMLElement> {\n items?: TableOfContentsItem[];\n /** Auto-extract from this element's headings. */\n source?: RefObject<HTMLElement>;\n /** CSS selector used with `source`. Default `h2, h3`. */\n headingSelector?: string;\n /** Override the auto-derived active id. */\n activeId?: string | null;\n /** Apply `sticky top-4 self-start` helper classes. */\n sticky?: boolean;\n}\n\nfunction depthFromTagName(tag: string): number {\n const match = /^H([1-6])$/i.exec(tag);\n return match ? Number(match[1]) - 2 : 0; // h2 → 0, h3 → 1, h4 → 2\n}\n\n/**\n * Outline of headings — `items` (explicit) or `source` (auto-extract).\n * Active entry derived from `useScrollSpy` over the headings' IDs.\n */\nexport const TableOfContents = forwardRef<HTMLElement, TableOfContentsProps>(\n function TableOfContents(\n {\n items: itemsProp,\n source,\n headingSelector = 'h2, h3',\n activeId: activeIdProp,\n sticky,\n className,\n ...rest\n },\n ref,\n ) {\n const [extracted, setExtracted] = useState<TableOfContentsItem[]>([]);\n\n useEffect(() => {\n if (itemsProp || !source?.current) return;\n const root = source.current;\n const headings = Array.from(root.querySelectorAll<HTMLElement>(headingSelector));\n const list = headings\n .filter((h) => h.id)\n .map((h) => ({\n id: h.id,\n label: h.textContent ?? '',\n depth: Math.max(0, depthFromTagName(h.tagName)),\n }));\n setExtracted(list);\n }, [itemsProp, source, headingSelector]);\n\n const items = itemsProp ?? extracted;\n const ids = useMemo(() => items.map((i) => i.id), [items]);\n const spyId = useScrollSpy(ids);\n const activeId = activeIdProp !== undefined ? activeIdProp : spyId;\n\n if (items.length === 0) return null;\n\n return (\n <nav\n ref={ref}\n aria-label=\"Table of contents\"\n className={cn(sticky && 'sticky top-4 self-start', className)}\n {...rest}\n >\n <ul className=\"space-y-1 text-sm\">\n {items.map((item) => {\n const isActive = item.id === activeId;\n const depth = item.depth ?? 0;\n return (\n <li\n key={item.id}\n style={{ paddingLeft: depth * 12 }}\n >\n <a\n href={`#${item.id}`}\n aria-current={isActive ? 'location' : undefined}\n className={cn(\n 'block rounded-sm px-2 py-1 transition-colors',\n isActive\n ? 'bg-muted font-medium text-foreground'\n : 'text-muted-foreground hover:bg-muted/40 hover:text-foreground',\n )}\n >\n {item.label}\n </a>\n </li>\n );\n })}\n </ul>\n </nav>\n );\n },\n);\n"]}
|