@wow-two-beta/ui 0.0.50 → 0.0.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions/button/Button.d.ts +3 -2
- package/dist/actions/button/Button.d.ts.map +1 -1
- package/dist/actions/index.js +2 -2
- package/dist/actions/toggleButton/ToggleButton.d.ts +3 -1
- package/dist/actions/toggleButton/ToggleButton.d.ts.map +1 -1
- package/dist/{chunk-23DELZVV.js → chunk-2YI5Y2U3.js} +3 -3
- package/dist/{chunk-23DELZVV.js.map → chunk-2YI5Y2U3.js.map} +1 -1
- package/dist/{chunk-VTVWJBOP.js → chunk-5QGU5FNP.js} +45 -33
- package/dist/chunk-5QGU5FNP.js.map +1 -0
- package/dist/{chunk-ZVOPRSED.js → chunk-EZ2NOHIL.js} +4 -4
- package/dist/{chunk-ZVOPRSED.js.map → chunk-EZ2NOHIL.js.map} +1 -1
- package/dist/{chunk-BEOOTUFV.js → chunk-FIZJCXNN.js} +4 -4
- package/dist/{chunk-BEOOTUFV.js.map → chunk-FIZJCXNN.js.map} +1 -1
- package/dist/{chunk-CWT5VEMU.js → chunk-MN46ESLR.js} +32 -23
- package/dist/chunk-MN46ESLR.js.map +1 -0
- package/dist/{chunk-BUWJN6SN.js → chunk-SA7OVNKQ.js} +10 -6
- package/dist/chunk-SA7OVNKQ.js.map +1 -0
- package/dist/{chunk-WU5JMO3N.js → chunk-TZETHHW5.js} +57 -39
- package/dist/chunk-TZETHHW5.js.map +1 -0
- package/dist/{chunk-3YNJTBYF.js → chunk-UJDAJMFJ.js} +7 -5
- package/dist/chunk-UJDAJMFJ.js.map +1 -0
- package/dist/{chunk-2TKPRR4X.js → chunk-V5RYX33D.js} +3 -3
- package/dist/{chunk-2TKPRR4X.js.map → chunk-V5RYX33D.js.map} +1 -1
- package/dist/{chunk-2CDU2ZKL.js → chunk-X5INLQTJ.js} +3 -3
- package/dist/{chunk-2CDU2ZKL.js.map → chunk-X5INLQTJ.js.map} +1 -1
- package/dist/{chunk-L235NITI.js → chunk-X7SQOMHC.js} +4 -4
- package/dist/chunk-X7SQOMHC.js.map +1 -0
- package/dist/display/index.js +3 -3
- package/dist/feedback/index.js +3 -3
- package/dist/forms/checkbox/Checkbox.d.ts +3 -2
- package/dist/forms/checkbox/Checkbox.d.ts.map +1 -1
- package/dist/forms/combobox/Combobox.d.ts.map +1 -1
- package/dist/forms/index.js +5 -5
- package/dist/forms/listbox/Listbox.d.ts +15 -8
- package/dist/forms/listbox/Listbox.d.ts.map +1 -1
- package/dist/forms/select/Select.d.ts +33 -26
- package/dist/forms/select/Select.d.ts.map +1 -1
- package/dist/icons/index.js +1 -1
- package/dist/index.js +11 -11
- package/dist/layout/index.js +3 -3
- package/dist/layout/surface/Surface.d.ts +4 -10
- package/dist/layout/surface/Surface.d.ts.map +1 -1
- package/dist/nav/index.js +3 -3
- package/dist/nav/navigationMenu/NavigationMenu.d.ts.map +1 -1
- package/dist/overlays/hoverCard/HoverCard.d.ts.map +1 -1
- package/dist/overlays/index.js +2 -2
- package/dist/overlays/popover/Popover.d.ts +2 -8
- package/dist/overlays/popover/Popover.d.ts.map +1 -1
- package/dist/utils/ColorExtensions.d.ts +39 -0
- package/dist/utils/ColorExtensions.d.ts.map +1 -0
- package/dist/utils/Equality.d.ts +9 -24
- package/dist/utils/Equality.d.ts.map +1 -1
- package/dist/utils/Layers.d.ts +16 -14
- package/dist/utils/Layers.d.ts.map +1 -1
- package/dist/utils/SurfaceStyles.d.ts +7 -0
- package/dist/utils/SurfaceStyles.d.ts.map +1 -1
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-3YNJTBYF.js.map +0 -1
- package/dist/chunk-BUWJN6SN.js.map +0 -1
- package/dist/chunk-CWT5VEMU.js.map +0 -1
- package/dist/chunk-L235NITI.js.map +0 -1
- package/dist/chunk-VTVWJBOP.js.map +0 -1
- package/dist/chunk-WU5JMO3N.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/actions/button/Button.variants.ts","../src/actions/button/Button.tsx","../src/actions/link/Link.variants.ts","../src/actions/link/Link.tsx","../src/actions/buttonGroup/ButtonGroup.tsx","../src/actions/toggleButton/ToggleButton.variants.ts","../src/actions/toggleButton/ToggleButton.tsx","../src/actions/toggleButtonGroup/ToggleButtonGroup.tsx","../src/actions/segmentedControl/SegmentedControl.tsx","../src/actions/fab/FAB.variants.ts","../src/actions/fab/FAB.tsx","../src/actions/copyButton/CopyButton.tsx","../src/actions/disclosureButton/DisclosureButton.tsx","../src/actions/toolbar/Toolbar.tsx","../src/actions/speedDial/SpeedDial.tsx","../src/actions/backToTopButton/BackToTopButton.tsx"],"names":["forwardRef","jsx","COMPONENT_NAME","useRef","useEffect","jsxs","Toolbar","ToolbarButton","ToolbarLink","createContext","useContext","SpeedDialTrigger","SpeedDialAction","BackToTopButton"],"mappings":"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","file":"chunk-SA7OVNKQ.js","sourcesContent":["import { tv, type VariantProps } from '../../utils';\n\n/** Button visual surface — see Button.standard.md + Button.spec.md. */\nexport const buttonVariants = tv({\n base: [\n // layout\n 'inline-flex items-center justify-center gap-2',\n // typography\n 'font-medium align-middle',\n // borders (forced-colors fallback)\n 'border border-transparent',\n 'forced-colors:border-[ButtonBorder]',\n // transitions (color only)\n 'transition-colors duration-150 ease-out',\n 'motion-reduce:transition-none',\n // focus\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n // disabled (native attr handles click-blocking; pointer-events-none would\n // suppress the cursor visual, so we don't add it here)\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n // skeleton state — wins over everything\n 'data-[state=skeleton]:!bg-muted data-[state=skeleton]:!text-transparent data-[state=skeleton]:!border-transparent data-[state=skeleton]:!cursor-default data-[state=skeleton]:!pointer-events-none data-[state=skeleton]:animate-pulse',\n 'data-[state=skeleton]:[&>*]:!invisible',\n ],\n variants: {\n variant: {\n solid: '',\n soft: '',\n surface: '',\n outline: 'bg-transparent',\n ghost: 'bg-transparent',\n link: 'bg-transparent !h-auto !p-0 !rounded-none underline-offset-4 hover:underline focus-visible:ring-offset-0',\n glass:\n 'bg-black/45 text-white/70 backdrop-blur-md hover:bg-black/65 hover:text-white active:bg-black/75',\n 'glass-surface':\n 'bg-black/45 text-white/70 backdrop-blur-md hover:bg-black/65 hover:text-white active:bg-black/75 border-white/10',\n },\n tone: {\n primary: '',\n neutral: '',\n danger: '',\n success: '',\n warning: '',\n },\n size: {\n xs: 'h-[calc(1.5rem*var(--ui-density-scale,1))] px-[calc(0.5rem*var(--ui-density-scale,1))] text-xs rounded-sm gap-1',\n sm: 'h-[calc(2rem*var(--ui-density-scale,1))] px-[calc(0.75rem*var(--ui-density-scale,1))] text-sm rounded-md gap-1.5',\n md: 'h-[calc(2.5rem*var(--ui-density-scale,1))] px-[calc(1rem*var(--ui-density-scale,1))] text-sm rounded-md gap-2',\n lg: 'h-[calc(3rem*var(--ui-density-scale,1))] px-[calc(1.5rem*var(--ui-density-scale,1))] text-base rounded-lg gap-2',\n xl: 'h-[calc(3.5rem*var(--ui-density-scale,1))] px-[calc(2rem*var(--ui-density-scale,1))] text-base rounded-lg gap-2.5',\n },\n shape: {\n default: '',\n square: 'aspect-square !px-0',\n circle: 'aspect-square !px-0 !rounded-full',\n },\n fullWidth: {\n true: 'w-full',\n false: '',\n },\n wrap: {\n true: 'whitespace-normal text-left',\n false: 'whitespace-nowrap text-ellipsis overflow-hidden',\n },\n },\n compoundVariants: [\n // === SOLID × tone ===\n { variant: 'solid', tone: 'primary', class: 'bg-primary text-primary-foreground hover:bg-primary/90 active:bg-primary/95' },\n { variant: 'solid', tone: 'neutral', class: 'bg-muted text-foreground hover:bg-muted/80 active:bg-muted/85' },\n { variant: 'solid', tone: 'danger', class: 'bg-destructive text-destructive-foreground hover:bg-destructive/90 active:bg-destructive/95' },\n { variant: 'solid', tone: 'success', class: 'bg-success text-success-foreground hover:bg-success/90 active:bg-success/95' },\n { variant: 'solid', tone: 'warning', class: 'bg-warning text-warning-foreground hover:bg-warning/90 active:bg-warning/95' },\n\n // === SOFT × tone ===\n { variant: 'soft', tone: 'primary', class: 'bg-primary-soft text-primary-soft-foreground hover:bg-primary-soft/80 active:bg-primary-soft/85' },\n { variant: 'soft', tone: 'neutral', class: 'bg-muted/60 text-foreground hover:bg-muted/80 active:bg-muted/85' },\n { variant: 'soft', tone: 'danger', class: 'bg-destructive-soft text-destructive-soft-foreground hover:bg-destructive-soft/80 active:bg-destructive-soft/85' },\n { variant: 'soft', tone: 'success', class: 'bg-success-soft text-success-soft-foreground hover:bg-success-soft/80 active:bg-success-soft/85' },\n { variant: 'soft', tone: 'warning', class: 'bg-warning-soft text-warning-soft-foreground hover:bg-warning-soft/80 active:bg-warning-soft/85' },\n\n // === SURFACE × tone (subtle tinted bg + visible tone-colored border) ===\n { variant: 'surface', tone: 'primary', class: 'bg-primary/5 border-primary/40 text-primary hover:bg-primary/10 active:bg-primary/15' },\n { variant: 'surface', tone: 'neutral', class: 'bg-muted/30 border-border-strong text-foreground hover:bg-muted/50 active:bg-muted/70' },\n { variant: 'surface', tone: 'danger', class: 'bg-destructive/5 border-destructive/40 text-destructive hover:bg-destructive/10 active:bg-destructive/15' },\n { variant: 'surface', tone: 'success', class: 'bg-success/5 border-success/40 text-success hover:bg-success/10 active:bg-success/15' },\n { variant: 'surface', tone: 'warning', class: 'bg-warning/10 border-warning/40 text-warning hover:bg-warning/15 active:bg-warning/20' },\n\n // === OUTLINE × tone ===\n { variant: 'outline', tone: 'primary', class: 'border-primary/50 text-primary hover:bg-primary/10 active:bg-primary/15' },\n { variant: 'outline', tone: 'neutral', class: 'border-border-strong text-foreground hover:bg-muted/50 active:bg-muted/70' },\n { variant: 'outline', tone: 'danger', class: 'border-destructive/50 text-destructive hover:bg-destructive/10 active:bg-destructive/15' },\n { variant: 'outline', tone: 'success', class: 'border-success/50 text-success hover:bg-success/10 active:bg-success/15' },\n { variant: 'outline', tone: 'warning', class: 'border-warning/60 text-warning hover:bg-warning/10 active:bg-warning/15' },\n\n // === GHOST × tone ===\n { variant: 'ghost', tone: 'primary', class: 'text-primary hover:bg-primary/10 active:bg-primary/15' },\n { variant: 'ghost', tone: 'neutral', class: 'text-foreground hover:bg-foreground/10 active:bg-foreground/15' },\n { variant: 'ghost', tone: 'danger', class: 'text-destructive hover:bg-destructive/10 active:bg-destructive/15' },\n { variant: 'ghost', tone: 'success', class: 'text-success hover:bg-success/10 active:bg-success/15' },\n { variant: 'ghost', tone: 'warning', class: 'text-warning hover:bg-warning/10 active:bg-warning/15' },\n\n // === LINK × tone (h/padding/radius cleared by variant) ===\n { variant: 'link', tone: 'primary', class: 'text-primary' },\n { variant: 'link', tone: 'neutral', class: 'text-foreground' },\n { variant: 'link', tone: 'danger', class: 'text-destructive' },\n { variant: 'link', tone: 'success', class: 'text-success' },\n { variant: 'link', tone: 'warning', class: 'text-warning' },\n\n // === GLASS / GLASS-SURFACE × tone ===\n // Only `danger` is wired today (matches old image-overlay convention: red on hover).\n // Other tones are inert — base dark glass renders identically across tones.\n { variant: 'glass', tone: 'danger', class: 'hover:bg-destructive/65 active:bg-destructive/75' },\n { variant: 'glass-surface', tone: 'danger', class: 'hover:bg-destructive/65 active:bg-destructive/75' },\n ],\n defaultVariants: {\n variant: 'solid',\n tone: 'primary',\n size: 'md',\n shape: 'default',\n fullWidth: false,\n wrap: false,\n },\n});\n\nexport type ButtonVariants = VariantProps<typeof buttonVariants>;\n","import {\n forwardRef,\n useEffect,\n useRef,\n type ButtonHTMLAttributes,\n type CSSProperties,\n type KeyboardEvent,\n type KeyboardEventHandler,\n type MouseEvent,\n type MouseEventHandler,\n type PointerEvent,\n type PointerEventHandler,\n type ReactNode,\n} from 'react';\nimport {\n cn,\n ColorExtensions,\n composeEventHandlers,\n ButtonType,\n CssExtensions,\n HtmlElement,\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 { Spinner } from '../../icons';\nimport { useDebounceHandler } from '../../hooks';\nimport { buttonVariants, type ButtonVariants } from './Button.variants';\n\nconst COMPONENT_NAME = 'Button';\n\n/* Named size presets — used for variant lookup. Any other string/number/object flows to box-overrides. Subset of the canonical `SizePreset` vocabulary. */\ntype ButtonSizePreset = Extract<SizePreset, 'xs' | 'sm' | 'md' | 'lg' | 'xl'>;\nconst BUTTON_SIZE_PRESETS: ReadonlySet<string> = new Set<ButtonSizePreset>(['xs', 'sm', 'md', 'lg', 'xl']);\n\n/**\n * Union accepted by Button's `size` prop:\n * - preset: `'xs' | 'sm' | 'md' | 'lg' | 'xl'` — applies the variant class (height + padding + font)\n * - `number`: raw px, applied to both width and height (square shorthand)\n * - `string` (non-preset): any CSS unit (`'2rem'`, `'24px'`), applied to both width and height\n * - object: `{ width?, height?, minWidth?, minHeight?, boxSize? }` — explicit per-dim overrides\n *\n * Raw or object forms set inline dimensions only — no padding/font baseline. Combine with `padding` if text-bearing.\n */\nexport type ButtonSize = SizeUnion<ButtonSizePreset>;\n\n/* Observable state surfaced via the `data-state` DOM attribute. */\nconst ButtonDataState = {\n Loading: 'loading',\n Skeleton: 'skeleton',\n Disabled: 'disabled',\n} as const;\ntype ButtonDataState = (typeof ButtonDataState)[keyof typeof ButtonDataState];\n\nexport interface ButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'type' | 'disabled' | '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. Single string (`'#3b82f6'`, `'oklch(...)'`, etc.) → lib derives all slots. Object → override individual slots (bg/text/soft/softText/ring). Overrides apply to the active `tone`'s theme tokens locally — every Tailwind utility (`bg-{tone}`, `hover:bg-{tone}/X`, etc.) picks them up automatically. */\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`. */\n isDisabled?: boolean;\n\n /* Stretches to fill container width. */\n isFullWidth?: boolean;\n\n /* Allows multi-line label wrap; default truncates to single line. */\n isMultiline?: boolean;\n\n /* Render as the single child element via Slot. */\n asChild?: boolean;\n\n /* Independent padding override (preset token or `{x, y}` object). */\n padding?: PaddingProp;\n\n /* Independent radius override (preset token or raw value). */\n radius?: RadiusProp;\n\n /* Explicit width override. Number = px; string = any CSS unit. */\n width?: SizeValue;\n\n /* Explicit height override. Number = px; string = any CSS unit. */\n height?: SizeValue;\n\n /* Reserve a min width so the button doesn't reflow when its label morphs. */\n minWidth?: SizeValue;\n\n /* Reserve a min height — symmetric with `minWidth`. */\n minHeight?: SizeValue;\n\n /* Square shorthand — applied as fallback for both `width` and `height`. Explicit `width`/`height` win when both are set. Pairs with `shape=\"square\"` / `shape=\"circle\"` for icon buttons. */\n boxSize?: SizeValue;\n\n /* Default `ButtonType.Button` — NOT browser-default `'submit'`. */\n type?: ButtonType;\n\n /* Fires on pointer-down OR Space/Enter keydown (first event in a gesture). */\n onPressStart?: (event: PressEvent<HTMLButtonElement>) => void;\n\n /* Fires on pointer-up/cancel OR Space/Enter keyup. */\n onPressEnd?: (event: PressEvent<HTMLButtonElement>) => void;\n\n /* Fires when the pointer is held for `longPressDelay` ms. Suppresses the next click. */\n onLongPress?: (event: PointerEvent<HTMLButtonElement>) => void;\n\n /* Long-press duration (ms). Default 500. Out-of-range values trigger a dev warning. */\n longPressDelay?: number;\n\n /* Throttle clicks within window — first wins; subsequent swallowed via `preventDefault()`. */\n debounceMs?: number;\n}\n\ninterface UseButtonInteractivityOptions {\n isInactive: boolean;\n isLoading: boolean;\n isSkeleton: boolean;\n longPressDelay: number;\n debounceMs?: number;\n onClick?: MouseEventHandler<HTMLButtonElement>;\n onPressStart?: (event: PressEvent<HTMLButtonElement>) => void;\n onPressEnd?: (event: PressEvent<HTMLButtonElement>) => void;\n onLongPress?: (event: PointerEvent<HTMLButtonElement>) => void;\n onPointerDown?: PointerEventHandler<HTMLButtonElement>;\n onPointerUp?: PointerEventHandler<HTMLButtonElement>;\n onPointerCancel?: PointerEventHandler<HTMLButtonElement>;\n onPointerLeave?: PointerEventHandler<HTMLButtonElement>;\n onKeyDown?: KeyboardEventHandler<HTMLButtonElement>;\n onKeyUp?: KeyboardEventHandler<HTMLButtonElement>;\n}\n\n/* Press / long-press / debounce wiring. Returns the 6 DOM event handlers for spread onto the element. */\nfunction useButtonInteractivity(opts: UseButtonInteractivityOptions) {\n const isPressingRef = useRef(false);\n const longPressTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const longPressFiredRef = useRef(false);\n\n useEffect(\n () => () => {\n if (longPressTimerRef.current !== undefined) {\n clearTimeout(longPressTimerRef.current);\n }\n },\n [],\n );\n\n const cancelLongPress = () => {\n if (longPressTimerRef.current !== undefined) {\n clearTimeout(longPressTimerRef.current);\n longPressTimerRef.current = undefined;\n }\n };\n\n const endPress = (e: PressEvent<HTMLButtonElement>) => {\n if (isPressingRef.current) {\n isPressingRef.current = false;\n opts.onPressEnd?.(e);\n }\n };\n\n const handlePointerDown = (e: PointerEvent<HTMLButtonElement>) => {\n if (opts.isInactive) return;\n if (!isPressingRef.current) {\n isPressingRef.current = true;\n longPressFiredRef.current = false;\n opts.onPressStart?.(e);\n }\n if (opts.onLongPress) {\n longPressTimerRef.current = setTimeout(() => {\n longPressFiredRef.current = true;\n opts.onLongPress?.(e);\n longPressTimerRef.current = undefined;\n }, opts.longPressDelay);\n }\n };\n\n const handlePointerUp = (e: PointerEvent<HTMLButtonElement>) => {\n cancelLongPress();\n endPress(e);\n };\n\n const handlePointerCancel = (e: PointerEvent<HTMLButtonElement>) => {\n cancelLongPress();\n endPress(e);\n };\n\n const handlePointerLeave = () => {\n // Pointer leaving cancels a pending long-press but does NOT end the press itself —\n // pointer-up/cancel handlers do that. Matches React Aria.\n cancelLongPress();\n };\n\n const isActivationKey = (e: KeyboardEvent<HTMLButtonElement>) =>\n e.key === Key.Space || e.key === Key.Enter;\n\n const handleKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (opts.isInactive) return;\n if (isActivationKey(e) && !e.repeat && !isPressingRef.current) {\n isPressingRef.current = true;\n longPressFiredRef.current = false;\n opts.onPressStart?.(e);\n }\n };\n\n const handleKeyUp = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (isActivationKey(e) && isPressingRef.current) {\n isPressingRef.current = false;\n opts.onPressEnd?.(e);\n }\n };\n\n // Long-press suppression happens BEFORE this — a suppressed click does NOT advance the throttle window.\n const debouncedOnClick = useDebounceHandler(opts.onClick, opts.debounceMs);\n\n const handleClick = (e: MouseEvent<HTMLButtonElement>) => {\n if (opts.isLoading || opts.isSkeleton) return;\n if (longPressFiredRef.current) {\n longPressFiredRef.current = false;\n e.preventDefault();\n return;\n }\n debouncedOnClick(e);\n };\n\n return {\n onClick: handleClick,\n onPointerDown: composeEventHandlers(opts.onPointerDown, handlePointerDown),\n onPointerUp: composeEventHandlers(opts.onPointerUp, handlePointerUp),\n onPointerCancel: composeEventHandlers(opts.onPointerCancel, handlePointerCancel),\n onPointerLeave: composeEventHandlers(opts.onPointerLeave, handlePointerLeave),\n onKeyDown: composeEventHandlers(opts.onKeyDown, handleKeyDown),\n onKeyUp: composeEventHandlers(opts.onKeyUp, handleKeyUp),\n };\n}\n\n/* Renders an action button — for text and/or icon content. */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n style,\n variant,\n tone,\n size,\n shape,\n isFullWidth,\n isMultiline,\n padding,\n radius,\n width,\n height,\n minWidth,\n minHeight,\n boxSize,\n leadingSlot,\n trailingSlot,\n loadingSlot,\n isLoading,\n loadingText,\n isSkeleton,\n isDisabled,\n asChild,\n 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 (isLoading && isSkeleton) {\n console.warn(\n `[${COMPONENT_NAME}] \\`isLoading\\` and \\`isSkeleton\\` are mutually exclusive — \\`isSkeleton\\` takes precedence.`,\n );\n }\n\n let safeLongPressDelay = longPressDelay;\n if (\n longPressDelay < PressExtensions.longPressDelay.min ||\n longPressDelay > PressExtensions.longPressDelay.max\n ) {\n console.warn(\n `[${COMPONENT_NAME}] longPressDelay=${longPressDelay}ms is outside reasonable range (${PressExtensions.longPressDelay.min}–${PressExtensions.longPressDelay.max}ms). Falling back to ${PressExtensions.longPressDelay.default}ms.`,\n );\n safeLongPressDelay = PressExtensions.longPressDelay.default;\n }\n\n const skeletonActive = !!isSkeleton;\n const loadingActive = !skeletonActive && !!isLoading;\n const isInactive = loadingActive || skeletonActive || !!isDisabled;\n\n const dataState: ButtonDataState | undefined = skeletonActive\n ? ButtonDataState.Skeleton\n : loadingActive\n ? ButtonDataState.Loading\n : isDisabled\n ? ButtonDataState.Disabled\n : undefined;\n\n const Comp = asChild ? Slot : HtmlElement.Button;\n\n /* Parse the union-typed `size` prop into preset (for variant lookup) + box overrides (for inline dims). */\n const { preset: sizePreset, box: sizeBox } = CssExtensions.parseSizeUnion<ButtonSizePreset>(\n size,\n BUTTON_SIZE_PRESETS,\n );\n\n const overrideStyle: CSSProperties | undefined = (() => {\n const padStyle = CssExtensions.resolvePadding(padding);\n const radStyle = CssExtensions.resolveRadius(radius);\n /* Box overrides — `size` (object form or raw value) is the base; flat width/height/minWidth/minHeight/boxSize props win when both are set. */\n const composedBox: BoxSizeOverrides = {\n ...(sizeBox ?? {}),\n ...(width !== undefined ? { width } : {}),\n ...(height !== undefined ? { height } : {}),\n ...(minWidth !== undefined ? { minWidth } : {}),\n ...(minHeight !== undefined ? { minHeight } : {}),\n ...(boxSize !== undefined ? { boxSize } : {}),\n };\n const boxStyle = CssExtensions.resolveBoxSize(composedBox);\n /* 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 && <span>{loadingText}</span>}\n </>\n ) : (\n <>\n {leadingSlot}\n {children}\n {trailingSlot}\n </>\n );\n\n /* asChild bypasses the fragment-wrapped content so Slot can merge className/style onto the user's element. leadingSlot/trailingSlot/isLoading rendering aren't supported in asChild mode — consumer owns the rendered children entirely. */\n const renderedContent = asChild ? children : content;\n\n return (\n <Comp\n ref={ref}\n type={asChild ? undefined : type}\n className={cn(\n buttonVariants({\n variant,\n tone,\n size: sizePreset,\n shape,\n fullWidth: isFullWidth,\n wrap: isMultiline,\n }),\n className,\n )}\n style={overrideStyle}\n disabled={OptionalExtensions.from(isDisabled, true)}\n aria-busy={OptionalExtensions.from(loadingActive || skeletonActive, true)}\n tabIndex={OptionalExtensions.from(skeletonActive, -1)}\n data-state={dataState}\n {...eventHandlers}\n {...rest}\n >\n {renderedContent}\n </Comp>\n );\n },\n);\n\nButton.displayName = COMPONENT_NAME;\n","import { tv, type VariantProps } from '../../utils';\n\nexport const linkVariants = tv({\n base: 'inline-flex items-center transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm',\n variants: {\n variant: {\n default: 'text-primary hover:text-primary/85 hover:underline',\n subtle: 'text-foreground hover:underline',\n muted: 'text-muted-foreground hover:text-foreground hover:underline',\n inherit: 'text-current underline-offset-2 hover:underline',\n },\n size: {\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n});\n\nexport type LinkVariants = VariantProps<typeof linkVariants>;\n","import { forwardRef, type AnchorHTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { Slot } from '../../primitives/slot/Slot';\nimport { linkVariants, type LinkVariants } from './Link.variants';\n\nexport interface LinkProps extends AnchorHTMLAttributes<HTMLAnchorElement>, LinkVariants {\n /** When true, render the child element as the link instead of an `<a>`.\n * Use for router `<Link>` components from Next.js / React Router. */\n asChild?: boolean;\n}\n\n/** Anchor with consistent focus/hover styling — `asChild` swaps in router links. */\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'a';\n return (\n <Comp\n ref={ref}\n className={cn(linkVariants({ variant, size }), className)}\n {...(props as AnchorHTMLAttributes<HTMLAnchorElement>)}\n />\n );\n },\n);\nLink.displayName = 'Link';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\n\nexport interface ButtonGroupProps extends ComponentPropsWithoutRef<'div'> {\n /** Visual orientation. Default `horizontal`. */\n orientation?: 'horizontal' | 'vertical';\n /** Group children with collapsed inner radii (connected look). Default `true`. */\n attached?: boolean;\n}\n\n/** Visually groups action-children — collapses inner radii when `attached`. */\nexport const ButtonGroup = forwardRef<HTMLDivElement, ButtonGroupProps>(\n ({ orientation = 'horizontal', attached = true, className, ...props }, ref) => (\n <div\n ref={ref}\n role=\"group\"\n data-orientation={orientation}\n className={cn(\n 'inline-flex',\n orientation === 'horizontal' ? 'flex-row' : 'flex-col',\n attached\n ? orientation === 'horizontal'\n ? '[&>*]:rounded-none [&>*:first-child]:rounded-l-md [&>*:last-child]:rounded-r-md [&>*:not(:first-child)]:-ml-px'\n : '[&>*]:rounded-none [&>*:first-child]:rounded-t-md [&>*:last-child]:rounded-b-md [&>*:not(:first-child)]:-mt-px'\n : 'gap-2',\n className,\n )}\n {...props}\n />\n ),\n);\nButtonGroup.displayName = 'ButtonGroup';\n","import { tv, type VariantProps } from '../../utils';\n\n/* Variant × tone matrix for ToggleButton's press-state appearance. Applied on top of Button (variant='ghost' tone='neutral' baseline). Press state is keyed off `data-pressed=\"true\"` — distinct from Button's `data-state` (loading/skeleton/disabled). */\nexport const toggleButtonVariants = tv({\n base: '',\n variants: {\n variant: {\n ghost: '',\n soft: '',\n outline: 'border',\n solid: 'border',\n glass: 'border border-transparent backdrop-blur-md',\n 'glass-surface': 'border backdrop-blur-md',\n },\n tone: {\n primary: '',\n neutral: '',\n danger: '',\n success: '',\n warning: '',\n },\n },\n compoundVariants: [\n // === GHOST × tone — text color only, transparent bg ===\n { variant: 'ghost', tone: 'primary', class: 'text-foreground/50 data-[pressed=true]:text-primary' },\n { variant: 'ghost', tone: 'neutral', class: 'text-foreground/50 data-[pressed=true]:text-foreground' },\n { variant: 'ghost', tone: 'danger', class: 'text-foreground/50 data-[pressed=true]:text-destructive' },\n { variant: 'ghost', tone: 'success', class: 'text-foreground/50 data-[pressed=true]:text-success' },\n { variant: 'ghost', tone: 'warning', class: 'text-foreground/50 data-[pressed=true]:text-warning' },\n\n // === SOFT × tone — pressed gets tone-soft bg ===\n { variant: 'soft', tone: 'primary', class: 'text-foreground/70 data-[pressed=true]:bg-primary-soft data-[pressed=true]:text-primary-soft-foreground' },\n { variant: 'soft', tone: 'neutral', class: 'text-foreground/70 data-[pressed=true]:bg-muted data-[pressed=true]:text-foreground' },\n { variant: 'soft', tone: 'danger', class: 'text-foreground/70 data-[pressed=true]:bg-destructive-soft data-[pressed=true]:text-destructive-soft-foreground' },\n { variant: 'soft', tone: 'success', class: 'text-foreground/70 data-[pressed=true]:bg-success-soft data-[pressed=true]:text-success-soft-foreground' },\n { variant: 'soft', tone: 'warning', class: 'text-foreground/70 data-[pressed=true]:bg-warning-soft data-[pressed=true]:text-warning-soft-foreground' },\n\n // === OUTLINE × tone — pressed swaps to tone border + tone text ===\n { variant: 'outline', tone: 'primary', class: 'border-input text-foreground/70 data-[pressed=true]:border-primary data-[pressed=true]:text-primary' },\n { variant: 'outline', tone: 'neutral', class: 'border-input text-foreground/70 data-[pressed=true]:border-foreground data-[pressed=true]:text-foreground' },\n { variant: 'outline', tone: 'danger', class: 'border-input text-foreground/70 data-[pressed=true]:border-destructive data-[pressed=true]:text-destructive' },\n { variant: 'outline', tone: 'success', class: 'border-input text-foreground/70 data-[pressed=true]:border-success data-[pressed=true]:text-success' },\n { variant: 'outline', tone: 'warning', class: 'border-input text-foreground/70 data-[pressed=true]:border-warning data-[pressed=true]:text-warning' },\n\n // === SOLID × tone — pressed fills with tone ===\n { variant: 'solid', tone: 'primary', class: 'border-input bg-background text-foreground/70 data-[pressed=true]:bg-primary data-[pressed=true]:border-primary data-[pressed=true]:text-primary-foreground' },\n { variant: 'solid', tone: 'neutral', class: 'border-input bg-background text-foreground/70 data-[pressed=true]:bg-foreground data-[pressed=true]:border-foreground data-[pressed=true]:text-background' },\n { variant: 'solid', tone: 'danger', class: 'border-input bg-background text-foreground/70 data-[pressed=true]:bg-destructive data-[pressed=true]:border-destructive data-[pressed=true]:text-destructive-foreground' },\n { variant: 'solid', tone: 'success', class: 'border-input bg-background text-foreground/70 data-[pressed=true]:bg-success data-[pressed=true]:border-success data-[pressed=true]:text-success-foreground' },\n { variant: 'solid', tone: 'warning', class: 'border-input bg-background text-foreground/70 data-[pressed=true]:bg-warning data-[pressed=true]:border-warning data-[pressed=true]:text-warning-foreground' },\n\n // === GLASS × tone — dark glass; pressed darkens slightly + tone-tinted text on tone variants ===\n { variant: 'glass', tone: 'primary', class: 'bg-black/45 text-white/60 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-white' },\n { variant: 'glass', tone: 'neutral', class: 'bg-black/45 text-white/60 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-white' },\n { variant: 'glass', tone: 'danger', class: 'bg-black/45 text-white/60 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-destructive' },\n { variant: 'glass', tone: 'success', class: 'bg-black/45 text-white/60 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-success' },\n { variant: 'glass', tone: 'warning', class: 'bg-black/45 text-white/60 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-warning' },\n\n // === GLASS-SURFACE × tone — same as glass + visible border emphasis on press ===\n { variant: 'glass-surface', tone: 'primary', class: 'bg-black/45 text-white/60 border-white/10 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-white data-[pressed=true]:border-white/40' },\n { variant: 'glass-surface', tone: 'neutral', class: 'bg-black/45 text-white/60 border-white/10 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-white data-[pressed=true]:border-white/40' },\n { variant: 'glass-surface', tone: 'danger', class: 'bg-black/45 text-white/60 border-white/10 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-destructive data-[pressed=true]:border-destructive/60' },\n { variant: 'glass-surface', tone: 'success', class: 'bg-black/45 text-white/60 border-white/10 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-success data-[pressed=true]:border-success/60' },\n { variant: 'glass-surface', tone: 'warning', class: 'bg-black/45 text-white/60 border-white/10 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-warning data-[pressed=true]:border-warning/60' },\n ],\n defaultVariants: {\n variant: 'ghost',\n tone: 'primary',\n },\n});\n\nexport type ToggleButtonVariants = VariantProps<typeof toggleButtonVariants>;\n","import { forwardRef, type ReactNode } from 'react';\nimport { cn, 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 pressed?: boolean;\n\n /* Uncontrolled initial state. Ignored if `pressed` is set. */\n defaultPressed?: boolean;\n\n /* Fires whenever pressed state changes. */\n onPressedChange?: (pressed: boolean) => void;\n\n /* Static content OR render-prop receiving `{ pressed }` for state-driven swap. */\n children?: ToggleButtonChildren;\n\n /* Tooltip text — string OR fn receiving `{ pressed }`. State-aware form keeps consumer-supplied strings (i18n discipline). */\n title?: StateAware<string>;\n\n /* Accessible label — string OR fn. Use when icon-only or when `aria-pressed` alone is insufficient context for screen readers. */\n 'aria-label'?: StateAware<string>;\n\n /* 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 pressed,\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: pressed,\n default: defaultPressed ?? false,\n onChange: onPressedChange,\n });\n\n const renderedChildren =\n typeof children === 'function' ? children({ pressed: value }) : children;\n\n /* Resolve state-aware string props to plain strings for the underlying Button. */\n const resolvedTitle =\n typeof title === 'function' ? title({ pressed: value }) : title;\n const resolvedAriaLabel =\n typeof ariaLabel === 'function' ? ariaLabel({ pressed: value }) : ariaLabel;\n\n return (\n <Button\n ref={ref}\n /* 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 attached?: boolean;\n} & (SingleProps | MultiProps);\n\ninterface ChildLike extends ToggleButtonProps {\n value?: string;\n}\n\n/** Coordinates a row/column of ToggleButton children — `type=\"single\" | \"multi\"`. */\nexport const ToggleButtonGroup = forwardRef<HTMLDivElement, ToggleButtonGroupProps>(\n (props, ref) => {\n const { orientation = 'horizontal', attached = true, className, children, ...rest } = props;\n const mode: Mode = props.type === 'multi' ? 'multi' : 'single';\n\n const [singleValue, setSingleValue] = useControlled<string | null>({\n controlled: mode === 'single' ? (rest as SingleProps).value : undefined,\n default: mode === 'single' ? (rest as SingleProps).defaultValue ?? null : null,\n onChange: mode === 'single' ? (rest as SingleProps).onValueChange : undefined,\n });\n const [multiValue, setMultiValue] = useControlled<string[]>({\n controlled: mode === 'multi' ? (rest as MultiProps).value : undefined,\n default: mode === 'multi' ? (rest as MultiProps).defaultValue ?? [] : [],\n onChange: mode === 'multi' ? (rest as MultiProps).onValueChange : undefined,\n });\n\n const isPressed = (childValue: string | undefined): boolean => {\n if (childValue === undefined) return false;\n return mode === 'single' ? singleValue === childValue : multiValue.includes(childValue);\n };\n const togglePressed = (childValue: string | undefined) => {\n if (childValue === undefined) return;\n if (mode === 'single') {\n setSingleValue(singleValue === childValue ? null : childValue);\n } else {\n setMultiValue(\n multiValue.includes(childValue)\n ? multiValue.filter((v) => v !== childValue)\n : [...multiValue, childValue],\n );\n }\n };\n\n return (\n <div\n ref={ref}\n role={mode === 'single' ? 'radiogroup' : 'group'}\n data-orientation={orientation}\n className={cn(\n 'inline-flex',\n orientation === 'horizontal' ? 'flex-row' : 'flex-col',\n attached\n ? orientation === 'horizontal'\n ? '[&>*]:rounded-none [&>*:first-child]:rounded-l-md [&>*:last-child]:rounded-r-md [&>*:not(:first-child)]:-ml-px'\n : '[&>*]:rounded-none [&>*:first-child]:rounded-t-md [&>*:last-child]:rounded-b-md [&>*:not(:first-child)]:-mt-px'\n : 'gap-2',\n className,\n )}\n >\n {Children.map(children, (child) => {\n if (!isValidElement(child)) return child;\n const c = child as ReactElement<ChildLike>;\n const childValue = c.props.value;\n return cloneElement(c, {\n pressed: isPressed(childValue),\n onPressedChange: () => togglePressed(childValue),\n } as Partial<ChildLike>);\n })}\n </div>\n );\n },\n);\nToggleButtonGroup.displayName = 'ToggleButtonGroup';\n\nexport type { ToggleButtonGroupProps };\n","import { forwardRef } from 'react';\nimport { cn } from '../../utils';\nimport { ToggleButtonGroup, type ToggleButtonGroupProps } from '../toggleButtonGroup/ToggleButtonGroup';\n\nexport type SegmentedControlProps = ToggleButtonGroupProps;\n\n/** Visual variant of ToggleButtonGroup — iOS-style connected pill row. */\nexport const SegmentedControl = forwardRef<HTMLDivElement, SegmentedControlProps>(\n ({ className, ...props }, ref) => (\n <ToggleButtonGroup\n ref={ref}\n attached\n className={cn(\n 'rounded-md bg-muted p-1',\n '[&>*]:!rounded-md [&>*]:!ml-0 [&>*]:border-transparent [&>*]:bg-transparent',\n '[&>*[data-state=on]]:!bg-background [&>*[data-state=on]]:!text-foreground [&>*[data-state=on]]:shadow-sm',\n className,\n )}\n {...(props as ToggleButtonGroupProps)}\n />\n ),\n);\nSegmentedControl.displayName = 'SegmentedControl';\n","import { tv, type VariantProps } from '../../utils';\n\nexport const fabVariants = tv({\n base: 'fixed inline-flex items-center justify-center rounded-full shadow-lg transition-all hover:shadow-xl focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n variants: {\n variant: {\n primary: 'bg-primary text-primary-foreground hover:bg-primary/90',\n secondary: 'bg-card text-card-foreground border border-border hover:bg-muted',\n destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n },\n size: {\n sm: 'h-10 w-10',\n md: 'h-14 w-14',\n lg: 'h-16 w-16',\n },\n position: {\n 'bottom-right': 'bottom-6 right-6',\n 'bottom-left': 'bottom-6 left-6',\n 'bottom-center': 'bottom-6 left-1/2 -translate-x-1/2',\n 'top-right': 'top-6 right-6',\n 'top-left': 'top-6 left-6',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n position: 'bottom-right',\n },\n});\n\nexport type FABVariants = VariantProps<typeof fabVariants>;\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport { fabVariants, type FABVariants } from './FAB.variants';\n\nexport interface FABProps extends ButtonHTMLAttributes<HTMLButtonElement>, FABVariants {\n /** Required accessible label — FAB content is typically icon-only. */\n 'aria-label': string;\n children: ReactNode;\n}\n\n/** Floating Action Button — fixed-position circular button with shadow. */\nexport const FAB = forwardRef<HTMLButtonElement, FABProps>(\n ({ className, variant, size, position, type = 'button', ...props }, ref) => (\n <button\n ref={ref}\n type={type}\n className={cn(fabVariants({ variant, size, position }), className)}\n {...props}\n />\n ),\n);\nFAB.displayName = 'FAB';\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n type ReactNode,\n} from 'react';\nimport { Check, Copy } from 'lucide-react';\nimport { Icon } from '../../icons';\nimport { useClipboard } from '../../hooks';\nimport { OptionalExtensions } from '../../utils';\nimport { Button, type ButtonProps } from '../button/Button';\n\nconst COMPONENT_NAME = 'CopyButton';\n\nexport interface CopyButtonProps\n extends Omit<ButtonProps, 'onClick' | 'children' | 'aria-label' | 'onError'> {\n /* Text to copy when the button is activated. */\n text: string;\n\n /* Reset window for the `copied` state in ms. Default 2000. Set 0 to keep `copied` true until the next mount / explicit reset. */\n resetAfter?: number;\n\n /* Static content OR render-prop receiving `{copied, error}` for state-driven swap. Falls back to icon-only Copy/Check when omitted. */\n children?:\n | ReactNode\n | ((args: { copied: boolean; error: Error | null }) => ReactNode);\n\n /* Required accessible label — clipboard buttons are commonly icon-only and need a programmatic name. */\n 'aria-label': string;\n\n /* Override aria-label while copied=true. Falls back to `aria-label` when omitted (i18n discipline — consumer supplies all user-facing strings). */\n copiedAriaLabel?: string;\n\n /* Called with the caught Error when `navigator.clipboard.writeText` rejects. Fires once per error transition. */\n onError?: (error: Error) => void;\n}\n\n/* Renders a clipboard-copy button — for code blocks, ID / URL fields, and inline copy affordances. */\nexport const CopyButton = forwardRef<HTMLButtonElement, CopyButtonProps>(\n (\n {\n text,\n resetAfter = 2000,\n children,\n variant = 'ghost',\n 'aria-label': ariaLabel,\n copiedAriaLabel,\n onError,\n ...props\n },\n ref,\n ) => {\n const { copied, error, copy } = useClipboard({ resetAfter });\n\n // Stable ref keeps the effect's deps minimal — onError can be re-passed\n // unstably without re-firing on every render where `error` is set.\n const onErrorRef = useRef(onError);\n useEffect(() => {\n onErrorRef.current = onError;\n });\n\n useEffect(() => {\n if (error) onErrorRef.current?.(error);\n }, [error]);\n\n const effectiveAriaLabel = copied\n ? (copiedAriaLabel ?? ariaLabel)\n : ariaLabel;\n\n const content =\n typeof children === 'function'\n ? children({ copied, error })\n : (children ?? <Icon icon={copied ? Check : Copy} size={16} />);\n\n const handleClick = useCallback(() => {\n void copy(text);\n }, [copy, text]);\n\n return (\n <Button\n ref={ref}\n variant={variant}\n aria-label={effectiveAriaLabel}\n data-copied={OptionalExtensions.from(copied, 'true')}\n onClick={handleClick}\n {...props}\n >\n {content}\n </Button>\n );\n },\n);\n\nCopyButton.displayName = COMPONENT_NAME;\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { cn, dataAttr } from '../../utils';\nimport { Icon } from '../../icons';\nimport { useControlled } from '../../hooks';\n\nexport interface DisclosureButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children' | 'onChange'> {\n /** Visible label (left-aligned). */\n children?: ReactNode;\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial state. */\n defaultOpen?: boolean;\n /** Fires whenever open state changes. */\n onOpenChange?: (open: boolean) => void;\n /** Side the chevron sits on. Default `right`. */\n chevronSide?: 'left' | 'right';\n}\n\n/** Button with a rotating chevron — sets `aria-expanded` + `data-state=\"open|closed\"`. */\nexport const DisclosureButton = forwardRef<HTMLButtonElement, DisclosureButtonProps>(\n (\n {\n children,\n open,\n defaultOpen = false,\n onOpenChange,\n onClick,\n chevronSide = 'right',\n className,\n type = 'button',\n ...props\n },\n ref,\n ) => {\n const [value, setValue] = useControlled({\n controlled: open,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const chevron = (\n <Icon\n icon={ChevronDown}\n size={16}\n className={cn('transition-transform', value && 'rotate-180')}\n />\n );\n return (\n <button\n ref={ref}\n type={type}\n aria-expanded={value}\n data-state={value ? 'open' : 'closed'}\n data-disabled={dataAttr(props.disabled)}\n onClick={(e) => {\n onClick?.(e);\n if (!e.defaultPrevented) setValue(!value);\n }}\n className={cn(\n 'inline-flex w-full items-center justify-between gap-2 rounded-md px-3 py-2 text-sm font-medium text-foreground transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n className,\n )}\n {...props}\n >\n {chevronSide === 'left' && chevron}\n <span className=\"flex-1 text-left\">{children}</span>\n {chevronSide === 'right' && chevron}\n </button>\n );\n },\n);\nDisclosureButton.displayName = 'DisclosureButton';\n","import {\n createContext,\n forwardRef,\n useContext,\n type AnchorHTMLAttributes,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils';\nimport { RovingFocusGroup, Slot, useRovingFocusItem } from '../../primitives';\n\ninterface ToolbarContextValue {\n orientation: 'horizontal' | 'vertical';\n}\n\nconst ToolbarContext = createContext<ToolbarContextValue | null>(null);\n\nfunction useToolbarContext() {\n const ctx = useContext(ToolbarContext);\n if (!ctx) throw new Error('Toolbar.* must be used inside <Toolbar>');\n return ctx;\n}\n\nexport interface ToolbarProps extends HTMLAttributes<HTMLDivElement> {\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport const Toolbar = forwardRef<HTMLDivElement, ToolbarProps>(function Toolbar(\n { orientation = 'horizontal', className, children, ...rest },\n ref,\n) {\n return (\n <ToolbarContext.Provider value={{ orientation }}>\n <RovingFocusGroup\n ref={ref as never}\n orientation={orientation}\n loop\n role=\"toolbar\"\n aria-orientation={orientation}\n data-orientation={orientation}\n className={cn(\n 'inline-flex items-center gap-1 rounded-md border border-border bg-background p-1',\n orientation === 'vertical' && 'flex-col items-stretch',\n className,\n )}\n {...rest}\n >\n {children}\n </RovingFocusGroup>\n </ToolbarContext.Provider>\n );\n});\n\nexport interface ToolbarButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n asChild?: boolean;\n children: ReactNode;\n}\n\nexport const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>(\n function ToolbarButton({ asChild, className, onKeyDown, onFocus, children, ...rest }, ref) {\n const roving = useRovingFocusItem();\n const Component = asChild ? Slot : 'button';\n return (\n <Component\n ref={(node: HTMLButtonElement | null) => {\n roving.ref(node);\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n type={asChild ? undefined : 'button'}\n tabIndex={roving.tabIndex}\n onFocus={(e: React.FocusEvent<HTMLButtonElement>) => {\n onFocus?.(e);\n roving.onFocus();\n }}\n onKeyDown={(e: React.KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n roving.onKeyDown(e);\n }}\n className={cn(\n asChild\n ? className\n : cn(\n 'inline-flex h-8 items-center justify-center rounded-sm px-2 text-sm transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n className,\n ),\n )}\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\nexport interface ToolbarLinkProps\n extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'children'> {\n children: ReactNode;\n}\n\nexport const ToolbarLink = forwardRef<HTMLAnchorElement, ToolbarLinkProps>(function ToolbarLink(\n { className, onKeyDown, onFocus, children, ...rest },\n ref,\n) {\n const roving = useRovingFocusItem();\n return (\n <a\n ref={(node) => {\n roving.ref(node);\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n tabIndex={roving.tabIndex}\n onFocus={(e) => {\n onFocus?.(e);\n roving.onFocus();\n }}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n roving.onKeyDown(e);\n }}\n className={cn(\n 'inline-flex h-8 items-center justify-center rounded-sm px-2 text-sm text-foreground underline-offset-2 transition-colors hover:bg-muted hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...rest}\n >\n {children}\n </a>\n );\n});\n\nexport function ToolbarSeparator(props: HTMLAttributes<HTMLDivElement>) {\n const ctx = useToolbarContext();\n return (\n <div\n role=\"separator\"\n aria-orientation={ctx.orientation === 'vertical' ? 'horizontal' : 'vertical'}\n className={cn(\n 'shrink-0 bg-border',\n ctx.orientation === 'vertical' ? 'mx-1 h-px' : 'my-1 w-px',\n )}\n {...props}\n />\n );\n}\n\ntype ToolbarComponent = typeof Toolbar & {\n Button: typeof ToolbarButton;\n Link: typeof ToolbarLink;\n Separator: typeof ToolbarSeparator;\n};\n\n(Toolbar as ToolbarComponent).Button = ToolbarButton;\n(Toolbar as ToolbarComponent).Link = ToolbarLink;\n(Toolbar as ToolbarComponent).Separator = ToolbarSeparator;\n\nexport default Toolbar as ToolbarComponent;\n","import {\n createContext,\n forwardRef,\n useContext,\n useMemo,\n useRef,\n type ButtonHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { Plus, X } from 'lucide-react';\nimport { cn, composeRefs } from '../../utils';\nimport { useControlled, useEscape, useOutsideClick } from '../../hooks';\nimport { Icon } from '../../icons';\nimport { FAB } from '../fab';\nimport type { FABVariants } from '../fab/FAB.variants';\n\nexport type SpeedDialPosition = NonNullable<FABVariants['position']>;\nexport type SpeedDialDirection = 'up' | 'down' | 'left' | 'right';\n\ninterface SpeedDialContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLButtonElement | null>;\n rootRef: React.MutableRefObject<HTMLDivElement | null>;\n direction: SpeedDialDirection;\n position: SpeedDialPosition;\n}\n\nconst SpeedDialContext = createContext<SpeedDialContextValue | null>(null);\n\nfunction useSpeedDialContext() {\n const ctx = useContext(SpeedDialContext);\n if (!ctx) throw new Error('SpeedDial.* must be used inside <SpeedDial>');\n return ctx;\n}\n\nconst POSITION_TO_DIRECTION: Record<SpeedDialPosition, SpeedDialDirection> = {\n 'bottom-right': 'up',\n 'bottom-left': 'up',\n 'bottom-center': 'up',\n 'top-right': 'down',\n 'top-left': 'down',\n};\n\nconst POSITION_OFFSETS: Record<SpeedDialPosition, string> = {\n 'bottom-right': 'bottom-6 right-6',\n 'bottom-left': 'bottom-6 left-6',\n 'bottom-center': 'bottom-6 left-1/2 -translate-x-1/2',\n 'top-right': 'top-6 right-6',\n 'top-left': 'top-6 left-6',\n};\n\nconst DIRECTION_TO_STACK: Record<SpeedDialDirection, string> = {\n up: 'flex-col-reverse bottom-full mb-3',\n down: 'flex-col top-full mt-3',\n left: 'flex-row-reverse right-full mr-3',\n right: 'flex-row top-1/2 -translate-y-1/2 left-full ml-3',\n};\n\nconst DIRECTION_LABEL_SIDE: Record<SpeedDialDirection, 'left' | 'right'> = {\n up: 'right',\n down: 'right',\n left: 'right',\n right: 'left',\n};\n\nexport interface SpeedDialProps {\n position?: SpeedDialPosition;\n direction?: SpeedDialDirection;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n gap?: number;\n className?: string;\n children: ReactNode;\n}\n\nexport function SpeedDial({\n position = 'bottom-right',\n direction,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n gap = 12,\n className,\n children,\n}: SpeedDialProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const rootRef = useRef<HTMLDivElement | null>(null);\n const resolvedDirection = direction ?? POSITION_TO_DIRECTION[position];\n\n useEscape(() => {\n if (!open) return;\n setOpen(false);\n requestAnimationFrame(() => triggerRef.current?.focus());\n }, open);\n\n useOutsideClick(\n rootRef,\n () => {\n if (open) setOpen(false);\n },\n open,\n );\n\n const ctx = useMemo<SpeedDialContextValue>(\n () => ({ open, setOpen, triggerRef, rootRef, direction: resolvedDirection, position }),\n [open, setOpen, resolvedDirection, position],\n );\n\n return (\n <SpeedDialContext.Provider value={ctx}>\n <div\n ref={rootRef}\n data-state={open ? 'open' : 'closed'}\n className={cn('fixed', POSITION_OFFSETS[position], className)}\n >\n {open && (\n <ul\n role=\"menu\"\n data-direction={resolvedDirection}\n style={{ gap }}\n className={cn(\n 'absolute flex animate-in fade-in-0',\n DIRECTION_TO_STACK[resolvedDirection],\n )}\n >\n {children}\n </ul>\n )}\n </div>\n </SpeedDialContext.Provider>\n );\n}\n\nexport interface SpeedDialTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n /** Required accessible label. Default `\"Toggle actions\"`. */\n 'aria-label'?: string;\n closedIcon?: ReactNode;\n openIcon?: ReactNode;\n variant?: FABVariants['variant'];\n size?: FABVariants['size'];\n}\n\nexport const SpeedDialTrigger = forwardRef<HTMLButtonElement, SpeedDialTriggerProps>(\n function SpeedDialTrigger(\n {\n 'aria-label': ariaLabel = 'Toggle actions',\n closedIcon,\n openIcon,\n variant,\n size,\n onClick,\n className,\n ...rest\n },\n forwardedRef,\n ) {\n const ctx = useSpeedDialContext();\n return (\n <FAB\n {...rest}\n ref={composeRefs(forwardedRef, ctx.triggerRef)}\n aria-label={ariaLabel}\n aria-haspopup=\"menu\"\n aria-expanded={ctx.open}\n variant={variant}\n size={size}\n position={ctx.position}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.setOpen(!ctx.open);\n }}\n className={cn('static !bottom-auto !left-auto !right-auto !top-auto !translate-x-0', className)}\n >\n {ctx.open ? openIcon ?? <Icon icon={X} size={20} /> : closedIcon ?? <Icon icon={Plus} size={20} />}\n </FAB>\n );\n },\n);\n\nexport interface SpeedDialActionProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n 'aria-label': string;\n icon: ReactNode;\n onSelect?: () => void;\n tooltip?: ReactNode;\n}\n\nexport const SpeedDialAction = forwardRef<HTMLButtonElement, SpeedDialActionProps>(\n function SpeedDialAction(\n { 'aria-label': ariaLabel, icon, onSelect, tooltip, className, onClick, type = 'button', ...rest },\n forwardedRef,\n ) {\n const ctx = useSpeedDialContext();\n const labelSide = DIRECTION_LABEL_SIDE[ctx.direction];\n return (\n <li className=\"flex items-center gap-2\" data-side={labelSide}>\n {tooltip && labelSide === 'left' && (\n <span className=\"rounded-md bg-popover px-2 py-1 text-xs text-popover-foreground shadow\">\n {tooltip}\n </span>\n )}\n <button\n {...rest}\n ref={forwardedRef}\n type={type}\n role=\"menuitem\"\n aria-label={ariaLabel}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n onSelect?.();\n ctx.setOpen(false);\n requestAnimationFrame(() => ctx.triggerRef.current?.focus());\n }}\n className={cn(\n 'inline-flex h-10 w-10 items-center justify-center rounded-full bg-card text-card-foreground shadow-md transition-all hover:shadow-lg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n >\n {icon}\n </button>\n {tooltip && labelSide === 'right' && (\n <span className=\"rounded-md bg-popover px-2 py-1 text-xs text-popover-foreground shadow\">\n {tooltip}\n </span>\n )}\n </li>\n );\n },\n);\n\ntype SpeedDialComponent = typeof SpeedDial & {\n Trigger: typeof SpeedDialTrigger;\n Action: typeof SpeedDialAction;\n};\n\n(SpeedDial as SpeedDialComponent).Trigger = SpeedDialTrigger;\n(SpeedDial as SpeedDialComponent).Action = SpeedDialAction;\n\nexport default SpeedDial as SpeedDialComponent;\n","import {\n forwardRef,\n useEffect,\n useState,\n type ButtonHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { ArrowUp } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\n\nexport type BackToTopPosition =\n | 'bottom-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'top-right'\n | 'top-left';\n\nexport interface BackToTopButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Scroll distance (px) before the button appears. Default 400. */\n threshold?: number;\n /** Scope to a specific scrollable element. Defaults to the window. */\n scrollContainer?: HTMLElement | null;\n position?: BackToTopPosition;\n /** Visible label. Omit for icon-only. */\n label?: ReactNode;\n 'aria-label'?: string;\n}\n\nconst POSITION: Record<BackToTopPosition, string> = {\n 'bottom-right': 'bottom-6 right-6',\n 'bottom-left': 'bottom-6 left-6',\n 'bottom-center': 'bottom-6 left-1/2 -translate-x-1/2',\n 'top-right': 'top-6 right-6',\n 'top-left': 'top-6 left-6',\n};\n\n/** Floating button revealed past `threshold` scroll — smooth-scrolls to top. */\nexport const BackToTopButton = forwardRef<HTMLButtonElement, BackToTopButtonProps>(\n function BackToTopButton(\n {\n threshold = 400,\n scrollContainer,\n position = 'bottom-right',\n label,\n 'aria-label': ariaLabel = 'Back to top',\n className,\n onClick,\n type = 'button',\n ...rest\n },\n ref,\n ) {\n const [visible, setVisible] = useState(false);\n\n useEffect(() => {\n const el: HTMLElement | Window = scrollContainer ?? window;\n const read = () => {\n const y =\n 'scrollY' in el ? (el as Window).scrollY : (el as HTMLElement).scrollTop;\n setVisible(y >= threshold);\n };\n read();\n const target = el as EventTarget;\n target.addEventListener('scroll', read, { passive: true });\n return () => target.removeEventListener('scroll', read);\n }, [threshold, scrollContainer]);\n\n if (!visible) return null;\n\n return (\n <button\n ref={ref}\n type={type}\n aria-label={ariaLabel}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n const reducedMotion =\n typeof window !== 'undefined' &&\n window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;\n const target = scrollContainer ?? window;\n if ('scrollTo' in target) {\n (target as Window | HTMLElement).scrollTo({\n top: 0,\n behavior: reducedMotion ? 'auto' : 'smooth',\n });\n }\n }}\n className={cn(\n 'fixed z-banner inline-flex items-center justify-center gap-2 rounded-full bg-card text-card-foreground shadow-lg ring-1 ring-border transition-all hover:shadow-xl focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n label ? 'h-11 px-4 text-sm font-medium' : 'h-11 w-11',\n POSITION[position],\n className,\n )}\n {...rest}\n >\n <Icon icon={ArrowUp} size={16} />\n {label}\n </button>\n );\n },\n);\nBackToTopButton.displayName = 'BackToTopButton';\n"]}
|
|
@@ -7,6 +7,7 @@ export { tv } from 'tailwind-variants';
|
|
|
7
7
|
var utils_exports = {};
|
|
8
8
|
__export(utils_exports, {
|
|
9
9
|
ButtonType: () => ButtonType,
|
|
10
|
+
ColorExtensions: () => ColorExtensions,
|
|
10
11
|
CssExtensions: () => CssExtensions,
|
|
11
12
|
Equality: () => Equality,
|
|
12
13
|
HtmlElement: () => HtmlElement,
|
|
@@ -145,6 +146,39 @@ var CssExtensions = {
|
|
|
145
146
|
RADIUS_TOKEN_TO_CSS
|
|
146
147
|
};
|
|
147
148
|
|
|
149
|
+
// src/utils/ColorExtensions.ts
|
|
150
|
+
var TONE_TOKEN_MAP = {
|
|
151
|
+
primary: { main: "primary", fg: "primary-foreground", soft: "primary-soft", softFg: "primary-soft-foreground" },
|
|
152
|
+
neutral: { main: "foreground", fg: "background", soft: "muted", softFg: "foreground" },
|
|
153
|
+
danger: { main: "destructive", fg: "destructive-foreground", soft: "destructive-soft", softFg: "destructive-soft-foreground" },
|
|
154
|
+
success: { main: "success", fg: "success-foreground", soft: "success-soft", softFg: "success-soft-foreground" },
|
|
155
|
+
warning: { main: "warning", fg: "warning-foreground", soft: "warning-soft", softFg: "warning-soft-foreground" }
|
|
156
|
+
};
|
|
157
|
+
function toneColorOverride(input, tone) {
|
|
158
|
+
if (input === void 0 || input === null) return void 0;
|
|
159
|
+
const activeTone = tone ?? "primary";
|
|
160
|
+
const tokens = TONE_TOKEN_MAP[activeTone];
|
|
161
|
+
const out = {};
|
|
162
|
+
if (typeof input === "string") {
|
|
163
|
+
out[`--color-${tokens.main}`] = input;
|
|
164
|
+
out[`--color-${tokens.fg}`] = "#ffffff";
|
|
165
|
+
out[`--color-${tokens.soft}`] = `color-mix(in oklch, ${input} 12%, white)`;
|
|
166
|
+
out[`--color-${tokens.softFg}`] = input;
|
|
167
|
+
out["--color-ring"] = input;
|
|
168
|
+
} else {
|
|
169
|
+
if (input.bg !== void 0) out[`--color-${tokens.main}`] = input.bg;
|
|
170
|
+
if (input.text !== void 0) out[`--color-${tokens.fg}`] = input.text;
|
|
171
|
+
if (input.soft !== void 0) out[`--color-${tokens.soft}`] = input.soft;
|
|
172
|
+
if (input.softText !== void 0) out[`--color-${tokens.softFg}`] = input.softText;
|
|
173
|
+
if (input.ring !== void 0) out["--color-ring"] = input.ring;
|
|
174
|
+
}
|
|
175
|
+
return Object.keys(out).length > 0 ? out : void 0;
|
|
176
|
+
}
|
|
177
|
+
var ColorExtensions = {
|
|
178
|
+
toneColorOverride,
|
|
179
|
+
TONE_TOKEN_MAP
|
|
180
|
+
};
|
|
181
|
+
|
|
148
182
|
// src/utils/OptionalExtensions.ts
|
|
149
183
|
function from(condition, value) {
|
|
150
184
|
return condition ? value : void 0;
|
|
@@ -427,31 +461,31 @@ var surfaceVariants = tv({
|
|
|
427
461
|
|
|
428
462
|
// src/utils/Layers.ts
|
|
429
463
|
var Layer = {
|
|
430
|
-
/**
|
|
464
|
+
/** Slips under the base layer; visually hidden. */
|
|
431
465
|
Hide: -1,
|
|
432
|
-
/**
|
|
466
|
+
/** Sits in the default DOM flow with no z-index applied. */
|
|
433
467
|
Base: 0,
|
|
434
|
-
/** Slightly
|
|
468
|
+
/** Slightly elevates over siblings — badges, sticky list items, in-grid overlays. */
|
|
435
469
|
Raised: 10,
|
|
436
|
-
/**
|
|
470
|
+
/** Pins widgets inside a section — panels, inline overlays. */
|
|
437
471
|
Docked: 20,
|
|
438
|
-
/**
|
|
472
|
+
/** Anchors a page-level sticky header or footer. */
|
|
439
473
|
Sticky: 30,
|
|
440
|
-
/**
|
|
474
|
+
/** Hosts system banners — cookie notice, status banner, persistent FAB. */
|
|
441
475
|
Banner: 40,
|
|
442
|
-
/**
|
|
476
|
+
/** Hosts dropdowns, popovers, comboboxes, menus, hover-cards anchored to a trigger. */
|
|
443
477
|
Dropdown: 50,
|
|
444
|
-
/**
|
|
478
|
+
/** Dims the page behind a modal — backdrop / scrim layer. */
|
|
445
479
|
Overlay: 60,
|
|
446
|
-
/**
|
|
480
|
+
/** Hosts modal / dialog / drawer / sheet content above its backdrop. */
|
|
447
481
|
Modal: 70,
|
|
448
|
-
/**
|
|
482
|
+
/** Hosts popovers / menus opened FROM inside a modal — must beat Modal. */
|
|
449
483
|
Popover: 80,
|
|
450
|
-
/**
|
|
484
|
+
/** Hosts toasts, snackbars, undo bars — survives above modals. */
|
|
451
485
|
Toast: 90,
|
|
452
|
-
/**
|
|
486
|
+
/** Hosts tooltips and live-cursors — highest functional layer. */
|
|
453
487
|
Tooltip: 100,
|
|
454
|
-
/** DevTools / design-system inspector overlays
|
|
488
|
+
/** Hosts DevTools / design-system inspector overlays — always wins. */
|
|
455
489
|
Debug: 9999
|
|
456
490
|
};
|
|
457
491
|
function layerStyle(layer) {
|
|
@@ -460,30 +494,14 @@ function layerStyle(layer) {
|
|
|
460
494
|
|
|
461
495
|
// src/utils/Equality.ts
|
|
462
496
|
var Equality = {
|
|
463
|
-
/**
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
strict: (a, b) => Object.is(a, b),
|
|
469
|
-
/**
|
|
470
|
-
* Plain `===` equality. Like `strict` but NaN !== NaN.
|
|
471
|
-
* Use when you need pre-ES6 semantics; otherwise prefer `strict`.
|
|
472
|
-
*/
|
|
473
|
-
reference: (a, b) => a === b,
|
|
474
|
-
/**
|
|
475
|
-
* Compare two objects by an extracted scalar key.
|
|
476
|
-
*
|
|
477
|
-
* @example
|
|
478
|
-
* keyEquals: Equality.byKey<User>(u => u.id)
|
|
479
|
-
* // → (a, b) => Object.is(a.id, b.id)
|
|
480
|
-
*/
|
|
497
|
+
/** Checks NaN-safe strict equality (Object.is) — fits primitives + reference equality for objects. */
|
|
498
|
+
strictEquals: (a, b) => Object.is(a, b),
|
|
499
|
+
/** Checks plain `===` equality (NaN !== NaN). */
|
|
500
|
+
referenceEquals: (a, b) => a === b,
|
|
501
|
+
/** Provides a comparer that compares two objects by an extracted scalar key. */
|
|
481
502
|
byKey: (extract) => (a, b) => Object.is(extract(a), extract(b)),
|
|
482
|
-
/**
|
|
483
|
-
|
|
484
|
-
* Good for objects with primitive-only fields; doesn't recurse.
|
|
485
|
-
*/
|
|
486
|
-
shallow: (a, b) => {
|
|
503
|
+
/** Checks shallow object equality — equal iff every key has identical (Object.is) value. */
|
|
504
|
+
shallowEquals: (a, b) => {
|
|
487
505
|
if (Object.is(a, b)) return true;
|
|
488
506
|
if (a == null || b == null) return false;
|
|
489
507
|
const ak = Object.keys(a);
|
|
@@ -493,6 +511,6 @@ var Equality = {
|
|
|
493
511
|
}
|
|
494
512
|
};
|
|
495
513
|
|
|
496
|
-
export { ButtonType, CssExtensions, Equality, HtmlElement, Key, Layer, OptionalExtensions, PressExtensions, TransitionExtensions, composeEventHandlers, dataAttr, layerStyle, surfaceVariants, utils_exports };
|
|
497
|
-
//# sourceMappingURL=chunk-
|
|
498
|
-
//# sourceMappingURL=chunk-
|
|
514
|
+
export { ButtonType, ColorExtensions, CssExtensions, Equality, HtmlElement, Key, Layer, OptionalExtensions, PressExtensions, TransitionExtensions, composeEventHandlers, dataAttr, layerStyle, surfaceVariants, utils_exports };
|
|
515
|
+
//# sourceMappingURL=chunk-TZETHHW5.js.map
|
|
516
|
+
//# sourceMappingURL=chunk-TZETHHW5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/index.ts","../src/utils/composeEventHandlers.ts","../src/utils/dataAttr.ts","../src/utils/CssExtensions.ts","../src/utils/ColorExtensions.ts","../src/utils/OptionalExtensions.ts","../src/utils/PressExtensions.ts","../src/utils/HtmlExtensions.ts","../src/utils/KeyboardExtensions.ts","../src/utils/TransitionExtensions.ts","../src/utils/SurfaceStyles.ts","../src/utils/Layers.ts","../src/utils/Equality.ts"],"names":[],"mappings":"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","file":"chunk-TZETHHW5.js","sourcesContent":["export { cn } from './cn';\nexport { composeRefs } from './composeRefs';\nexport { composeEventHandlers } from './composeEventHandlers';\nexport { dataAttr } from './dataAttr';\nexport { tv, type VariantProps } from './tv';\nexport type {\n PolymorphicProps,\n PolymorphicPropsWithoutRef,\n PolymorphicRef,\n} from './polymorphic';\nexport { CssExtensions } from './CssExtensions';\nexport type {\n PaddingToken,\n RadiusToken,\n SizeValue,\n PaddingProp,\n RadiusProp,\n BoxSizeOverrides,\n SizeUnion,\n SizePreset,\n AbsolutePositionPreset,\n AbsoluteInsetOverrides,\n AbsolutePosition,\n} from './CssExtensions';\nexport { ColorExtensions } from './ColorExtensions';\nexport type { ColorTone, ColorOverride, ColorProp } from './ColorExtensions';\nexport { OptionalExtensions } from './OptionalExtensions';\nexport { PressExtensions, type PressEvent } from './PressExtensions';\nexport { HtmlElement, ButtonType } from './HtmlExtensions';\nexport { Key } from './KeyboardExtensions';\nexport { TransitionExtensions } from './TransitionExtensions';\nexport type {\n PresenceAnimationDurationProp,\n PresenceAnimationDuration,\n} from './TransitionExtensions';\nexport { surfaceVariants } from './SurfaceStyles';\nexport type {\n SurfaceVariants,\n SurfaceVariant,\n SurfaceTone,\n SurfaceRadius,\n SurfacePadding,\n SurfaceElevation,\n} from './SurfaceStyles';\nexport { Layer, layerStyle, type LayerName } from './Layers';\nexport { Equality, type EqualityComparer } from './Equality';\n","import type { SyntheticEvent } from 'react';\n\n/**\n * Chain two event handlers. The first handler runs, then the second — unless\n * the first called `event.preventDefault()`, in which case the second is skipped.\n * Use when overriding a default handler from a parent while still allowing\n * the consumer to provide their own.\n */\nexport function composeEventHandlers<E extends SyntheticEvent>(\n theirHandler: ((event: E) => void) | undefined,\n ourHandler: (event: E) => void,\n { checkForDefaultPrevented = true }: { checkForDefaultPrevented?: boolean } = {},\n): (event: E) => void {\n return (event) => {\n theirHandler?.(event);\n if (!checkForDefaultPrevented || !event.defaultPrevented) {\n ourHandler(event);\n }\n };\n}\n","/**\n * Returns `\"\"` when the condition is true, `undefined` otherwise.\n * Use for boolean `data-*` attributes — React strips the attr when value is undefined,\n * so the DOM cleanly toggles `data-state` rather than `data-state=\"false\"`.\n */\nexport function dataAttr(condition: boolean | undefined): '' | undefined {\n return condition ? '' : undefined;\n}\n","import type { CSSProperties } from 'react';\n\n/** CSS-value extensions — types, token maps, resolvers. Call as `CssExtensions.x(...)`. */\n\n// =============================================================================\n// Tokens (types — individually exported; types are erased, no shaking concern)\n// =============================================================================\n\nexport type PaddingToken = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type RadiusToken = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'full';\nexport type SizeValue = string | number;\nexport type PaddingProp = PaddingToken | { x?: SizeValue; y?: SizeValue };\nexport type RadiusProp = RadiusToken | SizeValue;\nexport interface BoxSizeOverrides {\n width?: SizeValue;\n height?: SizeValue;\n minWidth?: SizeValue;\n minHeight?: SizeValue;\n maxWidth?: SizeValue;\n maxHeight?: SizeValue;\n /** Shorthand for square boxes — applied as fallback for both `width` and `height`. Explicit `width`/`height` win when both are set. */\n boxSize?: SizeValue;\n /** CSS `aspect-ratio`. String like `'16/9'` or number like `1.5`. Pairs naturally with a single width/height. */\n aspectRatio?: string | number;\n}\n\n/** Canonical size preset vocabulary — shared across components. Each component picks the subset it supports via `Extract<SizePreset, ...>` and owns its internal dimension mapping. */\nexport type SizePreset = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\n/* Absolute-positioning tokens — preset 9-anchor enum + raw inset overrides. */\n\nexport type AbsolutePositionPreset =\n | 'top-right'\n | 'top-left'\n | 'bottom-right'\n | 'bottom-left'\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'center';\n\nexport interface AbsoluteInsetOverrides {\n top?: SizeValue;\n right?: SizeValue;\n bottom?: SizeValue;\n left?: SizeValue;\n}\n\nexport type AbsolutePosition = AbsolutePositionPreset | AbsoluteInsetOverrides;\n\n// =============================================================================\n// Token → CSS maps\n// =============================================================================\n\nconst PADDING_TOKEN_TO_CSS: Record<Exclude<PaddingToken, 'none'>, string> = {\n xs: '0.5rem',\n sm: '0.75rem',\n md: '1rem',\n lg: '1.5rem',\n xl: '2rem',\n};\n\nconst RADIUS_TOKEN_TO_CSS: Record<Exclude<RadiusToken, 'none' | 'full'>, string> = {\n xs: '0.125rem',\n sm: '0.25rem',\n md: '0.5rem',\n lg: '0.75rem',\n xl: '1rem',\n};\n\n// =============================================================================\n// Internal resolvers\n// =============================================================================\n\nfunction toCss(v: SizeValue): string {\n return typeof v === 'number' ? `${v}px` : v;\n}\n\nfunction resolvePadding(padding: PaddingProp | undefined): CSSProperties | undefined {\n if (!padding) return undefined;\n if (typeof padding === 'string') {\n if (padding === 'none') {\n return { paddingLeft: 0, paddingRight: 0, paddingTop: 0, paddingBottom: 0 };\n }\n const v = PADDING_TOKEN_TO_CSS[padding];\n return { paddingLeft: v, paddingRight: v, paddingTop: v, paddingBottom: v };\n }\n const style: CSSProperties = {};\n if (padding.x !== undefined) {\n const v = toCss(padding.x);\n style.paddingLeft = v;\n style.paddingRight = v;\n }\n if (padding.y !== undefined) {\n const v = toCss(padding.y);\n style.paddingTop = v;\n style.paddingBottom = v;\n }\n return style;\n}\n\nfunction resolveRadius(radius: RadiusProp | undefined): CSSProperties | undefined {\n if (radius === undefined || radius === null) return undefined;\n if (typeof radius === 'number') return { borderRadius: `${radius}px` };\n if (radius === 'none') return { borderRadius: 0 };\n if (radius === 'full') return { borderRadius: '9999px' };\n if (radius in RADIUS_TOKEN_TO_CSS) {\n return {\n borderRadius:\n RADIUS_TOKEN_TO_CSS[radius as Exclude<RadiusToken, 'none' | 'full'>],\n };\n }\n return { borderRadius: radius };\n}\n\nfunction resolveBoxSize(overrides: BoxSizeOverrides): CSSProperties | undefined {\n const style: CSSProperties = {};\n let hasAny = false;\n // boxSize is the fallback for width AND height — explicit dims win.\n const effectiveWidth = overrides.width ?? overrides.boxSize;\n const effectiveHeight = overrides.height ?? overrides.boxSize;\n if (effectiveWidth !== undefined) {\n style.width = toCss(effectiveWidth);\n hasAny = true;\n }\n if (effectiveHeight !== undefined) {\n style.height = toCss(effectiveHeight);\n hasAny = true;\n }\n if (overrides.minWidth !== undefined) {\n style.minWidth = toCss(overrides.minWidth);\n hasAny = true;\n }\n if (overrides.minHeight !== undefined) {\n style.minHeight = toCss(overrides.minHeight);\n hasAny = true;\n }\n if (overrides.maxWidth !== undefined) {\n style.maxWidth = toCss(overrides.maxWidth);\n hasAny = true;\n }\n if (overrides.maxHeight !== undefined) {\n style.maxHeight = toCss(overrides.maxHeight);\n hasAny = true;\n }\n if (overrides.aspectRatio !== undefined) {\n style.aspectRatio = String(overrides.aspectRatio);\n hasAny = true;\n }\n return hasAny ? style : undefined;\n}\n\n/** Union type for size props that accept either a named preset, a raw value (applied as `boxSize`), or an explicit dim object. */\nexport type SizeUnion<P extends string> =\n | P\n | (string & {}) // keeps preset literals in autocomplete while accepting any CSS unit string\n | number\n | BoxSizeOverrides;\n\n/**\n * Parse a union-style size prop into (a) a preset name (if matched), or (b) a `BoxSizeOverrides` payload.\n *\n * Resolution order:\n * - `undefined` → `{}`\n * - object → `{ box: input }`\n * - preset string → `{ preset: input }`\n * - any other string → `{ box: { boxSize: input } }`\n * - number → `{ box: { boxSize: input } }`\n */\nfunction parseSizeUnion<P extends string>(\n input: SizeUnion<P> | undefined,\n presets: ReadonlySet<string>,\n): { preset?: P; box?: BoxSizeOverrides } {\n if (input === undefined) return {};\n if (typeof input === 'object' && input !== null) return { box: input };\n if (typeof input === 'string' && presets.has(input)) return { preset: input as P };\n if (typeof input === 'number' || typeof input === 'string') {\n return { box: { boxSize: input } };\n }\n return {};\n}\n\n// =============================================================================\n// Grouped namespace export\n// =============================================================================\n\nexport const CssExtensions = {\n toCss,\n resolvePadding,\n resolveRadius,\n resolveBoxSize,\n parseSizeUnion,\n PADDING_TOKEN_TO_CSS,\n RADIUS_TOKEN_TO_CSS,\n} as const;\n","import type { CSSProperties } from 'react';\n\n/* Tone vocabulary shared by tone-aware components (Button, Checkbox, ToggleButton, Tag, Alert, etc.). */\nexport type ColorTone = 'primary' | 'neutral' | 'danger' | 'success' | 'warning';\n\n/* Explicit color overrides for the active tone's slot set. Pair with a base `tone` prop on the component. */\nexport interface ColorOverride {\n /* Main background / fill color. Drives `bg-{tone}`, `hover:bg-{tone}/X`, `active:bg-{tone}/X`, `border-{tone}`, `ring-{tone}`. */\n bg?: string;\n\n /* Text/icon color on top of `bg`. Drives `text-{tone}-foreground`. */\n text?: string;\n\n /* Light tinted background for soft variants. Drives `bg-{tone}-soft`. */\n soft?: string;\n\n /* Text on top of `soft` background. Drives `text-{tone}-soft-foreground`. */\n softText?: string;\n\n /* Focus ring color override (else inherits the component's tone). */\n ring?: string;\n}\n\n/* Accepted shapes for the `color` prop: a single seed string (lib derives rest) OR an explicit slot override object. */\nexport type ColorProp = string | ColorOverride;\n\n/* Per-tone CSS variable name suffixes (after `--color-`). */\nconst TONE_TOKEN_MAP: Record<\n ColorTone,\n { main: string; fg: string; soft: string; softFg: string }\n> = {\n primary: { main: 'primary', fg: 'primary-foreground', soft: 'primary-soft', softFg: 'primary-soft-foreground' },\n neutral: { main: 'foreground', fg: 'background', soft: 'muted', softFg: 'foreground' },\n danger: { main: 'destructive', fg: 'destructive-foreground', soft: 'destructive-soft', softFg: 'destructive-soft-foreground' },\n success: { main: 'success', fg: 'success-foreground', soft: 'success-soft', softFg: 'success-soft-foreground' },\n warning: { main: 'warning', fg: 'warning-foreground', soft: 'warning-soft', softFg: 'warning-soft-foreground' },\n};\n\n/**\n * Convert a `color` / `colors` prop into a CSS-variable override style for\n * the active tone's slot set. Returned style overrides the component's theme\n * tokens locally — every Tailwind utility (`bg-{tone}`, `hover:bg-{tone}/X`,\n * `text-{tone}-foreground`, etc.) that references the var picks it up\n * automatically. No variant config refactor required.\n *\n * Single-seed mode (`input` is a string):\n * - `bg` ← seed\n * - `text` ← white (default contrast; override via `colors.text`)\n * - `soft` ← seed mixed 12% over white via `color-mix(in oklch, ...)`\n * - `softText` ← seed\n * - `ring` ← seed\n *\n * Object mode (`input` is a `ColorOverride`):\n * - Each slot independently overridable; unset slots retain the theme default.\n */\nfunction toneColorOverride(\n input: ColorProp | undefined,\n tone: ColorTone | undefined,\n): CSSProperties | undefined {\n if (input === undefined || input === null) return undefined;\n const activeTone = tone ?? 'primary';\n const tokens = TONE_TOKEN_MAP[activeTone];\n const out: Record<string, string> = {};\n\n if (typeof input === 'string') {\n out[`--color-${tokens.main}`] = input;\n out[`--color-${tokens.fg}`] = '#ffffff';\n out[`--color-${tokens.soft}`] = `color-mix(in oklch, ${input} 12%, white)`;\n out[`--color-${tokens.softFg}`] = input;\n out['--color-ring'] = input;\n } else {\n if (input.bg !== undefined) out[`--color-${tokens.main}`] = input.bg;\n if (input.text !== undefined) out[`--color-${tokens.fg}`] = input.text;\n if (input.soft !== undefined) out[`--color-${tokens.soft}`] = input.soft;\n if (input.softText !== undefined) out[`--color-${tokens.softFg}`] = input.softText;\n if (input.ring !== undefined) out['--color-ring'] = input.ring;\n }\n\n return Object.keys(out).length > 0 ? (out as CSSProperties) : undefined;\n}\n\n// =============================================================================\n// Grouped namespace export\n// =============================================================================\n\nexport const ColorExtensions = {\n toneColorOverride,\n TONE_TOKEN_MAP,\n} as const;\n","/** Optional value extensions — call as `OptionalExtensions.x(...)`. */\n\n/**\n * Construct an optional from a `(condition, value)` pair: returns `value` when\n * `condition` is truthy, otherwise `undefined`. Use to keep DOM attributes\n * absent when their default/false meaning is what we want (e.g. `aria-busy`,\n * `tabIndex`, `disabled`).\n */\nfunction from<T>(condition: unknown, value: T): T | undefined {\n return condition ? value : undefined;\n}\n\nexport const OptionalExtensions = {\n from,\n} as const;\n","import type { KeyboardEvent, PointerEvent } from 'react';\n\n/** Press-interaction extensions — types + constants shared by interactive components. */\n\n/** Unified press event — pointer OR keyboard activation on any HTML element. */\nexport type PressEvent<T extends HTMLElement = HTMLElement> =\n | PointerEvent<T>\n | KeyboardEvent<T>;\n\nexport const PressExtensions = {\n /**\n * Bounds for `longPressDelay` props. Below `min`: overlaps with normal\n * click latency, too easy to trigger accidentally. Above `max`: clearly a\n * developer error (5-min hold). `default` is the conventional 500ms.\n */\n longPressDelay: {\n min: 200,\n max: 300_000,\n default: 500,\n },\n} as const;\n","/* HTML attribute & element value enums (const + type pairs). */\n\n/* HTML element tag names — for JSX intrinsics and polymorphic `Comp` variables. */\nexport const HtmlElement = {\n Button: 'button',\n Anchor: 'a',\n Span: 'span',\n Div: 'div',\n} as const;\nexport type HtmlElement = (typeof HtmlElement)[keyof typeof HtmlElement];\n\n/* HTML `<button type=\"\">` attribute. */\nexport const ButtonType = {\n Button: 'button',\n Submit: 'submit',\n Reset: 'reset',\n} as const;\nexport type ButtonType = (typeof ButtonType)[keyof typeof ButtonType];\n","/* Keyboard key values from `KeyboardEvent.key`. Add new entries as components need them. */\nexport const Key = {\n Space: ' ',\n Enter: 'Enter',\n Escape: 'Escape',\n Tab: 'Tab',\n Backspace: 'Backspace',\n Delete: 'Delete',\n Home: 'Home',\n End: 'End',\n PageUp: 'PageUp',\n PageDown: 'PageDown',\n ArrowUp: 'ArrowUp',\n ArrowDown: 'ArrowDown',\n ArrowLeft: 'ArrowLeft',\n ArrowRight: 'ArrowRight',\n} as const;\nexport type Key = (typeof Key)[keyof typeof Key];\n","/* Transition / animation utility extensions — duration normalization, defaults. Call as `TransitionExtensions.x(...)`. */\n\n// =============================================================================\n// Types — presence-style asymmetric durations (enter/exit). Not every animation\n// has an enter/exit phase (loops, one-shots, springs); this shape applies\n// specifically to mount/unmount or appear/disappear transitions.\n// =============================================================================\n\n/** Input prop — symmetric number OR asymmetric `{ enter, exit }`. */\nexport type PresenceAnimationDurationProp =\n | number\n | { enter?: number; exit?: number };\n\n/** Resolved (canonical) — both sides always present. */\nexport interface PresenceAnimationDuration {\n enter: number;\n exit: number;\n}\n\n// =============================================================================\n// Defaults\n// =============================================================================\n\nconst DEFAULT_DURATION_MS = 200;\n\n// =============================================================================\n// Internal resolvers\n// =============================================================================\n\nfunction resolveDuration(\n d: PresenceAnimationDurationProp | undefined,\n): PresenceAnimationDuration {\n if (typeof d === 'number') return { enter: d, exit: d };\n if (d && typeof d === 'object') {\n return {\n enter: d.enter ?? DEFAULT_DURATION_MS,\n exit: d.exit ?? DEFAULT_DURATION_MS,\n };\n }\n return { enter: DEFAULT_DURATION_MS, exit: DEFAULT_DURATION_MS };\n}\n\n// =============================================================================\n// Grouped namespace export\n// =============================================================================\n\nexport const TransitionExtensions = {\n resolveDuration,\n duration: { default: DEFAULT_DURATION_MS },\n} as const;\n","/* Provides the cross-domain surface style engine — variant × tone × radius × padding × elevation. */\n\nimport { tv, type VariantProps } from './tv';\n\n/** Provides the tailwind-variants config for every \"block with a visual treatment\" surface. */\nexport const surfaceVariants = tv({\n base: 'outline-none transition-colors',\n variants: {\n variant: {\n /* Opaque fill, no border, light shadow. Tooltips, chips, inline pills. */\n solid: 'shadow-sm',\n /* Muted/tinted fill, no border, light shadow. Chat bubbles, inline groups. */\n soft: 'shadow-sm',\n /* Opaque fill + visible border + medium shadow. Default for popovers/menus. */\n surface: 'border shadow-md',\n /* Transparent fill + visible border. Static cards, embedded info blocks. */\n outline: 'border bg-transparent',\n /* Translucent + blur, no border, medium shadow. Image overlays. */\n glass: 'backdrop-blur-md shadow-md',\n /* Translucent + blur + subtle border. Premium / hero overlays. */\n 'glass-outline': 'border backdrop-blur-md shadow-md',\n /* Opaque fill, no border, heavy shadow. Modals, drawers, command palette. */\n elevated: 'shadow-xl',\n /* Opaque fill, no border, no shadow. Embedded sub-panels inside another surface. */\n flat: '',\n },\n\n tone: {\n neutral: '',\n primary: '',\n danger: '',\n success: '',\n warning: '',\n info: '',\n },\n\n radius: {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n full: 'rounded-full',\n },\n\n padding: {\n none: 'p-0',\n xs: 'p-1',\n sm: 'p-2',\n md: 'p-3',\n lg: 'p-4',\n xl: 'p-6',\n '2xl': 'p-8',\n },\n\n /* Optional shadow override — when set, beats variant's default shadow via\n tailwind-merge precedence. Leave undefined to inherit from variant. */\n elevation: {\n 0: 'shadow-none',\n 1: 'shadow-sm',\n 2: 'shadow-md',\n 3: 'shadow-lg',\n 4: 'shadow-xl',\n 5: 'shadow-2xl',\n },\n },\n\n compoundVariants: [\n /* SOLID + ELEVATED + FLAT — opaque, tone bg, tone foreground. Same color matrix\n across these three variants — shadow is the only diff (handled by variant base). */\n {\n variant: ['solid', 'elevated', 'flat'],\n tone: 'neutral',\n class: 'bg-popover text-popover-foreground',\n },\n {\n variant: ['solid', 'elevated', 'flat'],\n tone: 'primary',\n class: 'bg-primary text-primary-foreground',\n },\n {\n variant: ['solid', 'elevated', 'flat'],\n tone: 'danger',\n class: 'bg-destructive text-destructive-foreground',\n },\n {\n variant: ['solid', 'elevated', 'flat'],\n tone: 'success',\n class: 'bg-success text-success-foreground',\n },\n {\n variant: ['solid', 'elevated', 'flat'],\n tone: 'warning',\n class: 'bg-warning text-warning-foreground',\n },\n {\n variant: ['solid', 'elevated', 'flat'],\n tone: 'info',\n class: 'bg-info text-info-foreground',\n },\n\n /* SOFT — muted/tinted bg, tone-readable text. */\n { variant: 'soft', tone: 'neutral', class: 'bg-muted text-foreground' },\n { variant: 'soft', tone: 'primary', class: 'bg-primary-soft text-primary' },\n { variant: 'soft', tone: 'danger', class: 'bg-destructive-soft text-destructive' },\n { variant: 'soft', tone: 'success', class: 'bg-success-soft text-success' },\n { variant: 'soft', tone: 'warning', class: 'bg-warning-soft text-warning' },\n { variant: 'soft', tone: 'info', class: 'bg-info-soft text-info' },\n\n /* SURFACE — popover bg + tone-accent border. Border colours subtly to keep\n the panel reading as \"neutral surface with [tone] context\". */\n {\n variant: 'surface',\n tone: 'neutral',\n class: 'border-border bg-popover text-popover-foreground',\n },\n {\n variant: 'surface',\n tone: 'primary',\n class: 'border-primary/40 bg-popover text-popover-foreground',\n },\n {\n variant: 'surface',\n tone: 'danger',\n class: 'border-destructive/40 bg-popover text-popover-foreground',\n },\n {\n variant: 'surface',\n tone: 'success',\n class: 'border-success/40 bg-popover text-popover-foreground',\n },\n {\n variant: 'surface',\n tone: 'warning',\n class: 'border-warning/40 bg-popover text-popover-foreground',\n },\n {\n variant: 'surface',\n tone: 'info',\n class: 'border-info/40 bg-popover text-popover-foreground',\n },\n\n /* OUTLINE — fully transparent fill, tone border + tone-readable text. */\n { variant: 'outline', tone: 'neutral', class: 'border-border text-foreground' },\n { variant: 'outline', tone: 'primary', class: 'border-primary text-primary' },\n { variant: 'outline', tone: 'danger', class: 'border-destructive text-destructive' },\n { variant: 'outline', tone: 'success', class: 'border-success text-success' },\n { variant: 'outline', tone: 'warning', class: 'border-warning text-warning' },\n { variant: 'outline', tone: 'info', class: 'border-info text-info' },\n\n /* GLASS — translucent tinted fill + blur. Tone fills with alpha; foreground\n must read clearly across the blurred background underneath. */\n {\n variant: 'glass',\n tone: 'neutral',\n class: 'bg-popover/70 text-popover-foreground',\n },\n {\n variant: 'glass',\n tone: 'primary',\n class: 'bg-primary/30 text-primary-foreground',\n },\n {\n variant: 'glass',\n tone: 'danger',\n class: 'bg-destructive/30 text-destructive-foreground',\n },\n {\n variant: 'glass',\n tone: 'success',\n class: 'bg-success/30 text-success-foreground',\n },\n {\n variant: 'glass',\n tone: 'warning',\n class: 'bg-warning/30 text-warning-foreground',\n },\n {\n variant: 'glass',\n tone: 'info',\n class: 'bg-info/30 text-info-foreground',\n },\n\n /* GLASS-OUTLINE — glass + tone-accent border at 50% alpha. */\n {\n variant: 'glass-outline',\n tone: 'neutral',\n class: 'border-border/50 bg-popover/70 text-popover-foreground',\n },\n {\n variant: 'glass-outline',\n tone: 'primary',\n class: 'border-primary/50 bg-primary/30 text-primary-foreground',\n },\n {\n variant: 'glass-outline',\n tone: 'danger',\n class: 'border-destructive/50 bg-destructive/30 text-destructive-foreground',\n },\n {\n variant: 'glass-outline',\n tone: 'success',\n class: 'border-success/50 bg-success/30 text-success-foreground',\n },\n {\n variant: 'glass-outline',\n tone: 'warning',\n class: 'border-warning/50 bg-warning/30 text-warning-foreground',\n },\n {\n variant: 'glass-outline',\n tone: 'info',\n class: 'border-info/50 bg-info/30 text-info-foreground',\n },\n ],\n\n defaultVariants: {\n variant: 'surface',\n tone: 'neutral',\n radius: 'md',\n padding: 'none',\n },\n});\n\n/** Represents the union of every surface variant prop. */\nexport type SurfaceVariants = VariantProps<typeof surfaceVariants>;\n\n/** Represents the visual-recipe axis (solid · soft · surface · outline · glass · etc.). */\nexport type SurfaceVariant = NonNullable<SurfaceVariants['variant']>;\n\n/** Represents the semantic colour axis (neutral · primary · danger · success · warning · info). */\nexport type SurfaceTone = NonNullable<SurfaceVariants['tone']>;\n\n/** Represents the corner-roundness axis (none · sm · md · lg · xl · 2xl · full). */\nexport type SurfaceRadius = NonNullable<SurfaceVariants['radius']>;\n\n/** Represents the interior-padding axis (none · xs · sm · md · lg · xl · 2xl). */\nexport type SurfacePadding = NonNullable<SurfaceVariants['padding']>;\n\n/** Represents the shadow-depth override (0–5); when omitted the variant decides. */\nexport type SurfaceElevation = NonNullable<SurfaceVariants['elevation']>;\n","/* Provides semantic z-index tiers — the single source of truth for stacking order. */\n\n/** Contains the semantic z-index tiers; matching `z-{name}` utilities ship via @theme. */\nexport const Layer = {\n /** Slips under the base layer; visually hidden. */\n Hide: -1,\n /** Sits in the default DOM flow with no z-index applied. */\n Base: 0,\n /** Slightly elevates over siblings — badges, sticky list items, in-grid overlays. */\n Raised: 10,\n /** Pins widgets inside a section — panels, inline overlays. */\n Docked: 20,\n /** Anchors a page-level sticky header or footer. */\n Sticky: 30,\n /** Hosts system banners — cookie notice, status banner, persistent FAB. */\n Banner: 40,\n /** Hosts dropdowns, popovers, comboboxes, menus, hover-cards anchored to a trigger. */\n Dropdown: 50,\n /** Dims the page behind a modal — backdrop / scrim layer. */\n Overlay: 60,\n /** Hosts modal / dialog / drawer / sheet content above its backdrop. */\n Modal: 70,\n /** Hosts popovers / menus opened FROM inside a modal — must beat Modal. */\n Popover: 80,\n /** Hosts toasts, snackbars, undo bars — survives above modals. */\n Toast: 90,\n /** Hosts tooltips and live-cursors — highest functional layer. */\n Tooltip: 100,\n /** Hosts DevTools / design-system inspector overlays — always wins. */\n Debug: 9999,\n} as const;\n\n/** Represents the name of a semantic z-index tier. */\nexport type LayerName = keyof typeof Layer;\n\n/** Provides an inline `style` object for programmatic z-index assignment. */\nexport function layerStyle(layer: LayerName): { zIndex: number } {\n return { zIndex: Layer[layer] };\n}\n","/* Provides reusable equality comparers for selection components and diff checks. */\n\n/** Represents a function that decides whether two values are equal. */\nexport type EqualityComparer<T> = (a: T, b: T) => boolean;\n\n/** Contains the standard equality comparers. */\nexport const Equality = {\n /** Checks NaN-safe strict equality (Object.is) — fits primitives + reference equality for objects. */\n strictEquals: <T>(a: T, b: T): boolean => Object.is(a, b),\n\n /** Checks plain `===` equality (NaN !== NaN). */\n referenceEquals: <T>(a: T, b: T): boolean => a === b,\n\n /** Provides a comparer that compares two objects by an extracted scalar key. */\n byKey:\n <T, K = unknown>(extract: (item: T) => K): EqualityComparer<T> =>\n (a, b) =>\n Object.is(extract(a), extract(b)),\n\n /** Checks shallow object equality — equal iff every key has identical (Object.is) value. */\n shallowEquals: <T extends Record<string, unknown>>(a: T, b: T): boolean => {\n if (Object.is(a, b)) return true;\n if (a == null || b == null) return false;\n const ak = Object.keys(a);\n const bk = Object.keys(b);\n if (ak.length !== bk.length) return false;\n return ak.every((k) => Object.is(a[k], b[k]));\n },\n} as const;\n"]}
|
|
@@ -2,7 +2,7 @@ import { Drawer, DrawerContent, DrawerTitle, DrawerDescription } from './chunk-2
|
|
|
2
2
|
import { DialogContent, DialogClose, Dialog, DialogTrigger, DialogHeader, DialogTitle, DialogDescription, DialogBody, DialogFooter } from './chunk-SGMG6NZB.js';
|
|
3
3
|
import { Backdrop } from './chunk-BLXE2RCC.js';
|
|
4
4
|
import { useControlled } from './chunk-NUMFGKPY.js';
|
|
5
|
-
import { surfaceVariants } from './chunk-
|
|
5
|
+
import { surfaceVariants } from './chunk-TZETHHW5.js';
|
|
6
6
|
import { Slot, Portal, AnchoredPositioner, DismissableLayer, ScrollLockProvider, OverlayArrow } from './chunk-BMABNEZX.js';
|
|
7
7
|
import { cn, composeRefs } from './chunk-LDRFQG44.js';
|
|
8
8
|
import { forwardRef, createContext, useState, useRef, useEffect, useMemo, useContext, useCallback, isValidElement, cloneElement } from 'react';
|
|
@@ -134,6 +134,7 @@ var PopoverContent = forwardRef(
|
|
|
134
134
|
anchor: ctx.triggerRef.current,
|
|
135
135
|
placement: ctx.placement,
|
|
136
136
|
offset: ctx.offset,
|
|
137
|
+
className: "z-dropdown",
|
|
137
138
|
children: /* @__PURE__ */ jsx(FocusScope, { asChild: true, trapped: true, loop: true, children: /* @__PURE__ */ jsx(
|
|
138
139
|
DismissableLayer,
|
|
139
140
|
{
|
|
@@ -154,7 +155,7 @@ var PopoverContent = forwardRef(
|
|
|
154
155
|
role: "dialog",
|
|
155
156
|
"data-state": "open",
|
|
156
157
|
className: cn(
|
|
157
|
-
"
|
|
158
|
+
"outline-none animate-in fade-in-0 zoom-in-95",
|
|
158
159
|
!bare && cn(
|
|
159
160
|
DEFAULT_WIDTH,
|
|
160
161
|
surfaceVariants({
|
|
@@ -269,6 +270,7 @@ var HoverCardContent = forwardRef(
|
|
|
269
270
|
anchor: ctx.triggerRef.current,
|
|
270
271
|
placement: ctx.placement,
|
|
271
272
|
offset: ctx.offset,
|
|
273
|
+
className: "z-dropdown",
|
|
272
274
|
children: /* @__PURE__ */ jsx(
|
|
273
275
|
"div",
|
|
274
276
|
{
|
|
@@ -283,7 +285,7 @@ var HoverCardContent = forwardRef(
|
|
|
283
285
|
ctx.hide();
|
|
284
286
|
},
|
|
285
287
|
className: cn(
|
|
286
|
-
"
|
|
288
|
+
"w-64 rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md outline-none animate-in fade-in-0 zoom-in-95",
|
|
287
289
|
className
|
|
288
290
|
),
|
|
289
291
|
...rest,
|
|
@@ -550,5 +552,5 @@ var BottomSheet = forwardRef(function BottomSheet2({
|
|
|
550
552
|
});
|
|
551
553
|
|
|
552
554
|
export { ActionSheet, ActionSheetAction, ActionSheetCancel, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, BottomSheet, HoverCard, HoverCardArrow, HoverCardContent, HoverCardTrigger, Popover, PopoverArrow, PopoverContent, PopoverTrigger, useBottomSheet };
|
|
553
|
-
//# sourceMappingURL=chunk-
|
|
554
|
-
//# sourceMappingURL=chunk-
|
|
555
|
+
//# sourceMappingURL=chunk-UJDAJMFJ.js.map
|
|
556
|
+
//# sourceMappingURL=chunk-UJDAJMFJ.js.map
|