@nuvia/components 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/README.md +96 -0
  2. package/dist/hooks/use-mobile.cjs +44 -0
  3. package/dist/hooks/use-mobile.cjs.map +1 -0
  4. package/dist/hooks/use-mobile.js +22 -0
  5. package/dist/hooks/use-mobile.js.map +1 -0
  6. package/dist/hooks/use-toast.cjs +146 -0
  7. package/dist/hooks/use-toast.cjs.map +1 -0
  8. package/dist/hooks/use-toast.js +122 -0
  9. package/dist/hooks/use-toast.js.map +1 -0
  10. package/dist/index.cjs +4117 -0
  11. package/dist/index.cjs.map +1 -0
  12. package/dist/index.js +3800 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/lib/fonts.cjs +15 -0
  15. package/dist/lib/fonts.cjs.map +1 -0
  16. package/dist/lib/fonts.js +13 -0
  17. package/dist/lib/fonts.js.map +1 -0
  18. package/dist/lib/utils.cjs +18 -0
  19. package/dist/lib/utils.cjs.map +1 -0
  20. package/dist/lib/utils.js +14 -0
  21. package/dist/lib/utils.js.map +1 -0
  22. package/dist/providers/theme.cjs +24 -0
  23. package/dist/providers/theme.cjs.map +1 -0
  24. package/dist/providers/theme.js +22 -0
  25. package/dist/providers/theme.js.map +1 -0
  26. package/dist/ui/accordion.cjs +75 -0
  27. package/dist/ui/accordion.cjs.map +1 -0
  28. package/dist/ui/accordion.js +49 -0
  29. package/dist/ui/accordion.js.map +1 -0
  30. package/dist/ui/alert-dialog.cjs +189 -0
  31. package/dist/ui/alert-dialog.cjs.map +1 -0
  32. package/dist/ui/alert-dialog.js +156 -0
  33. package/dist/ui/alert-dialog.js.map +1 -0
  34. package/dist/ui/alert.cjs +81 -0
  35. package/dist/ui/alert.cjs.map +1 -0
  36. package/dist/ui/alert.js +57 -0
  37. package/dist/ui/alert.js.map +1 -0
  38. package/dist/ui/aspect-ratio.cjs +29 -0
  39. package/dist/ui/aspect-ratio.cjs.map +1 -0
  40. package/dist/ui/aspect-ratio.js +7 -0
  41. package/dist/ui/aspect-ratio.js.map +1 -0
  42. package/dist/ui/auto-complete.cjs +284 -0
  43. package/dist/ui/auto-complete.cjs.map +1 -0
  44. package/dist/ui/auto-complete.js +262 -0
  45. package/dist/ui/auto-complete.js.map +1 -0
  46. package/dist/ui/avatar.cjs +70 -0
  47. package/dist/ui/avatar.cjs.map +1 -0
  48. package/dist/ui/avatar.js +45 -0
  49. package/dist/ui/avatar.js.map +1 -0
  50. package/dist/ui/badge.cjs +34 -0
  51. package/dist/ui/badge.cjs.map +1 -0
  52. package/dist/ui/badge.js +31 -0
  53. package/dist/ui/badge.js.map +1 -0
  54. package/dist/ui/breadcrumb.cjs +120 -0
  55. package/dist/ui/breadcrumb.cjs.map +1 -0
  56. package/dist/ui/breadcrumb.js +92 -0
  57. package/dist/ui/breadcrumb.js.map +1 -0
  58. package/dist/ui/button.cjs +80 -0
  59. package/dist/ui/button.cjs.map +1 -0
  60. package/dist/ui/button.js +57 -0
  61. package/dist/ui/button.js.map +1 -0
  62. package/dist/ui/calendar.cjs +135 -0
  63. package/dist/ui/calendar.cjs.map +1 -0
  64. package/dist/ui/calendar.js +113 -0
  65. package/dist/ui/calendar.js.map +1 -0
  66. package/dist/ui/card.cjs +89 -0
  67. package/dist/ui/card.cjs.map +1 -0
  68. package/dist/ui/card.js +62 -0
  69. package/dist/ui/card.js.map +1 -0
  70. package/dist/ui/carousel.cjs +269 -0
  71. package/dist/ui/carousel.cjs.map +1 -0
  72. package/dist/ui/carousel.js +240 -0
  73. package/dist/ui/carousel.js.map +1 -0
  74. package/dist/ui/chart.cjs +267 -0
  75. package/dist/ui/chart.cjs.map +1 -0
  76. package/dist/ui/chart.js +239 -0
  77. package/dist/ui/chart.js.map +1 -0
  78. package/dist/ui/checkbox.cjs +55 -0
  79. package/dist/ui/checkbox.cjs.map +1 -0
  80. package/dist/ui/checkbox.js +32 -0
  81. package/dist/ui/checkbox.js.map +1 -0
  82. package/dist/ui/chip.cjs +79 -0
  83. package/dist/ui/chip.cjs.map +1 -0
  84. package/dist/ui/chip.js +55 -0
  85. package/dist/ui/chip.js.map +1 -0
  86. package/dist/ui/collapsible.cjs +33 -0
  87. package/dist/ui/collapsible.cjs.map +1 -0
  88. package/dist/ui/collapsible.js +9 -0
  89. package/dist/ui/collapsible.js.map +1 -0
  90. package/dist/ui/combobox.cjs +254 -0
  91. package/dist/ui/combobox.cjs.map +1 -0
  92. package/dist/ui/combobox.js +232 -0
  93. package/dist/ui/combobox.js.map +1 -0
  94. package/dist/ui/command.cjs +199 -0
  95. package/dist/ui/command.cjs.map +1 -0
  96. package/dist/ui/command.js +168 -0
  97. package/dist/ui/command.js.map +1 -0
  98. package/dist/ui/context-menu.cjs +181 -0
  99. package/dist/ui/context-menu.cjs.map +1 -0
  100. package/dist/ui/context-menu.js +144 -0
  101. package/dist/ui/context-menu.js.map +1 -0
  102. package/dist/ui/dialog.cjs +132 -0
  103. package/dist/ui/dialog.cjs.map +1 -0
  104. package/dist/ui/dialog.js +100 -0
  105. package/dist/ui/dialog.js.map +1 -0
  106. package/dist/ui/drawer.cjs +128 -0
  107. package/dist/ui/drawer.cjs.map +1 -0
  108. package/dist/ui/drawer.js +97 -0
  109. package/dist/ui/drawer.js.map +1 -0
  110. package/dist/ui/dropdown-menu.cjs +194 -0
  111. package/dist/ui/dropdown-menu.cjs.map +1 -0
  112. package/dist/ui/dropdown-menu.js +157 -0
  113. package/dist/ui/dropdown-menu.js.map +1 -0
  114. package/dist/ui/form.cjs +179 -0
  115. package/dist/ui/form.cjs.map +1 -0
  116. package/dist/ui/form.js +149 -0
  117. package/dist/ui/form.js.map +1 -0
  118. package/dist/ui/hover-card.cjs +53 -0
  119. package/dist/ui/hover-card.cjs.map +1 -0
  120. package/dist/ui/hover-card.js +28 -0
  121. package/dist/ui/hover-card.js.map +1 -0
  122. package/dist/ui/input-otp.cjs +76 -0
  123. package/dist/ui/input-otp.cjs.map +1 -0
  124. package/dist/ui/input-otp.js +51 -0
  125. package/dist/ui/input-otp.js.map +1 -0
  126. package/dist/ui/input.cjs +51 -0
  127. package/dist/ui/input.cjs.map +1 -0
  128. package/dist/ui/input.js +29 -0
  129. package/dist/ui/input.js.map +1 -0
  130. package/dist/ui/label.cjs +55 -0
  131. package/dist/ui/label.cjs.map +1 -0
  132. package/dist/ui/label.js +32 -0
  133. package/dist/ui/label.js.map +1 -0
  134. package/dist/ui/lottie-animation.cjs +85 -0
  135. package/dist/ui/lottie-animation.cjs.map +1 -0
  136. package/dist/ui/lottie-animation.js +79 -0
  137. package/dist/ui/lottie-animation.js.map +1 -0
  138. package/dist/ui/menubar.cjs +210 -0
  139. package/dist/ui/menubar.cjs.map +1 -0
  140. package/dist/ui/menubar.js +172 -0
  141. package/dist/ui/menubar.js.map +1 -0
  142. package/dist/ui/multi-combobox.cjs +319 -0
  143. package/dist/ui/multi-combobox.cjs.map +1 -0
  144. package/dist/ui/multi-combobox.js +297 -0
  145. package/dist/ui/multi-combobox.js.map +1 -0
  146. package/dist/ui/navigation-menu.cjs +136 -0
  147. package/dist/ui/navigation-menu.cjs.map +1 -0
  148. package/dist/ui/navigation-menu.js +105 -0
  149. package/dist/ui/navigation-menu.js.map +1 -0
  150. package/dist/ui/pagination.cjs +172 -0
  151. package/dist/ui/pagination.cjs.map +1 -0
  152. package/dist/ui/pagination.js +144 -0
  153. package/dist/ui/pagination.js.map +1 -0
  154. package/dist/ui/popover.cjs +55 -0
  155. package/dist/ui/popover.cjs.map +1 -0
  156. package/dist/ui/popover.js +29 -0
  157. package/dist/ui/popover.js.map +1 -0
  158. package/dist/ui/progress.cjs +54 -0
  159. package/dist/ui/progress.cjs.map +1 -0
  160. package/dist/ui/progress.js +31 -0
  161. package/dist/ui/progress.js.map +1 -0
  162. package/dist/ui/radio-group.cjs +62 -0
  163. package/dist/ui/radio-group.cjs.map +1 -0
  164. package/dist/ui/radio-group.js +38 -0
  165. package/dist/ui/radio-group.js.map +1 -0
  166. package/dist/ui/resizable.cjs +65 -0
  167. package/dist/ui/resizable.cjs.map +1 -0
  168. package/dist/ui/resizable.js +41 -0
  169. package/dist/ui/resizable.js.map +1 -0
  170. package/dist/ui/scroll-area.cjs +66 -0
  171. package/dist/ui/scroll-area.cjs.map +1 -0
  172. package/dist/ui/scroll-area.js +42 -0
  173. package/dist/ui/scroll-area.js.map +1 -0
  174. package/dist/ui/select.cjs +152 -0
  175. package/dist/ui/select.cjs.map +1 -0
  176. package/dist/ui/select.js +120 -0
  177. package/dist/ui/select.js.map +1 -0
  178. package/dist/ui/separator.cjs +52 -0
  179. package/dist/ui/separator.cjs.map +1 -0
  180. package/dist/ui/separator.js +29 -0
  181. package/dist/ui/separator.js.map +1 -0
  182. package/dist/ui/sheet.cjs +143 -0
  183. package/dist/ui/sheet.cjs.map +1 -0
  184. package/dist/ui/sheet.js +111 -0
  185. package/dist/ui/sheet.js.map +1 -0
  186. package/dist/ui/sidebar.cjs +816 -0
  187. package/dist/ui/sidebar.cjs.map +1 -0
  188. package/dist/ui/sidebar.js +768 -0
  189. package/dist/ui/sidebar.js.map +1 -0
  190. package/dist/ui/skeleton.cjs +25 -0
  191. package/dist/ui/skeleton.cjs.map +1 -0
  192. package/dist/ui/skeleton.js +23 -0
  193. package/dist/ui/skeleton.js.map +1 -0
  194. package/dist/ui/slider.cjs +51 -0
  195. package/dist/ui/slider.cjs.map +1 -0
  196. package/dist/ui/slider.js +28 -0
  197. package/dist/ui/slider.js.map +1 -0
  198. package/dist/ui/sonner.cjs +46 -0
  199. package/dist/ui/sonner.cjs.map +1 -0
  200. package/dist/ui/sonner.js +41 -0
  201. package/dist/ui/sonner.js.map +1 -0
  202. package/dist/ui/spinner.cjs +83 -0
  203. package/dist/ui/spinner.cjs.map +1 -0
  204. package/dist/ui/spinner.js +81 -0
  205. package/dist/ui/spinner.js.map +1 -0
  206. package/dist/ui/switch.cjs +67 -0
  207. package/dist/ui/switch.cjs.map +1 -0
  208. package/dist/ui/switch.js +44 -0
  209. package/dist/ui/switch.js.map +1 -0
  210. package/dist/ui/table.cjs +118 -0
  211. package/dist/ui/table.cjs.map +1 -0
  212. package/dist/ui/table.js +89 -0
  213. package/dist/ui/table.js.map +1 -0
  214. package/dist/ui/tabs.cjs +79 -0
  215. package/dist/ui/tabs.cjs.map +1 -0
  216. package/dist/ui/tabs.js +53 -0
  217. package/dist/ui/tabs.js.map +1 -0
  218. package/dist/ui/textarea.cjs +48 -0
  219. package/dist/ui/textarea.cjs.map +1 -0
  220. package/dist/ui/textarea.js +26 -0
  221. package/dist/ui/textarea.js.map +1 -0
  222. package/dist/ui/toast.cjs +125 -0
  223. package/dist/ui/toast.cjs.map +1 -0
  224. package/dist/ui/toast.js +96 -0
  225. package/dist/ui/toast.js.map +1 -0
  226. package/dist/ui/toaster.cjs +251 -0
  227. package/dist/ui/toaster.cjs.map +1 -0
  228. package/dist/ui/toaster.js +228 -0
  229. package/dist/ui/toaster.js.map +1 -0
  230. package/dist/ui/toggle-group.cjs +101 -0
  231. package/dist/ui/toggle-group.cjs.map +1 -0
  232. package/dist/ui/toggle-group.js +76 -0
  233. package/dist/ui/toggle-group.js.map +1 -0
  234. package/dist/ui/toggle.cjs +66 -0
  235. package/dist/ui/toggle.cjs.map +1 -0
  236. package/dist/ui/toggle.js +42 -0
  237. package/dist/ui/toggle.js.map +1 -0
  238. package/dist/ui/tooltip.cjs +54 -0
  239. package/dist/ui/tooltip.cjs.map +1 -0
  240. package/dist/ui/tooltip.js +28 -0
  241. package/dist/ui/tooltip.js.map +1 -0
  242. package/package.json +116 -0
  243. package/src/styles/globals.css +529 -0
@@ -0,0 +1,51 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var clsx = require('clsx');
5
+ require('sonner');
6
+ var tailwindMerge = require('tailwind-merge');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ function _interopNamespace(e) {
10
+ if (e && e.__esModule) return e;
11
+ var n = Object.create(null);
12
+ if (e) {
13
+ Object.keys(e).forEach(function (k) {
14
+ if (k !== 'default') {
15
+ var d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: function () { return e[k]; }
19
+ });
20
+ }
21
+ });
22
+ }
23
+ n.default = e;
24
+ return Object.freeze(n);
25
+ }
26
+
27
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
28
+
29
+ // src/ui/input.tsx
30
+ var cn = (...inputs) => tailwindMerge.twMerge(clsx.clsx(inputs));
31
+ var Input = React__namespace.forwardRef(
32
+ ({ className, type, ...props }, ref) => {
33
+ return /* @__PURE__ */ jsxRuntime.jsx(
34
+ "input",
35
+ {
36
+ type,
37
+ className: cn(
38
+ "flex h-10 w-full rounded-xl border border-border bg-transparent px-3 py-1 text-base transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm group-aria-[invalid=true]:border-danger-foreground aria-[invalid=true]:border-danger-foreground",
39
+ className
40
+ ),
41
+ ref,
42
+ ...props
43
+ }
44
+ );
45
+ }
46
+ );
47
+ Input.displayName = "Input";
48
+
49
+ exports.Input = Input;
50
+ //# sourceMappingURL=input.cjs.map
51
+ //# sourceMappingURL=input.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/utils.ts","../../src/ui/input.tsx"],"names":["twMerge","clsx","React","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKO,IAAM,KAAK,CAAA,GAAI,MAAA,KAAiCA,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;ACD3E,IAAM,KAAA,GAAcC,gBAAA,CAAA,UAAA;AAAA,EAClB,CAAC,EAAE,SAAA,EAAW,MAAM,GAAG,KAAA,IAAS,GAAA,KAAQ;AACtC,IAAA,uBACEC,cAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,kcAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,GAAA;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,KAAA,CAAM,WAAA,GAAc,OAAA","file":"input.cjs","sourcesContent":["import { clsx } from \"clsx\";\nimport type { ClassValue } from \"clsx\";\nimport { toast } from \"sonner\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport const cn = (...inputs: ClassValue[]): string => twMerge(clsx(inputs));\n\nexport const capitalize = (str: string) =>\n str?.charAt(0)?.toUpperCase() + str?.slice(1);\n\nexport const handleError = (error: { message: string }): void => {\n toast.error(error.message);\n};\n","import * as React from \"react\"\n\nimport { cn } from \"../lib/utils\"\n\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-xl border border-border bg-transparent px-3 py-1 text-base transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm group-aria-[invalid=true]:border-danger-foreground aria-[invalid=true]:border-danger-foreground\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\n"]}
@@ -0,0 +1,29 @@
1
+ import * as React from 'react';
2
+ import { clsx } from 'clsx';
3
+ import 'sonner';
4
+ import { twMerge } from 'tailwind-merge';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ // src/ui/input.tsx
8
+ var cn = (...inputs) => twMerge(clsx(inputs));
9
+ var Input = React.forwardRef(
10
+ ({ className, type, ...props }, ref) => {
11
+ return /* @__PURE__ */ jsx(
12
+ "input",
13
+ {
14
+ type,
15
+ className: cn(
16
+ "flex h-10 w-full rounded-xl border border-border bg-transparent px-3 py-1 text-base transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm group-aria-[invalid=true]:border-danger-foreground aria-[invalid=true]:border-danger-foreground",
17
+ className
18
+ ),
19
+ ref,
20
+ ...props
21
+ }
22
+ );
23
+ }
24
+ );
25
+ Input.displayName = "Input";
26
+
27
+ export { Input };
28
+ //# sourceMappingURL=input.js.map
29
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/utils.ts","../../src/ui/input.tsx"],"names":[],"mappings":";;;;;;;AAKO,IAAM,KAAK,CAAA,GAAI,MAAA,KAAiC,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;ACD3E,IAAM,KAAA,GAAc,KAAA,CAAA,UAAA;AAAA,EAClB,CAAC,EAAE,SAAA,EAAW,MAAM,GAAG,KAAA,IAAS,GAAA,KAAQ;AACtC,IAAA,uBACE,GAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,kcAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,GAAA;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,KAAA,CAAM,WAAA,GAAc,OAAA","file":"input.js","sourcesContent":["import { clsx } from \"clsx\";\nimport type { ClassValue } from \"clsx\";\nimport { toast } from \"sonner\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport const cn = (...inputs: ClassValue[]): string => twMerge(clsx(inputs));\n\nexport const capitalize = (str: string) =>\n str?.charAt(0)?.toUpperCase() + str?.slice(1);\n\nexport const handleError = (error: { message: string }): void => {\n toast.error(error.message);\n};\n","import * as React from \"react\"\n\nimport { cn } from \"../lib/utils\"\n\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-xl border border-border bg-transparent px-3 py-1 text-base transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm group-aria-[invalid=true]:border-danger-foreground aria-[invalid=true]:border-danger-foreground\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\n"]}
@@ -0,0 +1,55 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var LabelPrimitive = require('@radix-ui/react-label');
5
+ var classVarianceAuthority = require('class-variance-authority');
6
+ var clsx = require('clsx');
7
+ require('sonner');
8
+ var tailwindMerge = require('tailwind-merge');
9
+ var jsxRuntime = require('react/jsx-runtime');
10
+
11
+ function _interopNamespace(e) {
12
+ if (e && e.__esModule) return e;
13
+ var n = Object.create(null);
14
+ if (e) {
15
+ Object.keys(e).forEach(function (k) {
16
+ if (k !== 'default') {
17
+ var d = Object.getOwnPropertyDescriptor(e, k);
18
+ Object.defineProperty(n, k, d.get ? d : {
19
+ enumerable: true,
20
+ get: function () { return e[k]; }
21
+ });
22
+ }
23
+ });
24
+ }
25
+ n.default = e;
26
+ return Object.freeze(n);
27
+ }
28
+
29
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
30
+ var LabelPrimitive__namespace = /*#__PURE__*/_interopNamespace(LabelPrimitive);
31
+
32
+ var cn = (...inputs) => tailwindMerge.twMerge(clsx.clsx(inputs));
33
+ var labelVariants = classVarianceAuthority.cva(
34
+ "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
35
+ {
36
+ variants: {
37
+ required: {
38
+ true: "after:content-['*'] after:text-destructive after:ml-1"
39
+ }
40
+ }
41
+ }
42
+ );
43
+ var Label = React__namespace.forwardRef(({ className, required, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
44
+ LabelPrimitive__namespace.Root,
45
+ {
46
+ ref,
47
+ className: cn(labelVariants({ required }), className),
48
+ ...props
49
+ }
50
+ ));
51
+ Label.displayName = LabelPrimitive__namespace.Root.displayName;
52
+
53
+ exports.Label = Label;
54
+ //# sourceMappingURL=label.cjs.map
55
+ //# sourceMappingURL=label.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/utils.ts","../../src/ui/label.tsx"],"names":["twMerge","clsx","cva","React","jsx","LabelPrimitive"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKO,IAAM,KAAK,CAAA,GAAI,MAAA,KAAiCA,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;ACG3E,IAAM,aAAA,GAAgBC,0BAAA;AAAA,EACpB,4FAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,QAAA,EAAU;AAAA,QACR,IAAA,EAAM;AAAA;AACR;AACF;AAEJ,CAAA;AAEA,IAAM,KAAA,GAAcC,4BAIlB,CAAC,EAAE,WAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpCC,cAAA;AAAA,EAAgBC,yBAAA,CAAA,IAAA;AAAA,EAAf;AAAA,IACC,GAAA;AAAA,IACA,WAAW,EAAA,CAAG,aAAA,CAAc,EAAE,QAAA,EAAU,GAAG,SAAS,CAAA;AAAA,IACnD,GAAG;AAAA;AACN,CACD;AACD,KAAA,CAAM,cAA6BA,yBAAA,CAAA,IAAA,CAAK,WAAA","file":"label.cjs","sourcesContent":["import { clsx } from \"clsx\";\nimport type { ClassValue } from \"clsx\";\nimport { toast } from \"sonner\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport const cn = (...inputs: ClassValue[]): string => twMerge(clsx(inputs));\n\nexport const capitalize = (str: string) =>\n str?.charAt(0)?.toUpperCase() + str?.slice(1);\n\nexport const handleError = (error: { message: string }): void => {\n toast.error(error.message);\n};\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n {\n variants: {\n required: {\n true: \"after:content-['*'] after:text-destructive after:ml-1\",\n },\n },\n }\n)\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, required, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants({ required }), className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n"]}
@@ -0,0 +1,32 @@
1
+ import * as React from 'react';
2
+ import * as LabelPrimitive from '@radix-ui/react-label';
3
+ import { cva } from 'class-variance-authority';
4
+ import { clsx } from 'clsx';
5
+ import 'sonner';
6
+ import { twMerge } from 'tailwind-merge';
7
+ import { jsx } from 'react/jsx-runtime';
8
+
9
+ var cn = (...inputs) => twMerge(clsx(inputs));
10
+ var labelVariants = cva(
11
+ "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
12
+ {
13
+ variants: {
14
+ required: {
15
+ true: "after:content-['*'] after:text-destructive after:ml-1"
16
+ }
17
+ }
18
+ }
19
+ );
20
+ var Label = React.forwardRef(({ className, required, ...props }, ref) => /* @__PURE__ */ jsx(
21
+ LabelPrimitive.Root,
22
+ {
23
+ ref,
24
+ className: cn(labelVariants({ required }), className),
25
+ ...props
26
+ }
27
+ ));
28
+ Label.displayName = LabelPrimitive.Root.displayName;
29
+
30
+ export { Label };
31
+ //# sourceMappingURL=label.js.map
32
+ //# sourceMappingURL=label.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/utils.ts","../../src/ui/label.tsx"],"names":[],"mappings":";;;;;;;;AAKO,IAAM,KAAK,CAAA,GAAI,MAAA,KAAiC,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;ACG3E,IAAM,aAAA,GAAgB,GAAA;AAAA,EACpB,4FAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,QAAA,EAAU;AAAA,QACR,IAAA,EAAM;AAAA;AACR;AACF;AAEJ,CAAA;AAEA,IAAM,KAAA,GAAc,iBAIlB,CAAC,EAAE,WAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpC,GAAA;AAAA,EAAgB,cAAA,CAAA,IAAA;AAAA,EAAf;AAAA,IACC,GAAA;AAAA,IACA,WAAW,EAAA,CAAG,aAAA,CAAc,EAAE,QAAA,EAAU,GAAG,SAAS,CAAA;AAAA,IACnD,GAAG;AAAA;AACN,CACD;AACD,KAAA,CAAM,cAA6B,cAAA,CAAA,IAAA,CAAK,WAAA","file":"label.js","sourcesContent":["import { clsx } from \"clsx\";\nimport type { ClassValue } from \"clsx\";\nimport { toast } from \"sonner\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport const cn = (...inputs: ClassValue[]): string => twMerge(clsx(inputs));\n\nexport const capitalize = (str: string) =>\n str?.charAt(0)?.toUpperCase() + str?.slice(1);\n\nexport const handleError = (error: { message: string }): void => {\n toast.error(error.message);\n};\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../lib/utils\"\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n {\n variants: {\n required: {\n true: \"after:content-['*'] after:text-destructive after:ml-1\",\n },\n },\n }\n)\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, required, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants({ required }), className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n"]}
@@ -0,0 +1,85 @@
1
+ 'use strict';
2
+
3
+ var Lottie = require('lottie-react');
4
+ var react = require('react');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+
7
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
+
9
+ var Lottie__default = /*#__PURE__*/_interopDefault(Lottie);
10
+
11
+ var LottieAnimation = react.forwardRef(
12
+ ({
13
+ animationPath,
14
+ size = 24,
15
+ className = "",
16
+ loop = true,
17
+ autoplay = true,
18
+ speed = 1,
19
+ ...props
20
+ }, ref) => {
21
+ const [animationData, setAnimationData] = react.useState(null);
22
+ const [isLoading, setIsLoading] = react.useState(true);
23
+ react.useEffect(() => {
24
+ const loadAnimation = async () => {
25
+ try {
26
+ const response = await fetch(`/${animationPath}`);
27
+ const data = await response.json();
28
+ setAnimationData(data);
29
+ } catch (error) {
30
+ console.error("Failed to load Lottie animation:", error);
31
+ } finally {
32
+ setIsLoading(false);
33
+ }
34
+ };
35
+ loadAnimation();
36
+ }, [animationPath]);
37
+ if (isLoading || !animationData) {
38
+ return /* @__PURE__ */ jsxRuntime.jsx(
39
+ "div",
40
+ {
41
+ ref,
42
+ className: `inline-flex items-center justify-center ${className}`,
43
+ style: {
44
+ width: size,
45
+ height: size,
46
+ minWidth: size,
47
+ minHeight: size
48
+ },
49
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "animate-pulse bg-muted rounded-full w-full h-full" })
50
+ }
51
+ );
52
+ }
53
+ return /* @__PURE__ */ jsxRuntime.jsx(
54
+ "div",
55
+ {
56
+ ref,
57
+ className: `inline-flex items-center justify-center ${className}`,
58
+ style: {
59
+ width: size,
60
+ height: size,
61
+ minWidth: size,
62
+ minHeight: size
63
+ },
64
+ children: /* @__PURE__ */ jsxRuntime.jsx(
65
+ Lottie__default.default,
66
+ {
67
+ animationData,
68
+ loop,
69
+ autoplay,
70
+ style: {
71
+ width: "100%",
72
+ height: "100%"
73
+ },
74
+ ...props
75
+ }
76
+ )
77
+ }
78
+ );
79
+ }
80
+ );
81
+ LottieAnimation.displayName = "LottieAnimation";
82
+
83
+ exports.LottieAnimation = LottieAnimation;
84
+ //# sourceMappingURL=lottie-animation.cjs.map
85
+ //# sourceMappingURL=lottie-animation.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ui/lottie-animation.tsx"],"names":["forwardRef","useState","useEffect","jsx","Lottie"],"mappings":";;;;;;;;;;AA4CA,IAAM,eAAA,GAAkBA,gBAAA;AAAA,EACtB,CAAC;AAAA,IACC,aAAA;AAAA,IACA,IAAA,GAAO,EAAA;AAAA,IACP,SAAA,GAAY,EAAA;AAAA,IACZ,IAAA,GAAO,IAAA;AAAA,IACP,QAAA,GAAW,IAAA;AAAA,IACX,KAAA,GAAQ,CAAA;AAAA,IACR,GAAG;AAAA,KACF,GAAA,KAAQ;AACT,IAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIC,eAAc,IAAI,CAAA;AAC5D,IAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,IAAI,CAAA;AAE/C,IAAAC,eAAA,CAAU,MAAM;AACd,MAAA,MAAM,gBAAgB,YAAY;AAChC,QAAA,IAAI;AACF,UAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,CAAA,EAAI,aAAa,CAAA,CAAE,CAAA;AAChD,UAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,UAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,QACvB,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,KAAA,CAAM,oCAAoC,KAAK,CAAA;AAAA,QACzD,CAAA,SAAE;AACA,UAAA,YAAA,CAAa,KAAK,CAAA;AAAA,QACpB;AAAA,MACF,CAAA;AAEA,MAAA,aAAA,EAAc;AAAA,IAChB,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,IAAA,IAAI,SAAA,IAAa,CAAC,aAAA,EAAe;AAC/B,MAAA,uBACEC,cAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,SAAA,EAAW,2CAA2C,SAAS,CAAA,CAAA;AAAA,UAC/D,KAAA,EAAO;AAAA,YACL,KAAA,EAAO,IAAA;AAAA,YACP,MAAA,EAAQ,IAAA;AAAA,YACR,QAAA,EAAU,IAAA;AAAA,YACV,SAAA,EAAW;AAAA,WACb;AAAA,UAGA,QAAA,kBAAAA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EAAoD;AAAA;AAAA,OACrE;AAAA,IAEJ;AAEA,IAAA,uBACEA,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,2CAA2C,SAAS,CAAA,CAAA;AAAA,QAC/D,KAAA,EAAO;AAAA,UACL,KAAA,EAAO,IAAA;AAAA,UACP,MAAA,EAAQ,IAAA;AAAA,UACR,QAAA,EAAU,IAAA;AAAA,UACV,SAAA,EAAW;AAAA,SACb;AAAA,QAEA,QAAA,kBAAAA,cAAA;AAAA,UAACC,uBAAA;AAAA,UAAA;AAAA,YACC,aAAA;AAAA,YACA,IAAA;AAAA,YACA,QAAA;AAAA,YACA,KAAA,EAAO;AAAA,cACL,KAAA,EAAO,MAAA;AAAA,cACP,MAAA,EAAQ;AAAA,aACV;AAAA,YACC,GAAG;AAAA;AAAA;AACN;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,eAAA,CAAgB,WAAA,GAAc,iBAAA","file":"lottie-animation.cjs","sourcesContent":["'use client';\n\nimport Lottie from 'lottie-react';\nimport { forwardRef, useEffect, useState } from 'react';\nimport type { LottieComponentProps } from 'lottie-react';\n\ninterface LottieAnimationProps extends Omit<LottieComponentProps, 'animationData'> {\n /**\n * Path to the Lottie animation JSON file\n */\n animationPath: string;\n /**\n * Size of the animation (width and height)\n */\n size?: number;\n /**\n * Additional CSS classes\n */\n className?: string;\n /**\n * Whether the animation should loop\n */\n loop?: boolean;\n /**\n * Whether the animation should autoplay\n */\n autoplay?: boolean;\n /**\n * Animation speed\n */\n speed?: number;\n}\n\n/**\n * LottieAnimation component for displaying Lottie animations\n * \n * @param animationPath - Path to the Lottie animation JSON file\n * @param size - Size of the animation container (default: 24)\n * @param className - Additional CSS classes\n * @param loop - Whether the animation should loop (default: true)\n * @param autoplay - Whether the animation should autoplay (default: true)\n * @param speed - Animation speed (default: 1)\n * @param props - Additional Lottie component props\n */\nconst LottieAnimation = forwardRef<HTMLDivElement, LottieAnimationProps>(\n ({ \n animationPath, \n size = 24, \n className = '', \n loop = true, \n autoplay = true, \n speed = 1,\n ...props \n }, ref) => {\n const [animationData, setAnimationData] = useState<any>(null);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n const loadAnimation = async () => {\n try {\n const response = await fetch(`/${animationPath}`);\n const data = await response.json();\n setAnimationData(data);\n } catch (error) {\n console.error('Failed to load Lottie animation:', error);\n } finally {\n setIsLoading(false);\n }\n };\n\n loadAnimation();\n }, [animationPath]);\n\n if (isLoading || !animationData) {\n return (\n <div\n ref={ref}\n className={`inline-flex items-center justify-center ${className}`}\n style={{\n width: size,\n height: size,\n minWidth: size,\n minHeight: size,\n }}\n >\n {/* Simple loading placeholder */}\n <div className=\"animate-pulse bg-muted rounded-full w-full h-full\" />\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={`inline-flex items-center justify-center ${className}`}\n style={{\n width: size,\n height: size,\n minWidth: size,\n minHeight: size,\n }}\n >\n <Lottie\n animationData={animationData}\n loop={loop}\n autoplay={autoplay}\n style={{\n width: '100%',\n height: '100%',\n }}\n {...props}\n />\n </div>\n );\n }\n);\n\nLottieAnimation.displayName = 'LottieAnimation';\n\nexport { LottieAnimation };\nexport type { LottieAnimationProps }; "]}
@@ -0,0 +1,79 @@
1
+ import Lottie from 'lottie-react';
2
+ import { forwardRef, useState, useEffect } from 'react';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ var LottieAnimation = forwardRef(
6
+ ({
7
+ animationPath,
8
+ size = 24,
9
+ className = "",
10
+ loop = true,
11
+ autoplay = true,
12
+ speed = 1,
13
+ ...props
14
+ }, ref) => {
15
+ const [animationData, setAnimationData] = useState(null);
16
+ const [isLoading, setIsLoading] = useState(true);
17
+ useEffect(() => {
18
+ const loadAnimation = async () => {
19
+ try {
20
+ const response = await fetch(`/${animationPath}`);
21
+ const data = await response.json();
22
+ setAnimationData(data);
23
+ } catch (error) {
24
+ console.error("Failed to load Lottie animation:", error);
25
+ } finally {
26
+ setIsLoading(false);
27
+ }
28
+ };
29
+ loadAnimation();
30
+ }, [animationPath]);
31
+ if (isLoading || !animationData) {
32
+ return /* @__PURE__ */ jsx(
33
+ "div",
34
+ {
35
+ ref,
36
+ className: `inline-flex items-center justify-center ${className}`,
37
+ style: {
38
+ width: size,
39
+ height: size,
40
+ minWidth: size,
41
+ minHeight: size
42
+ },
43
+ children: /* @__PURE__ */ jsx("div", { className: "animate-pulse bg-muted rounded-full w-full h-full" })
44
+ }
45
+ );
46
+ }
47
+ return /* @__PURE__ */ jsx(
48
+ "div",
49
+ {
50
+ ref,
51
+ className: `inline-flex items-center justify-center ${className}`,
52
+ style: {
53
+ width: size,
54
+ height: size,
55
+ minWidth: size,
56
+ minHeight: size
57
+ },
58
+ children: /* @__PURE__ */ jsx(
59
+ Lottie,
60
+ {
61
+ animationData,
62
+ loop,
63
+ autoplay,
64
+ style: {
65
+ width: "100%",
66
+ height: "100%"
67
+ },
68
+ ...props
69
+ }
70
+ )
71
+ }
72
+ );
73
+ }
74
+ );
75
+ LottieAnimation.displayName = "LottieAnimation";
76
+
77
+ export { LottieAnimation };
78
+ //# sourceMappingURL=lottie-animation.js.map
79
+ //# sourceMappingURL=lottie-animation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ui/lottie-animation.tsx"],"names":[],"mappings":";;;;AA4CA,IAAM,eAAA,GAAkB,UAAA;AAAA,EACtB,CAAC;AAAA,IACC,aAAA;AAAA,IACA,IAAA,GAAO,EAAA;AAAA,IACP,SAAA,GAAY,EAAA;AAAA,IACZ,IAAA,GAAO,IAAA;AAAA,IACP,QAAA,GAAW,IAAA;AAAA,IACX,KAAA,GAAQ,CAAA;AAAA,IACR,GAAG;AAAA,KACF,GAAA,KAAQ;AACT,IAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAc,IAAI,CAAA;AAC5D,IAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,IAAI,CAAA;AAE/C,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,MAAM,gBAAgB,YAAY;AAChC,QAAA,IAAI;AACF,UAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,CAAA,EAAI,aAAa,CAAA,CAAE,CAAA;AAChD,UAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,UAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,QACvB,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,KAAA,CAAM,oCAAoC,KAAK,CAAA;AAAA,QACzD,CAAA,SAAE;AACA,UAAA,YAAA,CAAa,KAAK,CAAA;AAAA,QACpB;AAAA,MACF,CAAA;AAEA,MAAA,aAAA,EAAc;AAAA,IAChB,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,IAAA,IAAI,SAAA,IAAa,CAAC,aAAA,EAAe;AAC/B,MAAA,uBACE,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,SAAA,EAAW,2CAA2C,SAAS,CAAA,CAAA;AAAA,UAC/D,KAAA,EAAO;AAAA,YACL,KAAA,EAAO,IAAA;AAAA,YACP,MAAA,EAAQ,IAAA;AAAA,YACR,QAAA,EAAU,IAAA;AAAA,YACV,SAAA,EAAW;AAAA,WACb;AAAA,UAGA,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EAAoD;AAAA;AAAA,OACrE;AAAA,IAEJ;AAEA,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,2CAA2C,SAAS,CAAA,CAAA;AAAA,QAC/D,KAAA,EAAO;AAAA,UACL,KAAA,EAAO,IAAA;AAAA,UACP,MAAA,EAAQ,IAAA;AAAA,UACR,QAAA,EAAU,IAAA;AAAA,UACV,SAAA,EAAW;AAAA,SACb;AAAA,QAEA,QAAA,kBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,aAAA;AAAA,YACA,IAAA;AAAA,YACA,QAAA;AAAA,YACA,KAAA,EAAO;AAAA,cACL,KAAA,EAAO,MAAA;AAAA,cACP,MAAA,EAAQ;AAAA,aACV;AAAA,YACC,GAAG;AAAA;AAAA;AACN;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,eAAA,CAAgB,WAAA,GAAc,iBAAA","file":"lottie-animation.js","sourcesContent":["'use client';\n\nimport Lottie from 'lottie-react';\nimport { forwardRef, useEffect, useState } from 'react';\nimport type { LottieComponentProps } from 'lottie-react';\n\ninterface LottieAnimationProps extends Omit<LottieComponentProps, 'animationData'> {\n /**\n * Path to the Lottie animation JSON file\n */\n animationPath: string;\n /**\n * Size of the animation (width and height)\n */\n size?: number;\n /**\n * Additional CSS classes\n */\n className?: string;\n /**\n * Whether the animation should loop\n */\n loop?: boolean;\n /**\n * Whether the animation should autoplay\n */\n autoplay?: boolean;\n /**\n * Animation speed\n */\n speed?: number;\n}\n\n/**\n * LottieAnimation component for displaying Lottie animations\n * \n * @param animationPath - Path to the Lottie animation JSON file\n * @param size - Size of the animation container (default: 24)\n * @param className - Additional CSS classes\n * @param loop - Whether the animation should loop (default: true)\n * @param autoplay - Whether the animation should autoplay (default: true)\n * @param speed - Animation speed (default: 1)\n * @param props - Additional Lottie component props\n */\nconst LottieAnimation = forwardRef<HTMLDivElement, LottieAnimationProps>(\n ({ \n animationPath, \n size = 24, \n className = '', \n loop = true, \n autoplay = true, \n speed = 1,\n ...props \n }, ref) => {\n const [animationData, setAnimationData] = useState<any>(null);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n const loadAnimation = async () => {\n try {\n const response = await fetch(`/${animationPath}`);\n const data = await response.json();\n setAnimationData(data);\n } catch (error) {\n console.error('Failed to load Lottie animation:', error);\n } finally {\n setIsLoading(false);\n }\n };\n\n loadAnimation();\n }, [animationPath]);\n\n if (isLoading || !animationData) {\n return (\n <div\n ref={ref}\n className={`inline-flex items-center justify-center ${className}`}\n style={{\n width: size,\n height: size,\n minWidth: size,\n minHeight: size,\n }}\n >\n {/* Simple loading placeholder */}\n <div className=\"animate-pulse bg-muted rounded-full w-full h-full\" />\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={`inline-flex items-center justify-center ${className}`}\n style={{\n width: size,\n height: size,\n minWidth: size,\n minHeight: size,\n }}\n >\n <Lottie\n animationData={animationData}\n loop={loop}\n autoplay={autoplay}\n style={{\n width: '100%',\n height: '100%',\n }}\n {...props}\n />\n </div>\n );\n }\n);\n\nLottieAnimation.displayName = 'LottieAnimation';\n\nexport { LottieAnimation };\nexport type { LottieAnimationProps }; "]}
@@ -0,0 +1,210 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var MenubarPrimitive = require('@radix-ui/react-menubar');
5
+ var clsx = require('clsx');
6
+ require('sonner');
7
+ var tailwindMerge = require('tailwind-merge');
8
+ var reactIcons = require('@radix-ui/react-icons');
9
+ var jsxRuntime = require('react/jsx-runtime');
10
+
11
+ function _interopNamespace(e) {
12
+ if (e && e.__esModule) return e;
13
+ var n = Object.create(null);
14
+ if (e) {
15
+ Object.keys(e).forEach(function (k) {
16
+ if (k !== 'default') {
17
+ var d = Object.getOwnPropertyDescriptor(e, k);
18
+ Object.defineProperty(n, k, d.get ? d : {
19
+ enumerable: true,
20
+ get: function () { return e[k]; }
21
+ });
22
+ }
23
+ });
24
+ }
25
+ n.default = e;
26
+ return Object.freeze(n);
27
+ }
28
+
29
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
30
+ var MenubarPrimitive__namespace = /*#__PURE__*/_interopNamespace(MenubarPrimitive);
31
+
32
+ var cn = (...inputs) => tailwindMerge.twMerge(clsx.clsx(inputs));
33
+ var MenubarMenu = MenubarPrimitive__namespace.Menu;
34
+ var MenubarGroup = MenubarPrimitive__namespace.Group;
35
+ var MenubarPortal = MenubarPrimitive__namespace.Portal;
36
+ var MenubarSub = MenubarPrimitive__namespace.Sub;
37
+ var MenubarRadioGroup = MenubarPrimitive__namespace.RadioGroup;
38
+ var Menubar = React__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
39
+ MenubarPrimitive__namespace.Root,
40
+ {
41
+ ref,
42
+ className: cn(
43
+ "flex h-9 items-center space-x-1 rounded-xl border bg-background p-1 shadow-sm",
44
+ className
45
+ ),
46
+ ...props
47
+ }
48
+ ));
49
+ Menubar.displayName = MenubarPrimitive__namespace.Root.displayName;
50
+ var MenubarTrigger = React__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
51
+ MenubarPrimitive__namespace.Trigger,
52
+ {
53
+ ref,
54
+ className: cn(
55
+ "flex cursor-default select-none items-center rounded-lg px-3 py-1 text-sm font-medium outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
56
+ className
57
+ ),
58
+ ...props
59
+ }
60
+ ));
61
+ MenubarTrigger.displayName = MenubarPrimitive__namespace.Trigger.displayName;
62
+ var MenubarSubTrigger = React__namespace.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
63
+ MenubarPrimitive__namespace.SubTrigger,
64
+ {
65
+ ref,
66
+ className: cn(
67
+ "flex cursor-default select-none items-center rounded-lg px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
68
+ inset && "pl-8",
69
+ className
70
+ ),
71
+ ...props,
72
+ children: [
73
+ children,
74
+ /* @__PURE__ */ jsxRuntime.jsx(reactIcons.ChevronRightIcon, { className: "ml-auto h-4 w-4" })
75
+ ]
76
+ }
77
+ ));
78
+ MenubarSubTrigger.displayName = MenubarPrimitive__namespace.SubTrigger.displayName;
79
+ var MenubarSubContent = React__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
80
+ MenubarPrimitive__namespace.SubContent,
81
+ {
82
+ ref,
83
+ className: cn(
84
+ "z-50 min-w-[8rem] overflow-hidden rounded-xl border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
85
+ className
86
+ ),
87
+ ...props
88
+ }
89
+ ));
90
+ MenubarSubContent.displayName = MenubarPrimitive__namespace.SubContent.displayName;
91
+ var MenubarContent = React__namespace.forwardRef(
92
+ ({ className, align = "start", alignOffset = -4, sideOffset = 8, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(MenubarPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
93
+ MenubarPrimitive__namespace.Content,
94
+ {
95
+ ref,
96
+ align,
97
+ alignOffset,
98
+ sideOffset,
99
+ className: cn(
100
+ "z-50 min-w-[12rem] overflow-hidden rounded-xl border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
101
+ className
102
+ ),
103
+ ...props
104
+ }
105
+ ) })
106
+ );
107
+ MenubarContent.displayName = MenubarPrimitive__namespace.Content.displayName;
108
+ var MenubarItem = React__namespace.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
109
+ MenubarPrimitive__namespace.Item,
110
+ {
111
+ ref,
112
+ className: cn(
113
+ "relative flex cursor-default select-none items-center rounded-lg px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
114
+ inset && "pl-8",
115
+ className
116
+ ),
117
+ ...props
118
+ }
119
+ ));
120
+ MenubarItem.displayName = MenubarPrimitive__namespace.Item.displayName;
121
+ var MenubarCheckboxItem = React__namespace.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
122
+ MenubarPrimitive__namespace.CheckboxItem,
123
+ {
124
+ ref,
125
+ className: cn(
126
+ "relative flex cursor-default select-none items-center rounded-lg py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
127
+ className
128
+ ),
129
+ checked,
130
+ ...props,
131
+ children: [
132
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(MenubarPrimitive__namespace.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(reactIcons.CheckIcon, { className: "h-4 w-4" }) }) }),
133
+ children
134
+ ]
135
+ }
136
+ ));
137
+ MenubarCheckboxItem.displayName = MenubarPrimitive__namespace.CheckboxItem.displayName;
138
+ var MenubarRadioItem = React__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
139
+ MenubarPrimitive__namespace.RadioItem,
140
+ {
141
+ ref,
142
+ className: cn(
143
+ "relative flex cursor-default select-none items-center rounded-lg py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
144
+ className
145
+ ),
146
+ ...props,
147
+ children: [
148
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(MenubarPrimitive__namespace.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(reactIcons.DotFilledIcon, { className: "h-4 w-4 fill-current" }) }) }),
149
+ children
150
+ ]
151
+ }
152
+ ));
153
+ MenubarRadioItem.displayName = MenubarPrimitive__namespace.RadioItem.displayName;
154
+ var MenubarLabel = React__namespace.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
155
+ MenubarPrimitive__namespace.Label,
156
+ {
157
+ ref,
158
+ className: cn(
159
+ "px-2 py-1.5 text-sm font-semibold",
160
+ inset && "pl-8",
161
+ className
162
+ ),
163
+ ...props
164
+ }
165
+ ));
166
+ MenubarLabel.displayName = MenubarPrimitive__namespace.Label.displayName;
167
+ var MenubarSeparator = React__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
168
+ MenubarPrimitive__namespace.Separator,
169
+ {
170
+ ref,
171
+ className: cn("-mx-1 my-1 h-px bg-muted", className),
172
+ ...props
173
+ }
174
+ ));
175
+ MenubarSeparator.displayName = MenubarPrimitive__namespace.Separator.displayName;
176
+ var MenubarShortcut = ({
177
+ className,
178
+ ...props
179
+ }) => {
180
+ return /* @__PURE__ */ jsxRuntime.jsx(
181
+ "span",
182
+ {
183
+ className: cn(
184
+ "ml-auto text-xs tracking-widest text-muted-foreground",
185
+ className
186
+ ),
187
+ ...props
188
+ }
189
+ );
190
+ };
191
+ MenubarShortcut.displayname = "MenubarShortcut";
192
+
193
+ exports.Menubar = Menubar;
194
+ exports.MenubarCheckboxItem = MenubarCheckboxItem;
195
+ exports.MenubarContent = MenubarContent;
196
+ exports.MenubarGroup = MenubarGroup;
197
+ exports.MenubarItem = MenubarItem;
198
+ exports.MenubarLabel = MenubarLabel;
199
+ exports.MenubarMenu = MenubarMenu;
200
+ exports.MenubarPortal = MenubarPortal;
201
+ exports.MenubarRadioGroup = MenubarRadioGroup;
202
+ exports.MenubarRadioItem = MenubarRadioItem;
203
+ exports.MenubarSeparator = MenubarSeparator;
204
+ exports.MenubarShortcut = MenubarShortcut;
205
+ exports.MenubarSub = MenubarSub;
206
+ exports.MenubarSubContent = MenubarSubContent;
207
+ exports.MenubarSubTrigger = MenubarSubTrigger;
208
+ exports.MenubarTrigger = MenubarTrigger;
209
+ //# sourceMappingURL=menubar.cjs.map
210
+ //# sourceMappingURL=menubar.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/utils.ts","../../src/ui/menubar.tsx"],"names":["twMerge","clsx","MenubarPrimitive","React","jsx","jsxs","ChevronRightIcon","CheckIcon","DotFilledIcon"],"mappings":"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","file":"menubar.cjs","sourcesContent":["import { clsx } from \"clsx\";\nimport type { ClassValue } from \"clsx\";\nimport { toast } from \"sonner\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport const cn = (...inputs: ClassValue[]): string => twMerge(clsx(inputs));\n\nexport const capitalize = (str: string) =>\n str?.charAt(0)?.toUpperCase() + str?.slice(1);\n\nexport const handleError = (error: { message: string }): void => {\n toast.error(error.message);\n};\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as MenubarPrimitive from \"@radix-ui/react-menubar\"\nimport * as ReactContext from \"@radix-ui/react-context\";\nimport { cn } from \"../lib/utils\"\nimport { CheckIcon, ChevronRightIcon, DotFilledIcon } from \"@radix-ui/react-icons\"\n\nconst MenubarMenu = MenubarPrimitive.Menu\n\nconst MenubarGroup = MenubarPrimitive.Group\n\nconst MenubarPortal = MenubarPrimitive.Portal\n\nconst MenubarSub = MenubarPrimitive.Sub\n\nconst MenubarRadioGroup = MenubarPrimitive.RadioGroup\n\nconst Menubar = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <MenubarPrimitive.Root\n ref={ref}\n className={cn(\n \"flex h-9 items-center space-x-1 rounded-xl border bg-background p-1 shadow-sm\",\n className\n )}\n {...props}\n />\n))\nMenubar.displayName = MenubarPrimitive.Root.displayName\n\nconst MenubarTrigger = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <MenubarPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center rounded-lg px-3 py-1 text-sm font-medium outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\n className\n )}\n {...props}\n />\n))\nMenubarTrigger.displayName = MenubarPrimitive.Trigger.displayName\n\nconst MenubarSubTrigger = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n <MenubarPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center rounded-lg px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto h-4 w-4\" />\n </MenubarPrimitive.SubTrigger>\n))\nMenubarSubTrigger.displayName = MenubarPrimitive.SubTrigger.displayName\n\nconst MenubarSubContent = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <MenubarPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-xl border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n))\nMenubarSubContent.displayName = MenubarPrimitive.SubContent.displayName\n\nconst MenubarContent = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Content>\n>(\n (\n { className, align = \"start\", alignOffset = -4, sideOffset = 8, ...props },\n ref\n ) => (\n <MenubarPrimitive.Portal>\n <MenubarPrimitive.Content\n ref={ref}\n align={align}\n alignOffset={alignOffset}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[12rem] overflow-hidden rounded-xl border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </MenubarPrimitive.Portal>\n )\n)\nMenubarContent.displayName = MenubarPrimitive.Content.displayName\n\nconst MenubarItem = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <MenubarPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-lg px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nMenubarItem.displayName = MenubarPrimitive.Item.displayName\n\nconst MenubarCheckboxItem = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <MenubarPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-lg py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CheckIcon className=\"h-4 w-4\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.CheckboxItem>\n))\nMenubarCheckboxItem.displayName = MenubarPrimitive.CheckboxItem.displayName\n\nconst MenubarRadioItem = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <MenubarPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-lg py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <DotFilledIcon className=\"h-4 w-4 fill-current\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.RadioItem>\n))\nMenubarRadioItem.displayName = MenubarPrimitive.RadioItem.displayName\n\nconst MenubarLabel = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <MenubarPrimitive.Label\n ref={ref}\n className={cn(\n \"px-2 py-1.5 text-sm font-semibold\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nMenubarLabel.displayName = MenubarPrimitive.Label.displayName\n\nconst MenubarSeparator = React.forwardRef<\n React.ElementRef<typeof MenubarPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <MenubarPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n))\nMenubarSeparator.displayName = MenubarPrimitive.Separator.displayName\n\nconst MenubarShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\n className\n )}\n {...props}\n />\n )\n}\nMenubarShortcut.displayname = \"MenubarShortcut\"\n\nexport {\n Menubar,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarItem,\n MenubarSeparator,\n MenubarLabel,\n MenubarCheckboxItem,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarPortal,\n MenubarSubContent,\n MenubarSubTrigger,\n MenubarGroup,\n MenubarSub,\n MenubarShortcut,\n}\n"]}