@spawn-llc/design-system 1.1.1 → 1.2.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 (188) hide show
  1. package/dist/chunk-227VGN2D.js +617 -0
  2. package/dist/chunk-2UK4FHS3.js +31 -0
  3. package/dist/chunk-36NOAJFW.js +53 -0
  4. package/dist/chunk-3EZ5FFYG.js +154 -0
  5. package/dist/chunk-3PN2XMRA.js +80 -0
  6. package/dist/chunk-3SLZRFKQ.js +107 -0
  7. package/dist/chunk-4ABNKOPC.js +18 -0
  8. package/dist/chunk-4IKPZU4X.js +34 -0
  9. package/dist/chunk-5YRMB7KW.js +31 -0
  10. package/dist/chunk-66R4755B.js +37 -0
  11. package/dist/chunk-ATBQXQM7.js +165 -0
  12. package/dist/chunk-AUWFUYJI.js +79 -0
  13. package/dist/chunk-BTGJV2P6.js +237 -0
  14. package/dist/chunk-BYJWYU66.js +95 -0
  15. package/dist/chunk-D6UXXTC6.js +18 -0
  16. package/dist/chunk-DFVSGTAN.js +24 -0
  17. package/dist/chunk-DQ52UWO2.js +28 -0
  18. package/dist/chunk-DXXFNPYR.js +20 -0
  19. package/dist/chunk-GBPD3QPO.js +60 -0
  20. package/dist/chunk-GHSVAEXO.js +227 -0
  21. package/dist/chunk-GQIUVLXP.js +42 -0
  22. package/dist/chunk-HG4AEMA5.js +74 -0
  23. package/dist/chunk-HK6P54FZ.js +139 -0
  24. package/dist/chunk-HSP43BHH.js +97 -0
  25. package/dist/chunk-HYBBZTLY.js +1 -0
  26. package/dist/chunk-IS2ZVRUW.js +186 -0
  27. package/dist/chunk-JSULEEYQ.js +9 -0
  28. package/dist/chunk-K46NYJUT.js +15 -0
  29. package/dist/chunk-L5SMHZJL.js +162 -0
  30. package/dist/chunk-LPPLLYOR.js +185 -0
  31. package/dist/chunk-LYDG55X2.js +194 -0
  32. package/dist/chunk-MLC45YHE.js +122 -0
  33. package/dist/chunk-MZEY2L46.js +186 -0
  34. package/dist/chunk-N34HFTEJ.js +22 -0
  35. package/dist/chunk-PPW4C342.js +232 -0
  36. package/dist/chunk-PZCXY6QZ.js +208 -0
  37. package/dist/chunk-Q3HD7YQZ.js +261 -0
  38. package/dist/chunk-QF7LZKLC.js +98 -0
  39. package/dist/chunk-QNUAUOJW.js +15 -0
  40. package/dist/chunk-QZSQXEOU.js +28 -0
  41. package/dist/chunk-RBTFEYGV.js +77 -0
  42. package/dist/chunk-SJMEO63M.js +116 -0
  43. package/dist/chunk-T6DWCVR3.js +73 -0
  44. package/dist/chunk-T7GS4AXQ.js +245 -0
  45. package/dist/chunk-TP35WWVP.js +46 -0
  46. package/dist/chunk-TQ6CJZMT.js +42 -0
  47. package/dist/chunk-U7N2A7A3.js +9 -0
  48. package/dist/chunk-V3NRC7QE.js +142 -0
  49. package/dist/chunk-VOHNOSMH.js +22 -0
  50. package/dist/chunk-W3PHWPYP.js +43 -0
  51. package/dist/chunk-WJ6DNG2Z.js +75 -0
  52. package/dist/chunk-WMXCMDSQ.js +126 -0
  53. package/dist/chunk-WSNSTJAR.js +58 -0
  54. package/dist/chunk-XG3HHC3U.js +79 -0
  55. package/dist/chunk-XOLQ37I2.js +118 -0
  56. package/dist/chunk-YFPY5SLS.js +19 -0
  57. package/dist/chunk-YFVERFQA.js +76 -0
  58. package/dist/chunk-YL4VCJKF.js +75 -0
  59. package/dist/chunk-ZMHTPZVQ.js +61 -0
  60. package/dist/chunk-ZO74KVH3.js +38 -0
  61. package/dist/components/ui/accordion.d.ts +9 -0
  62. package/dist/components/ui/accordion.js +3 -0
  63. package/dist/components/ui/alert-dialog.d.ts +24 -0
  64. package/dist/components/ui/alert-dialog.js +5 -0
  65. package/dist/components/ui/alert.d.ts +13 -0
  66. package/dist/components/ui/alert.js +3 -0
  67. package/dist/components/ui/aspect-ratio.d.ts +7 -0
  68. package/dist/components/ui/aspect-ratio.js +3 -0
  69. package/dist/components/ui/avatar.d.ts +13 -0
  70. package/dist/components/ui/avatar.js +3 -0
  71. package/dist/components/ui/badge.d.ts +11 -0
  72. package/dist/components/ui/badge.js +3 -0
  73. package/dist/components/ui/breadcrumb.d.ts +12 -0
  74. package/dist/components/ui/breadcrumb.js +3 -0
  75. package/dist/components/ui/button-group.d.ts +15 -0
  76. package/dist/components/ui/button-group.js +4 -0
  77. package/dist/components/ui/button.d.ts +9 -0
  78. package/dist/components/ui/button.js +4 -0
  79. package/dist/components/ui/calendar.d.ts +16 -0
  80. package/dist/components/ui/calendar.js +5 -0
  81. package/dist/components/ui/card.d.ts +13 -0
  82. package/dist/components/ui/card.js +3 -0
  83. package/dist/components/ui/carousel.d.ts +34 -0
  84. package/dist/components/ui/carousel.js +5 -0
  85. package/dist/components/ui/chart.d.ts +46 -0
  86. package/dist/components/ui/chart.js +3 -0
  87. package/dist/components/ui/checkbox.d.ts +6 -0
  88. package/dist/components/ui/checkbox.js +3 -0
  89. package/dist/components/ui/collapsible.d.ts +8 -0
  90. package/dist/components/ui/collapsible.js +2 -0
  91. package/dist/components/ui/combobox.d.ts +26 -0
  92. package/dist/components/ui/combobox.js +8 -0
  93. package/dist/components/ui/command.d.ts +22 -0
  94. package/dist/components/ui/command.js +9 -0
  95. package/dist/components/ui/context-menu.d.ts +31 -0
  96. package/dist/components/ui/context-menu.js +3 -0
  97. package/dist/components/ui/dialog.d.ts +19 -0
  98. package/dist/components/ui/dialog.js +5 -0
  99. package/dist/components/ui/direction.d.ts +1 -0
  100. package/dist/components/ui/direction.js +2 -0
  101. package/dist/components/ui/drawer.d.ts +15 -0
  102. package/dist/components/ui/drawer.js +3 -0
  103. package/dist/components/ui/dropdown-menu.d.ts +31 -0
  104. package/dist/components/ui/dropdown-menu.js +3 -0
  105. package/dist/components/ui/empty.d.ts +15 -0
  106. package/dist/components/ui/empty.js +3 -0
  107. package/dist/components/ui/field.d.ts +28 -0
  108. package/dist/components/ui/field.js +5 -0
  109. package/dist/components/ui/hover-card.d.ts +8 -0
  110. package/dist/components/ui/hover-card.js +3 -0
  111. package/dist/components/ui/input-group.d.ts +23 -0
  112. package/dist/components/ui/input-group.js +7 -0
  113. package/dist/components/ui/input-otp.d.ts +13 -0
  114. package/dist/components/ui/input-otp.js +3 -0
  115. package/dist/components/ui/input.d.ts +5 -0
  116. package/dist/components/ui/input.js +3 -0
  117. package/dist/components/ui/item.d.ts +26 -0
  118. package/dist/components/ui/item.js +4 -0
  119. package/dist/components/ui/kbd.d.ts +6 -0
  120. package/dist/components/ui/kbd.js +3 -0
  121. package/dist/components/ui/label.d.ts +5 -0
  122. package/dist/components/ui/label.js +3 -0
  123. package/dist/components/ui/logo.d.ts +17 -0
  124. package/dist/components/ui/logo.js +3 -0
  125. package/dist/components/ui/menubar.d.ts +31 -0
  126. package/dist/components/ui/menubar.js +4 -0
  127. package/dist/components/ui/native-select.d.ts +10 -0
  128. package/dist/components/ui/native-select.js +3 -0
  129. package/dist/components/ui/navigation-menu.d.ts +15 -0
  130. package/dist/components/ui/navigation-menu.js +3 -0
  131. package/dist/components/ui/pagination.d.ts +23 -0
  132. package/dist/components/ui/pagination.js +5 -0
  133. package/dist/components/ui/popover.d.ts +11 -0
  134. package/dist/components/ui/popover.js +3 -0
  135. package/dist/components/ui/progress.d.ts +10 -0
  136. package/dist/components/ui/progress.js +3 -0
  137. package/dist/components/ui/radio-group.d.ts +8 -0
  138. package/dist/components/ui/radio-group.js +3 -0
  139. package/dist/components/ui/resizable.d.ts +10 -0
  140. package/dist/components/ui/resizable.js +3 -0
  141. package/dist/components/ui/scroll-area.d.ts +7 -0
  142. package/dist/components/ui/scroll-area.js +3 -0
  143. package/dist/components/ui/select.d.ts +17 -0
  144. package/dist/components/ui/select.js +3 -0
  145. package/dist/components/ui/separator.d.ts +6 -0
  146. package/dist/components/ui/separator.js +3 -0
  147. package/dist/components/ui/sheet.d.ts +16 -0
  148. package/dist/components/ui/sheet.js +5 -0
  149. package/dist/components/ui/sidebar.d.ts +70 -0
  150. package/dist/components/ui/sidebar.js +11 -0
  151. package/dist/components/ui/skeleton.d.ts +5 -0
  152. package/dist/components/ui/skeleton.js +3 -0
  153. package/dist/components/ui/slider.d.ts +6 -0
  154. package/dist/components/ui/slider.js +3 -0
  155. package/dist/components/ui/sonner.d.ts +6 -0
  156. package/dist/components/ui/sonner.js +2 -0
  157. package/dist/components/ui/spinner.d.ts +5 -0
  158. package/dist/components/ui/spinner.js +3 -0
  159. package/dist/components/ui/switch.d.ts +8 -0
  160. package/dist/components/ui/switch.js +3 -0
  161. package/dist/components/ui/table.d.ts +12 -0
  162. package/dist/components/ui/table.js +3 -0
  163. package/dist/components/ui/tabs.d.ts +14 -0
  164. package/dist/components/ui/tabs.js +3 -0
  165. package/dist/components/ui/textarea.d.ts +5 -0
  166. package/dist/components/ui/textarea.js +3 -0
  167. package/dist/components/ui/toggle-group.d.ts +14 -0
  168. package/dist/components/ui/toggle-group.js +4 -0
  169. package/dist/components/ui/toggle.d.ts +12 -0
  170. package/dist/components/ui/toggle.js +3 -0
  171. package/dist/components/ui/tooltip.d.ts +9 -0
  172. package/dist/components/ui/tooltip.js +3 -0
  173. package/dist/hooks/use-mobile.d.ts +3 -0
  174. package/dist/hooks/use-mobile.js +2 -0
  175. package/dist/index.d.ts +98 -640
  176. package/dist/index.js +60 -5573
  177. package/dist/lib/button-variants.d.ts +17 -0
  178. package/dist/lib/button-variants.js +1 -0
  179. package/dist/lib/contrast.d.ts +9 -0
  180. package/dist/lib/contrast.js +1 -0
  181. package/dist/lib/utils.d.ts +5 -0
  182. package/dist/lib/utils.js +1 -0
  183. package/dist/styles.css +1 -1
  184. package/dist/variants.d.ts +3 -0
  185. package/dist/variants.js +1 -0
  186. package/package.json +13 -5
  187. /package/dist/{tokens.d.ts → tokens.generated.d.ts} +0 -0
  188. /package/dist/{tokens.js → tokens.generated.js} +0 -0
@@ -0,0 +1,79 @@
1
+ import { cn } from './chunk-U7N2A7A3.js';
2
+ import * as React from 'react';
3
+ import { OTPInput, OTPInputContext } from 'input-otp';
4
+ import { MinusIcon } from 'lucide-react';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
+
7
+ function InputOTP({
8
+ className,
9
+ containerClassName,
10
+ ...props
11
+ }) {
12
+ return /* @__PURE__ */ jsx(
13
+ OTPInput,
14
+ {
15
+ "data-slot": "input-otp",
16
+ containerClassName: cn(
17
+ "cn-input-otp flex items-center has-disabled:opacity-50",
18
+ containerClassName
19
+ ),
20
+ spellCheck: false,
21
+ className: cn("disabled:cursor-not-allowed", className),
22
+ ...props
23
+ }
24
+ );
25
+ }
26
+ function InputOTPGroup({ className, ...props }) {
27
+ return /* @__PURE__ */ jsx(
28
+ "div",
29
+ {
30
+ "data-slot": "input-otp-group",
31
+ className: cn(
32
+ "flex items-center rounded-lg has-aria-invalid:border-destructive has-aria-invalid:ring-3 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40",
33
+ className
34
+ ),
35
+ ...props
36
+ }
37
+ );
38
+ }
39
+ function InputOTPSlot({
40
+ index,
41
+ className,
42
+ ...props
43
+ }) {
44
+ const inputOTPContext = React.useContext(OTPInputContext);
45
+ const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
46
+ return /* @__PURE__ */ jsxs(
47
+ "div",
48
+ {
49
+ "data-slot": "input-otp-slot",
50
+ "data-active": isActive,
51
+ className: cn(
52
+ "relative flex size-8 items-center justify-center border-y border-r border-input text-sm transition-all outline-none first:rounded-l-lg first:border-l last:rounded-r-lg aria-invalid:border-destructive data-[active=true]:z-10 data-[active=true]:border-ring data-[active=true]:ring-3 data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:border-destructive data-[active=true]:aria-invalid:ring-destructive/20 dark:bg-input/30 dark:data-[active=true]:aria-invalid:ring-destructive/40",
53
+ className
54
+ ),
55
+ ...props,
56
+ children: [
57
+ char,
58
+ hasFakeCaret && /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx("div", { className: "h-4 w-px animate-caret-blink bg-foreground duration-1000" }) })
59
+ ]
60
+ }
61
+ );
62
+ }
63
+ function InputOTPSeparator({ ...props }) {
64
+ return /* @__PURE__ */ jsx(
65
+ "div",
66
+ {
67
+ "data-slot": "input-otp-separator",
68
+ className: "flex items-center [&_svg:not([class*='size-'])]:size-4",
69
+ role: "separator",
70
+ ...props,
71
+ children: /* @__PURE__ */ jsx(
72
+ MinusIcon,
73
+ {}
74
+ )
75
+ }
76
+ );
77
+ }
78
+
79
+ export { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot };
@@ -0,0 +1,237 @@
1
+ import { cn } from './chunk-U7N2A7A3.js';
2
+ import { Menu } from '@base-ui/react/menu';
3
+ import { ChevronRightIcon, CheckIcon } from 'lucide-react';
4
+ import { jsx, jsxs } from 'react/jsx-runtime';
5
+
6
+ function DropdownMenu({ ...props }) {
7
+ return /* @__PURE__ */ jsx(Menu.Root, { "data-slot": "dropdown-menu", ...props });
8
+ }
9
+ function DropdownMenuPortal({ ...props }) {
10
+ return /* @__PURE__ */ jsx(Menu.Portal, { "data-slot": "dropdown-menu-portal", ...props });
11
+ }
12
+ function DropdownMenuTrigger({ ...props }) {
13
+ return /* @__PURE__ */ jsx(Menu.Trigger, { "data-slot": "dropdown-menu-trigger", ...props });
14
+ }
15
+ function DropdownMenuContent({
16
+ align = "start",
17
+ alignOffset = 0,
18
+ side = "bottom",
19
+ sideOffset = 4,
20
+ className,
21
+ ...props
22
+ }) {
23
+ return /* @__PURE__ */ jsx(Menu.Portal, { children: /* @__PURE__ */ jsx(
24
+ Menu.Positioner,
25
+ {
26
+ className: "isolate z-50 outline-none",
27
+ align,
28
+ alignOffset,
29
+ side,
30
+ sideOffset,
31
+ children: /* @__PURE__ */ jsx(
32
+ Menu.Popup,
33
+ {
34
+ "data-slot": "dropdown-menu-content",
35
+ className: cn("z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95", className),
36
+ ...props
37
+ }
38
+ )
39
+ }
40
+ ) });
41
+ }
42
+ function DropdownMenuGroup({ ...props }) {
43
+ return /* @__PURE__ */ jsx(Menu.Group, { "data-slot": "dropdown-menu-group", ...props });
44
+ }
45
+ function DropdownMenuLabel({
46
+ className,
47
+ inset,
48
+ ...props
49
+ }) {
50
+ return /* @__PURE__ */ jsx(
51
+ Menu.GroupLabel,
52
+ {
53
+ "data-slot": "dropdown-menu-label",
54
+ "data-inset": inset,
55
+ className: cn(
56
+ "px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7",
57
+ className
58
+ ),
59
+ ...props
60
+ }
61
+ );
62
+ }
63
+ function DropdownMenuItem({
64
+ className,
65
+ inset,
66
+ variant = "default",
67
+ ...props
68
+ }) {
69
+ return /* @__PURE__ */ jsx(
70
+ Menu.Item,
71
+ {
72
+ "data-slot": "dropdown-menu-item",
73
+ "data-inset": inset,
74
+ "data-variant": variant,
75
+ className: cn(
76
+ "group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive",
77
+ className
78
+ ),
79
+ ...props
80
+ }
81
+ );
82
+ }
83
+ function DropdownMenuSub({ ...props }) {
84
+ return /* @__PURE__ */ jsx(Menu.SubmenuRoot, { "data-slot": "dropdown-menu-sub", ...props });
85
+ }
86
+ function DropdownMenuSubTrigger({
87
+ className,
88
+ inset,
89
+ children,
90
+ ...props
91
+ }) {
92
+ return /* @__PURE__ */ jsxs(
93
+ Menu.SubmenuTrigger,
94
+ {
95
+ "data-slot": "dropdown-menu-sub-trigger",
96
+ "data-inset": inset,
97
+ className: cn(
98
+ "flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
99
+ className
100
+ ),
101
+ ...props,
102
+ children: [
103
+ children,
104
+ /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto" })
105
+ ]
106
+ }
107
+ );
108
+ }
109
+ function DropdownMenuSubContent({
110
+ align = "start",
111
+ alignOffset = -3,
112
+ side = "right",
113
+ sideOffset = 0,
114
+ className,
115
+ ...props
116
+ }) {
117
+ return /* @__PURE__ */ jsx(
118
+ DropdownMenuContent,
119
+ {
120
+ "data-slot": "dropdown-menu-sub-content",
121
+ className: cn("w-auto min-w-[96px] rounded-lg bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
122
+ align,
123
+ alignOffset,
124
+ side,
125
+ sideOffset,
126
+ ...props
127
+ }
128
+ );
129
+ }
130
+ function DropdownMenuCheckboxItem({
131
+ className,
132
+ children,
133
+ checked,
134
+ inset,
135
+ ...props
136
+ }) {
137
+ return /* @__PURE__ */ jsxs(
138
+ Menu.CheckboxItem,
139
+ {
140
+ "data-slot": "dropdown-menu-checkbox-item",
141
+ "data-inset": inset,
142
+ className: cn(
143
+ "relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
144
+ className
145
+ ),
146
+ checked,
147
+ ...props,
148
+ children: [
149
+ /* @__PURE__ */ jsx(
150
+ "span",
151
+ {
152
+ className: "pointer-events-none absolute right-2 flex items-center justify-center",
153
+ "data-slot": "dropdown-menu-checkbox-item-indicator",
154
+ children: /* @__PURE__ */ jsx(Menu.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx(
155
+ CheckIcon,
156
+ {}
157
+ ) })
158
+ }
159
+ ),
160
+ children
161
+ ]
162
+ }
163
+ );
164
+ }
165
+ function DropdownMenuRadioGroup({ ...props }) {
166
+ return /* @__PURE__ */ jsx(
167
+ Menu.RadioGroup,
168
+ {
169
+ "data-slot": "dropdown-menu-radio-group",
170
+ ...props
171
+ }
172
+ );
173
+ }
174
+ function DropdownMenuRadioItem({
175
+ className,
176
+ children,
177
+ inset,
178
+ ...props
179
+ }) {
180
+ return /* @__PURE__ */ jsxs(
181
+ Menu.RadioItem,
182
+ {
183
+ "data-slot": "dropdown-menu-radio-item",
184
+ "data-inset": inset,
185
+ className: cn(
186
+ "relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
187
+ className
188
+ ),
189
+ ...props,
190
+ children: [
191
+ /* @__PURE__ */ jsx(
192
+ "span",
193
+ {
194
+ className: "pointer-events-none absolute right-2 flex items-center justify-center",
195
+ "data-slot": "dropdown-menu-radio-item-indicator",
196
+ children: /* @__PURE__ */ jsx(Menu.RadioItemIndicator, { children: /* @__PURE__ */ jsx(
197
+ CheckIcon,
198
+ {}
199
+ ) })
200
+ }
201
+ ),
202
+ children
203
+ ]
204
+ }
205
+ );
206
+ }
207
+ function DropdownMenuSeparator({
208
+ className,
209
+ ...props
210
+ }) {
211
+ return /* @__PURE__ */ jsx(
212
+ Menu.Separator,
213
+ {
214
+ "data-slot": "dropdown-menu-separator",
215
+ className: cn("-mx-1 my-1 h-px bg-border", className),
216
+ ...props
217
+ }
218
+ );
219
+ }
220
+ function DropdownMenuShortcut({
221
+ className,
222
+ ...props
223
+ }) {
224
+ return /* @__PURE__ */ jsx(
225
+ "span",
226
+ {
227
+ "data-slot": "dropdown-menu-shortcut",
228
+ className: cn(
229
+ "ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground",
230
+ className
231
+ ),
232
+ ...props
233
+ }
234
+ );
235
+ }
236
+
237
+ export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger };
@@ -0,0 +1,95 @@
1
+ import { cn } from './chunk-U7N2A7A3.js';
2
+ import { jsx } from 'react/jsx-runtime';
3
+
4
+ function Card({
5
+ className,
6
+ size = "default",
7
+ ...props
8
+ }) {
9
+ return /* @__PURE__ */ jsx(
10
+ "div",
11
+ {
12
+ "data-slot": "card",
13
+ "data-size": size,
14
+ className: cn(
15
+ "group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",
16
+ className
17
+ ),
18
+ ...props
19
+ }
20
+ );
21
+ }
22
+ function CardHeader({ className, ...props }) {
23
+ return /* @__PURE__ */ jsx(
24
+ "div",
25
+ {
26
+ "data-slot": "card-header",
27
+ className: cn(
28
+ "group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)",
29
+ className
30
+ ),
31
+ ...props
32
+ }
33
+ );
34
+ }
35
+ function CardTitle({ className, ...props }) {
36
+ return /* @__PURE__ */ jsx(
37
+ "div",
38
+ {
39
+ "data-slot": "card-title",
40
+ className: cn(
41
+ "text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",
42
+ className
43
+ ),
44
+ ...props
45
+ }
46
+ );
47
+ }
48
+ function CardDescription({ className, ...props }) {
49
+ return /* @__PURE__ */ jsx(
50
+ "div",
51
+ {
52
+ "data-slot": "card-description",
53
+ className: cn("text-sm text-muted-foreground", className),
54
+ ...props
55
+ }
56
+ );
57
+ }
58
+ function CardAction({ className, ...props }) {
59
+ return /* @__PURE__ */ jsx(
60
+ "div",
61
+ {
62
+ "data-slot": "card-action",
63
+ className: cn(
64
+ "col-start-2 row-span-2 row-start-1 self-start justify-self-end",
65
+ className
66
+ ),
67
+ ...props
68
+ }
69
+ );
70
+ }
71
+ function CardContent({ className, ...props }) {
72
+ return /* @__PURE__ */ jsx(
73
+ "div",
74
+ {
75
+ "data-slot": "card-content",
76
+ className: cn("px-(--card-spacing)", className),
77
+ ...props
78
+ }
79
+ );
80
+ }
81
+ function CardFooter({ className, ...props }) {
82
+ return /* @__PURE__ */ jsx(
83
+ "div",
84
+ {
85
+ "data-slot": "card-footer",
86
+ className: cn(
87
+ "flex items-center rounded-b-xl border-t bg-muted/50 p-(--card-spacing)",
88
+ className
89
+ ),
90
+ ...props
91
+ }
92
+ );
93
+ }
94
+
95
+ export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };
@@ -0,0 +1,18 @@
1
+ import { cn } from './chunk-U7N2A7A3.js';
2
+ import { jsx } from 'react/jsx-runtime';
3
+
4
+ function Textarea({ className, ...props }) {
5
+ return /* @__PURE__ */ jsx(
6
+ "textarea",
7
+ {
8
+ "data-slot": "textarea",
9
+ className: cn(
10
+ "flex field-sizing-content min-h-16 w-full rounded-lg border border-input bg-transparent px-2.5 py-2 text-base transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",
11
+ className
12
+ ),
13
+ ...props
14
+ }
15
+ );
16
+ }
17
+
18
+ export { Textarea };
@@ -0,0 +1,24 @@
1
+ import { cn } from './chunk-U7N2A7A3.js';
2
+ import { Separator as Separator$1 } from '@base-ui/react/separator';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ function Separator({
6
+ className,
7
+ orientation = "horizontal",
8
+ ...props
9
+ }) {
10
+ return /* @__PURE__ */ jsx(
11
+ Separator$1,
12
+ {
13
+ "data-slot": "separator",
14
+ orientation,
15
+ className: cn(
16
+ "shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",
17
+ className
18
+ ),
19
+ ...props
20
+ }
21
+ );
22
+ }
23
+
24
+ export { Separator };
@@ -0,0 +1,28 @@
1
+ // src/lib/contrast.ts
2
+ function parseHex(hex) {
3
+ let h = hex.trim().replace(/^#/, "");
4
+ if (h.length === 3) h = h[0] + h[0] + h[1] + h[1] + h[2] + h[2];
5
+ if (!/^[0-9a-fA-F]{6}$/.test(h)) {
6
+ throw new Error(`Invalid hex color: ${hex}`);
7
+ }
8
+ return [
9
+ parseInt(h.slice(0, 2), 16),
10
+ parseInt(h.slice(2, 4), 16),
11
+ parseInt(h.slice(4, 6), 16)
12
+ ];
13
+ }
14
+ function relativeLuminance(hex) {
15
+ const [r, g, b] = parseHex(hex).map((channel) => {
16
+ const c = channel / 255;
17
+ return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
18
+ });
19
+ return 0.2126 * r + 0.7152 * g + 0.0722 * b;
20
+ }
21
+ function contrastRatio(a, b) {
22
+ const l1 = relativeLuminance(a);
23
+ const l2 = relativeLuminance(b);
24
+ const [hi, lo] = l1 >= l2 ? [l1, l2] : [l2, l1];
25
+ return (hi + 0.05) / (lo + 0.05);
26
+ }
27
+
28
+ export { contrastRatio, relativeLuminance };
@@ -0,0 +1,20 @@
1
+ import { cn } from './chunk-U7N2A7A3.js';
2
+ import { Input as Input$1 } from '@base-ui/react/input';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ function Input({ className, type, ...props }) {
6
+ return /* @__PURE__ */ jsx(
7
+ Input$1,
8
+ {
9
+ type,
10
+ "data-slot": "input",
11
+ className: cn(
12
+ "h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",
13
+ className
14
+ ),
15
+ ...props
16
+ }
17
+ );
18
+ }
19
+
20
+ export { Input };
@@ -0,0 +1,60 @@
1
+ import { cn } from './chunk-U7N2A7A3.js';
2
+ import { Tooltip as Tooltip$1 } from '@base-ui/react/tooltip';
3
+ import { jsx, jsxs } from 'react/jsx-runtime';
4
+
5
+ function TooltipProvider({
6
+ delay = 0,
7
+ ...props
8
+ }) {
9
+ return /* @__PURE__ */ jsx(
10
+ Tooltip$1.Provider,
11
+ {
12
+ "data-slot": "tooltip-provider",
13
+ delay,
14
+ ...props
15
+ }
16
+ );
17
+ }
18
+ function Tooltip({ ...props }) {
19
+ return /* @__PURE__ */ jsx(Tooltip$1.Root, { "data-slot": "tooltip", ...props });
20
+ }
21
+ function TooltipTrigger({ ...props }) {
22
+ return /* @__PURE__ */ jsx(Tooltip$1.Trigger, { "data-slot": "tooltip-trigger", ...props });
23
+ }
24
+ function TooltipContent({
25
+ className,
26
+ side = "top",
27
+ sideOffset = 4,
28
+ align = "center",
29
+ alignOffset = 0,
30
+ children,
31
+ ...props
32
+ }) {
33
+ return /* @__PURE__ */ jsx(Tooltip$1.Portal, { children: /* @__PURE__ */ jsx(
34
+ Tooltip$1.Positioner,
35
+ {
36
+ align,
37
+ alignOffset,
38
+ side,
39
+ sideOffset,
40
+ className: "isolate z-50",
41
+ children: /* @__PURE__ */ jsxs(
42
+ Tooltip$1.Popup,
43
+ {
44
+ "data-slot": "tooltip-content",
45
+ className: cn(
46
+ "z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
47
+ className
48
+ ),
49
+ ...props,
50
+ children: [
51
+ children,
52
+ /* @__PURE__ */ jsx(Tooltip$1.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5" })
53
+ ]
54
+ }
55
+ )
56
+ }
57
+ ) });
58
+ }
59
+
60
+ export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };