@getgreenline/blaze-ui 1.0.3 → 1.0.4-5.02-beta

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 (258) hide show
  1. package/dist/components/accordion.d.ts +8 -0
  2. package/dist/components/accordion.d.ts.map +1 -0
  3. package/dist/components/accordion.js +19 -0
  4. package/dist/components/alert-dialog.d.ts +18 -0
  5. package/dist/components/alert-dialog.d.ts.map +1 -0
  6. package/dist/components/alert-dialog.js +41 -0
  7. package/dist/components/alert.d.ts +10 -0
  8. package/dist/components/alert.d.ts.map +1 -0
  9. package/dist/components/alert.js +26 -0
  10. package/dist/components/aspect-ratio.d.ts +4 -0
  11. package/dist/components/aspect-ratio.d.ts.map +1 -0
  12. package/dist/components/aspect-ratio.js +8 -0
  13. package/dist/components/avatar.d.ts +7 -0
  14. package/dist/components/avatar.d.ts.map +1 -0
  15. package/dist/components/avatar.js +15 -0
  16. package/dist/components/badge.d.ts +10 -0
  17. package/dist/components/badge.d.ts.map +1 -0
  18. package/dist/components/badge.js +24 -0
  19. package/dist/components/breadcrumb.d.ts +12 -0
  20. package/dist/components/breadcrumb.d.ts.map +1 -0
  21. package/dist/components/breadcrumb.js +29 -0
  22. package/dist/components/button-group.d.ts +12 -0
  23. package/dist/components/button-group.d.ts.map +1 -0
  24. package/dist/components/button-group.js +29 -0
  25. package/dist/components/button.d.ts +16 -0
  26. package/dist/components/button.d.ts.map +1 -0
  27. package/dist/components/button.js +37 -0
  28. package/dist/components/card.d.ts +10 -0
  29. package/dist/components/card.d.ts.map +1 -0
  30. package/dist/components/card.js +26 -0
  31. package/dist/components/carousel.d.ts +20 -0
  32. package/dist/components/carousel.d.ts.map +1 -0
  33. package/dist/components/carousel.js +92 -0
  34. package/dist/components/chart.d.ts +63 -0
  35. package/dist/components/chart.d.ts.map +1 -0
  36. package/dist/components/chart.js +133 -0
  37. package/dist/components/checkbox.d.ts +5 -0
  38. package/dist/components/checkbox.d.ts.map +1 -0
  39. package/dist/components/checkbox.js +10 -0
  40. package/dist/components/collapsible.d.ts +6 -0
  41. package/dist/components/collapsible.d.ts.map +1 -0
  42. package/dist/components/collapsible.js +15 -0
  43. package/dist/components/command.d.ts +19 -0
  44. package/dist/components/command.d.ts.map +1 -0
  45. package/dist/components/command.js +35 -0
  46. package/dist/components/context-menu.d.ts +26 -0
  47. package/dist/components/context-menu.d.ts.map +1 -0
  48. package/dist/components/context-menu.js +52 -0
  49. package/dist/components/data-table.d.ts +85 -0
  50. package/dist/components/data-table.d.ts.map +1 -0
  51. package/dist/components/data-table.js +390 -0
  52. package/dist/components/dialog.d.ts +16 -0
  53. package/dist/components/dialog.d.ts.map +1 -0
  54. package/dist/components/dialog.js +37 -0
  55. package/dist/components/drawer.d.ts +14 -0
  56. package/dist/components/drawer.d.ts.map +1 -0
  57. package/dist/components/drawer.js +36 -0
  58. package/dist/components/dropdown-menu.d.ts +26 -0
  59. package/dist/components/dropdown-menu.d.ts.map +1 -0
  60. package/dist/components/dropdown-menu.js +52 -0
  61. package/dist/components/empty.d.ts +12 -0
  62. package/dist/components/empty.d.ts.map +1 -0
  63. package/dist/components/empty.js +35 -0
  64. package/dist/components/field.d.ts +25 -0
  65. package/dist/components/field.d.ts.map +1 -0
  66. package/dist/components/field.js +74 -0
  67. package/dist/components/form.d.ts +25 -0
  68. package/dist/components/form.d.ts.map +1 -0
  69. package/dist/components/form.js +60 -0
  70. package/dist/components/header-app-switcher.d.ts +53 -0
  71. package/dist/components/header-app-switcher.d.ts.map +1 -0
  72. package/dist/components/header-app-switcher.js +154 -0
  73. package/dist/components/hierarchical-select.d.ts +31 -0
  74. package/dist/components/hierarchical-select.d.ts.map +1 -0
  75. package/dist/components/hierarchical-select.js +143 -0
  76. package/dist/components/hover-card.d.ts +7 -0
  77. package/dist/components/hover-card.d.ts.map +1 -0
  78. package/dist/components/hover-card.js +15 -0
  79. package/dist/components/input-group.d.ts +17 -0
  80. package/dist/components/input-group.d.ts.map +1 -0
  81. package/dist/components/input-group.js +66 -0
  82. package/dist/components/input-otp.d.ts +12 -0
  83. package/dist/components/input-otp.d.ts.map +1 -0
  84. package/dist/components/input-otp.js +22 -0
  85. package/dist/components/input.d.ts +8 -0
  86. package/dist/components/input.d.ts.map +1 -0
  87. package/dist/components/input.js +15 -0
  88. package/dist/components/item.d.ts +24 -0
  89. package/dist/components/item.d.ts.map +1 -0
  90. package/dist/components/item.js +68 -0
  91. package/dist/components/kbd.d.ts +4 -0
  92. package/dist/components/kbd.d.ts.map +1 -0
  93. package/dist/components/kbd.js +11 -0
  94. package/dist/components/label.d.ts +8 -0
  95. package/dist/components/label.d.ts.map +1 -0
  96. package/dist/components/label.js +9 -0
  97. package/dist/components/login-screen.d.ts +4 -0
  98. package/dist/components/login-screen.d.ts.map +1 -0
  99. package/dist/components/login-screen.js +300 -0
  100. package/dist/components/login-screen.types.d.ts +82 -0
  101. package/dist/components/login-screen.types.d.ts.map +1 -0
  102. package/dist/components/login-screen.views.d.ts +114 -0
  103. package/dist/components/login-screen.views.d.ts.map +1 -0
  104. package/dist/components/login-screen.views.js +53 -0
  105. package/dist/components/menubar.d.ts +27 -0
  106. package/dist/components/menubar.d.ts.map +1 -0
  107. package/dist/components/menubar.js +55 -0
  108. package/dist/components/multi-search-select.d.ts +24 -0
  109. package/dist/components/multi-search-select.d.ts.map +1 -0
  110. package/dist/components/multi-search-select.js +125 -0
  111. package/dist/components/multi-select.d.ts +19 -0
  112. package/dist/components/multi-select.d.ts.map +1 -0
  113. package/dist/components/multi-select.js +87 -0
  114. package/dist/components/navigation-menu.d.ts +15 -0
  115. package/dist/components/navigation-menu.d.ts.map +1 -0
  116. package/dist/components/navigation-menu.js +33 -0
  117. package/dist/components/page-header/actions.d.ts +9 -0
  118. package/dist/components/page-header/actions.d.ts.map +1 -0
  119. package/dist/components/page-header/actions.js +21 -0
  120. package/dist/components/page-header/types.d.ts +33 -0
  121. package/dist/components/page-header/types.d.ts.map +1 -0
  122. package/dist/components/page-header/utils.d.ts +4 -0
  123. package/dist/components/page-header/utils.d.ts.map +1 -0
  124. package/dist/components/page-header/utils.js +17 -0
  125. package/dist/components/page-header.d.ts +4 -0
  126. package/dist/components/page-header.d.ts.map +1 -0
  127. package/dist/components/page-header.js +12 -0
  128. package/dist/components/pagination.d.ts +14 -0
  129. package/dist/components/pagination.d.ts.map +1 -0
  130. package/dist/components/pagination.js +31 -0
  131. package/dist/components/popover.d.ts +8 -0
  132. package/dist/components/popover.d.ts.map +1 -0
  133. package/dist/components/popover.js +18 -0
  134. package/dist/components/progress.d.ts +5 -0
  135. package/dist/components/progress.d.ts.map +1 -0
  136. package/dist/components/progress.js +9 -0
  137. package/dist/components/radio-group.d.ts +6 -0
  138. package/dist/components/radio-group.d.ts.map +1 -0
  139. package/dist/components/radio-group.js +13 -0
  140. package/dist/components/resizable.d.ts +9 -0
  141. package/dist/components/resizable.d.ts.map +1 -0
  142. package/dist/components/resizable.js +16 -0
  143. package/dist/components/scroll-area.d.ts +6 -0
  144. package/dist/components/scroll-area.d.ts.map +1 -0
  145. package/dist/components/scroll-area.js +14 -0
  146. package/dist/components/search-bar.d.ts +15 -0
  147. package/dist/components/search-bar.d.ts.map +1 -0
  148. package/dist/components/search-bar.js +25 -0
  149. package/dist/components/segmented-control.d.ts +24 -0
  150. package/dist/components/segmented-control.d.ts.map +1 -0
  151. package/dist/components/segmented-control.js +88 -0
  152. package/dist/components/select.d.ts +16 -0
  153. package/dist/components/select.d.ts.map +1 -0
  154. package/dist/components/select.js +39 -0
  155. package/dist/components/selection-panel.d.ts +29 -0
  156. package/dist/components/selection-panel.d.ts.map +1 -0
  157. package/dist/components/selection-panel.js +255 -0
  158. package/dist/components/separator.d.ts +5 -0
  159. package/dist/components/separator.d.ts.map +1 -0
  160. package/dist/components/separator.js +11 -0
  161. package/dist/components/sheet.d.ts +17 -0
  162. package/dist/components/sheet.d.ts.map +1 -0
  163. package/dist/components/sheet.js +42 -0
  164. package/dist/components/sidebar.d.ts +70 -0
  165. package/dist/components/sidebar.d.ts.map +1 -0
  166. package/dist/components/sidebar.js +213 -0
  167. package/dist/components/skeleton.d.ts +3 -0
  168. package/dist/components/skeleton.d.ts.map +1 -0
  169. package/dist/components/skeleton.js +8 -0
  170. package/dist/components/slider.d.ts +5 -0
  171. package/dist/components/slider.d.ts.map +1 -0
  172. package/dist/components/slider.js +19 -0
  173. package/dist/components/sonner.d.ts +4 -0
  174. package/dist/components/sonner.d.ts.map +1 -0
  175. package/dist/components/sonner.js +22 -0
  176. package/dist/components/spinner.d.ts +4 -0
  177. package/dist/components/spinner.d.ts.map +1 -0
  178. package/dist/components/spinner.js +9 -0
  179. package/dist/components/switch.d.ts +5 -0
  180. package/dist/components/switch.d.ts.map +1 -0
  181. package/dist/components/switch.js +9 -0
  182. package/dist/components/table.d.ts +11 -0
  183. package/dist/components/table.d.ts.map +1 -0
  184. package/dist/components/table.js +29 -0
  185. package/dist/components/tabs.d.ts +8 -0
  186. package/dist/components/tabs.d.ts.map +1 -0
  187. package/dist/components/tabs.js +18 -0
  188. package/dist/components/textarea.d.ts +8 -0
  189. package/dist/components/textarea.d.ts.map +1 -0
  190. package/dist/components/textarea.js +15 -0
  191. package/dist/components/toggle-group.d.ts +8 -0
  192. package/dist/components/toggle-group.d.ts.map +1 -0
  193. package/dist/components/toggle-group.js +22 -0
  194. package/dist/components/toggle.d.ts +10 -0
  195. package/dist/components/toggle.d.ts.map +1 -0
  196. package/dist/components/toggle.js +27 -0
  197. package/dist/components/tooltip.d.ts +8 -0
  198. package/dist/components/tooltip.d.ts.map +1 -0
  199. package/dist/components/tooltip.js +18 -0
  200. package/dist/components/visually-hidden.d.ts +16 -0
  201. package/dist/components/visually-hidden.d.ts.map +1 -0
  202. package/dist/components/visually-hidden.js +22 -0
  203. package/dist/globals.css +719 -0
  204. package/dist/hooks/use-invalid-attention.d.ts +20 -0
  205. package/dist/hooks/use-invalid-attention.d.ts.map +1 -0
  206. package/dist/hooks/use-invalid-attention.js +65 -0
  207. package/dist/hooks/use-mobile.d.ts +2 -0
  208. package/dist/hooks/use-mobile.d.ts.map +1 -0
  209. package/dist/hooks/use-mobile.js +18 -0
  210. package/dist/index.d.ts +68 -0
  211. package/dist/index.d.ts.map +1 -0
  212. package/dist/index.js +68 -0
  213. package/dist/lib/portal-wrapper.d.ts +32 -0
  214. package/dist/lib/portal-wrapper.d.ts.map +1 -0
  215. package/dist/lib/portal-wrapper.js +34 -0
  216. package/dist/lib/utils.js +8 -0
  217. package/dist/svgs/blaze-dispatch-logo.d.ts +5 -0
  218. package/dist/svgs/blaze-dispatch-logo.d.ts.map +1 -0
  219. package/dist/svgs/blaze-ecom-logo.d.ts +7 -0
  220. package/dist/svgs/blaze-ecom-logo.d.ts.map +1 -0
  221. package/dist/svgs/blaze-insights-logo.d.ts +5 -0
  222. package/dist/svgs/blaze-insights-logo.d.ts.map +1 -0
  223. package/dist/svgs/blaze-lighthouse-logo.d.ts +6 -0
  224. package/dist/svgs/blaze-lighthouse-logo.d.ts.map +1 -0
  225. package/dist/svgs/blaze-pay-logo.d.ts +5 -0
  226. package/dist/svgs/blaze-pay-logo.d.ts.map +1 -0
  227. package/dist/svgs/blaze-pos-logo.d.ts +5 -0
  228. package/dist/svgs/blaze-pos-logo.d.ts.map +1 -0
  229. package/dist/svgs/blaze-retail-logo.d.ts +7 -0
  230. package/dist/svgs/blaze-retail-logo.d.ts.map +1 -0
  231. package/dist/svgs/blaze-sites-logo.d.ts +5 -0
  232. package/dist/svgs/blaze-sites-logo.d.ts.map +1 -0
  233. package/dist/svgs/header-app-switcher-logos.d.ts +15 -0
  234. package/dist/svgs/header-app-switcher-logos.d.ts.map +1 -0
  235. package/dist/svgs/header-app-switcher-logos.js +22 -0
  236. package/package.json +95 -31
  237. package/README.md +0 -80
  238. package/build/components/button.d.ts +0 -12
  239. package/build/components/button.d.ts.map +0 -1
  240. package/build/components/button.js +0 -106
  241. package/build/components/button.js.map +0 -1
  242. package/build/index.d.ts +0 -4
  243. package/build/index.d.ts.map +0 -1
  244. package/build/index.js +0 -11
  245. package/build/index.js.map +0 -1
  246. package/build/index.mjs +0 -6
  247. package/build/lib/utils.js +0 -9
  248. package/build/lib/utils.js.map +0 -1
  249. package/build/styles/blaze-ui.css +0 -97
  250. package/build/styles/blaze-ui.css.map +0 -1
  251. package/build/styles/styles.d.ts +0 -3
  252. package/build/styles/styles.d.ts.map +0 -1
  253. package/build/styles/styles.js +0 -8
  254. package/build/styles/styles.js.map +0 -1
  255. package/src/styles/blaze-ui.css +0 -157
  256. package/src/styles/styles.ts +0 -5
  257. /package/{build → dist}/lib/utils.d.ts +0 -0
  258. /package/{build → dist}/lib/utils.d.ts.map +0 -0
@@ -0,0 +1,52 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
3
+ import { CheckIcon, CircleIcon, ChevronRightIcon } from 'lucide-react';
4
+ import { cn } from '../lib/utils.js';
5
+
6
+ function DropdownMenu({ ...props }) {
7
+ return jsx(DropdownMenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props });
8
+ }
9
+ function DropdownMenuPortal({ ...props }) {
10
+ return (jsx(DropdownMenuPrimitive.Portal, { "data-slot": "dropdown-menu-portal", ...props }));
11
+ }
12
+ function DropdownMenuTrigger({ ...props }) {
13
+ return (jsx(DropdownMenuPrimitive.Trigger, { "data-slot": "dropdown-menu-trigger", ...props }));
14
+ }
15
+ function DropdownMenuContent({ className, sideOffset = 4, ...props }) {
16
+ return (jsx(DropdownMenuPrimitive.Portal, { children: jsx(DropdownMenuPrimitive.Content, { "data-slot": "dropdown-menu-content", sideOffset: sideOffset, className: cn("tw:!bg-popover tw:!text-popover-foreground data-[state=open]:tw:!animate-in data-[state=closed]:tw:!animate-out data-[state=closed]:tw:!fade-out-0 data-[state=open]:tw:!fade-in-0 data-[state=closed]:tw:!zoom-out-95 data-[state=open]:tw:!zoom-in-95 data-[side=bottom]:tw:!slide-in-from-top-2 data-[side=left]:tw:!slide-in-from-right-2 data-[side=right]:tw:!slide-in-from-left-2 data-[side=top]:tw:!slide-in-from-bottom-2 tw:!z-50 tw:!max-h-(--radix-dropdown-menu-content-available-height) tw:!min-w-[8rem] tw:!origin-(--radix-dropdown-menu-content-transform-origin) tw:!overflow-x-hidden tw:!overflow-y-auto tw:!rounded-md tw:!border tw:!p-1 tw:!shadow-md", className), ...props }) }));
17
+ }
18
+ function DropdownMenuGroup({ ...props }) {
19
+ return (jsx(DropdownMenuPrimitive.Group, { "data-slot": "dropdown-menu-group", ...props }));
20
+ }
21
+ function DropdownMenuItem({ className, inset, variant = "default", ...props }) {
22
+ return (jsx(DropdownMenuPrimitive.Item, { "data-slot": "dropdown-menu-item", "data-inset": inset, "data-variant": variant, className: cn("focus:tw:!bg-accent focus:tw:!text-accent-foreground data-[variant=destructive]:tw:!text-destructive data-[variant=destructive]:focus:tw:!bg-destructive/10 dark:data-[variant=destructive]:focus:tw:!bg-destructive/20 data-[variant=destructive]:focus:tw:!text-destructive data-[variant=destructive]:*:svg:tw:!text-destructive [&_svg:not([class*='text-'])]:tw:!text-muted-foreground tw:!relative tw:!flex tw:!cursor-default tw:!items-center tw:!gap-2 tw:!rounded-sm tw:!px-2 tw:!py-1.5 tw:!text-[14px] tw:!outline-hidden tw:!select-none data-[disabled]:tw:!pointer-events-none data-[disabled]:tw:!opacity-50 data-[inset]:tw:!pl-8 [&_svg]:tw:!pointer-events-none [&_svg]:tw:!shrink-0 [&_svg:not([class*='size-'])]:tw:!size-4", className), ...props }));
23
+ }
24
+ function DropdownMenuCheckboxItem({ className, children, checked, ...props }) {
25
+ return (jsxs(DropdownMenuPrimitive.CheckboxItem, { "data-slot": "dropdown-menu-checkbox-item", className: cn("tw:focus:bg-accent tw:focus:text-accent-foreground tw:relative tw:flex tw:cursor-default tw:items-center tw:gap-2 tw:rounded-sm tw:py-1.5 tw:pr-2 tw:pl-8 tw:text-[14px] tw:outline-hidden tw:select-none tw:data-[disabled]:pointer-events-none tw:data-[disabled]:opacity-50 tw:[&_svg]:pointer-events-none tw:[&_svg]:shrink-0 tw:[&_svg:not([class*='size-'])]:size-4", className), checked: checked, ...props, children: [jsx("span", { className: "tw:!pointer-events-none tw:!absolute tw:!left-2 tw:!flex tw:!size-3.5 tw:!items-center tw:!justify-center", children: jsx(DropdownMenuPrimitive.ItemIndicator, { children: jsx(CheckIcon, { className: "tw:!size-4" }) }) }), children] }));
26
+ }
27
+ function DropdownMenuRadioGroup({ ...props }) {
28
+ return (jsx(DropdownMenuPrimitive.RadioGroup, { "data-slot": "dropdown-menu-radio-group", ...props }));
29
+ }
30
+ function DropdownMenuRadioItem({ className, children, ...props }) {
31
+ return (jsxs(DropdownMenuPrimitive.RadioItem, { "data-slot": "dropdown-menu-radio-item", className: cn("focus:tw:!bg-accent focus:tw:!text-accent-foreground tw:!relative tw:!flex tw:!cursor-default tw:!items-center tw:!gap-2 tw:!rounded-sm tw:!py-1.5 tw:!pr-2 tw:!pl-8 tw:!text-[14px] tw:!outline-hidden tw:!select-none data-[disabled]:tw:!pointer-events-none data-[disabled]:tw:!opacity-50 [&_svg]:tw:!pointer-events-none [&_svg]:tw:!shrink-0 [&_svg:not([class*='size-'])]:tw:!size-4", className), ...props, children: [jsx("span", { className: "tw:!pointer-events-none tw:!absolute tw:!left-2 tw:!flex tw:!size-3.5 tw:!items-center tw:!justify-center", children: jsx(DropdownMenuPrimitive.ItemIndicator, { children: jsx(CircleIcon, { className: "tw:!size-2 tw:!fill-current" }) }) }), children] }));
32
+ }
33
+ function DropdownMenuLabel({ className, inset, ...props }) {
34
+ return (jsx(DropdownMenuPrimitive.Label, { "data-slot": "dropdown-menu-label", "data-inset": inset, className: cn("tw:!px-2 tw:!py-1.5 tw:!text-[14px] tw:!font-medium data-[inset]:tw:!pl-8", className), ...props }));
35
+ }
36
+ function DropdownMenuSeparator({ className, ...props }) {
37
+ return (jsx(DropdownMenuPrimitive.Separator, { "data-slot": "dropdown-menu-separator", className: cn("tw:!bg-border tw:!-mx-1 tw:!my-1 tw:!h-px", className), ...props }));
38
+ }
39
+ function DropdownMenuShortcut({ className, ...props }) {
40
+ return (jsx("span", { "data-slot": "dropdown-menu-shortcut", className: cn("tw:!text-muted-foreground tw:!ml-auto tw:!text-[12px] tw:!tracking-widest", className), ...props }));
41
+ }
42
+ function DropdownMenuSub({ ...props }) {
43
+ return jsx(DropdownMenuPrimitive.Sub, { "data-slot": "dropdown-menu-sub", ...props });
44
+ }
45
+ function DropdownMenuSubTrigger({ className, inset, children, ...props }) {
46
+ return (jsxs(DropdownMenuPrimitive.SubTrigger, { "data-slot": "dropdown-menu-sub-trigger", "data-inset": inset, className: cn("focus:tw:!bg-accent focus:tw:!text-accent-foreground data-[state=open]:tw:!bg-accent data-[state=open]:tw:!text-accent-foreground [&_svg:not([class*='text-'])]:tw:!text-muted-foreground tw:!flex tw:!cursor-default tw:!items-center tw:!gap-2 tw:!rounded-sm tw:!px-2 tw:!py-1.5 tw:!text-[14px] tw:!outline-hidden tw:!select-none data-[inset]:tw:!pl-8 [&_svg]:tw:!pointer-events-none [&_svg]:tw:!shrink-0 [&_svg:not([class*='size-'])]:tw:!size-4", className), ...props, children: [children, jsx(ChevronRightIcon, { className: "tw:ml-auto tw:size-4" })] }));
47
+ }
48
+ function DropdownMenuSubContent({ className, ...props }) {
49
+ return (jsx(DropdownMenuPrimitive.SubContent, { "data-slot": "dropdown-menu-sub-content", className: cn("tw:!bg-popover tw:!text-popover-foreground data-[state=open]:tw:!animate-in data-[state=closed]:tw:!animate-out data-[state=closed]:tw:!fade-out-0 data-[state=open]:tw:!fade-in-0 data-[state=closed]:tw:!zoom-out-95 data-[state=open]:tw:!zoom-in-95 data-[side=bottom]:tw:!slide-in-from-top-2 data-[side=left]:tw:!slide-in-from-right-2 data-[side=right]:tw:!slide-in-from-left-2 data-[side=top]:tw:!slide-in-from-bottom-2 tw:!z-50 tw:!min-w-[8rem] tw:!origin-(--radix-dropdown-menu-content-transform-origin) tw:!overflow-hidden tw:!rounded-md tw:!border tw:!p-1 tw:!shadow-lg", className), ...props }));
50
+ }
51
+
52
+ export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger };
@@ -0,0 +1,12 @@
1
+ import { type VariantProps } from "class-variance-authority";
2
+ declare function Empty({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
3
+ declare function EmptyHeader({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
4
+ declare const emptyMediaVariants: (props?: ({
5
+ variant?: "default" | "icon" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ declare function EmptyMedia({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof emptyMediaVariants>): import("react/jsx-runtime").JSX.Element;
8
+ declare function EmptyTitle({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
9
+ declare function EmptyDescription({ className, ...props }: React.ComponentProps<"p">): import("react/jsx-runtime").JSX.Element;
10
+ declare function EmptyContent({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
11
+ export { Empty, EmptyHeader, EmptyTitle, EmptyDescription, EmptyContent, EmptyMedia, };
12
+ //# sourceMappingURL=empty.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"empty.d.ts","sourceRoot":"","sources":["../../src/components/empty.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAIjE,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAWlE;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAWxE;AAED,QAAA,MAAM,kBAAkB;;8EAavB,CAAA;AAED,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,OAAmB,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,OAAO,kBAAkB,CAAC,2CASvE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAQvE;AAED,iBAAS,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,2CAW3E;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAWzE;AAED,OAAO,EACL,KAAK,EACL,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,UAAU,GACX,CAAA"}
@@ -0,0 +1,35 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { cva } from 'class-variance-authority';
3
+ import { cn } from '../lib/utils.js';
4
+
5
+ function Empty({ className, ...props }) {
6
+ return (jsx("div", { "data-slot": "empty", className: cn("tw:flex tw:min-w-0 tw:flex-1 tw:flex-col tw:items-center tw:justify-center tw:gap-6 tw:rounded-lg tw:border-dashed tw:p-6 tw:text-center tw:text-balance tw:md:p-12", className), ...props }));
7
+ }
8
+ function EmptyHeader({ className, ...props }) {
9
+ return (jsx("div", { "data-slot": "empty-header", className: cn("tw:flex tw:max-w-sm tw:flex-col tw:items-center tw:gap-2 tw:text-center", className), ...props }));
10
+ }
11
+ const emptyMediaVariants = cva("tw:flex tw:shrink-0 tw:items-center tw:justify-center tw:mb-2 tw:[&_svg]:pointer-events-none tw:[&_svg]:shrink-0", {
12
+ variants: {
13
+ variant: {
14
+ default: "tw:bg-transparent",
15
+ icon: "tw:bg-muted tw:text-foreground tw:flex tw:size-10 tw:shrink-0 tw:items-center tw:justify-center tw:rounded-lg tw:[&_svg:not([class*='size-'])]:size-6",
16
+ },
17
+ },
18
+ defaultVariants: {
19
+ variant: "default",
20
+ },
21
+ });
22
+ function EmptyMedia({ className, variant = "default", ...props }) {
23
+ return (jsx("div", { "data-slot": "empty-icon", "data-variant": variant, className: cn(emptyMediaVariants({ variant, className })), ...props }));
24
+ }
25
+ function EmptyTitle({ className, ...props }) {
26
+ return (jsx("div", { "data-slot": "empty-title", className: cn("tw:text-lg tw:font-medium tw:tracking-tight", className), ...props }));
27
+ }
28
+ function EmptyDescription({ className, ...props }) {
29
+ return (jsx("div", { "data-slot": "empty-description", className: cn("tw:text-muted-foreground tw:[&>a:hover]:text-primary tw:text-sm/relaxed tw:[&>a]:underline tw:[&>a]:underline-offset-4", className), ...props }));
30
+ }
31
+ function EmptyContent({ className, ...props }) {
32
+ return (jsx("div", { "data-slot": "empty-content", className: cn("tw:flex tw:w-full tw:max-w-sm tw:min-w-0 tw:flex-col tw:items-center tw:gap-4 tw:text-sm tw:text-balance", className), ...props }));
33
+ }
34
+
35
+ export { Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle };
@@ -0,0 +1,25 @@
1
+ import { type VariantProps } from "class-variance-authority";
2
+ import { Label } from "../components/label";
3
+ declare function FieldSet({ className, ...props }: React.ComponentProps<"fieldset">): import("react/jsx-runtime").JSX.Element;
4
+ declare function FieldLegend({ className, variant, ...props }: React.ComponentProps<"legend"> & {
5
+ variant?: "legend" | "label";
6
+ }): import("react/jsx-runtime").JSX.Element;
7
+ declare function FieldGroup({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
8
+ declare const fieldVariants: (props?: ({
9
+ orientation?: "horizontal" | "vertical" | "responsive" | null | undefined;
10
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
11
+ declare function Field({ className, orientation, ...props }: React.ComponentProps<"div"> & VariantProps<typeof fieldVariants>): import("react/jsx-runtime").JSX.Element;
12
+ declare function FieldContent({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
13
+ declare function FieldLabel({ className, ...props }: React.ComponentProps<typeof Label>): import("react/jsx-runtime").JSX.Element;
14
+ declare function FieldTitle({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
15
+ declare function FieldDescription({ className, ...props }: React.ComponentProps<"p">): import("react/jsx-runtime").JSX.Element;
16
+ declare function FieldSeparator({ children, className, ...props }: React.ComponentProps<"div"> & {
17
+ children?: React.ReactNode;
18
+ }): import("react/jsx-runtime").JSX.Element;
19
+ declare function FieldError({ className, children, errors, ...props }: React.ComponentProps<"div"> & {
20
+ errors?: Array<{
21
+ message?: string;
22
+ } | undefined>;
23
+ }): import("react/jsx-runtime").JSX.Element | null;
24
+ export { Field, FieldLabel, FieldDescription, FieldError, FieldGroup, FieldLegend, FieldSeparator, FieldSet, FieldContent, FieldTitle, };
25
+ //# sourceMappingURL=field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../src/components/field.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAGjE,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAG3C,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,2CAY1E;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,OAAkB,EAClB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;CAAE,2CAcnE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAWvE;AAED,QAAA,MAAM,aAAa;;8EAsBlB,CAAA;AAED,iBAAS,KAAK,CAAC,EACb,SAAS,EACT,WAAwB,EACxB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,2CAUlE;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAWzE;AAED,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,KAAK,CAAC,2CAapC;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAWvE;AAED,iBAAS,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,2CAa3E;AAED,iBAAS,cAAc,CAAC,EACtB,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B,2CAsBA;AAED,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,QAAQ,EACR,MAAM,EACN,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC,CAAA;CACjD,kDAsCA;AAED,OAAO,EACL,KAAK,EACL,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,UAAU,GACX,CAAA"}
@@ -0,0 +1,74 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { useMemo } from 'react';
3
+ import { cva } from 'class-variance-authority';
4
+ import { cn } from '../lib/utils.js';
5
+ import { Label } from './label.js';
6
+ import { Separator } from './separator.js';
7
+
8
+ function FieldSet({ className, ...props }) {
9
+ return (jsx("fieldset", { "data-slot": "field-set", className: cn("tw:flex tw:flex-col tw:gap-6", "has-[>[data-slot=checkbox-group]]:tw:gap-3 has-[>[data-slot=radio-group]]:tw:gap-3", className), ...props }));
10
+ }
11
+ function FieldLegend({ className, variant = "legend", ...props }) {
12
+ return (jsx("legend", { "data-slot": "field-legend", "data-variant": variant, className: cn("tw:mb-3 tw:font-medium", "data-[variant=legend]:tw:text-base", "data-[variant=label]:tw:text-sm", className), ...props }));
13
+ }
14
+ function FieldGroup({ className, ...props }) {
15
+ return (jsx("div", { "data-slot": "field-group", className: cn("group/field-group @container/field-group tw:flex tw:w-full tw:flex-col tw:gap-7 data-[slot=checkbox-group]:tw:gap-3 [&>[data-slot=field-group]]:tw:gap-4", className), ...props }));
16
+ }
17
+ const fieldVariants = cva("group/field tw:flex tw:w-full tw:gap-3 data-[invalid=true]:tw:text-destructive", {
18
+ variants: {
19
+ orientation: {
20
+ vertical: ["tw:flex-col [&>*]:tw:w-full [&>.tw:sr-only]:tw:w-auto"],
21
+ horizontal: [
22
+ "tw:flex-row tw:items-center",
23
+ "[&>[data-slot=field-label]]:tw:flex-auto",
24
+ "has-[>[data-slot=field-content]]:tw:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:tw:mt-px",
25
+ ],
26
+ responsive: [
27
+ "tw:flex-col [&>*]:tw:w-full [&>.tw:sr-only]:tw:w-auto @md/field-group:tw:flex-row @md/field-group:tw:items-center @md/field-group:[&>*]:tw:w-auto",
28
+ "@md/field-group:[&>[data-slot=field-label]]:tw:flex-auto",
29
+ "@md/field-group:has-[>[data-slot=field-content]]:tw:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:tw:mt-px",
30
+ ],
31
+ },
32
+ },
33
+ defaultVariants: {
34
+ orientation: "vertical",
35
+ },
36
+ });
37
+ function Field({ className, orientation = "vertical", ...props }) {
38
+ return (jsx("div", { role: "group", "data-slot": "field", "data-orientation": orientation, className: cn(fieldVariants({ orientation }), className), ...props }));
39
+ }
40
+ function FieldContent({ className, ...props }) {
41
+ return (jsx("div", { "data-slot": "field-content", className: cn("group/field-content tw:flex tw:flex-1 tw:flex-col tw:gap-1.5 tw:leading-snug", className), ...props }));
42
+ }
43
+ function FieldLabel({ className, ...props }) {
44
+ return (jsx(Label, { "data-slot": "field-label", className: cn("group/field-label peer/field-label tw:flex tw:w-fit tw:gap-2 tw:leading-snug group-data-[disabled=true]/field:tw:!cursor-not-allowed group-data-[disabled=true]/field:tw:!opacity-50", "has-[>[data-slot=field]]:tw:w-full has-[>[data-slot=field]]:tw:flex-col has-[>[data-slot=field]]:tw:rounded-md has-[>[data-slot=field]]:tw:border [&>*]:data-[slot=field]:tw:p-4", "has-data-[state=checked]:tw:bg-primary/5 has-data-[state=checked]:tw:border-primary dark:has-data-[state=checked]:tw:bg-primary/10", className), ...props }));
45
+ }
46
+ function FieldTitle({ className, ...props }) {
47
+ return (jsx("div", { "data-slot": "field-label", className: cn("tw:flex tw:w-fit tw:items-center tw:gap-2 tw:text-sm tw:leading-snug tw:font-medium group-data-[disabled=true]/field:tw:!cursor-not-allowed group-data-[disabled=true]/field:tw:!opacity-50", className), ...props }));
48
+ }
49
+ function FieldDescription({ className, ...props }) {
50
+ return (jsx("p", { "data-slot": "field-description", className: cn("tw:text-muted-foreground tw:text-sm tw:leading-normal tw:font-normal group-has-[[data-orientation=horizontal]]/field:tw:text-balance", "last:tw:mt-0 nth-last-2:tw:-mt-1 [[data-variant=legend]+&]:tw:-mt-1.5", "[&>a:hover]:tw:text-primary [&>a]:tw:underline [&>a]:tw:underline-offset-4", className), ...props }));
51
+ }
52
+ function FieldSeparator({ children, className, ...props }) {
53
+ return (jsxs("div", { "data-slot": "field-separator", "data-content": !!children, className: cn("tw:relative tw:-my-2 tw:h-5 tw:text-sm group-data-[variant=outline]/field-group:tw:-mb-2", className), ...props, children: [jsx(Separator, { className: "tw:absolute tw:inset-0 tw:top-1/2" }), children && (jsx("span", { className: "tw:bg-background tw:text-muted-foreground tw:relative tw:mx-auto tw:block tw:w-fit tw:px-2", "data-slot": "field-separator-content", children: children }))] }));
54
+ }
55
+ function FieldError({ className, children, errors, ...props }) {
56
+ const content = useMemo(() => {
57
+ if (children) {
58
+ return children;
59
+ }
60
+ if (!errors?.length) {
61
+ return null;
62
+ }
63
+ if (errors?.length == 1) {
64
+ return errors[0]?.message;
65
+ }
66
+ return (jsx("ul", { className: "tw:ml-4 tw:flex tw:list-disc tw:flex-col tw:gap-1", children: errors.map((error, index) => error?.message && jsx("li", { children: error.message }, index)) }));
67
+ }, [children, errors]);
68
+ if (!content) {
69
+ return null;
70
+ }
71
+ return (jsx("div", { role: "alert", "data-slot": "field-error", className: cn("tw:text-destructive tw:text-sm tw:font-normal", className), ...props, children: content }));
72
+ }
73
+
74
+ export { Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle };
@@ -0,0 +1,25 @@
1
+ import * as React from "react";
2
+ import * as LabelPrimitive from "@radix-ui/react-label";
3
+ import { Slot } from "@radix-ui/react-slot";
4
+ import { FormProvider, type ControllerProps, type FieldPath, type FieldValues } from "react-hook-form";
5
+ declare const Form: typeof FormProvider;
6
+ declare const FormField: <TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({ ...props }: ControllerProps<TFieldValues, TName>) => import("react/jsx-runtime").JSX.Element;
7
+ declare const useFormField: () => {
8
+ invalid: boolean;
9
+ isDirty: boolean;
10
+ isTouched: boolean;
11
+ isValidating: boolean;
12
+ error?: import("react-hook-form").FieldError;
13
+ id: string;
14
+ name: string;
15
+ formItemId: string;
16
+ formDescriptionId: string;
17
+ formMessageId: string;
18
+ };
19
+ declare function FormItem({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
20
+ declare function FormLabel({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
21
+ declare function FormControl({ ...props }: React.ComponentProps<typeof Slot>): import("react/jsx-runtime").JSX.Element;
22
+ declare function FormDescription({ className, ...props }: React.ComponentProps<"p">): import("react/jsx-runtime").JSX.Element;
23
+ declare function FormMessage({ className, ...props }: React.ComponentProps<"p">): import("react/jsx-runtime").JSX.Element | null;
24
+ export { useFormField, Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField, };
25
+ //# sourceMappingURL=form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../src/components/form.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAEL,YAAY,EAGZ,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAA;AAKxB,QAAA,MAAM,IAAI,EAAE,OAAO,YAA2B,CAAA;AAa9C,QAAA,MAAM,SAAS,GACb,YAAY,SAAS,WAAW,GAAG,WAAW,EAC9C,KAAK,SAAS,SAAS,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,EAC/D,cAEC,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,4CAMtC,CAAA;AAED,QAAA,MAAM,YAAY;;;;;;;;;;;CAqBjB,CAAA;AAUD,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAYrE;AAED,iBAAS,SAAS,CAAC,EACjB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,IAAI,CAAC,2CAYlD;AAED,iBAAS,WAAW,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,2CAgBnE;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,2CAW1E;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,kDAkBtE;AAED,OAAO,EACL,YAAY,EACZ,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,WAAW,EACX,eAAe,EACf,WAAW,EACX,SAAS,GACV,CAAA"}
@@ -0,0 +1,60 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { Slot } from '@radix-ui/react-slot';
4
+ import { FormProvider, Controller, useFormContext, useFormState } from 'react-hook-form';
5
+ import { cn } from '../lib/utils.js';
6
+ import { Label } from './label.js';
7
+
8
+ const Form = FormProvider;
9
+ const FormFieldContext = React.createContext({});
10
+ const FormField = ({ ...props }) => {
11
+ return (jsx(FormFieldContext.Provider, { value: { name: props.name }, children: jsx(Controller, { ...props }) }));
12
+ };
13
+ const useFormField = () => {
14
+ const fieldContext = React.useContext(FormFieldContext);
15
+ const itemContext = React.useContext(FormItemContext);
16
+ const { getFieldState } = useFormContext();
17
+ const formState = useFormState({ name: fieldContext.name });
18
+ const fieldState = getFieldState(fieldContext.name, formState);
19
+ if (!fieldContext) {
20
+ throw new Error("useFormField should be used within <FormField>");
21
+ }
22
+ const { id } = itemContext;
23
+ return {
24
+ id,
25
+ name: fieldContext.name,
26
+ formItemId: `${id}-form-item`,
27
+ formDescriptionId: `${id}-form-item-description`,
28
+ formMessageId: `${id}-form-item-message`,
29
+ ...fieldState,
30
+ };
31
+ };
32
+ const FormItemContext = React.createContext({});
33
+ function FormItem({ className, ...props }) {
34
+ const id = React.useId();
35
+ return (jsx(FormItemContext.Provider, { value: { id }, children: jsx("div", { "data-slot": "form-item", className: cn("tw:grid tw:gap-2", className), ...props }) }));
36
+ }
37
+ function FormLabel({ className, ...props }) {
38
+ const { error, formItemId } = useFormField();
39
+ return (jsx(Label, { "data-slot": "form-label", "data-error": !!error, className: cn("data-[error=true]:tw:text-destructive", className), htmlFor: formItemId, ...props }));
40
+ }
41
+ function FormControl({ ...props }) {
42
+ const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
43
+ return (jsx(Slot, { "data-slot": "form-control", id: formItemId, "aria-describedby": !error
44
+ ? `${formDescriptionId}`
45
+ : `${formDescriptionId} ${formMessageId}`, "aria-invalid": !!error, ...props }));
46
+ }
47
+ function FormDescription({ className, ...props }) {
48
+ const { formDescriptionId } = useFormField();
49
+ return (jsx("p", { "data-slot": "form-description", id: formDescriptionId, className: cn("tw:text-muted-foreground tw:text-sm", className), ...props }));
50
+ }
51
+ function FormMessage({ className, ...props }) {
52
+ const { error, formMessageId } = useFormField();
53
+ const body = error ? String(error?.message ?? "") : props.children;
54
+ if (!body) {
55
+ return null;
56
+ }
57
+ return (jsx("p", { "data-slot": "form-message", id: formMessageId, className: cn("tw:text-destructive tw:text-sm", className), ...props, children: body }));
58
+ }
59
+
60
+ export { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, useFormField };
@@ -0,0 +1,53 @@
1
+ declare const AppsConfig: readonly [{
2
+ readonly name: "Retail";
3
+ readonly logo: import("react/jsx-runtime").JSX.Element;
4
+ readonly subdomain: "retail-beta";
5
+ }, {
6
+ readonly name: "POS";
7
+ readonly logo: import("react/jsx-runtime").JSX.Element;
8
+ readonly subdomain: "pos";
9
+ }, {
10
+ readonly name: "Ecom";
11
+ readonly logo: import("react/jsx-runtime").JSX.Element;
12
+ readonly subdomain: "ecom-beta";
13
+ }, {
14
+ readonly name: "Sites";
15
+ readonly logo: import("react/jsx-runtime").JSX.Element;
16
+ readonly subdomain: "cms";
17
+ }, {
18
+ readonly name: "Lighthouse";
19
+ readonly logo: import("react/jsx-runtime").JSX.Element;
20
+ readonly subdomain: "lighthouse";
21
+ }, {
22
+ readonly name: "Growth";
23
+ readonly logo: import("react/jsx-runtime").JSX.Element;
24
+ readonly subdomain: "growth";
25
+ }, {
26
+ readonly name: "Billing";
27
+ readonly logo: import("react/jsx-runtime").JSX.Element;
28
+ readonly subdomain: "billing";
29
+ }, {
30
+ readonly name: "Settings";
31
+ readonly logo: import("react/jsx-runtime").JSX.Element;
32
+ readonly subdomain: "settings";
33
+ }];
34
+ type AppName = (typeof AppsConfig)[number]["name"];
35
+ type AppSubdomain = NonNullable<(typeof AppsConfig)[number]["subdomain"]>;
36
+ type HeaderAppSwitcherProps = {
37
+ /**
38
+ * Optional base host string (e.g. "https://blaze.me" or "staging.blaze.me").
39
+ * When omitted, the host is inferred from `window.location`.
40
+ */
41
+ commonHost?: string;
42
+ /** Which app is currently active. Defaults to "Retail". */
43
+ currentApp?: AppName;
44
+ /** Filter apps by subdomain. When omitted, all apps are shown. */
45
+ visibleApps?: AppSubdomain[];
46
+ /** Number of grid columns. Defaults to 3. */
47
+ columns?: 1 | 2 | 3 | 4;
48
+ /** When true, appends ?sso=true to all app URLs to trigger SSO login on the target app. */
49
+ ssoRedirect?: boolean;
50
+ };
51
+ declare function HeaderAppSwitcher({ commonHost, currentApp, visibleApps, columns, ssoRedirect, }: HeaderAppSwitcherProps): import("react/jsx-runtime").JSX.Element;
52
+ export { HeaderAppSwitcher, type HeaderAppSwitcherProps, type AppName, type AppSubdomain, };
53
+ //# sourceMappingURL=header-app-switcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-app-switcher.d.ts","sourceRoot":"","sources":["../../src/components/header-app-switcher.tsx"],"names":[],"mappings":"AAsBA,QAAA,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBN,CAAA;AAEV,KAAK,OAAO,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAA;AAClD,KAAK,YAAY,GAAG,WAAW,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA;AAiGzE,KAAK,sBAAsB,GAAG;IAC5B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,kEAAkE;IAClE,WAAW,CAAC,EAAE,YAAY,EAAE,CAAA;IAC5B,6CAA6C;IAC7C,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACvB,2FAA2F;IAC3F,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,CAAA;AAmBD,iBAAS,iBAAiB,CAAC,EACzB,UAAU,EACV,UAAqB,EACrB,WAAW,EACX,OAAO,EACP,WAAW,GACZ,EAAE,sBAAsB,2CA+FxB;AAED,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,KAAK,OAAO,EACZ,KAAK,YAAY,GAClB,CAAA"}
@@ -0,0 +1,154 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { TrendingUp, CreditCard, Settings } from 'lucide-react';
4
+ import { Button } from './button.js';
5
+ import { Popover, PopoverTrigger, PopoverContent } from './popover.js';
6
+ import { RetailLogo, PosLogo, EcomLogo, SitesLogo, PlaceholderAppIcon, AppsGridIcon } from '../svgs/header-app-switcher-logos.js';
7
+ import { cn } from '../lib/utils.js';
8
+
9
+ const AppsConfig = [
10
+ { name: "Retail", logo: jsx(RetailLogo, {}), subdomain: "retail-beta" },
11
+ { name: "POS", logo: jsx(PosLogo, {}), subdomain: "pos" },
12
+ { name: "Ecom", logo: jsx(EcomLogo, {}), subdomain: "ecom-beta" },
13
+ { name: "Sites", logo: jsx(SitesLogo, {}), subdomain: "cms" },
14
+ {
15
+ name: "Lighthouse",
16
+ logo: jsx(PosLogo, {}),
17
+ subdomain: "lighthouse",
18
+ },
19
+ {
20
+ name: "Growth",
21
+ logo: jsx(PlaceholderAppIcon, { icon: TrendingUp }),
22
+ subdomain: "growth",
23
+ },
24
+ {
25
+ name: "Billing",
26
+ logo: jsx(PlaceholderAppIcon, { icon: CreditCard }),
27
+ subdomain: "billing",
28
+ },
29
+ {
30
+ name: "Settings",
31
+ logo: jsx(PlaceholderAppIcon, { icon: Settings }),
32
+ subdomain: "settings",
33
+ },
34
+ ];
35
+ const trimSlashes = (value) => value.trim().replace(/\/+$/, "");
36
+ const toHostInfo = (value) => {
37
+ const normalized = trimSlashes(value);
38
+ if (!normalized)
39
+ return null;
40
+ try {
41
+ const withProtocol = normalized.includes("://")
42
+ ? normalized
43
+ : `https://${normalized}`;
44
+ const parsed = new URL(withProtocol);
45
+ return {
46
+ protocol: parsed.protocol,
47
+ host: parsed.host,
48
+ };
49
+ }
50
+ catch {
51
+ return null;
52
+ }
53
+ };
54
+ const BASE_HOST_PREFIXES = ["app.", "auth.", "auth-beta."];
55
+ const normalizeBaseHost = (host) => {
56
+ const normalized = host.toLowerCase();
57
+ const matchedPrefix = BASE_HOST_PREFIXES.find((prefix) => normalized.startsWith(prefix));
58
+ if (!matchedPrefix) {
59
+ return host;
60
+ }
61
+ return host.slice(matchedPrefix.length);
62
+ };
63
+ const resolveHostInfo = (commonHost) => {
64
+ if (commonHost) {
65
+ const fromProp = toHostInfo(commonHost);
66
+ if (fromProp) {
67
+ return {
68
+ ...fromProp,
69
+ host: normalizeBaseHost(fromProp.host),
70
+ };
71
+ }
72
+ }
73
+ if (typeof window !== "undefined") {
74
+ const { protocol, hostname, host } = window.location;
75
+ if (hostname === "localhost" || hostname === "127.0.0.1") {
76
+ return {
77
+ protocol: "https:",
78
+ host: "staging.blaze.me",
79
+ };
80
+ }
81
+ const parts = hostname.split(".");
82
+ if (parts.length > 2) {
83
+ return {
84
+ protocol,
85
+ host: parts.slice(1).join("."),
86
+ };
87
+ }
88
+ return {
89
+ protocol,
90
+ host,
91
+ };
92
+ }
93
+ return {
94
+ protocol: "https:",
95
+ host: "blaze.me",
96
+ };
97
+ };
98
+ const buildAppUrl = (subdomain, base, ssoRedirect) => {
99
+ if (!subdomain)
100
+ return "#";
101
+ const url = new URL(`${base.protocol}//${subdomain}.${base.host}`);
102
+ if (ssoRedirect)
103
+ url.searchParams.set("sso", "true");
104
+ return url.toString();
105
+ };
106
+ const getTileClassName = (isCurrent, isDisabled) => {
107
+ if (isDisabled) {
108
+ return "tw:cursor-not-allowed tw:opacity-60";
109
+ }
110
+ if (isCurrent) {
111
+ return "tw:cursor-default";
112
+ }
113
+ return "hover:tw:bg-accent tw:cursor-pointer";
114
+ };
115
+ const gridColsClass = {
116
+ 1: "tw:grid-cols-1",
117
+ 2: "tw:grid-cols-2",
118
+ 3: "tw:grid-cols-3",
119
+ 4: "tw:grid-cols-4",
120
+ };
121
+ function HeaderAppSwitcher({ commonHost, currentApp = "Retail", visibleApps, columns, ssoRedirect, }) {
122
+ const apps = React.useMemo(() => {
123
+ const base = resolveHostInfo(commonHost);
124
+ const filtered = visibleApps
125
+ ? AppsConfig.filter((app) => app.subdomain && visibleApps.includes(app.subdomain))
126
+ : AppsConfig;
127
+ return filtered.map((app) => ({
128
+ ...app,
129
+ isCurrent: currentApp === app.name,
130
+ href: buildAppUrl(app.subdomain, base, ssoRedirect),
131
+ }));
132
+ }, [commonHost, currentApp, visibleApps, ssoRedirect]);
133
+ const resolvedColumns = columns ?? 3;
134
+ return (jsxs(Popover, { children: [jsx(PopoverTrigger, { asChild: true, children: jsxs(Button, { variant: "ghost", size: "icon", children: [jsx(AppsGridIcon, {}), jsx("span", { className: "tw:sr-only", children: "Switch apps" })] }) }), jsxs(PopoverContent, { align: "end", sideOffset: 8, className: "tw:!w-[286px] tw:!rounded tw:!border-border tw:!p-4 tw:!font-sans tw:!shadow-xl", children: [jsx("p", { className: "tw:mb-5 tw:text-sm tw:font-medium tw:leading-5 tw:text-popover-foreground", children: "Blaze Apps" }), jsx("div", { className: cn("tw:grid tw:gap-x-5 tw:gap-y-7", gridColsClass[resolvedColumns]), children: apps.map((app) => {
135
+ const isDisabled = Boolean(app.disabled);
136
+ const isCurrent = Boolean(app.isCurrent);
137
+ const tileClassName = getTileClassName(isCurrent, isDisabled);
138
+ const tileContent = (jsxs(Fragment, { children: [app.badge ? (jsx("span", { className: "tw:absolute tw:right-1 tw:top-1 tw:rounded-full tw:bg-primary tw:px-1.5 tw:py-0.5 tw:text-[10px] tw:font-semibold tw:leading-none tw:text-primary-foreground", children: app.badge })) : null, jsx("span", { className: "tw:flex tw:size-9 tw:items-center tw:justify-center tw:[&>svg]:tw:size-9 tw:[&>svg]:tw:shrink-0", children: app.logo }), jsx("span", { className: cn("tw:text-center tw:text-xs tw:font-normal tw:leading-4 tw:text-popover-foreground", isDisabled && "tw:text-muted-foreground"), children: app.name })] }));
139
+ const baseClassName = `tw:relative tw:flex tw:min-h-14 tw:flex-col tw:items-center tw:gap-2 tw:rounded-md tw:p-0 tw:transition-colors ${tileClassName}`;
140
+ const Wrapper = isDisabled || isCurrent ? "div" : "a";
141
+ const wrapperProps = isDisabled || isCurrent
142
+ ? isCurrent
143
+ ? { "aria-current": "page" }
144
+ : {}
145
+ : {
146
+ href: app.href,
147
+ target: "_blank",
148
+ rel: "noopener noreferrer",
149
+ };
150
+ return (jsx(Wrapper, { className: baseClassName, ...wrapperProps, children: tileContent }, app.name));
151
+ }) })] })] }));
152
+ }
153
+
154
+ export { HeaderAppSwitcher };
@@ -0,0 +1,31 @@
1
+ import * as React from "react";
2
+ interface HierarchicalSelectItem {
3
+ id: string;
4
+ label: string;
5
+ parentId?: string | null;
6
+ }
7
+ interface HierarchicalSelectBaseProps {
8
+ items: HierarchicalSelectItem[];
9
+ placeholder?: string;
10
+ searchPlaceholder?: string;
11
+ emptyMessage?: string;
12
+ className?: string;
13
+ triggerStyle?: React.CSSProperties;
14
+ disabled?: boolean;
15
+ label?: string;
16
+ }
17
+ interface HierarchicalSelectSingleProps extends HierarchicalSelectBaseProps {
18
+ multi?: false;
19
+ value?: string;
20
+ onValueChange?: (value: string) => void;
21
+ }
22
+ interface HierarchicalSelectMultiProps extends HierarchicalSelectBaseProps {
23
+ multi: true;
24
+ value?: string[];
25
+ onValueChange?: (values: string[]) => void;
26
+ }
27
+ type HierarchicalSelectProps = HierarchicalSelectSingleProps | HierarchicalSelectMultiProps;
28
+ declare function HierarchicalSelect(props: HierarchicalSelectProps): import("react/jsx-runtime").JSX.Element;
29
+ export { HierarchicalSelect };
30
+ export type { HierarchicalSelectItem, HierarchicalSelectProps };
31
+ //# sourceMappingURL=hierarchical-select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hierarchical-select.d.ts","sourceRoot":"","sources":["../../src/components/hierarchical-select.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAY9B,UAAU,sBAAsB;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED,UAAU,2BAA2B;IACnC,KAAK,EAAE,sBAAsB,EAAE,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,UAAU,6BAA8B,SAAQ,2BAA2B;IACzE,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACxC;AAED,UAAU,4BAA6B,SAAQ,2BAA2B;IACxE,KAAK,EAAE,IAAI,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;CAC3C;AAED,KAAK,uBAAuB,GACxB,6BAA6B,GAC7B,4BAA4B,CAAA;AAgFhC,iBAAS,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,2CAkVzD;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAA;AAC7B,YAAY,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,CAAA"}