@marktiderman/genesis-ui 1.0.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 (344) hide show
  1. package/dist/ViewToggle-DDe_Luj2.d.ts +10 -0
  2. package/dist/chunk-2B3MFHBQ.js +94 -0
  3. package/dist/chunk-2B3MFHBQ.js.map +1 -0
  4. package/dist/chunk-2MQKBZBJ.js +87 -0
  5. package/dist/chunk-2MQKBZBJ.js.map +1 -0
  6. package/dist/chunk-2MXMWBDV.js +30 -0
  7. package/dist/chunk-2MXMWBDV.js.map +1 -0
  8. package/dist/chunk-2SBHHXAC.js +40 -0
  9. package/dist/chunk-2SBHHXAC.js.map +1 -0
  10. package/dist/chunk-4HUKJSKC.js +51 -0
  11. package/dist/chunk-4HUKJSKC.js.map +1 -0
  12. package/dist/chunk-4RAZJ6LL.js +27 -0
  13. package/dist/chunk-4RAZJ6LL.js.map +1 -0
  14. package/dist/chunk-4TROUCWO.js +43 -0
  15. package/dist/chunk-4TROUCWO.js.map +1 -0
  16. package/dist/chunk-4V4H2ZM7.js +170 -0
  17. package/dist/chunk-4V4H2ZM7.js.map +1 -0
  18. package/dist/chunk-5J7BP5DI.js +47 -0
  19. package/dist/chunk-5J7BP5DI.js.map +1 -0
  20. package/dist/chunk-5Q4FABZQ.js +44 -0
  21. package/dist/chunk-5Q4FABZQ.js.map +1 -0
  22. package/dist/chunk-63FW5ZUA.js +26 -0
  23. package/dist/chunk-63FW5ZUA.js.map +1 -0
  24. package/dist/chunk-6V4GJUE3.js +25 -0
  25. package/dist/chunk-6V4GJUE3.js.map +1 -0
  26. package/dist/chunk-7H3E5VOJ.js +205 -0
  27. package/dist/chunk-7H3E5VOJ.js.map +1 -0
  28. package/dist/chunk-7OBL3H5P.js +83 -0
  29. package/dist/chunk-7OBL3H5P.js.map +1 -0
  30. package/dist/chunk-A5WHNNXJ.js +22 -0
  31. package/dist/chunk-A5WHNNXJ.js.map +1 -0
  32. package/dist/chunk-AI6CCNWK.js +51 -0
  33. package/dist/chunk-AI6CCNWK.js.map +1 -0
  34. package/dist/chunk-AIODTBWP.js +23 -0
  35. package/dist/chunk-AIODTBWP.js.map +1 -0
  36. package/dist/chunk-C6H7AMO4.js +43 -0
  37. package/dist/chunk-C6H7AMO4.js.map +1 -0
  38. package/dist/chunk-CLK7JBZJ.js +288 -0
  39. package/dist/chunk-CLK7JBZJ.js.map +1 -0
  40. package/dist/chunk-EI5EGKHL.js +32 -0
  41. package/dist/chunk-EI5EGKHL.js.map +1 -0
  42. package/dist/chunk-F2JB7YFF.js +341 -0
  43. package/dist/chunk-F2JB7YFF.js.map +1 -0
  44. package/dist/chunk-FCGFG4RV.js +120 -0
  45. package/dist/chunk-FCGFG4RV.js.map +1 -0
  46. package/dist/chunk-FFSDFQQN.js +19 -0
  47. package/dist/chunk-FFSDFQQN.js.map +1 -0
  48. package/dist/chunk-FN3FZVUR.js +79 -0
  49. package/dist/chunk-FN3FZVUR.js.map +1 -0
  50. package/dist/chunk-FZYUVUXU.js +199 -0
  51. package/dist/chunk-FZYUVUXU.js.map +1 -0
  52. package/dist/chunk-GJ6XSCNF.js +64 -0
  53. package/dist/chunk-GJ6XSCNF.js.map +1 -0
  54. package/dist/chunk-HSHIZHYR.js +23 -0
  55. package/dist/chunk-HSHIZHYR.js.map +1 -0
  56. package/dist/chunk-HVQCZFJ7.js +115 -0
  57. package/dist/chunk-HVQCZFJ7.js.map +1 -0
  58. package/dist/chunk-IKIFQILN.js +124 -0
  59. package/dist/chunk-IKIFQILN.js.map +1 -0
  60. package/dist/chunk-JEECTX26.js +20 -0
  61. package/dist/chunk-JEECTX26.js.map +1 -0
  62. package/dist/chunk-JJ4NOMMI.js +73 -0
  63. package/dist/chunk-JJ4NOMMI.js.map +1 -0
  64. package/dist/chunk-JXI2MYL3.js +40 -0
  65. package/dist/chunk-JXI2MYL3.js.map +1 -0
  66. package/dist/chunk-JYPENH7T.js +95 -0
  67. package/dist/chunk-JYPENH7T.js.map +1 -0
  68. package/dist/chunk-K23AQNOM.js +51 -0
  69. package/dist/chunk-K23AQNOM.js.map +1 -0
  70. package/dist/chunk-K4YLKVMX.js +24 -0
  71. package/dist/chunk-K4YLKVMX.js.map +1 -0
  72. package/dist/chunk-KBS4BHME.js +11 -0
  73. package/dist/chunk-KBS4BHME.js.map +1 -0
  74. package/dist/chunk-LRXDZBV2.js +26 -0
  75. package/dist/chunk-LRXDZBV2.js.map +1 -0
  76. package/dist/chunk-M7AU5DDM.js +26 -0
  77. package/dist/chunk-M7AU5DDM.js.map +1 -0
  78. package/dist/chunk-MUQLZFUR.js +31 -0
  79. package/dist/chunk-MUQLZFUR.js.map +1 -0
  80. package/dist/chunk-N2ZFNOOT.js +57 -0
  81. package/dist/chunk-N2ZFNOOT.js.map +1 -0
  82. package/dist/chunk-NJMO3VPA.js +26 -0
  83. package/dist/chunk-NJMO3VPA.js.map +1 -0
  84. package/dist/chunk-NZ5WBA4R.js +18 -0
  85. package/dist/chunk-NZ5WBA4R.js.map +1 -0
  86. package/dist/chunk-OCTV3S4I.js +29 -0
  87. package/dist/chunk-OCTV3S4I.js.map +1 -0
  88. package/dist/chunk-OVU3Z2MT.js +22 -0
  89. package/dist/chunk-OVU3Z2MT.js.map +1 -0
  90. package/dist/chunk-OZ7ZAYCS.js +35 -0
  91. package/dist/chunk-OZ7ZAYCS.js.map +1 -0
  92. package/dist/chunk-OZZTPE7F.js +51 -0
  93. package/dist/chunk-OZZTPE7F.js.map +1 -0
  94. package/dist/chunk-QBZMY2AF.js +90 -0
  95. package/dist/chunk-QBZMY2AF.js.map +1 -0
  96. package/dist/chunk-QCJAASJT.js +242 -0
  97. package/dist/chunk-QCJAASJT.js.map +1 -0
  98. package/dist/chunk-QFM4Z2SS.js +19 -0
  99. package/dist/chunk-QFM4Z2SS.js.map +1 -0
  100. package/dist/chunk-SBJV3K4G.js +120 -0
  101. package/dist/chunk-SBJV3K4G.js.map +1 -0
  102. package/dist/chunk-SCUT2ZCD.js +109 -0
  103. package/dist/chunk-SCUT2ZCD.js.map +1 -0
  104. package/dist/chunk-SVXDWPLO.js +102 -0
  105. package/dist/chunk-SVXDWPLO.js.map +1 -0
  106. package/dist/chunk-SXSCHWZU.js +27 -0
  107. package/dist/chunk-SXSCHWZU.js.map +1 -0
  108. package/dist/chunk-T465NJRL.js +134 -0
  109. package/dist/chunk-T465NJRL.js.map +1 -0
  110. package/dist/chunk-TAP3PBQT.js +39 -0
  111. package/dist/chunk-TAP3PBQT.js.map +1 -0
  112. package/dist/chunk-TKA4LOMT.js +37 -0
  113. package/dist/chunk-TKA4LOMT.js.map +1 -0
  114. package/dist/chunk-UGHQFQOE.js +142 -0
  115. package/dist/chunk-UGHQFQOE.js.map +1 -0
  116. package/dist/chunk-W5Y3LG5K.js +26 -0
  117. package/dist/chunk-W5Y3LG5K.js.map +1 -0
  118. package/dist/chunk-W64GERJW.js +22 -0
  119. package/dist/chunk-W64GERJW.js.map +1 -0
  120. package/dist/chunk-WALXVR6V.js +9 -0
  121. package/dist/chunk-WALXVR6V.js.map +1 -0
  122. package/dist/chunk-WZWR2ELB.js +30 -0
  123. package/dist/chunk-WZWR2ELB.js.map +1 -0
  124. package/dist/chunk-X7KMF6NH.js +59 -0
  125. package/dist/chunk-X7KMF6NH.js.map +1 -0
  126. package/dist/chunk-XISSLIMH.js +20 -0
  127. package/dist/chunk-XISSLIMH.js.map +1 -0
  128. package/dist/chunk-YZEA5TGK.js +87 -0
  129. package/dist/chunk-YZEA5TGK.js.map +1 -0
  130. package/dist/chunk-ZD32TSOK.js +101 -0
  131. package/dist/chunk-ZD32TSOK.js.map +1 -0
  132. package/dist/chunk-ZDAT5JDH.js +82 -0
  133. package/dist/chunk-ZDAT5JDH.js.map +1 -0
  134. package/dist/components/data/index.d.ts +458 -0
  135. package/dist/components/data/index.js +2923 -0
  136. package/dist/components/data/index.js.map +1 -0
  137. package/dist/components/ui/accordion.d.ts +9 -0
  138. package/dist/components/ui/accordion.js +4 -0
  139. package/dist/components/ui/accordion.js.map +1 -0
  140. package/dist/components/ui/alert-dialog.d.ts +17 -0
  141. package/dist/components/ui/alert-dialog.js +4 -0
  142. package/dist/components/ui/alert-dialog.js.map +1 -0
  143. package/dist/components/ui/alert.d.ts +14 -0
  144. package/dist/components/ui/alert.js +4 -0
  145. package/dist/components/ui/alert.js.map +1 -0
  146. package/dist/components/ui/aspect-ratio.d.ts +6 -0
  147. package/dist/components/ui/aspect-ratio.js +3 -0
  148. package/dist/components/ui/aspect-ratio.js.map +1 -0
  149. package/dist/components/ui/avatar.d.ts +8 -0
  150. package/dist/components/ui/avatar.js +4 -0
  151. package/dist/components/ui/avatar.js.map +1 -0
  152. package/dist/components/ui/badge.d.ts +13 -0
  153. package/dist/components/ui/badge.js +4 -0
  154. package/dist/components/ui/badge.js.map +1 -0
  155. package/dist/components/ui/breadcrumb.d.ts +22 -0
  156. package/dist/components/ui/breadcrumb.js +4 -0
  157. package/dist/components/ui/breadcrumb.js.map +1 -0
  158. package/dist/components/ui/button-group.d.ts +9 -0
  159. package/dist/components/ui/button-group.js +4 -0
  160. package/dist/components/ui/button-group.js.map +1 -0
  161. package/dist/components/ui/button.d.ts +15 -0
  162. package/dist/components/ui/button.js +4 -0
  163. package/dist/components/ui/button.js.map +1 -0
  164. package/dist/components/ui/calendar.d.ts +13 -0
  165. package/dist/components/ui/calendar.js +5 -0
  166. package/dist/components/ui/calendar.js.map +1 -0
  167. package/dist/components/ui/card.d.ts +11 -0
  168. package/dist/components/ui/card.js +4 -0
  169. package/dist/components/ui/card.js.map +1 -0
  170. package/dist/components/ui/carousel.d.ts +24 -0
  171. package/dist/components/ui/carousel.js +5 -0
  172. package/dist/components/ui/carousel.js.map +1 -0
  173. package/dist/components/ui/chart.d.ts +51 -0
  174. package/dist/components/ui/chart.js +4 -0
  175. package/dist/components/ui/chart.js.map +1 -0
  176. package/dist/components/ui/checkbox.d.ts +6 -0
  177. package/dist/components/ui/checkbox.js +4 -0
  178. package/dist/components/ui/checkbox.js.map +1 -0
  179. package/dist/components/ui/collapsible.d.ts +8 -0
  180. package/dist/components/ui/collapsible.js +3 -0
  181. package/dist/components/ui/collapsible.js.map +1 -0
  182. package/dist/components/ui/command.d.ts +85 -0
  183. package/dist/components/ui/command.js +5 -0
  184. package/dist/components/ui/command.js.map +1 -0
  185. package/dist/components/ui/context-menu.d.ts +30 -0
  186. package/dist/components/ui/context-menu.js +4 -0
  187. package/dist/components/ui/context-menu.js.map +1 -0
  188. package/dist/components/ui/date-picker.d.ts +12 -0
  189. package/dist/components/ui/date-picker.js +7 -0
  190. package/dist/components/ui/date-picker.js.map +1 -0
  191. package/dist/components/ui/dialog.d.ts +18 -0
  192. package/dist/components/ui/dialog.js +4 -0
  193. package/dist/components/ui/dialog.js.map +1 -0
  194. package/dist/components/ui/drawer.d.ts +27 -0
  195. package/dist/components/ui/drawer.js +4 -0
  196. package/dist/components/ui/drawer.js.map +1 -0
  197. package/dist/components/ui/dropdown-menu.d.ts +30 -0
  198. package/dist/components/ui/dropdown-menu.js +4 -0
  199. package/dist/components/ui/dropdown-menu.js.map +1 -0
  200. package/dist/components/ui/empty-state.d.ts +22 -0
  201. package/dist/components/ui/empty-state.js +4 -0
  202. package/dist/components/ui/empty-state.js.map +1 -0
  203. package/dist/components/ui/form-field.d.ts +17 -0
  204. package/dist/components/ui/form-field.js +5 -0
  205. package/dist/components/ui/form-field.js.map +1 -0
  206. package/dist/components/ui/hover-card.d.ts +8 -0
  207. package/dist/components/ui/hover-card.js +4 -0
  208. package/dist/components/ui/hover-card.js.map +1 -0
  209. package/dist/components/ui/input-group.d.ts +14 -0
  210. package/dist/components/ui/input-group.js +4 -0
  211. package/dist/components/ui/input-group.js.map +1 -0
  212. package/dist/components/ui/input-otp.d.ts +37 -0
  213. package/dist/components/ui/input-otp.js +4 -0
  214. package/dist/components/ui/input-otp.js.map +1 -0
  215. package/dist/components/ui/input.d.ts +5 -0
  216. package/dist/components/ui/input.js +4 -0
  217. package/dist/components/ui/input.js.map +1 -0
  218. package/dist/components/ui/kbd.d.ts +8 -0
  219. package/dist/components/ui/kbd.js +4 -0
  220. package/dist/components/ui/kbd.js.map +1 -0
  221. package/dist/components/ui/label.d.ts +8 -0
  222. package/dist/components/ui/label.js +4 -0
  223. package/dist/components/ui/label.js.map +1 -0
  224. package/dist/components/ui/menubar.d.ts +31 -0
  225. package/dist/components/ui/menubar.js +4 -0
  226. package/dist/components/ui/menubar.js.map +1 -0
  227. package/dist/components/ui/navigation-menu.d.ts +15 -0
  228. package/dist/components/ui/navigation-menu.js +4 -0
  229. package/dist/components/ui/navigation-menu.js.map +1 -0
  230. package/dist/components/ui/pagination.d.ts +33 -0
  231. package/dist/components/ui/pagination.js +5 -0
  232. package/dist/components/ui/pagination.js.map +1 -0
  233. package/dist/components/ui/popover.d.ts +8 -0
  234. package/dist/components/ui/popover.js +4 -0
  235. package/dist/components/ui/popover.js.map +1 -0
  236. package/dist/components/ui/progress.d.ts +9 -0
  237. package/dist/components/ui/progress.js +4 -0
  238. package/dist/components/ui/progress.js.map +1 -0
  239. package/dist/components/ui/radio-group.d.ts +7 -0
  240. package/dist/components/ui/radio-group.js +4 -0
  241. package/dist/components/ui/radio-group.js.map +1 -0
  242. package/dist/components/ui/resizable.d.ts +27 -0
  243. package/dist/components/ui/resizable.js +4 -0
  244. package/dist/components/ui/resizable.js.map +1 -0
  245. package/dist/components/ui/scroll-area.d.ts +9 -0
  246. package/dist/components/ui/scroll-area.js +4 -0
  247. package/dist/components/ui/scroll-area.js.map +1 -0
  248. package/dist/components/ui/select.d.ts +13 -0
  249. package/dist/components/ui/select.js +4 -0
  250. package/dist/components/ui/select.js.map +1 -0
  251. package/dist/components/ui/separator.d.ts +10 -0
  252. package/dist/components/ui/separator.js +4 -0
  253. package/dist/components/ui/separator.js.map +1 -0
  254. package/dist/components/ui/sheet.d.ts +29 -0
  255. package/dist/components/ui/sheet.js +4 -0
  256. package/dist/components/ui/sheet.js.map +1 -0
  257. package/dist/components/ui/skeleton.d.ts +6 -0
  258. package/dist/components/ui/skeleton.js +4 -0
  259. package/dist/components/ui/skeleton.js.map +1 -0
  260. package/dist/components/ui/slider.d.ts +6 -0
  261. package/dist/components/ui/slider.js +4 -0
  262. package/dist/components/ui/slider.js.map +1 -0
  263. package/dist/components/ui/sonner.d.ts +9 -0
  264. package/dist/components/ui/sonner.js +4 -0
  265. package/dist/components/ui/sonner.js.map +1 -0
  266. package/dist/components/ui/spinner.d.ts +9 -0
  267. package/dist/components/ui/spinner.js +4 -0
  268. package/dist/components/ui/spinner.js.map +1 -0
  269. package/dist/components/ui/switch.d.ts +6 -0
  270. package/dist/components/ui/switch.js +4 -0
  271. package/dist/components/ui/switch.js.map +1 -0
  272. package/dist/components/ui/table.d.ts +12 -0
  273. package/dist/components/ui/table.js +4 -0
  274. package/dist/components/ui/table.js.map +1 -0
  275. package/dist/components/ui/tabs.d.ts +20 -0
  276. package/dist/components/ui/tabs.js +4 -0
  277. package/dist/components/ui/tabs.js.map +1 -0
  278. package/dist/components/ui/textarea.d.ts +5 -0
  279. package/dist/components/ui/textarea.js +4 -0
  280. package/dist/components/ui/textarea.js.map +1 -0
  281. package/dist/components/ui/toggle-group.d.ts +15 -0
  282. package/dist/components/ui/toggle-group.js +5 -0
  283. package/dist/components/ui/toggle-group.js.map +1 -0
  284. package/dist/components/ui/toggle.d.ts +15 -0
  285. package/dist/components/ui/toggle.js +4 -0
  286. package/dist/components/ui/toggle.js.map +1 -0
  287. package/dist/components/ui/tooltip.d.ts +10 -0
  288. package/dist/components/ui/tooltip.js +4 -0
  289. package/dist/components/ui/tooltip.js.map +1 -0
  290. package/dist/components/ui/typography.d.ts +14 -0
  291. package/dist/components/ui/typography.js +4 -0
  292. package/dist/components/ui/typography.js.map +1 -0
  293. package/dist/hooks/index.d.ts +13 -0
  294. package/dist/hooks/index.js +11 -0
  295. package/dist/hooks/index.js.map +1 -0
  296. package/dist/hooks/use-data-filters.d.ts +32 -0
  297. package/dist/hooks/use-data-filters.js +4 -0
  298. package/dist/hooks/use-data-filters.js.map +1 -0
  299. package/dist/hooks/use-keyboard-navigation.d.ts +29 -0
  300. package/dist/hooks/use-keyboard-navigation.js +3 -0
  301. package/dist/hooks/use-keyboard-navigation.js.map +1 -0
  302. package/dist/hooks/use-mobile.d.ts +3 -0
  303. package/dist/hooks/use-mobile.js +3 -0
  304. package/dist/hooks/use-mobile.js.map +1 -0
  305. package/dist/hooks/use-one.d.ts +18 -0
  306. package/dist/hooks/use-one.js +4 -0
  307. package/dist/hooks/use-one.js.map +1 -0
  308. package/dist/hooks/use-prefetch.d.ts +19 -0
  309. package/dist/hooks/use-prefetch.js +3 -0
  310. package/dist/hooks/use-prefetch.js.map +1 -0
  311. package/dist/hooks/use-resource-form.d.ts +37 -0
  312. package/dist/hooks/use-resource-form.js +7 -0
  313. package/dist/hooks/use-resource-form.js.map +1 -0
  314. package/dist/hooks/use-resource-page.d.ts +5 -0
  315. package/dist/hooks/use-resource-page.js +4 -0
  316. package/dist/hooks/use-resource-page.js.map +1 -0
  317. package/dist/hooks/use-resource.d.ts +46 -0
  318. package/dist/hooks/use-resource.js +4 -0
  319. package/dist/hooks/use-resource.js.map +1 -0
  320. package/dist/hooks/use-view-preference.d.ts +6 -0
  321. package/dist/hooks/use-view-preference.js +3 -0
  322. package/dist/hooks/use-view-preference.js.map +1 -0
  323. package/dist/hooks/use-view-settings.d.ts +15 -0
  324. package/dist/hooks/use-view-settings.js +3 -0
  325. package/dist/hooks/use-view-settings.js.map +1 -0
  326. package/dist/hooks/use-wizard.d.ts +25 -0
  327. package/dist/hooks/use-wizard.js +3 -0
  328. package/dist/hooks/use-wizard.js.map +1 -0
  329. package/dist/index.d.ts +87 -0
  330. package/dist/index.js +56 -0
  331. package/dist/index.js.map +1 -0
  332. package/dist/navigation-qI86Ldug.d.ts +90 -0
  333. package/dist/provider/index.d.ts +1 -0
  334. package/dist/provider/index.js +3 -0
  335. package/dist/provider/index.js.map +1 -0
  336. package/dist/status-colors.d.ts +29 -0
  337. package/dist/status-colors.js +72 -0
  338. package/dist/status-colors.js.map +1 -0
  339. package/dist/types-HIZY7zxO.d.ts +61 -0
  340. package/dist/use-resource-page-BzvUM8de.d.ts +159 -0
  341. package/dist/utils.d.ts +7 -0
  342. package/dist/utils.js +3 -0
  343. package/dist/utils.js.map +1 -0
  344. package/package.json +350 -0
@@ -0,0 +1,22 @@
1
+ import { cn } from './chunk-NZ5WBA4R.js';
2
+ import { Loader2 } from 'lucide-react';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ var sizeClasses = {
6
+ sm: "h-4 w-4",
7
+ default: "h-6 w-6",
8
+ lg: "h-8 w-8"
9
+ };
10
+ function Spinner({ className, size = "default", ...props }) {
11
+ return /* @__PURE__ */ jsx(
12
+ Loader2,
13
+ {
14
+ className: cn("animate-spin text-muted-foreground", sizeClasses[size], className),
15
+ ...props
16
+ }
17
+ );
18
+ }
19
+
20
+ export { Spinner };
21
+ //# sourceMappingURL=chunk-OVU3Z2MT.js.map
22
+ //# sourceMappingURL=chunk-OVU3Z2MT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ui/spinner.tsx"],"names":[],"mappings":";;;;AASA,IAAM,WAAA,GAAc;AAAA,EAClB,EAAA,EAAI,SAAA;AAAA,EACJ,OAAA,EAAS,SAAA;AAAA,EACT,EAAA,EAAI;AACN,CAAA;AAEA,SAAS,QAAQ,EAAE,SAAA,EAAW,OAAO,SAAA,EAAW,GAAG,OAAM,EAAiB;AACxE,EAAA,uBACE,GAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,WAAW,EAAA,CAAG,oCAAA,EAAsC,WAAA,CAAY,IAAI,GAAG,SAAS,CAAA;AAAA,MAC/E,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-OVU3Z2MT.js","sourcesContent":["import * as React from \"react\";\nimport { Loader2 } from \"lucide-react\";\n\nimport { cn } from \"../../utils\";\n\ninterface SpinnerProps extends React.HTMLAttributes<SVGSVGElement> {\n size?: \"sm\" | \"default\" | \"lg\";\n}\n\nconst sizeClasses = {\n sm: \"h-4 w-4\",\n default: \"h-6 w-6\",\n lg: \"h-8 w-8\",\n} as const;\n\nfunction Spinner({ className, size = \"default\", ...props }: SpinnerProps) {\n return (\n <Loader2\n className={cn(\"animate-spin text-muted-foreground\", sizeClasses[size], className)}\n {...props}\n />\n );\n}\n\nexport { Spinner, type SpinnerProps };\n"]}
@@ -0,0 +1,35 @@
1
+ "use client";
2
+ import { useState, useEffect, useCallback } from 'react';
3
+ import { useStorage } from '@marktiderman/genesis-core';
4
+
5
+ // src/hooks/use-view-settings.ts
6
+ var DEFAULT_SETTINGS = {
7
+ pageSize: 25,
8
+ density: "comfortable"
9
+ };
10
+ function useViewSettings(key) {
11
+ const storage = useStorage();
12
+ const storageKey = `genesis-settings-${key}`;
13
+ const [settings, setSettings] = useState(() => {
14
+ try {
15
+ const saved = storage.getItem(storageKey);
16
+ if (saved) return { ...DEFAULT_SETTINGS, ...JSON.parse(saved) };
17
+ } catch {
18
+ }
19
+ return DEFAULT_SETTINGS;
20
+ });
21
+ useEffect(() => {
22
+ storage.setItem(storageKey, JSON.stringify(settings));
23
+ }, [settings, storageKey, storage]);
24
+ const updateSetting = useCallback(
25
+ (settingKey, value) => {
26
+ setSettings((prev) => ({ ...prev, [settingKey]: value }));
27
+ },
28
+ []
29
+ );
30
+ return { settings, updateSetting };
31
+ }
32
+
33
+ export { useViewSettings };
34
+ //# sourceMappingURL=chunk-OZ7ZAYCS.js.map
35
+ //# sourceMappingURL=chunk-OZ7ZAYCS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/use-view-settings.ts"],"names":[],"mappings":";;;;AAaA,IAAM,gBAAA,GAAiC;AAAA,EACrC,QAAA,EAAU,EAAA;AAAA,EACV,OAAA,EAAS;AACX,CAAA;AAEO,SAAS,gBAAgB,GAAA,EAAa;AAC3C,EAAA,MAAM,UAAU,UAAA,EAAW;AAC3B,EAAA,MAAM,UAAA,GAAa,oBAAoB,GAAG,CAAA,CAAA;AAE1C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAuB,MAAM;AAC3D,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,OAAA,CAAQ,UAAU,CAAA;AACxC,MAAA,IAAI,KAAA,SAAc,EAAE,GAAG,kBAAkB,GAAG,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,EAAE;AAAA,IAChE,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,OAAO,gBAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,OAAA,CAAQ,OAAA,CAAQ,UAAA,EAAY,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAC,CAAA;AAAA,EACtD,CAAA,EAAG,CAAC,QAAA,EAAU,UAAA,EAAY,OAAO,CAAC,CAAA;AAElC,EAAA,MAAM,aAAA,GAAgB,WAAA;AAAA,IACpB,CAA+B,YAAe,KAAA,KAA2B;AACvE,MAAA,WAAA,CAAY,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,UAAU,GAAG,KAAA,EAAM,CAAE,CAAA;AAAA,IAC1D,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,OAAO,EAAE,UAAU,aAAA,EAAc;AACnC","file":"chunk-OZ7ZAYCS.js","sourcesContent":["\"use client\";\n\nimport { useState, useEffect, useCallback } from \"react\";\nimport { useStorage } from \"@marktiderman/genesis-core\";\n\nexport type Density = \"compact\" | \"comfortable\" | \"spacious\";\n\nexport interface ViewSettings {\n pageSize: number;\n density: Density;\n defaultSort?: { key: string; direction: \"asc\" | \"desc\" };\n}\n\nconst DEFAULT_SETTINGS: ViewSettings = {\n pageSize: 25,\n density: \"comfortable\",\n};\n\nexport function useViewSettings(key: string) {\n const storage = useStorage();\n const storageKey = `genesis-settings-${key}`;\n\n const [settings, setSettings] = useState<ViewSettings>(() => {\n try {\n const saved = storage.getItem(storageKey);\n if (saved) return { ...DEFAULT_SETTINGS, ...JSON.parse(saved) };\n } catch {\n // ignore\n }\n return DEFAULT_SETTINGS;\n });\n\n useEffect(() => {\n storage.setItem(storageKey, JSON.stringify(settings));\n }, [settings, storageKey, storage]);\n\n const updateSetting = useCallback(\n <K extends keyof ViewSettings>(settingKey: K, value: ViewSettings[K]) => {\n setSettings((prev) => ({ ...prev, [settingKey]: value }));\n },\n [],\n );\n\n return { settings, updateSetting };\n}\n"]}
@@ -0,0 +1,51 @@
1
+ import { cn } from './chunk-NZ5WBA4R.js';
2
+ import * as React from 'react';
3
+ import { cva } from 'class-variance-authority';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var alertVariants = cva(
7
+ "relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground",
8
+ {
9
+ variants: {
10
+ variant: {
11
+ default: "bg-background text-foreground",
12
+ destructive: "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive"
13
+ }
14
+ },
15
+ defaultVariants: {
16
+ variant: "default"
17
+ }
18
+ }
19
+ );
20
+ var Alert = React.forwardRef(({ className, variant, ...props }, ref) => /* @__PURE__ */ jsx(
21
+ "div",
22
+ {
23
+ ref,
24
+ role: "alert",
25
+ className: cn(alertVariants({ variant }), className),
26
+ ...props
27
+ }
28
+ ));
29
+ Alert.displayName = "Alert";
30
+ var AlertTitle = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
31
+ "h5",
32
+ {
33
+ ref,
34
+ className: cn("mb-1 font-medium leading-none tracking-tight", className),
35
+ ...props
36
+ }
37
+ ));
38
+ AlertTitle.displayName = "AlertTitle";
39
+ var AlertDescription = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
40
+ "div",
41
+ {
42
+ ref,
43
+ className: cn("text-sm [&_p]:leading-relaxed", className),
44
+ ...props
45
+ }
46
+ ));
47
+ AlertDescription.displayName = "AlertDescription";
48
+
49
+ export { Alert, AlertDescription, AlertTitle, alertVariants };
50
+ //# sourceMappingURL=chunk-OZZTPE7F.js.map
51
+ //# sourceMappingURL=chunk-OZZTPE7F.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ui/alert.tsx"],"names":[],"mappings":";;;;;AAIA,IAAM,aAAA,GAAgB,GAAA;AAAA,EACpB,2JAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,+BAAA;AAAA,QACT,WAAA,EACE;AAAA;AACJ,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ;AAEA,IAAM,KAAA,GAAc,iBAGlB,CAAC,EAAE,WAAW,OAAA,EAAS,GAAG,KAAA,EAAM,EAAG,GAAA,qBACnC,GAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,IAAA,EAAK,OAAA;AAAA,IACL,WAAW,EAAA,CAAG,aAAA,CAAc,EAAE,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,IAClD,GAAG;AAAA;AACN,CACD;AACD,KAAA,CAAM,WAAA,GAAc,OAAA;AAEpB,IAAM,UAAA,GAAmB,iBAGvB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAAC,IAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,8CAAA,EAAgD,SAAS,CAAA;AAAA,IACtE,GAAG;AAAA;AACN,CACD;AACD,UAAA,CAAW,WAAA,GAAc,YAAA;AAEzB,IAAM,gBAAA,GAAyB,iBAG7B,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,IACvD,GAAG;AAAA;AACN,CACD;AACD,gBAAA,CAAiB,WAAA,GAAc,kBAAA","file":"chunk-OZZTPE7F.js","sourcesContent":["import * as React from \"react\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport { cn } from \"../../utils\";\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground\",\n {\n variants: {\n variant: {\n default: \"bg-background text-foreground\",\n destructive:\n \"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n));\nAlert.displayName = \"Alert\";\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h5\n ref={ref}\n className={cn(\"mb-1 font-medium leading-none tracking-tight\", className)}\n {...props}\n />\n));\nAlertTitle.displayName = \"AlertTitle\";\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm [&_p]:leading-relaxed\", className)}\n {...props}\n />\n));\nAlertDescription.displayName = \"AlertDescription\";\n\nexport { Alert, AlertTitle, AlertDescription, alertVariants };\n"]}
@@ -0,0 +1,90 @@
1
+ "use client";
2
+ import { cn } from './chunk-NZ5WBA4R.js';
3
+ import * as React from 'react';
4
+ import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
+
7
+ var AlertDialog = AlertDialogPrimitive.Root;
8
+ var AlertDialogTrigger = AlertDialogPrimitive.Trigger;
9
+ var AlertDialogPortal = AlertDialogPrimitive.Portal;
10
+ var AlertDialogOverlay = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
11
+ AlertDialogPrimitive.Overlay,
12
+ {
13
+ className: cn(
14
+ "fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
15
+ className
16
+ ),
17
+ ...props,
18
+ ref
19
+ }
20
+ ));
21
+ AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
22
+ var AlertDialogContent = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [
23
+ /* @__PURE__ */ jsx(AlertDialogOverlay, {}),
24
+ /* @__PURE__ */ jsx(
25
+ AlertDialogPrimitive.Content,
26
+ {
27
+ ref,
28
+ className: cn(
29
+ "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-card p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
30
+ className
31
+ ),
32
+ ...props
33
+ }
34
+ )
35
+ ] }));
36
+ AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
37
+ var AlertDialogHeader = ({
38
+ className,
39
+ ...props
40
+ }) => /* @__PURE__ */ jsx("div", { className: cn("flex flex-col space-y-2 text-center sm:text-left", className), ...props });
41
+ var AlertDialogFooter = ({
42
+ className,
43
+ ...props
44
+ }) => /* @__PURE__ */ jsx("div", { className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className), ...props });
45
+ var AlertDialogTitle = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
46
+ AlertDialogPrimitive.Title,
47
+ {
48
+ ref,
49
+ className: cn("text-lg font-semibold", className),
50
+ ...props
51
+ }
52
+ ));
53
+ AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
54
+ var AlertDialogDescription = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
55
+ AlertDialogPrimitive.Description,
56
+ {
57
+ ref,
58
+ className: cn("text-sm text-muted-foreground", className),
59
+ ...props
60
+ }
61
+ ));
62
+ AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;
63
+ var AlertDialogAction = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
64
+ AlertDialogPrimitive.Action,
65
+ {
66
+ ref,
67
+ className: cn(
68
+ "inline-flex h-10 items-center justify-center rounded-lg bg-destructive px-4 py-2 text-sm font-semibold text-destructive-foreground transition-colors hover:bg-destructive/90 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
69
+ className
70
+ ),
71
+ ...props
72
+ }
73
+ ));
74
+ AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
75
+ var AlertDialogCancel = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
76
+ AlertDialogPrimitive.Cancel,
77
+ {
78
+ ref,
79
+ className: cn(
80
+ "mt-2 inline-flex h-10 items-center justify-center rounded-lg border border-border bg-card px-4 py-2 text-sm font-medium transition-colors hover:bg-accent focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 sm:mt-0",
81
+ className
82
+ ),
83
+ ...props
84
+ }
85
+ ));
86
+ AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
87
+
88
+ export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger };
89
+ //# sourceMappingURL=chunk-QBZMY2AF.js.map
90
+ //# sourceMappingURL=chunk-QBZMY2AF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ui/alert-dialog.tsx"],"names":[],"mappings":"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","file":"chunk-QBZMY2AF.js","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\";\nimport { cn } from \"../../utils\";\n\nconst AlertDialog = AlertDialogPrimitive.Root;\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger;\nconst AlertDialogPortal = AlertDialogPrimitive.Portal;\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ComponentRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n ref={ref}\n />\n));\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;\n\nconst AlertDialogContent = React.forwardRef<\n React.ComponentRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-card p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n));\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;\n\nconst AlertDialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col space-y-2 text-center sm:text-left\", className)} {...props} />\n);\n\nconst AlertDialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\", className)} {...props} />\n);\n\nconst AlertDialogTitle = React.forwardRef<\n React.ComponentRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title\n ref={ref}\n className={cn(\"text-lg font-semibold\", className)}\n {...props}\n />\n));\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;\n\nconst AlertDialogDescription = React.forwardRef<\n React.ComponentRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nAlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;\n\nconst AlertDialogAction = React.forwardRef<\n React.ComponentRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action\n ref={ref}\n className={cn(\n \"inline-flex h-10 items-center justify-center rounded-lg bg-destructive px-4 py-2 text-sm font-semibold text-destructive-foreground transition-colors hover:bg-destructive/90 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n {...props}\n />\n));\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;\n\nconst AlertDialogCancel = React.forwardRef<\n React.ComponentRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(\n \"mt-2 inline-flex h-10 items-center justify-center rounded-lg border border-border bg-card px-4 py-2 text-sm font-medium transition-colors hover:bg-accent focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 sm:mt-0\",\n className\n )}\n {...props}\n />\n));\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n};\n"]}
@@ -0,0 +1,242 @@
1
+ "use client";
2
+ import { cn } from './chunk-NZ5WBA4R.js';
3
+ import * as React from 'react';
4
+ import * as RechartsPrimitive from 'recharts';
5
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
6
+
7
+ var THEMES = { light: "", dark: ".dark" };
8
+ var INITIAL_DIMENSION = { width: 320, height: 200 };
9
+ var ChartContext = React.createContext(null);
10
+ function useChart() {
11
+ const context = React.useContext(ChartContext);
12
+ if (!context) {
13
+ throw new Error("useChart must be used within a <ChartContainer />");
14
+ }
15
+ return context;
16
+ }
17
+ function ChartContainer({
18
+ id,
19
+ className,
20
+ children,
21
+ config,
22
+ initialDimension = INITIAL_DIMENSION,
23
+ ...props
24
+ }) {
25
+ const uniqueId = React.useId();
26
+ const chartId = `chart-${id ?? uniqueId.replace(/:/g, "")}`;
27
+ return /* @__PURE__ */ jsx(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs(
28
+ "div",
29
+ {
30
+ "data-slot": "chart",
31
+ "data-chart": chartId,
32
+ className: cn(
33
+ "flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden",
34
+ className
35
+ ),
36
+ ...props,
37
+ children: [
38
+ /* @__PURE__ */ jsx(ChartStyle, { id: chartId, config }),
39
+ /* @__PURE__ */ jsx(
40
+ RechartsPrimitive.ResponsiveContainer,
41
+ {
42
+ initialDimension,
43
+ children
44
+ }
45
+ )
46
+ ]
47
+ }
48
+ ) });
49
+ }
50
+ var ChartStyle = ({ id, config }) => {
51
+ const colorConfig = Object.entries(config).filter(
52
+ ([, itemConfig]) => itemConfig.theme ?? itemConfig.color
53
+ );
54
+ if (!colorConfig.length) {
55
+ return null;
56
+ }
57
+ const cssText = Object.entries(THEMES).map(
58
+ ([theme, prefix]) => `
59
+ ${prefix} [data-chart=${id}] {
60
+ ${colorConfig.map(([key, itemConfig]) => {
61
+ const color = itemConfig.theme?.[theme] ?? itemConfig.color;
62
+ return color ? ` --color-${key}: ${color};` : null;
63
+ }).join("\n")}
64
+ }
65
+ `
66
+ ).join("\n");
67
+ return /* @__PURE__ */ jsx("style", { dangerouslySetInnerHTML: { __html: cssText } });
68
+ };
69
+ var ChartTooltip = RechartsPrimitive.Tooltip;
70
+ function ChartTooltipContent({
71
+ active,
72
+ payload,
73
+ className,
74
+ indicator = "dot",
75
+ hideLabel = false,
76
+ hideIndicator = false,
77
+ label,
78
+ labelFormatter,
79
+ labelClassName,
80
+ formatter,
81
+ color,
82
+ nameKey,
83
+ labelKey
84
+ }) {
85
+ const { config } = useChart();
86
+ const tooltipLabel = React.useMemo(() => {
87
+ if (hideLabel || !payload?.length) {
88
+ return null;
89
+ }
90
+ const [item] = payload;
91
+ const key = `${labelKey ?? item?.dataKey ?? item?.name ?? "value"}`;
92
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
93
+ const value = !labelKey && typeof label === "string" ? config[label]?.label ?? label : itemConfig?.label;
94
+ if (labelFormatter) {
95
+ return /* @__PURE__ */ jsx("div", { className: cn("font-medium", labelClassName), children: labelFormatter(value, payload) });
96
+ }
97
+ if (!value) {
98
+ return null;
99
+ }
100
+ return /* @__PURE__ */ jsx("div", { className: cn("font-medium", labelClassName), children: value });
101
+ }, [
102
+ label,
103
+ labelFormatter,
104
+ payload,
105
+ hideLabel,
106
+ labelClassName,
107
+ config,
108
+ labelKey
109
+ ]);
110
+ if (!active || !payload?.length) {
111
+ return null;
112
+ }
113
+ const nestLabel = payload.length === 1 && indicator !== "dot";
114
+ return /* @__PURE__ */ jsxs(
115
+ "div",
116
+ {
117
+ className: cn(
118
+ "grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl",
119
+ className
120
+ ),
121
+ children: [
122
+ !nestLabel ? tooltipLabel : null,
123
+ /* @__PURE__ */ jsx("div", { className: "grid gap-1.5", children: payload.filter((item) => item.type !== "none").map((item, index) => {
124
+ const key = `${nameKey ?? item.name ?? item.dataKey ?? "value"}`;
125
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
126
+ const indicatorColor = color ?? item.payload?.fill ?? item.color;
127
+ return /* @__PURE__ */ jsx(
128
+ "div",
129
+ {
130
+ className: cn(
131
+ "flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground",
132
+ indicator === "dot" && "items-center"
133
+ ),
134
+ children: formatter && item?.value !== void 0 && item.name ? formatter(item.value, item.name, item, index, item.payload) : /* @__PURE__ */ jsxs(Fragment, { children: [
135
+ itemConfig?.icon ? /* @__PURE__ */ jsx(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ jsx(
136
+ "div",
137
+ {
138
+ className: cn(
139
+ "shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)",
140
+ {
141
+ "h-2.5 w-2.5": indicator === "dot",
142
+ "w-1": indicator === "line",
143
+ "w-0 border-[1.5px] border-dashed bg-transparent": indicator === "dashed",
144
+ "my-0.5": nestLabel && indicator === "dashed"
145
+ }
146
+ ),
147
+ style: {
148
+ "--color-bg": indicatorColor,
149
+ "--color-border": indicatorColor
150
+ }
151
+ }
152
+ ),
153
+ /* @__PURE__ */ jsxs(
154
+ "div",
155
+ {
156
+ className: cn(
157
+ "flex flex-1 justify-between leading-none",
158
+ nestLabel ? "items-end" : "items-center"
159
+ ),
160
+ children: [
161
+ /* @__PURE__ */ jsxs("div", { className: "grid gap-1.5", children: [
162
+ nestLabel ? tooltipLabel : null,
163
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: itemConfig?.label ?? item.name })
164
+ ] }),
165
+ item.value != null && /* @__PURE__ */ jsx("span", { className: "font-mono font-medium text-foreground tabular-nums", children: typeof item.value === "number" ? item.value.toLocaleString() : String(item.value) })
166
+ ]
167
+ }
168
+ )
169
+ ] })
170
+ },
171
+ index
172
+ );
173
+ }) })
174
+ ]
175
+ }
176
+ );
177
+ }
178
+ var ChartLegend = RechartsPrimitive.Legend;
179
+ function ChartLegendContent({
180
+ className,
181
+ hideIcon = false,
182
+ payload,
183
+ verticalAlign = "bottom",
184
+ nameKey
185
+ }) {
186
+ const { config } = useChart();
187
+ if (!payload?.length) {
188
+ return null;
189
+ }
190
+ return /* @__PURE__ */ jsx(
191
+ "div",
192
+ {
193
+ className: cn(
194
+ "flex items-center justify-center gap-4",
195
+ verticalAlign === "top" ? "pb-3" : "pt-3",
196
+ className
197
+ ),
198
+ children: payload.filter((item) => item.type !== "none").map((item, index) => {
199
+ const key = `${nameKey ?? item.dataKey ?? "value"}`;
200
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
201
+ return /* @__PURE__ */ jsxs(
202
+ "div",
203
+ {
204
+ className: cn(
205
+ "flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"
206
+ ),
207
+ children: [
208
+ itemConfig?.icon && !hideIcon ? /* @__PURE__ */ jsx(itemConfig.icon, {}) : /* @__PURE__ */ jsx(
209
+ "div",
210
+ {
211
+ className: "h-2 w-2 shrink-0 rounded-[2px]",
212
+ style: {
213
+ backgroundColor: item.color
214
+ }
215
+ }
216
+ ),
217
+ itemConfig?.label
218
+ ]
219
+ },
220
+ index
221
+ );
222
+ })
223
+ }
224
+ );
225
+ }
226
+ function getPayloadConfigFromPayload(config, payload, key) {
227
+ if (typeof payload !== "object" || payload === null) {
228
+ return void 0;
229
+ }
230
+ const payloadPayload = "payload" in payload && typeof payload.payload === "object" && payload.payload !== null ? payload.payload : void 0;
231
+ let configLabelKey = key;
232
+ if (key in payload && typeof payload[key] === "string") {
233
+ configLabelKey = payload[key];
234
+ } else if (payloadPayload && key in payloadPayload && typeof payloadPayload[key] === "string") {
235
+ configLabelKey = payloadPayload[key];
236
+ }
237
+ return configLabelKey in config ? config[configLabelKey] : config[key];
238
+ }
239
+
240
+ export { ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent };
241
+ //# sourceMappingURL=chunk-QCJAASJT.js.map
242
+ //# sourceMappingURL=chunk-QCJAASJT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ui/chart.tsx"],"names":[],"mappings":"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","file":"chunk-QCJAASJT.js","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport * as RechartsPrimitive from \"recharts\";\n\nimport { cn } from \"../../utils\";\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: \"\", dark: \".dark\" } as const;\n\nconst INITIAL_DIMENSION = { width: 320, height: 200 } as const;\n\nexport type ChartConfig = Record<\n string,\n {\n label?: React.ReactNode;\n icon?: React.ComponentType;\n } & (\n | { color?: string; theme?: never }\n | { color?: never; theme: Record<keyof typeof THEMES, string> }\n )\n>;\n\ntype ChartContextProps = {\n config: ChartConfig;\n};\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null);\n\nfunction useChart() {\n const context = React.useContext(ChartContext);\n\n if (!context) {\n throw new Error(\"useChart must be used within a <ChartContainer />\");\n }\n\n return context;\n}\n\nfunction ChartContainer({\n id,\n className,\n children,\n config,\n initialDimension = INITIAL_DIMENSION,\n ...props\n}: React.ComponentProps<\"div\"> & {\n config: ChartConfig;\n children: React.ComponentProps<\n typeof RechartsPrimitive.ResponsiveContainer\n >[\"children\"];\n initialDimension?: {\n width: number;\n height: number;\n };\n}) {\n const uniqueId = React.useId();\n const chartId = `chart-${id ?? uniqueId.replace(/:/g, \"\")}`;\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n data-slot=\"chart\"\n data-chart={chartId}\n className={cn(\n \"flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden\",\n className,\n )}\n {...props}\n >\n <ChartStyle id={chartId} config={config} />\n <RechartsPrimitive.ResponsiveContainer\n initialDimension={initialDimension}\n >\n {children}\n </RechartsPrimitive.ResponsiveContainer>\n </div>\n </ChartContext.Provider>\n );\n}\n\n/**\n * ChartStyle injects scoped CSS custom properties for chart colors.\n * NOTE: Uses dangerouslySetInnerHTML intentionally -- this is the standard\n * Shadcn/UI pattern. The content is derived entirely from the developer-\n * provided ChartConfig (compile-time data), never from user input.\n */\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n const colorConfig = Object.entries(config).filter(\n ([, itemConfig]) => itemConfig.theme ?? itemConfig.color,\n );\n\n if (!colorConfig.length) {\n return null;\n }\n\n const cssText = Object.entries(THEMES)\n .map(\n ([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n .map(([key, itemConfig]) => {\n const color =\n itemConfig.theme?.[theme as keyof typeof itemConfig.theme] ??\n itemConfig.color;\n return color ? ` --color-${key}: ${color};` : null;\n })\n .join(\"\\n\")}\n}\n`,\n )\n .join(\"\\n\");\n\n // Safe: cssText is built from developer-provided ChartConfig, not user input\n // eslint-disable-next-line react/no-danger\n return <style dangerouslySetInnerHTML={{ __html: cssText }} />;\n};\n\nconst ChartTooltip = RechartsPrimitive.Tooltip;\n\nfunction ChartTooltipContent({\n active,\n payload,\n className,\n indicator = \"dot\",\n hideLabel = false,\n hideIndicator = false,\n label,\n labelFormatter,\n labelClassName,\n formatter,\n color,\n nameKey,\n labelKey,\n}: React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\n React.ComponentProps<\"div\"> & {\n hideLabel?: boolean;\n hideIndicator?: boolean;\n indicator?: \"line\" | \"dot\" | \"dashed\";\n nameKey?: string;\n labelKey?: string;\n }) {\n const { config } = useChart();\n\n const tooltipLabel = React.useMemo(() => {\n if (hideLabel || !payload?.length) {\n return null;\n }\n\n const [item] = payload;\n const key = `${labelKey ?? item?.dataKey ?? item?.name ?? \"value\"}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const value =\n !labelKey && typeof label === \"string\"\n ? (config[label]?.label ?? label)\n : itemConfig?.label;\n\n if (labelFormatter) {\n return (\n <div className={cn(\"font-medium\", labelClassName)}>\n {labelFormatter(value as string, payload)}\n </div>\n );\n }\n\n if (!value) {\n return null;\n }\n\n return <div className={cn(\"font-medium\", labelClassName)}>{value}</div>;\n }, [\n label,\n labelFormatter,\n payload,\n hideLabel,\n labelClassName,\n config,\n labelKey,\n ]);\n\n if (!active || !payload?.length) {\n return null;\n }\n\n const nestLabel = payload.length === 1 && indicator !== \"dot\";\n\n return (\n <div\n className={cn(\n \"grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl\",\n className,\n )}\n >\n {!nestLabel ? tooltipLabel : null}\n <div className=\"grid gap-1.5\">\n {payload\n .filter((item) => item.type !== \"none\")\n .map((item, index) => {\n const key = `${nameKey ?? item.name ?? item.dataKey ?? \"value\"}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const indicatorColor =\n color ?? (item.payload as Record<string, string>)?.fill ?? item.color;\n\n return (\n <div\n key={index}\n className={cn(\n \"flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground\",\n indicator === \"dot\" && \"items-center\",\n )}\n >\n {formatter && item?.value !== undefined && item.name ? (\n formatter(item.value, item.name, item, index, item.payload)\n ) : (\n <>\n {itemConfig?.icon ? (\n <itemConfig.icon />\n ) : (\n !hideIndicator && (\n <div\n className={cn(\n \"shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)\",\n {\n \"h-2.5 w-2.5\": indicator === \"dot\",\n \"w-1\": indicator === \"line\",\n \"w-0 border-[1.5px] border-dashed bg-transparent\":\n indicator === \"dashed\",\n \"my-0.5\":\n nestLabel && indicator === \"dashed\",\n },\n )}\n style={\n {\n \"--color-bg\": indicatorColor,\n \"--color-border\": indicatorColor,\n } as React.CSSProperties\n }\n />\n )\n )}\n <div\n className={cn(\n \"flex flex-1 justify-between leading-none\",\n nestLabel ? \"items-end\" : \"items-center\",\n )}\n >\n <div className=\"grid gap-1.5\">\n {nestLabel ? tooltipLabel : null}\n <span className=\"text-muted-foreground\">\n {itemConfig?.label ?? item.name}\n </span>\n </div>\n {item.value != null && (\n <span className=\"font-mono font-medium text-foreground tabular-nums\">\n {typeof item.value === \"number\"\n ? item.value.toLocaleString()\n : String(item.value)}\n </span>\n )}\n </div>\n </>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\nconst ChartLegend = RechartsPrimitive.Legend;\n\nfunction ChartLegendContent({\n className,\n hideIcon = false,\n payload,\n verticalAlign = \"bottom\",\n nameKey,\n}: React.ComponentProps<\"div\"> &\n Pick<RechartsPrimitive.LegendProps, \"payload\" | \"verticalAlign\"> & {\n hideIcon?: boolean;\n nameKey?: string;\n }) {\n const { config } = useChart();\n\n if (!payload?.length) {\n return null;\n }\n\n return (\n <div\n className={cn(\n \"flex items-center justify-center gap-4\",\n verticalAlign === \"top\" ? \"pb-3\" : \"pt-3\",\n className,\n )}\n >\n {payload\n .filter((item) => item.type !== \"none\")\n .map((item, index) => {\n const key = `${nameKey ?? (item as unknown as Record<string, unknown>).dataKey ?? \"value\"}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n\n return (\n <div\n key={index}\n className={cn(\n \"flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground\",\n )}\n >\n {itemConfig?.icon && !hideIcon ? (\n <itemConfig.icon />\n ) : (\n <div\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\n style={{\n backgroundColor: item.color,\n }}\n />\n )}\n {itemConfig?.label}\n </div>\n );\n })}\n </div>\n );\n}\n\n// Helper to extract item config from a payload.\nfunction getPayloadConfigFromPayload(\n config: ChartConfig,\n payload: unknown,\n key: string,\n) {\n if (typeof payload !== \"object\" || payload === null) {\n return undefined;\n }\n\n const payloadPayload =\n \"payload\" in payload &&\n typeof payload.payload === \"object\" &&\n payload.payload !== null\n ? payload.payload\n : undefined;\n\n let configLabelKey: string = key;\n\n if (\n key in payload &&\n typeof payload[key as keyof typeof payload] === \"string\"\n ) {\n configLabelKey = payload[key as keyof typeof payload] as string;\n } else if (\n payloadPayload &&\n key in payloadPayload &&\n typeof payloadPayload[key as keyof typeof payloadPayload] === \"string\"\n ) {\n configLabelKey = payloadPayload[\n key as keyof typeof payloadPayload\n ] as string;\n }\n\n return configLabelKey in config ? config[configLabelKey] : config[key];\n}\n\nexport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n ChartLegend,\n ChartLegendContent,\n ChartStyle,\n};\n"]}
@@ -0,0 +1,19 @@
1
+ import { cn } from './chunk-NZ5WBA4R.js';
2
+ import { jsx } from 'react/jsx-runtime';
3
+
4
+ function Skeleton({
5
+ className,
6
+ ...props
7
+ }) {
8
+ return /* @__PURE__ */ jsx(
9
+ "div",
10
+ {
11
+ className: cn("animate-pulse rounded-md bg-muted", className),
12
+ ...props
13
+ }
14
+ );
15
+ }
16
+
17
+ export { Skeleton };
18
+ //# sourceMappingURL=chunk-QFM4Z2SS.js.map
19
+ //# sourceMappingURL=chunk-QFM4Z2SS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ui/skeleton.tsx"],"names":[],"mappings":";;;AAGA,SAAS,QAAA,CAAS;AAAA,EAChB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAyC;AACvC,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,mCAAA,EAAqC,SAAS,CAAA;AAAA,MAC3D,GAAG;AAAA;AAAA,GACN;AAEJ","file":"chunk-QFM4Z2SS.js","sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../../utils\";\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"animate-pulse rounded-md bg-muted\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n"]}