@wow-two-beta/ui 0.0.61 → 0.0.63

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 (46) hide show
  1. package/dist/actions/index.js +3 -2
  2. package/dist/actions/toggleButton/ToggleButton.d.ts +1 -0
  3. package/dist/{chunk-BMSE2X2G.js → chunk-3IVQNIHV.js} +4 -4
  4. package/dist/{chunk-BMSE2X2G.js.map → chunk-3IVQNIHV.js.map} +1 -1
  5. package/dist/chunk-4QQLJOGP.js +95 -0
  6. package/dist/chunk-4QQLJOGP.js.map +1 -0
  7. package/dist/{chunk-QDECMXNB.js → chunk-5JYRZ5PA.js} +5 -5
  8. package/dist/{chunk-QDECMXNB.js.map → chunk-5JYRZ5PA.js.map} +1 -1
  9. package/dist/{chunk-5LFMQORR.js → chunk-BLU5JZAB.js} +7 -7
  10. package/dist/{chunk-5LFMQORR.js.map → chunk-BLU5JZAB.js.map} +1 -1
  11. package/dist/{chunk-DJJOQWOG.js → chunk-EQNTG53H.js} +3 -3
  12. package/dist/{chunk-DJJOQWOG.js.map → chunk-EQNTG53H.js.map} +1 -1
  13. package/dist/{chunk-VQF4QTBD.js → chunk-H4P5MAGS.js} +5 -5
  14. package/dist/{chunk-VQF4QTBD.js.map → chunk-H4P5MAGS.js.map} +1 -1
  15. package/dist/{chunk-FHMZM3CE.js → chunk-MYLSXVIS.js} +4 -4
  16. package/dist/{chunk-FHMZM3CE.js.map → chunk-MYLSXVIS.js.map} +1 -1
  17. package/dist/{chunk-FNSC4LAL.js → chunk-NOOKDXIZ.js} +3 -3
  18. package/dist/{chunk-FNSC4LAL.js.map → chunk-NOOKDXIZ.js.map} +1 -1
  19. package/dist/{chunk-QGHQDFQN.js → chunk-WIXKLDTN.js} +4 -4
  20. package/dist/{chunk-QGHQDFQN.js.map → chunk-WIXKLDTN.js.map} +1 -1
  21. package/dist/{chunk-DUWEP5T3.js → chunk-XB4TU643.js} +29 -9
  22. package/dist/chunk-XB4TU643.js.map +1 -0
  23. package/dist/{chunk-TTSJZEL7.js → chunk-XLYJF3HC.js} +41 -3
  24. package/dist/chunk-XLYJF3HC.js.map +1 -0
  25. package/dist/{chunk-XN5B3B6Z.js → chunk-XPUKDLD3.js} +7 -4
  26. package/dist/chunk-XPUKDLD3.js.map +1 -0
  27. package/dist/{chunk-GDJMPYPU.js → chunk-YNC2CIJR.js} +7 -92
  28. package/dist/chunk-YNC2CIJR.js.map +1 -0
  29. package/dist/display/index.js +3 -2
  30. package/dist/feedback/index.js +3 -3
  31. package/dist/forms/InputStyles.d.ts +100 -2
  32. package/dist/forms/index.js +7 -7
  33. package/dist/forms/select/Select.variants.d.ts +128 -2
  34. package/dist/index.js +13 -12
  35. package/dist/layout/index.js +5 -5
  36. package/dist/nav/index.js +5 -5
  37. package/dist/overlays/index.js +6 -6
  38. package/dist/primitives/colorModeProvider/ColorModeProvider.d.ts +22 -0
  39. package/dist/primitives/colorModeProvider/index.d.ts +1 -0
  40. package/dist/primitives/index.d.ts +1 -0
  41. package/dist/primitives/index.js +1 -1
  42. package/package.json +1 -1
  43. package/dist/chunk-DUWEP5T3.js.map +0 -1
  44. package/dist/chunk-GDJMPYPU.js.map +0 -1
  45. package/dist/chunk-TTSJZEL7.js.map +0 -1
  46. package/dist/chunk-XN5B3B6Z.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/primitives/index.ts","../src/primitives/slot/Slot.tsx","../src/primitives/portal/Portal.tsx","../src/primitives/visuallyHidden/VisuallyHidden.tsx","../src/primitives/presence/Presence.tsx","../src/primitives/directionProvider/DirectionProvider.tsx","../src/primitives/accessibleIcon/AccessibleIcon.tsx","../src/primitives/focusScope/FocusScope.tsx","../src/primitives/dismissableLayer/DismissableLayer.tsx","../src/primitives/anchoredPositioner/AnchoredPositioner.tsx","../src/primitives/rovingFocusGroup/RovingFocusGroup.tsx","../src/primitives/collection/Collection.tsx","../src/primitives/formControlContext/FormControlContext.tsx","../src/primitives/scrollLockProvider/ScrollLockProvider.tsx","../src/primitives/overlayArrow/OverlayArrow.tsx","../src/primitives/announce/Announce.tsx"],"names":["forwardRef","jsx","useState","isValidElement","useEffect","cloneElement","RadixFocusScope","useRef","offset","offsetMiddleware","sizeMiddleware","createContext","RovingFocusGroup","useContext","useId","useCallback","useMemo","Fragment","OverlayArrow"],"mappings":"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","file":"chunk-TTSJZEL7.js","sourcesContent":["// L2 — headless primitives. Behavior + a11y, no visual styling beyond layout.\n// Foundation layer; cannot import upward (enforced by ESLint boundaries).\n\nexport * from './slot';\nexport * from './portal';\nexport * from './visuallyHidden';\nexport * from './presence';\nexport * from './directionProvider';\nexport * from './accessibleIcon';\nexport * from './focusScope';\nexport * from './dismissableLayer';\nexport * from './anchoredPositioner';\nexport * from './rovingFocusGroup';\nexport * from './collection';\nexport * from './formControlContext';\nexport * from './scrollLockProvider';\nexport * from './overlayArrow';\nexport * from './announce';\n","import {\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n type CSSProperties,\n type HTMLAttributes,\n type ReactElement,\n type Ref,\n} from 'react';\nimport { useComposedRefs } from '../../utils/composeRefs';\n\nexport interface SlotProps extends HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\ntype AnyProps = Record<string, unknown>;\n\nfunction mergeProps(slotProps: AnyProps, childProps: AnyProps): AnyProps {\n const merged: AnyProps = { ...childProps };\n for (const key of Object.keys(slotProps)) {\n const slotVal = slotProps[key];\n const childVal = childProps[key];\n if (key === 'className') {\n merged.className = [slotVal, childVal].filter(Boolean).join(' ');\n } else if (key === 'style') {\n merged.style = { ...(slotVal as CSSProperties), ...(childVal as CSSProperties) };\n } else if (/^on[A-Z]/.test(key)) {\n const slotFn = slotVal as ((...args: unknown[]) => void) | undefined;\n const childFn = childVal as ((...args: unknown[]) => void) | undefined;\n if (slotFn && childFn) {\n merged[key] = (...args: unknown[]) => {\n childFn(...args);\n slotFn(...args);\n };\n } else if (slotFn) {\n merged[key] = slotFn;\n }\n } else if (childVal === undefined) {\n merged[key] = slotVal;\n }\n }\n return merged;\n}\n\n/**\n * Polymorphic slot — renders the single child element with the parent's props\n * merged in (className concatenated, handlers chained, refs composed).\n *\n * Use to enable an `asChild` API on a component:\n * ```tsx\n * <Button asChild><a href=\"/x\">Open</a></Button>\n * ```\n */\nexport const Slot = forwardRef<HTMLElement, SlotProps>(\n ({ children, ...slotProps }, forwardedRef) => {\n const child = isValidElement(children)\n ? (children as ReactElement<AnyProps> & { ref?: Ref<HTMLElement> })\n : null;\n const composedRef = useComposedRefs(forwardedRef, child?.ref);\n if (!child) {\n return Children.count(children) > 1 ? Children.only(null) : null;\n }\n const merged = mergeProps(slotProps as AnyProps, (child.props ?? {}) as AnyProps);\n return cloneElement(child, {\n ...merged,\n ref: composedRef,\n });\n },\n);\nSlot.displayName = 'Slot';\n","import { useEffect, useState, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\n\nexport interface PortalProps {\n children: ReactNode;\n /** Container to render into. Default: `document.body`. */\n container?: HTMLElement | null;\n /** Optional named layer — sets `data-portal-name` on the wrapper. */\n name?: string;\n}\n\n/**\n * Render children into a different DOM node (default `document.body`).\n * SSR-inert — renders nothing on the server, portals in after mount on the client.\n */\nexport function Portal({ children, container, name }: PortalProps): ReactNode {\n const [mounted, setMounted] = useState(false);\n useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) return null;\n const target = container ?? document.body;\n return createPortal(<div data-portal-name={name}>{children}</div>, target);\n}\n","import { forwardRef, type HTMLAttributes } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport type VisuallyHiddenProps = HTMLAttributes<HTMLSpanElement>;\n\n/**\n * Visually hidden span — content removed from the visual layout but still\n * announced to screen readers. Use for accessible labels on icon-only\n * affordances and live-region announcements.\n */\nexport const VisuallyHidden = forwardRef<HTMLSpanElement, VisuallyHiddenProps>(\n ({ className, ...props }, ref) => (\n <span\n ref={ref}\n className={cn(\n 'absolute h-px w-px overflow-hidden whitespace-nowrap border-0 p-0',\n 'm-[-1px] [clip:rect(0_0_0_0)] [clip-path:inset(50%)]',\n className,\n )}\n {...props}\n />\n ),\n);\nVisuallyHidden.displayName = 'VisuallyHidden';\n","import {\n cloneElement,\n isValidElement,\n useEffect,\n useRef,\n useState,\n type ReactElement,\n type Ref,\n} from 'react';\nimport { useComposedRefs } from '../../utils/composeRefs';\n\nexport interface PresenceProps {\n /** Whether the content should be present. Toggle false to trigger exit. */\n isPresent: boolean;\n /** Single React element child — receives `ref` and `data-state` (\"open\" | \"closed\"). */\n children: ReactElement;\n}\n\nfunction parseTimes(value: string): number[] {\n return value.split(',').map((part) => {\n const trimmed = part.trim();\n const ms = trimmed.endsWith('ms') ? parseFloat(trimmed) : parseFloat(trimmed) * 1000;\n return Number.isFinite(ms) ? ms : 0;\n });\n}\n\n/** Longest computed transition/animation (duration + delay) in ms. */\nfunction getTotalDurationMs(node: HTMLElement): number {\n const cs = getComputedStyle(node);\n const maxOf = (durations: number[], delays: number[]) =>\n durations.reduce(\n (max, duration, i) => Math.max(max, duration + (delays[i % delays.length] ?? 0)),\n 0,\n );\n return Math.max(\n maxOf(parseTimes(cs.transitionDuration), parseTimes(cs.transitionDelay)),\n maxOf(parseTimes(cs.animationDuration), parseTimes(cs.animationDelay)),\n );\n}\n\n/**\n * Defer unmount until the child's exit animation/transition finishes.\n * Pass `isPresent={false}` to start the exit; the child stays mounted with\n * `data-state=\"closed\"` until its own `animationend`/`transitionend` fires\n * (or a computed-duration timeout as a fallback). If no exit animation\n * actually starts, the child unmounts immediately. On enter, the child\n * mounts with `data-state=\"closed\"` and flips to `\"open\"` on the next\n * frame so enter transitions play.\n */\nexport function Presence({ isPresent, children }: PresenceProps): ReactElement | null {\n const [rendered, setRendered] = useState(isPresent);\n const [dataState, setDataState] = useState<'open' | 'closed'>('closed');\n const ref = useRef<HTMLElement | null>(null);\n\n const child = isValidElement(children)\n ? (children as ReactElement<{ ref?: Ref<HTMLElement> }> & { ref?: Ref<HTMLElement> })\n : null;\n const composedRef = useComposedRefs(ref, child?.ref);\n\n // Enter — mount closed, then flip to open on the next frame (double rAF\n // so the closed styles are committed and painted first) to run transitions.\n useEffect(() => {\n if (!isPresent) return;\n if (!rendered) {\n setRendered(true);\n return;\n }\n if (dataState === 'open') return;\n let raf2 = 0;\n const raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => setDataState('open'));\n });\n return () => {\n cancelAnimationFrame(raf1);\n cancelAnimationFrame(raf2);\n };\n }, [isPresent, rendered, dataState]);\n\n // Exit — flip to closed, then unmount when the child's own exit\n // animation/transition ends; immediately if none starts within a frame\n // window; or after the computed total duration as a safety net.\n useEffect(() => {\n if (isPresent) return;\n const node = ref.current;\n if (!node) {\n setRendered(false);\n return;\n }\n let started = false;\n let timer: number | undefined;\n let raf2 = 0;\n const onStart = (event: Event) => {\n if (event.target === node) started = true;\n };\n const onEnd = (event: Event) => {\n if (event.target === node) setRendered(false);\n };\n node.addEventListener('animationstart', onStart);\n node.addEventListener('transitionrun', onStart);\n node.addEventListener('animationend', onEnd);\n node.addEventListener('transitionend', onEnd);\n // Flip the DOM synchronously so the start-detection window below is\n // deterministic; React re-renders to the same value via setDataState.\n node.setAttribute('data-state', 'closed');\n setDataState('closed');\n const raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => {\n const animating = started || (node.getAnimations?.().length ?? 0) > 0;\n if (!animating) {\n setRendered(false);\n return;\n }\n timer = window.setTimeout(() => setRendered(false), getTotalDurationMs(node) + 100);\n });\n });\n return () => {\n node.removeEventListener('animationstart', onStart);\n node.removeEventListener('transitionrun', onStart);\n node.removeEventListener('animationend', onEnd);\n node.removeEventListener('transitionend', onEnd);\n cancelAnimationFrame(raf1);\n cancelAnimationFrame(raf2);\n if (timer !== undefined) window.clearTimeout(timer);\n };\n }, [isPresent]);\n\n if (!rendered || !child) return null;\n return cloneElement(child, {\n ref: composedRef,\n 'data-state': dataState,\n } as Partial<typeof child.props>);\n}\n","import { createContext, useContext, type ReactNode } from 'react';\n\nexport type Direction = 'ltr' | 'rtl';\n\nconst DirectionContext = createContext<Direction>('ltr');\n\nexport interface DirectionProviderProps {\n dir: Direction;\n children: ReactNode;\n}\n\n/**\n * Provide reading direction to descendants. Components that mirror in RTL\n * (Tabs arrow keys, Slider, Carousel, etc.) read this via `useDirection()`.\n */\nexport function DirectionProvider({ dir, children }: DirectionProviderProps) {\n return <DirectionContext.Provider value={dir}>{children}</DirectionContext.Provider>;\n}\n\nexport function useDirection(): Direction {\n return useContext(DirectionContext);\n}\n","import { cloneElement, isValidElement, type ReactElement } from 'react';\nimport { VisuallyHidden } from '../visuallyHidden/VisuallyHidden';\n\nexport interface AccessibleIconProps {\n /** Required accessible label for the icon. */\n label: string;\n /** Single icon element — will receive `aria-hidden` so SR reads only the label. */\n children: ReactElement;\n}\n\n/**\n * Wrap an icon-only element with an accessible label. The icon is hidden\n * from assistive tech and a `VisuallyHidden` sibling provides the label.\n */\nexport function AccessibleIcon({ label, children }: AccessibleIconProps) {\n const icon = isValidElement(children)\n ? cloneElement(children as ReactElement<{ 'aria-hidden'?: boolean | string; focusable?: string }>, {\n 'aria-hidden': 'true',\n focusable: 'false',\n })\n : children;\n return (\n <>\n {icon}\n <VisuallyHidden>{label}</VisuallyHidden>\n </>\n );\n}\n","import { FocusScope as RadixFocusScope } from '@radix-ui/react-focus-scope';\n\nexport type FocusScopeProps = React.ComponentProps<typeof RadixFocusScope>;\n\n/**\n * Trap focus within children. On unmount, returns focus to the previously\n * focused element. Pass `loop` to wrap Tab navigation; `trapped` to enable\n * the trap (default true while mounted).\n *\n * Wraps `@radix-ui/react-focus-scope` — battle-tested implementation.\n */\nexport const FocusScope = RadixFocusScope;\n","import {\n forwardRef,\n useEffect,\n useRef,\n type HTMLAttributes,\n} from 'react';\nimport { useComposedRefs } from '../../utils/composeRefs';\n\ninterface LayerEntry {\n node: HTMLElement;\n onEscape?: (event: KeyboardEvent) => void;\n onOutsidePointerDown?: (event: PointerEvent) => void;\n}\n\nconst layerStack: LayerEntry[] = [];\n\nexport interface DismissableLayerProps extends HTMLAttributes<HTMLDivElement> {\n /** Called when Escape is pressed and this is the topmost layer. */\n onEscape?: (event: KeyboardEvent) => void;\n /** Called when a pointerdown lands outside this layer's DOM and this is topmost. */\n onOutsidePointerDown?: (event: PointerEvent) => void;\n /** Disable the Escape listener for this layer. */\n isEscapeDisabled?: boolean;\n /** Disable the outside-pointer-down listener for this layer. */\n isOutsideClickDisabled?: boolean;\n}\n\n/**\n * Stack-aware dismissal layer. Multiple layers may stack (modal > popover);\n * only the topmost reacts to Escape / outside click. Used as the base of\n * Modal, Drawer, Popover, Menu, HoverCard, ContextMenu.\n */\nexport const DismissableLayer = forwardRef<HTMLDivElement, DismissableLayerProps>(\n (\n { onEscape, onOutsidePointerDown, isEscapeDisabled, isOutsideClickDisabled, ...props },\n forwardedRef,\n ) => {\n const ref = useRef<HTMLDivElement | null>(null);\n\n // Keep callbacks in refs so registration runs once on mount; re-registering\n // on identity change would reorder the stack and corrupt dismissal ordering.\n const onEscapeRef = useRef(onEscape);\n const onOutsidePointerDownRef = useRef(onOutsidePointerDown);\n useEffect(() => {\n onEscapeRef.current = onEscape;\n onOutsidePointerDownRef.current = onOutsidePointerDown;\n });\n\n useEffect(() => {\n const node = ref.current;\n if (!node) return;\n const entry: LayerEntry = {\n node,\n onEscape: (event) => onEscapeRef.current?.(event),\n onOutsidePointerDown: (event) => onOutsidePointerDownRef.current?.(event),\n };\n layerStack.push(entry);\n return () => {\n const idx = layerStack.indexOf(entry);\n if (idx >= 0) layerStack.splice(idx, 1);\n };\n }, []);\n\n useEffect(() => {\n if (isEscapeDisabled) return;\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== 'Escape') return;\n const top = layerStack[layerStack.length - 1];\n if (top && top.node === ref.current) top.onEscape?.(e);\n };\n document.addEventListener('keydown', onKeyDown);\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [isEscapeDisabled]);\n\n useEffect(() => {\n if (isOutsideClickDisabled) return;\n const onPointer = (e: PointerEvent) => {\n const top = layerStack[layerStack.length - 1];\n if (!top || top.node !== ref.current) return;\n const target = e.target as Node | null;\n if (!target || ref.current?.contains(target)) return;\n top.onOutsidePointerDown?.(e);\n };\n document.addEventListener('pointerdown', onPointer, true);\n return () => document.removeEventListener('pointerdown', onPointer, true);\n }, [isOutsideClickDisabled]);\n\n const composedRef = useComposedRefs(forwardedRef, ref);\n return <div ref={composedRef} {...props} />;\n },\n);\nDismissableLayer.displayName = 'DismissableLayer';\n","import {\n autoUpdate,\n flip,\n offset as offsetMiddleware,\n shift,\n size as sizeMiddleware,\n useFloating,\n type Placement,\n} from '@floating-ui/react';\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { composeRefs } from '../../utils/composeRefs';\n\nexport interface AnchoredPositionerProps extends HTMLAttributes<HTMLDivElement> {\n /** The element the floating layer should be anchored to. */\n anchor: HTMLElement | null;\n /** Floating UI placement. Default `bottom`. */\n placement?: Placement;\n /** Distance between anchor and floating element in px. Default 8. */\n offset?: number;\n /** Render the floating element only when open. */\n isOpen?: boolean;\n children: ReactNode;\n}\n\n/**\n * Position children relative to an anchor element using Floating UI.\n * Auto-flips and shifts to stay in viewport. Use as the positioning surface\n * for Tooltip, Popover, Menu, HoverCard.\n *\n * Exposes the anchor's measured size as CSS variables on the floating\n * element, enabling consumers to size content relative to the trigger:\n *\n * style=\"--anchor-width: 240px; --anchor-height: 36px;\"\n *\n * Common pattern: `min-w-[var(--anchor-width)]` on a Select dropdown so\n * the panel never narrows below the trigger.\n */\nexport const AnchoredPositioner = forwardRef<HTMLDivElement, AnchoredPositionerProps>(\n (\n { anchor, placement = 'bottom', offset = 8, isOpen = true, children, style, ...props },\n forwardedRef,\n ) => {\n const { refs, floatingStyles } = useFloating({\n open: isOpen,\n placement,\n middleware: [\n offsetMiddleware(offset),\n flip(),\n shift({ padding: 8 }),\n sizeMiddleware({\n apply({ rects, elements }) {\n elements.floating.style.setProperty('--anchor-width', `${rects.reference.width}px`);\n elements.floating.style.setProperty(\n '--anchor-height',\n `${rects.reference.height}px`,\n );\n },\n }),\n ],\n whileElementsMounted: autoUpdate,\n elements: { reference: anchor },\n });\n\n if (!isOpen) return null;\n\n return (\n <div\n ref={composeRefs(forwardedRef, refs.setFloating)}\n style={{ ...floatingStyles, ...style }}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nAnchoredPositioner.displayName = 'AnchoredPositioner';\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 KeyboardEvent,\n type ReactNode,\n type RefObject,\n} from 'react';\nimport { useComposedRefs } from '../../utils/composeRefs';\nimport { useDirection } from '../directionProvider';\n\nexport type Orientation = 'horizontal' | 'vertical' | 'both';\n\ninterface ItemEntry {\n id: string;\n node: HTMLElement | null;\n}\n\ninterface RovingFocusContextValue {\n register: (id: string, node: HTMLElement | null) => void;\n unregister: (id: string) => void;\n focusedId: string | null;\n setFocusedId: (id: string) => void;\n onItemKeyDown: (event: KeyboardEvent, id: string) => void;\n /** True once the user has interacted with the group; reset when focus leaves. */\n interactedRef: RefObject<boolean>;\n groupRef: RefObject<HTMLDivElement | null>;\n}\n\nconst RovingFocusContext = createContext<RovingFocusContextValue | null>(null);\n\nexport interface RovingFocusGroupProps extends HTMLAttributes<HTMLDivElement> {\n orientation?: Orientation;\n canLoop?: boolean;\n children: ReactNode;\n}\n\n/**\n * Provide arrow-key navigation for a group of focusable children. Children\n * call `useRovingFocusItem()` to register and receive `tabIndex` / event\n * handlers. Used by Tabs, ToggleGroup, RadioGroup, Menu.\n */\nexport const RovingFocusGroup = forwardRef<HTMLDivElement, RovingFocusGroupProps>(\n function RovingFocusGroup(\n { orientation = 'horizontal', canLoop = true, children, ...props },\n ref,\n ) {\n const items = useRef<ItemEntry[]>([]);\n const [focusedId, setFocusedId] = useState<string | null>(null);\n const interactedRef = useRef(false);\n const groupRef = useRef<HTMLDivElement | null>(null);\n const composedRef = useComposedRefs(ref, groupRef);\n const direction = useDirection();\n\n const register = useCallback((id: string, node: HTMLElement | null) => {\n if (!items.current.some((item) => item.id === id)) {\n const entry: ItemEntry = { id, node };\n // Insert by DOM order (not mount order) so dynamically inserted\n // items navigate in visual order.\n const index = node\n ? items.current.findIndex(\n (item) =>\n item.node !== null &&\n (node.compareDocumentPosition(item.node) & Node.DOCUMENT_POSITION_FOLLOWING) !== 0,\n )\n : -1;\n if (index === -1) items.current.push(entry);\n else items.current.splice(index, 0, entry);\n }\n setFocusedId((current) => current ?? id);\n }, []);\n\n const unregister = useCallback((id: string) => {\n const idx = items.current.findIndex((item) => item.id === id);\n items.current = items.current.filter((item) => item.id !== id);\n // If the tab stop unmounts, advance to the next remaining item (or\n // the first) so the group keeps exactly one tabbable item.\n setFocusedId((current) => {\n if (current !== id) return current;\n const next = items.current[idx] ?? items.current[0];\n return next ? next.id : null;\n });\n }, []);\n\n // Reset the interaction flag when focus leaves the group so tab-stop\n // bookkeeping (focusedId updates) never steals focus back.\n useEffect(() => {\n const node = groupRef.current;\n if (!node) return;\n const onFocusOut = (event: FocusEvent) => {\n const next = event.relatedTarget as Node | null;\n if (!next || !node.contains(next)) interactedRef.current = false;\n };\n node.addEventListener('focusout', onFocusOut);\n return () => node.removeEventListener('focusout', onFocusOut);\n }, []);\n\n const onItemKeyDown = useCallback(\n (event: KeyboardEvent, id: string) => {\n const list = items.current;\n const idx = list.findIndex((item) => item.id === id);\n if (idx === -1) return;\n const isVert = orientation === 'vertical' || orientation === 'both';\n const isHoriz = orientation === 'horizontal' || orientation === 'both';\n // Horizontal arrows mirror in RTL.\n const nextHorizKey = direction === 'rtl' ? 'ArrowLeft' : 'ArrowRight';\n const prevHorizKey = direction === 'rtl' ? 'ArrowRight' : 'ArrowLeft';\n let next = idx;\n if ((event.key === nextHorizKey && isHoriz) || (event.key === 'ArrowDown' && isVert)) {\n next = idx + 1;\n if (next >= list.length) next = canLoop ? 0 : list.length - 1;\n } else if ((event.key === prevHorizKey && isHoriz) || (event.key === 'ArrowUp' && isVert)) {\n next = idx - 1;\n if (next < 0) next = canLoop ? list.length - 1 : 0;\n } else if (event.key === 'Home') {\n next = 0;\n } else if (event.key === 'End') {\n next = list.length - 1;\n } else {\n return;\n }\n event.preventDefault();\n interactedRef.current = true;\n const entry = list[next];\n if (entry) setFocusedId(entry.id);\n },\n [orientation, canLoop, direction],\n );\n\n const value = useMemo(\n () => ({\n register,\n unregister,\n focusedId,\n setFocusedId,\n onItemKeyDown,\n interactedRef,\n groupRef,\n }),\n [register, unregister, focusedId, onItemKeyDown],\n );\n\n return (\n <RovingFocusContext.Provider value={value}>\n <div ref={composedRef} role=\"group\" {...props}>\n {children}\n </div>\n </RovingFocusContext.Provider>\n );\n },\n);\n\nexport interface UseRovingFocusItemOptions {\n /** Preferred tab stop while focus is outside the group (e.g. the selected tab) — APG composite-widget pattern. */\n isActive?: boolean;\n}\n\nexport interface UseRovingFocusItemReturn {\n ref: (node: HTMLElement | null) => void;\n tabIndex: 0 | -1;\n onKeyDown: (event: KeyboardEvent) => void;\n onFocus: () => void;\n 'data-roving-focus-item': boolean;\n}\n\n/**\n * Inside a `RovingFocusGroup`, returns props to spread onto a focusable item.\n * Outside, returns inert props (tabIndex 0).\n */\nexport function useRovingFocusItem(\n options: UseRovingFocusItemOptions = {},\n): UseRovingFocusItemReturn {\n const { isActive = false } = options;\n const context = useContext(RovingFocusContext);\n const id = useId();\n const ref = useRef<HTMLElement | null>(null);\n\n const register = context?.register;\n const unregister = context?.unregister;\n useEffect(() => {\n register?.(id, ref.current);\n return () => unregister?.(id);\n }, [register, unregister, id]);\n\n // Move DOM focus only after user interaction — never on initial mount.\n const focusedId = context?.focusedId;\n const interactedRef = context?.interactedRef;\n useEffect(() => {\n if (\n focusedId === id &&\n interactedRef?.current &&\n ref.current &&\n document.activeElement !== ref.current\n ) {\n ref.current.focus();\n }\n }, [focusedId, interactedRef, id]);\n\n // Keep the active item (e.g. selected tab) as the tab stop whenever focus\n // is outside the group.\n const setFocusedId = context?.setFocusedId;\n const groupRef = context?.groupRef;\n useEffect(() => {\n if (!isActive || !setFocusedId || !groupRef) return;\n const groupNode = groupRef.current;\n if (!groupNode || !groupNode.contains(document.activeElement)) setFocusedId(id);\n const onFocusOut = (event: FocusEvent) => {\n const next = event.relatedTarget as Node | null;\n if (!next || !groupNode?.contains(next)) setFocusedId(id);\n };\n groupNode?.addEventListener('focusout', onFocusOut);\n return () => groupNode?.removeEventListener('focusout', onFocusOut);\n }, [isActive, setFocusedId, groupRef, id]);\n\n return {\n ref: (node) => {\n ref.current = node;\n },\n tabIndex: !context || context.focusedId === id ? 0 : -1,\n onKeyDown: (e) => context?.onItemKeyDown(e, id),\n onFocus: () => {\n if (!context) return;\n context.interactedRef.current = true;\n context.setFocusedId(id);\n },\n 'data-roving-focus-item': true,\n };\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useState,\n type Context,\n type ReactNode,\n} from 'react';\n\nexport interface CollectionContextValue<T> {\n items: T[];\n register: (item: T) => void;\n unregister: (item: T) => void;\n}\n\n/**\n * Factory for a typed children-registry context. Compound components\n * (Menu, Tabs, Listbox) use this so the parent can iterate ordered children\n * without prop-drilling.\n */\nexport function createCollection<T>(): {\n Provider: (props: { children: ReactNode }) => ReactNode;\n useCollection: () => CollectionContextValue<T>;\n Context: Context<CollectionContextValue<T> | null>;\n} {\n const CollectionContext = createContext<CollectionContextValue<T> | null>(null);\n\n function Provider({ children }: { children: ReactNode }) {\n const [items, setItems] = useState<T[]>([]);\n const register = useCallback((item: T) => {\n setItems((prev) => (prev.includes(item) ? prev : [...prev, item]));\n }, []);\n const unregister = useCallback((item: T) => {\n setItems((prev) => prev.filter((i) => i !== item));\n }, []);\n const value = useMemo(() => ({ items, register, unregister }), [items, register, unregister]);\n return <CollectionContext.Provider value={value}>{children}</CollectionContext.Provider>;\n }\n\n function useCollection(): CollectionContextValue<T> {\n const ctx = useContext(CollectionContext);\n if (!ctx) {\n throw new Error('useCollection must be used inside its Provider');\n }\n return ctx;\n }\n\n return { Provider, useCollection, Context: CollectionContext };\n}\n","import { createContext, useContext, type ReactNode } from 'react';\nimport { useId } from '../../hooks/useId';\n\nexport interface FormControlContextValue {\n id: string;\n labelId: string;\n helperId: string;\n errorId: string;\n isInvalid: boolean;\n isDisabled: boolean;\n isRequired: boolean;\n isReadOnly: boolean;\n}\n\nconst Context = createContext<FormControlContextValue | null>(null);\n\nexport interface FormControlProviderProps {\n /** Override the auto-generated id (also used as control's `id`). */\n id?: string;\n isInvalid?: boolean;\n isDisabled?: boolean;\n isRequired?: boolean;\n isReadOnly?: boolean;\n children: ReactNode;\n}\n\n/**\n * Wires Label ↔ control ↔ HelperText/ErrorMessage via stable IDs and shared\n * state flags. Used by `FormField` (L4) — atoms (Input, Label, etc.) read\n * via `useFormControl()` to get the right `id`/`htmlFor`/`aria-describedby`.\n */\nexport function FormControlProvider({\n id: providedId,\n isInvalid = false,\n isDisabled = false,\n isRequired = false,\n isReadOnly = false,\n children,\n}: FormControlProviderProps) {\n const generatedId = useId();\n const id = providedId ?? generatedId;\n const value: FormControlContextValue = {\n id,\n labelId: `${id}-label`,\n helperId: `${id}-helper`,\n errorId: `${id}-error`,\n isInvalid,\n isDisabled,\n isRequired,\n isReadOnly,\n };\n return <Context.Provider value={value}>{children}</Context.Provider>;\n}\n\n/**\n * Read the surrounding form-control context. Returns `null` when used\n * outside a provider — atoms gracefully degrade to standalone mode.\n */\nexport function useFormControl(): FormControlContextValue | null {\n return useContext(Context);\n}\n","import { type ReactNode } from 'react';\nimport { useScrollLock } from '../../hooks/useScrollLock';\n\nexport interface ScrollLockProviderProps {\n isEnabled?: boolean;\n children: ReactNode;\n}\n\n/**\n * Component wrapper around `useScrollLock` — handy when scroll lock should\n * follow a child's mount lifecycle (e.g. inside a Modal's portal).\n * Multiple wrappers stack; lock releases when the count reaches zero.\n */\nexport function ScrollLockProvider({ isEnabled = true, children }: ScrollLockProviderProps) {\n useScrollLock(isEnabled);\n return <>{children}</>;\n}\n","import { forwardRef, type SVGAttributes } from 'react';\n\nexport interface OverlayArrowProps extends SVGAttributes<SVGSVGElement> {\n /** Arrow width in px. Default 12. */\n width?: number;\n /** Arrow height in px. Default 6. */\n height?: number;\n}\n\n/**\n * Tip-arrow primitive for floating overlays (Tooltip, Popover, HoverCard).\n *\n * Renders a minimal SVG triangle with `fill=\"currentColor\"` — color follows\n * the consuming overlay's background via Tailwind's `text-*` utilities.\n *\n * Pair with Floating UI's `arrow()` middleware to position. The middleware\n * exposes the arrow's `x` / `y` offset on the resolved data; consumers apply\n * those as inline styles to the wrapping span.\n */\nexport const OverlayArrow = forwardRef<SVGSVGElement, OverlayArrowProps>(\n function OverlayArrow({ width = 12, height = 6, fill = 'currentColor', ...rest }, ref) {\n return (\n <svg\n ref={ref}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"none\"\n aria-hidden=\"true\"\n {...rest}\n >\n <polygon points={`0,0 ${width},0 ${width / 2},${height}`} fill={fill} />\n </svg>\n );\n },\n);\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface AnnounceProps extends HTMLAttributes<HTMLDivElement> {\n /** `polite` → `role=\"status\"`, `assertive` → `role=\"alert\"`. Default `polite`. */\n politeness?: 'polite' | 'assertive';\n children?: ReactNode;\n}\n\n/**\n * Visually-hidden ARIA live region. Children are announced by screen readers\n * whenever they change. Pair with a stable mount + swappable children for\n * lightweight transient announcements (status updates, toast messages, etc.).\n */\nexport const Announce = forwardRef<HTMLDivElement, AnnounceProps>(\n ({ politeness = 'polite', className, children, ...rest }, ref) => (\n <div\n ref={ref}\n role={politeness === 'assertive' ? 'alert' : 'status'}\n aria-live={politeness}\n aria-atomic=\"true\"\n className={cn(\n 'absolute h-px w-px overflow-hidden whitespace-nowrap border-0 p-0',\n 'm-[-1px] [clip:rect(0_0_0_0)] [clip-path:inset(50%)]',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n ),\n);\nAnnounce.displayName = 'Announce';\n"]}
@@ -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","Children","isValidElement","SpeedDialTrigger","SpeedDialAction","BackToTopButton"],"mappings":"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","file":"chunk-XN5B3B6Z.js","sourcesContent":["import { tv, Tones, 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 // Base = neutral/default tone: dark image-overlay wash + blur. Non-neutral tones resolve\n // through the shared `Tones.glass` palette via compoundVariants below (so tone + color\n // overrides apply). `backdrop-blur-md` stays here for every tone.\n glass: 'backdrop-blur-md',\n 'glass-surface': 'backdrop-blur-md border-white/10',\n },\n tone: {\n primary: '',\n neutral: '',\n danger: '',\n success: '',\n warning: '',\n },\n size: {\n // min-h/min-w floor keeps the hit-target ≥ 24×24 (WCAG 2.2 SC 2.5.8) even when\n // --ui-density-scale < 1 would otherwise shrink it below the floor. Applies to\n // square/circle xs too (the min-h sets the box height; min-w the width).\n xs: 'h-[calc(1.5rem*var(--ui-density-scale,1))] min-h-6 min-w-6 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 // neutral = the image-overlay default: fixed dark wash + light text (reads over any imagery).\n { variant: ['glass', 'glass-surface'], tone: 'neutral', class: 'bg-black/45 text-white/70 hover:bg-black/65 hover:text-white active:bg-black/75' },\n // Every other tone resolves through the shared `Tones.glass` palette (`bg-{tone}/30 text-{tone}-foreground`)\n // so `tone=\"success\"` etc. AND per-instance `color` overrides actually apply, plus a tone-matched hover/active wash.\n { variant: ['glass', 'glass-surface'], tone: 'primary', class: `${Tones.glass.primary} hover:bg-primary/45 active:bg-primary/55` },\n { variant: ['glass', 'glass-surface'], tone: 'danger', class: `${Tones.glass.danger} hover:bg-destructive/45 active:bg-destructive/55` },\n { variant: ['glass', 'glass-surface'], tone: 'success', class: `${Tones.glass.success} hover:bg-success/45 active:bg-success/55` },\n { variant: ['glass', 'glass-surface'], tone: 'warning', class: `${Tones.glass.warning} hover:bg-warning/45 active:bg-warning/55` },\n // glass-surface non-neutral tones swap the white hairline for a tone-accent border (50% alpha).\n { variant: 'glass-surface', tone: 'primary', class: 'border-primary/50' },\n { variant: 'glass-surface', tone: 'danger', class: 'border-destructive/50' },\n { variant: 'glass-surface', tone: 'success', class: 'border-success/50' },\n { variant: 'glass-surface', tone: 'warning', class: 'border-warning/50' },\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 ColorExtensions,\n composeEventHandlers,\n ButtonType,\n CssExtensions,\n HtmlElement,\n IS_DEV,\n Key,\n OptionalExtensions,\n PressExtensions,\n type BoxSizeOverrides,\n type ColorProp,\n type ColorTone,\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 { useFormControl } from '../../primitives/formControlContext/FormControlContext';\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/* `size`: preset (variant class) | number/string (square inline dims) | `{width,height,minWidth,minHeight,boxSize}`.\n Raw/object forms set inline dims only — pair with `padding` if text-bearing. */\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' | 'color'>,\n Omit<ButtonVariants, 'size'> {\n /* Preset name OR raw value OR explicit dim object — see `ButtonSize` for details. */\n size?: ButtonSize;\n\n /* Per-instance color override for the active `tone`. String → all slots derived; object → per-slot (bg/text/soft/softText/ring). Sets local CSS vars that `bg-{tone}` etc. pick up. */\n color?: ColorProp;\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`. Inherited from an enclosing `FormField` when omitted. */\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 // Cancel any pending timer, then arm only on the first pointer of a gesture — a second\n // pointer-down must not stack a second long-press timer.\n cancelLongPress();\n if (!isPressingRef.current) {\n isPressingRef.current = true;\n longPressFiredRef.current = false;\n opts.onPressStart?.(e);\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\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) {\n // Block native activation too — e.g. `type=\"submit\"` must not submit while loading.\n e.preventDefault();\n return;\n }\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 color,\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 (IS_DEV && 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 if (IS_DEV) {\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 }\n safeLongPressDelay = PressExtensions.longPressDelay.default;\n }\n\n if (\n IS_DEV &&\n (children === undefined || children === null || children === false) &&\n rest['aria-label'] === undefined &&\n rest['aria-labelledby'] === undefined\n ) {\n console.warn(\n `[${COMPONENT_NAME}] icon-only button (no text children) is missing an accessible name — pass \\`aria-label\\` or \\`aria-labelledby\\` (Button.standard.md rule 12).`,\n );\n }\n\n /* Inherit disabled-state from an enclosing `FormField` when the local prop is omitted; standalone when no context. */\n const formControl = useFormControl();\n const resolvedDisabled = isDisabled ?? formControl?.isDisabled ?? false;\n\n const skeletonActive = !!isSkeleton;\n const loadingActive = !skeletonActive && !!isLoading;\n const isInactive = loadingActive || skeletonActive || resolvedDisabled;\n\n const dataState: ButtonDataState | undefined = skeletonActive\n ? ButtonDataState.Skeleton\n : loadingActive\n ? ButtonDataState.Loading\n : resolvedDisabled\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 /* Per-instance color override → sets CSS vars on element, scoped locally. */\n const colorStyle = ColorExtensions.toneColorOverride(color, tone as ColorTone | undefined);\n if (!padStyle && !radStyle && !boxStyle && !colorStyle && !style) return undefined;\n return { ...colorStyle, ...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 ? (\n <span>{loadingText}</span>\n ) : (\n // No loadingText: keep children in sr-only so the accessible name survives (Spinner is aria-hidden).\n <span className=\"sr-only\">{children}</span>\n )}\n </>\n ) : (\n <>\n {leadingSlot}\n {children}\n {trailingSlot}\n </>\n );\n\n /* asChild → Slot merges onto the user's element; leadingSlot/trailingSlot/isLoading aren't rendered (consumer owns children). */\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(resolvedDisabled, true)}\n aria-busy={OptionalExtensions.from(loadingActive || skeletonActive, true)}\n aria-disabled={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 isAttached?: boolean;\n}\n\n/** Visually groups action-children — collapses inner radii when `isAttached`. */\nexport const ButtonGroup = forwardRef<HTMLDivElement, ButtonGroupProps>(\n ({ orientation = 'horizontal', isAttached = 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 isAttached\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, type ColorProp } 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' | 'color'>,\n ToggleButtonVariants {\n /* Controlled pressed state. */\n isPressed?: boolean;\n\n /* Uncontrolled initial state. Ignored if `isPressed` 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 /* Per-instance color override — applies to the active `tone`'s theme tokens. See `ColorProp`. */\n color?: ColorProp;\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 isPressed,\n defaultPressed,\n onPressedChange,\n onClick,\n variant = 'ghost',\n tone = 'primary',\n color,\n className,\n children,\n title,\n 'aria-label': ariaLabel,\n ...buttonProps\n },\n ref,\n ) => {\n const [value, setValue] = useControlled({\n controlled: isPressed,\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 /* Ghost baseline — ToggleButton's compound classes paint over Button's defaults via class order. tone is forwarded so per-instance `color` overrides hit the right `--color-{tone}` slot. */\n variant=\"ghost\"\n tone={tone ?? undefined}\n color={color}\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 isAttached?: 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 {\n orientation = 'horizontal',\n isAttached = true,\n className,\n children,\n type,\n value,\n defaultValue,\n onValueChange,\n ...rest\n } = props;\n const mode: Mode = type === 'multi' ? 'multi' : 'single';\n\n const [singleValue, setSingleValue] = useControlled<string | null>({\n controlled: mode === 'single' ? (value as string | null | undefined) : undefined,\n default: mode === 'single' ? (defaultValue as string | null | undefined) ?? null : null,\n onChange:\n mode === 'single' ? (onValueChange as ((value: string | null) => void) | undefined) : undefined,\n });\n const [multiValue, setMultiValue] = useControlled<string[]>({\n controlled: mode === 'multi' ? (value as string[] | undefined) : undefined,\n default: mode === 'multi' ? (defaultValue as string[] | undefined) ?? [] : [],\n onChange:\n mode === 'multi' ? (onValueChange as ((value: string[]) => void) | undefined) : 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=\"group\"\n data-orientation={orientation}\n className={cn(\n 'inline-flex',\n orientation === 'horizontal' ? 'flex-row' : 'flex-col',\n isAttached\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 {...rest}\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 // Compose with the child's own props — explicit `isPressed` wins; child's `onPressedChange` fires before the group toggle.\n return cloneElement(c, {\n isPressed: c.props.isPressed ?? isPressed(childValue),\n onPressedChange: (pressed: boolean) => {\n c.props.onPressedChange?.(pressed);\n togglePressed(childValue);\n },\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 isAttached\n className={cn(\n 'rounded-md bg-muted p-1',\n '[&>*]:!rounded-md [&>*]:!ml-0 [&>*]:!border-transparent [&>*]:!bg-transparent',\n '[&>*[data-pressed=true]]:!bg-background [&>*[data-pressed=true]]:!text-foreground [&>*[data-pressed=true]]: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 isOpen?: 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 isOpen,\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: isOpen,\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 canLoop\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 self-stretch',\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 Children,\n createContext,\n forwardRef,\n isValidElement,\n useContext,\n useMemo,\n useRef,\n type ButtonHTMLAttributes,\n type KeyboardEvent,\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 isOpen?: 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 isOpen: 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 // The trigger renders always (a closed dial must still be openable); only the\n // action items are gated behind `open`.\n const childArray = Children.toArray(children);\n const triggerChildren = childArray.filter(\n (child) => isValidElement(child) && child.type === SpeedDialTrigger,\n );\n const actionChildren = childArray.filter(\n (child) => !(isValidElement(child) && child.type === SpeedDialTrigger),\n );\n\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n if (!open || (e.key !== 'ArrowDown' && e.key !== 'ArrowUp')) return;\n const root = rootRef.current;\n if (!root) return;\n const items = Array.from(root.querySelectorAll<HTMLButtonElement>('[role=\"menuitem\"]'));\n if (items.length === 0) return;\n e.preventDefault();\n const currentIndex = items.indexOf(document.activeElement as HTMLButtonElement);\n const nextIndex =\n currentIndex === -1\n ? e.key === 'ArrowDown'\n ? 0\n : items.length - 1\n : (currentIndex + (e.key === 'ArrowDown' ? 1 : -1) + items.length) % items.length;\n items[nextIndex]?.focus();\n };\n\n return (\n <SpeedDialContext.Provider value={ctx}>\n <div\n ref={rootRef}\n data-state={open ? 'open' : 'closed'}\n onKeyDown={handleKeyDown}\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 {actionChildren}\n </ul>\n )}\n {triggerChildren}\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 role=\"none\" 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"]}