@wow-two-beta/ui 0.0.29 → 0.0.30

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.
Files changed (84) hide show
  1. package/dist/actions/backToTopButton/BackToTopButton.d.ts +1 -5
  2. package/dist/actions/backToTopButton/BackToTopButton.d.ts.map +1 -1
  3. package/dist/actions/button/Button.d.ts +16 -2
  4. package/dist/actions/button/Button.d.ts.map +1 -1
  5. package/dist/actions/button/Button.variants.d.ts +1 -17
  6. package/dist/actions/button/Button.variants.d.ts.map +1 -1
  7. package/dist/actions/buttonGroup/ButtonGroup.d.ts +1 -5
  8. package/dist/actions/buttonGroup/ButtonGroup.d.ts.map +1 -1
  9. package/dist/actions/copyButton/CopyButton.d.ts +1 -4
  10. package/dist/actions/copyButton/CopyButton.d.ts.map +1 -1
  11. package/dist/actions/disclosureButton/DisclosureButton.d.ts +1 -5
  12. package/dist/actions/disclosureButton/DisclosureButton.d.ts.map +1 -1
  13. package/dist/actions/fab/FAB.d.ts +1 -4
  14. package/dist/actions/fab/FAB.d.ts.map +1 -1
  15. package/dist/actions/iconButton/IconButton.d.ts +1 -4
  16. package/dist/actions/iconButton/IconButton.d.ts.map +1 -1
  17. package/dist/actions/index.js +4 -4
  18. package/dist/actions/link/Link.d.ts +1 -4
  19. package/dist/actions/link/Link.d.ts.map +1 -1
  20. package/dist/actions/overlayButton/OverlayButton.d.ts +1 -10
  21. package/dist/actions/overlayButton/OverlayButton.d.ts.map +1 -1
  22. package/dist/actions/segmentedControl/SegmentedControl.d.ts +1 -5
  23. package/dist/actions/segmentedControl/SegmentedControl.d.ts.map +1 -1
  24. package/dist/actions/toggleButton/ToggleButton.d.ts +1 -4
  25. package/dist/actions/toggleButton/ToggleButton.d.ts.map +1 -1
  26. package/dist/actions/toggleButtonGroup/ToggleButtonGroup.d.ts +1 -5
  27. package/dist/actions/toggleButtonGroup/ToggleButtonGroup.d.ts.map +1 -1
  28. package/dist/{chunk-VYPSZ7AL.js → chunk-CKFM2H7O.js} +4 -4
  29. package/dist/{chunk-VYPSZ7AL.js.map → chunk-CKFM2H7O.js.map} +1 -1
  30. package/dist/{chunk-4ZVQMR44.js → chunk-D3CGJMKB.js} +3 -3
  31. package/dist/{chunk-4ZVQMR44.js.map → chunk-D3CGJMKB.js.map} +1 -1
  32. package/dist/{chunk-J4XMD4JP.js → chunk-DWWF7QPK.js} +3 -3
  33. package/dist/{chunk-J4XMD4JP.js.map → chunk-DWWF7QPK.js.map} +1 -1
  34. package/dist/{chunk-SNTCCYUC.js → chunk-FFOGR3WH.js} +6 -6
  35. package/dist/{chunk-SNTCCYUC.js.map → chunk-FFOGR3WH.js.map} +1 -1
  36. package/dist/{chunk-JBYVZSAH.js → chunk-G7K64TW2.js} +3 -3
  37. package/dist/{chunk-JBYVZSAH.js.map → chunk-G7K64TW2.js.map} +1 -1
  38. package/dist/{chunk-QUQONIWF.js → chunk-GWIFNLGS.js} +7 -31
  39. package/dist/chunk-GWIFNLGS.js.map +1 -0
  40. package/dist/{chunk-WIVBNBRJ.js → chunk-HECIUFDS.js} +7 -7
  41. package/dist/{chunk-WIVBNBRJ.js.map → chunk-HECIUFDS.js.map} +1 -1
  42. package/dist/{chunk-7URULVNU.js → chunk-NJDUGXFL.js} +8 -8
  43. package/dist/{chunk-7URULVNU.js.map → chunk-NJDUGXFL.js.map} +1 -1
  44. package/dist/{chunk-76ZIAFWD.js → chunk-NUMFGKPY.js} +21 -3
  45. package/dist/chunk-NUMFGKPY.js.map +1 -0
  46. package/dist/{chunk-EPLT3244.js → chunk-NXVK3VSQ.js} +6 -6
  47. package/dist/{chunk-EPLT3244.js.map → chunk-NXVK3VSQ.js.map} +1 -1
  48. package/dist/{chunk-2LML37JF.js → chunk-VDE5B3IY.js} +5 -5
  49. package/dist/{chunk-2LML37JF.js.map → chunk-VDE5B3IY.js.map} +1 -1
  50. package/dist/{chunk-XOCNAQ36.js → chunk-VZNIJCMD.js} +109 -13
  51. package/dist/chunk-VZNIJCMD.js.map +1 -0
  52. package/dist/{chunk-637KI4TG.js → chunk-XSTHHOAN.js} +6 -6
  53. package/dist/{chunk-637KI4TG.js.map → chunk-XSTHHOAN.js.map} +1 -1
  54. package/dist/{chunk-QMU6QSG6.js → chunk-XTAFNWLG.js} +3 -3
  55. package/dist/{chunk-QMU6QSG6.js.map → chunk-XTAFNWLG.js.map} +1 -1
  56. package/dist/{chunk-B66J6KWM.js → chunk-ZJMDHG7B.js} +31 -19
  57. package/dist/chunk-ZJMDHG7B.js.map +1 -0
  58. package/dist/display/index.js +5 -5
  59. package/dist/feedback/index.js +5 -5
  60. package/dist/forms/index.js +9 -9
  61. package/dist/hooks/index.d.ts +1 -0
  62. package/dist/hooks/index.d.ts.map +1 -1
  63. package/dist/hooks/index.js +1 -1
  64. package/dist/hooks/useDebounceHandler.d.ts +13 -0
  65. package/dist/hooks/useDebounceHandler.d.ts.map +1 -0
  66. package/dist/icons/Spinner.d.ts +1 -8
  67. package/dist/icons/Spinner.d.ts.map +1 -1
  68. package/dist/icons/index.js +2 -2
  69. package/dist/index.js +15 -15
  70. package/dist/layout/index.js +5 -5
  71. package/dist/nav/index.js +6 -6
  72. package/dist/overlays/index.js +5 -5
  73. package/dist/utils/CssExtensions.d.ts +14 -20
  74. package/dist/utils/CssExtensions.d.ts.map +1 -1
  75. package/dist/utils/OptionalExtensions.d.ts +13 -0
  76. package/dist/utils/OptionalExtensions.d.ts.map +1 -0
  77. package/dist/utils/index.d.ts +3 -1
  78. package/dist/utils/index.d.ts.map +1 -1
  79. package/dist/utils/index.js +1 -1
  80. package/package.json +1 -1
  81. package/dist/chunk-76ZIAFWD.js.map +0 -1
  82. package/dist/chunk-B66J6KWM.js.map +0 -1
  83. package/dist/chunk-QUQONIWF.js.map +0 -1
  84. package/dist/chunk-XOCNAQ36.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/hooks/index.ts","../src/hooks/useControlled.ts","../src/hooks/useDisclosure.ts","../src/hooks/useEventListener.ts","../src/hooks/useOutsideClick.ts","../src/hooks/useEscape.ts","../src/hooks/useFocusTrap.ts","../src/hooks/useResizeObserver.ts","../src/hooks/useMediaQuery.ts","../src/hooks/useReducedMotion.ts","../src/hooks/useClipboard.ts"],"names":["useState","useCallback","useRef","useEffect"],"mappings":"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","file":"chunk-76ZIAFWD.js","sourcesContent":["export { useId } from './useId';\nexport { useControlled } from './useControlled';\nexport { useDisclosure, type DisclosureControls } from './useDisclosure';\nexport { useEventListener } from './useEventListener';\nexport { useOutsideClick } from './useOutsideClick';\nexport { useEscape } from './useEscape';\nexport { useFocusTrap } from './useFocusTrap';\nexport { useScrollLock } from './useScrollLock';\nexport { useResizeObserver } from './useResizeObserver';\nexport { useMediaQuery } from './useMediaQuery';\nexport { useReducedMotion } from './useReducedMotion';\nexport { useClipboard, type UseClipboardOptions, type ClipboardControls } from './useClipboard';\n","import { useCallback, useRef, useState } from 'react';\n\ninterface UseControlledOptions<T> {\n controlled: T | undefined;\n default: T;\n onChange?: (value: T) => void;\n}\n\n/**\n * Standard controlled/uncontrolled pattern.\n *\n * - If `controlled` is defined, the component is controlled — internal state is\n * ignored, `setValue` only fires `onChange`.\n * - Otherwise the component owns its state, `setValue` updates it, and `onChange`\n * still fires for consumers that want to observe changes.\n */\nexport function useControlled<T>({\n controlled,\n default: defaultValue,\n onChange,\n}: UseControlledOptions<T>): [T, (value: T) => void] {\n const [uncontrolled, setUncontrolled] = useState<T>(defaultValue);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const isControlled = controlled !== undefined;\n const value = isControlled ? controlled : uncontrolled;\n\n const setValue = useCallback(\n (next: T) => {\n if (!isControlled) setUncontrolled(next);\n onChangeRef.current?.(next);\n },\n [isControlled],\n );\n\n return [value, setValue];\n}\n","import { useCallback, useState } from 'react';\n\nexport interface DisclosureControls {\n isOpen: boolean;\n open: () => void;\n close: () => void;\n toggle: () => void;\n setOpen: (next: boolean) => void;\n}\n\n/**\n * Minimal open/close state with stable callbacks. The standard backbone for\n * Modal, Drawer, Popover, Menu, Accordion, etc. Use `useControlled` underneath\n * when the consumer may also pass a controlled `open` prop.\n */\nexport function useDisclosure(initial = false): DisclosureControls {\n const [isOpen, setIsOpen] = useState(initial);\n const open = useCallback(() => setIsOpen(true), []);\n const close = useCallback(() => setIsOpen(false), []);\n const toggle = useCallback(() => setIsOpen((o) => !o), []);\n return { isOpen, open, close, toggle, setOpen: setIsOpen };\n}\n","import { useEffect, useLayoutEffect, useRef } from 'react';\n\ntype Target = Window | Document | HTMLElement | null;\n\n/**\n * Add an event listener and clean it up automatically. Handler is read from\n * a ref so consumers don't need to memoize it.\n */\nexport function useEventListener<K extends string>(\n event: K,\n handler: (event: Event) => void,\n target: Target = document,\n options?: boolean | AddEventListenerOptions,\n): void {\n const handlerRef = useRef(handler);\n useLayoutEffect(() => {\n handlerRef.current = handler;\n }, [handler]);\n\n useEffect(() => {\n if (!target) return;\n const listener = (e: Event) => handlerRef.current(e);\n target.addEventListener(event, listener, options);\n return () => target.removeEventListener(event, listener, options);\n }, [event, target, options]);\n}\n","import { useEffect, useRef, type RefObject } from 'react';\n\n/**\n * Fire `handler` when the user clicks outside any of the provided refs.\n * Uses `pointerdown` so it fires before focus shifts (avoids losing focus\n * inside an overlay before a click on a trigger registers).\n */\nexport function useOutsideClick(\n refs: RefObject<HTMLElement | null> | RefObject<HTMLElement | null>[],\n handler: (event: PointerEvent) => void,\n enabled = true,\n): void {\n const handlerRef = useRef(handler);\n handlerRef.current = handler;\n\n useEffect(() => {\n if (!enabled) return;\n const refList = Array.isArray(refs) ? refs : [refs];\n\n const onPointerDown = (e: PointerEvent) => {\n const target = e.target as Node | null;\n if (!target) return;\n for (const ref of refList) {\n if (ref.current && ref.current.contains(target)) return;\n }\n handlerRef.current(e);\n };\n\n document.addEventListener('pointerdown', onPointerDown, true);\n return () => document.removeEventListener('pointerdown', onPointerDown, true);\n }, [refs, enabled]);\n}\n","import { useEffect, useRef } from 'react';\n\n/**\n * Fire `handler` when the Escape key is pressed at the document level.\n * For nested overlays, the topmost should call `event.stopPropagation()` in\n * its handler — `DismissableLayer` handles this stack-style.\n */\nexport function useEscape(handler: (event: KeyboardEvent) => void, enabled = true): void {\n const handlerRef = useRef(handler);\n handlerRef.current = handler;\n\n useEffect(() => {\n if (!enabled) return;\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') handlerRef.current(e);\n };\n document.addEventListener('keydown', onKeyDown);\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [enabled]);\n}\n","import { useEffect, type RefObject } from 'react';\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n].join(',');\n\nfunction getFocusable(container: HTMLElement): HTMLElement[] {\n return Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)).filter(\n (el) => !el.hasAttribute('aria-hidden') && el.offsetParent !== null,\n );\n}\n\n/**\n * Trap Tab / Shift+Tab focus inside the referenced element. On mount, focuses\n * the first focusable child (unless already focused inside). On unmount,\n * returns focus to the element that had it before mounting.\n *\n * For richer behavior (sentinels, nested traps), wrap `FocusScope` instead —\n * this hook is the lower primitive.\n */\nexport function useFocusTrap(ref: RefObject<HTMLElement | null>, enabled = true): void {\n useEffect(() => {\n if (!enabled || !ref.current) return;\n const container = ref.current;\n const previouslyFocused = document.activeElement as HTMLElement | null;\n\n const focusables = getFocusable(container);\n if (focusables.length > 0 && !container.contains(document.activeElement)) {\n focusables[0]?.focus();\n } else if (focusables.length === 0) {\n container.tabIndex = -1;\n container.focus();\n }\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== 'Tab') return;\n const items = getFocusable(container);\n if (items.length === 0) {\n e.preventDefault();\n return;\n }\n const first = items[0];\n const last = items[items.length - 1];\n if (!first || !last) return;\n const active = document.activeElement;\n if (e.shiftKey && active === first) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && active === last) {\n e.preventDefault();\n first.focus();\n }\n };\n\n container.addEventListener('keydown', onKeyDown);\n return () => {\n container.removeEventListener('keydown', onKeyDown);\n previouslyFocused?.focus?.();\n };\n }, [ref, enabled]);\n}\n","import { useEffect, useRef, type RefObject } from 'react';\n\n/**\n * Run `callback` whenever the referenced element's size changes. Returns\n * synchronously after layout, before paint. Cleans up automatically.\n */\nexport function useResizeObserver<T extends HTMLElement>(\n ref: RefObject<T | null>,\n callback: (entry: ResizeObserverEntry) => void,\n enabled = true,\n): void {\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n\n useEffect(() => {\n if (!enabled || !ref.current || typeof ResizeObserver === 'undefined') return;\n const element = ref.current;\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) callbackRef.current(entry);\n });\n observer.observe(element);\n return () => observer.disconnect();\n }, [ref, enabled]);\n}\n","import { useEffect, useState } from 'react';\n\n/**\n * Reactively follow a CSS media query. Pass a query string like\n * `'(min-width: 768px)'` or `'(prefers-reduced-motion: reduce)'`.\n */\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = useState(() => window.matchMedia(query).matches);\n\n useEffect(() => {\n const mql = window.matchMedia(query);\n setMatches(mql.matches);\n const onChange = (e: MediaQueryListEvent) => setMatches(e.matches);\n mql.addEventListener('change', onChange);\n return () => mql.removeEventListener('change', onChange);\n }, [query]);\n\n return matches;\n}\n","import { useMediaQuery } from './useMediaQuery';\n\n/**\n * Returns `true` when the user has requested reduced motion via OS settings.\n * Components should short-circuit looping/transitional animations to a\n * static final state when this is `true`.\n */\nexport function useReducedMotion(): boolean {\n return useMediaQuery('(prefers-reduced-motion: reduce)');\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport interface UseClipboardOptions {\n /** Reset `copied` back to false after this many ms. Default 2000. Set 0 to keep state until explicitly reset. */\n resetAfter?: number;\n}\n\nexport interface ClipboardControls {\n /** True for `resetAfter` ms after a successful copy. */\n copied: boolean;\n /** Last error from `navigator.clipboard.writeText`, if any. */\n error: Error | null;\n /** Write `text` to the system clipboard. Returns the promise. */\n copy: (text: string) => Promise<void>;\n /** Force-clear the `copied` flag. */\n reset: () => void;\n}\n\n/**\n * Wraps `navigator.clipboard.writeText` with a transient `copied` flag for\n * post-action UI (icon swap, \"Copied!\" tooltip). Pass `resetAfter: 0` to\n * keep `copied` true until you call `reset()`.\n */\nexport function useClipboard({ resetAfter = 2000 }: UseClipboardOptions = {}): ClipboardControls {\n const [copied, setCopied] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const reset = useCallback(() => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n setCopied(false);\n setError(null);\n }, []);\n\n const copy = useCallback(\n async (text: string) => {\n try {\n await navigator.clipboard.writeText(text);\n setError(null);\n setCopied(true);\n if (resetAfter > 0) {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => setCopied(false), resetAfter);\n }\n } catch (err) {\n setCopied(false);\n setError(err instanceof Error ? err : new Error(String(err)));\n }\n },\n [resetAfter],\n );\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n };\n }, []);\n\n return { copied, error, copy, reset };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/index.ts","../src/utils/composeEventHandlers.ts","../src/utils/dataAttr.ts","../src/utils/CssExtensions.ts"],"names":[],"mappings":"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","file":"chunk-B66J6KWM.js","sourcesContent":["export { cn } from './cn';\nexport { composeRefs } from './composeRefs';\nexport { composeEventHandlers } from './composeEventHandlers';\nexport { dataAttr } from './dataAttr';\nexport { tv, type VariantProps } from './tv';\nexport type {\n PolymorphicProps,\n PolymorphicPropsWithoutRef,\n PolymorphicRef,\n} from './polymorphic';\nexport {\n PADDING_TOKEN_TO_CSS,\n RADIUS_TOKEN_TO_CSS,\n sizeValueToCss,\n resolvePaddingStyle,\n resolveRadiusStyle,\n resolveBoxSizeStyle,\n type PaddingToken,\n type RadiusToken,\n type SizeValue,\n type PaddingProp,\n type RadiusProp,\n type BoxSizeOverrides,\n} from './CssExtensions';\n","import type { SyntheticEvent } from 'react';\n\n/**\n * Chain two event handlers. The first handler runs, then the second — unless\n * the first called `event.preventDefault()`, in which case the second is skipped.\n * Use when overriding a default handler from a parent while still allowing\n * the consumer to provide their own.\n */\nexport function composeEventHandlers<E extends SyntheticEvent>(\n theirHandler: ((event: E) => void) | undefined,\n ourHandler: (event: E) => void,\n { checkForDefaultPrevented = true }: { checkForDefaultPrevented?: boolean } = {},\n): (event: E) => void {\n return (event) => {\n theirHandler?.(event);\n if (!checkForDefaultPrevented || !event.defaultPrevented) {\n ourHandler(event);\n }\n };\n}\n","/**\n * Returns `\"\"` when the condition is true, `undefined` otherwise.\n * Use for boolean `data-*` attributes — React strips the attr when value is undefined,\n * so the DOM cleanly toggles `data-state` rather than `data-state=\"false\"`.\n */\nexport function dataAttr(condition: boolean | undefined): '' | undefined {\n return condition ? '' : undefined;\n}\n","import type { CSSProperties } from 'react';\n\n/**\n * CSS-value extensions — types, token maps, and resolvers for the design\n * system's spacing / radius / box-size abstractions.\n *\n * Components consume these instead of duplicating their own padding/radius\n * tokens (Button, IconButton, FAB, ToggleButton, etc.).\n */\n\n// =============================================================================\n// Tokens\n// =============================================================================\n\n/** Padding preset — discrete spacing scale, decoupled from `size`. */\nexport type PaddingToken = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/** Border-radius preset — design-system radius scale + `none` / `full`. */\nexport type RadiusToken = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\n/** Raw CSS value — number = px, string = any CSS unit (`\"1rem\"`, `\"calc(...)\"`). */\nexport type SizeValue = string | number;\n\n// =============================================================================\n// Token → CSS maps\n// =============================================================================\n\nexport const PADDING_TOKEN_TO_CSS: Record<Exclude<PaddingToken, 'none'>, string> = {\n xs: '0.5rem',\n sm: '0.75rem',\n md: '1rem',\n lg: '1.5rem',\n xl: '2rem',\n};\n\nexport const RADIUS_TOKEN_TO_CSS: Record<Exclude<RadiusToken, 'none' | 'full'>, string> = {\n xs: '0.125rem',\n sm: '0.25rem',\n md: '0.5rem',\n lg: '0.75rem',\n xl: '1rem',\n};\n\n// =============================================================================\n// Resolvers — turn SDK abstractions into CSSProperties\n// =============================================================================\n\n/** Coerce a `SizeValue` to a CSS string (number → `\"Npx\"`, string passthrough). */\nexport function sizeValueToCss(v: SizeValue): string {\n return typeof v === 'number' ? `${v}px` : v;\n}\n\n/** Padding override — token preset OR per-axis object. */\nexport type PaddingProp = PaddingToken | { x?: SizeValue; y?: SizeValue };\n\nexport function resolvePaddingStyle(\n padding: PaddingProp | undefined,\n): CSSProperties | undefined {\n if (!padding) return undefined;\n if (typeof padding === 'string') {\n if (padding === 'none') {\n return { paddingLeft: 0, paddingRight: 0, paddingTop: 0, paddingBottom: 0 };\n }\n const v = PADDING_TOKEN_TO_CSS[padding];\n return { paddingLeft: v, paddingRight: v, paddingTop: v, paddingBottom: v };\n }\n const style: CSSProperties = {};\n if (padding.x !== undefined) {\n const v = sizeValueToCss(padding.x);\n style.paddingLeft = v;\n style.paddingRight = v;\n }\n if (padding.y !== undefined) {\n const v = sizeValueToCss(padding.y);\n style.paddingTop = v;\n style.paddingBottom = v;\n }\n return style;\n}\n\n/** Radius override — token preset OR raw CSS value. */\nexport type RadiusProp = RadiusToken | SizeValue;\n\nexport function resolveRadiusStyle(\n radius: RadiusProp | undefined,\n): CSSProperties | undefined {\n if (radius === undefined || radius === null) return undefined;\n if (typeof radius === 'number') return { borderRadius: `${radius}px` };\n if (radius === 'none') return { borderRadius: 0 };\n if (radius === 'full') return { borderRadius: '9999px' };\n if (radius in RADIUS_TOKEN_TO_CSS) {\n return {\n borderRadius:\n RADIUS_TOKEN_TO_CSS[radius as Exclude<RadiusToken, 'none' | 'full'>],\n };\n }\n // Raw CSS unit string (e.g. \"20px\", \"1rem\")\n return { borderRadius: radius };\n}\n\n/** Box-size overrides — `width / height / minWidth / minHeight`. */\nexport interface BoxSizeOverrides {\n width?: SizeValue;\n height?: SizeValue;\n minWidth?: SizeValue;\n minHeight?: SizeValue;\n}\n\nexport function resolveBoxSizeStyle(\n overrides: BoxSizeOverrides,\n): CSSProperties | undefined {\n const style: CSSProperties = {};\n let hasAny = false;\n if (overrides.width !== undefined) {\n style.width = sizeValueToCss(overrides.width);\n hasAny = true;\n }\n if (overrides.height !== undefined) {\n style.height = sizeValueToCss(overrides.height);\n hasAny = true;\n }\n if (overrides.minWidth !== undefined) {\n style.minWidth = sizeValueToCss(overrides.minWidth);\n hasAny = true;\n }\n if (overrides.minHeight !== undefined) {\n style.minHeight = sizeValueToCss(overrides.minHeight);\n hasAny = true;\n }\n return hasAny ? style : undefined;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/icons/index.ts","../src/icons/Icon.tsx","../src/icons/Spinner.tsx"],"names":["jsx"],"mappings":";;;;;;AAAA,IAAA,aAAA,GAAA;AAAA,QAAA,CAAA,aAAA,EAAA;AAAA,EAAA,IAAA,EAAA,MAAA,IAAA;AAAA,EAAA,OAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AC6BO,IAAM,IAAA,GAAO,UAAA;AAAA,EAClB,CAAC,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,GAAO,EAAA,EAAI,SAAA,EAAW,YAAA,EAAc,SAAA,EAAW,GAAG,IAAA,EAAK,EAAG,GAAA,KAAQ;AACnF,IAAA,MAAM,WAAW,SAAA,KAAc,MAAA;AAC/B,IAAA,uBACE,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA;AAAA,QACnC,aAAA,EAAa,WAAW,MAAA,GAAY,IAAA;AAAA,QACpC,YAAA,EAAY,SAAA;AAAA,QACZ,IAAA,EAAM,WAAW,KAAA,GAAQ,MAAA;AAAA,QACzB,SAAA,EAAW,KAAA;AAAA,QACV,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,IAAA,CAAK,WAAA,GAAc,MAAA;AChCZ,IAAM,OAAA,GAAU,CAAC,EAAE,SAAA,EAAU,qBAClC,IAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAW,EAAA,CAAG,cAAA,EAAgB,SAAS,CAAA;AAAA,IACvC,KAAA,EAAM,4BAAA;AAAA,IACN,IAAA,EAAK,MAAA;AAAA,IACL,OAAA,EAAQ,WAAA;AAAA,IACR,aAAA,EAAY,MAAA;AAAA,IACZ,KAAA,EAAM,KAAA;AAAA,IACN,MAAA,EAAO,KAAA;AAAA,IAEP,QAAA,EAAA;AAAA,sBAAAA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,YAAA;AAAA,UACV,EAAA,EAAG,IAAA;AAAA,UACH,EAAA,EAAG,IAAA;AAAA,UACH,CAAA,EAAE,IAAA;AAAA,UACF,MAAA,EAAO,cAAA;AAAA,UACP,WAAA,EAAY;AAAA;AAAA,OACd;AAAA,sBACAA,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,YAAA;AAAA,UACV,IAAA,EAAK,cAAA;AAAA,UACL,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA;AACF","file":"chunk-QUQONIWF.js","sourcesContent":["export { Icon, type IconProps, type IconAdapter, type IconAdapterProps } from './Icon';\nexport { Spinner, type SpinnerProps } from './Spinner';\n","import { forwardRef, type ComponentType, type SVGProps } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface IconAdapterProps extends SVGProps<SVGSVGElement> {\n size?: number | string;\n}\n\nexport type IconAdapter = ComponentType<IconAdapterProps>;\n\nexport interface IconProps extends Omit<SVGProps<SVGSVGElement>, 'aria-hidden'> {\n /** Icon component — pass a `lucide-react` icon, custom SVG component, or any matching shape. */\n icon: IconAdapter;\n /** Pixel size of the rendered SVG. Default 20. */\n size?: number | string;\n /**\n * Provide an aria-label when the icon stands alone (decorative siblings\n * should pass it via parent). Sets `role=\"img\"` and unhides from AT.\n * Without it, the icon is `aria-hidden` and decorative.\n */\n 'aria-label'?: string;\n}\n\n/**\n * Generic icon wrapper. Accepts any icon component matching the lucide-react\n * shape (`{ size, color, className, ...svgProps }`).\n *\n * - Without `aria-label` → decorative, `aria-hidden`.\n * - With `aria-label` → semantic, `role=\"img\"`.\n */\nexport const Icon = forwardRef<SVGSVGElement, IconProps>(\n ({ icon: IconComp, size = 20, className, 'aria-label': ariaLabel, ...rest }, ref) => {\n const labelled = ariaLabel !== undefined;\n return (\n <IconComp\n ref={ref}\n size={size}\n className={cn('shrink-0', className)}\n aria-hidden={labelled ? undefined : true}\n aria-label={ariaLabel}\n role={labelled ? 'img' : undefined}\n focusable={false}\n {...rest}\n />\n );\n },\n);\nIcon.displayName = 'Icon';\n","import { cn } from '../utils';\n\nexport interface SpinnerProps {\n className?: string;\n}\n\n/**\n * Inlined SVG spinner — `currentColor` so it inherits the parent's text color.\n * Sized at `1em` so it scales with the font of its container.\n *\n * Foundation primitive consumed by Button (loading state), CopyButton, etc.\n * Always pair with `aria-busy=\"true\"` on the parent so screen readers announce\n * the busy state.\n */\nexport const Spinner = ({ className }: SpinnerProps) => (\n <svg\n className={cn('animate-spin', className)}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n width=\"1em\"\n height=\"1em\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z\"\n />\n </svg>\n);\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/actions/button/Button.variants.ts","../src/actions/button/Button.tsx","../src/actions/iconButton/IconButton.variants.ts","../src/actions/iconButton/IconButton.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/overlayButton/OverlayButton.tsx","../src/actions/toolbar/Toolbar.tsx","../src/actions/speedDial/SpeedDial.tsx","../src/actions/backToTopButton/BackToTopButton.tsx"],"names":["forwardRef","jsx","jsxs","Toolbar","ToolbarButton","ToolbarLink","createContext","useContext","SpeedDialTrigger","SpeedDialAction","BackToTopButton"],"mappings":"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","file":"chunk-XOCNAQ36.js","sourcesContent":["import { tv, type VariantProps } from '../../utils';\n\n/**\n * Button visual surface — see `Button.standard.md` (rules) + `Button.spec.md` (values).\n *\n * Two-axis style system: `variant` × `tone`. Glass is tone-neutral by design\n * (text/bg derived from `--color-inverse*` regardless of tone).\n *\n * Density: height + horizontal padding scale with `--ui-density-scale` CSS var\n * (default `1`) via `calc()`.\n *\n * Forced-colors: every variant carries `border border-transparent` so HCM\n * paints a visible boundary.\n *\n * Reduced motion: `motion-reduce:transition-none` on base.\n *\n * Skeleton state: `[data-state=\"skeleton\"]` rule on base hides children +\n * applies shimmer. Owned by Button.tsx (sets `data-state`).\n */\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-inverse/70 text-inverse-foreground backdrop-blur-md hover:bg-inverse/85 active:bg-inverse/90 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-muted active:bg-muted/80' },\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 intentionally omitted — tone-neutral by design.\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 type ButtonHTMLAttributes,\n type CSSProperties,\n type ReactNode,\n} from 'react';\nimport {\n cn,\n resolvePaddingStyle,\n resolveRadiusStyle,\n resolveBoxSizeStyle,\n type PaddingProp,\n type RadiusProp,\n type SizeValue,\n} from '../../utils';\nimport { Slot } from '../../primitives';\nimport { Spinner } from '../../icons';\nimport { buttonVariants, type ButtonVariants } from './Button.variants';\n\n/** Foundational interactive element — see Button.standard.md + Button.spec.md. */\n\nexport interface ButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'type'>,\n ButtonVariants {\n /** Slot before children (logical start). */\n leading?: ReactNode;\n /** Slot after children (logical end). */\n trailing?: ReactNode;\n /** Action-loading: replaces leading w/ spinner, sets aria-busy, blocks clicks. */\n loading?: boolean;\n /** Replaces children when loading. No default — consumer supplies (i18n). */\n loadingText?: string;\n /**\n * Content-loading: hides content (preserves box dimensions) + shimmer bg.\n * Mutually exclusive with `loading` — if both, `skeleton` wins (+ dev warn).\n */\n skeleton?: boolean;\n /** Render as the single child element via Slot. */\n asChild?: boolean;\n /** Independent padding override (preset or `{x, y}` object). */\n padding?: PaddingProp;\n /** Independent radius override (preset or raw value). */\n radius?: RadiusProp;\n /** Explicit width override. Number = px; string = any CSS unit. */\n width?: SizeValue;\n /** Explicit height override. Number = px; string = any CSS unit. */\n height?: SizeValue;\n /**\n * Reserve a minimum width so the button doesn't reflow when its label\n * changes (e.g. \"Save\" → \"Saving…\" → \"Saved\"). Number = px; string = any\n * CSS unit. Content stays centered via the base `justify-center`.\n */\n minWidth?: SizeValue;\n /** Reserve a minimum height — symmetric with `minWidth`. */\n minHeight?: SizeValue;\n /** Default `'button'` — NOT browser-default `'submit'`. */\n type?: 'button' | 'submit' | 'reset';\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n style,\n variant,\n tone,\n size,\n shape,\n fullWidth,\n wrap,\n padding,\n radius,\n width,\n height,\n minWidth,\n minHeight,\n leading,\n trailing,\n loading,\n loadingText,\n skeleton,\n asChild,\n type = 'button',\n disabled,\n children,\n onClick,\n ...rest\n },\n ref,\n ) => {\n if (loading && skeleton) {\n console.warn(\n '[Button] `loading` and `skeleton` are mutually exclusive — `skeleton` takes precedence.',\n );\n }\n const isSkeleton = !!skeleton;\n const isLoading = !isSkeleton && !!loading;\n\n const dataState: 'loading' | 'skeleton' | 'disabled' | undefined = isSkeleton\n ? 'skeleton'\n : isLoading\n ? 'loading'\n : disabled\n ? 'disabled'\n : undefined;\n\n const Comp = asChild ? Slot : 'button';\n\n const overrideStyle: CSSProperties | undefined = (() => {\n const padStyle = resolvePaddingStyle(padding);\n const radStyle = resolveRadiusStyle(radius);\n const boxStyle = resolveBoxSizeStyle({ width, height, minWidth, minHeight });\n if (!padStyle && !radStyle && !boxStyle && !style) return undefined;\n return { ...padStyle, ...radStyle, ...boxStyle, ...style };\n })();\n\n const handleClick = isLoading || isSkeleton ? undefined : onClick;\n\n const content = isLoading ? (\n <>\n <Spinner />\n {loadingText !== undefined ? <span>{loadingText}</span> : children}\n {trailing}\n </>\n ) : (\n <>\n {leading}\n {children}\n {trailing}\n </>\n );\n\n return (\n <Comp\n ref={ref}\n type={asChild ? undefined : type}\n className={cn(\n buttonVariants({ variant, tone, size, shape, fullWidth, wrap }),\n className,\n )}\n style={overrideStyle}\n disabled={disabled || undefined}\n aria-busy={isLoading || isSkeleton ? true : undefined}\n tabIndex={isSkeleton ? -1 : undefined}\n data-state={dataState}\n onClick={handleClick}\n {...rest}\n >\n {content}\n </Comp>\n );\n },\n);\n\nButton.displayName = 'Button';\n","import { tv, type VariantProps } from '../../utils';\n\nexport const iconButtonVariants = tv({\n base: 'inline-flex items-center justify-center transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n variants: {\n variant: {\n solid: 'bg-primary text-primary-foreground hover:bg-primary/90',\n soft: 'bg-primary-soft text-primary-soft-foreground hover:bg-primary-soft/80',\n outline: 'border border-input bg-background text-foreground hover:bg-muted',\n ghost: 'bg-transparent text-foreground hover:bg-muted',\n danger: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n },\n size: {\n xs: 'h-6 w-6 rounded-sm',\n sm: 'h-8 w-8 rounded-md',\n md: 'h-10 w-10 rounded-md',\n lg: 'h-12 w-12 rounded-lg',\n },\n shape: {\n square: '',\n circle: 'rounded-full',\n },\n },\n defaultVariants: {\n variant: 'ghost',\n size: 'md',\n shape: 'square',\n },\n});\n\nexport type IconButtonVariants = VariantProps<typeof iconButtonVariants>;\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport { iconButtonVariants, type IconButtonVariants } from './IconButton.variants';\n\nexport interface IconButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>,\n IconButtonVariants {\n /** REQUIRED accessible label. IconButton has no visible text. */\n 'aria-label': string;\n children: ReactNode;\n}\n\n/**\n * Square / circular button containing only an icon. `aria-label` is\n * required by the type — there is no visible text fallback.\n */\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n ({ className, variant, size, shape, type = 'button', ...props }, ref) => (\n <button\n ref={ref}\n type={type}\n className={cn(iconButtonVariants({ variant, size, shape }), className)}\n {...props}\n />\n ),\n);\nIconButton.displayName = 'IconButton';\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/**\n * Anchor with consistent focus / hover styling. Pass `asChild` to render a\n * router `<Link>` while inheriting our visuals.\n */\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/**\n * Visually groups Button / IconButton children. When `attached` (default),\n * collapses inner border-radii so children read as one connected control.\n * Pass `attached={false}` for a simple gap-spaced row.\n */\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\nexport const toggleButtonVariants = tv({\n base: 'inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-primary data-[state=on]:text-primary-foreground',\n variants: {\n variant: {\n solid: 'bg-muted text-foreground hover:bg-muted/80',\n outline: 'border border-input bg-background text-foreground hover:bg-muted',\n ghost: 'bg-transparent text-foreground hover:bg-muted',\n },\n size: {\n sm: 'h-8 px-3 text-sm rounded-md',\n md: 'h-10 px-4 text-sm rounded-md',\n lg: 'h-12 px-6 text-base rounded-lg',\n },\n },\n defaultVariants: {\n variant: 'ghost',\n size: 'md',\n },\n});\n\nexport type ToggleButtonVariants = VariantProps<typeof toggleButtonVariants>;\n","import { forwardRef, type ButtonHTMLAttributes } from 'react';\nimport { cn, dataAttr } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { toggleButtonVariants, type ToggleButtonVariants } from './ToggleButton.variants';\n\nexport interface ToggleButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'value'>,\n ToggleButtonVariants {\n /** Controlled pressed state. */\n pressed?: boolean;\n /** Uncontrolled initial state. */\n defaultPressed?: boolean;\n /** Fires whenever pressed state changes. */\n onPressedChange?: (pressed: boolean) => void;\n}\n\n/**\n * Two-state button (on / off). Sets `aria-pressed` and `data-state`. Use\n * inside `ToggleButtonGroup` for arrow-key navigation across siblings.\n */\nexport const ToggleButton = forwardRef<HTMLButtonElement, ToggleButtonProps>(\n (\n {\n pressed,\n defaultPressed = false,\n onPressedChange,\n onClick,\n className,\n variant,\n size,\n disabled,\n type = 'button',\n ...props\n },\n ref,\n ) => {\n const [value, setValue] = useControlled({\n controlled: pressed,\n default: defaultPressed,\n onChange: onPressedChange,\n });\n return (\n <button\n ref={ref}\n type={type}\n aria-pressed={value}\n data-state={value ? 'on' : 'off'}\n data-disabled={dataAttr(disabled)}\n disabled={disabled}\n onClick={(e) => {\n onClick?.(e);\n if (!e.defaultPrevented) setValue(!value);\n }}\n className={cn(toggleButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n },\n);\nToggleButton.displayName = 'ToggleButton';\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/**\n * Coordinates a row/column of `ToggleButton` children. `type=\"single\"` (default)\n * tracks one active value; `type=\"multi\"` tracks an array. Each child must\n * expose a `value` prop that the group uses as its identifier.\n */\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/**\n * Visual variant of `ToggleButtonGroup` styled as a connected pill row —\n * the iOS / shadcn segmented control pattern. Use for view switchers\n * (day/week/month) and small option pickers.\n */\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/**\n * Floating Action Button — fixed-position circular button with shadow.\n * Pass an icon (or icon + short label) as children. `aria-label` required.\n */\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 { forwardRef, type ReactNode } from 'react';\nimport { Check, Copy } from 'lucide-react';\nimport { Icon } from '../../icons';\nimport { useClipboard } from '../../hooks';\nimport { Button, type ButtonProps } from '../button/Button';\n\nexport interface CopyButtonProps extends Omit<ButtonProps, 'onClick' | 'children'> {\n /** Text to copy when clicked. */\n text: string;\n /** Reset window for the \"copied\" state. Default 2000ms. */\n resetAfter?: number;\n /** Render-prop / static label. Receives `copied` so consumers can swap text. */\n children?: ReactNode | ((args: { copied: boolean }) => ReactNode);\n /** Accessible label when no visible text (icon-only). Default `\"Copy\"`. */\n 'aria-label'?: string;\n}\n\n/**\n * Button that copies `text` to the clipboard. Swaps to a checkmark icon for\n * `resetAfter` ms after a successful copy.\n */\nexport const CopyButton = forwardRef<HTMLButtonElement, CopyButtonProps>(\n (\n { text, resetAfter = 2000, children, variant = 'ghost', 'aria-label': ariaLabel, ...props },\n ref,\n ) => {\n const { copied, copy } = useClipboard({ resetAfter });\n const label = copied ? 'Copied' : (ariaLabel ?? 'Copy');\n const content =\n typeof children === 'function'\n ? children({ copied })\n : children ?? <Icon icon={copied ? Check : Copy} size={16} />;\n\n return (\n <Button\n ref={ref}\n variant={variant}\n aria-label={label}\n onClick={() => void copy(text)}\n {...props}\n >\n {content}\n </Button>\n );\n },\n);\nCopyButton.displayName = 'CopyButton';\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/**\n * Button with a chevron that rotates on open. Used as the trigger for\n * collapsible sections, accordion items, sidebar groups. Sets `aria-expanded`\n * and `data-state=\"open\" | \"closed\"` for downstream content sync.\n */\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 { forwardRef } from 'react';\nimport { cn } from '../../utils';\nimport { Button, type ButtonProps } from '../button/Button';\n\n/**\n * OverlayButton — thin wrapper around Button, supplying the typical\n * \"icon-button glassy circle anchored over a card/image\" preset.\n *\n * Glass styling, sizing, loading/skeleton, asChild, etc. all flow from Button.\n * OverlayButton owns positioning + reveal-on-hover only.\n *\n * Pair with `appearOn=\"hover\"` and a parent with `className=\"group\"` to\n * reveal the button only when the parent is hovered.\n */\n\nexport type OverlayPosition =\n | 'top-right'\n | 'top-left'\n | 'bottom-right'\n | 'bottom-left'\n | 'center';\n\nexport type OverlayAppearOn = 'always' | 'hover';\n\nexport interface OverlayButtonProps\n extends Omit<ButtonProps, 'variant' | 'shape'> {\n /** Anchor location relative to the positioned parent. Default `'top-right'`. */\n position?: OverlayPosition;\n /**\n * Visibility — `'always'` shows on mount; `'hover'` reveals when the parent\n * (which MUST have `className=\"group\"`) is hovered. Default `'always'`.\n */\n appearOn?: OverlayAppearOn;\n /** REQUIRED — overlay buttons are typically icon-only. */\n 'aria-label': string;\n}\n\nconst POSITION_CLASSES: Record<OverlayPosition, string> = {\n 'top-right': 'absolute top-2 right-2',\n 'top-left': 'absolute top-2 left-2',\n 'bottom-right': 'absolute bottom-2 right-2',\n 'bottom-left': 'absolute bottom-2 left-2',\n 'center': 'absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2',\n};\n\nconst APPEAR_ON_CLASSES: Record<OverlayAppearOn, string> = {\n always: 'opacity-100',\n hover: 'opacity-0 group-hover:opacity-100 group-focus-within:opacity-100 transition-opacity',\n};\n\nexport const OverlayButton = forwardRef<HTMLButtonElement, OverlayButtonProps>(\n (\n {\n className,\n position = 'top-right',\n appearOn = 'always',\n size = 'sm',\n tone = 'neutral',\n ...props\n },\n ref,\n ) => (\n <Button\n ref={ref}\n variant=\"glass\"\n shape=\"circle\"\n size={size}\n tone={tone}\n className={cn(\n POSITION_CLASSES[position],\n APPEAR_ON_CLASSES[appearOn],\n 'z-10',\n className,\n )}\n {...props}\n />\n ),\n);\n\nOverlayButton.displayName = 'OverlayButton';\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/**\n * Floating button that appears after the user scrolls past `threshold`.\n * Click scrolls the target back to top with smooth-scroll (skipped under\n * `prefers-reduced-motion`).\n */\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-40 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"]}