@getgreenline/blaze-ui 1.0.3 → 1.0.4-5.01-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 +17 -0
  109. package/dist/components/multi-search-select.d.ts.map +1 -0
  110. package/dist/components/multi-search-select.js +40 -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,55 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import * as MenubarPrimitive from '@radix-ui/react-menubar';
3
+ import { CheckIcon, CircleIcon, ChevronRightIcon } from 'lucide-react';
4
+ import { cn } from '../lib/utils.js';
5
+
6
+ function Menubar({ className, ...props }) {
7
+ return (jsx(MenubarPrimitive.Root, { "data-slot": "menubar", className: cn("tw:bg-background tw:flex tw:h-9 tw:items-center tw:gap-1 tw:rounded-md tw:border tw:p-1 tw:shadow-xs", className), ...props }));
8
+ }
9
+ function MenubarMenu({ ...props }) {
10
+ return jsx(MenubarPrimitive.Menu, { "data-slot": "menubar-menu", ...props });
11
+ }
12
+ function MenubarGroup({ ...props }) {
13
+ return jsx(MenubarPrimitive.Group, { "data-slot": "menubar-group", ...props });
14
+ }
15
+ function MenubarPortal({ ...props }) {
16
+ return jsx(MenubarPrimitive.Portal, { "data-slot": "menubar-portal", ...props });
17
+ }
18
+ function MenubarRadioGroup({ ...props }) {
19
+ return (jsx(MenubarPrimitive.RadioGroup, { "data-slot": "menubar-radio-group", ...props }));
20
+ }
21
+ function MenubarTrigger({ className, ...props }) {
22
+ return (jsx(MenubarPrimitive.Trigger, { "data-slot": "menubar-trigger", className: cn("tw:focus:bg-accent tw:focus:text-accent-foreground tw:data-[state=open]:bg-accent tw:data-[state=open]:text-accent-foreground tw:flex tw:items-center tw:rounded-sm tw:px-2 tw:py-1 tw:text-sm tw:font-medium tw:outline-hidden tw:select-none", className), ...props }));
23
+ }
24
+ function MenubarContent({ className, align = "start", alignOffset = -4, sideOffset = 8, ...props }) {
25
+ return (jsx(MenubarPortal, { children: jsx(MenubarPrimitive.Content, { "data-slot": "menubar-content", align: align, alignOffset: alignOffset, sideOffset: sideOffset, className: cn("tw:bg-popover tw:text-popover-foreground tw:data-[state=open]:animate-in tw:data-[state=closed]:fade-out-0 tw:data-[state=open]:fade-in-0 tw:data-[state=closed]:zoom-out-95 tw:data-[state=open]:zoom-in-95 tw:data-[side=bottom]:slide-in-from-top-2 tw:data-[side=left]:slide-in-from-right-2 tw:data-[side=right]:slide-in-from-left-2 tw:data-[side=top]:slide-in-from-bottom-2 tw:z-50 tw:min-w-[12rem] tw:origin-(--radix-menubar-content-transform-origin) tw:overflow-hidden tw:rounded-md tw:border tw:p-1 tw:shadow-md", className), ...props }) }));
26
+ }
27
+ function MenubarItem({ className, inset, variant = "default", ...props }) {
28
+ return (jsx(MenubarPrimitive.Item, { "data-slot": "menubar-item", "data-inset": inset, "data-variant": variant, className: cn("tw:focus:bg-accent tw:focus:text-accent-foreground tw:data-[variant=destructive]:text-destructive tw:data-[variant=destructive]:focus:bg-destructive/10 tw:dark:data-[variant=destructive]:focus:bg-destructive/20 tw:data-[variant=destructive]:focus:text-destructive tw:data-[variant=destructive]:*:[svg]:!text-destructive tw:[&_svg:not([class*='text-'])]: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-sm tw:outline-hidden tw:select-none tw:data-[disabled]:pointer-events-none tw:data-[disabled]:opacity-50 tw:data-[inset]:pl-8 tw:[&_svg]:pointer-events-none tw:[&_svg]:shrink-0 tw:[&_svg:not([class*='size-'])]:size-4", className), ...props }));
29
+ }
30
+ function MenubarCheckboxItem({ className, children, checked, ...props }) {
31
+ return (jsxs(MenubarPrimitive.CheckboxItem, { "data-slot": "menubar-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-xs tw:py-1.5 tw:pr-2 tw:pl-8 tw:text-sm 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(MenubarPrimitive.ItemIndicator, { children: jsx(CheckIcon, { className: "tw:size-4" }) }) }), children] }));
32
+ }
33
+ function MenubarRadioItem({ className, children, ...props }) {
34
+ return (jsxs(MenubarPrimitive.RadioItem, { "data-slot": "menubar-radio-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-xs tw:py-1.5 tw:pr-2 tw:pl-8 tw:text-sm 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), ...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(MenubarPrimitive.ItemIndicator, { children: jsx(CircleIcon, { className: "tw:size-2 tw:fill-current" }) }) }), children] }));
35
+ }
36
+ function MenubarLabel({ className, inset, ...props }) {
37
+ return (jsx(MenubarPrimitive.Label, { "data-slot": "menubar-label", "data-inset": inset, className: cn("tw:px-2 tw:py-1.5 tw:text-sm tw:font-medium tw:data-[inset]:pl-8", className), ...props }));
38
+ }
39
+ function MenubarSeparator({ className, ...props }) {
40
+ return (jsx(MenubarPrimitive.Separator, { "data-slot": "menubar-separator", className: cn("tw:bg-border tw:-mx-1 tw:my-1 tw:h-px", className), ...props }));
41
+ }
42
+ function MenubarShortcut({ className, ...props }) {
43
+ return (jsx("span", { "data-slot": "menubar-shortcut", className: cn("tw:text-muted-foreground tw:ml-auto tw:text-xs tw:tracking-widest", className), ...props }));
44
+ }
45
+ function MenubarSub({ ...props }) {
46
+ return jsx(MenubarPrimitive.Sub, { "data-slot": "menubar-sub", ...props });
47
+ }
48
+ function MenubarSubTrigger({ className, inset, children, ...props }) {
49
+ return (jsxs(MenubarPrimitive.SubTrigger, { "data-slot": "menubar-sub-trigger", "data-inset": inset, className: cn("tw:focus:bg-accent tw:focus:text-accent-foreground tw:data-[state=open]:bg-accent tw:data-[state=open]:text-accent-foreground tw:flex tw:cursor-default tw:items-center tw:rounded-sm tw:px-2 tw:py-1.5 tw:text-sm tw:outline-none tw:select-none tw:data-[inset]:pl-8", className), ...props, children: [children, jsx(ChevronRightIcon, { className: "tw:ml-auto tw:h-4 tw:w-4" })] }));
50
+ }
51
+ function MenubarSubContent({ className, ...props }) {
52
+ return (jsx(MenubarPrimitive.SubContent, { "data-slot": "menubar-sub-content", className: cn("tw:bg-popover tw:text-popover-foreground tw:data-[state=open]:animate-in tw:data-[state=closed]:animate-out tw:data-[state=closed]:fade-out-0 tw:data-[state=open]:fade-in-0 tw:data-[state=closed]:zoom-out-95 tw:data-[state=open]:zoom-in-95 tw:data-[side=bottom]:slide-in-from-top-2 tw:data-[side=left]:slide-in-from-right-2 tw:data-[side=right]:slide-in-from-left-2 tw:data-[side=top]:slide-in-from-bottom-2 tw:z-50 tw:min-w-[8rem] tw:origin-(--radix-menubar-content-transform-origin) tw:overflow-hidden tw:rounded-md tw:border tw:p-1 tw:shadow-lg", className), ...props }));
53
+ }
54
+
55
+ export { Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger };
@@ -0,0 +1,17 @@
1
+ import * as React from "react";
2
+ export interface MultiSearchSelectOption {
3
+ value: string;
4
+ label: string;
5
+ disabled?: boolean;
6
+ }
7
+ export interface MultiSearchSelectProps extends Omit<React.ComponentProps<"button">, "value" | "onChange"> {
8
+ options: MultiSearchSelectOption[];
9
+ value: string[];
10
+ onValueChange: (value: string[]) => void;
11
+ placeholder?: string;
12
+ searchPlaceholder?: string;
13
+ emptyMessage?: string;
14
+ }
15
+ declare function MultiSearchSelect({ className, options, value, onValueChange, placeholder, searchPlaceholder, emptyMessage, disabled, ...props }: MultiSearchSelectProps): import("react/jsx-runtime").JSX.Element;
16
+ export { MultiSearchSelect };
17
+ //# sourceMappingURL=multi-search-select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-search-select.d.ts","sourceRoot":"","sources":["../../src/components/multi-search-select.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAO9B,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAClD,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,EAC9B,OAAO,GAAG,UAAU,CACrB;IACC,OAAO,EAAE,uBAAuB,EAAE,CAAA;IAClC,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IACxC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,OAAO,EACP,KAAK,EACL,aAAa,EACb,WAAiC,EACjC,iBAA+B,EAC/B,YAAiC,EACjC,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,sBAAsB,2CAqJxB;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAA"}
@@ -0,0 +1,40 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import * as PopoverPrimitive from '@radix-ui/react-popover';
4
+ import { XIcon, ChevronDownIcon, SearchIcon, CheckIcon } from 'lucide-react';
5
+ import { Badge } from './badge.js';
6
+ import { cn } from '../lib/utils.js';
7
+
8
+ function MultiSearchSelect({ className, options, value, onValueChange, placeholder = "Select options...", searchPlaceholder = "Search...", emptyMessage = "No options found", disabled, ...props }) {
9
+ const [open, setOpen] = React.useState(false);
10
+ const [search, setSearch] = React.useState("");
11
+ const selectedOptions = React.useMemo(() => options.filter((option) => value.includes(option.value)), [options, value]);
12
+ const filteredOptions = React.useMemo(() => {
13
+ const query = search.trim().toLowerCase();
14
+ if (!query)
15
+ return options;
16
+ return options.filter((option) => option.label.toLowerCase().includes(query));
17
+ }, [options, search]);
18
+ const toggleValue = React.useCallback((optionValue) => {
19
+ const nextValue = value.includes(optionValue)
20
+ ? value.filter((currentValue) => currentValue !== optionValue)
21
+ : [...value, optionValue];
22
+ onValueChange(nextValue);
23
+ }, [onValueChange, value]);
24
+ const removeValue = React.useCallback((optionValue, event) => {
25
+ event.stopPropagation();
26
+ onValueChange(value.filter((currentValue) => currentValue !== optionValue));
27
+ }, [onValueChange, value]);
28
+ return (jsxs(PopoverPrimitive.Root, { open: open, onOpenChange: (nextOpen) => {
29
+ setOpen(nextOpen);
30
+ if (!nextOpen)
31
+ setSearch("");
32
+ }, children: [jsx(PopoverPrimitive.Trigger, { asChild: true, children: jsxs("button", { type: "button", "data-slot": "multi-search-select-trigger", disabled: disabled, className: cn("tw:!flex tw:!w-full tw:!min-h-9 tw:!items-center tw:!justify-between tw:!gap-2 tw:!rounded-md tw:!border tw:!border-input tw:!bg-transparent tw:!px-3 tw:!py-2 tw:!text-[14px] tw:!shadow-xs tw:!outline-none", "focus-visible:tw:!border-ring focus-visible:tw:!ring-ring/50 focus-visible:tw:!ring-[3px]", "disabled:tw:!cursor-not-allowed disabled:tw:!opacity-50", className), ...props, children: [jsx("div", { className: "tw:!flex tw:!min-w-0 tw:!flex-1 tw:!flex-wrap tw:!items-center tw:!gap-1.5", children: selectedOptions.length === 0 ? (jsx("span", { className: "tw:!text-muted-foreground", children: placeholder })) : (selectedOptions.map((option) => (jsxs(Badge, { variant: "secondary", className: "tw:!max-w-full tw:!pr-1", children: [jsx("span", { className: "tw:!max-w-[140px] tw:!truncate", children: option.label }), jsx("span", { role: "button", tabIndex: -1, "aria-label": `Remove ${option.label}`, onClick: (event) => removeValue(option.value, event), className: "tw:!ml-1 tw:!inline-flex tw:!items-center tw:!justify-center", children: jsx(XIcon, { className: "tw:!size-3" }) })] }, option.value)))) }), jsx(ChevronDownIcon, { className: "tw:!size-4 tw:!shrink-0 tw:!opacity-50" })] }) }), jsx(PopoverPrimitive.Portal, { children: jsxs(PopoverPrimitive.Content, { "data-slot": "multi-search-select-content", align: "start", sideOffset: 4, className: "tw:!z-50 tw:!w-[var(--radix-popover-trigger-width)] tw:!rounded-md tw:!border tw:!bg-popover tw:!text-popover-foreground tw:!shadow-md tw:!outline-none", children: [jsxs("div", { className: "tw:!flex tw:!items-center tw:!gap-2 tw:!border-b tw:!px-3", children: [jsx(SearchIcon, { className: "tw:!size-4 tw:!shrink-0 tw:!text-muted-foreground" }), jsx("input", { type: "text", value: search, onChange: (event) => setSearch(event.target.value), placeholder: searchPlaceholder, className: "tw:!h-9 tw:!w-full tw:!bg-transparent tw:!text-[14px] tw:!outline-none placeholder:tw:!text-muted-foreground" })] }), jsx("div", { className: "tw:!max-h-72 tw:!overflow-y-auto tw:!p-1", children: filteredOptions.length === 0 ? (jsx("div", { className: "tw:!px-2 tw:!py-2 tw:!text-[14px] tw:!text-muted-foreground", children: emptyMessage })) : (filteredOptions.map((option) => {
33
+ const isSelected = value.includes(option.value);
34
+ return (jsxs("button", { type: "button", disabled: option.disabled, onClick: () => toggleValue(option.value), className: cn("tw:!flex tw:!w-full tw:!items-center tw:!gap-2 tw:!rounded-sm tw:!px-2 tw:!py-1.5 tw:!text-left tw:!text-[14px]", "hover:tw:!bg-accent hover:tw:!text-accent-foreground", option.disabled &&
35
+ "tw:!cursor-not-allowed tw:!opacity-50 hover:tw:!bg-transparent hover:tw:!text-foreground"), children: [jsx("span", { className: cn("tw:!inline-flex tw:!size-4 tw:!items-center tw:!justify-center tw:!rounded-[4px] tw:!border tw:!border-border", isSelected &&
36
+ "tw:!border-primary tw:!bg-primary tw:!text-primary-foreground"), children: isSelected ? jsx(CheckIcon, { className: "tw:!size-3" }) : null }), jsx("span", { className: "tw:!min-w-0 tw:!flex-1 tw:!truncate", children: option.label })] }, option.value));
37
+ })) })] }) })] }));
38
+ }
39
+
40
+ export { MultiSearchSelect };
@@ -0,0 +1,19 @@
1
+ import * as React from "react";
2
+ import { type AttentionKey } from "../hooks/use-invalid-attention";
3
+ export interface MultiSelectOption {
4
+ value: string;
5
+ label: string;
6
+ disabled?: boolean;
7
+ }
8
+ export interface MultiSelectProps extends Omit<React.ComponentProps<"button">, "value" | "onChange"> {
9
+ options: MultiSelectOption[];
10
+ value: string[];
11
+ onValueChange: (value: string[]) => void;
12
+ attentionKey?: AttentionKey;
13
+ placeholder?: string;
14
+ size?: "sm" | "default";
15
+ emptyMessage?: string;
16
+ }
17
+ declare function MultiSelect({ className, options, value, onValueChange, attentionKey, placeholder, size, emptyMessage, disabled, style, ...props }: MultiSelectProps): import("react/jsx-runtime").JSX.Element;
18
+ export { MultiSelect };
19
+ //# sourceMappingURL=multi-select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-select.d.ts","sourceRoot":"","sources":["../../src/components/multi-select.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,OAAO,EACL,KAAK,YAAY,EAGlB,MAAM,gCAAgC,CAAA;AAGvC,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAC5C,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,EAC9B,OAAO,GAAG,UAAU,CACrB;IACC,OAAO,EAAE,iBAAiB,EAAE,CAAA;IAC5B,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IACxC,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,OAAO,EACP,KAAK,EACL,aAAa,EACb,YAAY,EACZ,WAA8B,EAC9B,IAAgB,EAChB,YAAqC,EACrC,QAAQ,EACR,KAAK,EACL,GAAG,KAAK,EACT,EAAE,gBAAgB,2CAqIlB;AAqDD,OAAO,EAAE,WAAW,EAAE,CAAA"}
@@ -0,0 +1,87 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import * as PopoverPrimitive from '@radix-ui/react-popover';
4
+ import { ChevronDownIcon, CheckIcon } from 'lucide-react';
5
+ import { isAriaInvalid, useInvalidAttention } from '../hooks/use-invalid-attention.js';
6
+ import { cn } from '../lib/utils.js';
7
+
8
+ function MultiSelect({ className, options, value, onValueChange, attentionKey, placeholder = "Select options", size = "default", emptyMessage = "No options available", disabled, style, ...props }) {
9
+ const isInvalid = isAriaInvalid(props["aria-invalid"]);
10
+ const { attentionProps } = useInvalidAttention({
11
+ attentionKey,
12
+ invalid: isInvalid,
13
+ style,
14
+ });
15
+ const valueRef = React.useRef(null);
16
+ const selectedOptions = React.useMemo(() => options.filter((option) => value.includes(option.value)), [options, value]);
17
+ const selectedLabels = React.useMemo(() => selectedOptions.map((option) => option.label), [selectedOptions]);
18
+ const [displayValue, setDisplayValue] = React.useState("");
19
+ React.useLayoutEffect(() => {
20
+ const valueElement = valueRef.current;
21
+ if (!valueElement || selectedLabels.length === 0) {
22
+ setDisplayValue("");
23
+ return;
24
+ }
25
+ const updateDisplayValue = () => {
26
+ setDisplayValue(getCollapsedDisplayValue(selectedLabels, valueElement.clientWidth, valueElement));
27
+ };
28
+ updateDisplayValue();
29
+ if (typeof ResizeObserver === "undefined") {
30
+ return;
31
+ }
32
+ const resizeObserver = new ResizeObserver(updateDisplayValue);
33
+ resizeObserver.observe(valueElement);
34
+ return () => resizeObserver.disconnect();
35
+ }, [selectedLabels]);
36
+ function toggleValue(optionValue) {
37
+ const nextValue = value.includes(optionValue)
38
+ ? value.filter((currentValue) => currentValue !== optionValue)
39
+ : [...value, optionValue];
40
+ onValueChange(nextValue);
41
+ }
42
+ return (jsxs(PopoverPrimitive.Root, { children: [jsx(PopoverPrimitive.Trigger, { asChild: true, children: jsxs("button", { type: "button", "data-slot": "multi-select-trigger", "data-size": size, disabled: disabled, className: cn("tw:!flex tw:!w-fit tw:!min-w-0 tw:!items-center tw:!justify-between tw:!gap-2 tw:!rounded-md tw:!border tw:!border-border tw:!bg-transparent tw:!px-3 tw:!py-2 tw:!text-[14px] tw:shadow-xs tw:!transition-[color,box-shadow] tw:!outline-none", "focus-visible:tw:!border-ring focus-visible:tw:!ring-ring/50 focus-visible:tw:!ring-[3px]", "aria-invalid:tw:!border-destructive aria-invalid:tw:!ring-destructive/20 dark:aria-invalid:tw:!ring-destructive/40", "dark:tw:!bg-input/30 dark:hover:tw:!bg-input/50", "disabled:tw:!cursor-not-allowed disabled:tw:!opacity-50", "data-[size=default]:tw:!min-h-9 data-[size=sm]:tw:!min-h-8", isInvalid && "tw:!border-destructive", className), "aria-invalid": isInvalid || undefined, style: attentionProps.style, ...props, children: [jsx("span", { ref: valueRef, "data-slot": "multi-select-value", className: cn("tw:!block tw:!min-w-0 tw:!flex-1 tw:!truncate tw:!text-left", selectedOptions.length === 0 && "tw:!text-muted-foreground"), children: selectedOptions.length === 0 ? placeholder : displayValue }), jsx(ChevronDownIcon, { className: "tw:!size-4 tw:!shrink-0 tw:!opacity-50" })] }) }), jsx(PopoverPrimitive.Portal, { children: jsx(PopoverPrimitive.Content, { "data-slot": "multi-select-content", align: "start", sideOffset: 4, className: "tw:!z-50 tw:!max-h-72 tw:!min-w-[var(--radix-popover-trigger-width)] tw:!overflow-y-auto tw:!rounded-md tw:!border tw:!bg-popover tw:!p-1 tw:!text-popover-foreground tw:!shadow-md tw:!outline-none 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", children: options.length === 0 ? (jsx("div", { className: "tw:!px-2 tw:!py-1.5 tw:!text-[14px] tw:!text-muted-foreground", children: emptyMessage })) : (options.map((option) => {
43
+ const isSelected = value.includes(option.value);
44
+ return (jsxs("button", { type: "button", "data-slot": "multi-select-item", disabled: option.disabled, className: cn("tw:!relative tw:!flex tw:!w-full tw:!cursor-default tw:!items-center tw:!gap-2 tw:!rounded-sm tw:!py-1.5 tw:!pl-2 tw:!pr-8 tw:!text-left tw:!text-[14px] tw:!outline-hidden tw:!select-none tw:!transition-colors", "hover:tw:!bg-accent hover:tw:!text-accent-foreground focus:tw:!bg-accent focus:tw:!text-accent-foreground", option.disabled &&
45
+ "tw:!cursor-not-allowed tw:!bg-muted/50 tw:!text-muted-foreground tw:!opacity-60 hover:tw:!bg-muted/50 hover:tw:!text-muted-foreground"), onClick: () => toggleValue(option.value), children: [jsx("span", { className: "tw:!absolute tw:!right-2 tw:!flex tw:!size-3.5 tw:!items-center tw:!justify-center", children: isSelected ? jsx(CheckIcon, { className: "tw:!size-4" }) : null }), jsx("span", { className: "tw:!min-w-0 tw:!flex-1 tw:!truncate", children: option.label })] }, option.value));
46
+ })) }) })] }));
47
+ }
48
+ function getCollapsedDisplayValue(labels, availableWidth, valueElement) {
49
+ if (labels.length === 0) {
50
+ return "";
51
+ }
52
+ if (availableWidth <= 0) {
53
+ return labels.join(", ");
54
+ }
55
+ const fullDisplayValue = labels.join(", ");
56
+ if (measureTextWidth(fullDisplayValue, valueElement) <= availableWidth) {
57
+ return fullDisplayValue;
58
+ }
59
+ for (let visibleCount = labels.length - 1; visibleCount > 0; visibleCount--) {
60
+ const remainingCount = labels.length - visibleCount;
61
+ const displayValue = `${labels
62
+ .slice(0, visibleCount)
63
+ .join(", ")}, +${remainingCount}`;
64
+ if (measureTextWidth(displayValue, valueElement) <= availableWidth) {
65
+ return displayValue;
66
+ }
67
+ }
68
+ return `${labels.length} selected`;
69
+ }
70
+ function measureTextWidth(text, valueElement) {
71
+ if (typeof document === "undefined" || typeof window === "undefined") {
72
+ return 0;
73
+ }
74
+ const computedStyle = window.getComputedStyle(valueElement);
75
+ const measuringElement = document.createElement("span");
76
+ measuringElement.style.position = "absolute";
77
+ measuringElement.style.visibility = "hidden";
78
+ measuringElement.style.whiteSpace = "nowrap";
79
+ measuringElement.style.font = computedStyle.font;
80
+ measuringElement.textContent = text;
81
+ document.body.appendChild(measuringElement);
82
+ const width = measuringElement.getBoundingClientRect().width;
83
+ measuringElement.remove();
84
+ return width;
85
+ }
86
+
87
+ export { MultiSelect };
@@ -0,0 +1,15 @@
1
+ import * as React from "react";
2
+ import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu";
3
+ declare function NavigationMenu({ className, children, viewport, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Root> & {
4
+ viewport?: boolean;
5
+ }): import("react/jsx-runtime").JSX.Element;
6
+ declare function NavigationMenuList({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.List>): import("react/jsx-runtime").JSX.Element;
7
+ declare function NavigationMenuItem({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Item>): import("react/jsx-runtime").JSX.Element;
8
+ declare const navigationMenuTriggerStyle: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
9
+ declare function NavigationMenuTrigger({ className, children, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>): import("react/jsx-runtime").JSX.Element;
10
+ declare function NavigationMenuContent({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Content>): import("react/jsx-runtime").JSX.Element;
11
+ declare function NavigationMenuViewport({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Viewport>): import("react/jsx-runtime").JSX.Element;
12
+ declare function NavigationMenuLink({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Link>): import("react/jsx-runtime").JSX.Element;
13
+ declare function NavigationMenuIndicator({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Indicator>): import("react/jsx-runtime").JSX.Element;
14
+ export { NavigationMenu, NavigationMenuList, NavigationMenuItem, NavigationMenuContent, NavigationMenuTrigger, NavigationMenuLink, NavigationMenuIndicator, NavigationMenuViewport, navigationMenuTriggerStyle, };
15
+ //# sourceMappingURL=navigation-menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation-menu.d.ts","sourceRoot":"","sources":["../../src/components/navigation-menu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,uBAAuB,MAAM,iCAAiC,CAAA;AAM1E,iBAAS,cAAc,CAAC,EACtB,SAAS,EACT,QAAQ,EACR,QAAe,EACf,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,uBAAuB,CAAC,IAAI,CAAC,GAAG;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,2CAeA;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,uBAAuB,CAAC,IAAI,CAAC,2CAW3D;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,uBAAuB,CAAC,IAAI,CAAC,2CAQ3D;AAED,QAAA,MAAM,0BAA0B,oFAE/B,CAAA;AAED,iBAAS,qBAAqB,CAAC,EAC7B,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,uBAAuB,CAAC,OAAO,CAAC,2CAc9D;AAED,iBAAS,qBAAqB,CAAC,EAC7B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,uBAAuB,CAAC,OAAO,CAAC,2CAY9D;AAED,iBAAS,sBAAsB,CAAC,EAC9B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,uBAAuB,CAAC,QAAQ,CAAC,2CAiB/D;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,uBAAuB,CAAC,IAAI,CAAC,2CAW3D;AAED,iBAAS,uBAAuB,CAAC,EAC/B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,uBAAuB,CAAC,SAAS,CAAC,2CAahE;AAED,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,GAC3B,CAAA"}
@@ -0,0 +1,33 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';
3
+ import { cva } from 'class-variance-authority';
4
+ import { ChevronDownIcon } from 'lucide-react';
5
+ import { cn } from '../lib/utils.js';
6
+
7
+ function NavigationMenu({ className, children, viewport = true, ...props }) {
8
+ return (jsxs(NavigationMenuPrimitive.Root, { "data-slot": "navigation-menu", "data-viewport": viewport, className: cn("tw:group/navigation-menu tw:relative tw:flex tw:max-w-max tw:flex-1 tw:items-center tw:justify-center", className), ...props, children: [children, viewport && jsx(NavigationMenuViewport, {})] }));
9
+ }
10
+ function NavigationMenuList({ className, ...props }) {
11
+ return (jsx(NavigationMenuPrimitive.List, { "data-slot": "navigation-menu-list", className: cn("tw:group tw:flex tw:flex-1 tw:list-none tw:items-center tw:justify-center tw:gap-1", className), ...props }));
12
+ }
13
+ function NavigationMenuItem({ className, ...props }) {
14
+ return (jsx(NavigationMenuPrimitive.Item, { "data-slot": "navigation-menu-item", className: cn("tw:relative", className), ...props }));
15
+ }
16
+ const navigationMenuTriggerStyle = cva("tw:group tw:inline-flex tw:h-9 tw:w-max tw:items-center tw:justify-center tw:rounded-md tw:bg-background tw:px-4 tw:py-2 tw:text-sm tw:font-medium hover:tw:bg-accent hover:tw:text-accent-foreground focus:tw:bg-accent focus:tw:text-accent-foreground disabled:tw:pointer-events-none disabled:tw:opacity-50 data-[state=open]:hover:tw:bg-accent data-[state=open]:tw:text-accent-foreground data-[state=open]:focus:tw:bg-accent data-[state=open]:tw:bg-accent/50 focus-visible:tw:ring-ring/50 tw:outline-none tw:transition-[color,box-shadow] focus-visible:tw:ring-[3px] focus-visible:tw:outline-1");
17
+ function NavigationMenuTrigger({ className, children, ...props }) {
18
+ return (jsxs(NavigationMenuPrimitive.Trigger, { "data-slot": "navigation-menu-trigger", className: cn(navigationMenuTriggerStyle(), "tw:group", className), ...props, children: [children, " ", jsx(ChevronDownIcon, { className: "tw:relative tw:top-[1px] tw:ml-1 tw:size-3 tw:transition tw:duration-300 group-data-[state=open]:tw:rotate-180", "aria-hidden": "true" })] }));
19
+ }
20
+ function NavigationMenuContent({ className, ...props }) {
21
+ return (jsx(NavigationMenuPrimitive.Content, { "data-slot": "navigation-menu-content", className: cn("data-[motion^=from-]:tw:animate-in data-[motion^=to-]:tw:animate-out data-[motion^=from-]:tw:fade-in data-[motion^=to-]:tw:fade-out data-[motion=from-end]:tw:slide-in-from-right-52 data-[motion=from-start]:tw:slide-in-from-left-52 data-[motion=to-end]:tw:slide-out-to-right-52 data-[motion=to-start]:tw:slide-out-to-left-52 tw:top-0 tw:left-0 tw:w-full tw:p-2 tw:pr-2.5 md:tw:absolute md:tw:w-auto", "group-data-[viewport=false]/navigation-menu:tw:bg-popover group-data-[viewport=false]/navigation-menu:tw:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:tw:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:tw:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:tw:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:tw:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:tw:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:tw:fade-out-0 group-data-[viewport=false]/navigation-menu:tw:top-full group-data-[viewport=false]/navigation-menu:tw:mt-1.5 group-data-[viewport=false]/navigation-menu:tw:overflow-hidden group-data-[viewport=false]/navigation-menu:tw:rounded-md group-data-[viewport=false]/navigation-menu:tw:border group-data-[viewport=false]/navigation-menu:tw:shadow group-data-[viewport=false]/navigation-menu:tw:duration-200 **:data-[slot=navigation-menu-link]:focus:tw:ring-0 **:data-[slot=navigation-menu-link]:focus:tw:outline-none", className), ...props }));
22
+ }
23
+ function NavigationMenuViewport({ className, ...props }) {
24
+ return (jsx("div", { className: cn("tw:absolute tw:top-full tw:left-0 tw:isolate tw:z-50 tw:flex tw:justify-center"), children: jsx(NavigationMenuPrimitive.Viewport, { "data-slot": "navigation-menu-viewport", className: cn("tw:origin-top-center tw:bg-popover tw:text-popover-foreground data-[state=open]:tw:animate-in data-[state=closed]:tw:animate-out data-[state=closed]:tw:zoom-out-95 data-[state=open]:tw:zoom-in-90 tw:relative tw:mt-1.5 tw:h-[var(--radix-navigation-menu-viewport-height)] tw:w-full tw:overflow-hidden tw:rounded-md tw:border tw:shadow md:tw:w-[var(--radix-navigation-menu-viewport-width)]", className), ...props }) }));
25
+ }
26
+ function NavigationMenuLink({ className, ...props }) {
27
+ return (jsx(NavigationMenuPrimitive.Link, { "data-slot": "navigation-menu-link", className: cn("data-[active=true]:focus:tw:bg-accent data-[active=true]:hover:tw:bg-accent data-[active=true]:tw:bg-accent/50 data-[active=true]:tw:text-accent-foreground hover:tw:bg-accent hover:tw:text-accent-foreground focus:tw:bg-accent focus:tw:text-accent-foreground focus-visible:tw:ring-ring/50 tw:[&_svg:not([class*='text-'])]:text-muted-foreground tw:flex tw:flex-col tw:gap-1 tw:rounded-sm tw:p-2 tw:text-sm tw:transition-all tw:outline-none focus-visible:tw:ring-[3px] focus-visible:tw:outline-1 tw:[&_svg:not([class*='size-'])]:size-4", className), ...props }));
28
+ }
29
+ function NavigationMenuIndicator({ className, ...props }) {
30
+ return (jsx(NavigationMenuPrimitive.Indicator, { "data-slot": "navigation-menu-indicator", className: cn("data-[state=visible]:tw:animate-in data-[state=hidden]:tw:animate-out data-[state=hidden]:tw:fade-out data-[state=visible]:tw:fade-in tw:top-full tw:z-[1] tw:flex tw:h-1.5 tw:items-end tw:justify-center tw:overflow-hidden", className), ...props, children: jsx("div", { className: "tw:bg-border tw:relative tw:top-[60%] tw:h-2 tw:w-2 tw:rotate-45 tw:rounded-tl-sm tw:shadow-md" }) }));
31
+ }
32
+
33
+ export { NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, navigationMenuTriggerStyle };
@@ -0,0 +1,9 @@
1
+ import type { PageHeaderAction, PageHeaderOverflowItem } from "./types";
2
+ declare function PageHeaderActions({ actions, primaryAction, secondaryAction, overflowMenu, }: {
3
+ actions?: React.ReactNode;
4
+ primaryAction?: PageHeaderAction;
5
+ secondaryAction?: PageHeaderAction;
6
+ overflowMenu?: PageHeaderOverflowItem[];
7
+ }): import("react/jsx-runtime").JSX.Element | null;
8
+ export { PageHeaderActions };
9
+ //# sourceMappingURL=actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/components/page-header/actions.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAuBvE,iBAAS,iBAAiB,CAAC,EACzB,OAAO,EACP,aAAa,EACb,eAAe,EACf,YAAY,GACb,EAAE;IACD,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,aAAa,CAAC,EAAE,gBAAgB,CAAA;IAChC,eAAe,CAAC,EAAE,gBAAgB,CAAA;IAClC,YAAY,CAAC,EAAE,sBAAsB,EAAE,CAAA;CACxC,kDAkDA;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import { MoreHorizontalIcon } from 'lucide-react';
3
+ import { Button } from '../button.js';
4
+ import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from '../dropdown-menu.js';
5
+ import { cn } from '../../lib/utils.js';
6
+ import { getTextContent } from './utils.js';
7
+
8
+ function PageHeaderActionButton({ label, icon, variant = "default", "aria-label": ariaLabel, ...props }) {
9
+ return (jsxs(Button, { variant: variant, "aria-label": ariaLabel ?? (icon ? getTextContent(label) : undefined), ...props, children: [icon, jsx("span", { className: cn(icon && "tw:hidden tw:sm:inline-flex"), children: label })] }));
10
+ }
11
+ function PageHeaderActions({ actions, primaryAction, secondaryAction, overflowMenu, }) {
12
+ const hasDefaultActions = Boolean(primaryAction) ||
13
+ Boolean(secondaryAction) ||
14
+ Boolean(overflowMenu?.length);
15
+ if (!actions && !hasDefaultActions) {
16
+ return null;
17
+ }
18
+ return (jsx("div", { "data-slot": "page-header-actions", className: "tw:flex tw:shrink-0 tw:items-center tw:gap-2", children: actions ? (actions) : (jsxs(Fragment, { children: [secondaryAction ? (jsx(PageHeaderActionButton, { variant: "secondary", ...secondaryAction })) : null, primaryAction ? jsx(PageHeaderActionButton, { ...primaryAction }) : null, overflowMenu?.length ? (jsxs(DropdownMenu, { children: [jsx(DropdownMenuTrigger, { asChild: true, children: jsx(Button, { type: "button", variant: "outline", size: "icon", "aria-label": "More actions", "aria-haspopup": "menu", children: jsx(MoreHorizontalIcon, { className: "tw:size-4" }) }) }), jsx(DropdownMenuContent, { align: "end", children: overflowMenu.map(({ label, icon, ...item }, index) => (jsxs(DropdownMenuItem, { ...item, children: [icon, label] }, index))) })] })) : null] })) }));
19
+ }
20
+
21
+ export { PageHeaderActions };
@@ -0,0 +1,33 @@
1
+ import * as React from "react";
2
+ import { Button } from "../button";
3
+ import { DropdownMenuItem } from "../dropdown-menu";
4
+ type PageHeaderAction = Omit<React.ComponentProps<typeof Button>, "children"> & {
5
+ label: React.ReactNode;
6
+ icon?: React.ReactNode;
7
+ };
8
+ type PageHeaderOverflowItem = Omit<React.ComponentProps<typeof DropdownMenuItem>, "children"> & {
9
+ label: React.ReactNode;
10
+ icon?: React.ReactNode;
11
+ };
12
+ type PageHeaderBaseProps = Omit<React.ComponentProps<"section">, "title"> & {
13
+ title: string;
14
+ subtitle?: string;
15
+ variant?: "card" | "plain";
16
+ actions?: React.ReactNode;
17
+ primaryAction?: PageHeaderAction;
18
+ secondaryAction?: PageHeaderAction;
19
+ overflowMenu?: PageHeaderOverflowItem[];
20
+ as?: "h1" | "h2";
21
+ };
22
+ type PageHeaderLeadingProps = {
23
+ showBackButton: true;
24
+ onBack: () => void;
25
+ icon?: React.ReactNode;
26
+ } | {
27
+ showBackButton?: false;
28
+ onBack?: never;
29
+ icon?: React.ReactNode;
30
+ };
31
+ type PageHeaderProps = PageHeaderBaseProps & PageHeaderLeadingProps;
32
+ export type { PageHeaderAction, PageHeaderOverflowItem, PageHeaderProps, };
33
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/page-header/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAEnD,KAAK,gBAAgB,GAAG,IAAI,CAC1B,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EACnC,UAAU,CACX,GAAG;IACF,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACvB,CAAA;AAED,KAAK,sBAAsB,GAAG,IAAI,CAChC,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,EAC7C,UAAU,CACX,GAAG;IACF,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACvB,CAAA;AAED,KAAK,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,GAAG;IAC1E,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IAC1B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,aAAa,CAAC,EAAE,gBAAgB,CAAA;IAChC,eAAe,CAAC,EAAE,gBAAgB,CAAA;IAClC,YAAY,CAAC,EAAE,sBAAsB,EAAE,CAAA;IACvC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;CACjB,CAAA;AAED,KAAK,sBAAsB,GACvB;IACE,cAAc,EAAE,IAAI,CAAA;IACpB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACvB,GACD;IACE,cAAc,CAAC,EAAE,KAAK,CAAA;IACtB,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACvB,CAAA;AAEL,KAAK,eAAe,GAAG,mBAAmB,GAAG,sBAAsB,CAAA;AAEnE,YAAY,EACV,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,GAChB,CAAA"}
@@ -0,0 +1,4 @@
1
+ import * as React from "react";
2
+ declare function getTextContent(node: React.ReactNode): string | undefined;
3
+ export { getTextContent };
4
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/page-header/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,iBAAS,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,GAAG,SAAS,CAejE;AAED,OAAO,EAAE,cAAc,EAAE,CAAA"}
@@ -0,0 +1,17 @@
1
+ import * as React from 'react';
2
+
3
+ function getTextContent(node) {
4
+ if (typeof node === "string" || typeof node === "number") {
5
+ return String(node);
6
+ }
7
+ if (Array.isArray(node)) {
8
+ const text = node.map(getTextContent).filter(Boolean).join(" ").trim();
9
+ return text || undefined;
10
+ }
11
+ if (React.isValidElement(node)) {
12
+ return getTextContent(node.props.children);
13
+ }
14
+ return undefined;
15
+ }
16
+
17
+ export { getTextContent };
@@ -0,0 +1,4 @@
1
+ import type { PageHeaderAction, PageHeaderOverflowItem, PageHeaderProps } from "./page-header/types";
2
+ declare function PageHeader({ className, title, subtitle, variant, showBackButton, onBack, icon, actions, primaryAction, secondaryAction, overflowMenu, as: Heading, ...props }: PageHeaderProps): import("react/jsx-runtime").JSX.Element;
3
+ export { PageHeader, type PageHeaderAction, type PageHeaderOverflowItem, type PageHeaderProps, };
4
+ //# sourceMappingURL=page-header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-header.d.ts","sourceRoot":"","sources":["../../src/components/page-header.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EAChB,MAAM,qBAAqB,CAAA;AAE5B,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,KAAK,EACL,QAAQ,EACR,OAAgB,EAChB,cAAsB,EACtB,MAAM,EACN,IAAI,EACJ,OAAO,EACP,aAAa,EACb,eAAe,EACf,YAAY,EACZ,EAAE,EAAE,OAAc,EAClB,GAAG,KAAK,EACT,EAAE,eAAe,2CA6DjB;AAED,OAAO,EACL,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,GACrB,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { ArrowLeftIcon } from 'lucide-react';
3
+ import { Button } from './button.js';
4
+ import { cn } from '../lib/utils.js';
5
+ import { PageHeaderActions } from './page-header/actions.js';
6
+
7
+ function PageHeader({ className, title, subtitle, variant = "card", showBackButton = false, onBack, icon, actions, primaryAction, secondaryAction, overflowMenu, as: Heading = "h1", ...props }) {
8
+ return (jsxs("section", { "data-slot": "page-header", className: cn("tw:text-card-foreground tw:flex tw:items-center tw:justify-between tw:gap-4", variant === "card" &&
9
+ "tw:bg-card tw:rounded-xl tw:border tw:px-5 tw:py-4 tw:shadow-sm", className), ...props, children: [jsxs("div", { className: "tw:flex tw:min-w-0 tw:flex-1 tw:items-center tw:gap-4", children: [showBackButton ? (jsx(Button, { type: "button", variant: "outline", size: "icon", "aria-label": "Go back", onClick: onBack, className: "tw:!size-12 tw:shrink-0 tw:rounded-[10px]", children: jsx(ArrowLeftIcon, { className: "tw:size-4" }) })) : icon ? (jsx("div", { "data-slot": "page-header-icon", "aria-hidden": "true", className: "tw:bg-background tw:text-muted-foreground tw:flex tw:size-12 tw:shrink-0 tw:items-center tw:justify-center tw:rounded-[10px] tw:border", children: icon })) : null, jsxs("div", { "data-slot": "page-header-content", className: "tw:min-w-0 tw:flex-1", children: [jsx(Heading, { "data-slot": "page-header-title", className: "tw:truncate tw:text-[21px] tw:leading-7 tw:font-bold", children: title }), subtitle ? (jsx("p", { "data-slot": "page-header-subtitle", className: "tw:text-page-header-subtitle tw:mt-1 tw:truncate tw:text-sm", children: subtitle })) : null] })] }), jsx(PageHeaderActions, { actions: actions, primaryAction: primaryAction, secondaryAction: secondaryAction, overflowMenu: overflowMenu })] }));
10
+ }
11
+
12
+ export { PageHeader };
@@ -0,0 +1,14 @@
1
+ import * as React from "react";
2
+ import { Button } from "../components/button";
3
+ declare function Pagination({ className, ...props }: React.ComponentProps<"nav">): import("react/jsx-runtime").JSX.Element;
4
+ declare function PaginationContent({ className, ...props }: React.ComponentProps<"ul">): import("react/jsx-runtime").JSX.Element;
5
+ declare function PaginationItem({ ...props }: React.ComponentProps<"li">): import("react/jsx-runtime").JSX.Element;
6
+ type PaginationLinkProps = {
7
+ isActive?: boolean;
8
+ } & Pick<React.ComponentProps<typeof Button>, "size"> & React.ComponentProps<"a">;
9
+ declare function PaginationLink({ className, isActive, size, ...props }: PaginationLinkProps): import("react/jsx-runtime").JSX.Element;
10
+ declare function PaginationPrevious({ className, ...props }: React.ComponentProps<typeof PaginationLink>): import("react/jsx-runtime").JSX.Element;
11
+ declare function PaginationNext({ className, ...props }: React.ComponentProps<typeof PaginationLink>): import("react/jsx-runtime").JSX.Element;
12
+ declare function PaginationEllipsis({ className, ...props }: React.ComponentProps<"span">): import("react/jsx-runtime").JSX.Element;
13
+ export { Pagination, PaginationContent, PaginationLink, PaginationItem, PaginationPrevious, PaginationNext, PaginationEllipsis, };
14
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/components/pagination.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAQ9B,OAAO,EAAE,MAAM,EAAkB,MAAM,sBAAsB,CAAA;AAE7D,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAavE;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,2CAW5B;AAED,iBAAS,cAAc,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,2CAE/D;AAED,KAAK,mBAAmB,GAAG;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EAAE,MAAM,CAAC,GACnD,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;AAE3B,iBAAS,cAAc,CAAC,EACtB,SAAS,EACT,QAAQ,EACR,IAAa,EACb,GAAG,KAAK,EACT,EAAE,mBAAmB,2CAkBrB;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,2CAe7C;AAED,iBAAS,cAAc,CAAC,EACtB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,2CAY7C;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,2CAe9B;AAED,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,kBAAkB,GACnB,CAAA"}
@@ -0,0 +1,31 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { MoreHorizontalIcon, ChevronRightIcon, ChevronLeftIcon } from 'lucide-react';
3
+ import { cn } from '../lib/utils.js';
4
+ import { buttonVariants } from './button.js';
5
+
6
+ function Pagination({ className, ...props }) {
7
+ return (jsx("nav", { role: "navigation", "aria-label": "pagination", "data-slot": "pagination", className: cn("tw:!mx-auto tw:!flex tw:!w-full tw:!justify-end", className), ...props }));
8
+ }
9
+ function PaginationContent({ className, ...props }) {
10
+ return (jsx("ul", { "data-slot": "pagination-content", className: cn("tw:!flex tw:!flex-row tw:!items-center tw:!gap-1", className), ...props }));
11
+ }
12
+ function PaginationItem({ ...props }) {
13
+ return jsx("li", { "data-slot": "pagination-item", ...props });
14
+ }
15
+ function PaginationLink({ className, isActive, size = "icon", ...props }) {
16
+ return (jsx("a", { "aria-current": isActive ? "page" : undefined, "data-slot": "pagination-link", "data-active": isActive, className: cn(buttonVariants({
17
+ variant: isActive ? "outline" : "ghost",
18
+ size,
19
+ }), "tw:!text-foreground tw:!text-[14px] tw:!no-underline hover:tw:!bg-accent hover:tw:!text-accent-foreground data-[active=true]:tw:!text-accent-foreground data-[active=true]:tw:!border data-[active=true]:tw:!border-input tw:!h-[32px]", size === "icon" && "tw:!w-[32px]", className), ...props }));
20
+ }
21
+ function PaginationPrevious({ className, ...props }) {
22
+ return (jsxs(PaginationLink, { "aria-label": "Go to previous page", size: "default", className: cn("tw:!gap-1 tw:!px-2.5 sm:tw:!pl-2.5 tw:!h-[32px]", className), ...props, children: [jsx(ChevronLeftIcon, { className: "tw:!size-4" }), jsx("span", { className: "tw:!hidden sm:tw:!block", children: "Previous" })] }));
23
+ }
24
+ function PaginationNext({ className, ...props }) {
25
+ return (jsxs(PaginationLink, { "aria-label": "Go to next page", size: "default", className: cn("tw:!gap-1 tw:!px-2.5 sm:tw:!pr-2.5 tw:!h-8", className), ...props, children: [jsx("span", { className: "tw:!hidden sm:tw:!block", children: "Next" }), jsx(ChevronRightIcon, { className: "tw:!size-4" })] }));
26
+ }
27
+ function PaginationEllipsis({ className, ...props }) {
28
+ return (jsxs("span", { "aria-hidden": true, "data-slot": "pagination-ellipsis", className: cn("tw:!flex tw:!size-9 tw:!items-center tw:!justify-center", className), ...props, children: [jsx(MoreHorizontalIcon, { className: "tw:!size-4" }), jsx("span", { className: "tw:sr-only", children: "More pages" })] }));
29
+ }
30
+
31
+ export { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious };
@@ -0,0 +1,8 @@
1
+ import * as React from "react";
2
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
3
+ declare function Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
4
+ declare function PopoverTrigger({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Trigger>): import("react/jsx-runtime").JSX.Element;
5
+ declare function PopoverContent({ className, align, sideOffset, ...props }: React.ComponentProps<typeof PopoverPrimitive.Content>): import("react/jsx-runtime").JSX.Element;
6
+ declare function PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>): import("react/jsx-runtime").JSX.Element;
7
+ export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };
8
+ //# sourceMappingURL=popover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../../src/components/popover.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAA;AAI3D,iBAAS,OAAO,CAAC,EACf,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC,2CAEpD;AAED,iBAAS,cAAc,CAAC,EACtB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,2CAEvD;AAED,iBAAS,cAAc,CAAC,EACtB,SAAS,EACT,KAAgB,EAChB,UAAc,EACd,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,2CAevD;AAED,iBAAS,aAAa,CAAC,EACrB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,MAAM,CAAC,2CAEtD;AAED,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,CAAA"}
@@ -0,0 +1,18 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import * as PopoverPrimitive from '@radix-ui/react-popover';
3
+ import { cn } from '../lib/utils.js';
4
+
5
+ function Popover({ ...props }) {
6
+ return jsx(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
7
+ }
8
+ function PopoverTrigger({ ...props }) {
9
+ return jsx(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
10
+ }
11
+ function PopoverContent({ className, align = "center", sideOffset = 4, ...props }) {
12
+ return (jsx(PopoverPrimitive.Portal, { children: jsx(PopoverPrimitive.Content, { "data-slot": "popover-content", align: align, 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:!w-72 tw:!origin-(--radix-popover-content-transform-origin) tw:!rounded-md tw:!border tw:!p-4 tw:!shadow-md tw:!outline-hidden", className), ...props }) }));
13
+ }
14
+ function PopoverAnchor({ ...props }) {
15
+ return jsx(PopoverPrimitive.Anchor, { "data-slot": "popover-anchor", ...props });
16
+ }
17
+
18
+ export { Popover, PopoverAnchor, PopoverContent, PopoverTrigger };
@@ -0,0 +1,5 @@
1
+ import * as React from "react";
2
+ import * as ProgressPrimitive from "@radix-ui/react-progress";
3
+ declare function Progress({ className, value, ...props }: React.ComponentProps<typeof ProgressPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
4
+ export { Progress };
5
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/components/progress.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,iBAAiB,MAAM,0BAA0B,CAAA;AAI7D,iBAAS,QAAQ,CAAC,EAChB,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC,2CAiBrD;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import * as ProgressPrimitive from '@radix-ui/react-progress';
3
+ import { cn } from '../lib/utils.js';
4
+
5
+ function Progress({ className, value, ...props }) {
6
+ return (jsx(ProgressPrimitive.Root, { "data-slot": "progress", className: cn("tw:bg-primary/20 tw:relative tw:h-2 tw:w-full tw:overflow-hidden tw:rounded-full", className), ...props, children: jsx(ProgressPrimitive.Indicator, { "data-slot": "progress-indicator", className: "tw:bg-primary tw:h-full tw:w-full tw:flex-1 tw:transition-all", style: { transform: `translateX(-${100 - (value || 0)}%)` } }) }));
7
+ }
8
+
9
+ export { Progress };
@@ -0,0 +1,6 @@
1
+ import * as React from "react";
2
+ import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
3
+ declare function RadioGroup({ className, ...props }: React.ComponentProps<typeof RadioGroupPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
4
+ declare function RadioGroupItem({ className, ...props }: React.ComponentProps<typeof RadioGroupPrimitive.Item>): import("react/jsx-runtime").JSX.Element;
5
+ export { RadioGroup, RadioGroupItem };
6
+ //# sourceMappingURL=radio-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio-group.d.ts","sourceRoot":"","sources":["../../src/components/radio-group.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,mBAAmB,MAAM,6BAA6B,CAAA;AAKlE,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,mBAAmB,CAAC,IAAI,CAAC,2CAQvD;AAED,iBAAS,cAAc,CAAC,EACtB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,mBAAmB,CAAC,IAAI,CAAC,2CAkBvD;AAED,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
3
+ import { CircleIcon } from 'lucide-react';
4
+ import { cn } from '../lib/utils.js';
5
+
6
+ function RadioGroup({ className, ...props }) {
7
+ return (jsx(RadioGroupPrimitive.Root, { "data-slot": "radio-group", className: cn("tw:grid tw:gap-3", className), ...props }));
8
+ }
9
+ function RadioGroupItem({ className, ...props }) {
10
+ return (jsx(RadioGroupPrimitive.Item, { "data-slot": "radio-group-item", className: cn("tw:border-input tw:text-primary tw:focus-visible:border-ring tw:focus-visible:ring-ring/50 tw:aria-invalid:ring-destructive/20 tw:dark:aria-invalid:ring-destructive/40 tw:aria-invalid:border-destructive tw:dark:bg-input/30 tw:aspect-square tw:size-4 tw:shrink-0 tw:rounded-full tw:border tw:shadow-xs tw:transition-[color,box-shadow] tw:outline-none tw:focus-visible:ring-[3px] tw:disabled:cursor-not-allowed tw:disabled:opacity-50", className), ...props, children: jsx(RadioGroupPrimitive.Indicator, { "data-slot": "radio-group-indicator", className: "tw:relative tw:flex tw:items-center tw:justify-center", children: jsx(CircleIcon, { className: "tw:fill-primary tw:absolute tw:top-1/2 tw:left-1/2 tw:size-2 tw:-translate-x-1/2 tw:-translate-y-1/2" }) }) }));
11
+ }
12
+
13
+ export { RadioGroup, RadioGroupItem };
@@ -0,0 +1,9 @@
1
+ import * as React from "react";
2
+ import { Group as ResizablePanelGroupPrimitive, Panel as ResizablePanelPrimitive, Separator as ResizableHandlePrimitive } from "react-resizable-panels";
3
+ declare function ResizablePanelGroup({ className, ...props }: React.ComponentProps<typeof ResizablePanelGroupPrimitive>): import("react/jsx-runtime").JSX.Element;
4
+ declare function ResizablePanel({ ...props }: React.ComponentProps<typeof ResizablePanelPrimitive>): import("react/jsx-runtime").JSX.Element;
5
+ declare function ResizableHandle({ withHandle, className, ...props }: React.ComponentProps<typeof ResizableHandlePrimitive> & {
6
+ withHandle?: boolean;
7
+ }): import("react/jsx-runtime").JSX.Element;
8
+ export { ResizablePanelGroup, ResizablePanel, ResizableHandle };
9
+ //# sourceMappingURL=resizable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resizable.d.ts","sourceRoot":"","sources":["../../src/components/resizable.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EACL,KAAK,IAAI,4BAA4B,EACrC,KAAK,IAAI,uBAAuB,EAChC,SAAS,IAAI,wBAAwB,EACtC,MAAM,wBAAwB,CAAA;AAI/B,iBAAS,mBAAmB,CAAC,EAC3B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,4BAA4B,CAAC,2CAW3D;AAED,iBAAS,cAAc,CAAC,EACtB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,uBAAuB,CAAC,2CAEtD;AAED,iBAAS,eAAe,CAAC,EACvB,UAAU,EACV,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,wBAAwB,CAAC,GAAG;IACzD,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,2CAiBA;AAED,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,eAAe,EAAE,CAAA"}