@ravileal/ui 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +15 -0
- package/README.md +241 -2
- package/dist/components/Alert.d.ts +14 -0
- package/dist/components/Avatar.d.ts +11 -0
- package/dist/components/Badge.d.ts +23 -0
- package/dist/components/Button.d.ts +20 -0
- package/dist/components/Card.d.ts +36 -0
- package/dist/components/Checkbox.d.ts +7 -0
- package/dist/components/ColorPicker.d.ts +33 -0
- package/dist/components/Combobox.d.ts +23 -0
- package/dist/components/ConfirmModal.d.ts +14 -0
- package/dist/components/CopyValue.d.ts +31 -0
- package/dist/components/DataTable.d.ts +27 -0
- package/dist/components/DatePicker.d.ts +33 -0
- package/dist/components/Drawer.d.ts +16 -0
- package/dist/components/Dropdown.d.ts +51 -0
- package/dist/components/DropdownMenu.d.ts +26 -0
- package/dist/components/EmptyState.d.ts +10 -0
- package/dist/components/FileUpload.d.ts +14 -0
- package/dist/components/FormField.d.ts +24 -0
- package/dist/components/InlineEditorCard.d.ts +19 -0
- package/dist/components/ListScreen.d.ts +48 -0
- package/dist/components/Modal.d.ts +22 -0
- package/dist/components/MonthSelector.d.ts +24 -0
- package/dist/components/NumberStepper.d.ts +16 -0
- package/dist/components/PageHeader.d.ts +11 -0
- package/dist/components/Portal.d.ts +11 -0
- package/dist/components/ProgressBar.d.ts +13 -0
- package/dist/components/Radio.d.ts +5 -0
- package/dist/components/RowActions.d.ts +17 -0
- package/dist/components/ScreenSkeleton.d.ts +26 -0
- package/dist/components/SearchInput.d.ts +13 -0
- package/dist/components/SegmentedControl.d.ts +16 -0
- package/dist/components/Skeleton.d.ts +14 -0
- package/dist/components/Slider.d.ts +17 -0
- package/dist/components/Spinner.d.ts +8 -0
- package/dist/components/Switch.d.ts +15 -0
- package/dist/components/Tabs.d.ts +15 -0
- package/dist/components/TextInput.d.ts +13 -0
- package/dist/components/Textarea.d.ts +6 -0
- package/dist/components/Toast.d.ts +21 -0
- package/dist/components/Tooltip.d.ts +22 -0
- package/dist/components/VisuallyHidden.d.ts +6 -0
- package/dist/index.d.ts +82 -0
- package/dist/index.js +3253 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/ScreenCaptureOverlay.d.ts +16 -0
- package/dist/internal/clipboard.d.ts +11 -0
- package/dist/internal/color.utils.d.ts +21 -0
- package/dist/internal/screen-color-picker.d.ts +12 -0
- package/dist/internal/tone.d.ts +1 -0
- package/dist/internal/useFocusTrap.d.ts +7 -0
- package/dist/internal/useIsomorphicLayoutEffect.d.ts +6 -0
- package/dist/internal/usePopover.d.ts +30 -0
- package/dist/styles.css +1702 -0
- package/package.json +105 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/components/Avatar.tsx","../src/components/Checkbox.tsx","../src/internal/useIsomorphicLayoutEffect.ts","../src/internal/usePopover.ts","../src/internal/color.utils.ts","../src/components/NumberStepper.tsx","../src/internal/screen-color-picker.ts","../src/internal/ScreenCaptureOverlay.tsx","../src/components/ColorPicker.tsx","../src/internal/useFocusTrap.ts","../src/components/Modal.tsx","../src/components/ConfirmModal.tsx","../src/internal/clipboard.ts","../src/components/Tooltip.tsx","../src/components/CopyValue.tsx","../src/components/DatePicker.tsx","../src/components/Dropdown.tsx","../src/components/InlineEditorCard.tsx","../src/components/ListScreen.tsx","../src/components/MonthSelector.tsx","../src/components/Radio.tsx","../src/components/RowActions.tsx","../src/components/Skeleton.tsx","../src/components/ScreenSkeleton.tsx","../src/components/Alert.tsx","../src/components/Badge.tsx","../src/components/Spinner.tsx","../src/components/Button.tsx","../src/components/Card.tsx","../src/components/Combobox.tsx","../src/components/DataTable.tsx","../src/components/Drawer.tsx","../src/components/DropdownMenu.tsx","../src/components/EmptyState.tsx","../src/components/FileUpload.tsx","../src/components/FormField.tsx","../src/components/PageHeader.tsx","../src/components/Portal.tsx","../src/components/ProgressBar.tsx","../src/components/TextInput.tsx","../src/components/SearchInput.tsx","../src/components/SegmentedControl.tsx","../src/components/Slider.tsx","../src/components/Switch.tsx","../src/components/Tabs.tsx","../src/components/Textarea.tsx","../src/components/Toast.tsx","../src/components/VisuallyHidden.tsx"],"sourcesContent":["import type { CSSProperties } from 'react';\n\nexport interface AvatarProps {\n name: string;\n color: string;\n size?: number;\n className?: string;\n style?: CSSProperties;\n /** Accessible name. Defaults to `name`; pass an empty string to hide it. */\n ariaLabel?: string;\n}\n\nexport default function Avatar({\n name,\n color,\n size = 32,\n className,\n style,\n ariaLabel,\n}: AvatarProps) {\n const initial = name.trim().charAt(0).toUpperCase() || '?';\n const label = ariaLabel ?? name;\n\n return (\n <div\n className={className}\n role={label ? 'img' : undefined}\n aria-label={label || undefined}\n aria-hidden={label ? undefined : true}\n style={{\n width: size,\n height: size,\n borderRadius: '50%',\n background: color,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: size * 0.38,\n fontWeight: 700,\n color: 'var(--ui-on-accent)',\n flexShrink: 0,\n ...style,\n }}\n >\n {initial}\n </div>\n );\n}\n","import { useEffect, useRef, type ComponentPropsWithRef } from 'react';\n\nexport interface CheckboxProps extends Omit<ComponentPropsWithRef<'input'>, 'type' | 'size'> {\n size?: 'sm' | 'md';\n /** Visually marks a partial selection (DOM `indeterminate` is not an attribute). */\n indeterminate?: boolean;\n}\n\nexport default function Checkbox({\n size = 'md',\n className,\n indeterminate = false,\n ...props\n}: CheckboxProps) {\n const ref = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (ref.current) ref.current.indeterminate = indeterminate;\n }, [indeterminate]);\n\n return (\n <input\n ref={ref}\n type=\"checkbox\"\n className={`ui-checkbox${size === 'sm' ? ' is-sm' : ''}${className ? ` ${className}` : ''}`}\n {...props}\n />\n );\n}\n","import { useEffect, useLayoutEffect } from 'react';\n\n/**\n * `useLayoutEffect` warns when rendered on the server. The library supports\n * ReactDOMServer, so components use `useEffect` in that environment instead.\n */\nexport const useIsomorphicLayoutEffect =\n typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';\n\nexport interface PopoverPosition {\n left: number;\n top?: number;\n bottom?: number;\n /** Fixed menu width; omitted when the menu shrinks to its content. */\n width?: number;\n maxHeight: number;\n}\n\n/**\n * Shared popover behavior for custom dropdowns/date pickers: anchors a portaled\n * menu to its trigger, flips above when there is no room below, repositions on\n * scroll/resize and closes on outside click or Escape.\n */\nexport function usePopover({\n maxHeight,\n minWidth = 160,\n fitContent = false,\n onEscape,\n onDismiss,\n}: {\n maxHeight: number;\n minWidth?: number;\n /** Let the menu shrink to its content instead of matching the trigger width. */\n fitContent?: boolean;\n /** Return true to handle Escape without closing the popover (e.g. collapse a submenu). */\n onEscape?: () => boolean | void;\n /** Called when the popover is dismissed by an outside click or Escape (before closing). */\n onDismiss?: () => void;\n}) {\n const [open, setOpen] = useState(false);\n const [pos, setPos] = useState<PopoverPosition>({\n left: 0,\n top: 0,\n width: fitContent ? undefined : minWidth,\n maxHeight,\n });\n const triggerRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const dismissRef = useRef(onDismiss);\n dismissRef.current = onDismiss;\n\n const reposition = useCallback(() => {\n const el = triggerRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n const viewportH = window.innerHeight || 0;\n const viewportW = window.innerWidth || 0;\n const spaceBelow = viewportH - rect.bottom;\n const openUp = spaceBelow < maxHeight + 8 && rect.top > spaceBelow;\n const menuWidth = fitContent\n ? Math.max(menuRef.current?.offsetWidth ?? minWidth, minWidth)\n : Math.max(rect.width, minWidth);\n // A content-sized menu anchors to the trigger's right edge when the trigger\n // is wider (e.g. a date field next to a calendar icon at its right end).\n let left = fitContent && rect.width > menuWidth ? rect.right - menuWidth : rect.left;\n left = Math.min(Math.max(left, 8), Math.max(viewportW - menuWidth - 8, 8));\n setPos({\n left,\n top: openUp ? undefined : rect.bottom + 4,\n bottom: openUp ? Math.max(viewportH - rect.top + 4, 4) : undefined,\n width: fitContent ? undefined : menuWidth,\n maxHeight,\n });\n }, [fitContent, maxHeight, minWidth]);\n\n const openMenu = useCallback(() => setOpen(true), []);\n const closeMenu = useCallback((refocus = false) => {\n setOpen(false);\n if (refocus) triggerRef.current?.focus();\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n if (open) reposition();\n }, [open, reposition]);\n\n useEffect(() => {\n if (!open) return;\n const onPointerDown = (e: MouseEvent) => {\n const target = e.target as Node;\n if (triggerRef.current?.contains(target) || menuRef.current?.contains(target)) return;\n dismissRef.current?.();\n closeMenu();\n };\n const onKey = (e: globalThis.KeyboardEvent) => {\n if (e.key !== 'Escape') return;\n if (onEscape?.()) return;\n dismissRef.current?.();\n closeMenu(true);\n };\n document.addEventListener('mousedown', onPointerDown);\n document.addEventListener('keydown', onKey);\n window.addEventListener('resize', reposition);\n window.addEventListener('scroll', reposition, true);\n return () => {\n document.removeEventListener('mousedown', onPointerDown);\n document.removeEventListener('keydown', onKey);\n window.removeEventListener('resize', reposition);\n window.removeEventListener('scroll', reposition, true);\n };\n }, [open, closeMenu, reposition, onEscape]);\n\n return { open, pos, triggerRef, menuRef, openMenu, closeMenu };\n}\n","export interface Rgb {\n r: number;\n g: number;\n b: number;\n}\n\nexport interface Hsv {\n /** Hue 0-360 */\n h: number;\n /** Saturation 0-1 */\n s: number;\n /** Value/brightness 0-1 */\n v: number;\n}\n\nconst HEX_RE = /^#?([0-9a-f]{6})$/i;\n\nexport function normalizeHex(raw: string): string | null {\n const match = HEX_RE.exec((raw ?? '').trim());\n return match ? `#${match[1]!.toLowerCase()}` : null;\n}\n\nexport function hexToRgb(hex: string): Rgb | null {\n const normalized = normalizeHex(hex);\n if (!normalized) return null;\n return {\n r: parseInt(normalized.slice(1, 3), 16),\n g: parseInt(normalized.slice(3, 5), 16),\n b: parseInt(normalized.slice(5, 7), 16),\n };\n}\n\nfunction channel(value: number): string {\n return Math.max(0, Math.min(255, Math.round(value)))\n .toString(16)\n .padStart(2, '0');\n}\n\nexport function rgbToHex(rgb: Rgb): string {\n return `#${channel(rgb.r)}${channel(rgb.g)}${channel(rgb.b)}`;\n}\n\nexport function rgbToHsv(rgb: Rgb): Hsv {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n\n let h = 0;\n if (delta !== 0) {\n if (max === r) h = ((g - b) / delta) % 6;\n else if (max === g) h = (b - r) / delta + 2;\n else h = (r - g) / delta + 4;\n h *= 60;\n if (h < 0) h += 360;\n }\n\n return { h, s: max === 0 ? 0 : delta / max, v: max };\n}\n\nexport function hsvToRgb(hsv: Hsv): Rgb {\n const h = ((hsv.h % 360) + 360) % 360;\n const s = Math.max(0, Math.min(1, hsv.s));\n const v = Math.max(0, Math.min(1, hsv.v));\n const c = v * s;\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n const m = v - c;\n\n let rp = 0;\n let gp = 0;\n let bp = 0;\n if (h < 60) [rp, gp, bp] = [c, x, 0];\n else if (h < 120) [rp, gp, bp] = [x, c, 0];\n else if (h < 180) [rp, gp, bp] = [0, c, x];\n else if (h < 240) [rp, gp, bp] = [0, x, c];\n else if (h < 300) [rp, gp, bp] = [x, 0, c];\n else [rp, gp, bp] = [c, 0, x];\n\n return {\n r: Math.round((rp + m) * 255),\n g: Math.round((gp + m) * 255),\n b: Math.round((bp + m) * 255),\n };\n}\n\nexport function hsvToHex(hsv: Hsv): string {\n return rgbToHex(hsvToRgb(hsv));\n}\n\nexport function hexToHsv(hex: string): Hsv | null {\n const rgb = hexToRgb(hex);\n return rgb ? rgbToHsv(rgb) : null;\n}\n\nexport function clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n}\n","import { useEffect, useRef, useState, type CSSProperties } from 'react';\n\nconst buttonStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 22,\n flex: 1,\n border: 'none',\n background: 'none',\n color: 'var(--ui-text-3)',\n cursor: 'pointer',\n fontSize: 8,\n lineHeight: 1,\n padding: 0,\n};\n\nexport interface NumberStepperProps {\n value: number;\n onChange: (value: number) => void;\n ariaLabel: string;\n min?: number;\n max?: number;\n step?: number;\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * Numeric input without the native browser spinner: custom increase/decrease\n * buttons, mouse-wheel stepping and keyboard arrows.\n */\nexport function NumberStepper({\n value,\n onChange,\n ariaLabel,\n min = 0,\n max = 255,\n step = 1,\n className,\n style,\n}: NumberStepperProps) {\n const [text, setText] = useState(String(value));\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n setText(String(value));\n }, [value]);\n\n const clampValue = (raw: number) => Math.min(max, Math.max(min, Math.round(raw)));\n\n const commit = (raw: number) => {\n const next = clampValue(raw);\n setText(String(next));\n onChange(next);\n };\n\n const stepBy = (direction: 1 | -1) => {\n commit((Number(text) || 0) + direction * step);\n };\n\n useEffect(() => {\n const input = inputRef.current;\n if (!input) return;\n const onWheel = (event: WheelEvent) => {\n event.preventDefault();\n commit((Number(text) || 0) + (event.deltaY < 0 ? step : -step));\n };\n input.addEventListener('wheel', onWheel, { passive: false });\n return () => input.removeEventListener('wheel', onWheel);\n // reattach with the current text/step so the wheel uses the latest value\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [text, step, min, max]);\n\n return (\n <div\n className={className}\n style={{\n display: 'flex',\n height: 30,\n borderRadius: 8,\n border: '1px solid var(--ui-border)',\n background: 'var(--ui-surface)',\n overflow: 'hidden',\n ...style,\n }}\n >\n <input\n ref={inputRef}\n aria-label={ariaLabel}\n inputMode=\"numeric\"\n value={text}\n onChange={(e) => {\n const digits = e.target.value.replace(/[^\\d]/g, '');\n setText(digits);\n if (digits !== '') onChange(clampValue(Number(digits)));\n }}\n onBlur={() => {\n const parsed = Number(text);\n commit(Number.isFinite(parsed) && text !== '' ? parsed : value);\n }}\n onKeyDown={(e) => {\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n stepBy(1);\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n stepBy(-1);\n } else if (e.key === 'Enter') {\n e.preventDefault();\n inputRef.current?.blur();\n }\n }}\n style={{\n width: '100%',\n minWidth: 0,\n border: 'none',\n outline: 'none',\n background: 'transparent',\n color: 'var(--ui-text)',\n textAlign: 'center',\n fontSize: 12,\n }}\n />\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n borderLeft: '1px solid var(--ui-border)',\n flexShrink: 0,\n }}\n >\n <button\n type=\"button\"\n aria-label={`Increase ${ariaLabel}`}\n onClick={() => stepBy(1)}\n style={buttonStyle}\n onMouseEnter={(e) => (e.currentTarget.style.background = 'var(--ui-surface-2)')}\n onMouseLeave={(e) => (e.currentTarget.style.background = 'none')}\n >\n ▲\n </button>\n <button\n type=\"button\"\n aria-label={`Decrease ${ariaLabel}`}\n onClick={() => stepBy(-1)}\n style={{ ...buttonStyle, borderTop: '1px solid var(--ui-border)' }}\n onMouseEnter={(e) => (e.currentTarget.style.background = 'var(--ui-surface-2)')}\n onMouseLeave={(e) => (e.currentTarget.style.background = 'none')}\n >\n ▼\n </button>\n </div>\n </div>\n );\n}\n","export interface PixelPoint {\n x: number;\n y: number;\n}\n\n/**\n * Maps a viewport pointer position to a pixel of the captured screen frame.\n * The overlay renders the frozen frame stretched to the viewport, so the\n * mapping is linear; values are clamped to the image bounds.\n */\nexport function mapClientToPixel(\n clientX: number,\n clientY: number,\n viewportWidth: number,\n viewportHeight: number,\n imageWidth: number,\n imageHeight: number,\n): PixelPoint {\n const safeWidth = Math.max(1, viewportWidth);\n const safeHeight = Math.max(1, viewportHeight);\n return {\n x: Math.min(imageWidth - 1, Math.max(0, Math.floor((clientX / safeWidth) * imageWidth))),\n y: Math.min(imageHeight - 1, Math.max(0, Math.floor((clientY / safeHeight) * imageHeight))),\n };\n}\n\n/** Whether the browser can capture the screen for the live colour preview. */\nexport function supportsScreenPick(): boolean {\n return (\n typeof navigator !== 'undefined' &&\n !!navigator.mediaDevices &&\n typeof navigator.mediaDevices.getDisplayMedia === 'function'\n );\n}\n","import { useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { mapClientToPixel } from './screen-color-picker';\nimport { rgbToHex } from './color.utils';\n\nexport interface ScreenCapture {\n dataUrl: string;\n width: number;\n height: number;\n context: CanvasRenderingContext2D;\n}\n\nexport interface ScreenCaptureOverlayProps {\n capture: ScreenCapture;\n labels?: {\n pickFromScreen?: string;\n clickToPick?: string;\n };\n onPick: (hex: string) => void;\n onCancel: () => void;\n}\n\nexport default function ScreenCaptureOverlay({\n capture,\n labels,\n onPick,\n onCancel,\n}: ScreenCaptureOverlayProps) {\n const [hover, setHover] = useState<{ hex: string; x: number; y: number } | null>(null);\n\n useEffect(() => {\n const onKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') onCancel();\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [onCancel]);\n\n if (typeof document === 'undefined') return null;\n\n return createPortal(\n <div\n role=\"dialog\"\n aria-label={labels?.pickFromScreen ?? 'Pick colour from screen'}\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 5000,\n cursor: 'crosshair',\n background: '#000',\n }}\n onPointerMove={(event) => {\n const point = mapClientToPixel(\n event.clientX,\n event.clientY,\n window.innerWidth,\n window.innerHeight,\n capture.width,\n capture.height,\n );\n const data = capture.context.getImageData(point.x, point.y, 1, 1).data;\n setHover({\n hex: rgbToHex({ r: data[0]!, g: data[1]!, b: data[2]! }),\n x: event.clientX,\n y: event.clientY,\n });\n }}\n onPointerLeave={() => setHover(null)}\n onClick={() => {\n if (hover) onPick(hover.hex);\n else onCancel();\n }}\n >\n <img\n src={capture.dataUrl}\n alt=\"\"\n draggable={false}\n style={{\n width: '100vw',\n height: '100vh',\n objectFit: 'fill',\n display: 'block',\n userSelect: 'none',\n }}\n />\n <div\n style={{\n position: 'fixed',\n top: 16,\n left: '50%',\n transform: 'translateX(-50%)',\n background: 'var(--ui-surface)',\n border: '1px solid var(--ui-border)',\n borderRadius: 8,\n padding: '6px 12px',\n color: 'var(--ui-text-2)',\n fontSize: 12,\n }}\n >\n {labels?.clickToPick ?? 'Click to pick · Esc to cancel'}\n </div>\n {hover && (\n <div\n style={{\n position: 'fixed',\n left: hover.x + 16,\n top: hover.y + 16,\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n background: 'var(--ui-surface)',\n border: '1px solid var(--ui-border)',\n borderRadius: 8,\n padding: '6px 8px',\n boxShadow: 'var(--ui-shadow)',\n pointerEvents: 'none',\n }}\n >\n <span\n style={{\n width: 18,\n height: 18,\n borderRadius: 4,\n background: hover.hex,\n border: '1px solid var(--ui-border)',\n }}\n />\n <span style={{ fontFamily: 'monospace', fontSize: 12, color: 'var(--ui-text)' }}>\n {hover.hex.toUpperCase()}\n </span>\n </div>\n )}\n </div>,\n document.body,\n );\n}\n","import { useEffect, useRef, useState, type CSSProperties } from 'react';\nimport { createPortal } from 'react-dom';\nimport { usePopover } from '../internal/usePopover';\nimport {\n clamp,\n hexToHsv,\n hsvToHex,\n hsvToRgb,\n normalizeHex,\n rgbToHsv,\n type Hsv,\n} from '../internal/color.utils';\nimport { NumberStepper } from './NumberStepper';\nimport { supportsScreenPick } from '../internal/screen-color-picker';\nimport ScreenCaptureOverlay, { type ScreenCapture } from '../internal/ScreenCaptureOverlay';\n\nconst inputStyle: CSSProperties = {\n padding: '7px 10px',\n borderRadius: 8,\n border: '1px solid var(--ui-border)',\n background: 'var(--ui-surface)',\n color: 'var(--ui-text)',\n fontSize: 12,\n fontFamily: 'monospace',\n outline: 'none',\n width: '100%',\n};\n\nconst iconButtonStyle: CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 32,\n height: 32,\n flexShrink: 0,\n borderRadius: 8,\n border: '1px solid var(--ui-border)',\n background: 'none',\n color: 'var(--ui-text-2)',\n cursor: 'pointer',\n};\n\nconst handleStyle: CSSProperties = {\n position: 'absolute',\n width: 14,\n height: 14,\n borderRadius: '50%',\n border: '2px solid var(--ui-on-accent)',\n boxShadow: '0 0 0 1px rgba(0, 0, 0, 0.45)',\n transform: 'translate(-50%, -50%)',\n pointerEvents: 'none',\n};\n\nconst DEFAULT_COLOR = '#8098b5';\n\ntype EyeDropperCtor = new () => { open: () => Promise<{ sRGBHex: string }> };\n\nexport interface ColorPickerLabels {\n picker?: string;\n saturationAndBrightness?: string;\n hue?: string;\n hexColor?: string;\n pickFromScreen?: string;\n presetColors?: string;\n presetColor?: (hex: string) => string;\n red?: string;\n green?: string;\n blue?: string;\n cancel?: string;\n done?: string;\n clickToPick?: string;\n saturationValueText?: (saturation: number, brightness: number) => string;\n}\n\nexport interface ColorPickerProps {\n value: string;\n onChange: (color: string) => void;\n /** Swatches offered by the caller (customizable per usage). */\n presets: string[];\n ariaLabel?: string;\n labels?: ColorPickerLabels;\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * Full colour picker styled with the library tokens (replaces the native\n * browser dialog): saturation/brightness area, hue slider, hex + RGB fields,\n * optional screen eyedropper and preset swatches.\n */\nexport function ColorPicker({\n value,\n onChange,\n presets,\n ariaLabel = 'Color',\n labels,\n className,\n style,\n}: ColorPickerProps) {\n const color = normalizeHex(value) ?? DEFAULT_COLOR;\n const [hsv, setHsv] = useState<Hsv>(() => hexToHsv(color) ?? { h: 0, s: 0, v: 1 });\n const [hexText, setHexText] = useState(color.toUpperCase());\n const lastEmitted = useRef(color);\n const originalColor = useRef(color);\n const svRef = useRef<HTMLDivElement>(null);\n const hueRef = useRef<HTMLDivElement>(null);\n const draggingSv = useRef(false);\n const draggingHue = useRef(false);\n\n /** Undo every change made since the picker was opened. */\n const revert = () => {\n const original = originalColor.current;\n if (lastEmitted.current === original) return;\n lastEmitted.current = original;\n setHsv(hexToHsv(original) ?? { h: 0, s: 0, v: 1 });\n setHexText(original.toUpperCase());\n onChange(original);\n };\n\n const { open, pos, triggerRef, menuRef, openMenu, closeMenu } = usePopover({\n maxHeight: 520,\n minWidth: 272,\n onDismiss: revert,\n });\n\n useEffect(() => {\n const normalized = normalizeHex(value);\n if (normalized && normalized !== lastEmitted.current) {\n lastEmitted.current = normalized;\n setHsv(hexToHsv(normalized) ?? { h: 0, s: 0, v: 1 });\n setHexText(normalized.toUpperCase());\n }\n }, [value]);\n\n const emit = (next: Hsv) => {\n const hex = hsvToHex(next);\n lastEmitted.current = hex;\n setHsv(next);\n setHexText(hex.toUpperCase());\n onChange(hex);\n };\n\n const toggleMenu = () => {\n if (open) {\n closeMenu();\n return;\n }\n originalColor.current = color;\n lastEmitted.current = color;\n setHsv(hexToHsv(color) ?? { h: 0, s: 0, v: 1 });\n setHexText(color.toUpperCase());\n openMenu();\n };\n\n const cancel = () => {\n revert();\n closeMenu(true);\n };\n\n const rgb = hsvToRgb(hsv);\n const hueColor = hsvToHex({ h: hsv.h, s: 1, v: 1 });\n\n const updateSv = (clientX: number, clientY: number) => {\n const el = svRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n if (!rect.width || !rect.height) return;\n emit({\n ...hsv,\n s: clamp((clientX - rect.left) / rect.width, 0, 1),\n v: 1 - clamp((clientY - rect.top) / rect.height, 0, 1),\n });\n };\n\n const updateHue = (clientX: number) => {\n const el = hueRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n if (!rect.width) return;\n emit({ ...hsv, h: clamp((clientX - rect.left) / rect.width, 0, 1) * 360 });\n };\n\n const [eyedropper, setEyedropper] = useState<EyeDropperCtor | null>(null);\n const [canScreenPick, setCanScreenPick] = useState(false);\n const [capture, setCapture] = useState<ScreenCapture | null>(null);\n\n useEffect(() => {\n const ctor = (window as unknown as { EyeDropper?: EyeDropperCtor }).EyeDropper ?? null;\n // `EyeDropper` is a class (a function): setState would invoke it as an\n // updater if it were passed directly.\n setEyedropper(() => ctor);\n setCanScreenPick(supportsScreenPick());\n }, []);\n\n const pickWithEyeDropper = async () => {\n if (!eyedropper) return;\n try {\n const result = await new eyedropper().open();\n const parsed = normalizeHex(result.sRGBHex);\n if (parsed) emit(hexToHsv(parsed) ?? hsv);\n } catch {\n // cancelled by the user\n }\n };\n\n /**\n * Native EyeDropper first: the OS picker needs no screen-sharing permission.\n * Only browsers without the EyeDropper API fall back to a frozen screen\n * capture with a live colour preview.\n */\n const startScreenPick = async () => {\n if (eyedropper) {\n await pickWithEyeDropper();\n return;\n }\n if (!supportsScreenPick()) return;\n let stream: MediaStream | null = null;\n try {\n stream = await navigator.mediaDevices.getDisplayMedia({ video: true });\n const video = document.createElement('video');\n video.srcObject = stream;\n video.muted = true;\n await video.play();\n if (!video.videoWidth) {\n await new Promise<void>((resolve) => {\n video.addEventListener('loadedmetadata', () => resolve(), { once: true });\n });\n }\n const canvas = document.createElement('canvas');\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n const context = canvas.getContext('2d', { willReadFrequently: true });\n if (!context) throw new Error('canvas unavailable');\n context.drawImage(video, 0, 0);\n setCapture({\n dataUrl: canvas.toDataURL('image/png'),\n width: canvas.width,\n height: canvas.height,\n context,\n });\n } catch {\n // permission denied/unsupported\n } finally {\n stream?.getTracks().forEach((track) => track.stop());\n }\n };\n\n return (\n <div\n className={className}\n style={{ display: 'inline-flex', flexShrink: 0, width: 148, ...style }}\n >\n <button\n ref={triggerRef}\n type=\"button\"\n className=\"ui-dropdown-trigger is-md\"\n aria-label={ariaLabel}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n onClick={toggleMenu}\n >\n <span className=\"ui-dropdown-dot\" style={{ background: color }} />\n <span className=\"ui-dropdown-value\" style={{ fontSize: 12, fontFamily: 'monospace' }}>\n {color.toUpperCase()}\n </span>\n <span className=\"ui-dropdown-caret\" aria-hidden=\"true\">\n ▾\n </span>\n </button>\n\n {open &&\n typeof document !== 'undefined' &&\n createPortal(\n <div\n ref={menuRef}\n className=\"ui-dropdown-menu\"\n role=\"dialog\"\n aria-label={labels?.picker ?? `${ariaLabel} picker`}\n style={{\n left: pos.left,\n top: pos.top,\n bottom: pos.bottom,\n width: pos.width,\n maxHeight: pos.maxHeight,\n }}\n >\n <div\n style={{\n padding: 10,\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n gap: 10,\n }}\n >\n <div\n ref={svRef}\n role=\"slider\"\n aria-label={labels?.saturationAndBrightness ?? 'Saturation and brightness'}\n aria-valuetext={\n labels?.saturationValueText?.(Math.round(hsv.s * 100), Math.round(hsv.v * 100)) ??\n `Saturation ${Math.round(hsv.s * 100)}%, brightness ${Math.round(hsv.v * 100)}%`\n }\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n emit({ ...hsv, s: clamp(hsv.s - 0.02, 0, 1) });\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n emit({ ...hsv, s: clamp(hsv.s + 0.02, 0, 1) });\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n emit({ ...hsv, v: clamp(hsv.v + 0.02, 0, 1) });\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n emit({ ...hsv, v: clamp(hsv.v - 0.02, 0, 1) });\n }\n }}\n onPointerDown={(e) => {\n draggingSv.current = true;\n updateSv(e.clientX, e.clientY);\n }}\n onPointerMove={(e) => {\n if (draggingSv.current) updateSv(e.clientX, e.clientY);\n }}\n onPointerUp={() => {\n draggingSv.current = false;\n }}\n onPointerLeave={() => {\n draggingSv.current = false;\n }}\n style={{\n position: 'relative',\n height: 150,\n borderRadius: 8,\n cursor: 'crosshair',\n touchAction: 'none',\n background: `linear-gradient(to top, #000, rgba(0,0,0,0)), linear-gradient(to right, #fff, ${hueColor})`,\n }}\n >\n <span\n style={{\n ...handleStyle,\n left: `${hsv.s * 100}%`,\n top: `${(1 - hsv.v) * 100}%`,\n background: hsvToHex(hsv),\n }}\n />\n </div>\n\n <div\n ref={hueRef}\n role=\"slider\"\n aria-label={labels?.hue ?? 'Hue'}\n aria-valuemin={0}\n aria-valuemax={360}\n aria-valuenow={Math.round(hsv.h)}\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n emit({ ...hsv, h: (hsv.h - 2 + 360) % 360 });\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n emit({ ...hsv, h: (hsv.h + 2) % 360 });\n } else if (e.key === 'Home') {\n e.preventDefault();\n emit({ ...hsv, h: 0 });\n } else if (e.key === 'End') {\n e.preventDefault();\n emit({ ...hsv, h: 359 });\n }\n }}\n onPointerDown={(e) => {\n draggingHue.current = true;\n updateHue(e.clientX);\n }}\n onPointerMove={(e) => {\n if (draggingHue.current) updateHue(e.clientX);\n }}\n onPointerUp={() => {\n draggingHue.current = false;\n }}\n onPointerLeave={() => {\n draggingHue.current = false;\n }}\n style={{\n position: 'relative',\n height: 12,\n borderRadius: 6,\n cursor: 'pointer',\n touchAction: 'none',\n background:\n 'linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%)',\n }}\n >\n <span\n style={{\n ...handleStyle,\n left: `${(hsv.h / 360) * 100}%`,\n top: '50%',\n width: 16,\n height: 16,\n background: hueColor,\n }}\n />\n </div>\n\n <div style={{ display: 'flex', gap: 8, alignItems: 'center' }}>\n <span\n aria-hidden=\"true\"\n style={{\n width: 32,\n height: 32,\n flexShrink: 0,\n borderRadius: 8,\n background: hsvToHex(hsv),\n border: '1px solid var(--ui-border)',\n }}\n />\n <input\n aria-label={labels?.hexColor ?? 'Hex colour'}\n value={hexText}\n onChange={(e) => {\n const raw = e.target.value;\n setHexText(raw);\n const parsed = normalizeHex(raw);\n if (parsed) {\n lastEmitted.current = parsed;\n setHsv(hexToHsv(parsed) ?? hsv);\n onChange(parsed);\n }\n }}\n onBlur={() => {\n if (!normalizeHex(hexText)) setHexText(hsvToHex(hsv).toUpperCase());\n }}\n onKeyDown={(e) => {\n if (e.key !== 'Enter') return;\n const parsed = normalizeHex(hexText);\n if (parsed) {\n e.preventDefault();\n emit(hexToHsv(parsed) ?? hsv);\n closeMenu(true);\n }\n }}\n style={inputStyle}\n />\n {(canScreenPick || eyedropper) && (\n <button\n type=\"button\"\n aria-label={labels?.pickFromScreen ?? 'Pick colour from screen'}\n title={labels?.pickFromScreen ?? 'Pick colour from screen'}\n onClick={() => void startScreenPick()}\n style={iconButtonStyle}\n >\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.7\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"m19 3-4 4\" />\n <path d=\"M14.5 4.5 19.5 9.5\" />\n <path d=\"M12.5 6.5 17.5 11.5 8 21H3v-5z\" />\n </svg>\n </button>\n )}\n </div>\n\n <div style={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: 8 }}>\n {(['r', 'g', 'b'] as const).map((channel, index) => (\n <label\n key={channel}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n fontSize: 11,\n color: 'var(--ui-text-2)',\n }}\n >\n {['R', 'G', 'B'][index]}\n <NumberStepper\n ariaLabel={\n [labels?.red ?? 'Red', labels?.green ?? 'Green', labels?.blue ?? 'Blue'][\n index\n ]!\n }\n value={rgb[channel]}\n min={0}\n max={255}\n onChange={(next) => emit(rgbToHsv({ ...rgb, [channel]: next }))}\n />\n </label>\n ))}\n </div>\n\n <div\n role=\"group\"\n aria-label={labels?.presetColors ?? 'Preset colours'}\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(6, 24px)',\n justifyContent: 'space-between',\n gap: 8,\n width: '100%',\n }}\n >\n {presets.map((preset) => (\n <button\n key={preset}\n type=\"button\"\n aria-label={labels?.presetColor?.(preset) ?? `Colour ${preset}`}\n title={preset}\n onClick={() => emit(hexToHsv(preset) ?? hsv)}\n style={{\n width: 24,\n height: 24,\n borderRadius: '50%',\n background: preset,\n border:\n color.toLowerCase() === preset.toLowerCase()\n ? '2px solid var(--ui-text)'\n : '2px solid transparent',\n cursor: 'pointer',\n }}\n />\n ))}\n </div>\n\n <div style={{ display: 'flex', justifyContent: 'flex-end', gap: 8 }}>\n <button\n type=\"button\"\n aria-label={labels?.cancel ?? 'Cancel'}\n onClick={cancel}\n style={{\n padding: '7px 14px',\n borderRadius: 8,\n background: 'none',\n color: 'var(--ui-text-2)',\n fontWeight: 600,\n fontSize: 12,\n border: '1px solid var(--ui-border)',\n cursor: 'pointer',\n }}\n >\n {labels?.cancel ?? 'Cancel'}\n </button>\n <button\n type=\"button\"\n aria-label={labels?.done ?? 'Done'}\n onClick={() => closeMenu(true)}\n style={{\n padding: '7px 14px',\n borderRadius: 8,\n background: 'var(--ui-accent)',\n color: 'var(--ui-on-accent)',\n fontWeight: 600,\n fontSize: 12,\n border: 'none',\n cursor: 'pointer',\n }}\n >\n {labels?.done ?? 'Done'}\n </button>\n </div>\n </div>\n </div>,\n document.body,\n )}\n\n {capture && (\n <ScreenCaptureOverlay\n capture={capture}\n labels={labels}\n onPick={(hex) => {\n emit(hexToHsv(hex) ?? hsv);\n closeMenu(true);\n setCapture(null);\n }}\n onCancel={() => setCapture(null)}\n />\n )}\n </div>\n );\n}\n","import { useEffect, useRef, type RefObject } from 'react';\n\nconst FOCUSABLE =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nexport function useFocusTrap({\n active,\n containerRef,\n initialFocusRef,\n onEscape,\n}: {\n active: boolean;\n containerRef: RefObject<HTMLElement | null>;\n initialFocusRef?: RefObject<HTMLElement | null>;\n onEscape: () => void;\n}) {\n const escapeRef = useRef(onEscape);\n escapeRef.current = onEscape;\n\n useEffect(() => {\n if (!active || typeof document === 'undefined') return;\n\n const previousFocus = document.activeElement as HTMLElement | null;\n const container = containerRef.current;\n const initialFocus =\n initialFocusRef?.current ??\n container?.querySelector<HTMLElement>(FOCUSABLE) ??\n container ??\n null;\n\n initialFocus?.focus();\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n escapeRef.current();\n return;\n }\n\n if (event.key !== 'Tab' || !container) return;\n\n const focusable = Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE)).filter(\n (element) => element.getAttribute('aria-hidden') !== 'true',\n );\n\n if (focusable.length === 0) {\n event.preventDefault();\n container.focus();\n return;\n }\n\n const first = focusable[0]!;\n const last = focusable[focusable.length - 1]!;\n\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n };\n\n document.addEventListener('keydown', onKeyDown);\n\n return () => {\n document.removeEventListener('keydown', onKeyDown);\n previousFocus?.focus?.();\n };\n }, [active, containerRef, initialFocusRef]);\n}\n","import { useId, useRef, type CSSProperties, type ReactNode, type RefObject } from 'react';\nimport { useFocusTrap } from '../internal/useFocusTrap';\n\nexport interface ModalProps {\n open: boolean;\n title: string;\n onClose: () => void;\n children: ReactNode;\n maxWidth?: number;\n /** Overrides the panel defaults (e.g. a taller, non-scrolling viewer). */\n panelStyle?: CSSProperties;\n panelClassName?: string;\n closeLabel?: string;\n /** Element focused when the modal opens; defaults to the first focusable child. */\n initialFocusRef?: RefObject<HTMLElement | null>;\n closeOnBackdrop?: boolean;\n closeOnEscape?: boolean;\n}\n\nconst overlay: CSSProperties = {\n position: 'fixed',\n inset: 0,\n background: 'var(--ui-overlay)',\n zIndex: 1500,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n};\n\nconst headerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 12,\n marginBottom: 16,\n};\n\n/**\n * Generic modal shell (overlay + centered panel). Traps focus, closes on\n * Escape/backdrop by default, restores focus on close and keeps content in the\n * caller.\n */\nexport default function Modal({\n open,\n title,\n onClose,\n children,\n maxWidth = 440,\n panelStyle,\n panelClassName,\n closeLabel = 'Close',\n initialFocusRef,\n closeOnBackdrop = true,\n closeOnEscape = true,\n}: ModalProps) {\n const titleId = useId();\n const panelRef = useRef<HTMLDivElement>(null);\n\n useFocusTrap({\n active: open,\n containerRef: panelRef,\n initialFocusRef,\n onEscape: closeOnEscape ? onClose : () => {},\n });\n\n if (!open) return null;\n\n return (\n <div style={overlay} onClick={closeOnBackdrop ? onClose : undefined}>\n <div\n ref={panelRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n tabIndex={-1}\n onClick={(e) => e.stopPropagation()}\n style={{\n background: 'var(--ui-surface)',\n border: '1px solid var(--ui-border)',\n borderRadius: 14,\n padding: 24,\n maxWidth,\n width: '92%',\n maxHeight: '85vh',\n overflowY: 'auto',\n boxShadow: 'var(--ui-shadow-lg)',\n outline: 'none',\n ...panelStyle,\n }}\n className={`ui-scroll-y${panelClassName ? ` ${panelClassName}` : ''}`}\n >\n <div style={headerStyle}>\n <div id={titleId} style={{ fontSize: 16, fontWeight: 700, color: 'var(--ui-text)' }}>\n {title}\n </div>\n <button\n type=\"button\"\n aria-label={closeLabel}\n onClick={onClose}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: '1px solid var(--ui-border)',\n background: 'var(--ui-surface-2)',\n color: 'var(--ui-text-2)',\n borderRadius: 7,\n fontSize: 13,\n lineHeight: 1,\n padding: '5px 8px',\n cursor: 'pointer',\n }}\n >\n ✕\n </button>\n </div>\n {children}\n </div>\n </div>\n );\n}\n","import Modal from './Modal';\nimport type { CSSProperties } from 'react';\n\nexport interface ConfirmModalProps {\n open: boolean;\n title: string;\n message: string;\n onConfirm: () => void;\n onCancel: () => void;\n danger?: boolean;\n confirmLabel?: string;\n cancelLabel?: string;\n panelStyle?: CSSProperties;\n panelClassName?: string;\n}\n\nexport default function ConfirmModal({\n open,\n title,\n message,\n onConfirm,\n onCancel,\n danger = false,\n confirmLabel,\n cancelLabel = 'Cancel',\n panelStyle,\n panelClassName,\n}: ConfirmModalProps) {\n return (\n <Modal\n open={open}\n title={title}\n onClose={onCancel}\n maxWidth={380}\n panelStyle={panelStyle}\n panelClassName={panelClassName}\n >\n <div\n style={{\n fontSize: 13,\n color: 'var(--ui-text-2)',\n lineHeight: 1.6,\n marginBottom: 22,\n }}\n >\n {message}\n </div>\n <div style={{ display: 'flex', gap: 10, justifyContent: 'flex-end' }}>\n <button\n type=\"button\"\n onClick={onCancel}\n style={{\n padding: '9px 18px',\n borderRadius: 8,\n border: '1px solid var(--ui-border)',\n background: 'none',\n color: 'var(--ui-text-2)',\n fontSize: 13,\n cursor: 'pointer',\n fontWeight: 500,\n }}\n >\n {cancelLabel}\n </button>\n <button\n type=\"button\"\n onClick={onConfirm}\n style={{\n padding: '9px 22px',\n borderRadius: 8,\n border: 'none',\n background: danger ? 'var(--ui-red)' : 'var(--ui-accent)',\n color: 'var(--ui-on-accent)',\n fontSize: 13,\n fontWeight: 700,\n cursor: 'pointer',\n }}\n >\n {confirmLabel ?? (danger ? 'Delete' : 'Confirm')}\n </button>\n </div>\n </Modal>\n );\n}\n","/**\n * Copies text to the clipboard with a legacy fallback.\n *\n * `navigator.clipboard` is unavailable on insecure origins (plain HTTP on a\n * non-localhost host) and its promise can reject (permission denied, document\n * not focused). The previous call sites used `writeText(...).then(...)` without\n * a catch, so any failure silently swallowed the whole click feedback. This\n * helper always resolves to a boolean and falls back to the deprecated\n * `execCommand('copy')`, which still works without the async clipboard API.\n */\nexport async function copyToClipboard(text: string): Promise<boolean> {\n try {\n if (navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n return true;\n }\n } catch {\n // fall through to the legacy path\n }\n\n try {\n const previouslyFocused = document.activeElement as HTMLElement | null;\n const textarea = document.createElement('textarea');\n textarea.value = text;\n textarea.setAttribute('readonly', '');\n textarea.style.position = 'fixed';\n textarea.style.top = '-1000px';\n textarea.style.opacity = '0';\n document.body.appendChild(textarea);\n textarea.select();\n textarea.setSelectionRange(0, text.length);\n const ok = document.execCommand('copy');\n document.body.removeChild(textarea);\n // The hidden textarea steals focus; give it back so hover/focus states\n // (tooltips, cursor feedback) are not interrupted by the copy.\n if (previouslyFocused && previouslyFocused !== document.body) {\n previouslyFocused.focus?.();\n }\n return ok;\n } catch {\n return false;\n }\n}\n","import {\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { useIsomorphicLayoutEffect } from '../internal/useIsomorphicLayoutEffect';\n\nexport interface TooltipProps {\n /** Panel content — usually the raw value an alias is covering. */\n content: ReactNode;\n children: ReactNode;\n maxWidth?: number;\n /** Delay before showing, in ms (0 shows immediately — used by tests). */\n delay?: number;\n /** Extra style for the trigger wrapper (e.g. `flex: 1` to wrap a Dropdown). */\n style?: CSSProperties;\n className?: string;\n /** Suppresses the panel (e.g. while the wrapped dropdown is open). */\n disabled?: boolean;\n /** Trigger element; use `div` when wrapping block content (e.g. a dropdown option). */\n as?: 'span' | 'div';\n}\n\nconst GAP = 8;\n\n/**\n * Custom design-system tooltip: renders the panel in a portal (rows clip with\n * `overflow: hidden`, so a nested panel would be cut), flips above/below the\n * trigger based on available space and clamps to the viewport horizontally.\n */\nexport default function Tooltip({\n content,\n children,\n maxWidth = 260,\n delay = 120,\n style,\n className,\n disabled = false,\n as = 'span',\n}: TooltipProps) {\n const [open, setOpen] = useState(false);\n const [viewportWidth, setViewportWidth] = useState<number | null>(null);\n const [pos, setPos] = useState<{ left: number; top: number; below: boolean }>({\n left: 0,\n top: 0,\n below: false,\n });\n const triggerRef = useRef<HTMLSpanElement | HTMLDivElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const hoveredRef = useRef(false);\n const tooltipId = useId();\n\n useEffect(() => {\n const onResize = () => setViewportWidth(window.innerWidth);\n onResize();\n window.addEventListener('resize', onResize);\n return () => window.removeEventListener('resize', onResize);\n }, []);\n\n // Never let the panel exceed the viewport: the panel keeps its content width\n // (`max-content`, otherwise the browser shrinks it to the longest word when\n // the trigger sits near the right edge) and is clamped by this max-width.\n const panelMaxWidth = Math.min(\n maxWidth,\n Math.max(0, (viewportWidth ?? maxWidth + GAP * 2) - GAP * 2),\n );\n\n const position = useCallback(() => {\n const trigger = triggerRef.current;\n const panel = panelRef.current;\n if (!trigger || !panel) return;\n const rect = trigger.getBoundingClientRect();\n const width = panel.offsetWidth;\n const height = panel.offsetHeight;\n const half = width / 2;\n const left = Math.min(\n Math.max(rect.left + rect.width / 2, half + GAP),\n window.innerWidth - half - GAP,\n );\n const spaceAbove = rect.top - GAP;\n const spaceBelow = window.innerHeight - rect.bottom - GAP;\n // Prefer above the trigger; only drop below when the panel does not fit\n // above. If it fits in neither direction, use the larger side.\n const fitsAbove = spaceAbove >= height;\n const fitsBelow = spaceBelow >= height;\n const below = !fitsAbove && (fitsBelow || spaceBelow >= spaceAbove);\n setPos({ left, top: below ? rect.bottom + GAP : rect.top - GAP, below });\n }, []);\n\n const show = useCallback(() => {\n if (disabled) return;\n if (timerRef.current) clearTimeout(timerRef.current);\n if (delay <= 0) {\n setOpen(true);\n return;\n }\n timerRef.current = setTimeout(() => setOpen(true), delay);\n }, [delay, disabled]);\n\n const hide = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current);\n setOpen(false);\n }, []);\n\n useEffect(() => {\n if (disabled) hide();\n }, [disabled, hide]);\n\n useEffect(\n () => () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n },\n [],\n );\n\n useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') hide();\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [open, hide]);\n\n useIsomorphicLayoutEffect(() => {\n if (open) position();\n }, [open, position]);\n\n useEffect(() => {\n if (!open) return;\n const reposition = () => position();\n window.addEventListener('resize', reposition);\n window.addEventListener('scroll', reposition, true);\n return () => {\n window.removeEventListener('resize', reposition);\n window.removeEventListener('scroll', reposition, true);\n };\n }, [open, position]);\n\n const wrapperStyle = {\n display: as === 'div' ? 'block' : 'inline-flex',\n minWidth: 0,\n maxWidth: '100%',\n ...style,\n };\n const handlers = {\n onMouseEnter: () => {\n hoveredRef.current = true;\n show();\n },\n onMouseLeave: () => {\n hoveredRef.current = false;\n hide();\n },\n onFocus: show,\n onBlur: () => {\n // The legacy clipboard fallback steals focus to a hidden textarea; while\n // the pointer is still over the trigger the panel must stay open.\n if (!hoveredRef.current) hide();\n },\n };\n const panel =\n open && typeof document !== 'undefined'\n ? createPortal(\n <div\n ref={panelRef}\n id={tooltipId}\n role=\"tooltip\"\n className=\"ui-tooltip\"\n style={{\n left: pos.left,\n top: pos.top,\n width: 'max-content',\n maxWidth: panelMaxWidth,\n overflowWrap: 'break-word',\n transform: pos.below ? 'translate(-50%, 0)' : 'translate(-50%, -100%)',\n }}\n >\n {content}\n </div>,\n document.body,\n )\n : null;\n\n if (as === 'div') {\n return (\n <div\n ref={triggerRef as Ref<HTMLDivElement>}\n className={className}\n style={wrapperStyle}\n aria-describedby={open ? tooltipId : undefined}\n {...handlers}\n >\n {children}\n {panel}\n </div>\n );\n }\n\n return (\n <span\n ref={triggerRef as Ref<HTMLSpanElement>}\n className={className}\n style={wrapperStyle}\n aria-describedby={open ? tooltipId : undefined}\n {...handlers}\n >\n {children}\n {panel}\n </span>\n );\n}\n","import { useEffect, useRef, useState, type CSSProperties, type ReactNode } from 'react';\nimport { copyToClipboard } from '../internal/clipboard';\nimport Tooltip from './Tooltip';\n\nexport interface CopyValueLabels {\n copied?: string;\n clickToCopy?: string;\n tooltip?: string;\n}\n\nexport interface CopyValueProps {\n /** Raw value copied to the clipboard. */\n value: number | string;\n /** Visible content; defaults to `formatValue(value)`. */\n children?: ReactNode;\n /** Accessible name of the copy affordance. */\n ariaLabel: string;\n /** Formats the visible value. Defaults to `String(value)`. */\n formatValue?: (value: number | string) => ReactNode;\n /** Serializes the value copied to the clipboard. Defaults to `String(value)`. */\n copyValue?: (value: number | string) => string;\n /** Label shown in the tooltip above the copied value. */\n tooltipLabel?: string;\n labels?: CopyValueLabels;\n className?: string;\n style?: CSSProperties;\n /** Style for the tooltip trigger wrapper (e.g. right alignment in a header). */\n wrapperStyle?: CSSProperties;\n}\n\n/**\n * Click-to-copy value. The panel is informational only (the click itself\n * copies). Formatting and clipboard serialization are injectable so the\n * component stays independent from an application's currency helpers.\n */\nexport default function CopyValue({\n value,\n children,\n ariaLabel,\n formatValue = (current) => String(current),\n copyValue = (current) => String(current),\n tooltipLabel,\n labels,\n className,\n style,\n wrapperStyle,\n}: CopyValueProps) {\n const [copied, setCopied] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(\n () => () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n },\n [],\n );\n\n const copy = () => {\n copyToClipboard(copyValue(value)).then((ok) => {\n if (!ok) return;\n setCopied(true);\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => setCopied(false), 2000);\n });\n };\n\n return (\n <Tooltip\n content={\n copied ? (\n <span style={{ color: 'var(--ui-green)', fontWeight: 600 }}>\n {labels?.copied ?? '✓ Copied'}\n </span>\n ) : (\n <>\n <span className=\"ui-tooltip-label\">{tooltipLabel ?? labels?.tooltip ?? 'Amount'}</span>\n {labels?.clickToCopy ?? 'Click to copy'}\n </>\n )\n }\n delay={0}\n style={wrapperStyle}\n >\n <span\n role=\"button\"\n tabIndex={0}\n aria-label={ariaLabel}\n className={'ui-copy-value' + (className ? ' ' + className : '')}\n onClick={copy}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n copy();\n }\n }}\n style={{\n ...style,\n cursor: copied ? 'default' : 'pointer',\n color: copied ? 'var(--ui-green)' : style?.color,\n }}\n >\n {children ?? formatValue(value)}\n </span>\n </Tooltip>\n );\n}\n","import {\n useMemo,\n useState,\n type CSSProperties,\n type KeyboardEvent as ReactKeyboardEvent,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { usePopover } from '../internal/usePopover';\n\nfunction parseISO(value: string): Date | null {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})/.exec(value ?? '');\n if (!match) return null;\n const date = new Date(Number(match[1]), Number(match[2]) - 1, Number(match[3]));\n return Number.isNaN(date.getTime()) ? null : date;\n}\n\nfunction toISO(date: Date): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n}\n\nexport interface DatePickerProps {\n /** ISO date (`YYYY-MM-DD`) or empty string. */\n value: string;\n onChange: (value: string) => void;\n ariaLabel?: string;\n placeholder?: string;\n disabled?: boolean;\n invalid?: boolean;\n /** Trigger label style: `friendly` = \"Mar 30, 2026\", `short` = \"03/30/2026\". */\n format?: 'friendly' | 'short';\n /** `sm` for compact table cells, `md` for form fields (matches input height). */\n size?: 'sm' | 'md';\n fontSize?: number;\n /** Extra style for the trigger button (e.g. tighter horizontal padding in a narrow cell). */\n triggerStyle?: CSSProperties;\n /** BCP 47 locale used for formatting month/weekday labels. Defaults to `en-US`. */\n locale?: string;\n /** Overrides the narrow weekday labels. The list starts on Sunday. */\n weekdayLabels?: string[];\n previousMonthLabel?: string;\n nextMonthLabel?: string;\n clearLabel?: string;\n todayLabel?: string;\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * Themed calendar trigger. The month grid is portaled and follows the shared\n * popover behavior (flip/reposition/outside-click/Escape) so it is never clipped\n * and matches the design system instead of the native OS date picker.\n */\nexport default function DatePicker({\n value,\n onChange,\n ariaLabel = 'Date',\n placeholder = 'Select date',\n disabled = false,\n invalid = false,\n format = 'friendly',\n size = 'sm',\n fontSize = 13,\n triggerStyle,\n locale = 'en-US',\n weekdayLabels,\n previousMonthLabel = 'Previous month',\n nextMonthLabel = 'Next month',\n clearLabel = 'Clear',\n todayLabel = 'Today',\n className,\n style,\n}: DatePickerProps) {\n const selected = parseISO(value);\n const [view, setView] = useState(() => {\n const base = selected ?? new Date();\n return { year: base.getFullYear(), month: base.getMonth() };\n });\n const { open, pos, triggerRef, menuRef, openMenu, closeMenu } = usePopover({\n maxHeight: 360,\n minWidth: 264,\n fitContent: true,\n });\n\n const defaultWeekdayLabels = useMemo(() => {\n const formatter = new Intl.DateTimeFormat(locale, { weekday: 'narrow' });\n return Array.from({ length: 7 }, (_, index) => formatter.format(new Date(2024, 0, 7 + index)));\n }, [locale]);\n\n const weekdays = weekdayLabels ?? defaultWeekdayLabels;\n const monthTitle = useMemo(\n () =>\n new Intl.DateTimeFormat(locale, { month: 'long', year: 'numeric' }).format(\n new Date(view.year, view.month, 1),\n ),\n [locale, view.month, view.year],\n );\n\n const showCalendar = () => {\n if (disabled) return;\n const base = parseISO(value) ?? new Date();\n setView({ year: base.getFullYear(), month: base.getMonth() });\n openMenu();\n };\n\n const shiftMonth = (delta: number) =>\n setView((current) => {\n const next = new Date(current.year, current.month + delta, 1);\n return { year: next.getFullYear(), month: next.getMonth() };\n });\n\n const firstOfMonth = new Date(view.year, view.month, 1);\n const gridStart = new Date(view.year, view.month, 1 - firstOfMonth.getDay());\n const cells = Array.from(\n { length: 42 },\n (_, index) =>\n new Date(gridStart.getFullYear(), gridStart.getMonth(), gridStart.getDate() + index),\n );\n\n const todayISO = toISO(new Date());\n const label = selected\n ? format === 'short'\n ? selected.toLocaleDateString(locale, {\n month: '2-digit',\n day: '2-digit',\n year: 'numeric',\n })\n : selected.toLocaleDateString(locale, {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n })\n : '';\n\n const onTriggerKeyDown = (event: ReactKeyboardEvent<HTMLButtonElement>) => {\n if (disabled) return;\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n if (open) closeMenu(true);\n else showCalendar();\n }\n };\n\n const pick = (iso: string) => {\n onChange(iso);\n closeMenu(true);\n };\n\n return (\n <div className={`ui-dropdown${className ? ` ${className}` : ''}`} style={style}>\n <button\n ref={triggerRef}\n type=\"button\"\n className={\n 'ui-dropdown-trigger' + (size === 'md' ? ' is-md' : '') + (invalid ? ' is-invalid' : '')\n }\n style={triggerStyle}\n aria-label={ariaLabel}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n disabled={disabled}\n onClick={() => (open ? closeMenu() : showCalendar())}\n onKeyDown={onTriggerKeyDown}\n >\n <span\n className=\"ui-dropdown-value\"\n style={{ fontSize, color: label ? 'var(--ui-text)' : 'var(--ui-text-3)' }}\n >\n {label || placeholder}\n </span>\n <svg\n className=\"ui-datepicker-icon\"\n width=\"13\"\n height=\"13\"\n viewBox=\"0 0 13 13\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.3\"\n aria-hidden=\"true\"\n >\n <rect x=\"1.5\" y=\"2.5\" width=\"10\" height=\"9\" rx=\"1.5\" />\n <line x1=\"1.5\" y1=\"5.5\" x2=\"11.5\" y2=\"5.5\" />\n <line x1=\"4.5\" y1=\"1\" x2=\"4.5\" y2=\"3.5\" />\n <line x1=\"8.5\" y1=\"1\" x2=\"8.5\" y2=\"3.5\" />\n </svg>\n </button>\n {open &&\n typeof document !== 'undefined' &&\n createPortal(\n <div\n ref={menuRef}\n className=\"ui-datepicker-menu\"\n role=\"dialog\"\n aria-label={ariaLabel}\n style={{ left: pos.left, top: pos.top, bottom: pos.bottom, width: pos.width }}\n >\n <div className=\"ui-datepicker-head\">\n <span className=\"ui-datepicker-title\">{monthTitle}</span>\n <span className=\"ui-datepicker-nav\">\n <button\n type=\"button\"\n aria-label={previousMonthLabel}\n onClick={() => shiftMonth(-1)}\n >\n ‹\n </button>\n <button type=\"button\" aria-label={nextMonthLabel} onClick={() => shiftMonth(1)}>\n ›\n </button>\n </span>\n </div>\n <div className=\"ui-datepicker-grid\">\n {weekdays.map((weekday, index) => (\n <span key={`${weekday}-${index}`} className=\"ui-datepicker-wd\">\n {weekday}\n </span>\n ))}\n {cells.map((cell) => {\n const iso = toISO(cell);\n const isOutside = cell.getMonth() !== view.month;\n const isSelected = !!selected && toISO(selected) === iso;\n const isToday = todayISO === iso;\n return (\n <button\n key={iso}\n type=\"button\"\n className={\n 'ui-datepicker-day' +\n (isOutside ? ' is-out' : '') +\n (isToday ? ' is-today' : '') +\n (isSelected ? ' is-selected' : '')\n }\n aria-current={isToday ? 'date' : undefined}\n onClick={() => pick(iso)}\n >\n {cell.getDate()}\n </button>\n );\n })}\n </div>\n <div className=\"ui-datepicker-foot\">\n <button type=\"button\" onClick={() => pick('')}>\n {clearLabel}\n </button>\n <button type=\"button\" onClick={() => pick(todayISO)}>\n {todayLabel}\n </button>\n </div>\n </div>,\n document.body,\n )}\n </div>\n );\n}\n","import {\n useCallback,\n useEffect,\n useId,\n useState,\n type CSSProperties,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { usePopover } from '../internal/usePopover';\nimport Tooltip from './Tooltip';\n\nexport interface DropdownOption {\n value: string;\n label: string;\n /** Optional swatch color rendered as a dot in the option (and in the trigger when `dot`). */\n color?: string;\n /** Optional leading icon rendered in the option (and in the trigger when selected). */\n icon?: ReactNode;\n /** Optional tooltip shown while hovering the option (e.g. the raw card number). */\n hint?: string;\n /** Label of the hint tooltip. */\n hintLabel?: string;\n /**\n * Nested options revealed when this one is selected. The parent is not\n * committed: the user must pick one of the children (used when an alias\n * groups several card patterns).\n */\n children?: DropdownOption[];\n}\n\nexport interface DropdownProps {\n value: string;\n onChange: (value: string) => void;\n options: DropdownOption[];\n ariaLabel: string;\n /** Shown by the trigger when `value` matches no option. */\n placeholder?: string;\n title?: string;\n /** Trigger text color (falls back to `var(--ui-text-2)`). */\n color?: string;\n /** Render a color dot before the value when a `color` is given. */\n dot?: boolean;\n fontSize?: number;\n fontWeight?: number;\n /** `sm` for compact table cells, `md` for form fields (matches input height). */\n size?: 'sm' | 'md';\n /** When false the trigger shrinks to its content (e.g. filter bars). */\n fullWidth?: boolean;\n disabled?: boolean;\n maxHeight?: number;\n /** Notifies the owner when the list opens/closes (used to suppress trigger tooltips). */\n onOpenChange?: (open: boolean) => void;\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * Accessible custom select. The option list is rendered in a portal so it is\n * never clipped by ancestor `overflow: hidden` (transaction rows live inside\n * grouped containers that clip), and is styled with the app theme + custom\n * scrollbar instead of the native OS dropdown.\n */\nexport default function Dropdown({\n value,\n onChange,\n options,\n ariaLabel,\n placeholder = '—',\n title,\n color,\n dot = false,\n fontSize = 13,\n fontWeight,\n size = 'sm',\n fullWidth = true,\n disabled = false,\n maxHeight = 260,\n onOpenChange,\n className,\n style,\n}: DropdownProps) {\n const [activeIndex, setActiveIndex] = useState(0);\n const [expanded, setExpanded] = useState<DropdownOption | null>(null);\n const listboxId = useId();\n\n const goBack = useCallback(() => {\n if (!expanded) return;\n const parentIndex = options.findIndex(\n (option) => option.value === expanded.value && option.label === expanded.label,\n );\n setExpanded(null);\n setActiveIndex(parentIndex >= 0 ? parentIndex : 0);\n }, [expanded, options]);\n\n const handleEscape = useCallback(() => {\n if (!expanded) return false;\n goBack();\n return true;\n }, [expanded, goBack]);\n\n const { open, pos, triggerRef, menuRef, openMenu, closeMenu } = usePopover({\n maxHeight,\n onEscape: handleEscape,\n });\n\n const selectedIndex = options.findIndex((o) => o.value === value);\n const selected = selectedIndex >= 0 ? options[selectedIndex] : undefined;\n const currentOptions = expanded?.children ?? options;\n\n const showMenu = useCallback(() => {\n if (disabled || options.length === 0) return;\n setExpanded(null);\n setActiveIndex(selectedIndex >= 0 ? selectedIndex : 0);\n openMenu();\n }, [disabled, openMenu, options.length, selectedIndex]);\n\n // The nested list is an intermediate step, not a value: it disappears when\n // the menu closes so reopening always starts at the root list.\n useEffect(() => {\n if (!open) setExpanded(null);\n }, [open]);\n\n useEffect(() => {\n onOpenChange?.(open);\n }, [open, onOpenChange]);\n\n const commit = useCallback(\n (index: number) => {\n const option = currentOptions[index];\n if (!option) return;\n if (option.children?.length) {\n const currentChildIndex = option.children.findIndex((child) => child.value === value);\n setExpanded(option);\n setActiveIndex(currentChildIndex >= 0 ? currentChildIndex : 0);\n return;\n }\n onChange(option.value);\n closeMenu(true);\n },\n [closeMenu, currentOptions, onChange, value],\n );\n\n const onTriggerKeyDown = (e: ReactKeyboardEvent<HTMLButtonElement>) => {\n if (disabled) return;\n if (!open) {\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n showMenu();\n }\n return;\n }\n if (e.key === 'ArrowLeft' && expanded) {\n e.preventDefault();\n goBack();\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n setActiveIndex((i) => Math.min(i + 1, currentOptions.length - 1));\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n setActiveIndex((i) => Math.max(i - 1, 0));\n } else if (e.key === 'Home') {\n e.preventDefault();\n setActiveIndex(0);\n } else if (e.key === 'End') {\n e.preventDefault();\n setActiveIndex(currentOptions.length - 1);\n } else if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n commit(activeIndex);\n }\n };\n\n return (\n <div\n className={\n 'ui-dropdown' + (fullWidth ? '' : ' is-inline') + (className ? ' ' + className : '')\n }\n style={style}\n >\n <button\n ref={triggerRef}\n type=\"button\"\n className={'ui-dropdown-trigger' + (size === 'md' ? ' is-md' : '')}\n aria-label={ariaLabel}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? listboxId : undefined}\n title={title}\n disabled={disabled}\n onClick={() => (open ? closeMenu() : showMenu())}\n onKeyDown={onTriggerKeyDown}\n >\n {selected?.icon && <span className=\"ui-dropdown-icon\">{selected.icon}</span>}\n {dot && color && <span className=\"ui-dropdown-dot\" style={{ background: color }} />}\n <span className=\"ui-dropdown-value\" style={{ fontSize, fontWeight, color }}>\n {selected?.label ?? (value || placeholder)}\n </span>\n <span className=\"ui-dropdown-caret\" aria-hidden=\"true\">\n ▾\n </span>\n </button>\n {open &&\n typeof document !== 'undefined' &&\n createPortal(\n <div\n ref={menuRef}\n className=\"ui-dropdown-menu\"\n style={{\n left: pos.left,\n top: pos.top,\n bottom: pos.bottom,\n width: pos.width,\n maxHeight: pos.maxHeight,\n }}\n >\n {expanded && (\n <button\n type=\"button\"\n aria-label={`Back to ${ariaLabel}`}\n onClick={goBack}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n width: '100%',\n padding: '6px 10px',\n marginBottom: 4,\n border: 'none',\n borderRadius: 7,\n background: 'var(--ui-surface-2)',\n color: 'var(--ui-text-2)',\n fontSize: 11,\n fontWeight: 600,\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n <span aria-hidden=\"true\">‹</span>\n <span\n style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}\n >\n {expanded.label}\n </span>\n </button>\n )}\n <div id={listboxId} role=\"listbox\" aria-label={ariaLabel}>\n {currentOptions.map((option, index) => {\n const key = `${option.value}-${index}`;\n const optionNode = (\n <div\n key={key}\n role=\"option\"\n aria-selected={option.value === value}\n className={\n 'ui-dropdown-option' +\n (index === activeIndex ? ' is-active' : '') +\n (option.value === value ? ' is-selected' : '')\n }\n onMouseEnter={() => setActiveIndex(index)}\n onClick={() => commit(index)}\n >\n {option.icon && <span className=\"ui-dropdown-icon\">{option.icon}</span>}\n {option.color && (\n <span className=\"ui-dropdown-dot\" style={{ background: option.color }} />\n )}\n <span className=\"ui-dropdown-option-label\">{option.label}</span>\n {option.children?.length ? (\n <span className=\"ui-dropdown-caret\" aria-hidden=\"true\">\n ›\n </span>\n ) : (\n option.value === value && (\n <span className=\"ui-dropdown-check\" aria-hidden=\"true\">\n ✓\n </span>\n )\n )}\n </div>\n );\n\n if (!option.hint) return optionNode;\n\n return (\n <Tooltip\n key={key}\n as=\"div\"\n delay={0}\n content={\n <>\n {option.hintLabel && (\n <span className=\"ui-tooltip-label\">{option.hintLabel}</span>\n )}\n {option.hint}\n </>\n }\n >\n {optionNode}\n </Tooltip>\n );\n })}\n </div>\n </div>,\n document.body,\n )}\n </div>\n );\n}\n","import type { CSSProperties, ReactNode } from 'react';\n\nexport interface InlineEditorCardProps {\n title: string;\n onSave: () => void;\n onCancel: () => void;\n saveDisabled?: boolean;\n saveLabel?: string;\n cancelLabel?: string;\n embedded?: boolean;\n className?: string;\n style?: CSSProperties;\n children: ReactNode;\n}\n\n/**\n * Inline editor shell: card with a title, customizable fields and\n * Cancel/Save. `embedded` renders it flush inside a list, right below the\n * edited item (the pattern used by Aliases/Payment Aliases/Categories).\n */\nexport function InlineEditorCard({\n title,\n onSave,\n onCancel,\n saveDisabled,\n saveLabel = 'Save',\n cancelLabel = 'Cancel',\n embedded = false,\n className,\n style,\n children,\n}: InlineEditorCardProps) {\n return (\n <div\n className={className}\n style={{\n ...(embedded\n ? {\n background: 'var(--ui-surface-2)',\n borderTop: '1px solid var(--ui-border)',\n padding: '16px 20px',\n }\n : {\n background: 'var(--ui-surface)',\n border: '1px solid var(--ui-border)',\n borderRadius: 12,\n padding: 20,\n }),\n ...style,\n }}\n >\n <div style={{ fontSize: 13, fontWeight: 600, color: 'var(--ui-text)', marginBottom: 14 }}>\n {title}\n </div>\n {children}\n <div style={{ display: 'flex', gap: 8, justifyContent: 'flex-end', marginTop: 14 }}>\n <button\n type=\"button\"\n onClick={onCancel}\n style={{\n padding: '8px 16px',\n borderRadius: 8,\n border: '1px solid var(--ui-border)',\n background: 'none',\n color: 'var(--ui-text-2)',\n fontSize: 13,\n cursor: 'pointer',\n }}\n >\n {cancelLabel}\n </button>\n <button\n type=\"button\"\n onClick={onSave}\n disabled={saveDisabled}\n style={{\n padding: '8px 20px',\n borderRadius: 8,\n background: 'var(--ui-accent)',\n color: 'var(--ui-on-accent)',\n fontWeight: 600,\n fontSize: 13,\n cursor: saveDisabled ? 'not-allowed' : 'pointer',\n border: 'none',\n opacity: saveDisabled ? 0.6 : 1,\n }}\n >\n {saveLabel}\n </button>\n </div>\n </div>\n );\n}\n","import type { CSSProperties, ReactNode } from 'react';\n\nexport interface ListScreenProps {\n title: string;\n subtitle: string;\n action?: { label: string; onClick: () => void };\n children: ReactNode;\n testId?: string;\n maxWidth?: number;\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * Shell for list/configuration screens: scroll page, title/subtitle header and\n * an optional primary action on the right. The content is fully customizable.\n */\nexport function ListScreen({\n title,\n subtitle,\n action,\n children,\n testId,\n maxWidth = 700,\n className,\n style,\n}: ListScreenProps) {\n return (\n <div\n style={{ height: '100%', overflowY: 'auto', padding: '28px 32px', ...style }}\n className={`ui-scroll-y${className ? ` ${className}` : ''}`}\n >\n <div style={{ maxWidth, margin: '0 auto' }} data-testid={testId}>\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n marginBottom: 24,\n }}\n >\n <div>\n <h1\n style={{\n fontSize: 22,\n fontWeight: 700,\n color: 'var(--ui-text)',\n letterSpacing: '-0.5px',\n }}\n >\n {title}\n </h1>\n <p style={{ color: 'var(--ui-text-2)', fontSize: 13, marginTop: 2 }}>{subtitle}</p>\n </div>\n {action && (\n <button\n type=\"button\"\n onClick={action.onClick}\n style={{\n padding: '9px 16px',\n borderRadius: 8,\n background: 'var(--ui-accent)',\n color: 'var(--ui-on-accent)',\n fontWeight: 600,\n fontSize: 13,\n cursor: 'pointer',\n border: 'none',\n flexShrink: 0,\n }}\n >\n {action.label}\n </button>\n )}\n </div>\n {children}\n </div>\n </div>\n );\n}\n\n/** Card that hosts an inline list (rows + embedded editors). */\nexport function ListCard({\n children,\n testId,\n className,\n style,\n}: {\n children: ReactNode;\n testId?: string;\n className?: string;\n style?: CSSProperties;\n}) {\n return (\n <div\n data-testid={testId}\n className={className}\n style={{\n background: 'var(--ui-surface)',\n border: '1px solid var(--ui-border)',\n borderRadius: 12,\n overflow: 'hidden',\n ...style,\n }}\n >\n {children}\n </div>\n );\n}\n\n/** Row wrapper with the shared spacing/hover and optional divider. */\nexport function ListRow({\n children,\n style,\n className,\n borderBottom = true,\n}: {\n children: ReactNode;\n style?: CSSProperties;\n className?: string;\n borderBottom?: boolean;\n}) {\n return (\n <div\n className={className}\n style={{\n display: 'flex',\n alignItems: 'center',\n padding: '13px 20px',\n gap: 12,\n borderBottom: borderBottom ? '1px solid var(--ui-border)' : 'none',\n ...style,\n }}\n onMouseEnter={(e) => (e.currentTarget.style.background = 'var(--ui-surface-2)')}\n onMouseLeave={(e) => (e.currentTarget.style.background = 'transparent')}\n >\n {children}\n </div>\n );\n}\n\n/** Search input used above the lists. */\nexport function ListSearch({\n ariaLabel,\n placeholder,\n value,\n onChange,\n className,\n style,\n}: {\n ariaLabel: string;\n placeholder: string;\n value: string;\n onChange: (value: string) => void;\n className?: string;\n style?: CSSProperties;\n}) {\n return (\n <input\n aria-label={ariaLabel}\n placeholder={placeholder}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n className={className}\n style={{\n padding: '9px 12px',\n borderRadius: 8,\n border: '1px solid var(--ui-border)',\n background: 'var(--ui-surface)',\n color: 'var(--ui-text)',\n fontSize: 13,\n outline: 'none',\n width: '100%',\n marginBottom: 16,\n ...style,\n }}\n />\n );\n}\n\n/** Centered empty state inside a ListCard. */\nexport function ListEmptyState({\n children,\n className,\n style,\n}: {\n children: ReactNode;\n className?: string;\n style?: CSSProperties;\n}) {\n return (\n <div\n className={className}\n style={{\n padding: 32,\n textAlign: 'center',\n color: 'var(--ui-text-3)',\n fontSize: 13,\n ...style,\n }}\n >\n {children}\n </div>\n );\n}\n","import Dropdown from './Dropdown';\nimport type { CSSProperties } from 'react';\n\nexport interface MonthOption {\n value: string;\n label: string;\n}\n\nexport interface MonthSelectorProps {\n selectedMonth: string;\n setSelectedMonth: (month: string) => void;\n /** Months in display order (newest first). */\n options: MonthOption[];\n /** Optional entry rendered before the months (e.g. All Months). */\n allOption?: MonthOption;\n ariaLabel?: string;\n previousLabel?: string;\n nextLabel?: string;\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * Month stepper: `‹ May 2026 ›`. The arrows move through the supplied month\n * list (newest first) and are disabled at the bounds. The label becomes a\n * dropdown trigger, so a month can also be picked by clicking it.\n */\nexport default function MonthSelector({\n selectedMonth,\n setSelectedMonth,\n options,\n allOption,\n ariaLabel = 'Select month',\n previousLabel = 'Previous month',\n nextLabel = 'Next month',\n className,\n style,\n}: MonthSelectorProps) {\n const months = options;\n const idx = months.findIndex((month) => month.value === selectedMonth);\n const canGoOlder = idx >= 0 && idx < months.length - 1;\n const canGoNewer = idx > 0;\n\n return (\n <div className={`ui-month-selector${className ? ` ${className}` : ''}`} style={style}>\n <button\n type=\"button\"\n className=\"ui-month-selector-arrow\"\n aria-label={previousLabel}\n disabled={!canGoOlder}\n onClick={() => {\n if (canGoOlder) setSelectedMonth(months[idx + 1]!.value);\n }}\n >\n ‹\n </button>\n <div className=\"ui-month-selector-middle\">\n <Dropdown\n ariaLabel={ariaLabel}\n value={selectedMonth}\n onChange={setSelectedMonth}\n options={allOption ? [allOption, ...months] : months}\n fullWidth={false}\n />\n </div>\n <button\n type=\"button\"\n className=\"ui-month-selector-arrow\"\n aria-label={nextLabel}\n disabled={!canGoNewer}\n onClick={() => {\n if (canGoNewer) setSelectedMonth(months[idx - 1]!.value);\n }}\n >\n ›\n </button>\n </div>\n );\n}\n","import type { ComponentPropsWithRef } from 'react';\n\nexport interface RadioProps extends Omit<ComponentPropsWithRef<'input'>, 'type' | 'size'> {\n size?: 'sm' | 'md';\n}\n\nexport default function Radio({ size = 'md', className, ...props }: RadioProps) {\n return (\n <input\n type=\"radio\"\n className={`ui-radio${size === 'sm' ? ' is-sm' : ''}${className ? ` ${className}` : ''}`}\n {...props}\n />\n );\n}\n","import { useState, type CSSProperties } from 'react';\n\nconst buttonBase: CSSProperties = {\n padding: '5px 10px',\n borderRadius: 6,\n fontSize: 11,\n cursor: 'pointer',\n};\n\nexport interface RowActionsProps {\n onEdit: () => void;\n onDelete: () => void;\n confirmDelete?: boolean;\n editLabel?: string;\n deleteLabel?: string;\n cancelLabel?: string;\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * Inline row actions (Edit / Delete). Delete asks for an inline confirmation by\n * default; flows that need their own dialog (e.g. moving category references)\n * can disable the confirmation and handle it in `onDelete`.\n */\nexport function RowActions({\n onEdit,\n onDelete,\n confirmDelete = true,\n editLabel = 'Edit',\n deleteLabel = 'Delete',\n cancelLabel = 'Cancel',\n className,\n style,\n}: RowActionsProps) {\n const [confirming, setConfirming] = useState(false);\n const rootStyle = { display: 'flex', gap: 6, ...style };\n\n if (confirming) {\n return (\n <div className={className} style={rootStyle}>\n <button\n type=\"button\"\n onClick={() => {\n onDelete();\n setConfirming(false);\n }}\n style={{\n ...buttonBase,\n background: 'var(--ui-red)',\n color: 'var(--ui-on-accent)',\n fontWeight: 600,\n border: 'none',\n }}\n >\n {deleteLabel}\n </button>\n <button\n type=\"button\"\n onClick={() => setConfirming(false)}\n style={{\n ...buttonBase,\n background: 'var(--ui-surface-2)',\n color: 'var(--ui-text-2)',\n border: '1px solid var(--ui-border)',\n }}\n >\n {cancelLabel}\n </button>\n </div>\n );\n }\n\n return (\n <div className={className} style={rootStyle}>\n <button\n type=\"button\"\n onClick={onEdit}\n style={{\n ...buttonBase,\n background: 'none',\n border: '1px solid var(--ui-border)',\n color: 'var(--ui-text-2)',\n }}\n >\n {editLabel}\n </button>\n <button\n type=\"button\"\n onClick={() => (confirmDelete ? setConfirming(true) : onDelete())}\n style={{\n ...buttonBase,\n background: 'none',\n border: '1px solid var(--ui-border)',\n color: 'var(--ui-red)',\n }}\n >\n {deleteLabel}\n </button>\n </div>\n );\n}\n","import type { CSSProperties } from 'react';\n\nexport interface SkeletonProps {\n width?: number | string;\n height?: number | string;\n radius?: number | string;\n circle?: boolean;\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * Loading placeholder. It is purely decorative: the container that owns the\n * loading state must expose `role=\"status\"` and an accessible label.\n */\nexport default function Skeleton({\n width = '100%',\n height = 12,\n radius = 6,\n circle = false,\n className,\n style,\n}: SkeletonProps) {\n return (\n <span\n aria-hidden=\"true\"\n className={className ? `ui-skeleton ${className}` : 'ui-skeleton'}\n style={{\n display: 'inline-block',\n width,\n height,\n borderRadius: circle ? '50%' : radius,\n ...style,\n }}\n />\n );\n}\n","import type { ReactNode } from 'react';\nimport Skeleton from './Skeleton';\n\nexport function SkeletonStatus({\n label,\n children,\n className,\n}: {\n label: string;\n children: ReactNode;\n className?: string;\n}) {\n return (\n <div role=\"status\" aria-live=\"polite\" aria-busy=\"true\" aria-label={label} className={className}>\n {children}\n </div>\n );\n}\n\nexport function PageSkeleton({\n label,\n children,\n maxWidth = 700,\n padding = '28px 32px',\n className,\n}: {\n label: string;\n children: ReactNode;\n maxWidth?: number;\n padding?: string;\n className?: string;\n}) {\n return (\n <SkeletonStatus label={label}>\n <div\n style={{ height: '100%', overflowY: 'auto', padding }}\n className={`ui-scroll-y${className ? ` ${className}` : ''}`}\n >\n <div style={{ maxWidth, margin: '0 auto' }}>{children}</div>\n </div>\n </SkeletonStatus>\n );\n}\n\nexport function PageHeaderSkeleton({\n actionWidth = 120,\n marginBottom = 24,\n}: {\n actionWidth?: number | null;\n marginBottom?: number;\n}) {\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: 16,\n marginBottom,\n }}\n >\n <div>\n <Skeleton width={190} height={22} radius={7} />\n <div style={{ marginTop: 8 }}>\n <Skeleton width={300} height={12} />\n </div>\n </div>\n {actionWidth !== null && <Skeleton width={actionWidth} height={36} radius={8} />}\n </div>\n );\n}\n\nexport function SearchSkeleton() {\n return (\n <div style={{ marginBottom: 16 }}>\n <Skeleton height={38} radius={8} />\n </div>\n );\n}\n\nexport function ListCardSkeleton({\n rows = 5,\n leading = 'dot',\n trailing = 'actions',\n}: {\n rows?: number;\n leading?: 'dot' | 'avatar' | 'none';\n trailing?: 'actions' | 'amount' | 'none';\n}) {\n return (\n <div\n aria-hidden=\"true\"\n style={{\n background: 'var(--ui-surface)',\n border: '1px solid var(--ui-border)',\n borderRadius: 12,\n overflow: 'hidden',\n }}\n >\n {Array.from({ length: rows }, (_, index) => (\n <div\n key={index}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n padding: '13px 20px',\n borderTop: index === 0 ? 'none' : '1px solid var(--ui-border)',\n }}\n >\n {leading === 'dot' && <Skeleton width={12} height={12} circle />}\n {leading === 'avatar' && <Skeleton width={44} height={28} radius={5} />}\n <div style={{ flex: 1, minWidth: 0 }}>\n <Skeleton width={`${55 - (index % 3) * 8}%`} height={14} />\n <div style={{ marginTop: 6 }}>\n <Skeleton width={`${34 - (index % 2) * 6}%`} height={11} />\n </div>\n </div>\n {trailing === 'amount' && <Skeleton width={78} height={14} />}\n {trailing === 'actions' && (\n <div style={{ display: 'flex', gap: 6 }}>\n <Skeleton width={24} height={24} radius={6} />\n <Skeleton width={24} height={24} radius={6} />\n </div>\n )}\n </div>\n ))}\n </div>\n );\n}\n\nexport function DetailRowsSkeleton({ rows = 3 }: { rows?: number }) {\n return (\n <div aria-hidden=\"true\" style={{ display: 'flex', flexDirection: 'column', gap: 10 }}>\n {Array.from({ length: rows }, (_, index) => (\n <div\n key={index}\n style={{\n display: 'grid',\n gridTemplateColumns: '76px 1fr 84px',\n gap: 10,\n alignItems: 'center',\n }}\n >\n <Skeleton width={60} height={11} />\n <Skeleton width={`${72 - index * 9}%`} height={12} />\n <div style={{ display: 'flex', justifyContent: 'flex-end' }}>\n <Skeleton width={58} height={12} />\n </div>\n </div>\n ))}\n </div>\n );\n}\n","import type { CSSProperties, ReactNode } from 'react';\nimport type { Tone } from '../internal/tone';\n\nexport interface AlertProps {\n children: ReactNode;\n tone?: Exclude<Tone, 'accent' | 'purple'>;\n title?: ReactNode;\n action?: ReactNode;\n onDismiss?: () => void;\n dismissLabel?: string;\n role?: 'alert' | 'status';\n className?: string;\n style?: CSSProperties;\n}\n\nexport default function Alert({\n children,\n tone = 'info',\n title,\n action,\n onDismiss,\n dismissLabel = 'Dismiss',\n role,\n className,\n style,\n}: AlertProps) {\n const resolvedRole = role ?? (tone === 'danger' || tone === 'warning' ? 'alert' : 'status');\n\n return (\n <div\n role={resolvedRole}\n aria-live={resolvedRole === 'alert' ? 'assertive' : 'polite'}\n className={['ui-alert', `ui-alert--${tone}`, className ?? ''].filter(Boolean).join(' ')}\n style={style}\n >\n <div className=\"ui-alert-content\">\n {title && <div className=\"ui-alert-title\">{title}</div>}\n <div className=\"ui-alert-body\">{children}</div>\n </div>\n {(action || onDismiss) && (\n <div className=\"ui-alert-actions\">\n {action}\n {onDismiss && (\n <button\n type=\"button\"\n className=\"ui-alert-dismiss\"\n aria-label={dismissLabel}\n onClick={onDismiss}\n >\n ×\n </button>\n )}\n </div>\n )}\n </div>\n );\n}\n","import type { CSSProperties, ReactNode } from 'react';\nimport type { Tone } from '../internal/tone';\n\nexport type BadgeVariant = 'soft' | 'solid' | 'outline';\n\nexport interface BadgeProps {\n children: ReactNode;\n tone?: Tone;\n variant?: BadgeVariant;\n dot?: boolean;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function Badge({\n children,\n tone = 'neutral',\n variant = 'soft',\n dot = false,\n className,\n style,\n}: BadgeProps) {\n return (\n <span\n className={['ui-badge', `ui-badge--${variant}`, `ui-badge--${tone}`, className ?? '']\n .filter(Boolean)\n .join(' ')}\n style={style}\n >\n {dot && <span className=\"ui-badge-dot\" aria-hidden=\"true\" />}\n {children}\n </span>\n );\n}\n\nexport interface ChipProps {\n children: ReactNode;\n tone?: Tone;\n variant?: BadgeVariant;\n leadingIcon?: ReactNode;\n onRemove?: () => void;\n removeLabel?: string;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function Chip({\n children,\n tone = 'neutral',\n variant = 'soft',\n leadingIcon,\n onRemove,\n removeLabel = 'Remove',\n className,\n style,\n}: ChipProps) {\n return (\n <span\n className={[\n 'ui-badge',\n 'ui-chip',\n `ui-badge--${variant}`,\n `ui-badge--${tone}`,\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={style}\n >\n {leadingIcon && (\n <span className=\"ui-chip-icon\" aria-hidden=\"true\">\n {leadingIcon}\n </span>\n )}\n <span className=\"ui-chip-label\">{children}</span>\n {onRemove && (\n <button\n type=\"button\"\n className=\"ui-chip-remove\"\n aria-label={removeLabel}\n onClick={onRemove}\n >\n ×\n </button>\n )}\n </span>\n );\n}\n","import type { CSSProperties } from 'react';\n\nexport interface SpinnerProps {\n size?: number;\n label?: string;\n className?: string;\n style?: CSSProperties;\n}\n\nexport default function Spinner({ size = 16, label = 'Loading', className, style }: SpinnerProps) {\n return (\n <span\n role=\"status\"\n aria-label={label}\n className={className}\n style={{ display: 'inline-flex', flexShrink: 0, ...style }}\n >\n <span\n className=\"ui-spinner\"\n aria-hidden=\"true\"\n style={{ width: size, height: size, borderWidth: Math.max(1.5, size / 8) }}\n />\n </span>\n );\n}\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\nimport Spinner from './Spinner';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger';\nexport type ButtonSize = 'sm' | 'md' | 'lg';\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n loading?: boolean;\n loadingLabel?: string;\n leadingIcon?: ReactNode;\n trailingIcon?: ReactNode;\n fullWidth?: boolean;\n}\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = 'primary',\n size = 'md',\n loading = false,\n loadingLabel = 'Loading',\n leadingIcon,\n trailingIcon,\n fullWidth = false,\n className,\n children,\n disabled,\n type = 'button',\n ...props\n },\n ref,\n) {\n return (\n <button\n ref={ref}\n type={type}\n disabled={disabled || loading}\n aria-busy={loading || undefined}\n className={[\n 'ui-button',\n `ui-button--${variant}`,\n `ui-button--${size}`,\n fullWidth ? 'is-full' : '',\n loading ? 'is-loading' : '',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n {loading ? <Spinner size={size === 'sm' ? 12 : 14} label={loadingLabel} /> : leadingIcon}\n {children != null && <span className=\"ui-button-label\">{children}</span>}\n {trailingIcon}\n </button>\n );\n});\n\nexport interface IconButtonProps extends Omit<\n ButtonProps,\n 'children' | 'leadingIcon' | 'trailingIcon'\n> {\n /** Accessible name for the icon-only button. */\n 'aria-label': string;\n children: ReactNode;\n}\n\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(function IconButton(\n { className, children, ...props },\n ref,\n) {\n return (\n <Button\n ref={ref}\n {...props}\n className={['ui-button--icon', className ?? ''].filter(Boolean).join(' ')}\n >\n {children}\n </Button>\n );\n});\n\nexport default Button;\n","import type { CSSProperties, ReactNode } from 'react';\n\nexport interface CardProps {\n children: ReactNode;\n padding?: 'none' | 'sm' | 'md' | 'lg';\n className?: string;\n style?: CSSProperties;\n}\n\nexport function Card({ children, padding = 'md', className, style }: CardProps) {\n return (\n <div\n className={['ui-card', `ui-card--pad-${padding}`, className ?? ''].filter(Boolean).join(' ')}\n style={style}\n >\n {children}\n </div>\n );\n}\n\nexport interface CardHeaderProps {\n title: ReactNode;\n subtitle?: ReactNode;\n actions?: ReactNode;\n className?: string;\n}\n\nexport function CardHeader({ title, subtitle, actions, className }: CardHeaderProps) {\n return (\n <div className={['ui-card-header', className ?? ''].filter(Boolean).join(' ')}>\n <div>\n <div className=\"ui-card-title\">{title}</div>\n {subtitle && <div className=\"ui-card-subtitle\">{subtitle}</div>}\n </div>\n {actions && <div className=\"ui-card-actions\">{actions}</div>}\n </div>\n );\n}\n\nexport function CardBody({\n children,\n className,\n style,\n}: {\n children: ReactNode;\n className?: string;\n style?: CSSProperties;\n}) {\n return (\n <div className={['ui-card-body', className ?? ''].filter(Boolean).join(' ')} style={style}>\n {children}\n </div>\n );\n}\n\nexport function CardFooter({\n children,\n className,\n style,\n}: {\n children: ReactNode;\n className?: string;\n style?: CSSProperties;\n}) {\n return (\n <div className={['ui-card-footer', className ?? ''].filter(Boolean).join(' ')} style={style}>\n {children}\n </div>\n );\n}\n\nexport interface SectionProps {\n title: ReactNode;\n subtitle?: ReactNode;\n actions?: ReactNode;\n children: ReactNode;\n className?: string;\n contentClassName?: string;\n style?: CSSProperties;\n}\n\n/** Card with a standard header and body — the Settings-style section pattern. */\nexport function Section({\n title,\n subtitle,\n actions,\n children,\n className,\n contentClassName,\n style,\n}: SectionProps) {\n return (\n <Card padding=\"none\" className={className} style={style}>\n <CardHeader title={title} subtitle={subtitle} actions={actions} />\n <CardBody className={contentClassName}>{children}</CardBody>\n </Card>\n );\n}\n","import {\n useEffect,\n useId,\n useRef,\n useState,\n type CSSProperties,\n type KeyboardEvent as ReactKeyboardEvent,\n} from 'react';\n\nexport interface ComboboxOption {\n value: string;\n label: string;\n description?: string;\n disabled?: boolean;\n}\n\nexport interface ComboboxProps {\n value: string;\n onChange: (value: string) => void;\n options: ComboboxOption[];\n ariaLabel: string;\n placeholder?: string;\n noResultsLabel?: string;\n disabled?: boolean;\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * Searchable single-select. The input filters the listbox; the selected value\n * is shown when the popover is closed.\n */\nexport default function Combobox({\n value,\n onChange,\n options,\n ariaLabel,\n placeholder = 'Select…',\n noResultsLabel = 'No results',\n disabled = false,\n className,\n style,\n}: ComboboxProps) {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const [activeIndex, setActiveIndex] = useState(0);\n const rootRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const listId = useId();\n\n const selected = options.find((option) => option.value === value);\n const normalized = query.trim().toLowerCase();\n const filtered = normalized\n ? options.filter((option) => option.label.toLowerCase().includes(normalized))\n : options;\n\n useEffect(() => {\n if (!open) return;\n const onPointerDown = (event: MouseEvent) => {\n if (!rootRef.current?.contains(event.target as Node)) setOpen(false);\n };\n document.addEventListener('mousedown', onPointerDown);\n return () => document.removeEventListener('mousedown', onPointerDown);\n }, [open]);\n\n const openList = () => {\n if (disabled) return;\n setOpen(true);\n setQuery('');\n setActiveIndex(0);\n };\n\n const select = (option: ComboboxOption) => {\n if (option.disabled) return;\n onChange(option.value);\n setOpen(false);\n setQuery('');\n inputRef.current?.focus();\n };\n\n const onKeyDown = (event: ReactKeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (!open) openList();\n else setActiveIndex((index) => Math.min(filtered.length - 1, index + 1));\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n setActiveIndex((index) => Math.max(0, index - 1));\n } else if (event.key === 'Enter') {\n event.preventDefault();\n const option = filtered[activeIndex];\n if (option) select(option);\n } else if (event.key === 'Escape') {\n setOpen(false);\n }\n };\n\n return (\n <div\n ref={rootRef}\n className={['ui-combobox', className ?? ''].filter(Boolean).join(' ')}\n style={style}\n >\n <input\n ref={inputRef}\n role=\"combobox\"\n aria-label={ariaLabel}\n aria-expanded={open}\n aria-controls={listId}\n aria-autocomplete=\"list\"\n aria-activedescendant={\n open && filtered[activeIndex] ? `${listId}-${activeIndex}` : undefined\n }\n className=\"ui-input ui-combobox-input\"\n value={open ? query : (selected?.label ?? '')}\n placeholder={selected?.label ?? placeholder}\n disabled={disabled}\n onFocus={openList}\n onClick={openList}\n onChange={(event) => {\n setQuery(event.target.value);\n setOpen(true);\n setActiveIndex(0);\n }}\n onKeyDown={onKeyDown}\n />\n {open && (\n <div id={listId} role=\"listbox\" aria-label={ariaLabel} className=\"ui-combobox-menu\">\n {filtered.length === 0 ? (\n <div className=\"ui-combobox-empty\">{noResultsLabel}</div>\n ) : (\n filtered.map((option, index) => (\n <div\n key={option.value}\n id={`${listId}-${index}`}\n role=\"option\"\n aria-selected={option.value === value}\n aria-disabled={option.disabled || undefined}\n className={[\n 'ui-combobox-option',\n index === activeIndex ? 'is-active' : '',\n option.value === value ? 'is-selected' : '',\n option.disabled ? 'is-disabled' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n onMouseDown={(event) => event.preventDefault()}\n onMouseEnter={() => setActiveIndex(index)}\n onClick={() => select(option)}\n >\n <span className=\"ui-combobox-label\">{option.label}</span>\n {option.description && (\n <span className=\"ui-combobox-description\">{option.description}</span>\n )}\n </div>\n ))\n )}\n </div>\n )}\n </div>\n );\n}\n","import type { CSSProperties, ReactNode } from 'react';\n\nexport interface DataTableColumn<T> {\n key: string;\n header: ReactNode;\n render?: (row: T, index: number) => ReactNode;\n sortable?: boolean;\n align?: 'left' | 'center' | 'right';\n width?: number | string;\n}\n\nexport interface DataTableSort {\n key: string;\n direction: 'asc' | 'desc';\n}\n\nexport interface DataTableProps<T> {\n columns: DataTableColumn<T>[];\n rows: T[];\n rowKey: (row: T, index: number) => string;\n ariaLabel?: string;\n caption?: ReactNode;\n sort?: DataTableSort;\n onSortChange?: (sort: DataTableSort) => void;\n emptyState?: ReactNode;\n onRowClick?: (row: T) => void;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function DataTable<T>({\n columns,\n rows,\n rowKey,\n ariaLabel,\n caption,\n sort,\n onSortChange,\n emptyState = 'No data',\n onRowClick,\n className,\n style,\n}: DataTableProps<T>) {\n return (\n <div\n className={['ui-data-table-wrap', className ?? ''].filter(Boolean).join(' ')}\n style={style}\n >\n <table className=\"ui-data-table\" aria-label={ariaLabel}>\n {caption && <caption>{caption}</caption>}\n <thead>\n <tr>\n {columns.map((column) => {\n const activeSort = sort?.key === column.key ? sort.direction : undefined;\n return (\n <th\n key={column.key}\n scope=\"col\"\n aria-sort={\n activeSort === 'asc'\n ? 'ascending'\n : activeSort === 'desc'\n ? 'descending'\n : column.sortable\n ? 'none'\n : undefined\n }\n style={{ width: column.width, textAlign: column.align ?? 'left' }}\n >\n {column.sortable && onSortChange ? (\n <button\n type=\"button\"\n className=\"ui-data-table-sort\"\n onClick={() =>\n onSortChange({\n key: column.key,\n direction: activeSort === 'asc' ? 'desc' : 'asc',\n })\n }\n >\n {column.header}\n <span className=\"ui-data-table-sort-icon\" aria-hidden=\"true\">\n {activeSort === 'asc' ? '▲' : activeSort === 'desc' ? '▼' : '↕'}\n </span>\n </button>\n ) : (\n column.header\n )}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {rows.length === 0 ? (\n <tr>\n <td className=\"ui-data-table-empty\" colSpan={columns.length}>\n {emptyState}\n </td>\n </tr>\n ) : (\n rows.map((row, index) => (\n <tr\n key={rowKey(row, index)}\n className={onRowClick ? 'is-clickable' : undefined}\n tabIndex={onRowClick ? 0 : undefined}\n onClick={() => onRowClick?.(row)}\n onKeyDown={(event) => {\n if (!onRowClick) return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onRowClick(row);\n }\n }}\n >\n {columns.map((column) => (\n <td key={column.key} style={{ textAlign: column.align ?? 'left' }}>\n {column.render\n ? column.render(row, index)\n : String(row[column.key as keyof T] ?? '')}\n </td>\n ))}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n );\n}\n","import { useEffect, useId, useRef, useState, type CSSProperties, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useFocusTrap } from '../internal/useFocusTrap';\n\nexport interface DrawerProps {\n open: boolean;\n onClose: () => void;\n title: string;\n children: ReactNode;\n footer?: ReactNode;\n side?: 'left' | 'right';\n width?: number | string;\n closeLabel?: string;\n className?: string;\n style?: CSSProperties;\n bodyClassName?: string;\n}\n\nexport function Drawer({\n open,\n onClose,\n title,\n children,\n footer,\n side = 'right',\n width = 420,\n closeLabel = 'Close',\n className,\n style,\n bodyClassName,\n}: DrawerProps) {\n const [mounted, setMounted] = useState(false);\n const titleId = useId();\n const panelRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n useFocusTrap({\n active: open && mounted,\n containerRef: panelRef,\n onEscape: onClose,\n });\n\n useEffect(() => {\n if (!open) return;\n const previous = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n return () => {\n document.body.style.overflow = previous;\n };\n }, [open]);\n\n if (!open || !mounted) return null;\n\n return createPortal(\n <div className=\"ui-drawer-overlay\" onClick={onClose}>\n <div\n ref={panelRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n tabIndex={-1}\n className={['ui-drawer', `ui-drawer--${side}`, className ?? ''].filter(Boolean).join(' ')}\n style={{ width, maxWidth: '100vw', ...style }}\n onClick={(event) => event.stopPropagation()}\n >\n <div className=\"ui-drawer-header\">\n <div id={titleId} className=\"ui-drawer-title\">\n {title}\n </div>\n <button\n type=\"button\"\n className=\"ui-drawer-close\"\n aria-label={closeLabel}\n onClick={onClose}\n >\n ×\n </button>\n </div>\n <div className={['ui-drawer-body', bodyClassName ?? ''].filter(Boolean).join(' ')}>\n {children}\n </div>\n {footer && <div className=\"ui-drawer-footer\">{footer}</div>}\n </div>\n </div>,\n document.body,\n );\n}\n\nexport { Drawer as Sheet };\n","import {\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n type CSSProperties,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n} from 'react';\n\nexport interface DropdownMenuItem {\n type?: 'item';\n id: string;\n label: ReactNode;\n icon?: ReactNode;\n disabled?: boolean;\n danger?: boolean;\n onSelect?: () => void;\n}\n\nexport interface DropdownMenuSeparator {\n type: 'separator';\n id?: string;\n}\n\nexport type DropdownMenuEntry = DropdownMenuItem | DropdownMenuSeparator;\n\nexport interface DropdownMenuProps {\n /** Trigger content (rendered inside the menu button). */\n trigger: ReactNode;\n items: DropdownMenuEntry[];\n ariaLabel: string;\n align?: 'start' | 'end';\n className?: string;\n style?: CSSProperties;\n}\n\nfunction isItem(entry: DropdownMenuEntry): entry is DropdownMenuItem {\n return entry.type !== 'separator';\n}\n\nexport function DropdownMenu({\n trigger,\n items,\n ariaLabel,\n align = 'start',\n className,\n style,\n}: DropdownMenuProps) {\n const [open, setOpen] = useState(false);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const menuId = useId();\n\n const close = useCallback((refocus = true) => {\n setOpen(false);\n if (refocus) triggerRef.current?.focus();\n }, []);\n\n useEffect(() => {\n if (!open) return;\n\n const first = menuRef.current?.querySelector<HTMLElement>('[role=\"menuitem\"]:not(:disabled)');\n first?.focus();\n\n const onPointerDown = (event: MouseEvent) => {\n const target = event.target as Node;\n if (triggerRef.current?.contains(target) || menuRef.current?.contains(target)) return;\n close(false);\n };\n const onKeyDown = (event: globalThis.KeyboardEvent) => {\n if (event.key === 'Escape') close();\n };\n document.addEventListener('mousedown', onPointerDown);\n document.addEventListener('keydown', onKeyDown);\n return () => {\n document.removeEventListener('mousedown', onPointerDown);\n document.removeEventListener('keydown', onKeyDown);\n };\n }, [open, close]);\n\n const onTriggerKeyDown = (event: ReactKeyboardEvent<HTMLButtonElement>) => {\n if (open) return;\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n setOpen(true);\n }\n };\n\n const onMenuKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n const focusable = Array.from(\n menuRef.current?.querySelectorAll<HTMLButtonElement>('[role=\"menuitem\"]:not(:disabled)') ??\n [],\n );\n if (!focusable.length) return;\n const currentIndex = focusable.indexOf(document.activeElement as HTMLButtonElement);\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n focusable[(currentIndex + 1) % focusable.length]?.focus();\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n focusable[(currentIndex - 1 + focusable.length) % focusable.length]?.focus();\n } else if (event.key === 'Home') {\n event.preventDefault();\n focusable[0]?.focus();\n } else if (event.key === 'End') {\n event.preventDefault();\n focusable[focusable.length - 1]?.focus();\n } else if (event.key === 'Tab') {\n close(false);\n }\n };\n\n return (\n <div className={['ui-menu', className ?? ''].filter(Boolean).join(' ')} style={style}>\n <button\n ref={triggerRef}\n type=\"button\"\n className=\"ui-menu-trigger\"\n aria-label={ariaLabel}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-controls={open ? menuId : undefined}\n onClick={() => (open ? close() : setOpen(true))}\n onKeyDown={onTriggerKeyDown}\n >\n {trigger}\n <span className=\"ui-menu-caret\" aria-hidden=\"true\">\n ▾\n </span>\n </button>\n {open && (\n <div\n ref={menuRef}\n id={menuId}\n role=\"menu\"\n aria-label={ariaLabel}\n className={`ui-menu-list${align === 'end' ? ' is-end' : ''}`}\n onKeyDown={onMenuKeyDown}\n >\n {items.map((entry, index) => {\n if (!isItem(entry)) {\n return (\n <div\n key={entry.id ?? `separator-${index}`}\n role=\"separator\"\n className=\"ui-menu-separator\"\n />\n );\n }\n return (\n <button\n key={entry.id}\n type=\"button\"\n role=\"menuitem\"\n disabled={entry.disabled}\n className={['ui-menu-item', entry.danger ? 'is-danger' : '']\n .filter(Boolean)\n .join(' ')}\n onClick={() => {\n if (entry.disabled) return;\n entry.onSelect?.();\n close();\n }}\n >\n {entry.icon && (\n <span className=\"ui-menu-item-icon\" aria-hidden=\"true\">\n {entry.icon}\n </span>\n )}\n <span>{entry.label}</span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n\nexport { DropdownMenu as Menu };\n","import type { CSSProperties, ReactNode } from 'react';\n\nexport interface EmptyStateProps {\n title: ReactNode;\n description?: ReactNode;\n icon?: ReactNode;\n action?: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\nexport default function EmptyState({\n title,\n description,\n icon,\n action,\n className,\n style,\n}: EmptyStateProps) {\n return (\n <div className={['ui-empty-state', className ?? ''].filter(Boolean).join(' ')} style={style}>\n {icon && (\n <div className=\"ui-empty-state-icon\" aria-hidden=\"true\">\n {icon}\n </div>\n )}\n <div className=\"ui-empty-state-title\">{title}</div>\n {description && <div className=\"ui-empty-state-description\">{description}</div>}\n {action && <div className=\"ui-empty-state-action\">{action}</div>}\n </div>\n );\n}\n","import { useRef, useState, type CSSProperties, type DragEvent, type ReactNode } from 'react';\n\nexport interface FileUploadProps {\n onFiles: (files: File[]) => void;\n accept?: string;\n multiple?: boolean;\n disabled?: boolean;\n label?: ReactNode;\n hint?: ReactNode;\n className?: string;\n style?: CSSProperties;\n inputId?: string;\n}\n\nexport function FileUpload({\n onFiles,\n accept,\n multiple = false,\n disabled = false,\n label = 'Drop files here or click to browse',\n hint,\n className,\n style,\n inputId,\n}: FileUploadProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const [dragging, setDragging] = useState(false);\n\n const handleFiles = (files: FileList | null) => {\n if (!files?.length) return;\n onFiles(Array.from(files));\n };\n\n const openPicker = () => {\n if (!disabled) inputRef.current?.click();\n };\n\n const onDrop = (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n setDragging(false);\n if (disabled) return;\n handleFiles(event.dataTransfer.files);\n };\n\n return (\n <>\n <input\n ref={inputRef}\n id={inputId}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n aria-label={typeof label === 'string' ? label : 'Upload files'}\n className=\"ui-file-upload-input\"\n onChange={(event) => {\n handleFiles(event.target.files);\n event.target.value = '';\n }}\n />\n <div\n className={[\n 'ui-file-upload',\n dragging ? 'is-dragging' : '',\n disabled ? 'is-disabled' : '',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={style}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled || undefined}\n onClick={openPicker}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n openPicker();\n }\n }}\n onDragOver={(event) => {\n event.preventDefault();\n if (!disabled) setDragging(true);\n }}\n onDragLeave={() => setDragging(false)}\n onDrop={onDrop}\n >\n <div className=\"ui-file-upload-icon\" aria-hidden=\"true\">\n ↑\n </div>\n <div className=\"ui-file-upload-label\">{label}</div>\n {hint && <div className=\"ui-file-upload-hint\">{hint}</div>}\n </div>\n </>\n );\n}\n\nexport { FileUpload as Dropzone };\n","import {\n cloneElement,\n isValidElement,\n useId,\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n} from 'react';\n\nexport interface FormFieldControlProps {\n id: string;\n describedBy?: string;\n invalid: boolean;\n}\n\nexport interface FormFieldProps {\n label?: ReactNode;\n /** ID of the control. When omitted, the first child's `id` or a generated ID is used. */\n htmlFor?: string;\n id?: string;\n hint?: ReactNode;\n error?: ReactNode;\n required?: boolean;\n children: ReactNode | ((props: FormFieldControlProps) => ReactNode);\n className?: string;\n style?: CSSProperties;\n}\n\nfunction isRenderProp(\n children: FormFieldProps['children'],\n): children is (props: FormFieldControlProps) => ReactNode {\n return typeof children === 'function';\n}\n\n/**\n * Label + hint + error wrapper. It clones a single form-control child to inject\n * `id`, `aria-describedby` and `aria-invalid`; render-prop usage is available\n * for custom controls.\n */\nexport default function FormField({\n label,\n htmlFor,\n id,\n hint,\n error,\n required = false,\n children,\n className,\n style,\n}: FormFieldProps) {\n const generatedId = useId();\n const child: ReactElement<Record<string, unknown>> | null =\n !isRenderProp(children) && isValidElement(children)\n ? (children as ReactElement<Record<string, unknown>>)\n : null;\n const childId = typeof child?.props.id === 'string' ? child.props.id : undefined;\n const controlId = htmlFor ?? id ?? childId ?? generatedId;\n const hintId = hint ? `${controlId}-hint` : undefined;\n const errorId = error ? `${controlId}-error` : undefined;\n const describedBy = [hintId, errorId].filter(Boolean).join(' ') || undefined;\n const invalid = Boolean(error);\n\n let control: ReactNode;\n if (isRenderProp(children)) {\n control = children({ id: controlId, describedBy, invalid });\n } else if (child) {\n const childDescribedBy =\n [child.props['aria-describedby'], describedBy].filter(Boolean).join(' ') || undefined;\n control = cloneElement(child, {\n id: childId ?? controlId,\n 'aria-describedby': childDescribedBy,\n 'aria-invalid': invalid ? true : child.props['aria-invalid'],\n ...(required ? { required: true } : {}),\n });\n } else {\n control = children;\n }\n\n return (\n <div className={['ui-form-field', className ?? ''].filter(Boolean).join(' ')} style={style}>\n {label && (\n <label className=\"ui-form-label\" htmlFor={controlId}>\n {label}\n {required && (\n <span className=\"ui-form-required\" aria-hidden=\"true\">\n {' '}\n *\n </span>\n )}\n </label>\n )}\n {hint && (\n <div id={hintId} className=\"ui-form-hint\">\n {hint}\n </div>\n )}\n {control}\n {error && (\n <div id={errorId} className=\"ui-form-error\" role=\"alert\">\n {error}\n </div>\n )}\n </div>\n );\n}\n","import type { CSSProperties, ReactNode } from 'react';\n\nexport interface PageHeaderProps {\n title: ReactNode;\n subtitle?: ReactNode;\n actions?: ReactNode;\n onBack?: () => void;\n backLabel?: string;\n className?: string;\n style?: CSSProperties;\n}\n\nexport default function PageHeader({\n title,\n subtitle,\n actions,\n onBack,\n backLabel = 'Back',\n className,\n style,\n}: PageHeaderProps) {\n return (\n <div className={['ui-page-header', className ?? ''].filter(Boolean).join(' ')} style={style}>\n <div className=\"ui-page-header-main\">\n {onBack && (\n <button\n type=\"button\"\n className=\"ui-page-header-back\"\n aria-label={backLabel}\n onClick={onBack}\n >\n ‹\n </button>\n )}\n <div>\n <h1 className=\"ui-page-header-title\">{title}</h1>\n {subtitle && <p className=\"ui-page-header-subtitle\">{subtitle}</p>}\n </div>\n </div>\n {actions && <div className=\"ui-page-header-actions\">{actions}</div>}\n </div>\n );\n}\n","import { useEffect, useState, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\n\nexport interface PortalProps {\n children: ReactNode;\n /** Defaults to `document.body`. Ignored until the component is mounted. */\n container?: Element | null;\n}\n\n/**\n * SSR-safe portal: renders `null` on the server and before the first client\n * effect, then mounts the children into the requested container.\n */\nexport default function Portal({ children, container }: PortalProps) {\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted || typeof document === 'undefined') return null;\n\n return createPortal(children, container ?? document.body);\n}\n","import type { CSSProperties } from 'react';\n\nexport interface ProgressBarProps {\n /** Current value. Omit/undefined for an indeterminate bar. */\n value?: number;\n max?: number;\n label?: string;\n /** Overrides the computed percentage (e.g. \"3 of 8 files\"). */\n valueText?: string;\n size?: 'sm' | 'md';\n className?: string;\n style?: CSSProperties;\n}\n\nexport default function ProgressBar({\n value,\n max = 100,\n label = 'Progress',\n valueText,\n size = 'md',\n className,\n style,\n}: ProgressBarProps) {\n const indeterminate = value == null;\n const safeMax = max > 0 ? max : 100;\n const clamped = indeterminate ? 0 : Math.min(safeMax, Math.max(0, value));\n const percent = indeterminate ? 0 : (clamped / safeMax) * 100;\n\n return (\n <div\n role=\"progressbar\"\n aria-label={label}\n aria-valuemin={indeterminate ? undefined : 0}\n aria-valuemax={indeterminate ? undefined : safeMax}\n aria-valuenow={indeterminate ? undefined : clamped}\n aria-valuetext={valueText}\n className={[\n 'ui-progress',\n `ui-progress--${size}`,\n indeterminate ? 'is-indeterminate' : '',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={style}\n >\n <span\n className=\"ui-progress-bar\"\n style={indeterminate ? undefined : { width: `${percent}%` }}\n />\n </div>\n );\n}\n","import { forwardRef, type CSSProperties, type InputHTMLAttributes, type ReactNode } from 'react';\n\nexport interface TextInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\n size?: 'sm' | 'md';\n invalid?: boolean;\n leadingIcon?: ReactNode;\n trailingIcon?: ReactNode;\n onClear?: () => void;\n clearLabel?: string;\n wrapperClassName?: string;\n wrapperStyle?: CSSProperties;\n}\n\nconst TextInput = forwardRef<HTMLInputElement, TextInputProps>(function TextInput(\n {\n size = 'md',\n invalid = false,\n leadingIcon,\n trailingIcon,\n onClear,\n clearLabel = 'Clear',\n className,\n wrapperClassName,\n style,\n wrapperStyle,\n disabled,\n value,\n ...props\n },\n ref,\n) {\n const showClear = Boolean(onClear) && value != null && value !== '';\n\n return (\n <div\n className={[\n 'ui-input-wrap',\n `ui-input-wrap--${size}`,\n invalid ? 'is-invalid' : '',\n disabled ? 'is-disabled' : '',\n wrapperClassName ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={wrapperStyle}\n >\n {leadingIcon && (\n <span className=\"ui-input-icon\" aria-hidden=\"true\">\n {leadingIcon}\n </span>\n )}\n <input\n ref={ref}\n className={['ui-input', className ?? ''].filter(Boolean).join(' ')}\n style={style}\n value={value}\n disabled={disabled}\n aria-invalid={invalid || undefined}\n {...props}\n />\n {trailingIcon && (\n <span className=\"ui-input-icon\" aria-hidden=\"true\">\n {trailingIcon}\n </span>\n )}\n {showClear && (\n <button\n type=\"button\"\n className=\"ui-input-clear\"\n aria-label={clearLabel}\n onClick={onClear}\n disabled={disabled}\n >\n ×\n </button>\n )}\n </div>\n );\n});\n\nexport default TextInput;\n","import type { CSSProperties } from 'react';\nimport TextInput from './TextInput';\n\nexport interface SearchInputProps {\n value: string;\n onChange: (value: string) => void;\n ariaLabel: string;\n placeholder?: string;\n onClear?: () => void;\n clearLabel?: string;\n disabled?: boolean;\n className?: string;\n style?: CSSProperties;\n}\n\nfunction SearchIcon() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"6\" cy=\"6\" r=\"4.25\" />\n <path d=\"m9.2 9.2 3 3\" />\n </svg>\n );\n}\n\nexport default function SearchInput({\n value,\n onChange,\n ariaLabel,\n placeholder = 'Search',\n onClear,\n clearLabel = 'Clear search',\n disabled = false,\n className,\n style,\n}: SearchInputProps) {\n return (\n <TextInput\n type=\"text\"\n value={value}\n onChange={(event) => onChange(event.target.value)}\n aria-label={ariaLabel}\n placeholder={placeholder}\n leadingIcon={<SearchIcon />}\n onClear={value ? (onClear ?? (() => onChange(''))) : undefined}\n clearLabel={clearLabel}\n disabled={disabled}\n className={className}\n style={style}\n />\n );\n}\n","import {\n useRef,\n type CSSProperties,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n} from 'react';\n\nexport interface SegmentedItem {\n value: string;\n label: ReactNode;\n disabled?: boolean;\n}\n\nexport interface SegmentedControlProps {\n items: SegmentedItem[];\n value: string;\n onChange: (value: string) => void;\n ariaLabel: string;\n size?: 'sm' | 'md';\n className?: string;\n style?: CSSProperties;\n}\n\nexport function SegmentedControl({\n items,\n value,\n onChange,\n ariaLabel,\n size = 'md',\n className,\n style,\n}: SegmentedControlProps) {\n const refs = useRef<Array<HTMLButtonElement | null>>([]);\n\n const onKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n const enabled = items\n .map((item, index) => ({ item, index }))\n .filter(({ item }) => !item.disabled);\n if (!enabled.length) return;\n const currentIndex = enabled.findIndex(({ item }) => item.value === value);\n\n let nextIndex: number | null = null;\n if (event.key === 'ArrowRight' || event.key === 'ArrowDown')\n nextIndex = (currentIndex + 1) % enabled.length;\n if (event.key === 'ArrowLeft' || event.key === 'ArrowUp')\n nextIndex = (currentIndex - 1 + enabled.length) % enabled.length;\n if (event.key === 'Home') nextIndex = 0;\n if (event.key === 'End') nextIndex = enabled.length - 1;\n if (nextIndex == null) return;\n\n event.preventDefault();\n const next = enabled[nextIndex]!;\n onChange(next.item.value);\n refs.current[next.index]?.focus();\n };\n\n return (\n <div\n role=\"radiogroup\"\n aria-label={ariaLabel}\n className={['ui-segmented', `ui-segmented--${size}`, className ?? '']\n .filter(Boolean)\n .join(' ')}\n style={style}\n onKeyDown={onKeyDown}\n >\n {items.map((item, index) => {\n const selected = item.value === value;\n return (\n <button\n key={item.value}\n ref={(element) => {\n refs.current[index] = element;\n }}\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n tabIndex={selected ? 0 : -1}\n disabled={item.disabled}\n className={['ui-segmented-item', selected ? 'is-active' : ''].filter(Boolean).join(' ')}\n onClick={() => onChange(item.value)}\n >\n {item.label}\n </button>\n );\n })}\n </div>\n );\n}\n","import { useId, type CSSProperties } from 'react';\n\nexport interface SliderProps {\n value: number;\n onChange: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n label?: string;\n ariaLabel?: string;\n showValue?: boolean;\n formatValue?: (value: number) => string;\n disabled?: boolean;\n id?: string;\n className?: string;\n style?: CSSProperties;\n}\n\nexport default function Slider({\n value,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n label,\n ariaLabel,\n showValue = true,\n formatValue = (current) => String(current),\n disabled = false,\n id,\n className,\n style,\n}: SliderProps) {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n\n return (\n <div className={['ui-slider', className ?? ''].filter(Boolean).join(' ')} style={style}>\n {(label || showValue) && (\n <div className=\"ui-slider-head\">\n {label && (\n <label htmlFor={inputId} className=\"ui-slider-label\">\n {label}\n </label>\n )}\n {showValue && <span className=\"ui-slider-value\">{formatValue(value)}</span>}\n </div>\n )}\n <input\n id={inputId}\n type=\"range\"\n className=\"ui-slider-input\"\n min={min}\n max={max}\n step={step}\n value={value}\n disabled={disabled}\n aria-label={ariaLabel ?? (label ? undefined : 'Slider')}\n onChange={(event) => onChange(Number(event.target.value))}\n />\n </div>\n );\n}\n","import { useId, type CSSProperties, type ReactNode } from 'react';\n\nexport interface SwitchProps {\n checked: boolean;\n onChange: (checked: boolean) => void;\n label?: ReactNode;\n description?: ReactNode;\n ariaLabel?: string;\n disabled?: boolean;\n size?: 'sm' | 'md';\n id?: string;\n name?: string;\n className?: string;\n style?: CSSProperties;\n}\n\nexport default function Switch({\n checked,\n onChange,\n label,\n description,\n ariaLabel,\n disabled = false,\n size = 'md',\n id,\n name,\n className,\n style,\n}: SwitchProps) {\n const generatedId = useId();\n const labelId = `${id ?? generatedId}-label`;\n const descriptionId = `${id ?? generatedId}-description`;\n const labelledBy = !ariaLabel && label ? labelId : undefined;\n const accessibleLabel = ariaLabel ?? 'Toggle';\n\n return (\n <div\n className={['ui-switch-row', disabled ? 'is-disabled' : '', className ?? '']\n .filter(Boolean)\n .join(' ')}\n style={style}\n >\n {(label || description) && (\n <div className=\"ui-switch-copy\">\n {label && (\n <span id={labelId} className=\"ui-switch-label\">\n {label}\n </span>\n )}\n {description && (\n <span id={descriptionId} className=\"ui-switch-description\">\n {description}\n </span>\n )}\n </div>\n )}\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n aria-label={labelledBy ? undefined : accessibleLabel}\n aria-labelledby={labelledBy}\n aria-describedby={description ? descriptionId : undefined}\n disabled={disabled}\n name={name}\n className={['ui-switch', `ui-switch--${size}`, checked ? 'is-checked' : '']\n .filter(Boolean)\n .join(' ')}\n onClick={() => onChange(!checked)}\n >\n <span className=\"ui-switch-thumb\" aria-hidden=\"true\" />\n </button>\n </div>\n );\n}\n","import {\n useRef,\n type CSSProperties,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n} from 'react';\n\nexport interface TabItem {\n id: string;\n label: ReactNode;\n disabled?: boolean;\n}\n\nexport interface TabsProps {\n items: TabItem[];\n value: string;\n onChange: (id: string) => void;\n ariaLabel: string;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function Tabs({ items, value, onChange, ariaLabel, className, style }: TabsProps) {\n const refs = useRef<Array<HTMLButtonElement | null>>([]);\n\n const onKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n const enabled = items\n .map((item, index) => ({ item, index }))\n .filter(({ item }) => !item.disabled);\n if (!enabled.length) return;\n const currentIndex = enabled.findIndex(({ item }) => item.id === value);\n\n let nextIndex: number | null = null;\n if (event.key === 'ArrowRight') nextIndex = (currentIndex + 1) % enabled.length;\n if (event.key === 'ArrowLeft') nextIndex = (currentIndex - 1 + enabled.length) % enabled.length;\n if (event.key === 'Home') nextIndex = 0;\n if (event.key === 'End') nextIndex = enabled.length - 1;\n if (nextIndex == null) return;\n\n event.preventDefault();\n const next = enabled[nextIndex]!;\n onChange(next.item.id);\n refs.current[next.index]?.focus();\n };\n\n return (\n <div\n role=\"tablist\"\n aria-label={ariaLabel}\n className={['ui-tabs', className ?? ''].filter(Boolean).join(' ')}\n style={style}\n onKeyDown={onKeyDown}\n >\n {items.map((item, index) => {\n const selected = item.id === value;\n return (\n <button\n key={item.id}\n ref={(element) => {\n refs.current[index] = element;\n }}\n type=\"button\"\n role=\"tab\"\n aria-selected={selected}\n tabIndex={selected ? 0 : -1}\n disabled={item.disabled}\n className={['ui-tab', selected ? 'is-active' : ''].filter(Boolean).join(' ')}\n onClick={() => onChange(item.id)}\n >\n {item.label}\n </button>\n );\n })}\n </div>\n );\n}\n","import { forwardRef, type TextareaHTMLAttributes } from 'react';\n\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n invalid?: boolean;\n}\n\nconst Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n { invalid = false, className, ...props },\n ref,\n) {\n return (\n <textarea\n ref={ref}\n className={['ui-textarea', className ?? ''].filter(Boolean).join(' ')}\n aria-invalid={invalid || undefined}\n {...props}\n />\n );\n});\n\nexport default Textarea;\n","/* eslint-disable react-refresh/only-export-components */\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\nimport Portal from './Portal';\nimport type { Tone } from '../internal/tone';\n\nexport type ToastTone = Exclude<Tone, 'accent' | 'purple'>;\n\nexport interface ToastOptions {\n title?: ReactNode;\n description?: ReactNode;\n tone?: ToastTone;\n /** Milliseconds before auto-dismiss; `0` keeps the toast until dismissed. */\n duration?: number;\n}\n\nexport interface ToastApi {\n showToast: (options: ToastOptions) => string;\n dismissToast: (id: string) => void;\n}\n\ninterface ToastRecord extends ToastOptions {\n id: string;\n}\n\nconst ToastContext = createContext<ToastApi | null>(null);\n\nexport function useToast(): ToastApi {\n const api = useContext(ToastContext);\n if (!api) throw new Error('useToast must be used inside a ToastProvider');\n return api;\n}\n\nfunction ToastItem({ toast, onDismiss }: { toast: ToastRecord; onDismiss: () => void }) {\n const dismissRef = useRef(onDismiss);\n dismissRef.current = onDismiss;\n\n useEffect(() => {\n const duration = toast.duration ?? 4000;\n if (duration <= 0) return;\n const timer = setTimeout(() => dismissRef.current(), duration);\n return () => clearTimeout(timer);\n }, [toast.duration]);\n\n return (\n <div className={`ui-toast ui-toast--${toast.tone ?? 'info'}`} role=\"status\">\n <div className=\"ui-toast-content\">\n {toast.title && <div className=\"ui-toast-title\">{toast.title}</div>}\n {toast.description && <div className=\"ui-toast-description\">{toast.description}</div>}\n </div>\n <button type=\"button\" className=\"ui-toast-close\" aria-label=\"Dismiss\" onClick={onDismiss}>\n ×\n </button>\n </div>\n );\n}\n\nexport interface ToastProviderProps {\n children: ReactNode;\n position?: 'top-right' | 'top-center' | 'bottom-right' | 'bottom-center' | 'bottom-left';\n maxToasts?: number;\n}\n\nexport function ToastProvider({\n children,\n position = 'bottom-right',\n maxToasts = 4,\n}: ToastProviderProps) {\n const [toasts, setToasts] = useState<ToastRecord[]>([]);\n const counter = useRef(0);\n\n const dismissToast = useCallback((id: string) => {\n setToasts((current) => current.filter((toast) => toast.id !== id));\n }, []);\n\n const showToast = useCallback(\n (options: ToastOptions) => {\n const id = `toast-${++counter.current}`;\n const limit = Math.max(1, maxToasts);\n setToasts((current) => [...current, { ...options, id }].slice(-limit));\n return id;\n },\n [maxToasts],\n );\n\n return (\n <ToastContext.Provider value={{ showToast, dismissToast }}>\n {children}\n <Portal>\n <div\n className={`ui-toast-viewport ui-toast-viewport--${position}`}\n aria-live=\"polite\"\n aria-label=\"Notifications\"\n >\n {toasts.map((toast) => (\n <ToastItem key={toast.id} toast={toast} onDismiss={() => dismissToast(toast.id)} />\n ))}\n </div>\n </Portal>\n </ToastContext.Provider>\n );\n}\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\n\nexport interface VisuallyHiddenProps extends HTMLAttributes<HTMLSpanElement> {\n children: ReactNode;\n style?: CSSProperties;\n}\n\nexport default function VisuallyHidden({\n children,\n className,\n style,\n ...props\n}: VisuallyHiddenProps) {\n return (\n <span\n className={['ui-visually-hidden', className ?? ''].filter(Boolean).join(' ')}\n style={style}\n {...props}\n >\n {children}\n </span>\n );\n}\n"],"names":["Avatar","name","color","size","className","style","ariaLabel","initial","label","jsx","Checkbox","indeterminate","props","ref","useRef","useEffect","useIsomorphicLayoutEffect","useLayoutEffect","usePopover","maxHeight","minWidth","fitContent","onEscape","onDismiss","open","setOpen","useState","pos","setPos","triggerRef","menuRef","dismissRef","reposition","useCallback","el","rect","viewportH","viewportW","spaceBelow","openUp","menuWidth","_a","left","openMenu","closeMenu","refocus","onPointerDown","e","target","_b","_c","onKey","HEX_RE","normalizeHex","raw","match","hexToRgb","hex","normalized","channel","value","rgbToHex","rgb","rgbToHsv","g","b","max","min","delta","h","hsvToRgb","hsv","s","v","c","x","m","rp","gp","bp","hsvToHex","hexToHsv","clamp","buttonStyle","NumberStepper","onChange","step","text","setText","inputRef","clampValue","commit","next","stepBy","direction","input","onWheel","event","jsxs","digits","parsed","mapClientToPixel","clientX","clientY","viewportWidth","viewportHeight","imageWidth","imageHeight","safeWidth","safeHeight","supportsScreenPick","ScreenCaptureOverlay","capture","labels","onPick","onCancel","hover","setHover","createPortal","point","data","inputStyle","iconButtonStyle","handleStyle","DEFAULT_COLOR","ColorPicker","presets","setHsv","hexText","setHexText","lastEmitted","originalColor","svRef","hueRef","draggingSv","draggingHue","revert","original","emit","toggleMenu","cancel","hueColor","updateSv","updateHue","eyedropper","setEyedropper","canScreenPick","setCanScreenPick","setCapture","ctor","pickWithEyeDropper","result","startScreenPick","stream","video","resolve","canvas","context","track","index","preset","FOCUSABLE","useFocusTrap","active","containerRef","initialFocusRef","escapeRef","previousFocus","container","initialFocus","onKeyDown","focusable","element","first","last","overlay","headerStyle","Modal","title","onClose","children","maxWidth","panelStyle","panelClassName","closeLabel","closeOnBackdrop","closeOnEscape","titleId","useId","panelRef","ConfirmModal","message","onConfirm","danger","confirmLabel","cancelLabel","copyToClipboard","previouslyFocused","textarea","ok","GAP","Tooltip","content","delay","disabled","as","setViewportWidth","timerRef","hoveredRef","tooltipId","onResize","panelMaxWidth","position","trigger","panel","width","height","half","spaceAbove","fitsAbove","fitsBelow","below","show","hide","wrapperStyle","handlers","CopyValue","formatValue","current","copyValue","tooltipLabel","copied","setCopied","copy","Fragment","parseISO","date","toISO","year","month","day","DatePicker","placeholder","invalid","format","fontSize","triggerStyle","locale","weekdayLabels","previousMonthLabel","nextMonthLabel","clearLabel","todayLabel","selected","view","setView","base","defaultWeekdayLabels","useMemo","formatter","_","weekdays","monthTitle","showCalendar","shiftMonth","firstOfMonth","gridStart","cells","todayISO","onTriggerKeyDown","pick","iso","weekday","cell","isOutside","isSelected","isToday","Dropdown","options","dot","fontWeight","fullWidth","onOpenChange","activeIndex","setActiveIndex","expanded","setExpanded","listboxId","goBack","parentIndex","option","handleEscape","selectedIndex","o","currentOptions","showMenu","currentChildIndex","child","i","key","optionNode","InlineEditorCard","onSave","saveDisabled","saveLabel","embedded","ListScreen","subtitle","action","testId","ListCard","ListRow","borderBottom","ListSearch","ListEmptyState","MonthSelector","selectedMonth","setSelectedMonth","allOption","previousLabel","nextLabel","months","idx","canGoOlder","canGoNewer","Radio","buttonBase","RowActions","onEdit","onDelete","confirmDelete","editLabel","deleteLabel","confirming","setConfirming","rootStyle","Skeleton","radius","circle","SkeletonStatus","PageSkeleton","padding","PageHeaderSkeleton","actionWidth","marginBottom","SearchSkeleton","ListCardSkeleton","rows","leading","trailing","DetailRowsSkeleton","Alert","tone","dismissLabel","role","resolvedRole","Badge","variant","Chip","leadingIcon","onRemove","removeLabel","Spinner","Button","forwardRef","loading","loadingLabel","trailingIcon","type","IconButton","Card","CardHeader","actions","CardBody","CardFooter","Section","contentClassName","Combobox","noResultsLabel","query","setQuery","rootRef","listId","filtered","openList","select","DataTable","columns","rowKey","caption","sort","onSortChange","emptyState","onRowClick","column","activeSort","row","Drawer","footer","side","bodyClassName","mounted","setMounted","previous","isItem","entry","DropdownMenu","items","align","menuId","close","onMenuKeyDown","currentIndex","_d","_e","EmptyState","description","icon","FileUpload","onFiles","accept","multiple","hint","inputId","dragging","setDragging","handleFiles","files","openPicker","onDrop","isRenderProp","FormField","htmlFor","id","error","required","generatedId","isValidElement","childId","controlId","hintId","errorId","describedBy","control","childDescribedBy","cloneElement","PageHeader","onBack","backLabel","Portal","ProgressBar","valueText","safeMax","clamped","percent","TextInput","onClear","wrapperClassName","showClear","SearchIcon","SearchInput","SegmentedControl","refs","enabled","item","nextIndex","Slider","showValue","Switch","checked","labelId","descriptionId","labelledBy","accessibleLabel","Tabs","Textarea","ToastContext","createContext","useToast","api","useContext","ToastItem","toast","duration","timer","ToastProvider","maxToasts","toasts","setToasts","counter","dismissToast","showToast","limit","VisuallyHidden"],"mappings":"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"}
|