@revealui/presentation 0.2.0 → 0.3.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.
Files changed (130) hide show
  1. package/README.md +146 -42
  2. package/dist/Box-DC3F8eRf.js +430 -0
  3. package/dist/Box-DC3F8eRf.js.map +1 -0
  4. package/dist/Text-jQVi12Hi.js +218 -0
  5. package/dist/Text-jQVi12Hi.js.map +1 -0
  6. package/dist/client.d.ts +3 -1
  7. package/dist/client.d.ts.map +1 -1
  8. package/dist/client.js +134 -2803
  9. package/dist/client.js.map +1 -1
  10. package/dist/components/BuiltWithRevealUI.d.ts +12 -0
  11. package/dist/components/BuiltWithRevealUI.d.ts.map +1 -0
  12. package/dist/components/Button.d.ts +2 -1
  13. package/dist/components/Button.d.ts.map +1 -1
  14. package/dist/components/Card.d.ts +18 -6
  15. package/dist/components/Card.d.ts.map +1 -1
  16. package/dist/components/Checkbox.d.ts +6 -3
  17. package/dist/components/Checkbox.d.ts.map +1 -1
  18. package/dist/components/FormLabel.d.ts +5 -1
  19. package/dist/components/FormLabel.d.ts.map +1 -1
  20. package/dist/components/Input.d.ts +4 -2
  21. package/dist/components/Input.d.ts.map +1 -1
  22. package/dist/components/Label.d.ts +7 -2
  23. package/dist/components/Label.d.ts.map +1 -1
  24. package/dist/components/Pagination.d.ts +12 -23
  25. package/dist/components/Pagination.d.ts.map +1 -1
  26. package/dist/components/Select.d.ts +36 -13
  27. package/dist/components/Select.d.ts.map +1 -1
  28. package/dist/components/Textarea.d.ts +4 -2
  29. package/dist/components/Textarea.d.ts.map +1 -1
  30. package/dist/components/accordion.d.ts.map +1 -1
  31. package/dist/components/alert.d.ts.map +1 -1
  32. package/dist/components/auth-layout.d.ts +7 -2
  33. package/dist/components/auth-layout.d.ts.map +1 -1
  34. package/dist/components/avatar-group.d.ts.map +1 -1
  35. package/dist/components/avatar.d.ts +6 -5
  36. package/dist/components/avatar.d.ts.map +1 -1
  37. package/dist/components/badge.d.ts +5 -5
  38. package/dist/components/badge.d.ts.map +1 -1
  39. package/dist/components/breadcrumb.d.ts.map +1 -1
  40. package/dist/components/button-headless.d.ts +2 -1
  41. package/dist/components/button-headless.d.ts.map +1 -1
  42. package/dist/components/callout.d.ts.map +1 -1
  43. package/dist/components/checkbox-headless.d.ts.map +1 -1
  44. package/dist/components/code-block.d.ts.map +1 -1
  45. package/dist/components/combobox.d.ts.map +1 -1
  46. package/dist/components/dialog.d.ts.map +1 -1
  47. package/dist/components/drawer.d.ts.map +1 -1
  48. package/dist/components/dropdown.d.ts.map +1 -1
  49. package/dist/components/empty-state.d.ts.map +1 -1
  50. package/dist/components/fieldset.d.ts.map +1 -1
  51. package/dist/components/heading.d.ts.map +1 -1
  52. package/dist/components/index.d.ts +19 -1
  53. package/dist/components/index.d.ts.map +1 -1
  54. package/dist/components/input-headless.d.ts +5 -3
  55. package/dist/components/input-headless.d.ts.map +1 -1
  56. package/dist/components/kbd.d.ts.map +1 -1
  57. package/dist/components/link.d.ts +3 -2
  58. package/dist/components/link.d.ts.map +1 -1
  59. package/dist/components/listbox.d.ts.map +1 -1
  60. package/dist/components/navbar.d.ts +5 -5
  61. package/dist/components/navbar.d.ts.map +1 -1
  62. package/dist/components/pricing-table.d.ts +23 -0
  63. package/dist/components/pricing-table.d.ts.map +1 -0
  64. package/dist/components/progress.d.ts.map +1 -1
  65. package/dist/components/radio.d.ts.map +1 -1
  66. package/dist/components/rating.d.ts.map +1 -1
  67. package/dist/components/select-headless.d.ts +5 -2
  68. package/dist/components/select-headless.d.ts.map +1 -1
  69. package/dist/components/sidebar-layout.d.ts.map +1 -1
  70. package/dist/components/sidebar.d.ts +5 -5
  71. package/dist/components/sidebar.d.ts.map +1 -1
  72. package/dist/components/skeleton.d.ts.map +1 -1
  73. package/dist/components/slider.d.ts.map +1 -1
  74. package/dist/components/stacked-layout.d.ts.map +1 -1
  75. package/dist/components/stat.d.ts.map +1 -1
  76. package/dist/components/stepper.d.ts.map +1 -1
  77. package/dist/components/switch.d.ts.map +1 -1
  78. package/dist/components/table.d.ts.map +1 -1
  79. package/dist/components/tabs.d.ts.map +1 -1
  80. package/dist/components/text.d.ts.map +1 -1
  81. package/dist/components/textarea-headless.d.ts +5 -2
  82. package/dist/components/textarea-headless.d.ts.map +1 -1
  83. package/dist/components/timeline.d.ts.map +1 -1
  84. package/dist/components/toast.d.ts.map +1 -1
  85. package/dist/components/tooltip.d.ts +7 -5
  86. package/dist/components/tooltip.d.ts.map +1 -1
  87. package/dist/hooks/index.d.ts.map +1 -1
  88. package/dist/hooks/use-click-outside.d.ts.map +1 -1
  89. package/dist/hooks/use-close-context.d.ts.map +1 -1
  90. package/dist/hooks/use-controllable-state.d.ts.map +1 -1
  91. package/dist/hooks/use-data-interactive.d.ts.map +1 -1
  92. package/dist/hooks/use-field-context.d.ts.map +1 -1
  93. package/dist/hooks/use-focus-trap.d.ts.map +1 -1
  94. package/dist/hooks/use-layout-animation.d.ts.map +1 -1
  95. package/dist/hooks/use-popover.d.ts.map +1 -1
  96. package/dist/hooks/use-roving-tabindex.d.ts.map +1 -1
  97. package/dist/hooks/use-toggle.d.ts.map +1 -1
  98. package/dist/hooks/use-transition.d.ts.map +1 -1
  99. package/dist/hooks/use-type-ahead.d.ts.map +1 -1
  100. package/dist/index.d.ts +1 -0
  101. package/dist/index.d.ts.map +1 -1
  102. package/dist/index.js +206 -65
  103. package/dist/index.js.map +1 -1
  104. package/dist/primitives/Box.d.ts +3 -1
  105. package/dist/primitives/Box.d.ts.map +1 -1
  106. package/dist/primitives/Flex.d.ts +3 -1
  107. package/dist/primitives/Flex.d.ts.map +1 -1
  108. package/dist/primitives/Grid.d.ts +3 -1
  109. package/dist/primitives/Grid.d.ts.map +1 -1
  110. package/dist/primitives/Heading.d.ts +3 -1
  111. package/dist/primitives/Heading.d.ts.map +1 -1
  112. package/dist/primitives/Slot.d.ts +3 -1
  113. package/dist/primitives/Slot.d.ts.map +1 -1
  114. package/dist/primitives/Text.d.ts +3 -1
  115. package/dist/primitives/Text.d.ts.map +1 -1
  116. package/dist/primitives/index.d.ts.map +1 -1
  117. package/dist/server.d.ts +2 -1
  118. package/dist/server.d.ts.map +1 -1
  119. package/dist/server.js +14 -13
  120. package/dist/tooltip-DQYjYWbe.js +5085 -0
  121. package/dist/tooltip-DQYjYWbe.js.map +1 -0
  122. package/dist/utils/cn.d.ts.map +1 -1
  123. package/dist/utils/index.d.ts.map +1 -1
  124. package/package.json +7 -4
  125. package/dist/Box-DDhRNK02.js +0 -45
  126. package/dist/Box-DDhRNK02.js.map +0 -1
  127. package/dist/Text-BIym7IhD.js +0 -425
  128. package/dist/Text-BIym7IhD.js.map +0 -1
  129. package/dist/tooltip-oH4lAnkn.js +0 -2277
  130. package/dist/tooltip-oH4lAnkn.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"tooltip-oH4lAnkn.js","sources":["../src/components/accordion.tsx","../src/hooks/use-data-interactive.ts","../src/components/link.tsx","../src/components/button-headless.tsx","../src/components/avatar.tsx","../src/components/avatar-group.tsx","../src/components/breadcrumb.tsx","../src/components/Checkbox.tsx","../src/components/callout.tsx","../src/hooks/use-field-context.tsx","../src/hooks/use-controllable-state.ts","../src/hooks/use-toggle.ts","../src/components/checkbox-headless.tsx","../src/components/code-block.tsx","../src/hooks/use-escape-key.ts","../src/hooks/use-focus-trap.ts","../src/hooks/use-scroll-lock.ts","../src/hooks/use-transition.ts","../src/components/drawer.tsx","../src/components/empty-state.tsx","../src/components/input-headless.tsx","../src/components/kbd.tsx","../src/components/progress.tsx","../src/components/rating.tsx","../src/components/Select.tsx","../src/components/select-headless.tsx","../src/components/skeleton.tsx","../src/components/slider.tsx","../src/components/stat.tsx","../src/components/stepper.tsx","../src/components/tabs.tsx","../src/components/textarea-headless.tsx","../src/components/timeline.tsx","../src/components/toast.tsx","../src/components/tooltip.tsx"],"sourcesContent":["'use client'\n\nimport clsx from 'clsx'\nimport type React from 'react'\nimport { useId, useState } from 'react'\n\nexport function Accordion({\n className,\n children,\n}: {\n className?: string\n children: React.ReactNode\n}) {\n return (\n <div className={clsx('divide-y divide-zinc-200 dark:divide-zinc-700', className)}>\n {children}\n </div>\n )\n}\n\nexport function AccordionItem({\n title,\n defaultOpen = false,\n className,\n children,\n}: {\n title: React.ReactNode\n defaultOpen?: boolean\n className?: string\n children: React.ReactNode\n}) {\n const [open, setOpen] = useState(defaultOpen)\n const id = useId()\n\n return (\n <div className={className}>\n <button\n type=\"button\"\n id={`${id}-trigger`}\n aria-expanded={open}\n aria-controls={`${id}-content`}\n onClick={() => setOpen((prev) => !prev)}\n className=\"flex w-full items-center justify-between gap-4 py-4 text-left text-sm font-medium text-zinc-950 transition-colors hover:text-zinc-700 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 dark:text-white dark:hover:text-zinc-300\"\n >\n <span>{title}</span>\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n className={clsx(\n 'size-4 shrink-0 text-zinc-400 transition-transform duration-200',\n open && 'rotate-180',\n )}\n >\n <path\n d=\"M4 6l4 4 4-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n {open && (\n <div\n id={`${id}-content`}\n role=\"region\"\n aria-labelledby={`${id}-trigger`}\n className=\"pb-4 text-sm text-zinc-600 dark:text-zinc-400\"\n >\n {children}\n </div>\n )}\n </div>\n )\n}\n","import { useCallback, useState } from 'react'\n\ninterface UseDataInteractiveOptions {\n disabled?: boolean\n}\n\ninterface DataInteractiveProps {\n 'data-hover'?: string\n 'data-focus'?: string\n 'data-active'?: string\n 'data-disabled'?: string\n onPointerEnter: () => void\n onPointerLeave: () => void\n onPointerDown: () => void\n onPointerUp: () => void\n onFocus: (e: React.FocusEvent<HTMLElement>) => void\n onBlur: () => void\n}\n\nexport function useDataInteractive({\n disabled = false,\n}: UseDataInteractiveOptions = {}): DataInteractiveProps {\n const [hover, setHover] = useState(false)\n const [focus, setFocus] = useState(false)\n const [active, setActive] = useState(false)\n\n const onPointerEnter = useCallback(() => {\n if (!disabled) setHover(true)\n }, [disabled])\n\n const onPointerLeave = useCallback(() => {\n setHover(false)\n setActive(false)\n }, [])\n\n const onPointerDown = useCallback(() => {\n if (!disabled) setActive(true)\n }, [disabled])\n\n const onPointerUp = useCallback(() => {\n setActive(false)\n }, [])\n\n const onFocus = useCallback(\n (e: React.FocusEvent<HTMLElement>) => {\n if (!disabled && e.currentTarget.matches(':focus-visible')) {\n setFocus(true)\n }\n },\n [disabled],\n )\n\n const onBlur = useCallback(() => {\n setFocus(false)\n }, [])\n\n return {\n 'data-hover': hover ? '' : undefined,\n 'data-focus': focus ? '' : undefined,\n 'data-active': active ? '' : undefined,\n 'data-disabled': disabled ? '' : undefined,\n onPointerEnter,\n onPointerLeave,\n onPointerDown,\n onPointerUp,\n onFocus,\n onBlur,\n }\n}\n","/**\n * Link component - Framework-agnostic link component\n *\n * This is a generic Link component that works with any framework.\n * For framework-specific implementations:\n * - Next.js: Use Next.js Link component (see apps/cms/src/lib/components/Link)\n * - Other frameworks: Wrap this component with your framework's Link\n *\n * See Catalyst documentation for framework-specific examples:\n * https://catalyst.tailwindui.com/docs#client-side-router-integration\n */\n\nimport type React from 'react'\nimport { forwardRef } from 'react'\nimport { useDataInteractive } from '../hooks/use-data-interactive.js'\n\nexport const Link = forwardRef(function Link(\n props: { href: string } & React.ComponentPropsWithoutRef<'a'>,\n ref: React.ForwardedRef<HTMLAnchorElement>,\n) {\n const interactiveProps = useDataInteractive()\n\n return <a {...props} {...interactiveProps} ref={ref} />\n})\n","import clsx from 'clsx'\nimport type React from 'react'\nimport { forwardRef } from 'react'\nimport { useDataInteractive } from '../hooks/use-data-interactive.js'\nimport { Link } from './link.js'\n\nconst styles = {\n base: [\n // Base\n 'relative isolate inline-flex items-baseline justify-center gap-x-2 rounded-lg border text-base/6 font-semibold',\n // Sizing\n 'px-[calc(--spacing(3.5)-1px)] py-[calc(--spacing(2.5)-1px)] sm:px-[calc(--spacing(3)-1px)] sm:py-[calc(--spacing(1.5)-1px)] sm:text-sm/6',\n // Focus\n 'focus:not-data-focus:outline-hidden data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-blue-500',\n // Disabled\n 'data-disabled:opacity-50',\n // Icon\n '*:data-[slot=icon]:-mx-0.5 *:data-[slot=icon]:my-0.5 *:data-[slot=icon]:size-5 *:data-[slot=icon]:shrink-0 *:data-[slot=icon]:self-center *:data-[slot=icon]:text-(--btn-icon) sm:*:data-[slot=icon]:my-1 sm:*:data-[slot=icon]:size-4 forced-colors:[--btn-icon:ButtonText] forced-colors:data-hover:[--btn-icon:ButtonText]',\n ],\n solid: [\n // Optical border, implemented as the button background to avoid corner artifacts\n 'border-transparent bg-(--btn-border)',\n // Dark mode: border is rendered on `after` so background is set to button background\n 'dark:bg-(--btn-bg)',\n // Button background, implemented as foreground layer to stack on top of pseudo-border layer\n 'before:absolute before:inset-0 before:-z-10 before:rounded-[calc(var(--radius-lg)-1px)] before:bg-(--btn-bg)',\n // Drop shadow, applied to the inset `before` layer so it blends with the border\n 'before:shadow-sm',\n // Background color is moved to control and shadow is removed in dark mode so hide `before` pseudo\n 'dark:before:hidden',\n // Dark mode: Subtle white outline is applied using a border\n 'dark:border-white/5',\n // Shim/overlay, inset to match button foreground and used for hover state + highlight shadow\n 'after:absolute after:inset-0 after:-z-10 after:rounded-[calc(var(--radius-lg)-1px)]',\n // Inner highlight shadow\n 'after:shadow-[inset_0_1px_--theme(--color-white/15%)]',\n // White overlay on hover\n 'data-active:after:bg-(--btn-hover-overlay) data-hover:after:bg-(--btn-hover-overlay)',\n // Dark mode: `after` layer expands to cover entire button\n 'dark:after:-inset-px dark:after:rounded-lg',\n // Disabled\n 'data-disabled:before:shadow-none data-disabled:after:shadow-none',\n ],\n outline: [\n // Base\n 'border-zinc-950/10 text-zinc-950 data-active:bg-zinc-950/2.5 data-hover:bg-zinc-950/2.5',\n // Dark mode\n 'dark:border-white/15 dark:text-white dark:[--btn-bg:transparent] dark:data-active:bg-white/5 dark:data-hover:bg-white/5',\n // Icon\n '[--btn-icon:var(--color-zinc-500)] data-active:[--btn-icon:var(--color-zinc-700)] data-hover:[--btn-icon:var(--color-zinc-700)] dark:data-active:[--btn-icon:var(--color-zinc-400)] dark:data-hover:[--btn-icon:var(--color-zinc-400)]',\n ],\n plain: [\n // Base\n 'border-transparent text-zinc-950 data-active:bg-zinc-950/5 data-hover:bg-zinc-950/5',\n // Dark mode\n 'dark:text-white dark:data-active:bg-white/10 dark:data-hover:bg-white/10',\n // Icon\n '[--btn-icon:var(--color-zinc-500)] data-active:[--btn-icon:var(--color-zinc-700)] data-hover:[--btn-icon:var(--color-zinc-700)] dark:[--btn-icon:var(--color-zinc-500)] dark:data-active:[--btn-icon:var(--color-zinc-400)] dark:data-hover:[--btn-icon:var(--color-zinc-400)]',\n ],\n colors: {\n 'dark/zinc': [\n 'text-white [--btn-bg:var(--color-zinc-900)] [--btn-border:var(--color-zinc-950)]/90 [--btn-hover-overlay:var(--color-white)]/10',\n 'dark:text-white dark:[--btn-bg:var(--color-zinc-600)] dark:[--btn-hover-overlay:var(--color-white)]/5',\n '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-300)] data-hover:[--btn-icon:var(--color-zinc-300)]',\n ],\n light: [\n 'text-zinc-950 [--btn-bg:white] [--btn-border:var(--color-zinc-950)]/10 [--btn-hover-overlay:var(--color-zinc-950)]/2.5 data-active:[--btn-border:var(--color-zinc-950)]/15 data-hover:[--btn-border:var(--color-zinc-950)]/15',\n 'dark:text-white dark:[--btn-hover-overlay:var(--color-white)]/5 dark:[--btn-bg:var(--color-zinc-800)]',\n '[--btn-icon:var(--color-zinc-500)] data-active:[--btn-icon:var(--color-zinc-700)] data-hover:[--btn-icon:var(--color-zinc-700)] dark:[--btn-icon:var(--color-zinc-500)] dark:data-active:[--btn-icon:var(--color-zinc-400)] dark:data-hover:[--btn-icon:var(--color-zinc-400)]',\n ],\n 'dark/white': [\n 'text-white [--btn-bg:var(--color-zinc-900)] [--btn-border:var(--color-zinc-950)]/90 [--btn-hover-overlay:var(--color-white)]/10',\n 'dark:text-zinc-950 dark:[--btn-bg:white] dark:[--btn-hover-overlay:var(--color-zinc-950)]/5',\n '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-300)] data-hover:[--btn-icon:var(--color-zinc-300)] dark:[--btn-icon:var(--color-zinc-500)] dark:data-active:[--btn-icon:var(--color-zinc-400)] dark:data-hover:[--btn-icon:var(--color-zinc-400)]',\n ],\n dark: [\n 'text-white [--btn-bg:var(--color-zinc-900)] [--btn-border:var(--color-zinc-950)]/90 [--btn-hover-overlay:var(--color-white)]/10',\n 'dark:[--btn-hover-overlay:var(--color-white)]/5 dark:[--btn-bg:var(--color-zinc-800)]',\n '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-300)] data-hover:[--btn-icon:var(--color-zinc-300)]',\n ],\n white: [\n 'text-zinc-950 [--btn-bg:white] [--btn-border:var(--color-zinc-950)]/10 [--btn-hover-overlay:var(--color-zinc-950)]/2.5 data-active:[--btn-border:var(--color-zinc-950)]/15 data-hover:[--btn-border:var(--color-zinc-950)]/15',\n 'dark:[--btn-hover-overlay:var(--color-zinc-950)]/5',\n '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-500)] data-hover:[--btn-icon:var(--color-zinc-500)]',\n ],\n zinc: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-zinc-600)] [--btn-border:var(--color-zinc-700)]/90',\n 'dark:[--btn-hover-overlay:var(--color-white)]/5',\n '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-300)] data-hover:[--btn-icon:var(--color-zinc-300)]',\n ],\n indigo: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-indigo-500)] [--btn-border:var(--color-indigo-600)]/90',\n '[--btn-icon:var(--color-indigo-300)] data-active:[--btn-icon:var(--color-indigo-200)] data-hover:[--btn-icon:var(--color-indigo-200)]',\n ],\n cyan: [\n 'text-cyan-950 [--btn-bg:var(--color-cyan-300)] [--btn-border:var(--color-cyan-400)]/80 [--btn-hover-overlay:var(--color-white)]/25',\n '[--btn-icon:var(--color-cyan-500)]',\n ],\n red: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-red-600)] [--btn-border:var(--color-red-700)]/90',\n '[--btn-icon:var(--color-red-300)] data-active:[--btn-icon:var(--color-red-200)] data-hover:[--btn-icon:var(--color-red-200)]',\n ],\n orange: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-orange-500)] [--btn-border:var(--color-orange-600)]/90',\n '[--btn-icon:var(--color-orange-300)] data-active:[--btn-icon:var(--color-orange-200)] data-hover:[--btn-icon:var(--color-orange-200)]',\n ],\n amber: [\n 'text-amber-950 [--btn-hover-overlay:var(--color-white)]/25 [--btn-bg:var(--color-amber-400)] [--btn-border:var(--color-amber-500)]/80',\n '[--btn-icon:var(--color-amber-600)]',\n ],\n yellow: [\n 'text-yellow-950 [--btn-hover-overlay:var(--color-white)]/25 [--btn-bg:var(--color-yellow-300)] [--btn-border:var(--color-yellow-400)]/80',\n '[--btn-icon:var(--color-yellow-600)] data-active:[--btn-icon:var(--color-yellow-700)] data-hover:[--btn-icon:var(--color-yellow-700)]',\n ],\n lime: [\n 'text-lime-950 [--btn-hover-overlay:var(--color-white)]/25 [--btn-bg:var(--color-lime-300)] [--btn-border:var(--color-lime-400)]/80',\n '[--btn-icon:var(--color-lime-600)] data-active:[--btn-icon:var(--color-lime-700)] data-hover:[--btn-icon:var(--color-lime-700)]',\n ],\n green: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-green-600)] [--btn-border:var(--color-green-700)]/90',\n '[--btn-icon:var(--color-white)]/60 data-active:[--btn-icon:var(--color-white)]/80 data-hover:[--btn-icon:var(--color-white)]/80',\n ],\n emerald: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-emerald-600)] [--btn-border:var(--color-emerald-700)]/90',\n '[--btn-icon:var(--color-white)]/60 data-active:[--btn-icon:var(--color-white)]/80 data-hover:[--btn-icon:var(--color-white)]/80',\n ],\n teal: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-teal-600)] [--btn-border:var(--color-teal-700)]/90',\n '[--btn-icon:var(--color-white)]/60 data-active:[--btn-icon:var(--color-white)]/80 data-hover:[--btn-icon:var(--color-white)]/80',\n ],\n sky: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-sky-500)] [--btn-border:var(--color-sky-600)]/80',\n '[--btn-icon:var(--color-white)]/60 data-active:[--btn-icon:var(--color-white)]/80 data-hover:[--btn-icon:var(--color-white)]/80',\n ],\n blue: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-blue-600)] [--btn-border:var(--color-blue-700)]/90',\n '[--btn-icon:var(--color-blue-400)] data-active:[--btn-icon:var(--color-blue-300)] data-hover:[--btn-icon:var(--color-blue-300)]',\n ],\n violet: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-violet-500)] [--btn-border:var(--color-violet-600)]/90',\n '[--btn-icon:var(--color-violet-300)] data-active:[--btn-icon:var(--color-violet-200)] data-hover:[--btn-icon:var(--color-violet-200)]',\n ],\n purple: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-purple-500)] [--btn-border:var(--color-purple-600)]/90',\n '[--btn-icon:var(--color-purple-300)] data-active:[--btn-icon:var(--color-purple-200)] data-hover:[--btn-icon:var(--color-purple-200)]',\n ],\n fuchsia: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-fuchsia-500)] [--btn-border:var(--color-fuchsia-600)]/90',\n '[--btn-icon:var(--color-fuchsia-300)] data-active:[--btn-icon:var(--color-fuchsia-200)] data-hover:[--btn-icon:var(--color-fuchsia-200)]',\n ],\n pink: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-pink-500)] [--btn-border:var(--color-pink-600)]/90',\n '[--btn-icon:var(--color-pink-300)] data-active:[--btn-icon:var(--color-pink-200)] data-hover:[--btn-icon:var(--color-pink-200)]',\n ],\n rose: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-rose-500)] [--btn-border:var(--color-rose-600)]/90',\n '[--btn-icon:var(--color-rose-300)] data-active:[--btn-icon:var(--color-rose-200)] data-hover:[--btn-icon:var(--color-rose-200)]',\n ],\n },\n}\n\ntype ButtonProps = (\n | { color?: keyof typeof styles.colors; outline?: never; plain?: never }\n | { color?: never; outline: true; plain?: never }\n | { color?: never; outline?: never; plain: true }\n) & { className?: string; children: React.ReactNode } & (\n | ({\n href?: never\n disabled?: boolean\n type?: 'button' | 'submit' | 'reset'\n } & Omit<React.ComponentPropsWithoutRef<'button'>, 'className' | 'type'>)\n | ({\n href: string\n } & Omit<React.ComponentPropsWithoutRef<typeof Link>, 'className'>)\n )\n\nexport const Button = forwardRef(function Button(\n { color, outline, plain, className, children, ...props }: ButtonProps,\n ref: React.ForwardedRef<HTMLElement>,\n) {\n const disabled = 'disabled' in props ? props.disabled : false\n const interactiveProps = useDataInteractive({ disabled: disabled ?? false })\n\n const classes = clsx(\n className,\n styles.base,\n outline\n ? styles.outline\n : plain\n ? styles.plain\n : clsx(styles.solid, styles.colors[color ?? 'dark/zinc']),\n )\n\n return typeof props.href === 'string' ? (\n <Link {...props} className={classes} ref={ref as React.ForwardedRef<HTMLAnchorElement>}>\n <TouchTarget>{children}</TouchTarget>\n </Link>\n ) : (\n <button\n type=\"button\"\n {...props}\n {...interactiveProps}\n className={clsx(classes, 'cursor-default')}\n ref={ref as React.ForwardedRef<HTMLButtonElement>}\n >\n <TouchTarget>{children}</TouchTarget>\n </button>\n )\n})\n\n/**\n * Expand the hit area to at least 44x44px on touch devices\n */\nexport function TouchTarget({ children }: { children: React.ReactNode }) {\n return (\n <>\n <span\n className=\"absolute top-1/2 left-1/2 size-[max(100%,2.75rem)] -translate-x-1/2 -translate-y-1/2 pointer-fine:hidden\"\n aria-hidden=\"true\"\n />\n {children}\n </>\n )\n}\n","import clsx from 'clsx'\nimport type React from 'react'\nimport { forwardRef } from 'react'\nimport { useDataInteractive } from '../hooks/use-data-interactive.js'\nimport { TouchTarget } from './button-headless.js'\nimport { Link } from './link.js'\n\ntype AvatarProps = {\n src?: string | null | undefined\n square?: boolean\n initials?: string\n alt?: string\n className?: string\n}\n\nexport function Avatar({\n src = null,\n square = false,\n initials,\n alt = '',\n className,\n ...props\n}: AvatarProps & React.ComponentPropsWithoutRef<'span'>) {\n const title = alt && alt.trim().length > 0 ? alt.trim() : 'Avatar'\n\n return (\n <span\n data-slot=\"avatar\"\n {...props}\n className={clsx(\n className,\n // Basic layout\n 'inline-grid shrink-0 align-middle [--avatar-radius:20%] *:col-start-1 *:row-start-1',\n 'outline -outline-offset-1 outline-black/10 dark:outline-white/10',\n // Border radius\n square\n ? 'rounded-(--avatar-radius) *:rounded-(--avatar-radius)'\n : 'rounded-full *:rounded-full',\n )}\n >\n {initials && (\n <svg\n className=\"size-full fill-current p-[5%] text-[48px] font-medium uppercase select-none\"\n viewBox=\"0 0 100 100\"\n aria-hidden={alt && alt.trim().length > 0 ? undefined : 'true'}\n >\n <title>{title}</title>\n <text\n x=\"50%\"\n y=\"50%\"\n alignmentBaseline=\"middle\"\n dominantBaseline=\"middle\"\n textAnchor=\"middle\"\n dy=\".125em\"\n >\n {initials}\n </text>\n </svg>\n )}\n {src && <img className=\"size-full\" src={src} alt={alt} />}\n </span>\n )\n}\n\nexport const AvatarButton = forwardRef(function AvatarButton(\n {\n src,\n square = false,\n initials,\n alt,\n className,\n ...props\n }: AvatarProps &\n (\n | ({\n href?: never\n disabled?: boolean\n } & Omit<React.ComponentPropsWithoutRef<'button'>, 'className'>)\n | ({ href: string } & Omit<React.ComponentPropsWithoutRef<typeof Link>, 'className'>)\n ),\n ref: React.ForwardedRef<HTMLButtonElement>,\n) {\n const disabled = 'disabled' in props ? props.disabled : false\n const interactiveProps = useDataInteractive({ disabled: disabled ?? false })\n\n const classes = clsx(\n className,\n square ? 'rounded-[20%]' : 'rounded-full',\n 'relative inline-grid focus:not-data-focus:outline-hidden data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-blue-500',\n )\n\n return typeof props.href === 'string' ? (\n <Link {...props} className={classes} ref={ref as React.ForwardedRef<HTMLAnchorElement>}>\n <TouchTarget>\n <Avatar src={src} square={square} initials={initials} alt={alt} />\n </TouchTarget>\n </Link>\n ) : (\n <button type=\"button\" {...props} {...interactiveProps} className={classes} ref={ref}>\n <TouchTarget>\n <Avatar src={src} square={square} initials={initials} alt={alt} />\n </TouchTarget>\n </button>\n )\n})\n","import clsx from 'clsx'\nimport { Avatar } from './avatar.js'\n\ntype AvatarGroupItem = {\n src?: string | null\n initials?: string\n alt?: string\n}\n\nexport function AvatarGroup({\n items,\n max = 5,\n size = 'md',\n className,\n}: {\n items: AvatarGroupItem[]\n max?: number\n size?: 'xs' | 'sm' | 'md' | 'lg'\n className?: string\n}) {\n const sizeClasses = { xs: 'size-6', sm: 'size-8', md: 'size-10', lg: 'size-12' }\n const overlapClass = { xs: '-ml-1.5', sm: '-ml-2', md: '-ml-3', lg: '-ml-4' }\n\n const visible = items.slice(0, max)\n const overflow = items.length - max\n\n return (\n <div className={clsx('flex items-center', className)}>\n {visible.map((item, i) => {\n return (\n <div\n // biome-ignore lint/suspicious/noArrayIndexKey: avatar items are positionally ordered with no stable ID\n key={i}\n className={clsx(\n 'ring-2 ring-white dark:ring-zinc-900',\n sizeClasses[size],\n i > 0 && overlapClass[size],\n 'rounded-full',\n )}\n >\n <Avatar\n src={item.src}\n initials={item.initials}\n alt={item.alt ?? ''}\n className=\"size-full\"\n />\n </div>\n )\n })}\n {overflow > 0 && (\n <div\n className={clsx(\n overlapClass[size],\n sizeClasses[size],\n 'flex items-center justify-center rounded-full bg-zinc-200 text-xs font-medium text-zinc-600 ring-2 ring-white dark:bg-zinc-700 dark:text-zinc-300 dark:ring-zinc-900',\n )}\n role=\"img\"\n aria-label={`${overflow} more`}\n >\n +{overflow}\n </div>\n )}\n </div>\n )\n}\n","import clsx from 'clsx'\nimport type React from 'react'\n\nexport type BreadcrumbItem = {\n label: React.ReactNode\n href?: string\n}\n\nexport function Breadcrumb({\n items,\n separator,\n className,\n}: {\n items: BreadcrumbItem[]\n separator?: React.ReactNode\n className?: string\n}) {\n const sep = separator ?? (\n <svg aria-hidden=\"true\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"size-3.5 text-zinc-400\">\n <path\n d=\"M6 4l4 4-4 4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n\n return (\n <nav aria-label=\"Breadcrumb\">\n <ol className={clsx('flex flex-wrap items-center gap-1.5 text-sm', className)}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey: breadcrumb items are positionally ordered with no stable ID\n <li key={index} className=\"flex items-center gap-1.5\">\n {isLast || !item.href ? (\n <span\n aria-current={isLast ? 'page' : undefined}\n className={clsx(\n isLast\n ? 'font-medium text-zinc-950 dark:text-white'\n : 'text-zinc-500 dark:text-zinc-400',\n )}\n >\n {item.label}\n </span>\n ) : (\n <a\n href={item.href}\n className=\"text-zinc-500 transition-colors hover:text-zinc-950 dark:text-zinc-400 dark:hover:text-white\"\n >\n {item.label}\n </a>\n )}\n {!isLast && sep}\n </li>\n )\n })}\n </ol>\n </nav>\n )\n}\n","'use client'\nimport React from 'react'\nimport { cn } from '../utils/cn.js'\n\n// Context for managing checkbox state\nconst CheckboxContext = React.createContext<{\n state: boolean | 'indeterminate'\n disabled?: boolean | undefined\n onCheckedChange?: (this: void, checked: boolean | 'indeterminate') => void\n} | null>(null)\n\nexport interface CheckboxProps\n extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'checked' | 'defaultChecked' | 'type' | 'onChange'\n > {\n checked?: boolean\n defaultChecked?: boolean\n onCheckedChange?(this: void, checked: boolean | 'indeterminate'): void\n}\n\n// Checkbox component\nconst Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n ({ checked, defaultChecked, disabled, onCheckedChange, className, ...props }, ref) => {\n const [internalChecked, setInternalChecked] = React.useState<boolean | 'indeterminate'>(\n defaultChecked ?? false,\n )\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return\n\n const newChecked = e.target.checked\n setInternalChecked(newChecked)\n onCheckedChange?.(newChecked)\n }\n\n React.useEffect(() => {\n if (checked !== undefined) {\n setInternalChecked(checked)\n }\n }, [checked])\n\n return (\n <CheckboxContext.Provider value={{ state: internalChecked, disabled, onCheckedChange }}>\n <input\n type=\"checkbox\"\n disabled={disabled}\n checked={\n checked !== undefined\n ? checked\n : internalChecked === 'indeterminate'\n ? false\n : internalChecked\n }\n ref={(el) => {\n if (el) {\n el.indeterminate = internalChecked === 'indeterminate'\n }\n if (ref) {\n if (typeof ref === 'function') {\n ref(el)\n } else {\n ref.current = el\n }\n }\n }}\n onChange={handleChange}\n className={cn(\n 'peer h-4 w-4 shrink-0 rounded border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground',\n className,\n )}\n data-state={\n internalChecked === 'indeterminate'\n ? 'indeterminate'\n : internalChecked\n ? 'checked'\n : 'unchecked'\n }\n {...props}\n />\n </CheckboxContext.Provider>\n )\n },\n)\n\nCheckbox.displayName = 'Checkbox'\n\nexport type CheckboxIndicatorProps = React.HTMLAttributes<HTMLSpanElement>\n\n// CheckboxIndicator component\nconst CheckboxIndicator = React.forwardRef<HTMLSpanElement, CheckboxIndicatorProps>(\n ({ className, ...props }, ref) => {\n const context = React.useContext(CheckboxContext)\n if (!context) {\n throw new Error('CheckboxIndicator must be used within a Checkbox')\n }\n\n return (\n <span\n data-state={\n context.state === 'indeterminate'\n ? 'indeterminate'\n : context.state\n ? 'checked'\n : 'unchecked'\n }\n ref={ref}\n className={cn('flex items-center justify-center text-current', className)}\n {...props}\n >\n {context.state === true && '✔'}\n {context.state === 'indeterminate' && '−'}\n </span>\n )\n },\n)\n\nCheckboxIndicator.displayName = 'CheckboxIndicator'\n\n// Export components\nexport { Checkbox, CheckboxIndicator }\n","import clsx from 'clsx'\nimport type React from 'react'\n\ntype CalloutVariant = 'info' | 'warning' | 'error' | 'success' | 'tip'\n\nconst variantStyles: Record<CalloutVariant, { wrapper: string; icon: string; iconChar: string }> = {\n info: {\n wrapper: 'bg-blue-50 ring-blue-200 dark:bg-blue-950/30 dark:ring-blue-800',\n icon: 'text-blue-600 dark:text-blue-400',\n iconChar: 'i',\n },\n warning: {\n wrapper: 'bg-amber-50 ring-amber-200 dark:bg-amber-950/30 dark:ring-amber-800',\n icon: 'text-amber-600 dark:text-amber-400',\n iconChar: '!',\n },\n error: {\n wrapper: 'bg-red-50 ring-red-200 dark:bg-red-950/30 dark:ring-red-800',\n icon: 'text-red-600 dark:text-red-400',\n iconChar: '✕',\n },\n success: {\n wrapper: 'bg-green-50 ring-green-200 dark:bg-green-950/30 dark:ring-green-800',\n icon: 'text-green-600 dark:text-green-400',\n iconChar: '✓',\n },\n tip: {\n wrapper: 'bg-violet-50 ring-violet-200 dark:bg-violet-950/30 dark:ring-violet-800',\n icon: 'text-violet-600 dark:text-violet-400',\n iconChar: '★',\n },\n}\n\nexport function Callout({\n variant = 'info',\n title,\n icon,\n className,\n children,\n}: {\n variant?: CalloutVariant\n title?: string\n icon?: React.ReactNode\n className?: string\n children: React.ReactNode\n}) {\n const styles = variantStyles[variant]\n\n return (\n <div role=\"note\" className={clsx('rounded-xl p-4 ring-1', styles.wrapper, className)}>\n <div className=\"flex gap-3\">\n <span className={clsx('mt-0.5 shrink-0 text-sm font-bold', styles.icon)} aria-hidden=\"true\">\n {icon ?? styles.iconChar}\n </span>\n <div className=\"min-w-0 flex-1\">\n {title && <p className=\"text-sm font-semibold text-zinc-950 dark:text-white\">{title}</p>}\n <div className={clsx('text-sm text-zinc-700 dark:text-zinc-300', title && 'mt-1')}>\n {children}\n </div>\n </div>\n </div>\n </div>\n )\n}\n","import { createContext, type ReactNode, useContext, useId, useMemo } from 'react'\n\ninterface FieldContextValue {\n /** ID for the form control element */\n controlId: string\n /** ID for the label element */\n labelId: string\n /** ID for the description element */\n descriptionId: string\n /** ID for the error message element */\n errorId: string\n /** Whether the field is disabled */\n disabled: boolean\n}\n\nconst FieldContext = createContext<FieldContextValue | null>(null)\n\nexport function useFieldContext(): FieldContextValue | null {\n return useContext(FieldContext)\n}\n\ninterface FieldProviderProps {\n children: ReactNode\n disabled?: boolean\n}\n\nexport function FieldProvider({ children, disabled = false }: FieldProviderProps): ReactNode {\n const id = useId()\n\n const value = useMemo<FieldContextValue>(\n () => ({\n controlId: `${id}-control`,\n labelId: `${id}-label`,\n descriptionId: `${id}-description`,\n errorId: `${id}-error`,\n disabled,\n }),\n [id, disabled],\n )\n\n return <FieldContext value={value}>{children}</FieldContext>\n}\n\n/**\n * Returns ARIA props for a form control that participates in a Field.\n * Safe to call outside a Field — returns empty object if no context.\n */\nexport function useFieldControlProps(): Record<string, string | undefined> {\n const ctx = useFieldContext()\n if (!ctx) return {}\n\n return {\n id: ctx.controlId,\n 'aria-labelledby': ctx.labelId,\n 'aria-describedby': ctx.descriptionId,\n 'data-disabled': ctx.disabled ? '' : undefined,\n }\n}\n\n/**\n * Returns props for a label element within a Field.\n */\nexport function useFieldLabelProps(): Record<string, string | undefined> {\n const ctx = useFieldContext()\n if (!ctx) return {}\n\n return {\n id: ctx.labelId,\n htmlFor: ctx.controlId,\n 'data-disabled': ctx.disabled ? '' : undefined,\n }\n}\n\n/**\n * Returns props for a description element within a Field.\n */\nexport function useFieldDescriptionProps(): Record<string, string | undefined> {\n const ctx = useFieldContext()\n if (!ctx) return {}\n\n return {\n id: ctx.descriptionId,\n 'data-disabled': ctx.disabled ? '' : undefined,\n }\n}\n\n/**\n * Returns props for an error message element within a Field.\n */\nexport function useFieldErrorProps(): Record<string, string | undefined> {\n const ctx = useFieldContext()\n if (!ctx) return {}\n\n return {\n id: ctx.errorId,\n 'data-disabled': ctx.disabled ? '' : undefined,\n }\n}\n","import { useCallback, useRef, useState } from 'react'\n\nexport function useControllableState<T>({\n value: controlledValue,\n defaultValue,\n onChange,\n}: {\n value?: T\n defaultValue: T\n onChange?: (value: T) => void\n}): [T, (next: T | ((prev: T) => T)) => void] {\n const isControlled = controlledValue !== undefined\n const [internalValue, setInternalValue] = useState(defaultValue)\n const value = isControlled ? controlledValue : internalValue\n\n // Use ref to avoid stale closure over onChange\n const onChangeRef = useRef(onChange)\n onChangeRef.current = onChange\n\n const setValue = useCallback(\n (next: T | ((prev: T) => T)) => {\n const resolvedValue = typeof next === 'function' ? (next as (prev: T) => T)(value) : next\n\n if (!isControlled) {\n setInternalValue(resolvedValue)\n }\n onChangeRef.current?.(resolvedValue)\n },\n [isControlled, value],\n )\n\n return [value, setValue]\n}\n","import { useCallback } from 'react'\nimport { useControllableState } from './use-controllable-state.js'\n\ninterface UseToggleOptions {\n checked?: boolean\n defaultChecked?: boolean\n onChange?: (checked: boolean) => void\n disabled?: boolean\n}\n\ninterface UseToggleReturn {\n checked: boolean\n toggle: () => void\n toggleProps: {\n 'aria-checked': boolean\n 'data-checked': string | undefined\n tabIndex: number\n onClick: () => void\n onKeyDown: (e: React.KeyboardEvent) => void\n }\n}\n\nexport function useToggle({\n checked: controlledChecked,\n defaultChecked = false,\n onChange,\n disabled = false,\n}: UseToggleOptions = {}): UseToggleReturn {\n const [checked, setChecked] = useControllableState({\n value: controlledChecked,\n defaultValue: defaultChecked,\n onChange,\n })\n\n const toggle = useCallback(() => {\n if (!disabled) {\n setChecked((prev) => !prev)\n }\n }, [disabled, setChecked])\n\n const onClick = useCallback(() => {\n toggle()\n }, [toggle])\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === ' ') {\n e.preventDefault()\n toggle()\n }\n },\n [toggle],\n )\n\n return {\n checked,\n toggle,\n toggleProps: {\n 'aria-checked': checked,\n 'data-checked': checked ? '' : undefined,\n tabIndex: 0,\n onClick,\n onKeyDown,\n },\n }\n}\n","import clsx from 'clsx'\nimport type React from 'react'\nimport { useCallback } from 'react'\nimport { useDataInteractive } from '../hooks/use-data-interactive.js'\nimport { FieldProvider } from '../hooks/use-field-context.js'\nimport { useToggle } from '../hooks/use-toggle.js'\n\nexport function CheckboxGroup({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {\n return (\n <div\n data-slot=\"control\"\n {...props}\n className={clsx(\n className,\n // Basic groups\n 'space-y-3',\n // With descriptions\n 'has-data-[slot=description]:space-y-6 has-data-[slot=description]:**:data-[slot=label]:font-medium',\n )}\n />\n )\n}\n\nexport function CheckboxField({\n className,\n disabled,\n ...props\n}: {\n className?: string\n disabled?: boolean\n} & Omit<React.ComponentPropsWithoutRef<'div'>, 'className'>) {\n return (\n <FieldProvider disabled={disabled}>\n <div\n data-slot=\"field\"\n data-disabled={disabled ? '' : undefined}\n {...props}\n className={clsx(\n className,\n // Base layout\n 'grid grid-cols-[1.125rem_1fr] gap-x-4 gap-y-1 sm:grid-cols-[1rem_1fr]',\n // Control layout\n '*:data-[slot=control]:col-start-1 *:data-[slot=control]:row-start-1 *:data-[slot=control]:mt-0.75 sm:*:data-[slot=control]:mt-1',\n // Label layout\n '*:data-[slot=label]:col-start-2 *:data-[slot=label]:row-start-1',\n // Description layout\n '*:data-[slot=description]:col-start-2 *:data-[slot=description]:row-start-2',\n // With description\n 'has-data-[slot=description]:**:data-[slot=label]:font-medium',\n )}\n />\n </FieldProvider>\n )\n}\n\nconst base = [\n // Basic layout\n 'relative isolate flex size-4.5 items-center justify-center rounded-[0.3125rem] sm:size-4',\n // Background color + shadow applied to inset pseudo element, so shadow blends with border in light mode\n 'before:absolute before:inset-0 before:-z-10 before:rounded-[calc(0.3125rem-1px)] before:bg-white before:shadow-sm',\n // Background color when checked\n 'group-data-checked:before:bg-(--checkbox-checked-bg)',\n // Background color is moved to control and shadow is removed in dark mode so hide `before` pseudo\n 'dark:before:hidden',\n // Background color applied to control in dark mode\n 'dark:bg-white/5 dark:group-data-checked:bg-(--checkbox-checked-bg)',\n // Border\n 'border border-zinc-950/15 group-data-checked:border-transparent group-data-hover:group-data-checked:border-transparent group-data-hover:border-zinc-950/30 group-data-checked:bg-(--checkbox-checked-border)',\n 'dark:border-white/15 dark:group-data-checked:border-white/5 dark:group-data-hover:group-data-checked:border-white/5 dark:group-data-hover:border-white/30',\n // Inner highlight shadow\n 'after:absolute after:inset-0 after:rounded-[calc(0.3125rem-1px)] after:shadow-[inset_0_1px_--theme(--color-white/15%)]',\n 'dark:after:-inset-px dark:after:hidden dark:after:rounded-[0.3125rem] dark:group-data-checked:after:block',\n // Focus ring\n 'group-data-focus:outline-2 group-data-focus:outline-offset-2 group-data-focus:outline-blue-500',\n // Disabled state\n 'group-data-disabled:opacity-50',\n 'group-data-disabled:border-zinc-950/25 group-data-disabled:bg-zinc-950/5 group-data-disabled:[--checkbox-check:var(--color-zinc-950)]/50 group-data-disabled:before:bg-transparent',\n 'dark:group-data-disabled:border-white/20 dark:group-data-disabled:bg-white/2.5 dark:group-data-disabled:[--checkbox-check:var(--color-white)]/50 dark:group-data-checked:group-data-disabled:after:hidden',\n // Forced colors mode\n 'forced-colors:[--checkbox-check:HighlightText] forced-colors:[--checkbox-checked-bg:Highlight] forced-colors:group-data-disabled:[--checkbox-check:Highlight]',\n 'dark:forced-colors:[--checkbox-check:HighlightText] dark:forced-colors:[--checkbox-checked-bg:Highlight] dark:forced-colors:group-data-disabled:[--checkbox-check:Highlight]',\n]\n\nconst colors = {\n 'dark/zinc': [\n '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-zinc-900)] [--checkbox-checked-border:var(--color-zinc-950)]/90',\n 'dark:[--checkbox-checked-bg:var(--color-zinc-600)]',\n ],\n 'dark/white': [\n '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-zinc-900)] [--checkbox-checked-border:var(--color-zinc-950)]/90',\n 'dark:[--checkbox-check:var(--color-zinc-900)] dark:[--checkbox-checked-bg:var(--color-white)] dark:[--checkbox-checked-border:var(--color-zinc-950)]/15',\n ],\n white:\n '[--checkbox-check:var(--color-zinc-900)] [--checkbox-checked-bg:var(--color-white)] [--checkbox-checked-border:var(--color-zinc-950)]/15',\n dark: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-zinc-900)] [--checkbox-checked-border:var(--color-zinc-950)]/90',\n zinc: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-zinc-600)] [--checkbox-checked-border:var(--color-zinc-700)]/90',\n red: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-red-600)] [--checkbox-checked-border:var(--color-red-700)]/90',\n orange:\n '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-orange-500)] [--checkbox-checked-border:var(--color-orange-600)]/90',\n amber:\n '[--checkbox-check:var(--color-amber-950)] [--checkbox-checked-bg:var(--color-amber-400)] [--checkbox-checked-border:var(--color-amber-500)]/80',\n yellow:\n '[--checkbox-check:var(--color-yellow-950)] [--checkbox-checked-bg:var(--color-yellow-300)] [--checkbox-checked-border:var(--color-yellow-400)]/80',\n lime: '[--checkbox-check:var(--color-lime-950)] [--checkbox-checked-bg:var(--color-lime-300)] [--checkbox-checked-border:var(--color-lime-400)]/80',\n green:\n '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-green-600)] [--checkbox-checked-border:var(--color-green-700)]/90',\n emerald:\n '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-emerald-600)] [--checkbox-checked-border:var(--color-emerald-700)]/90',\n teal: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-teal-600)] [--checkbox-checked-border:var(--color-teal-700)]/90',\n cyan: '[--checkbox-check:var(--color-cyan-950)] [--checkbox-checked-bg:var(--color-cyan-300)] [--checkbox-checked-border:var(--color-cyan-400)]/80',\n sky: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-sky-500)] [--checkbox-checked-border:var(--color-sky-600)]/80',\n blue: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-blue-600)] [--checkbox-checked-border:var(--color-blue-700)]/90',\n indigo:\n '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-indigo-500)] [--checkbox-checked-border:var(--color-indigo-600)]/90',\n violet:\n '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-violet-500)] [--checkbox-checked-border:var(--color-violet-600)]/90',\n purple:\n '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-purple-500)] [--checkbox-checked-border:var(--color-purple-600)]/90',\n fuchsia:\n '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-fuchsia-500)] [--checkbox-checked-border:var(--color-fuchsia-600)]/90',\n pink: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-pink-500)] [--checkbox-checked-border:var(--color-pink-600)]/90',\n rose: '[--checkbox-check:var(--color-white)] [--checkbox-checked-bg:var(--color-rose-500)] [--checkbox-checked-border:var(--color-rose-600)]/90',\n}\n\ntype Color = keyof typeof colors\n\nexport function Checkbox({\n color = 'dark/zinc',\n className,\n checked: controlledChecked,\n defaultChecked,\n onChange,\n disabled,\n indeterminate,\n name,\n value,\n ...props\n}: {\n color?: Color\n className?: string\n checked?: boolean\n defaultChecked?: boolean\n onChange?: (checked: boolean) => void\n disabled?: boolean\n indeterminate?: boolean\n name?: string\n value?: string\n} & Omit<React.ComponentPropsWithoutRef<'span'>, 'className' | 'onChange'>) {\n const { checked, toggleProps } = useToggle({\n checked: controlledChecked,\n defaultChecked,\n onChange,\n disabled,\n })\n const interactiveProps = useDataInteractive({ disabled })\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === ' ') {\n e.preventDefault()\n toggleProps.onKeyDown(e)\n }\n },\n [toggleProps],\n )\n\n return (\n <span\n data-slot=\"control\"\n role=\"checkbox\"\n aria-checked={indeterminate ? 'mixed' : checked}\n data-checked={checked ? '' : undefined}\n data-indeterminate={indeterminate ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n tabIndex={disabled ? undefined : 0}\n onClick={disabled ? undefined : toggleProps.onClick}\n onKeyDown={disabled ? undefined : handleKeyDown}\n {...interactiveProps}\n {...props}\n className={clsx(className, 'group inline-flex focus:outline-hidden')}\n >\n {name && <input type=\"hidden\" name={name} value={checked ? (value ?? 'on') : ''} />}\n <span className={clsx([base, colors[color]])}>\n <svg\n className=\"size-4 stroke-(--checkbox-check) opacity-0 group-data-checked:opacity-100 sm:h-3.5 sm:w-3.5\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n >\n <title>Checkmark</title>\n {/* Checkmark icon */}\n <path\n className=\"opacity-100 group-data-indeterminate:opacity-0\"\n d=\"M3 8L6 11L11 3.5\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n {/* Indeterminate icon */}\n <path\n className=\"opacity-0 group-data-indeterminate:opacity-100\"\n d=\"M3 7H11\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n </span>\n )\n}\n","'use client'\n\nimport clsx from 'clsx'\nimport { useCallback, useState } from 'react'\n\nexport function CodeBlock({\n code,\n language,\n filename,\n showCopy = true,\n className,\n}: {\n code: string\n language?: string\n filename?: string\n showCopy?: boolean\n className?: string\n}) {\n const [copied, setCopied] = useState(false)\n\n const handleCopy = useCallback(async () => {\n await navigator.clipboard.writeText(code)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n }, [code])\n\n return (\n <div className={clsx('overflow-hidden rounded-xl bg-zinc-950 ring-1 ring-zinc-800', className)}>\n {(filename || language || showCopy) && (\n <div className=\"flex items-center justify-between border-b border-zinc-800 px-4 py-2.5\">\n <div className=\"flex items-center gap-2\">\n {filename && <span className=\"text-xs text-zinc-400\">{filename}</span>}\n {language && !filename && (\n <span className=\"rounded bg-zinc-800 px-1.5 py-0.5 text-xs text-zinc-400\">\n {language}\n </span>\n )}\n </div>\n {showCopy && (\n <button\n type=\"button\"\n onClick={handleCopy}\n aria-label={copied ? 'Copied' : 'Copy code'}\n className=\"rounded px-2 py-1 text-xs text-zinc-400 transition-colors hover:bg-zinc-800 hover:text-zinc-200 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500\"\n >\n {copied ? 'Copied!' : 'Copy'}\n </button>\n )}\n </div>\n )}\n <pre className=\"overflow-x-auto p-4 text-sm leading-relaxed text-zinc-300\">\n <code>{code}</code>\n </pre>\n </div>\n )\n}\n","import { useEffect, useRef } from 'react'\n\nexport function useEscapeKey(onEscape: () => void, enabled = true): void {\n const callbackRef = useRef(onEscape)\n callbackRef.current = onEscape\n\n useEffect(() => {\n if (!enabled) return\n\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n e.stopPropagation()\n callbackRef.current()\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [enabled])\n}\n","import { type RefObject, useEffect } from 'react'\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'textarea:not([disabled])',\n 'select:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(', ')\n\nfunction getFocusableElements(container: HTMLElement): HTMLElement[] {\n return Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR))\n}\n\nexport function useFocusTrap(containerRef: RefObject<HTMLElement | null>, enabled = true): void {\n useEffect(() => {\n if (!enabled) return\n\n const container = containerRef.current\n if (!container) return\n\n // Store the element that had focus before trapping\n const previouslyFocused = document.activeElement as HTMLElement | null\n\n // Focus first focusable element within the container\n const focusableElements = getFocusableElements(container)\n if (focusableElements.length > 0) {\n focusableElements[0]?.focus()\n } else {\n // If no focusable elements, make container focusable and focus it\n container.setAttribute('tabindex', '-1')\n container.focus()\n }\n\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key !== 'Tab' || !container) return\n\n const focusable = getFocusableElements(container)\n if (focusable.length === 0) {\n e.preventDefault()\n return\n }\n\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n\n if (e.shiftKey && document.activeElement === first) {\n e.preventDefault()\n last?.focus()\n } else if (!e.shiftKey && document.activeElement === last) {\n e.preventDefault()\n first?.focus()\n }\n }\n\n // Listen on the document to catch all Tab presses\n document.addEventListener('keydown', handleKeyDown, true)\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown, true)\n // Restore focus when trap is disabled\n previouslyFocused?.focus()\n }\n }, [containerRef, enabled])\n}\n","import { useEffect } from 'react'\n\nexport function useScrollLock(enabled = true): void {\n useEffect(() => {\n if (!enabled) return\n\n const originalOverflow = document.body.style.overflow\n const originalPaddingRight = document.body.style.paddingRight\n\n // Account for scrollbar width to prevent layout shift\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth\n\n document.body.style.overflow = 'hidden'\n if (scrollbarWidth > 0) {\n document.body.style.paddingRight = `${scrollbarWidth}px`\n }\n\n return () => {\n document.body.style.overflow = originalOverflow\n document.body.style.paddingRight = originalPaddingRight\n }\n }, [enabled])\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\n\ninterface UseTransitionReturn {\n /** Whether the element should be rendered in the DOM */\n mounted: boolean\n /** Ref to attach to the transitioning element (listens for transitionend) */\n nodeRef: React.RefObject<HTMLElement | null>\n /** Data attributes to spread on the transitioning element */\n transitionProps: {\n 'data-closed'?: string\n 'data-enter'?: string\n 'data-leave'?: string\n 'data-transition'?: string\n }\n}\n\n/**\n * Manages CSS transition lifecycle using data attributes.\n *\n * Enter sequence:\n * 1. Mount with `data-closed` + `data-enter` (element in hidden state)\n * 2. Next frame: remove `data-closed` (CSS transition triggers)\n * 3. On transitionend: remove `data-enter`\n *\n * Leave sequence:\n * 1. Add `data-closed` + `data-leave` (CSS transition to hidden state)\n * 2. On transitionend: unmount\n */\nexport function useTransition(show: boolean): UseTransitionReturn {\n const nodeRef = useRef<HTMLElement | null>(null)\n const [, setTick] = useState(0)\n const rerender = useCallback(() => setTick((t) => t + 1), [])\n\n // Phase tracks the transition state\n // Uses ref for synchronous access during rAF callbacks\n const phase = useRef<'hidden' | 'enter-from' | 'enter-to' | 'visible' | 'leave'>(\n show ? 'visible' : 'hidden',\n )\n\n const prevShow = useRef(show)\n const cleanupRef = useRef<(() => void) | null>(null)\n\n useEffect(() => {\n // Clean up previous transition\n cleanupRef.current?.()\n cleanupRef.current = null\n\n if (show && !prevShow.current) {\n // === ENTER ===\n phase.current = 'enter-from'\n rerender()\n\n const frame1 = requestAnimationFrame(() => {\n const frame2 = requestAnimationFrame(() => {\n if (phase.current !== 'enter-from') return\n phase.current = 'enter-to'\n rerender()\n\n const node = nodeRef.current\n if (!node) {\n phase.current = 'visible'\n rerender()\n return\n }\n\n let cleaned = false\n const done = () => {\n if (cleaned) return\n cleaned = true\n phase.current = 'visible'\n rerender()\n }\n\n node.addEventListener('transitionend', done, { once: true })\n const fallback = setTimeout(done, 500)\n\n cleanupRef.current = () => {\n cleaned = true\n node.removeEventListener('transitionend', done)\n clearTimeout(fallback)\n }\n })\n\n cleanupRef.current = () => cancelAnimationFrame(frame2)\n })\n\n cleanupRef.current = () => cancelAnimationFrame(frame1)\n } else if (!show && prevShow.current) {\n // === LEAVE ===\n phase.current = 'leave'\n rerender()\n\n const node = nodeRef.current\n if (!node) {\n phase.current = 'hidden'\n rerender()\n prevShow.current = show\n return\n }\n\n let cleaned = false\n const done = () => {\n if (cleaned) return\n cleaned = true\n phase.current = 'hidden'\n rerender()\n }\n\n node.addEventListener('transitionend', done, { once: true })\n const fallback = setTimeout(done, 500)\n\n cleanupRef.current = () => {\n cleaned = true\n node.removeEventListener('transitionend', done)\n clearTimeout(fallback)\n }\n }\n\n prevShow.current = show\n }, [show, rerender])\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n cleanupRef.current?.()\n }\n }, [])\n\n const p = phase.current\n\n return {\n mounted: p !== 'hidden',\n nodeRef,\n transitionProps: {\n 'data-closed': p === 'enter-from' || p === 'leave' || p === 'hidden' ? '' : undefined,\n 'data-enter': p === 'enter-from' || p === 'enter-to' ? '' : undefined,\n 'data-leave': p === 'leave' ? '' : undefined,\n 'data-transition': p === 'enter-from' || p === 'enter-to' || p === 'leave' ? '' : undefined,\n },\n }\n}\n","'use client'\n\nimport clsx from 'clsx'\nimport type React from 'react'\nimport { useCallback, useId, useRef } from 'react'\nimport { createPortal } from 'react-dom'\nimport { useEscapeKey } from '../hooks/use-escape-key.js'\nimport { useFocusTrap } from '../hooks/use-focus-trap.js'\nimport { useScrollLock } from '../hooks/use-scroll-lock.js'\nimport { useTransition } from '../hooks/use-transition.js'\n\ntype DrawerSide = 'left' | 'right' | 'top' | 'bottom'\n\nconst sideClasses: Record<DrawerSide, string> = {\n left: 'inset-y-0 left-0 h-full w-full max-w-sm data-closed:-translate-x-full',\n right: 'inset-y-0 right-0 h-full w-full max-w-sm data-closed:translate-x-full',\n top: 'inset-x-0 top-0 w-full max-h-[50vh] data-closed:-translate-y-full',\n bottom: 'inset-x-0 bottom-0 w-full max-h-[50vh] data-closed:translate-y-full',\n}\n\nexport function Drawer({\n open,\n onClose,\n side = 'right',\n className,\n children,\n}: {\n open: boolean\n onClose: () => void\n side?: DrawerSide\n className?: string\n children: React.ReactNode\n}) {\n const panelRef = useRef<HTMLDivElement>(null)\n const titleId = useId()\n\n const backdrop = useTransition(open)\n const panel = useTransition(open)\n\n useScrollLock(open)\n useFocusTrap(panelRef, open)\n useEscapeKey(onClose, open)\n\n const handleBackdropClick = useCallback(\n (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) onClose()\n },\n [onClose],\n )\n\n if (!(backdrop.mounted || panel.mounted)) return null\n\n return createPortal(\n <div role=\"dialog\" aria-modal=\"true\" aria-labelledby={titleId}>\n {backdrop.mounted && (\n <div\n ref={backdrop.nodeRef as React.RefObject<HTMLDivElement>}\n {...backdrop.transitionProps}\n onClick={handleBackdropClick}\n className=\"fixed inset-0 z-40 bg-zinc-950/25 transition duration-200 data-closed:opacity-0 data-enter:ease-out data-leave:ease-in dark:bg-zinc-950/50\"\n />\n )}\n {panel.mounted && (\n <div\n ref={(node) => {\n ;(panelRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n ;(panel.nodeRef as React.MutableRefObject<HTMLElement | null>).current = node\n }}\n {...panel.transitionProps}\n className={clsx(\n 'fixed z-50 overflow-y-auto bg-white shadow-xl ring-1 ring-zinc-950/10 transition duration-300 ease-in-out dark:bg-zinc-900 dark:ring-white/10',\n sideClasses[side],\n className,\n )}\n >\n {children}\n </div>\n )}\n </div>,\n document.body,\n )\n}\n\nexport function DrawerHeader({\n onClose,\n className,\n children,\n}: {\n onClose?: () => void\n className?: string\n children: React.ReactNode\n}) {\n return (\n <div\n className={clsx(\n 'flex items-center justify-between border-b border-zinc-200 px-6 py-4 dark:border-zinc-700',\n className,\n )}\n >\n <div className=\"text-base font-semibold text-zinc-950 dark:text-white\">{children}</div>\n {onClose && (\n <button\n type=\"button\"\n aria-label=\"Close drawer\"\n onClick={onClose}\n className=\"rounded-md p-1 text-zinc-400 hover:text-zinc-600 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 dark:hover:text-zinc-200\"\n >\n <svg viewBox=\"0 0 16 16\" fill=\"none\" className=\"size-4\" aria-hidden=\"true\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n )}\n </div>\n )\n}\n\nexport function DrawerBody({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {\n return <div {...props} className={clsx('px-6 py-4', className)} />\n}\n\nexport function DrawerFooter({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {\n return (\n <div\n {...props}\n className={clsx(\n 'flex items-center justify-end gap-3 border-t border-zinc-200 px-6 py-4 dark:border-zinc-700',\n className,\n )}\n />\n )\n}\n","import clsx from 'clsx'\nimport type React from 'react'\n\nexport function EmptyState({\n icon,\n title,\n description,\n action,\n className,\n}: {\n icon?: React.ReactNode\n title: string\n description?: string\n action?: React.ReactNode\n className?: string\n}) {\n return (\n <div\n className={clsx(\n 'flex flex-col items-center justify-center rounded-xl border border-dashed border-zinc-300 px-6 py-16 text-center dark:border-zinc-700',\n className,\n )}\n >\n {icon && (\n <div className=\"mb-4 flex size-12 items-center justify-center rounded-full bg-zinc-100 text-zinc-500 dark:bg-zinc-800 dark:text-zinc-400\">\n {icon}\n </div>\n )}\n <h3 className=\"text-sm font-semibold text-zinc-950 dark:text-white\">{title}</h3>\n {description && (\n <p className=\"mt-1 max-w-sm text-sm text-zinc-500 dark:text-zinc-400\">{description}</p>\n )}\n {action && <div className=\"mt-6\">{action}</div>}\n </div>\n )\n}\n","import clsx from 'clsx'\nimport type React from 'react'\nimport { forwardRef } from 'react'\nimport { useDataInteractive } from '../hooks/use-data-interactive.js'\nimport { useFieldControlProps } from '../hooks/use-field-context.js'\n\nexport function InputGroup({ children }: React.ComponentPropsWithoutRef<'span'>) {\n return (\n <span\n data-slot=\"control\"\n className={clsx(\n 'relative isolate block',\n 'has-[[data-slot=icon]:first-child]:[&_input]:pl-10 has-[[data-slot=icon]:last-child]:[&_input]:pr-10 sm:has-[[data-slot=icon]:first-child]:[&_input]:pl-8 sm:has-[[data-slot=icon]:last-child]:[&_input]:pr-8',\n '*:data-[slot=icon]:pointer-events-none *:data-[slot=icon]:absolute *:data-[slot=icon]:top-3 *:data-[slot=icon]:z-10 *:data-[slot=icon]:size-5 sm:*:data-[slot=icon]:top-2.5 sm:*:data-[slot=icon]:size-4',\n '[&>[data-slot=icon]:first-child]:left-3 sm:[&>[data-slot=icon]:first-child]:left-2.5 [&>[data-slot=icon]:last-child]:right-3 sm:[&>[data-slot=icon]:last-child]:right-2.5',\n '*:data-[slot=icon]:text-zinc-500 dark:*:data-[slot=icon]:text-zinc-400',\n )}\n >\n {children}\n </span>\n )\n}\n\nconst dateTypes = ['date', 'datetime-local', 'month', 'time', 'week'] as const\ntype DateType = (typeof dateTypes)[number]\n\ntype InputProps = {\n className?: string\n type?: 'email' | 'number' | 'password' | 'search' | 'tel' | 'text' | 'url' | DateType\n disabled?: boolean\n invalid?: boolean\n} & Omit<React.ComponentPropsWithoutRef<'input'>, 'className' | 'type'>\n\nexport const Input = forwardRef(function Input(\n { className, disabled, invalid, ...props }: InputProps,\n ref: React.ForwardedRef<HTMLInputElement>,\n) {\n const interactiveProps = useDataInteractive({ disabled })\n const fieldProps = useFieldControlProps()\n\n return (\n <span\n data-slot=\"control\"\n className={clsx([\n className,\n // Basic layout\n 'relative block w-full',\n // Background color + shadow applied to inset pseudo element, so shadow blends with border in light mode\n 'before:absolute before:inset-px before:rounded-[calc(var(--radius-lg)-1px)] before:bg-white before:shadow-sm',\n // Background color is moved to control and shadow is removed in dark mode so hide `before` pseudo\n 'dark:before:hidden',\n // Focus ring\n 'after:pointer-events-none after:absolute after:inset-0 after:rounded-lg after:ring-transparent after:ring-inset sm:focus-within:after:ring-2 sm:focus-within:after:ring-blue-500',\n // Disabled state\n 'has-data-disabled:opacity-50 has-data-disabled:before:bg-zinc-950/5 has-data-disabled:before:shadow-none',\n ])}\n >\n <input\n ref={ref}\n disabled={disabled}\n {...props}\n {...interactiveProps}\n {...fieldProps}\n data-invalid={invalid ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n className={clsx([\n // Date classes\n props.type &&\n dateTypes.includes(props.type as DateType) && [\n '[&::-webkit-datetime-edit-fields-wrapper]:p-0',\n '[&::-webkit-date-and-time-value]:min-h-[1.5em]',\n '[&::-webkit-datetime-edit]:inline-flex',\n '[&::-webkit-datetime-edit]:p-0',\n '[&::-webkit-datetime-edit-year-field]:p-0',\n '[&::-webkit-datetime-edit-month-field]:p-0',\n '[&::-webkit-datetime-edit-day-field]:p-0',\n '[&::-webkit-datetime-edit-hour-field]:p-0',\n '[&::-webkit-datetime-edit-minute-field]:p-0',\n '[&::-webkit-datetime-edit-second-field]:p-0',\n '[&::-webkit-datetime-edit-millisecond-field]:p-0',\n '[&::-webkit-datetime-edit-meridiem-field]:p-0',\n ],\n // Basic layout\n 'relative block w-full appearance-none rounded-lg px-[calc(--spacing(3.5)-1px)] py-[calc(--spacing(2.5)-1px)] sm:px-[calc(--spacing(3)-1px)] sm:py-[calc(--spacing(1.5)-1px)]',\n // Typography\n 'text-base/6 text-zinc-950 placeholder:text-zinc-500 sm:text-sm/6 dark:text-white',\n // Border\n 'border border-zinc-950/10 data-hover:border-zinc-950/20 dark:border-white/10 dark:data-hover:border-white/20',\n // Background color\n 'bg-transparent dark:bg-white/5',\n // Hide default focus styles\n 'focus:outline-hidden',\n // Invalid state\n 'data-invalid:border-red-500 data-invalid:data-hover:border-red-500 dark:data-invalid:border-red-600 dark:data-invalid:data-hover:border-red-600',\n // Disabled state\n 'data-disabled:border-zinc-950/20 dark:data-disabled:border-white/15 dark:data-disabled:bg-white/2.5 dark:data-hover:data-disabled:border-white/15',\n // System icons\n 'dark:scheme-dark',\n ])}\n />\n </span>\n )\n})\n","import clsx from 'clsx'\nimport type React from 'react'\n\nexport function Kbd({ className, children, ...props }: React.ComponentPropsWithoutRef<'kbd'>) {\n return (\n <kbd\n {...props}\n className={clsx(\n 'inline-flex items-center rounded border border-zinc-300 bg-zinc-100 px-1.5 py-0.5 font-mono text-xs font-medium text-zinc-700 dark:border-zinc-600 dark:bg-zinc-800 dark:text-zinc-300',\n className,\n )}\n >\n {children}\n </kbd>\n )\n}\n\nexport function KbdShortcut({\n keys,\n separator = '+',\n className,\n}: {\n keys: string[]\n separator?: string\n className?: string\n}) {\n return (\n <span className={clsx('inline-flex items-center gap-1', className)}>\n {keys.map((key, i) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: keyboard shortcut keys are positionally ordered with no stable ID\n <span key={i} className=\"inline-flex items-center gap-1\">\n <Kbd>{key}</Kbd>\n {i < keys.length - 1 && <span className=\"text-xs text-zinc-400\">{separator}</span>}\n </span>\n ))}\n </span>\n )\n}\n","import clsx from 'clsx'\n\ntype ProgressColor = 'blue' | 'green' | 'red' | 'amber' | 'violet' | 'zinc'\n\nconst trackClasses: Record<ProgressColor, string> = {\n blue: 'bg-blue-600 dark:bg-blue-500',\n green: 'bg-green-600 dark:bg-green-500',\n red: 'bg-red-600 dark:bg-red-500',\n amber: 'bg-amber-500 dark:bg-amber-400',\n violet: 'bg-violet-600 dark:bg-violet-500',\n zinc: 'bg-zinc-600 dark:bg-zinc-400',\n}\n\nexport function Progress({\n value,\n max = 100,\n color = 'blue',\n size = 'md',\n label,\n showValue = false,\n className,\n}: {\n value: number\n max?: number\n color?: ProgressColor\n size?: 'xs' | 'sm' | 'md' | 'lg'\n label?: string\n showValue?: boolean\n className?: string\n}) {\n const percentage = Math.min(100, Math.max(0, (value / max) * 100))\n const heightClass = { xs: 'h-1', sm: 'h-1.5', md: 'h-2.5', lg: 'h-4' }[size]\n\n return (\n <div className={clsx('w-full', className)}>\n {(label || showValue) && (\n <div className=\"mb-1.5 flex items-center justify-between\">\n {label && (\n <span className=\"text-sm font-medium text-zinc-700 dark:text-zinc-300\">{label}</span>\n )}\n {showValue && (\n <span className=\"text-sm text-zinc-500 dark:text-zinc-400\">\n {Math.round(percentage)}%\n </span>\n )}\n </div>\n )}\n <div\n role=\"progressbar\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-label={label}\n className={clsx(\n 'w-full overflow-hidden rounded-full bg-zinc-200 dark:bg-zinc-700',\n heightClass,\n )}\n >\n <div\n className={clsx(\n 'h-full rounded-full transition-all duration-300 ease-in-out',\n trackClasses[color],\n )}\n style={{ width: `${percentage}%` }}\n />\n </div>\n </div>\n )\n}\n","'use client'\n\nimport clsx from 'clsx'\nimport { useCallback, useId, useState } from 'react'\n\nexport function Rating({\n value: controlledValue,\n defaultValue = 0,\n max = 5,\n onChange,\n readOnly = false,\n size = 'md',\n label,\n className,\n}: {\n value?: number\n defaultValue?: number\n max?: number\n onChange?: (value: number) => void\n readOnly?: boolean\n size?: 'sm' | 'md' | 'lg'\n label?: string\n className?: string\n}) {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const [hovered, setHovered] = useState(0)\n const id = useId()\n\n const value = controlledValue ?? internalValue\n const sizeClass = { sm: 'size-4', md: 'size-6', lg: 'size-8' }[size]\n\n const handleClick = useCallback(\n (star: number) => {\n if (readOnly) return\n setInternalValue(star)\n onChange?.(star)\n },\n [readOnly, onChange],\n )\n\n const display = hovered > 0 ? hovered : value\n\n return (\n <div className={className}>\n {label && (\n <span id={id} className=\"sr-only\">\n {label}\n </span>\n )}\n {/* biome-ignore lint/a11y/useAriaPropsSupportedByRole: aria-label is valid on both \"img\" and \"radiogroup\" roles; dynamic role prevents static analysis */}\n <div\n role={readOnly ? 'img' : 'radiogroup'}\n aria-label={label ?? `Rating: ${value} out of ${max}`}\n aria-labelledby={label ? id : undefined}\n className=\"flex items-center gap-0.5\"\n >\n {Array.from({ length: max }).map((_, i) => {\n const star = i + 1\n const filled = star <= display\n return (\n // biome-ignore lint/a11y/useAriaPropsSupportedByRole: aria-checked and aria-label are valid on role=\"radio\" per WAI-ARIA spec\n <button\n key={star}\n type=\"button\"\n role={readOnly ? undefined : 'radio'}\n aria-checked={readOnly ? undefined : value === star}\n aria-label={readOnly ? undefined : `${star} star${star !== 1 ? 's' : ''}`}\n disabled={readOnly}\n onClick={() => handleClick(star)}\n onMouseEnter={() => !readOnly && setHovered(star)}\n onMouseLeave={() => !readOnly && setHovered(0)}\n className={clsx(\n sizeClass,\n 'transition-colors',\n readOnly\n ? 'cursor-default'\n : 'cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500',\n )}\n >\n <svg\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n className={clsx(\n 'size-full',\n filled\n ? 'fill-amber-400 text-amber-400'\n : 'fill-zinc-200 text-zinc-200 dark:fill-zinc-700 dark:text-zinc-700',\n )}\n >\n <path d=\"M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z\" />\n </svg>\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n","'use client'\n\nimport React from 'react'\nimport { Box, type BoxProps } from '../primitives/Box.js'\nimport { cn } from '../utils/cn.js'\n\nconst Check = ({ className }: { className?: string }) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className={cn('size-6', className)}\n >\n <title>Selected</title>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 12l4 4L18 8\" />\n </svg>\n )\n}\n\nconst ChevronUp = ({ className }: { className?: string }) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className={cn('size-6', className)}\n >\n <title>Scroll up</title>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19.5 15.75l-7.5-7.5-7.5 7.5\" />\n </svg>\n )\n}\n\nconst ChevronDown = ({ className }: { className?: string }) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className={cn('size-6', className)}\n >\n <title>Scroll down</title>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M4.5 8.25l7.5 7.5 7.5-7.5\" />\n </svg>\n )\n}\n\nexport interface SelectProps extends BoxProps {\n onValueChange?: (value: string) => void\n value?: string\n}\n\nconst Select = React.forwardRef<HTMLDivElement, SelectProps>(\n ({ children, className, ...props }, ref) => (\n <Box ref={ref} className={cn(className)} {...props}>\n {children}\n </Box>\n ),\n)\nSelect.displayName = 'Select'\n\nconst SelectGroup = React.forwardRef<HTMLDivElement, BoxProps>(\n ({ children, className, ...props }, ref) => (\n <Box ref={ref} className={cn(className)} {...props}>\n {children}\n </Box>\n ),\n)\nSelectGroup.displayName = 'SelectGroup'\n\nexport interface SelectValueProps extends BoxProps {\n placeholder?: string\n value?: string\n}\n\nconst SelectValue = React.forwardRef<HTMLSpanElement, SelectValueProps>(\n ({ placeholder, children, value, ...props }, ref) => (\n <span ref={ref} {...props}>\n {children || placeholder || value}\n </span>\n ),\n)\nSelectValue.displayName = 'SelectValue'\n\nexport type SelectTriggerProps = BoxProps\n\nconst SelectTrigger = React.forwardRef<HTMLDivElement, SelectTriggerProps>(\n ({ children, className, ...props }, ref) => (\n <Box\n className={cn(\n 'flex h-10 w-full items-center justify-between rounded border border-input bg-background px-3 py-2 text-inherit ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1',\n className,\n )}\n ref={ref}\n {...props}\n >\n {children}\n <ChevronDown className=\"size-4 opacity-50\" />\n </Box>\n ),\n)\nSelectTrigger.displayName = 'SelectTrigger'\n\nexport type SelectScrollUpButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement>\n\nconst SelectScrollUpButton = React.forwardRef<HTMLButtonElement, SelectScrollUpButtonProps>(\n ({ className, ...props }, ref) => (\n <button\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n ref={ref}\n {...props}\n >\n <ChevronUp className=\"size-4\" />\n </button>\n ),\n)\nSelectScrollUpButton.displayName = 'SelectScrollUpButton'\n\nexport type SelectScrollDownButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement>\n\nconst SelectScrollDownButton = React.forwardRef<HTMLButtonElement, SelectScrollDownButtonProps>(\n ({ className, ...props }, ref) => (\n <button\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n ref={ref}\n {...props}\n >\n <ChevronDown className=\"size-4\" />\n </button>\n ),\n)\nSelectScrollDownButton.displayName = 'SelectScrollDownButton'\n\nexport type SelectContentProps = BoxProps\n\nconst SelectContent = React.forwardRef<HTMLDivElement, SelectContentProps>(\n ({ children, className, ...props }, ref) => (\n <Box\n className={cn(\n 'relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded border bg-card text-popover-foreground shadow-md',\n className,\n )}\n ref={ref}\n {...props}\n >\n <SelectScrollUpButton />\n <div className=\"p-1\">{children}</div>\n <SelectScrollDownButton />\n </Box>\n ),\n)\nSelectContent.displayName = 'SelectContent'\n\nexport type SelectLabelProps = React.HTMLAttributes<HTMLDivElement>\n\nconst SelectLabel = React.forwardRef<HTMLDivElement, SelectLabelProps>(\n ({ className, ...props }, ref) => (\n <div className={cn('py-1.5 pl-8 pr-2 text-sm font-semibold', className)} ref={ref} {...props} />\n ),\n)\nSelectLabel.displayName = 'SelectLabel'\n\nexport interface SelectItemProps extends BoxProps {\n value?: string\n}\n\nconst SelectItem = React.forwardRef<HTMLDivElement, SelectItemProps>(\n ({ children, className, value, ...props }, ref) => (\n <Box\n className={cn(\n 'relative flex w-full cursor-default select-none items-center rounded py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n data-value={value}\n ref={ref}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <Check className=\"size-4\" />\n </span>\n <span>{children}</span>\n </Box>\n ),\n)\nSelectItem.displayName = 'SelectItem'\n\nexport type SelectSeparatorProps = BoxProps\n\nconst SelectSeparator = React.forwardRef<HTMLDivElement, SelectSeparatorProps>(\n ({ className, ...props }, ref) => (\n <Box className={cn('-mx-1 my-1 h-px bg-muted', className)} ref={ref} {...props} />\n ),\n)\nSelectSeparator.displayName = 'SelectSeparator'\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n","import clsx from 'clsx'\nimport type React from 'react'\nimport { forwardRef } from 'react'\nimport { useDataInteractive } from '../hooks/use-data-interactive.js'\nimport { useFieldControlProps } from '../hooks/use-field-context.js'\n\ntype SelectProps = {\n className?: string\n multiple?: boolean\n disabled?: boolean\n invalid?: boolean\n} & Omit<React.ComponentPropsWithoutRef<'select'>, 'className'>\n\nexport const Select = forwardRef(function Select(\n { className, multiple, disabled, invalid, ...props }: SelectProps,\n ref: React.ForwardedRef<HTMLSelectElement>,\n) {\n const interactiveProps = useDataInteractive({ disabled })\n const fieldProps = useFieldControlProps()\n\n return (\n <span\n data-slot=\"control\"\n className={clsx([\n className,\n // Basic layout\n 'group relative block w-full',\n // Background color + shadow applied to inset pseudo element, so shadow blends with border in light mode\n 'before:absolute before:inset-px before:rounded-[calc(var(--radius-lg)-1px)] before:bg-white before:shadow-sm',\n // Background color is moved to control and shadow is removed in dark mode so hide `before` pseudo\n 'dark:before:hidden',\n // Focus ring\n 'after:pointer-events-none after:absolute after:inset-0 after:rounded-lg after:ring-transparent after:ring-inset has-data-focus:after:ring-2 has-data-focus:after:ring-blue-500',\n // Disabled state\n 'has-data-disabled:opacity-50 has-data-disabled:before:bg-zinc-950/5 has-data-disabled:before:shadow-none',\n ])}\n >\n <select\n ref={ref}\n multiple={multiple}\n disabled={disabled}\n {...props}\n {...interactiveProps}\n {...fieldProps}\n data-invalid={invalid ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n className={clsx([\n // Basic layout\n 'relative block w-full appearance-none rounded-lg py-[calc(--spacing(2.5)-1px)] sm:py-[calc(--spacing(1.5)-1px)]',\n // Horizontal padding\n multiple\n ? 'px-[calc(--spacing(3.5)-1px)] sm:px-[calc(--spacing(3)-1px)]'\n : 'pr-[calc(--spacing(10)-1px)] pl-[calc(--spacing(3.5)-1px)] sm:pr-[calc(--spacing(9)-1px)] sm:pl-[calc(--spacing(3)-1px)]',\n // Options (multi-select)\n '[&_optgroup]:font-semibold',\n // Typography\n 'text-base/6 text-zinc-950 placeholder:text-zinc-500 sm:text-sm/6 dark:text-white dark:*:text-white',\n // Border\n 'border border-zinc-950/10 data-hover:border-zinc-950/20 dark:border-white/10 dark:data-hover:border-white/20',\n // Background color\n 'bg-transparent dark:bg-white/5 dark:*:bg-zinc-800',\n // Hide default focus styles\n 'focus:outline-hidden',\n // Invalid state\n 'data-invalid:border-red-500 data-invalid:data-hover:border-red-500 dark:data-invalid:border-red-600 dark:data-invalid:data-hover:border-red-600',\n // Disabled state\n 'data-disabled:border-zinc-950/20 data-disabled:opacity-100 dark:data-disabled:border-white/15 dark:data-disabled:bg-white/2.5 dark:data-hover:data-disabled:border-white/15',\n ])}\n />\n {!multiple && (\n <span className=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2\">\n <svg\n className=\"size-5 stroke-zinc-500 group-has-data-disabled:stroke-zinc-600 sm:size-4 dark:stroke-zinc-400 forced-colors:stroke-[CanvasText]\"\n viewBox=\"0 0 16 16\"\n aria-hidden=\"true\"\n fill=\"none\"\n >\n <path\n d=\"M5.75 10.75L8 13L10.25 10.75\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10.25 5.25L8 3L5.75 5.25\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n )}\n </span>\n )\n})\n","import clsx from 'clsx'\nimport type React from 'react'\n\nexport function Skeleton({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {\n return (\n <div\n aria-hidden=\"true\"\n {...props}\n className={clsx('animate-pulse rounded-md bg-zinc-200 dark:bg-zinc-700', className)}\n />\n )\n}\n\nexport function SkeletonText({ lines = 3, className }: { lines?: number; className?: string }) {\n return (\n <div className={clsx('space-y-2', className)}>\n {Array.from({ length: lines }).map((_, i) => {\n return (\n <Skeleton\n // biome-ignore lint/suspicious/noArrayIndexKey: skeleton lines are generated placeholders with no stable ID\n key={i}\n className={clsx('h-4', i === lines - 1 && lines > 1 ? 'w-4/5' : 'w-full')}\n />\n )\n })}\n </div>\n )\n}\n\nexport function SkeletonCard({ className }: { className?: string }) {\n return (\n <div className={clsx('rounded-xl border border-zinc-200 p-4 dark:border-zinc-700', className)}>\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"size-10 rounded-full\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-1/3\" />\n <Skeleton className=\"h-3 w-1/2\" />\n </div>\n </div>\n <SkeletonText lines={3} className=\"mt-4\" />\n </div>\n )\n}\n","'use client'\n\nimport clsx from 'clsx'\nimport type React from 'react'\nimport { useCallback, useId, useState } from 'react'\n\nexport function Slider({\n value: controlledValue,\n defaultValue = 0,\n min = 0,\n max = 100,\n step = 1,\n onChange,\n disabled = false,\n label,\n showValue = false,\n className,\n}: {\n value?: number\n defaultValue?: number\n min?: number\n max?: number\n step?: number\n onChange?: (value: number) => void\n disabled?: boolean\n label?: string\n showValue?: boolean\n className?: string\n}) {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const value = controlledValue ?? internalValue\n const id = useId()\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const next = Number(e.target.value)\n setInternalValue(next)\n onChange?.(next)\n },\n [onChange],\n )\n\n const percentage = ((value - min) / (max - min)) * 100\n\n return (\n <div className={clsx('w-full', className)}>\n {(label || showValue) && (\n <div className=\"mb-2 flex items-center justify-between\">\n {label && (\n <label htmlFor={id} className=\"text-sm font-medium text-zinc-700 dark:text-zinc-300\">\n {label}\n </label>\n )}\n {showValue && <span className=\"text-sm text-zinc-500 dark:text-zinc-400\">{value}</span>}\n </div>\n )}\n <input\n id={id}\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value}\n disabled={disabled}\n onChange={handleChange}\n style={{ '--slider-pct': `${percentage}%` } as React.CSSProperties}\n className={clsx(\n 'h-2 w-full cursor-pointer appearance-none rounded-full outline-none',\n 'bg-zinc-200 dark:bg-zinc-700',\n '[&::-webkit-slider-thumb]:size-4 [&::-webkit-slider-thumb]:cursor-pointer [&::-webkit-slider-thumb]:appearance-none',\n '[&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-blue-600 [&::-webkit-slider-thumb]:shadow-sm',\n '[&::-webkit-slider-thumb]:ring-2 [&::-webkit-slider-thumb]:ring-white [&::-webkit-slider-thumb]:dark:ring-zinc-900',\n '[&::-moz-range-thumb]:size-4 [&::-moz-range-thumb]:cursor-pointer [&::-moz-range-thumb]:appearance-none',\n '[&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:border-none [&::-moz-range-thumb]:bg-blue-600',\n 'focus-visible:[&::-webkit-slider-thumb]:outline-2 focus-visible:[&::-webkit-slider-thumb]:outline-offset-2 focus-visible:[&::-webkit-slider-thumb]:outline-blue-500',\n disabled && 'cursor-not-allowed opacity-50',\n )}\n />\n </div>\n )\n}\n","import clsx from 'clsx'\nimport type React from 'react'\n\ntype TrendDirection = 'up' | 'down' | 'neutral'\n\nexport function Stat({\n label,\n value,\n change,\n trend,\n description,\n icon,\n className,\n}: {\n label: string\n value: React.ReactNode\n change?: string\n trend?: TrendDirection\n description?: string\n icon?: React.ReactNode\n className?: string\n}) {\n const trendColor = {\n up: 'text-green-600 dark:text-green-400',\n down: 'text-red-600 dark:text-red-400',\n neutral: 'text-zinc-500 dark:text-zinc-400',\n }\n\n const trendArrow = { up: '↑', down: '↓', neutral: '→' }\n\n return (\n <div\n className={clsx(\n 'rounded-xl bg-white p-6 ring-1 ring-zinc-950/5 dark:bg-zinc-900 dark:ring-white/10',\n className,\n )}\n >\n <div className=\"flex items-start justify-between\">\n <p className=\"text-sm font-medium text-zinc-500 dark:text-zinc-400\">{label}</p>\n {icon && <div className=\"rounded-lg bg-zinc-100 p-2 dark:bg-zinc-800\">{icon}</div>}\n </div>\n <p className=\"mt-2 text-3xl font-semibold tracking-tight text-zinc-950 dark:text-white\">\n {value}\n </p>\n {(change || description) && (\n <div className=\"mt-2 flex items-center gap-2\">\n {change && trend && (\n <span className={clsx('text-sm font-medium', trendColor[trend])}>\n {trendArrow[trend]} {change}\n </span>\n )}\n {description && (\n <span className=\"text-sm text-zinc-500 dark:text-zinc-400\">{description}</span>\n )}\n </div>\n )}\n </div>\n )\n}\n\nexport function StatGroup({\n className,\n children,\n}: {\n className?: string\n children: React.ReactNode\n}) {\n return (\n <div className={clsx('grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4', className)}>\n {children}\n </div>\n )\n}\n","import clsx from 'clsx'\n\ntype StepStatus = 'complete' | 'current' | 'upcoming'\n\nexport type StepperStep = {\n label: string\n description?: string\n status: StepStatus\n}\n\nexport function Stepper({\n steps,\n orientation = 'horizontal',\n className,\n}: {\n steps: StepperStep[]\n orientation?: 'horizontal' | 'vertical'\n className?: string\n}) {\n return orientation === 'vertical' ? (\n <StepperVertical steps={steps} className={className} />\n ) : (\n <StepperHorizontal steps={steps} className={className} />\n )\n}\n\nfunction StepIcon({ status }: { status: StepStatus }) {\n if (status === 'complete') {\n return (\n <span className=\"flex size-8 items-center justify-center rounded-full bg-blue-600\">\n <svg viewBox=\"0 0 16 16\" fill=\"none\" className=\"size-4 text-white\" aria-hidden=\"true\">\n <path\n d=\"M3 8l3.5 3.5L13 4\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n )\n }\n if (status === 'current') {\n return (\n <span className=\"flex size-8 items-center justify-center rounded-full border-2 border-blue-600 bg-white dark:bg-zinc-900\">\n <span className=\"size-2.5 rounded-full bg-blue-600\" />\n </span>\n )\n }\n return (\n <span className=\"flex size-8 items-center justify-center rounded-full border-2 border-zinc-300 bg-white dark:border-zinc-600 dark:bg-zinc-900\">\n <span className=\"size-2.5 rounded-full bg-transparent\" />\n </span>\n )\n}\n\nfunction StepperHorizontal({ steps, className }: { steps: StepperStep[]; className?: string }) {\n return (\n <nav aria-label=\"Progress\">\n <ol className={clsx('flex items-center', className)}>\n {steps.map((step, index) => {\n const isLast = index === steps.length - 1\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey: stepper steps are positionally ordered with no stable ID\n <li key={index} className={clsx('flex items-center', !isLast && 'flex-1')}>\n <div className=\"flex flex-col items-center gap-1.5\">\n <StepIcon status={step.status} />\n <span\n className={clsx(\n 'text-xs font-medium',\n step.status === 'current'\n ? 'text-blue-600'\n : step.status === 'complete'\n ? 'text-zinc-950 dark:text-white'\n : 'text-zinc-400 dark:text-zinc-500',\n )}\n >\n {step.label}\n </span>\n </div>\n {!isLast && (\n <div\n aria-hidden=\"true\"\n className={clsx(\n 'mx-3 h-px flex-1',\n step.status === 'complete' ? 'bg-blue-600' : 'bg-zinc-200 dark:bg-zinc-700',\n )}\n />\n )}\n </li>\n )\n })}\n </ol>\n </nav>\n )\n}\n\nfunction StepperVertical({ steps, className }: { steps: StepperStep[]; className?: string }) {\n return (\n <nav aria-label=\"Progress\">\n <ol className={clsx('space-y-0', className)}>\n {steps.map((step, index) => {\n const isLast = index === steps.length - 1\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey: stepper steps are positionally ordered with no stable ID\n <li key={index} className=\"relative flex gap-4\">\n <div className=\"flex flex-col items-center\">\n <StepIcon status={step.status} />\n {!isLast && (\n <div\n aria-hidden=\"true\"\n className={clsx(\n 'w-px flex-1',\n step.status === 'complete' ? 'bg-blue-600' : 'bg-zinc-200 dark:bg-zinc-700',\n )}\n />\n )}\n </div>\n <div className={clsx('pb-6 pt-1', isLast && 'pb-0')}>\n <p\n className={clsx(\n 'text-sm font-medium',\n step.status === 'current'\n ? 'text-blue-600'\n : step.status === 'complete'\n ? 'text-zinc-950 dark:text-white'\n : 'text-zinc-400 dark:text-zinc-500',\n )}\n >\n {step.label}\n </p>\n {step.description && (\n <p className=\"mt-0.5 text-sm text-zinc-500 dark:text-zinc-400\">\n {step.description}\n </p>\n )}\n </div>\n </li>\n )\n })}\n </ol>\n </nav>\n )\n}\n","'use client'\n\nimport clsx from 'clsx'\nimport type React from 'react'\nimport { createContext, useCallback, useContext, useId, useState } from 'react'\n\ntype TabsContextValue = {\n activeTab: string\n setActiveTab: (id: string) => void\n baseId: string\n}\n\nconst TabsContext = createContext<TabsContextValue | null>(null)\n\nfunction useTabsContext() {\n const ctx = useContext(TabsContext)\n if (!ctx) throw new Error('Tabs subcomponents must be used inside <Tabs>')\n return ctx\n}\n\nexport function Tabs({\n defaultTab,\n value,\n onChange,\n className,\n children,\n}: {\n defaultTab?: string\n value?: string\n onChange?: (tab: string) => void\n className?: string\n children: React.ReactNode\n}) {\n const baseId = useId()\n const [internalTab, setInternalTab] = useState(defaultTab ?? '')\n\n const activeTab = value ?? internalTab\n const setActiveTab = useCallback(\n (id: string) => {\n setInternalTab(id)\n onChange?.(id)\n },\n [onChange],\n )\n\n return (\n <TabsContext value={{ activeTab, setActiveTab, baseId }}>\n <div className={className}>{children}</div>\n </TabsContext>\n )\n}\n\nexport function TabList({\n className,\n children,\n}: {\n className?: string\n children: React.ReactNode\n}) {\n return (\n <div\n role=\"tablist\"\n className={clsx('flex border-b border-zinc-200 dark:border-zinc-700', className)}\n >\n {children}\n </div>\n )\n}\n\nexport function Tab({\n id,\n className,\n children,\n}: {\n id: string\n className?: string\n children: React.ReactNode\n}) {\n const { activeTab, setActiveTab, baseId } = useTabsContext()\n const isActive = activeTab === id\n\n return (\n <button\n type=\"button\"\n role=\"tab\"\n id={`${baseId}-tab-${id}`}\n aria-controls={`${baseId}-panel-${id}`}\n aria-selected={isActive}\n tabIndex={isActive ? 0 : -1}\n onClick={() => setActiveTab(id)}\n className={clsx(\n className,\n 'relative -mb-px border-b-2 px-4 py-2.5 text-sm font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500',\n isActive\n ? 'border-blue-600 text-blue-600 dark:border-blue-400 dark:text-blue-400'\n : 'border-transparent text-zinc-500 hover:text-zinc-700 dark:text-zinc-400 dark:hover:text-zinc-200',\n )}\n >\n {children}\n </button>\n )\n}\n\nexport function TabPanel({\n id,\n className,\n children,\n}: {\n id: string\n className?: string\n children: React.ReactNode\n}) {\n const { activeTab, baseId } = useTabsContext()\n if (activeTab !== id) return null\n\n return (\n <div\n role=\"tabpanel\"\n id={`${baseId}-panel-${id}`}\n aria-labelledby={`${baseId}-tab-${id}`}\n // biome-ignore lint/a11y/noNoninteractiveTabindex: role=\"tabpanel\" requires tabIndex=0 for keyboard nav per WAI-ARIA 1.2\n tabIndex={0}\n className={clsx('focus-visible:outline-none', className)}\n >\n {children}\n </div>\n )\n}\n","import clsx from 'clsx'\nimport type React from 'react'\nimport { forwardRef } from 'react'\nimport { useDataInteractive } from '../hooks/use-data-interactive.js'\nimport { useFieldControlProps } from '../hooks/use-field-context.js'\n\ntype TextareaProps = {\n className?: string\n resizable?: boolean\n disabled?: boolean\n invalid?: boolean\n} & Omit<React.ComponentPropsWithoutRef<'textarea'>, 'className'>\n\nexport const Textarea = forwardRef(function Textarea(\n { className, resizable = true, disabled, invalid, ...props }: TextareaProps,\n ref: React.ForwardedRef<HTMLTextAreaElement>,\n) {\n const interactiveProps = useDataInteractive({ disabled })\n const fieldProps = useFieldControlProps()\n\n return (\n <span\n data-slot=\"control\"\n className={clsx([\n className,\n // Basic layout\n 'relative block w-full',\n // Background color + shadow applied to inset pseudo element, so shadow blends with border in light mode\n 'before:absolute before:inset-px before:rounded-[calc(var(--radius-lg)-1px)] before:bg-white before:shadow-sm',\n // Background color is moved to control and shadow is removed in dark mode so hide `before` pseudo\n 'dark:before:hidden',\n // Focus ring\n 'after:pointer-events-none after:absolute after:inset-0 after:rounded-lg after:ring-transparent after:ring-inset sm:focus-within:after:ring-2 sm:focus-within:after:ring-blue-500',\n // Disabled state\n 'has-data-disabled:opacity-50 has-data-disabled:before:bg-zinc-950/5 has-data-disabled:before:shadow-none',\n ])}\n >\n <textarea\n ref={ref}\n disabled={disabled}\n {...props}\n {...interactiveProps}\n {...fieldProps}\n data-invalid={invalid ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n className={clsx([\n // Basic layout\n 'relative block h-full w-full appearance-none rounded-lg px-[calc(--spacing(3.5)-1px)] py-[calc(--spacing(2.5)-1px)] sm:px-[calc(--spacing(3)-1px)] sm:py-[calc(--spacing(1.5)-1px)]',\n // Typography\n 'text-base/6 text-zinc-950 placeholder:text-zinc-500 sm:text-sm/6 dark:text-white',\n // Border\n 'border border-zinc-950/10 data-hover:border-zinc-950/20 dark:border-white/10 dark:data-hover:border-white/20',\n // Background color\n 'bg-transparent dark:bg-white/5',\n // Hide default focus styles\n 'focus:outline-hidden',\n // Invalid state\n 'data-invalid:border-red-500 data-invalid:data-hover:border-red-500 dark:data-invalid:border-red-600 dark:data-invalid:data-hover:border-red-600',\n // Disabled state\n 'disabled:border-zinc-950/20 dark:disabled:border-white/15 dark:disabled:bg-white/2.5 dark:data-hover:disabled:border-white/15',\n // Resizable\n resizable ? 'resize-y' : 'resize-none',\n ])}\n />\n </span>\n )\n})\n","import clsx from 'clsx'\nimport type React from 'react'\n\nexport function Timeline({\n className,\n children,\n}: {\n className?: string\n children: React.ReactNode\n}) {\n return <ol className={clsx('relative', className)}>{children}</ol>\n}\n\nexport function TimelineItem({\n icon,\n date,\n title,\n description,\n isLast = false,\n className,\n}: {\n icon?: React.ReactNode\n date?: React.ReactNode\n title: React.ReactNode\n description?: React.ReactNode\n isLast?: boolean\n className?: string\n}) {\n return (\n <li className={clsx('relative flex gap-4', !isLast && 'pb-8', className)}>\n {/* Connector line */}\n {!isLast && (\n <div\n aria-hidden=\"true\"\n className=\"absolute left-4 top-8 -bottom-0 w-px bg-zinc-200 dark:bg-zinc-700\"\n />\n )}\n\n {/* Icon */}\n <div className=\"relative z-10 flex size-8 shrink-0 items-center justify-center rounded-full bg-white ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-700\">\n {icon ?? <div className=\"size-2 rounded-full bg-zinc-400 dark:bg-zinc-500\" />}\n </div>\n\n {/* Content */}\n <div className=\"flex-1 pt-0.5\">\n <div className=\"flex flex-wrap items-baseline justify-between gap-x-4\">\n <p className=\"text-sm font-semibold text-zinc-950 dark:text-white\">{title}</p>\n {date && (\n <time className=\"shrink-0 text-xs text-zinc-400 dark:text-zinc-500\">{date}</time>\n )}\n </div>\n {description && (\n <p className=\"mt-1 text-sm text-zinc-600 dark:text-zinc-400\">{description}</p>\n )}\n </div>\n </li>\n )\n}\n","'use client'\n\nimport clsx from 'clsx'\nimport type React from 'react'\nimport { createContext, useCallback, useContext, useReducer } from 'react'\nimport { createPortal } from 'react-dom'\n\ntype ToastVariant = 'default' | 'success' | 'error' | 'warning' | 'info'\n\ntype Toast = {\n id: string\n title: string\n description?: string\n variant?: ToastVariant\n duration?: number\n}\n\ntype ToastAction = { type: 'ADD'; toast: Toast } | { type: 'REMOVE'; id: string }\n\nfunction toastReducer(state: Toast[], action: ToastAction): Toast[] {\n switch (action.type) {\n case 'ADD':\n return [...state, action.toast]\n case 'REMOVE':\n return state.filter((t) => t.id !== action.id)\n }\n}\n\ntype ToastContextValue = {\n toasts: Toast[]\n addToast: (toast: Omit<Toast, 'id'>) => string\n removeToast: (id: string) => void\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null)\n\nexport function ToastProvider({ children }: { children: React.ReactNode }) {\n const [toasts, dispatch] = useReducer(toastReducer, [])\n\n const addToast = useCallback((toast: Omit<Toast, 'id'>) => {\n const id = Math.random().toString(36).slice(2)\n const duration = toast.duration ?? 5000\n dispatch({ type: 'ADD', toast: { ...toast, id } })\n if (duration > 0) {\n setTimeout(() => dispatch({ type: 'REMOVE', id }), duration)\n }\n return id\n }, [])\n\n const removeToast = useCallback((id: string) => {\n dispatch({ type: 'REMOVE', id })\n }, [])\n\n return (\n <ToastContext value={{ toasts, addToast, removeToast }}>\n {children}\n {typeof document !== 'undefined' &&\n createPortal(<ToastList toasts={toasts} onRemove={removeToast} />, document.body)}\n </ToastContext>\n )\n}\n\nexport function useToast(): Pick<ToastContextValue, 'addToast' | 'removeToast'> {\n const ctx = useContext(ToastContext)\n if (!ctx) throw new Error('useToast must be used within a ToastProvider')\n return ctx\n}\n\nconst variantClasses: Record<ToastVariant, string> = {\n default: 'bg-white dark:bg-zinc-800 ring-zinc-950/10 dark:ring-white/10',\n success: 'bg-white dark:bg-zinc-800 ring-green-500/30',\n error: 'bg-white dark:bg-zinc-800 ring-red-500/30',\n warning: 'bg-white dark:bg-zinc-800 ring-amber-500/30',\n info: 'bg-white dark:bg-zinc-800 ring-blue-500/30',\n}\n\nconst variantIconClasses: Record<ToastVariant, string> = {\n default: 'hidden',\n success: 'text-green-500',\n error: 'text-red-500',\n warning: 'text-amber-500',\n info: 'text-blue-500',\n}\n\nconst variantIcons: Record<ToastVariant, string> = {\n default: '',\n success: '✓',\n error: '✕',\n warning: '!',\n info: 'i',\n}\n\nfunction ToastList({ toasts, onRemove }: { toasts: Toast[]; onRemove: (id: string) => void }) {\n if (toasts.length === 0) return null\n\n return (\n <div\n aria-live=\"assertive\"\n className=\"pointer-events-none fixed inset-0 z-50 flex flex-col items-end justify-end gap-2 p-4 sm:p-6\"\n >\n {toasts.map((toast) => (\n <ToastItem key={toast.id} toast={toast} onRemove={onRemove} />\n ))}\n </div>\n )\n}\n\nfunction ToastItem({ toast, onRemove }: { toast: Toast; onRemove: (id: string) => void }) {\n const variant = toast.variant ?? 'default'\n return (\n <div\n role=\"alert\"\n className={clsx(\n 'pointer-events-auto flex w-full max-w-sm items-start gap-3 rounded-xl p-4 shadow-lg ring-1',\n variantClasses[variant],\n )}\n >\n {variant !== 'default' && (\n <span className={clsx('mt-0.5 text-sm font-bold', variantIconClasses[variant])}>\n {variantIcons[variant]}\n </span>\n )}\n <div className=\"flex-1\">\n <p className=\"text-sm font-semibold text-zinc-950 dark:text-white\">{toast.title}</p>\n {toast.description && (\n <p className=\"mt-1 text-sm text-zinc-500 dark:text-zinc-400\">{toast.description}</p>\n )}\n </div>\n <button\n type=\"button\"\n aria-label=\"Dismiss\"\n onClick={() => onRemove(toast.id)}\n className=\"shrink-0 rounded-md text-zinc-400 hover:text-zinc-600 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 dark:text-zinc-500 dark:hover:text-zinc-300\"\n >\n <span aria-hidden=\"true\">✕</span>\n </button>\n </div>\n )\n}\n","'use client'\n\nimport clsx from 'clsx'\nimport type React from 'react'\nimport { useCallback, useId, useRef, useState } from 'react'\n\ntype TooltipSide = 'top' | 'bottom' | 'left' | 'right'\n\nconst sideClasses: Record<TooltipSide, string> = {\n top: 'bottom-full left-1/2 -translate-x-1/2 mb-2',\n bottom: 'top-full left-1/2 -translate-x-1/2 mt-2',\n left: 'right-full top-1/2 -translate-y-1/2 mr-2',\n right: 'left-full top-1/2 -translate-y-1/2 ml-2',\n}\n\nexport function Tooltip({\n content,\n side = 'top',\n className,\n children,\n}: {\n content: React.ReactNode\n side?: TooltipSide\n className?: string\n children: React.ReactElement\n}) {\n const [visible, setVisible] = useState(false)\n const id = useId()\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const show = useCallback(() => {\n timeoutRef.current = setTimeout(() => setVisible(true), 200)\n }, [])\n\n const hide = useCallback(() => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n setVisible(false)\n }, [])\n\n return (\n <span className=\"relative inline-flex\" onMouseEnter={show} onMouseLeave={hide}>\n {children}\n {visible && (\n <span\n role=\"tooltip\"\n id={id}\n className={clsx(\n className,\n sideClasses[side],\n 'pointer-events-none absolute z-50 w-max max-w-xs rounded-lg bg-zinc-950 px-2.5 py-1.5 text-xs text-white shadow-lg dark:bg-zinc-700',\n )}\n >\n {content}\n </span>\n )}\n </span>\n )\n}\n"],"names":["Link","Button","AvatarButton","React","Checkbox","styles","sideClasses","Input","Select","Textarea"],"mappings":"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"}