@tydavidson/design-system 1.1.2 → 1.1.4

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 (324) hide show
  1. package/dist/index.d.mts +925 -0
  2. package/dist/index.d.ts +925 -7
  3. package/dist/index.js +1752 -23
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +1643 -0
  6. package/dist/index.mjs.map +1 -0
  7. package/dist/themes/index.d.mts +95 -0
  8. package/dist/themes/index.d.ts +95 -6
  9. package/dist/themes/index.js +218 -17
  10. package/dist/themes/index.js.map +1 -1
  11. package/dist/themes/index.mjs +190 -0
  12. package/dist/themes/index.mjs.map +1 -0
  13. package/package.json +26 -12
  14. package/dist/components/SidebarNav.d.ts +0 -13
  15. package/dist/components/SidebarNav.d.ts.map +0 -1
  16. package/dist/components/SidebarNav.js +0 -63
  17. package/dist/components/SidebarNav.js.map +0 -1
  18. package/dist/components/SidebarNavClient.d.ts +0 -2
  19. package/dist/components/SidebarNavClient.d.ts.map +0 -1
  20. package/dist/components/SidebarNavClient.js +0 -35
  21. package/dist/components/SidebarNavClient.js.map +0 -1
  22. package/dist/components/email/button.d.ts +0 -11
  23. package/dist/components/email/button.d.ts.map +0 -1
  24. package/dist/components/email/button.js +0 -86
  25. package/dist/components/email/button.js.map +0 -1
  26. package/dist/components/email/index.d.ts +0 -7
  27. package/dist/components/email/index.d.ts.map +0 -1
  28. package/dist/components/email/index.js +0 -17
  29. package/dist/components/email/index.js.map +0 -1
  30. package/dist/components/email/layout.d.ts +0 -23
  31. package/dist/components/email/layout.d.ts.map +0 -1
  32. package/dist/components/email/layout.js +0 -93
  33. package/dist/components/email/layout.js.map +0 -1
  34. package/dist/components/email/typography.d.ts +0 -11
  35. package/dist/components/email/typography.d.ts.map +0 -1
  36. package/dist/components/email/typography.js +0 -55
  37. package/dist/components/email/typography.js.map +0 -1
  38. package/dist/components/hooks/use-mobile.d.ts +0 -2
  39. package/dist/components/hooks/use-mobile.d.ts.map +0 -1
  40. package/dist/components/hooks/use-mobile.js +0 -7
  41. package/dist/components/hooks/use-mobile.js.map +0 -1
  42. package/dist/components/typography/heading/heading.d.ts +0 -48
  43. package/dist/components/typography/heading/heading.d.ts.map +0 -1
  44. package/dist/components/typography/heading/heading.js +0 -93
  45. package/dist/components/typography/heading/heading.js.map +0 -1
  46. package/dist/components/typography/heading/heading.stories.d.ts +0 -12
  47. package/dist/components/typography/heading/heading.stories.d.ts.map +0 -1
  48. package/dist/components/typography/heading/heading.stories.js +0 -77
  49. package/dist/components/typography/heading/heading.stories.js.map +0 -1
  50. package/dist/components/typography/heading/index.d.ts +0 -2
  51. package/dist/components/typography/heading/index.d.ts.map +0 -1
  52. package/dist/components/typography/heading/index.js +0 -18
  53. package/dist/components/typography/heading/index.js.map +0 -1
  54. package/dist/components/typography/index.d.ts +0 -5
  55. package/dist/components/typography/index.d.ts.map +0 -1
  56. package/dist/components/typography/index.js +0 -24
  57. package/dist/components/typography/index.js.map +0 -1
  58. package/dist/components/typography/showcase.d.ts +0 -7
  59. package/dist/components/typography/showcase.d.ts.map +0 -1
  60. package/dist/components/typography/showcase.js +0 -15
  61. package/dist/components/typography/showcase.js.map +0 -1
  62. package/dist/components/typography/text/index.d.ts +0 -2
  63. package/dist/components/typography/text/index.d.ts.map +0 -1
  64. package/dist/components/typography/text/index.js +0 -18
  65. package/dist/components/typography/text/index.js.map +0 -1
  66. package/dist/components/typography/text/text.d.ts +0 -43
  67. package/dist/components/typography/text/text.d.ts.map +0 -1
  68. package/dist/components/typography/text/text.js +0 -74
  69. package/dist/components/typography/text/text.js.map +0 -1
  70. package/dist/components/typography/text/text.stories.d.ts +0 -13
  71. package/dist/components/typography/text/text.stories.d.ts.map +0 -1
  72. package/dist/components/typography/text/text.stories.js +0 -75
  73. package/dist/components/typography/text/text.stories.js.map +0 -1
  74. package/dist/components/ui/accordion.d.ts +0 -8
  75. package/dist/components/ui/accordion.d.ts.map +0 -1
  76. package/dist/components/ui/accordion.js +0 -53
  77. package/dist/components/ui/accordion.js.map +0 -1
  78. package/dist/components/ui/alert.d.ts +0 -9
  79. package/dist/components/ui/alert.d.ts.map +0 -1
  80. package/dist/components/ui/alert.js +0 -64
  81. package/dist/components/ui/alert.js.map +0 -1
  82. package/dist/components/ui/aspect-ratio.d.ts +0 -5
  83. package/dist/components/ui/aspect-ratio.d.ts.map +0 -1
  84. package/dist/components/ui/aspect-ratio.js +0 -40
  85. package/dist/components/ui/aspect-ratio.js.map +0 -1
  86. package/dist/components/ui/avatar.d.ts +0 -7
  87. package/dist/components/ui/avatar.d.ts.map +0 -1
  88. package/dist/components/ui/avatar.js +0 -50
  89. package/dist/components/ui/avatar.js.map +0 -1
  90. package/dist/components/ui/badge.d.ts +0 -15
  91. package/dist/components/ui/badge.d.ts.map +0 -1
  92. package/dist/components/ui/badge.js +0 -82
  93. package/dist/components/ui/badge.js.map +0 -1
  94. package/dist/components/ui/breadcrumb.d.ts +0 -11
  95. package/dist/components/ui/breadcrumb.d.ts.map +0 -1
  96. package/dist/components/ui/breadcrumb.js +0 -63
  97. package/dist/components/ui/breadcrumb.js.map +0 -1
  98. package/dist/components/ui/button.d.ts +0 -41
  99. package/dist/components/ui/button.d.ts.map +0 -1
  100. package/dist/components/ui/button.js +0 -109
  101. package/dist/components/ui/button.js.map +0 -1
  102. package/dist/components/ui/calendar.d.ts +0 -9
  103. package/dist/components/ui/calendar.d.ts.map +0 -1
  104. package/dist/components/ui/calendar.js +0 -47
  105. package/dist/components/ui/calendar.js.map +0 -1
  106. package/dist/components/ui/card/card.d.ts +0 -35
  107. package/dist/components/ui/card/card.d.ts.map +0 -1
  108. package/dist/components/ui/card/card.js +0 -62
  109. package/dist/components/ui/card/card.js.map +0 -1
  110. package/dist/components/ui/card/index.d.ts +0 -2
  111. package/dist/components/ui/card/index.d.ts.map +0 -1
  112. package/dist/components/ui/card/index.js +0 -18
  113. package/dist/components/ui/card/index.js.map +0 -1
  114. package/dist/components/ui/card.d.ts +0 -12
  115. package/dist/components/ui/card.d.ts.map +0 -1
  116. package/dist/components/ui/card.js +0 -65
  117. package/dist/components/ui/card.js.map +0 -1
  118. package/dist/components/ui/checkbox.d.ts +0 -5
  119. package/dist/components/ui/checkbox.d.ts.map +0 -1
  120. package/dist/components/ui/checkbox.js +0 -45
  121. package/dist/components/ui/checkbox.js.map +0 -1
  122. package/dist/components/ui/collapsible.d.ts +0 -7
  123. package/dist/components/ui/collapsible.d.ts.map +0 -1
  124. package/dist/components/ui/collapsible.js +0 -44
  125. package/dist/components/ui/collapsible.js.map +0 -1
  126. package/dist/components/ui/command.d.ts +0 -83
  127. package/dist/components/ui/command.d.ts.map +0 -1
  128. package/dist/components/ui/command.js +0 -73
  129. package/dist/components/ui/command.js.map +0 -1
  130. package/dist/components/ui/context-menu.d.ts +0 -31
  131. package/dist/components/ui/context-menu.d.ts.map +0 -1
  132. package/dist/components/ui/context-menu.js +0 -92
  133. package/dist/components/ui/context-menu.js.map +0 -1
  134. package/dist/components/ui/dialog.d.ts +0 -20
  135. package/dist/components/ui/dialog.d.ts.map +0 -1
  136. package/dist/components/ui/dialog.js +0 -68
  137. package/dist/components/ui/dialog.js.map +0 -1
  138. package/dist/components/ui/dropdown-menu/dropdown-menu.d.ts +0 -32
  139. package/dist/components/ui/dropdown-menu/dropdown-menu.d.ts.map +0 -1
  140. package/dist/components/ui/dropdown-menu/dropdown-menu.js +0 -108
  141. package/dist/components/ui/dropdown-menu/dropdown-menu.js.map +0 -1
  142. package/dist/components/ui/dropdown-menu/index.d.ts +0 -2
  143. package/dist/components/ui/dropdown-menu/index.d.ts.map +0 -1
  144. package/dist/components/ui/dropdown-menu/index.js +0 -18
  145. package/dist/components/ui/dropdown-menu/index.js.map +0 -1
  146. package/dist/components/ui/header.d.ts +0 -3
  147. package/dist/components/ui/header.d.ts.map +0 -1
  148. package/dist/components/ui/header.js +0 -16
  149. package/dist/components/ui/header.js.map +0 -1
  150. package/dist/components/ui/hover-card.d.ts +0 -7
  151. package/dist/components/ui/hover-card.d.ts.map +0 -1
  152. package/dist/components/ui/hover-card.js +0 -48
  153. package/dist/components/ui/hover-card.js.map +0 -1
  154. package/dist/components/ui/index.d.ts +0 -15
  155. package/dist/components/ui/index.d.ts.map +0 -1
  156. package/dist/components/ui/index.js +0 -43
  157. package/dist/components/ui/index.js.map +0 -1
  158. package/dist/components/ui/input.d.ts +0 -6
  159. package/dist/components/ui/input.d.ts.map +0 -1
  160. package/dist/components/ui/input.js +0 -45
  161. package/dist/components/ui/input.js.map +0 -1
  162. package/dist/components/ui/label.d.ts +0 -6
  163. package/dist/components/ui/label.d.ts.map +0 -1
  164. package/dist/components/ui/label.js +0 -46
  165. package/dist/components/ui/label.js.map +0 -1
  166. package/dist/components/ui/nav.d.ts +0 -9
  167. package/dist/components/ui/nav.d.ts.map +0 -1
  168. package/dist/components/ui/nav.js +0 -25
  169. package/dist/components/ui/nav.js.map +0 -1
  170. package/dist/components/ui/org-switcher.d.ts +0 -13
  171. package/dist/components/ui/org-switcher.d.ts.map +0 -1
  172. package/dist/components/ui/org-switcher.js +0 -52
  173. package/dist/components/ui/org-switcher.js.map +0 -1
  174. package/dist/components/ui/popover.d.ts +0 -8
  175. package/dist/components/ui/popover.d.ts.map +0 -1
  176. package/dist/components/ui/popover.js +0 -50
  177. package/dist/components/ui/popover.js.map +0 -1
  178. package/dist/components/ui/progress.d.ts +0 -5
  179. package/dist/components/ui/progress.d.ts.map +0 -1
  180. package/dist/components/ui/progress.js +0 -44
  181. package/dist/components/ui/progress.js.map +0 -1
  182. package/dist/components/ui/radio-group.d.ts +0 -6
  183. package/dist/components/ui/radio-group.d.ts.map +0 -1
  184. package/dist/components/ui/radio-group.js +0 -52
  185. package/dist/components/ui/radio-group.js.map +0 -1
  186. package/dist/components/ui/select.d.ts +0 -14
  187. package/dist/components/ui/select.d.ts.map +0 -1
  188. package/dist/components/ui/select.js +0 -72
  189. package/dist/components/ui/select.js.map +0 -1
  190. package/dist/components/ui/separator.d.ts +0 -5
  191. package/dist/components/ui/separator.d.ts.map +0 -1
  192. package/dist/components/ui/separator.js +0 -44
  193. package/dist/components/ui/separator.js.map +0 -1
  194. package/dist/components/ui/sheet.d.ts +0 -22
  195. package/dist/components/ui/sheet.d.ts.map +0 -1
  196. package/dist/components/ui/sheet.js +0 -76
  197. package/dist/components/ui/sheet.js.map +0 -1
  198. package/dist/components/ui/sidebar.d.ts +0 -65
  199. package/dist/components/ui/sidebar.d.ts.map +0 -1
  200. package/dist/components/ui/sidebar.js +0 -269
  201. package/dist/components/ui/sidebar.js.map +0 -1
  202. package/dist/components/ui/skeleton.d.ts +0 -3
  203. package/dist/components/ui/skeleton.d.ts.map +0 -1
  204. package/dist/components/ui/skeleton.js +0 -9
  205. package/dist/components/ui/skeleton.js.map +0 -1
  206. package/dist/components/ui/slider.d.ts +0 -5
  207. package/dist/components/ui/slider.d.ts.map +0 -1
  208. package/dist/components/ui/slider.js +0 -44
  209. package/dist/components/ui/slider.js.map +0 -1
  210. package/dist/components/ui/switch.d.ts +0 -5
  211. package/dist/components/ui/switch.d.ts.map +0 -1
  212. package/dist/components/ui/switch.js +0 -44
  213. package/dist/components/ui/switch.js.map +0 -1
  214. package/dist/components/ui/tabs.d.ts +0 -8
  215. package/dist/components/ui/tabs.d.ts.map +0 -1
  216. package/dist/components/ui/tabs.js +0 -52
  217. package/dist/components/ui/tabs.js.map +0 -1
  218. package/dist/components/ui/textarea.d.ts +0 -6
  219. package/dist/components/ui/textarea.d.ts.map +0 -1
  220. package/dist/components/ui/textarea.js +0 -45
  221. package/dist/components/ui/textarea.js.map +0 -1
  222. package/dist/components/ui/theme-toggle/index.d.ts +0 -2
  223. package/dist/components/ui/theme-toggle/index.d.ts.map +0 -1
  224. package/dist/components/ui/theme-toggle/index.js +0 -18
  225. package/dist/components/ui/theme-toggle/index.js.map +0 -1
  226. package/dist/components/ui/theme-toggle/theme-toggle.d.ts +0 -21
  227. package/dist/components/ui/theme-toggle/theme-toggle.d.ts.map +0 -1
  228. package/dist/components/ui/theme-toggle/theme-toggle.js +0 -52
  229. package/dist/components/ui/theme-toggle/theme-toggle.js.map +0 -1
  230. package/dist/components/ui/toast.d.ts +0 -5
  231. package/dist/components/ui/toast.d.ts.map +0 -1
  232. package/dist/components/ui/toast.js +0 -17
  233. package/dist/components/ui/toast.js.map +0 -1
  234. package/dist/components/ui/toggle-group.d.ts +0 -6
  235. package/dist/components/ui/toggle-group.d.ts.map +0 -1
  236. package/dist/components/ui/toggle-group.js +0 -47
  237. package/dist/components/ui/toggle-group.js.map +0 -1
  238. package/dist/components/ui/toggle.d.ts +0 -5
  239. package/dist/components/ui/toggle.d.ts.map +0 -1
  240. package/dist/components/ui/toggle.js +0 -44
  241. package/dist/components/ui/toggle.js.map +0 -1
  242. package/dist/components/ui/tooltip.d.ts +0 -8
  243. package/dist/components/ui/tooltip.d.ts.map +0 -1
  244. package/dist/components/ui/tooltip.js +0 -50
  245. package/dist/components/ui/tooltip.js.map +0 -1
  246. package/dist/components/ui/use-toast.d.ts +0 -3
  247. package/dist/components/ui/use-toast.d.ts.map +0 -1
  248. package/dist/components/ui/use-toast.js +0 -7
  249. package/dist/components/ui/use-toast.js.map +0 -1
  250. package/dist/email/button.d.ts +0 -11
  251. package/dist/email/button.d.ts.map +0 -1
  252. package/dist/email/button.js +0 -86
  253. package/dist/email/button.js.map +0 -1
  254. package/dist/email/index.d.ts +0 -7
  255. package/dist/email/index.d.ts.map +0 -1
  256. package/dist/email/index.js +0 -17
  257. package/dist/email/index.js.map +0 -1
  258. package/dist/email/layout.d.ts +0 -23
  259. package/dist/email/layout.d.ts.map +0 -1
  260. package/dist/email/layout.js +0 -93
  261. package/dist/email/layout.js.map +0 -1
  262. package/dist/email/typography.d.ts +0 -11
  263. package/dist/email/typography.d.ts.map +0 -1
  264. package/dist/email/typography.js +0 -55
  265. package/dist/email/typography.js.map +0 -1
  266. package/dist/hooks/use-media-query.d.ts +0 -2
  267. package/dist/hooks/use-media-query.d.ts.map +0 -1
  268. package/dist/hooks/use-media-query.js +0 -20
  269. package/dist/hooks/use-media-query.js.map +0 -1
  270. package/dist/index.d.ts.map +0 -1
  271. package/dist/lib/theme-utils.d.ts +0 -42
  272. package/dist/lib/theme-utils.d.ts.map +0 -1
  273. package/dist/lib/theme-utils.js +0 -85
  274. package/dist/lib/theme-utils.js.map +0 -1
  275. package/dist/lib/types.d.ts +0 -18
  276. package/dist/lib/types.d.ts.map +0 -1
  277. package/dist/lib/types.js +0 -6
  278. package/dist/lib/types.js.map +0 -1
  279. package/dist/lib/utils.d.ts +0 -34
  280. package/dist/lib/utils.d.ts.map +0 -1
  281. package/dist/lib/utils.js +0 -52
  282. package/dist/lib/utils.js.map +0 -1
  283. package/dist/styles/constants/button-colors.d.ts +0 -59
  284. package/dist/styles/constants/button-colors.d.ts.map +0 -1
  285. package/dist/styles/constants/button-colors.js +0 -61
  286. package/dist/styles/constants/button-colors.js.map +0 -1
  287. package/dist/themes/catalog.d.ts +0 -2
  288. package/dist/themes/catalog.d.ts.map +0 -1
  289. package/dist/themes/catalog.js +0 -16
  290. package/dist/themes/catalog.js.map +0 -1
  291. package/dist/themes/index.d.ts.map +0 -1
  292. package/dist/themes/theme-context.d.ts +0 -30
  293. package/dist/themes/theme-context.d.ts.map +0 -1
  294. package/dist/themes/theme-context.js +0 -43
  295. package/dist/themes/theme-context.js.map +0 -1
  296. package/dist/themes/theme-provider.d.ts +0 -9
  297. package/dist/themes/theme-provider.d.ts.map +0 -1
  298. package/dist/themes/theme-provider.js +0 -16
  299. package/dist/themes/theme-provider.js.map +0 -1
  300. package/dist/tokens/colors.d.ts +0 -135
  301. package/dist/tokens/colors.d.ts.map +0 -1
  302. package/dist/tokens/colors.js +0 -140
  303. package/dist/tokens/colors.js.map +0 -1
  304. package/dist/tokens/index.d.ts +0 -256
  305. package/dist/tokens/index.d.ts.map +0 -1
  306. package/dist/tokens/index.js +0 -39
  307. package/dist/tokens/index.js.map +0 -1
  308. package/dist/tokens/radius.d.ts +0 -19
  309. package/dist/tokens/radius.d.ts.map +0 -1
  310. package/dist/tokens/radius.js +0 -27
  311. package/dist/tokens/radius.js.map +0 -1
  312. package/dist/tokens/shadows.d.ts +0 -21
  313. package/dist/tokens/shadows.d.ts.map +0 -1
  314. package/dist/tokens/shadows.js +0 -26
  315. package/dist/tokens/shadows.js.map +0 -1
  316. package/dist/tokens/spacing.d.ts +0 -26
  317. package/dist/tokens/spacing.d.ts.map +0 -1
  318. package/dist/tokens/spacing.js +0 -36
  319. package/dist/tokens/spacing.js.map +0 -1
  320. package/dist/tokens/typography.d.ts +0 -75
  321. package/dist/tokens/typography.d.ts.map +0 -1
  322. package/dist/tokens/typography.js +0 -55
  323. package/dist/tokens/typography.js.map +0 -1
  324. package/dist/tsconfig.build.tsbuildinfo +0 -1
package/dist/index.mjs ADDED
@@ -0,0 +1,1643 @@
1
+ import * as React2 from 'react';
2
+ import { Slot } from '@radix-ui/react-slot';
3
+ import { cva } from 'class-variance-authority';
4
+ import { clsx } from 'clsx';
5
+ import { twMerge } from 'tailwind-merge';
6
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
+ import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
8
+ import { IconCheck, IconPointFilled, IconChevronRight, IconX, IconSearch, IconSun, IconMoon } from '@tabler/icons-react';
9
+ import * as TogglePrimitive from '@radix-ui/react-toggle';
10
+ import * as ToggleGroupPrimitive from '@radix-ui/react-toggle-group';
11
+ import * as SliderPrimitive from '@radix-ui/react-slider';
12
+ import * as PopoverPrimitive from '@radix-ui/react-popover';
13
+ import * as HoverCardPrimitive from '@radix-ui/react-hover-card';
14
+ import * as SheetPrimitive from '@radix-ui/react-dialog';
15
+ import { Command as Command$1 } from 'cmdk';
16
+ import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
17
+ import * as ContextMenuPrimitive from '@radix-ui/react-context-menu';
18
+ import { ThemeProvider as ThemeProvider$1, useTheme as useTheme$1 } from 'next-themes';
19
+
20
+ // src/components/ui/button.tsx
21
+ function cn(...inputs) {
22
+ return twMerge(clsx(inputs));
23
+ }
24
+ function generateId(prefix = "id") {
25
+ const randomId = Math.random().toString(36).substring(2, 9);
26
+ return `${prefix}-${randomId}`;
27
+ }
28
+ function isNotNullOrUndefined(value) {
29
+ return value !== null && value !== void 0;
30
+ }
31
+ function filterDOMProps(props, propNames) {
32
+ const result = { ...props };
33
+ propNames.forEach((name) => delete result[name]);
34
+ return result;
35
+ }
36
+ var buttonVariants = cva(
37
+ "float-button inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-[4px] text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
38
+ {
39
+ variants: {
40
+ variant: {
41
+ primary: "bg-[var(--button-bg-primary)] text-[var(--button-text-primary)] hover:bg-[var(--button-bg-primary-hover)] hover:text-[var(--button-text-primary-hover)] border-[var(--button-border-primary)] hover:border-[var(--button-border-primary-hover)]",
42
+ secondary: "bg-[var(--button-bg-secondary)] text-[var(--button-text-secondary)] hover:bg-[var(--button-bg-secondary-hover)] hover:text-[var(--button-text-secondary-hover)] border-[var(--button-border-secondary)] hover:border-[var(--button-border-secondary-hover)]",
43
+ ghost: "text-[var(--button-text-ghost)] hover:bg-[var(--button-bg-ghost-hover)] hover:text-[var(--button-text-ghost-hover)]",
44
+ outline: "border text-[var(--button-text-outline)] hover:bg-[var(--button-bg-outline-hover)] hover:text-[var(--button-text-outline-hover)] border-[var(--button-border-outline)] hover:border-[var(--button-border-outline-hover)]",
45
+ link: "text-[var(--button-text-link)] hover:text-[var(--button-text-link-hover)] bg-transparent border-transparent",
46
+ destructive: "bg-[var(--button-bg-destructive)] text-[var(--button-text-destructive)] hover:bg-[var(--button-bg-destructive-hover)] hover:text-[var(--button-text-destructive-hover)] border-[var(--button-border-destructive)] hover:border-[var(--button-border-destructive-hover)]",
47
+ // Backward compatibility
48
+ default: "bg-[var(--button-bg-primary)] text-[var(--button-text-primary)] hover:bg-[var(--button-bg-primary-hover)] hover:text-[var(--button-text-primary-hover)] border-[var(--button-border-primary)] hover:border-[var(--button-border-primary-hover)]",
49
+ tertiary: "text-[var(--button-text-ghost)] hover:bg-[var(--button-bg-ghost-hover)] hover:text-[var(--button-text-ghost-hover)]",
50
+ primaryError: "bg-[var(--button-bg-destructive)] text-[var(--button-text-destructive)] hover:bg-[var(--button-bg-destructive-hover)] hover:text-[var(--button-text-destructive-hover)] border-[var(--button-border-destructive)] hover:border-[var(--button-border-destructive-hover)]"
51
+ },
52
+ size: {
53
+ sm: "h-6 px-2 text-xs float-button-sm",
54
+ md: "h-8 px-3 text-sm float-button-md",
55
+ lg: "h-10 px-5 text-base float-button-lg",
56
+ iconSm: "h-6 w-6 p-0 float-button-icon-sm",
57
+ iconMd: "h-8 w-8 p-0 float-button-icon-md",
58
+ iconLg: "h-10 w-10 p-0 float-button-icon-lg",
59
+ // For backward compatibility
60
+ icon: "h-8 w-8 p-0 float-button-icon-md"
61
+ // Map "icon" to be equivalent to iconMd
62
+ }
63
+ },
64
+ defaultVariants: {
65
+ variant: "primary",
66
+ size: "md"
67
+ }
68
+ }
69
+ );
70
+ var Button = React2.forwardRef(
71
+ ({
72
+ className,
73
+ variant,
74
+ size = "md",
75
+ asChild = false,
76
+ leftIcon,
77
+ rightIcon,
78
+ isLoading = false,
79
+ color = "brand",
80
+ dsVariant,
81
+ iconOnly = false,
82
+ children,
83
+ ...props
84
+ }, ref) => {
85
+ let resolvedVariant = dsVariant || variant;
86
+ if (resolvedVariant === "default") resolvedVariant = "primary";
87
+ if (resolvedVariant === "tertiary") resolvedVariant = "ghost";
88
+ if (resolvedVariant === "primaryError") resolvedVariant = "destructive";
89
+ const isDisabled = props.disabled || isLoading;
90
+ let sizeVariant = size;
91
+ if (iconOnly) {
92
+ if (typeof size === "string" && !size.startsWith("icon")) {
93
+ if (size === "sm") sizeVariant = "iconSm";
94
+ else if (size === "lg") sizeVariant = "iconLg";
95
+ else sizeVariant = "iconMd";
96
+ }
97
+ }
98
+ const classes = cn(
99
+ buttonVariants({
100
+ variant: resolvedVariant,
101
+ size: sizeVariant,
102
+ className
103
+ })
104
+ );
105
+ const content = /* @__PURE__ */ jsxs(Fragment, { children: [
106
+ leftIcon && !asChild && /* @__PURE__ */ jsx("span", { className: "flex items-center justify-center", children: leftIcon }),
107
+ isLoading && !asChild ? /* @__PURE__ */ jsxs("span", { className: "flex items-center", children: [
108
+ /* @__PURE__ */ jsxs("svg", { className: "animate-spin -ml-1 mr-2", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", children: [
109
+ /* @__PURE__ */ jsx("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "1" }),
110
+ /* @__PURE__ */ jsx("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" })
111
+ ] }),
112
+ /* @__PURE__ */ jsx("span", { children: "Loading..." })
113
+ ] }) : children,
114
+ rightIcon && !asChild && /* @__PURE__ */ jsx("span", { className: "flex items-center justify-center", children: rightIcon })
115
+ ] });
116
+ if (asChild) {
117
+ return /* @__PURE__ */ jsx(
118
+ Slot,
119
+ {
120
+ className: classes,
121
+ ref,
122
+ ...props,
123
+ children
124
+ }
125
+ );
126
+ }
127
+ return /* @__PURE__ */ jsx(
128
+ "button",
129
+ {
130
+ className: classes,
131
+ disabled: isDisabled,
132
+ ref,
133
+ ...props,
134
+ children: content
135
+ }
136
+ );
137
+ }
138
+ );
139
+ Button.displayName = "Button";
140
+ var DropdownMenuRoot = DropdownMenuPrimitive.Root;
141
+ var DropdownMenuTrigger = React2.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
142
+ DropdownMenuPrimitive.Trigger,
143
+ {
144
+ ref,
145
+ className: cn("outline-none select-none", className),
146
+ ...props,
147
+ children
148
+ }
149
+ ));
150
+ DropdownMenuTrigger.displayName = DropdownMenuPrimitive.Trigger.displayName;
151
+ var DropdownMenuContent = React2.forwardRef(({ className, sideOffset = 4, ...props }, ref) => {
152
+ return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
153
+ DropdownMenuPrimitive.Content,
154
+ {
155
+ ref,
156
+ sideOffset,
157
+ className: cn(
158
+ "z-50 min-w-[8rem] overflow-hidden rounded-md border text-sm shadow-md animate-in fade-in-80 px-1",
159
+ "bg-[var(--dropdown-bg)] text-[var(--dropdown-text)] border-[var(--dropdown-border)]",
160
+ "shadow-[var(--dropdown-shadow)]",
161
+ className
162
+ ),
163
+ ...props
164
+ }
165
+ ) });
166
+ });
167
+ DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
168
+ var DropdownMenuItem = React2.forwardRef(({ className, color, leftIcon, rightIcon, children, inset, ...props }, ref) => {
169
+ const baseClasses = cn(
170
+ "relative flex cursor-default select-none items-center rounded-sm px-2 py-2.5 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
171
+ "text-[var(--dropdown-item-text)]",
172
+ "focus:bg-[var(--dropdown-item-bg-focus)] focus:text-[var(--dropdown-item-text-focus)]",
173
+ "hover:bg-[var(--dropdown-item-bg-hover)] hover:text-[var(--dropdown-item-text-hover)]",
174
+ inset && "pl-8"
175
+ );
176
+ const colorVariantClasses = {
177
+ brand: "focus:bg-[var(--dropdown-item-bg-brand-focus)] focus:text-[var(--dropdown-item-text-brand-focus)] hover:bg-[var(--dropdown-item-bg-brand-hover)] hover:text-[var(--dropdown-item-text-brand-hover)]",
178
+ error: "focus:bg-[var(--dropdown-item-bg-error-focus)] focus:text-[var(--dropdown-item-text-error-focus)] hover:bg-[var(--dropdown-item-bg-error-hover)] hover:text-[var(--dropdown-item-text-error-hover)]",
179
+ warning: "focus:bg-[var(--dropdown-item-bg-warning-focus)] focus:text-[var(--dropdown-item-text-warning-focus)] hover:bg-[var(--dropdown-item-bg-warning-hover)] hover:text-[var(--dropdown-item-text-warning-hover)]",
180
+ success: "focus:bg-[var(--dropdown-item-bg-success-focus)] focus:text-[var(--dropdown-item-text-success-focus)] hover:bg-[var(--dropdown-item-bg-success-hover)] hover:text-[var(--dropdown-item-text-success-hover)]"
181
+ };
182
+ return /* @__PURE__ */ jsxs(
183
+ DropdownMenuPrimitive.Item,
184
+ {
185
+ ref,
186
+ className: cn(
187
+ baseClasses,
188
+ color && colorVariantClasses[color],
189
+ className
190
+ ),
191
+ ...props,
192
+ children: [
193
+ leftIcon && /* @__PURE__ */ jsx("span", { className: cn("mr-2 h-4 w-4 flex items-center justify-center text-[var(--text-tertiary)]", { "ml-auto": !children && rightIcon }), children: leftIcon }),
194
+ children,
195
+ rightIcon && /* @__PURE__ */ jsx("span", { className: "ml-auto pl-2 text-[var(--text-tertiary)] group-hover:text-current", children: rightIcon })
196
+ ]
197
+ }
198
+ );
199
+ });
200
+ DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
201
+ var DropdownMenuLabel = React2.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
202
+ DropdownMenuPrimitive.Label,
203
+ {
204
+ ref,
205
+ className: cn(
206
+ "py-1.5 pr-2 text-sm font-normal text-[var(--text-tertiary)] mb-1",
207
+ inset ? "pl-8" : "pl-2",
208
+ className
209
+ ),
210
+ ...props
211
+ }
212
+ ));
213
+ DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
214
+ var DropdownMenuCheckboxItem = React2.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
215
+ DropdownMenuPrimitive.CheckboxItem,
216
+ {
217
+ ref,
218
+ className: cn(
219
+ "relative flex cursor-default select-none items-center rounded-sm py-2.5 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
220
+ "text-[var(--dropdown-item-text)] focus:bg-[var(--dropdown-item-bg-focus)] focus:text-[var(--dropdown-item-text-focus)] hover:bg-[var(--dropdown-item-bg-hover)] hover:text-[var(--dropdown-item-text-hover)]",
221
+ className
222
+ ),
223
+ checked,
224
+ ...props,
225
+ children: [
226
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(IconCheck, { className: "h-4 w-4 text-[var(--text-tertiary)]", strokeWidth: 2 }) }) }),
227
+ children
228
+ ]
229
+ }
230
+ ));
231
+ DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
232
+ var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
233
+ var DropdownMenuRadioItem = React2.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
234
+ DropdownMenuPrimitive.RadioItem,
235
+ {
236
+ ref,
237
+ className: cn(
238
+ "relative flex cursor-default select-none items-center rounded-sm py-2.5 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
239
+ "text-[var(--dropdown-item-text)] focus:bg-[var(--dropdown-item-bg-focus)] focus:text-[var(--dropdown-item-text-focus)] hover:bg-[var(--dropdown-item-bg-hover)] hover:text-[var(--dropdown-item-text-hover)]",
240
+ className
241
+ ),
242
+ ...props,
243
+ children: [
244
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(IconPointFilled, { className: "h-3 w-3 fill-current text-[var(--text-tertiary)]" }) }) }),
245
+ children
246
+ ]
247
+ }
248
+ ));
249
+ DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
250
+ var DropdownMenuSeparator = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
251
+ DropdownMenuPrimitive.Separator,
252
+ {
253
+ ref,
254
+ className: cn("-mx-1 my-1 h-px bg-[var(--dropdown-separator-bg)]", className),
255
+ ...props
256
+ }
257
+ ));
258
+ DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
259
+ var DropdownMenuShortcut = ({
260
+ className,
261
+ ...props
262
+ }) => {
263
+ return /* @__PURE__ */ jsx(
264
+ "span",
265
+ {
266
+ className: cn("ml-auto text-xs tracking-widest opacity-60 text-[var(--text-tertiary)]", className),
267
+ ...props
268
+ }
269
+ );
270
+ };
271
+ DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
272
+ var DropdownMenuSub = DropdownMenuPrimitive.Sub;
273
+ var DropdownMenuSubTrigger = React2.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
274
+ DropdownMenuPrimitive.SubTrigger,
275
+ {
276
+ ref,
277
+ className: cn(
278
+ "flex cursor-default select-none items-center rounded-sm px-2 py-2.5 text-sm outline-none data-[state=open]:bg-[var(--dropdown-item-bg-hover)] data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
279
+ "text-[var(--dropdown-item-text)] focus:bg-[var(--dropdown-item-bg-focus)] focus:text-[var(--dropdown-item-text-focus)] hover:bg-[var(--dropdown-item-bg-hover)] hover:text-[var(--dropdown-item-text-hover)]",
280
+ inset && "pl-8",
281
+ className
282
+ ),
283
+ ...props,
284
+ children: [
285
+ children,
286
+ /* @__PURE__ */ jsx(IconChevronRight, { className: "ml-auto h-4 w-4 text-[var(--text-tertiary)]" })
287
+ ]
288
+ }
289
+ ));
290
+ DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
291
+ var DropdownMenuSubContent = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
292
+ DropdownMenuPrimitive.SubContent,
293
+ {
294
+ ref,
295
+ className: cn(
296
+ "z-50 min-w-[8rem] overflow-hidden rounded-md border shadow-lg animate-in data-[side=bottom]:slide-in-from-top-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 data-[side=top]:slide-in-from-bottom-1 py-1 px-2",
297
+ "bg-[var(--dropdown-bg)] text-[var(--dropdown-text)] border-[var(--dropdown-border)] shadow-[var(--dropdown-shadow)]",
298
+ className
299
+ ),
300
+ ...props
301
+ }
302
+ ));
303
+ DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
304
+ var DropdownMenu = {
305
+ Root: DropdownMenuRoot,
306
+ Trigger: DropdownMenuTrigger,
307
+ Content: DropdownMenuContent,
308
+ Item: DropdownMenuItem,
309
+ CheckboxItem: DropdownMenuCheckboxItem,
310
+ RadioGroup: DropdownMenuRadioGroup,
311
+ RadioItem: DropdownMenuRadioItem,
312
+ Label: DropdownMenuLabel,
313
+ Separator: DropdownMenuSeparator,
314
+ Shortcut: DropdownMenuShortcut,
315
+ Group: DropdownMenuPrimitive.Group,
316
+ Portal: DropdownMenuPrimitive.Portal,
317
+ Sub: DropdownMenuSub,
318
+ SubContent: DropdownMenuSubContent,
319
+ SubTrigger: DropdownMenuSubTrigger
320
+ };
321
+ var Heading = React2.forwardRef(
322
+ ({
323
+ level = 1,
324
+ size,
325
+ weight = "bold",
326
+ italic = false,
327
+ underline = false,
328
+ color = "default",
329
+ className = "",
330
+ as,
331
+ children,
332
+ ...props
333
+ }, ref) => {
334
+ const defaultTag = `h${level}`;
335
+ const Component = as || defaultTag;
336
+ const defaultSizes = {
337
+ 1: "md",
338
+ 2: "sm",
339
+ 3: "xs",
340
+ 4: "text-xl",
341
+ 5: "text-lg",
342
+ 6: "text-md"
343
+ };
344
+ const finalSize = size || defaultSizes[level];
345
+ const sizeClasses = {
346
+ "2xl": "text-5xl leading-tight tracking-tight",
347
+ "xl": "text-4xl leading-tight tracking-tight",
348
+ "lg": "text-3xl leading-tight tracking-tight",
349
+ "md": "text-2xl leading-tight tracking-tight",
350
+ "sm": "text-xl leading-tight tracking-tight",
351
+ "xs": "text-lg leading-tight tracking-tight",
352
+ "text-xl": "text-xl leading-tight",
353
+ "text-lg": "text-lg leading-tight",
354
+ "text-md": "text-base leading-tight"
355
+ };
356
+ const weightClasses = {
357
+ regular: "font-normal",
358
+ medium: "font-medium",
359
+ semibold: "font-semibold",
360
+ bold: "font-bold"
361
+ };
362
+ const colorClasses = {
363
+ default: "text-foreground",
364
+ muted: "text-muted-foreground",
365
+ brand: "text-brand-700 dark:text-brand-400",
366
+ error: "text-error-700 dark:text-error-400",
367
+ warning: "text-warning-700 dark:text-warning-400",
368
+ success: "text-success-700 dark:text-success-400"
369
+ };
370
+ return /* @__PURE__ */ jsx(
371
+ Component,
372
+ {
373
+ ref,
374
+ className: cn(
375
+ sizeClasses[finalSize],
376
+ weightClasses[weight],
377
+ colorClasses[color],
378
+ italic && "italic",
379
+ underline && "underline",
380
+ className
381
+ ),
382
+ ...props,
383
+ children
384
+ }
385
+ );
386
+ }
387
+ );
388
+ Heading.displayName = "Heading";
389
+ var Text = React2.forwardRef(
390
+ ({
391
+ size = "md",
392
+ weight = "regular",
393
+ italic = false,
394
+ underline = false,
395
+ color = "default",
396
+ className = "",
397
+ as: Component = "p",
398
+ children,
399
+ ...props
400
+ }, ref) => {
401
+ const sizeClasses = {
402
+ xl: "text-xl leading-relaxed",
403
+ lg: "text-lg leading-relaxed",
404
+ md: "text-base leading-relaxed",
405
+ sm: "text-sm leading-relaxed",
406
+ xs: "text-xs leading-relaxed"
407
+ };
408
+ const weightClasses = {
409
+ regular: "font-normal",
410
+ medium: "font-medium",
411
+ semibold: "font-semibold",
412
+ bold: "font-bold"
413
+ };
414
+ const colorClasses = {
415
+ default: "text-foreground",
416
+ muted: "text-muted-foreground",
417
+ brand: "text-brand-700 dark:text-brand-400",
418
+ error: "text-error-700 dark:text-error-400",
419
+ warning: "text-warning-700 dark:text-warning-400",
420
+ success: "text-success-700 dark:text-success-400"
421
+ };
422
+ return /* @__PURE__ */ jsx(
423
+ Component,
424
+ {
425
+ ref,
426
+ className: cn(
427
+ sizeClasses[size],
428
+ weightClasses[weight],
429
+ colorClasses[color],
430
+ italic && "italic",
431
+ underline && "underline",
432
+ className
433
+ ),
434
+ ...props,
435
+ children
436
+ }
437
+ );
438
+ }
439
+ );
440
+ Text.displayName = "Text";
441
+ var Toggle = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
442
+ TogglePrimitive.Root,
443
+ {
444
+ ref,
445
+ className: cn(
446
+ "inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors px-3 h-10 border border-[var(--border-tertiary)] bg-[var(--bg-secondary)] text-[var(--text-tertiary)] hover:bg-[var(--bg-tertiary)] hover:text-[var(--text-primary)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--border-brand)] focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-[var(--bg-brand-solid)] data-[state=on]:text-[var(--text-brand-primary)]",
447
+ className
448
+ ),
449
+ ...props
450
+ }
451
+ ));
452
+ Toggle.displayName = TogglePrimitive.Root.displayName;
453
+ var ToggleGroup = React2.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
454
+ ToggleGroupPrimitive.Root,
455
+ {
456
+ ref,
457
+ className: cn("flex items-center gap-1", className),
458
+ ...props,
459
+ children
460
+ }
461
+ ));
462
+ ToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName;
463
+ var ToggleGroupItem = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
464
+ ToggleGroupPrimitive.Item,
465
+ {
466
+ ref,
467
+ className: cn(
468
+ "inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors px-3 h-10 border border-[var(--border-tertiary)] bg-[var(--bg-secondary)] text-[var(--text-tertiary)] hover:bg-[var(--bg-tertiary)] hover:text-[var(--text-primary)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--border-brand)] focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-[var(--bg-brand-solid)] data-[state=on]:text-[var(--text-brand-primary)]",
469
+ className
470
+ ),
471
+ ...props
472
+ }
473
+ ));
474
+ ToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName;
475
+ var Slider = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs(
476
+ SliderPrimitive.Root,
477
+ {
478
+ ref,
479
+ className: cn(
480
+ "relative flex w-full touch-none select-none items-center",
481
+ className
482
+ ),
483
+ ...props,
484
+ children: [
485
+ /* @__PURE__ */ jsx(SliderPrimitive.Track, { className: "relative h-1.5 w-full grow overflow-hidden rounded-full bg-primary/20", children: /* @__PURE__ */ jsx(SliderPrimitive.Range, { className: "absolute h-full bg-primary" }) }),
486
+ /* @__PURE__ */ jsx(SliderPrimitive.Thumb, { className: "block h-4 w-4 rounded-full border border-primary/50 bg-background shadow transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50" })
487
+ ]
488
+ }
489
+ ));
490
+ Slider.displayName = SliderPrimitive.Root.displayName;
491
+ var Popover = PopoverPrimitive.Root;
492
+ var PopoverTrigger = PopoverPrimitive.Trigger;
493
+ var PopoverAnchor = PopoverPrimitive.Anchor;
494
+ var PopoverContent = React2.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
495
+ PopoverPrimitive.Content,
496
+ {
497
+ ref,
498
+ align,
499
+ sideOffset,
500
+ className: cn(
501
+ "z-50 w-72 rounded-md border border-[var(--border-tertiary)] bg-[var(--bg-tertiary)] p-4 text-[var(--text-tertiary)] shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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",
502
+ className
503
+ ),
504
+ ...props
505
+ }
506
+ ) }));
507
+ PopoverContent.displayName = PopoverPrimitive.Content.displayName;
508
+ var HoverCard = HoverCardPrimitive.Root;
509
+ var HoverCardTrigger = HoverCardPrimitive.Trigger;
510
+ var HoverCardContent = React2.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(
511
+ HoverCardPrimitive.Content,
512
+ {
513
+ ref,
514
+ align,
515
+ sideOffset,
516
+ className: cn(
517
+ "z-50 w-64 rounded-md border border-[var(--border-tertiary)] bg-[var(--bg-tertiary)] p-4 text-[var(--text-tertiary)] shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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",
518
+ className
519
+ ),
520
+ ...props
521
+ }
522
+ ));
523
+ HoverCardContent.displayName = HoverCardPrimitive.Content.displayName;
524
+ var Sheet = SheetPrimitive.Root;
525
+ var SheetTrigger = SheetPrimitive.Trigger;
526
+ var SheetClose = SheetPrimitive.Close;
527
+ var SheetPortal = SheetPrimitive.Portal;
528
+ var SheetOverlay = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
529
+ SheetPrimitive.Overlay,
530
+ {
531
+ className: cn(
532
+ "fixed inset-0 z-50 bg-[var(--bg-overlay)]/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
533
+ className
534
+ ),
535
+ ...props,
536
+ ref
537
+ }
538
+ ));
539
+ SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
540
+ var SheetContent = React2.forwardRef(({ side = "right", className, children, ...props }, ref) => {
541
+ const sideClasses = {
542
+ top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
543
+ bottom: "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
544
+ left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
545
+ right: "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm"
546
+ };
547
+ return /* @__PURE__ */ jsxs(SheetPortal, { children: [
548
+ /* @__PURE__ */ jsx(SheetOverlay, {}),
549
+ /* @__PURE__ */ jsxs(
550
+ SheetPrimitive.Content,
551
+ {
552
+ ref,
553
+ className: cn(
554
+ "fixed z-50 gap-4 bg-[var(--bg-primary)] text-[var(--text-primary)] border-[var(--border-tertiary)] p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
555
+ sideClasses[side],
556
+ className
557
+ ),
558
+ ...props,
559
+ children: [
560
+ children,
561
+ /* @__PURE__ */ jsxs(SheetPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-[var(--bg-primary)] transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-[var(--border-brand)] focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-[var(--bg-secondary)] data-[state=open]:text-[var(--text-tertiary)]", children: [
562
+ /* @__PURE__ */ jsx(IconX, { size: 16, stroke: 1.5 }),
563
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
564
+ ] })
565
+ ]
566
+ }
567
+ )
568
+ ] });
569
+ });
570
+ SheetContent.displayName = SheetPrimitive.Content.displayName;
571
+ var SheetHeader = ({
572
+ className,
573
+ ...props
574
+ }) => /* @__PURE__ */ jsx(
575
+ "div",
576
+ {
577
+ className: cn(
578
+ "flex flex-col space-y-2 text-center sm:text-left",
579
+ className
580
+ ),
581
+ ...props
582
+ }
583
+ );
584
+ SheetHeader.displayName = "SheetHeader";
585
+ var SheetFooter = ({
586
+ className,
587
+ ...props
588
+ }) => /* @__PURE__ */ jsx(
589
+ "div",
590
+ {
591
+ className: cn(
592
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
593
+ className
594
+ ),
595
+ ...props
596
+ }
597
+ );
598
+ SheetFooter.displayName = "SheetFooter";
599
+ var SheetTitle = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
600
+ SheetPrimitive.Title,
601
+ {
602
+ ref,
603
+ className: cn("text-lg font-semibold text-[var(--text-primary)]", className),
604
+ ...props
605
+ }
606
+ ));
607
+ SheetTitle.displayName = SheetPrimitive.Title.displayName;
608
+ var SheetDescription = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
609
+ SheetPrimitive.Description,
610
+ {
611
+ ref,
612
+ className: cn("text-sm text-[var(--text-tertiary)]", className),
613
+ ...props
614
+ }
615
+ ));
616
+ SheetDescription.displayName = SheetPrimitive.Description.displayName;
617
+ var Dialog = SheetPrimitive.Root;
618
+ var DialogPortal = SheetPrimitive.Portal;
619
+ var DialogOverlay = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
620
+ SheetPrimitive.Overlay,
621
+ {
622
+ ref,
623
+ className: cn(
624
+ "fixed inset-0 z-50 bg-[var(--bg-overlay)]/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
625
+ className
626
+ ),
627
+ ...props
628
+ }
629
+ ));
630
+ DialogOverlay.displayName = SheetPrimitive.Overlay.displayName;
631
+ var DialogContent = React2.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(DialogPortal, { children: [
632
+ /* @__PURE__ */ jsx(DialogOverlay, {}),
633
+ /* @__PURE__ */ jsxs(
634
+ SheetPrimitive.Content,
635
+ {
636
+ ref,
637
+ className: cn(
638
+ "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-[var(--bg-primary)] text-[var(--text-primary)] border-[var(--border-tertiary)] shadow-lg p-6 duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
639
+ className
640
+ ),
641
+ ...props,
642
+ children: [
643
+ children,
644
+ /* @__PURE__ */ jsxs(SheetPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-[var(--bg-primary)] transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-[var(--border-brand)] focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-[var(--bg-secondary)] data-[state=open]:text-[var(--text-tertiary)]", children: [
645
+ /* @__PURE__ */ jsx(IconX, { className: "h-4 w-4", stroke: 1.5 }),
646
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
647
+ ] })
648
+ ]
649
+ }
650
+ )
651
+ ] }));
652
+ DialogContent.displayName = SheetPrimitive.Content.displayName;
653
+ var DialogTitle = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
654
+ SheetPrimitive.Title,
655
+ {
656
+ ref,
657
+ className: cn(
658
+ "text-lg font-semibold leading-none tracking-tight text-[var(--text-primary)]",
659
+ className
660
+ ),
661
+ ...props
662
+ }
663
+ ));
664
+ DialogTitle.displayName = SheetPrimitive.Title.displayName;
665
+ var DialogDescription = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
666
+ SheetPrimitive.Description,
667
+ {
668
+ ref,
669
+ className: cn("text-sm text-[var(--text-tertiary)]", className),
670
+ ...props
671
+ }
672
+ ));
673
+ DialogDescription.displayName = SheetPrimitive.Description.displayName;
674
+ var Command = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
675
+ Command$1,
676
+ {
677
+ ref,
678
+ className: cn(
679
+ "flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",
680
+ className
681
+ ),
682
+ ...props
683
+ }
684
+ ));
685
+ Command.displayName = Command$1.displayName;
686
+ var CommandDialog = ({ children, ...props }) => {
687
+ return /* @__PURE__ */ jsx(Dialog, { ...props, children: /* @__PURE__ */ jsx(DialogContent, { className: "overflow-hidden p-0", children: /* @__PURE__ */ jsx(Command, { className: "[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5", children }) }) });
688
+ };
689
+ var CommandInput = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs("div", { className: "flex items-center border-b px-3", "cmdk-input-wrapper": "", children: [
690
+ /* @__PURE__ */ jsx(IconSearch, { size: 16, stroke: 1.5, className: "mr-2 shrink-0 opacity-50" }),
691
+ /* @__PURE__ */ jsx(
692
+ Command$1.Input,
693
+ {
694
+ ref,
695
+ className: cn(
696
+ "flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
697
+ className
698
+ ),
699
+ ...props
700
+ }
701
+ )
702
+ ] }));
703
+ CommandInput.displayName = Command$1.Input.displayName;
704
+ var CommandList = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
705
+ Command$1.List,
706
+ {
707
+ ref,
708
+ className: cn("max-h-[300px] overflow-y-auto overflow-x-hidden", className),
709
+ ...props
710
+ }
711
+ ));
712
+ CommandList.displayName = Command$1.List.displayName;
713
+ var CommandEmpty = React2.forwardRef((props, ref) => /* @__PURE__ */ jsx(
714
+ Command$1.Empty,
715
+ {
716
+ ref,
717
+ className: "py-6 text-center text-sm",
718
+ ...props
719
+ }
720
+ ));
721
+ CommandEmpty.displayName = Command$1.Empty.displayName;
722
+ var CommandGroup = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
723
+ Command$1.Group,
724
+ {
725
+ ref,
726
+ className: cn(
727
+ "overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",
728
+ className
729
+ ),
730
+ ...props
731
+ }
732
+ ));
733
+ CommandGroup.displayName = Command$1.Group.displayName;
734
+ var CommandSeparator = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
735
+ Command$1.Separator,
736
+ {
737
+ ref,
738
+ className: cn("-mx-1 h-px bg-border", className),
739
+ ...props
740
+ }
741
+ ));
742
+ CommandSeparator.displayName = Command$1.Separator.displayName;
743
+ var CommandItem = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
744
+ Command$1.Item,
745
+ {
746
+ ref,
747
+ className: cn(
748
+ "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
749
+ className
750
+ ),
751
+ ...props
752
+ }
753
+ ));
754
+ CommandItem.displayName = Command$1.Item.displayName;
755
+ var CommandShortcut = ({
756
+ className,
757
+ ...props
758
+ }) => {
759
+ return /* @__PURE__ */ jsx(
760
+ "span",
761
+ {
762
+ className: cn(
763
+ "ml-auto text-xs tracking-widest text-muted-foreground",
764
+ className
765
+ ),
766
+ ...props
767
+ }
768
+ );
769
+ };
770
+ CommandShortcut.displayName = "CommandShortcut";
771
+ var Collapsible = CollapsiblePrimitive.Root;
772
+ var CollapsibleTrigger2 = CollapsiblePrimitive.CollapsibleTrigger;
773
+ var CollapsibleContent2 = CollapsiblePrimitive.CollapsibleContent;
774
+ var ContextMenu = ContextMenuPrimitive.Root;
775
+ var ContextMenuTrigger = ContextMenuPrimitive.Trigger;
776
+ var ContextMenuGroup = ContextMenuPrimitive.Group;
777
+ var ContextMenuPortal = ContextMenuPrimitive.Portal;
778
+ var ContextMenuSub = ContextMenuPrimitive.Sub;
779
+ var ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup;
780
+ var ContextMenuSubTrigger = React2.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
781
+ ContextMenuPrimitive.SubTrigger,
782
+ {
783
+ ref,
784
+ className: cn(
785
+ "flex cursor-default select-none items-center rounded-sm px-2 py-2.5 text-sm outline-none data-[state=open]:bg-[var(--dropdown-item-bg-hover)] data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
786
+ "text-[var(--dropdown-item-text)] focus:bg-[var(--dropdown-item-bg-focus)] focus:text-[var(--dropdown-item-text-focus)] hover:bg-[var(--dropdown-item-bg-hover)] hover:text-[var(--dropdown-item-text-hover)]",
787
+ inset && "pl-8",
788
+ className
789
+ ),
790
+ ...props,
791
+ children: [
792
+ children,
793
+ /* @__PURE__ */ jsx(IconChevronRight, { className: "ml-auto h-4 w-4 text-[var(--text-tertiary)]" })
794
+ ]
795
+ }
796
+ ));
797
+ ContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName;
798
+ var ContextMenuSubContent = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
799
+ ContextMenuPrimitive.SubContent,
800
+ {
801
+ ref,
802
+ className: cn(
803
+ "z-50 min-w-[8rem] overflow-hidden rounded-md border shadow-lg animate-in data-[side=bottom]:slide-in-from-top-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 data-[side=top]:slide-in-from-bottom-1 py-1 px-2",
804
+ "bg-[var(--dropdown-bg)] text-[var(--dropdown-text)] border-[var(--dropdown-border)] shadow-[var(--dropdown-shadow)]",
805
+ className
806
+ ),
807
+ ...props
808
+ }
809
+ ));
810
+ ContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName;
811
+ var ContextMenuContent = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(ContextMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
812
+ ContextMenuPrimitive.Content,
813
+ {
814
+ ref,
815
+ className: cn(
816
+ "z-50 min-w-[8rem] overflow-hidden rounded-md border shadow-md animate-in fade-in-80 px-1",
817
+ "bg-[var(--dropdown-bg)] text-[var(--dropdown-text)] border-[var(--dropdown-border)]",
818
+ "shadow-[var(--dropdown-shadow)]",
819
+ className
820
+ ),
821
+ ...props
822
+ }
823
+ ) }));
824
+ ContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName;
825
+ var ContextMenuItem = React2.forwardRef(({ className, inset, color, leftIcon, rightIcon, children, ...props }, ref) => {
826
+ const baseClasses = cn(
827
+ "relative flex cursor-default select-none items-center rounded-sm px-2 py-2.5 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
828
+ "text-[var(--dropdown-item-text)]",
829
+ "focus:bg-[var(--dropdown-item-bg-focus)] focus:text-[var(--dropdown-item-text-focus)]",
830
+ "hover:bg-[var(--dropdown-item-bg-hover)] hover:text-[var(--dropdown-item-text-hover)]",
831
+ inset && "pl-8"
832
+ );
833
+ const colorVariantClasses = {
834
+ brand: "focus:bg-[var(--dropdown-item-bg-brand-focus)] focus:text-[var(--dropdown-item-text-brand-focus)] hover:bg-[var(--dropdown-item-bg-brand-hover)] hover:text-[var(--dropdown-item-text-brand-hover)]",
835
+ error: "focus:bg-[var(--dropdown-item-bg-error-focus)] focus:text-[var(--dropdown-item-text-error-focus)] hover:bg-[var(--dropdown-item-bg-error-hover)] hover:text-[var(--dropdown-item-text-error-hover)]",
836
+ warning: "focus:bg-[var(--dropdown-item-bg-warning-focus)] focus:text-[var(--dropdown-item-text-warning-focus)] hover:bg-[var(--dropdown-item-bg-warning-hover)] hover:text-[var(--dropdown-item-text-warning-hover)]",
837
+ success: "focus:bg-[var(--dropdown-item-bg-success-focus)] focus:text-[var(--dropdown-item-text-success-focus)] hover:bg-[var(--dropdown-item-bg-success-hover)] hover:text-[var(--dropdown-item-text-success-hover)]"
838
+ };
839
+ return /* @__PURE__ */ jsxs(
840
+ ContextMenuPrimitive.Item,
841
+ {
842
+ ref,
843
+ className: cn(
844
+ baseClasses,
845
+ color && colorVariantClasses[color],
846
+ className
847
+ ),
848
+ ...props,
849
+ children: [
850
+ leftIcon && /* @__PURE__ */ jsx("span", { className: cn("mr-2 h-4 w-4 flex items-center justify-center text-[var(--text-tertiary)]", { "ml-auto": !children && rightIcon }), children: leftIcon }),
851
+ children,
852
+ rightIcon && /* @__PURE__ */ jsx("span", { className: "ml-auto pl-2 text-[var(--text-tertiary)] group-hover:text-current", children: rightIcon })
853
+ ]
854
+ }
855
+ );
856
+ });
857
+ ContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName;
858
+ var ContextMenuCheckboxItem = React2.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
859
+ ContextMenuPrimitive.CheckboxItem,
860
+ {
861
+ ref,
862
+ className: cn(
863
+ "relative flex cursor-default select-none items-center rounded-sm py-2.5 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
864
+ "text-[var(--dropdown-item-text)] focus:bg-[var(--dropdown-item-bg-focus)] focus:text-[var(--dropdown-item-text-focus)] hover:bg-[var(--dropdown-item-bg-hover)] hover:text-[var(--dropdown-item-text-hover)]",
865
+ className
866
+ ),
867
+ checked,
868
+ ...props,
869
+ children: [
870
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(IconCheck, { className: "h-4 w-4 text-[var(--text-tertiary)]", strokeWidth: 2 }) }) }),
871
+ children
872
+ ]
873
+ }
874
+ ));
875
+ ContextMenuCheckboxItem.displayName = ContextMenuPrimitive.CheckboxItem.displayName;
876
+ var ContextMenuRadioItem = React2.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
877
+ ContextMenuPrimitive.RadioItem,
878
+ {
879
+ ref,
880
+ className: cn(
881
+ "relative flex cursor-default select-none items-center rounded-sm py-2.5 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
882
+ "text-[var(--dropdown-item-text)] focus:bg-[var(--dropdown-item-bg-focus)] focus:text-[var(--dropdown-item-text-focus)] hover:bg-[var(--dropdown-item-bg-hover)] hover:text-[var(--dropdown-item-text-hover)]",
883
+ className
884
+ ),
885
+ ...props,
886
+ children: [
887
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(IconPointFilled, { className: "h-3 w-3 fill-current text-[var(--text-tertiary)]" }) }) }),
888
+ children
889
+ ]
890
+ }
891
+ ));
892
+ ContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName;
893
+ var ContextMenuLabel = React2.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
894
+ ContextMenuPrimitive.Label,
895
+ {
896
+ ref,
897
+ className: cn(
898
+ "py-1.5 pr-2 text-sm font-normal text-[var(--text-tertiary)] mb-1",
899
+ inset ? "pl-8" : "pl-2",
900
+ className
901
+ ),
902
+ ...props
903
+ }
904
+ ));
905
+ ContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName;
906
+ var ContextMenuSeparator = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
907
+ ContextMenuPrimitive.Separator,
908
+ {
909
+ ref,
910
+ className: cn("-mx-1 my-1 h-px bg-[var(--dropdown-separator-bg)]", className),
911
+ ...props
912
+ }
913
+ ));
914
+ ContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName;
915
+ var ContextMenuShortcut = ({
916
+ className,
917
+ ...props
918
+ }) => {
919
+ return /* @__PURE__ */ jsx(
920
+ "span",
921
+ {
922
+ className: cn("ml-auto text-xs tracking-widest opacity-60 text-[var(--text-tertiary)]", className),
923
+ ...props
924
+ }
925
+ );
926
+ };
927
+ ContextMenuShortcut.displayName = "ContextMenuShortcut";
928
+ var EmailButton = ({
929
+ variant = "primary",
930
+ size = "md",
931
+ children,
932
+ href,
933
+ style,
934
+ fullWidth = false,
935
+ ...props
936
+ }) => {
937
+ const getVariantStyles = () => {
938
+ switch (variant) {
939
+ case "primary":
940
+ return {
941
+ backgroundColor: "#4A49A6",
942
+ color: "#ffffff",
943
+ border: "1px solid #4A49A6"
944
+ };
945
+ case "secondary":
946
+ return {
947
+ backgroundColor: "#f8f9fa",
948
+ color: "#4A49A6",
949
+ border: "1px solid #dee2e6"
950
+ };
951
+ case "ghost":
952
+ return {
953
+ backgroundColor: "transparent",
954
+ color: "#4A49A6",
955
+ border: "1px solid transparent"
956
+ };
957
+ case "outline":
958
+ return {
959
+ backgroundColor: "transparent",
960
+ color: "#4A49A6",
961
+ border: "1px solid #4A49A6"
962
+ };
963
+ case "destructive":
964
+ return {
965
+ backgroundColor: "#dc3545",
966
+ color: "#ffffff",
967
+ border: "1px solid #dc3545"
968
+ };
969
+ default:
970
+ return {
971
+ backgroundColor: "#4A49A6",
972
+ color: "#ffffff",
973
+ border: "1px solid #4A49A6"
974
+ };
975
+ }
976
+ };
977
+ const getSizeStyles = () => {
978
+ switch (size) {
979
+ case "sm":
980
+ return {
981
+ padding: "6px 12px",
982
+ fontSize: "12px",
983
+ borderRadius: "4px"
984
+ };
985
+ case "lg":
986
+ return {
987
+ padding: "12px 24px",
988
+ fontSize: "16px",
989
+ borderRadius: "6px"
990
+ };
991
+ default:
992
+ return {
993
+ padding: "8px 16px",
994
+ fontSize: "14px",
995
+ borderRadius: "4px"
996
+ };
997
+ }
998
+ };
999
+ const baseStyles = {
1000
+ display: "inline-block",
1001
+ textDecoration: "none",
1002
+ textAlign: "center",
1003
+ fontWeight: "500",
1004
+ cursor: "pointer",
1005
+ width: fullWidth ? "100%" : "auto",
1006
+ ...getVariantStyles(),
1007
+ ...getSizeStyles(),
1008
+ ...style
1009
+ };
1010
+ if (href) {
1011
+ return /* @__PURE__ */ jsx("a", { href, style: baseStyles, ...props, children });
1012
+ }
1013
+ return /* @__PURE__ */ jsx("button", { style: baseStyles, ...props, children });
1014
+ };
1015
+ var EmailText = ({
1016
+ children,
1017
+ variant = "body",
1018
+ style
1019
+ }) => {
1020
+ const getVariantStyles = () => {
1021
+ switch (variant) {
1022
+ case "heading":
1023
+ return {
1024
+ fontSize: "24px",
1025
+ fontWeight: "bold",
1026
+ color: "#1A1A1E",
1027
+ margin: "0 0 16px 0",
1028
+ lineHeight: "1.2"
1029
+ };
1030
+ case "lead":
1031
+ return {
1032
+ fontSize: "16px",
1033
+ color: "#1A1A1E",
1034
+ margin: "0 0 12px 0",
1035
+ lineHeight: "1.5"
1036
+ };
1037
+ case "caption":
1038
+ return {
1039
+ fontSize: "12px",
1040
+ color: "#6B7280",
1041
+ margin: "0 0 8px 0",
1042
+ lineHeight: "1.4"
1043
+ };
1044
+ case "muted":
1045
+ return {
1046
+ fontSize: "14px",
1047
+ color: "#6B7280",
1048
+ margin: "0 0 12px 0",
1049
+ lineHeight: "1.5"
1050
+ };
1051
+ default:
1052
+ return {
1053
+ fontSize: "14px",
1054
+ color: "#1A1A1E",
1055
+ margin: "0 0 12px 0",
1056
+ lineHeight: "1.5"
1057
+ };
1058
+ }
1059
+ };
1060
+ return /* @__PURE__ */ jsx("div", { style: { ...getVariantStyles(), ...style }, children });
1061
+ };
1062
+ var EmailHeading = (props) => /* @__PURE__ */ jsx(EmailText, { variant: "heading", ...props });
1063
+ var EmailCaption = (props) => /* @__PURE__ */ jsx(EmailText, { variant: "caption", ...props });
1064
+ var EmailMuted = (props) => /* @__PURE__ */ jsx(EmailText, { variant: "muted", ...props });
1065
+ var EmailLayout = ({
1066
+ children,
1067
+ preheader
1068
+ }) => /* @__PURE__ */ jsxs(Fragment, { children: [
1069
+ preheader && /* @__PURE__ */ jsx("div", { style: {
1070
+ color: "transparent",
1071
+ display: "none",
1072
+ height: "0",
1073
+ maxHeight: "0",
1074
+ maxWidth: "0",
1075
+ opacity: "0",
1076
+ overflow: "hidden",
1077
+ visibility: "hidden",
1078
+ width: "0"
1079
+ }, children: preheader }),
1080
+ /* @__PURE__ */ jsx("div", { style: {
1081
+ backgroundColor: "#F4F4F5",
1082
+ fontFamily: "Helvetica-Neue, Helvetica, Arial, sans-serif",
1083
+ fontSize: "16px",
1084
+ lineHeight: "1.3",
1085
+ margin: "0",
1086
+ padding: "0"
1087
+ }, children })
1088
+ ] });
1089
+ var EmailContainer = ({
1090
+ children,
1091
+ style
1092
+ }) => /* @__PURE__ */ jsx("div", { style: {
1093
+ maxWidth: "600px",
1094
+ margin: "0 auto",
1095
+ padding: "24px",
1096
+ backgroundColor: "#ffffff",
1097
+ border: "1px solid #eaebed",
1098
+ borderRadius: "16px",
1099
+ ...style
1100
+ }, children });
1101
+ var EmailHeader = ({
1102
+ logoUrl = "http://cdn.mcauto-images-production.sendgrid.net/a704493bc4576a45/e4e1b526-0ef3-4511-a7a8-bc94353e9b3b/201x67.png",
1103
+ logoAlt = "Float",
1104
+ logoWidth = "100px",
1105
+ logoHeight = "auto"
1106
+ }) => {
1107
+ return /* @__PURE__ */ jsx("div", { style: {
1108
+ width: "100px",
1109
+ textAlign: "center",
1110
+ marginBottom: "24px"
1111
+ }, children: /* @__PURE__ */ jsx("a", { href: "https://float.tech", style: {
1112
+ color: "#4A49A6",
1113
+ fontWeight: "bold",
1114
+ textDecoration: "none"
1115
+ }, children: /* @__PURE__ */ jsx(
1116
+ "img",
1117
+ {
1118
+ src: logoUrl,
1119
+ alt: logoAlt,
1120
+ width: logoWidth,
1121
+ height: logoHeight,
1122
+ style: {
1123
+ display: "block",
1124
+ margin: "0 auto",
1125
+ border: "0",
1126
+ outline: "none",
1127
+ textDecoration: "none",
1128
+ height: "auto",
1129
+ maxWidth: "200px",
1130
+ width: "100%"
1131
+ }
1132
+ }
1133
+ ) }) });
1134
+ };
1135
+ var EmailFooter = ({ children }) => /* @__PURE__ */ jsx("div", { style: {
1136
+ clear: "both",
1137
+ paddingTop: "24px",
1138
+ textAlign: "center",
1139
+ width: "100%"
1140
+ }, children: children || /* @__PURE__ */ jsxs(Fragment, { children: [
1141
+ /* @__PURE__ */ jsxs("p", { style: {
1142
+ color: "#9a9ea6",
1143
+ fontFamily: "Helvetica-Neue, Helvetica, Arial, sans-serif",
1144
+ fontSize: "14px",
1145
+ fontWeight: "normal",
1146
+ margin: "0",
1147
+ marginBottom: "16px",
1148
+ paddingBottom: "0px",
1149
+ textAlign: "center"
1150
+ }, children: [
1151
+ "Float helps financial institutions interact seamlessly through shared digital workflows and standardized APIs across the transaction lifecycle.",
1152
+ " ",
1153
+ /* @__PURE__ */ jsx("a", { href: "https://float.tech", style: {
1154
+ color: "#4A49A6",
1155
+ fontSize: "14px",
1156
+ fontWeight: "bold",
1157
+ paddingBottom: "0px",
1158
+ textAlign: "center",
1159
+ textDecoration: "underline"
1160
+ }, children: "Learn more" }),
1161
+ "."
1162
+ ] }),
1163
+ /* @__PURE__ */ jsx("a", { href: "https://float.tech", style: {
1164
+ color: "#4A49A6",
1165
+ fontSize: "14px",
1166
+ fontWeight: "bold",
1167
+ paddingBottom: "0px",
1168
+ textAlign: "center",
1169
+ textDecoration: "underline"
1170
+ }, children: /* @__PURE__ */ jsx(
1171
+ "img",
1172
+ {
1173
+ src: "http://cdn.mcauto-images-production.sendgrid.net/a704493bc4576a45/6a3db2b3-d35b-423f-8aac-830de81fb114/32x32.png",
1174
+ alt: "Float Logo",
1175
+ width: "32",
1176
+ height: "32",
1177
+ style: {
1178
+ display: "inline-block",
1179
+ marginBottom: "16px"
1180
+ }
1181
+ }
1182
+ ) }),
1183
+ /* @__PURE__ */ jsxs("div", { style: {
1184
+ color: "#9a9ea6",
1185
+ fontFamily: "Helvetica-Neue, Helvetica, Arial, sans-serif",
1186
+ fontSize: "14px",
1187
+ paddingBottom: "0px"
1188
+ }, children: [
1189
+ /* @__PURE__ */ jsx("div", { children: "Float Technologies Inc." }),
1190
+ /* @__PURE__ */ jsx("div", { children: "SoHo, New York" })
1191
+ ] })
1192
+ ] }) });
1193
+
1194
+ // src/tokens/colors.ts
1195
+ var colors = {
1196
+ // Base colors
1197
+ brand: {
1198
+ 25: "hsl(var(--brand-25))",
1199
+ 50: "hsl(var(--brand-50))",
1200
+ 100: "hsl(var(--brand-100))",
1201
+ 200: "hsl(var(--brand-200))",
1202
+ 300: "hsl(var(--brand-300))",
1203
+ 400: "hsl(var(--brand-400))",
1204
+ 500: "hsl(var(--brand-500))",
1205
+ 600: "hsl(var(--brand-600))",
1206
+ 700: "hsl(var(--brand-700))",
1207
+ 800: "hsl(var(--brand-800))",
1208
+ 900: "hsl(var(--brand-900))",
1209
+ 950: "hsl(var(--brand-950))"
1210
+ },
1211
+ error: {
1212
+ 25: "hsl(var(--error-25))",
1213
+ 50: "hsl(var(--error-50))",
1214
+ 100: "hsl(var(--error-100))",
1215
+ 200: "hsl(var(--error-200))",
1216
+ 300: "hsl(var(--error-300))",
1217
+ 400: "hsl(var(--error-400))",
1218
+ 500: "hsl(var(--error-500))",
1219
+ 600: "hsl(var(--error-600))",
1220
+ 700: "hsl(var(--error-700))",
1221
+ 800: "hsl(var(--error-800))",
1222
+ 900: "hsl(var(--error-900))",
1223
+ 950: "hsl(var(--error-950))"
1224
+ },
1225
+ warning: {
1226
+ 25: "hsl(var(--warning-25))",
1227
+ 50: "hsl(var(--warning-50))",
1228
+ 100: "hsl(var(--warning-100))",
1229
+ 200: "hsl(var(--warning-200))",
1230
+ 300: "hsl(var(--warning-300))",
1231
+ 400: "hsl(var(--warning-400))",
1232
+ 500: "hsl(var(--warning-500))",
1233
+ 600: "hsl(var(--warning-600))",
1234
+ 700: "hsl(var(--warning-700))",
1235
+ 800: "hsl(var(--warning-800))",
1236
+ 900: "hsl(var(--warning-900))",
1237
+ 950: "hsl(var(--warning-950))"
1238
+ },
1239
+ success: {
1240
+ 25: "hsl(var(--success-25))",
1241
+ 50: "hsl(var(--success-50))",
1242
+ 100: "hsl(var(--success-100))",
1243
+ 200: "hsl(var(--success-200))",
1244
+ 300: "hsl(var(--success-300))",
1245
+ 400: "hsl(var(--success-400))",
1246
+ 500: "hsl(var(--success-500))",
1247
+ 600: "hsl(var(--success-600))",
1248
+ 700: "hsl(var(--success-700))",
1249
+ 800: "hsl(var(--success-800))",
1250
+ 900: "hsl(var(--success-900))",
1251
+ 950: "hsl(var(--success-950))"
1252
+ },
1253
+ gray: {
1254
+ 25: "hsl(var(--gray-25))",
1255
+ 50: "hsl(var(--gray-50))",
1256
+ 100: "hsl(var(--gray-100))",
1257
+ 200: "hsl(var(--gray-200))",
1258
+ 300: "hsl(var(--gray-300))",
1259
+ 400: "hsl(var(--gray-400))",
1260
+ 500: "hsl(var(--gray-500))",
1261
+ 600: "hsl(var(--gray-600))",
1262
+ 700: "hsl(var(--gray-700))",
1263
+ 800: "hsl(var(--gray-800))",
1264
+ 900: "hsl(var(--gray-900))",
1265
+ 950: "hsl(var(--gray-950))"
1266
+ },
1267
+ // Semantic tokens
1268
+ text: {
1269
+ primary: "hsl(var(--foreground))",
1270
+ secondary: "hsl(var(--muted-foreground))",
1271
+ tertiary: "hsl(var(--muted-foreground))",
1272
+ disabled: "hsl(var(--muted-foreground))",
1273
+ brand: "hsl(var(--brand-700))",
1274
+ "on-brand": "hsl(var(--brand-50))",
1275
+ error: "hsl(var(--error-600))",
1276
+ warning: "hsl(var(--warning-600))",
1277
+ success: "hsl(var(--success-600))"
1278
+ },
1279
+ background: {
1280
+ primary: "hsl(var(--background))",
1281
+ secondary: "hsl(var(--secondary))",
1282
+ tertiary: "hsl(var(--muted))",
1283
+ brand: "hsl(var(--brand-50))",
1284
+ error: "hsl(var(--error-50))",
1285
+ warning: "hsl(var(--warning-50))",
1286
+ success: "hsl(var(--success-50))",
1287
+ card: "hsl(var(--card))"
1288
+ },
1289
+ border: {
1290
+ primary: "hsl(var(--border))",
1291
+ secondary: "hsl(var(--input))",
1292
+ tertiary: "hsl(var(--accent))",
1293
+ brand: "hsl(var(--brand-300))",
1294
+ error: "hsl(var(--error-300))",
1295
+ warning: "hsl(var(--warning-300))",
1296
+ success: "hsl(var(--success-300))"
1297
+ },
1298
+ focus: {
1299
+ ring: "hsl(var(--ring))",
1300
+ brand: "hsl(var(--brand-500))",
1301
+ error: "hsl(var(--error-500))",
1302
+ warning: "hsl(var(--warning-500))",
1303
+ success: "hsl(var(--success-500))"
1304
+ },
1305
+ // Component-specific
1306
+ button: {
1307
+ primary: {
1308
+ bg: "hsl(var(--brand-600))",
1309
+ text: "white",
1310
+ hover: "hsl(var(--brand-700))",
1311
+ focus: "hsl(var(--brand-500))"
1312
+ },
1313
+ secondary: {
1314
+ bg: "transparent",
1315
+ text: "hsl(var(--brand-700))",
1316
+ border: "hsl(var(--brand-300))",
1317
+ hover: "hsl(var(--brand-50))",
1318
+ focus: "hsl(var(--brand-500))"
1319
+ },
1320
+ tertiary: {
1321
+ bg: "transparent",
1322
+ text: "hsl(var(--brand-700))",
1323
+ hover: "hsl(var(--brand-50))",
1324
+ focus: "hsl(var(--brand-500))"
1325
+ }
1326
+ }
1327
+ };
1328
+
1329
+ // src/tokens/typography.ts
1330
+ var typography = {
1331
+ fontFamily: {
1332
+ sans: ["var(--font-inter)", "sans-serif"]
1333
+ },
1334
+ fontWeight: {
1335
+ regular: "400",
1336
+ medium: "500",
1337
+ semibold: "600",
1338
+ bold: "700"
1339
+ },
1340
+ fontSize: {
1341
+ // Display sizes
1342
+ "display-2xl": ["4.5rem", { lineHeight: "5.625rem", letterSpacing: "-0.02em" }],
1343
+ "display-xl": ["3.75rem", { lineHeight: "4.5rem", letterSpacing: "-0.02em" }],
1344
+ "display-lg": ["3rem", { lineHeight: "3.75rem", letterSpacing: "-0.02em" }],
1345
+ "display-md": ["2.25rem", { lineHeight: "2.75rem", letterSpacing: "-0.02em" }],
1346
+ "display-sm": ["1.875rem", { lineHeight: "2.375rem", letterSpacing: "-0.02em" }],
1347
+ "display-xs": ["1.5rem", { lineHeight: "2rem", letterSpacing: "-0.02em" }],
1348
+ // Text sizes
1349
+ "text-xl": ["1.25rem", { lineHeight: "1.875rem" }],
1350
+ "text-lg": ["1.125rem", { lineHeight: "1.75rem" }],
1351
+ "text-md": ["1rem", { lineHeight: "1.5rem" }],
1352
+ "text-sm": ["0.875rem", { lineHeight: "1.25rem" }],
1353
+ "text-xs": ["0.75rem", { lineHeight: "1.125rem" }]
1354
+ },
1355
+ // Predefined style combinations
1356
+ styles: {
1357
+ h1: "text-display-md font-bold",
1358
+ h2: "text-display-sm font-bold",
1359
+ h3: "text-display-xs font-bold",
1360
+ h4: "text-text-xl font-semibold",
1361
+ h5: "text-text-lg font-semibold",
1362
+ h6: "text-text-md font-semibold",
1363
+ // Body text
1364
+ body: "text-text-md font-regular",
1365
+ "body-large": "text-text-lg font-regular",
1366
+ "body-small": "text-text-sm font-regular",
1367
+ // Special styles
1368
+ caption: "text-text-xs font-medium",
1369
+ overline: "text-text-xs font-medium uppercase tracking-wider",
1370
+ label: "text-text-sm font-medium"
1371
+ },
1372
+ // For semantic variants
1373
+ variants: {
1374
+ italic: "italic",
1375
+ underline: "underline"
1376
+ }
1377
+ };
1378
+
1379
+ // src/tokens/spacing.ts
1380
+ var spacing = {
1381
+ // We don't need to redefine the base spacing scale
1382
+ // as we'll use Tailwind's defaults
1383
+ // Semantic spacing that maps to Tailwind's scale
1384
+ layout: {
1385
+ page: "6",
1386
+ // maps to Tailwind's spacing-6 (1.5rem, 24px)
1387
+ section: "8",
1388
+ // maps to Tailwind's spacing-8 (2rem, 32px)
1389
+ subsection: "4",
1390
+ // maps to Tailwind's spacing-4 (1rem, 16px)
1391
+ inline: "2"
1392
+ // maps to Tailwind's spacing-2 (0.5rem, 8px)
1393
+ },
1394
+ // Component-specific spacing that maps to Tailwind's scale
1395
+ component: {
1396
+ xxs: "1",
1397
+ // maps to Tailwind's spacing-1 (0.25rem, 4px)
1398
+ xs: "2",
1399
+ // maps to Tailwind's spacing-2 (0.5rem, 8px)
1400
+ sm: "3",
1401
+ // maps to Tailwind's spacing-3 (0.75rem, 12px)
1402
+ md: "4",
1403
+ // maps to Tailwind's spacing-4 (1rem, 16px)
1404
+ lg: "6",
1405
+ // maps to Tailwind's spacing-6 (1.5rem, 24px)
1406
+ xl: "8",
1407
+ // maps to Tailwind's spacing-8 (2rem, 32px)
1408
+ xxl: "12"
1409
+ // maps to Tailwind's spacing-12 (3rem, 48px)
1410
+ },
1411
+ // Any custom spacing values not in Tailwind's default scale
1412
+ // would be defined here for extending in the Tailwind config
1413
+ custom: {
1414
+ // Example: '4.5': '1.125rem', // 18px
1415
+ }
1416
+ };
1417
+
1418
+ // src/tokens/radius.ts
1419
+ var radius = {
1420
+ // Semantic radius values using CSS variables
1421
+ default: "var(--radius)",
1422
+ card: "var(--radius)",
1423
+ button: "var(--radius)",
1424
+ input: "var(--radius)",
1425
+ badge: "var(--radius)",
1426
+ // Shape variants
1427
+ pill: "9999px",
1428
+ circle: "50%",
1429
+ // Any custom radius values to extend Tailwind's defaults
1430
+ // would be defined here
1431
+ custom: {
1432
+ // Example: 'medium': '0.375rem', // 6px
1433
+ }
1434
+ };
1435
+
1436
+ // src/tokens/shadows.ts
1437
+ var shadows = {
1438
+ // Base shadow values
1439
+ none: "none",
1440
+ xs: "0 1px 2px 0 rgb(0 0 0 / 0.05)",
1441
+ sm: "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",
1442
+ md: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",
1443
+ lg: "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",
1444
+ xl: "0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)",
1445
+ "2xl": "0 25px 50px -12px rgb(0 0 0 / 0.25)",
1446
+ inner: "inset 0 2px 4px 0 rgb(0 0 0 / 0.05)",
1447
+ // Semantic shadow values
1448
+ "elevation-low": "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",
1449
+ "elevation-medium": "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",
1450
+ "elevation-high": "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",
1451
+ // Component specific
1452
+ card: "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",
1453
+ dropdown: "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",
1454
+ modal: "0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)"
1455
+ };
1456
+
1457
+ // src/tokens/index.ts
1458
+ var tokens = {
1459
+ colors,
1460
+ typography,
1461
+ spacing,
1462
+ radius,
1463
+ shadows
1464
+ };
1465
+ function ThemeProvider({
1466
+ children,
1467
+ ...props
1468
+ }) {
1469
+ return /* @__PURE__ */ jsx(
1470
+ ThemeProvider$1,
1471
+ {
1472
+ attribute: "class",
1473
+ defaultTheme: "system",
1474
+ enableSystem: true,
1475
+ disableTransitionOnChange: true,
1476
+ ...props,
1477
+ children
1478
+ }
1479
+ );
1480
+ }
1481
+
1482
+ // src/lib/theme-utils.ts
1483
+ var mapColorToShadcnVariant = (color) => {
1484
+ switch (color) {
1485
+ case "brand":
1486
+ return "default";
1487
+ case "error":
1488
+ return "destructive";
1489
+ case "warning":
1490
+ case "success":
1491
+ return "secondary";
1492
+ // Will need additional classes
1493
+ default:
1494
+ return "default";
1495
+ }
1496
+ };
1497
+ var mapVariantToShadcnVariant = (variant) => {
1498
+ switch (variant) {
1499
+ case "primary":
1500
+ return "default";
1501
+ case "secondary":
1502
+ return "outline";
1503
+ case "tertiary":
1504
+ return "ghost";
1505
+ default:
1506
+ return "default";
1507
+ }
1508
+ };
1509
+ var getColorVariantClasses = (color, variant) => {
1510
+ const colorVariantMap = {
1511
+ primary: {
1512
+ brand: "bg-brand-600 hover:bg-brand-700 text-white focus-visible:ring-brand-500",
1513
+ error: "bg-error-600 hover:bg-error-700 text-white focus-visible:ring-error-500",
1514
+ warning: "bg-warning-600 hover:bg-warning-700 text-white focus-visible:ring-warning-500",
1515
+ success: "bg-success-600 hover:bg-success-700 text-white focus-visible:ring-success-500"
1516
+ },
1517
+ secondary: {
1518
+ brand: "border-brand-300 text-brand-700 hover:bg-brand-50 focus-visible:ring-brand-500",
1519
+ error: "border-error-300 text-error-700 hover:bg-error-50 focus-visible:ring-error-500",
1520
+ warning: "border-warning-300 text-warning-700 hover:bg-warning-50 focus-visible:ring-warning-500",
1521
+ success: "border-success-300 text-success-700 hover:bg-success-50 focus-visible:ring-success-500"
1522
+ },
1523
+ tertiary: {
1524
+ brand: "text-brand-700 hover:bg-brand-50 focus-visible:ring-brand-500",
1525
+ error: "text-error-700 hover:bg-error-50 focus-visible:ring-error-500",
1526
+ warning: "text-warning-700 hover:bg-warning-50 focus-visible:ring-warning-500",
1527
+ success: "text-success-700 hover:bg-success-50 focus-visible:ring-success-500"
1528
+ }
1529
+ };
1530
+ return colorVariantMap[variant]?.[color] || "";
1531
+ };
1532
+ var isDarkTheme = (theme, systemTheme) => {
1533
+ if (theme === "system") {
1534
+ return systemTheme === "dark";
1535
+ }
1536
+ return theme === "dark";
1537
+ };
1538
+ function useTheme() {
1539
+ const { theme, setTheme, resolvedTheme, systemTheme } = useTheme$1();
1540
+ const isDark = isDarkTheme(theme, systemTheme);
1541
+ return {
1542
+ theme: theme || "system",
1543
+ setTheme,
1544
+ resolvedTheme: resolvedTheme || "light",
1545
+ isDark
1546
+ };
1547
+ }
1548
+ function ThemeContextProvider({
1549
+ children
1550
+ }) {
1551
+ return /* @__PURE__ */ jsx(Fragment, { children });
1552
+ }
1553
+ function ThemeToggle({
1554
+ className,
1555
+ variant = "icon",
1556
+ size = "md",
1557
+ ...props
1558
+ }) {
1559
+ const { theme, setTheme, resolvedTheme } = useTheme();
1560
+ const [mounted, setMounted] = React2.useState(false);
1561
+ React2.useEffect(() => {
1562
+ setMounted(true);
1563
+ }, []);
1564
+ if (!mounted) return null;
1565
+ const toggleTheme = () => {
1566
+ setTheme(resolvedTheme === "dark" ? "light" : "dark");
1567
+ };
1568
+ const iconSize = {
1569
+ sm: 16,
1570
+ md: 20,
1571
+ lg: 24
1572
+ };
1573
+ const sizeClasses = {
1574
+ sm: "h-8 w-8",
1575
+ md: "h-10 w-10",
1576
+ lg: "h-12 w-12"
1577
+ };
1578
+ const textSizeClasses = {
1579
+ sm: "text-xs",
1580
+ md: "text-sm",
1581
+ lg: "text-base"
1582
+ };
1583
+ if (variant === "icon") {
1584
+ return /* @__PURE__ */ jsx(
1585
+ "button",
1586
+ {
1587
+ type: "button",
1588
+ onClick: toggleTheme,
1589
+ className: cn(
1590
+ "inline-flex items-center justify-center rounded-md border border-input bg-background hover:bg-accent hover:text-accent-foreground",
1591
+ sizeClasses[size],
1592
+ className
1593
+ ),
1594
+ "aria-label": resolvedTheme === "dark" ? "Switch to light theme" : "Switch to dark theme",
1595
+ ...props,
1596
+ children: resolvedTheme === "dark" ? /* @__PURE__ */ jsx(IconSun, { size: iconSize[size], stroke: 1.5 }) : /* @__PURE__ */ jsx(IconMoon, { size: iconSize[size], stroke: 1.5 })
1597
+ }
1598
+ );
1599
+ }
1600
+ if (variant === "button") {
1601
+ return /* @__PURE__ */ jsx(
1602
+ "button",
1603
+ {
1604
+ type: "button",
1605
+ onClick: toggleTheme,
1606
+ className: cn(
1607
+ "inline-flex items-center justify-center rounded-md border border-input bg-background px-4 py-2",
1608
+ textSizeClasses[size],
1609
+ "hover:bg-accent hover:text-accent-foreground",
1610
+ className
1611
+ ),
1612
+ ...props,
1613
+ children: resolvedTheme === "dark" ? "Light Mode" : "Dark Mode"
1614
+ }
1615
+ );
1616
+ }
1617
+ return /* @__PURE__ */ jsx(
1618
+ "button",
1619
+ {
1620
+ type: "button",
1621
+ onClick: toggleTheme,
1622
+ className: cn(
1623
+ "inline-flex items-center justify-center rounded-md px-3 py-2 font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
1624
+ textSizeClasses[size],
1625
+ resolvedTheme === "dark" ? "bg-accent text-accent-foreground hover:bg-accent/80" : "bg-muted text-muted-foreground hover:bg-muted/80",
1626
+ className
1627
+ ),
1628
+ "aria-label": resolvedTheme === "dark" ? "Switch to light theme" : "Switch to dark theme",
1629
+ ...props,
1630
+ children: resolvedTheme === "dark" ? /* @__PURE__ */ jsxs("span", { className: "flex items-center", children: [
1631
+ /* @__PURE__ */ jsx(IconSun, { size: iconSize[size], stroke: 1.5, className: "mr-2" }),
1632
+ "Light"
1633
+ ] }) : /* @__PURE__ */ jsxs("span", { className: "flex items-center", children: [
1634
+ /* @__PURE__ */ jsx(IconMoon, { size: iconSize[size], stroke: 1.5, className: "mr-2" }),
1635
+ "Dark"
1636
+ ] })
1637
+ }
1638
+ );
1639
+ }
1640
+
1641
+ export { Button, Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DropdownMenu, EmailButton, EmailCaption, EmailContainer, EmailFooter, EmailHeader, EmailHeading, EmailLayout, EmailMuted, EmailText, Heading, HoverCard, HoverCardContent, HoverCardTrigger, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Slider, Text, ThemeContextProvider, ThemeProvider, ThemeToggle, Toggle, ToggleGroup, ToggleGroupItem, buttonVariants, cn, colors, filterDOMProps, generateId, getColorVariantClasses, isDarkTheme, isNotNullOrUndefined, mapColorToShadcnVariant, mapVariantToShadcnVariant, radius, shadows, spacing, tokens, typography, useTheme };
1642
+ //# sourceMappingURL=index.mjs.map
1643
+ //# sourceMappingURL=index.mjs.map