@epilot/spark-ui 1.0.0-alpha.1 → 1.0.0-alpha.3

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 (549) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +2 -0
  3. package/README.md +7 -1
  4. package/dist/chunk-aJGBMT86.cjs +29 -0
  5. package/dist/components/accordion.cjs +57 -0
  6. package/dist/components/accordion.cjs.map +1 -0
  7. package/dist/components/accordion.d.cts +45 -0
  8. package/dist/components/accordion.d.ts +45 -0
  9. package/dist/components/accordion.js +51 -0
  10. package/dist/components/accordion.js.map +1 -0
  11. package/dist/components/alert-dialog.cjs +137 -0
  12. package/dist/components/alert-dialog.cjs.map +1 -0
  13. package/dist/components/alert-dialog.d.cts +63 -0
  14. package/dist/components/alert-dialog.d.ts +63 -0
  15. package/dist/components/alert-dialog.js +123 -0
  16. package/dist/components/alert-dialog.js.map +1 -0
  17. package/dist/components/attachment.cjs +119 -0
  18. package/dist/components/attachment.cjs.map +1 -0
  19. package/dist/components/attachment.d.cts +67 -0
  20. package/dist/components/attachment.d.ts +67 -0
  21. package/dist/components/attachment.js +108 -0
  22. package/dist/components/attachment.js.map +1 -0
  23. package/dist/components/badge.cjs +20 -0
  24. package/dist/components/badge.cjs.map +1 -0
  25. package/dist/components/badge.d.cts +12 -0
  26. package/dist/components/badge.d.ts +12 -0
  27. package/dist/components/badge.js +17 -0
  28. package/dist/components/badge.js.map +1 -0
  29. package/dist/components/bar-chart.cjs +519 -0
  30. package/dist/components/bar-chart.cjs.map +1 -0
  31. package/dist/components/bar-chart.d.cts +83 -0
  32. package/dist/components/bar-chart.d.ts +83 -0
  33. package/dist/components/bar-chart.js +517 -0
  34. package/dist/components/bar-chart.js.map +1 -0
  35. package/dist/components/battery-progress-row.cjs +140 -0
  36. package/dist/components/battery-progress-row.cjs.map +1 -0
  37. package/dist/components/battery-progress-row.d.cts +78 -0
  38. package/dist/components/battery-progress-row.d.ts +78 -0
  39. package/dist/components/battery-progress-row.js +129 -0
  40. package/dist/components/battery-progress-row.js.map +1 -0
  41. package/dist/components/breadcrumbs.cjs +65 -0
  42. package/dist/components/breadcrumbs.cjs.map +1 -0
  43. package/dist/components/breadcrumbs.d.cts +44 -0
  44. package/dist/components/breadcrumbs.d.ts +44 -0
  45. package/dist/components/breadcrumbs.js +58 -0
  46. package/dist/components/breadcrumbs.js.map +1 -0
  47. package/dist/components/bubble.cjs +84 -0
  48. package/dist/components/bubble.cjs.map +1 -0
  49. package/dist/components/bubble.d.cts +41 -0
  50. package/dist/components/bubble.d.ts +41 -0
  51. package/dist/components/bubble.js +78 -0
  52. package/dist/components/bubble.js.map +1 -0
  53. package/dist/components/button.cjs +54 -0
  54. package/dist/components/button.cjs.map +1 -0
  55. package/dist/components/button.d.cts +34 -0
  56. package/dist/components/button.d.ts +34 -0
  57. package/dist/components/button.js +50 -0
  58. package/dist/components/button.js.map +1 -0
  59. package/dist/components/calendar.cjs +58 -0
  60. package/dist/components/calendar.cjs.map +1 -0
  61. package/dist/components/calendar.d.cts +17 -0
  62. package/dist/components/calendar.d.ts +17 -0
  63. package/dist/components/calendar.js +55 -0
  64. package/dist/components/calendar.js.map +1 -0
  65. package/dist/components/callout.cjs +95 -0
  66. package/dist/components/callout.cjs.map +1 -0
  67. package/dist/components/callout.d.cts +39 -0
  68. package/dist/components/callout.d.ts +39 -0
  69. package/dist/components/callout.js +88 -0
  70. package/dist/components/callout.js.map +1 -0
  71. package/dist/components/card.cjs +86 -0
  72. package/dist/components/card.cjs.map +1 -0
  73. package/dist/components/card.d.cts +28 -0
  74. package/dist/components/card.d.ts +28 -0
  75. package/dist/components/card.js +76 -0
  76. package/dist/components/card.js.map +1 -0
  77. package/dist/components/chart.cjs +93 -0
  78. package/dist/components/chart.cjs.map +1 -0
  79. package/dist/components/chart.d.cts +83 -0
  80. package/dist/components/chart.d.ts +83 -0
  81. package/dist/components/chart.js +88 -0
  82. package/dist/components/chart.js.map +1 -0
  83. package/dist/components/checkbox.cjs +37 -0
  84. package/dist/components/checkbox.cjs.map +1 -0
  85. package/dist/components/checkbox.d.cts +22 -0
  86. package/dist/components/checkbox.d.ts +22 -0
  87. package/dist/components/checkbox.js +34 -0
  88. package/dist/components/checkbox.js.map +1 -0
  89. package/dist/components/circular-gauge.cjs +74 -0
  90. package/dist/components/circular-gauge.cjs.map +1 -0
  91. package/dist/components/circular-gauge.d.cts +38 -0
  92. package/dist/components/circular-gauge.d.ts +38 -0
  93. package/dist/components/circular-gauge.js +71 -0
  94. package/dist/components/circular-gauge.js.map +1 -0
  95. package/dist/components/day-of-week-picker.cjs +123 -0
  96. package/dist/components/day-of-week-picker.cjs.map +1 -0
  97. package/dist/components/day-of-week-picker.d.cts +39 -0
  98. package/dist/components/day-of-week-picker.d.ts +39 -0
  99. package/dist/components/day-of-week-picker.js +119 -0
  100. package/dist/components/day-of-week-picker.js.map +1 -0
  101. package/dist/components/device-card.cjs +118 -0
  102. package/dist/components/device-card.cjs.map +1 -0
  103. package/dist/components/device-card.d.cts +71 -0
  104. package/dist/components/device-card.d.ts +71 -0
  105. package/dist/components/device-card.js +104 -0
  106. package/dist/components/device-card.js.map +1 -0
  107. package/dist/components/dialog.cjs +115 -0
  108. package/dist/components/dialog.cjs.map +1 -0
  109. package/dist/components/dialog.d.cts +45 -0
  110. package/dist/components/dialog.d.ts +45 -0
  111. package/dist/components/dialog.js +103 -0
  112. package/dist/components/dialog.js.map +1 -0
  113. package/dist/components/donut-chart.cjs +71 -0
  114. package/dist/components/donut-chart.cjs.map +1 -0
  115. package/dist/components/donut-chart.d.cts +22 -0
  116. package/dist/components/donut-chart.d.ts +22 -0
  117. package/dist/components/donut-chart.js +69 -0
  118. package/dist/components/donut-chart.js.map +1 -0
  119. package/dist/components/drawer.cjs +95 -0
  120. package/dist/components/drawer.cjs.map +1 -0
  121. package/dist/components/drawer.d.cts +46 -0
  122. package/dist/components/drawer.d.ts +46 -0
  123. package/dist/components/drawer.js +83 -0
  124. package/dist/components/drawer.js.map +1 -0
  125. package/dist/components/dropdown-menu.cjs +165 -0
  126. package/dist/components/dropdown-menu.cjs.map +1 -0
  127. package/dist/components/dropdown-menu.d.cts +93 -0
  128. package/dist/components/dropdown-menu.d.ts +93 -0
  129. package/dist/components/dropdown-menu.js +148 -0
  130. package/dist/components/dropdown-menu.js.map +1 -0
  131. package/dist/components/empty-state.cjs +35 -0
  132. package/dist/components/empty-state.cjs.map +1 -0
  133. package/dist/components/empty-state.d.cts +22 -0
  134. package/dist/components/empty-state.d.ts +22 -0
  135. package/dist/components/empty-state.js +33 -0
  136. package/dist/components/empty-state.js.map +1 -0
  137. package/dist/components/energy-bar-chart.cjs +23 -0
  138. package/dist/components/energy-bar-chart.cjs.map +1 -0
  139. package/dist/components/energy-bar-chart.d.cts +43 -0
  140. package/dist/components/energy-bar-chart.d.ts +43 -0
  141. package/dist/components/energy-bar-chart.js +21 -0
  142. package/dist/components/energy-bar-chart.js.map +1 -0
  143. package/dist/components/energy-breakdown.cjs +81 -0
  144. package/dist/components/energy-breakdown.cjs.map +1 -0
  145. package/dist/components/energy-breakdown.d.cts +26 -0
  146. package/dist/components/energy-breakdown.d.ts +26 -0
  147. package/dist/components/energy-breakdown.js +79 -0
  148. package/dist/components/energy-breakdown.js.map +1 -0
  149. package/dist/components/energy-history-chart.cjs +56 -0
  150. package/dist/components/energy-history-chart.cjs.map +1 -0
  151. package/dist/components/energy-history-chart.d.cts +58 -0
  152. package/dist/components/energy-history-chart.d.ts +58 -0
  153. package/dist/components/energy-history-chart.js +54 -0
  154. package/dist/components/energy-history-chart.js.map +1 -0
  155. package/dist/components/feed-in-hero.cjs +56 -0
  156. package/dist/components/feed-in-hero.cjs.map +1 -0
  157. package/dist/components/feed-in-hero.d.cts +33 -0
  158. package/dist/components/feed-in-hero.d.ts +33 -0
  159. package/dist/components/feed-in-hero.js +51 -0
  160. package/dist/components/feed-in-hero.js.map +1 -0
  161. package/dist/components/field.cjs +257 -0
  162. package/dist/components/field.cjs.map +1 -0
  163. package/dist/components/field.d.cts +104 -0
  164. package/dist/components/field.d.ts +104 -0
  165. package/dist/components/field.js +243 -0
  166. package/dist/components/field.js.map +1 -0
  167. package/dist/components/icon.cjs +35 -0
  168. package/dist/components/icon.cjs.map +1 -0
  169. package/dist/components/icon.d.cts +27 -0
  170. package/dist/components/icon.d.ts +27 -0
  171. package/dist/components/icon.js +32 -0
  172. package/dist/components/icon.js.map +1 -0
  173. package/dist/components/info-block.cjs +75 -0
  174. package/dist/components/info-block.cjs.map +1 -0
  175. package/dist/components/info-block.d.cts +20 -0
  176. package/dist/components/info-block.d.ts +20 -0
  177. package/dist/components/info-block.js +65 -0
  178. package/dist/components/info-block.js.map +1 -0
  179. package/dist/components/input-group.cjs +164 -0
  180. package/dist/components/input-group.cjs.map +1 -0
  181. package/dist/components/input-group.d.cts +32 -0
  182. package/dist/components/input-group.d.ts +32 -0
  183. package/dist/components/input-group.js +158 -0
  184. package/dist/components/input-group.js.map +1 -0
  185. package/dist/components/input-otp.cjs +113 -0
  186. package/dist/components/input-otp.cjs.map +1 -0
  187. package/dist/components/input-otp.d.cts +22 -0
  188. package/dist/components/input-otp.d.ts +22 -0
  189. package/dist/components/input-otp.js +111 -0
  190. package/dist/components/input-otp.js.map +1 -0
  191. package/dist/components/input.cjs +112 -0
  192. package/dist/components/input.cjs.map +1 -0
  193. package/dist/components/input.d.cts +21 -0
  194. package/dist/components/input.d.ts +21 -0
  195. package/dist/components/input.js +109 -0
  196. package/dist/components/input.js.map +1 -0
  197. package/dist/components/label.cjs +18 -0
  198. package/dist/components/label.cjs.map +1 -0
  199. package/dist/components/label.d.cts +10 -0
  200. package/dist/components/label.d.ts +10 -0
  201. package/dist/components/label.js +15 -0
  202. package/dist/components/label.js.map +1 -0
  203. package/dist/components/layout.cjs +15 -0
  204. package/dist/components/layout.cjs.map +1 -0
  205. package/dist/components/layout.d.cts +12 -0
  206. package/dist/components/layout.d.ts +13 -0
  207. package/dist/components/layout.js +14 -0
  208. package/dist/components/layout.js.map +1 -0
  209. package/dist/components/line-chart.cjs +310 -0
  210. package/dist/components/line-chart.cjs.map +1 -0
  211. package/dist/components/line-chart.d.cts +71 -0
  212. package/dist/components/line-chart.d.ts +71 -0
  213. package/dist/components/line-chart.js +307 -0
  214. package/dist/components/line-chart.js.map +1 -0
  215. package/dist/components/list.cjs +132 -0
  216. package/dist/components/list.cjs.map +1 -0
  217. package/dist/components/list.d.cts +72 -0
  218. package/dist/components/list.d.ts +72 -0
  219. package/dist/components/list.js +122 -0
  220. package/dist/components/list.js.map +1 -0
  221. package/dist/components/marker.cjs +52 -0
  222. package/dist/components/marker.cjs.map +1 -0
  223. package/dist/components/marker.d.cts +29 -0
  224. package/dist/components/marker.d.ts +29 -0
  225. package/dist/components/marker.js +46 -0
  226. package/dist/components/marker.js.map +1 -0
  227. package/dist/components/message-scroller.cjs +73 -0
  228. package/dist/components/message-scroller.cjs.map +1 -0
  229. package/dist/components/message-scroller.d.cts +39 -0
  230. package/dist/components/message-scroller.d.ts +39 -0
  231. package/dist/components/message-scroller.js +62 -0
  232. package/dist/components/message-scroller.js.map +1 -0
  233. package/dist/components/message.cjs +60 -0
  234. package/dist/components/message.cjs.map +1 -0
  235. package/dist/components/message.d.cts +36 -0
  236. package/dist/components/message.d.ts +36 -0
  237. package/dist/components/message.js +52 -0
  238. package/dist/components/message.js.map +1 -0
  239. package/dist/components/metering-row.cjs +43 -0
  240. package/dist/components/metering-row.cjs.map +1 -0
  241. package/dist/components/metering-row.d.cts +32 -0
  242. package/dist/components/metering-row.d.ts +32 -0
  243. package/dist/components/metering-row.js +38 -0
  244. package/dist/components/metering-row.js.map +1 -0
  245. package/dist/components/money-saved-block.cjs +87 -0
  246. package/dist/components/money-saved-block.cjs.map +1 -0
  247. package/dist/components/money-saved-block.d.cts +57 -0
  248. package/dist/components/money-saved-block.d.ts +57 -0
  249. package/dist/components/money-saved-block.js +79 -0
  250. package/dist/components/money-saved-block.js.map +1 -0
  251. package/dist/components/number-flow.cjs +44 -0
  252. package/dist/components/number-flow.cjs.map +1 -0
  253. package/dist/components/number-flow.d.cts +4 -0
  254. package/dist/components/number-flow.d.ts +4 -0
  255. package/dist/components/number-flow.js +42 -0
  256. package/dist/components/number-flow.js.map +1 -0
  257. package/dist/components/on-off-button.cjs +36 -0
  258. package/dist/components/on-off-button.cjs.map +1 -0
  259. package/dist/components/on-off-button.d.cts +20 -0
  260. package/dist/components/on-off-button.d.ts +20 -0
  261. package/dist/components/on-off-button.js +34 -0
  262. package/dist/components/on-off-button.js.map +1 -0
  263. package/dist/components/onboarding-layout.cjs +68 -0
  264. package/dist/components/onboarding-layout.cjs.map +1 -0
  265. package/dist/components/onboarding-layout.d.cts +46 -0
  266. package/dist/components/onboarding-layout.d.ts +46 -0
  267. package/dist/components/onboarding-layout.js +60 -0
  268. package/dist/components/onboarding-layout.js.map +1 -0
  269. package/dist/components/page-header.cjs +50 -0
  270. package/dist/components/page-header.cjs.map +1 -0
  271. package/dist/components/page-header.d.cts +26 -0
  272. package/dist/components/page-header.d.ts +26 -0
  273. package/dist/components/page-header.js +44 -0
  274. package/dist/components/page-header.js.map +1 -0
  275. package/dist/components/page-spinner.cjs +19 -0
  276. package/dist/components/page-spinner.cjs.map +1 -0
  277. package/dist/components/page-spinner.d.cts +14 -0
  278. package/dist/components/page-spinner.d.ts +14 -0
  279. package/dist/components/page-spinner.js +17 -0
  280. package/dist/components/page-spinner.js.map +1 -0
  281. package/dist/components/period-tabs.cjs +79 -0
  282. package/dist/components/period-tabs.cjs.map +1 -0
  283. package/dist/components/period-tabs.d.cts +51 -0
  284. package/dist/components/period-tabs.d.ts +51 -0
  285. package/dist/components/period-tabs.js +73 -0
  286. package/dist/components/period-tabs.js.map +1 -0
  287. package/dist/components/popover.cjs +62 -0
  288. package/dist/components/popover.cjs.map +1 -0
  289. package/dist/components/popover.d.cts +29 -0
  290. package/dist/components/popover.d.ts +29 -0
  291. package/dist/components/popover.js +56 -0
  292. package/dist/components/popover.js.map +1 -0
  293. package/dist/components/power-history-chart.cjs +358 -0
  294. package/dist/components/power-history-chart.cjs.map +1 -0
  295. package/dist/components/power-history-chart.d.cts +54 -0
  296. package/dist/components/power-history-chart.d.ts +54 -0
  297. package/dist/components/power-history-chart.js +355 -0
  298. package/dist/components/power-history-chart.js.map +1 -0
  299. package/dist/components/power-history.cjs +115 -0
  300. package/dist/components/power-history.cjs.map +1 -0
  301. package/dist/components/power-history.d.cts +42 -0
  302. package/dist/components/power-history.d.ts +43 -0
  303. package/dist/components/power-history.js +114 -0
  304. package/dist/components/power-history.js.map +1 -0
  305. package/dist/components/power-network.cjs +530 -0
  306. package/dist/components/power-network.cjs.map +1 -0
  307. package/dist/components/power-network.d.cts +77 -0
  308. package/dist/components/power-network.d.ts +77 -0
  309. package/dist/components/power-network.js +523 -0
  310. package/dist/components/power-network.js.map +1 -0
  311. package/dist/components/progress.cjs +34 -0
  312. package/dist/components/progress.cjs.map +1 -0
  313. package/dist/components/progress.d.cts +17 -0
  314. package/dist/components/progress.d.ts +17 -0
  315. package/dist/components/progress.js +31 -0
  316. package/dist/components/progress.js.map +1 -0
  317. package/dist/components/radio-card-group.cjs +69 -0
  318. package/dist/components/radio-card-group.cjs.map +1 -0
  319. package/dist/components/radio-card-group.d.cts +21 -0
  320. package/dist/components/radio-card-group.d.ts +21 -0
  321. package/dist/components/radio-card-group.js +65 -0
  322. package/dist/components/radio-card-group.js.map +1 -0
  323. package/dist/components/radio.cjs +34 -0
  324. package/dist/components/radio.cjs.map +1 -0
  325. package/dist/components/radio.d.cts +21 -0
  326. package/dist/components/radio.d.ts +21 -0
  327. package/dist/components/radio.js +30 -0
  328. package/dist/components/radio.js.map +1 -0
  329. package/dist/components/reparent.cjs +55 -0
  330. package/dist/components/reparent.cjs.map +1 -0
  331. package/dist/components/reparent.d.cts +29 -0
  332. package/dist/components/reparent.d.ts +29 -0
  333. package/dist/components/reparent.js +49 -0
  334. package/dist/components/reparent.js.map +1 -0
  335. package/dist/components/sankey-chart.cjs +221 -0
  336. package/dist/components/sankey-chart.cjs.map +1 -0
  337. package/dist/components/sankey-chart.d.cts +58 -0
  338. package/dist/components/sankey-chart.d.ts +58 -0
  339. package/dist/components/sankey-chart.js +218 -0
  340. package/dist/components/sankey-chart.js.map +1 -0
  341. package/dist/components/schedule-editor.cjs +82 -0
  342. package/dist/components/schedule-editor.cjs.map +1 -0
  343. package/dist/components/schedule-editor.d.cts +25 -0
  344. package/dist/components/schedule-editor.d.ts +25 -0
  345. package/dist/components/schedule-editor.js +72 -0
  346. package/dist/components/schedule-editor.js.map +1 -0
  347. package/dist/components/schedule-list.cjs +110 -0
  348. package/dist/components/schedule-list.cjs.map +1 -0
  349. package/dist/components/schedule-list.d.cts +29 -0
  350. package/dist/components/schedule-list.d.ts +29 -0
  351. package/dist/components/schedule-list.js +99 -0
  352. package/dist/components/schedule-list.js.map +1 -0
  353. package/dist/components/scroll-area.cjs +53 -0
  354. package/dist/components/scroll-area.cjs.map +1 -0
  355. package/dist/components/scroll-area.d.cts +26 -0
  356. package/dist/components/scroll-area.d.ts +26 -0
  357. package/dist/components/scroll-area.js +44 -0
  358. package/dist/components/scroll-area.js.map +1 -0
  359. package/dist/components/select.cjs +136 -0
  360. package/dist/components/select.cjs.map +1 -0
  361. package/dist/components/select.d.cts +63 -0
  362. package/dist/components/select.d.ts +63 -0
  363. package/dist/components/select.js +124 -0
  364. package/dist/components/select.js.map +1 -0
  365. package/dist/components/separator.cjs +38 -0
  366. package/dist/components/separator.cjs.map +1 -0
  367. package/dist/components/separator.d.cts +13 -0
  368. package/dist/components/separator.d.ts +13 -0
  369. package/dist/components/separator.js +35 -0
  370. package/dist/components/separator.js.map +1 -0
  371. package/dist/components/series-legend.cjs +39 -0
  372. package/dist/components/series-legend.cjs.map +1 -0
  373. package/dist/components/series-legend.d.cts +31 -0
  374. package/dist/components/series-legend.d.ts +31 -0
  375. package/dist/components/series-legend.js +37 -0
  376. package/dist/components/series-legend.js.map +1 -0
  377. package/dist/components/sheet.cjs +102 -0
  378. package/dist/components/sheet.cjs.map +1 -0
  379. package/dist/components/sheet.d.cts +46 -0
  380. package/dist/components/sheet.d.ts +46 -0
  381. package/dist/components/sheet.js +90 -0
  382. package/dist/components/sheet.js.map +1 -0
  383. package/dist/components/skeleton.cjs +24 -0
  384. package/dist/components/skeleton.cjs.map +1 -0
  385. package/dist/components/skeleton.d.cts +24 -0
  386. package/dist/components/skeleton.d.ts +24 -0
  387. package/dist/components/skeleton.js +21 -0
  388. package/dist/components/skeleton.js.map +1 -0
  389. package/dist/components/slider.cjs +276 -0
  390. package/dist/components/slider.cjs.map +1 -0
  391. package/dist/components/slider.d.cts +150 -0
  392. package/dist/components/slider.d.ts +150 -0
  393. package/dist/components/slider.js +266 -0
  394. package/dist/components/slider.js.map +1 -0
  395. package/dist/components/smart-toggle-button.cjs +28 -0
  396. package/dist/components/smart-toggle-button.cjs.map +1 -0
  397. package/dist/components/smart-toggle-button.d.cts +18 -0
  398. package/dist/components/smart-toggle-button.d.ts +18 -0
  399. package/dist/components/smart-toggle-button.js +26 -0
  400. package/dist/components/smart-toggle-button.js.map +1 -0
  401. package/dist/components/solar-forecast-chart.cjs +105 -0
  402. package/dist/components/solar-forecast-chart.cjs.map +1 -0
  403. package/dist/components/solar-forecast-chart.d.cts +66 -0
  404. package/dist/components/solar-forecast-chart.d.ts +66 -0
  405. package/dist/components/solar-forecast-chart.js +99 -0
  406. package/dist/components/solar-forecast-chart.js.map +1 -0
  407. package/dist/components/sortable-list.cjs +69 -0
  408. package/dist/components/sortable-list.cjs.map +1 -0
  409. package/dist/components/sortable-list.d.cts +46 -0
  410. package/dist/components/sortable-list.d.ts +46 -0
  411. package/dist/components/sortable-list.js +67 -0
  412. package/dist/components/sortable-list.js.map +1 -0
  413. package/dist/components/spinner.cjs +42 -0
  414. package/dist/components/spinner.cjs.map +1 -0
  415. package/dist/components/spinner.d.cts +15 -0
  416. package/dist/components/spinner.d.ts +15 -0
  417. package/dist/components/spinner.js +39 -0
  418. package/dist/components/spinner.js.map +1 -0
  419. package/dist/components/stat-card.cjs +58 -0
  420. package/dist/components/stat-card.cjs.map +1 -0
  421. package/dist/components/stat-card.d.cts +36 -0
  422. package/dist/components/stat-card.d.ts +36 -0
  423. package/dist/components/stat-card.js +50 -0
  424. package/dist/components/stat-card.js.map +1 -0
  425. package/dist/components/stepper.cjs +79 -0
  426. package/dist/components/stepper.cjs.map +1 -0
  427. package/dist/components/stepper.d.cts +33 -0
  428. package/dist/components/stepper.d.ts +33 -0
  429. package/dist/components/stepper.js +76 -0
  430. package/dist/components/stepper.js.map +1 -0
  431. package/dist/components/switch.cjs +22 -0
  432. package/dist/components/switch.cjs.map +1 -0
  433. package/dist/components/switch.d.cts +28 -0
  434. package/dist/components/switch.d.ts +28 -0
  435. package/dist/components/switch.js +20 -0
  436. package/dist/components/switch.js.map +1 -0
  437. package/dist/components/tabs.cjs +175 -0
  438. package/dist/components/tabs.cjs.map +1 -0
  439. package/dist/components/tabs.d.cts +45 -0
  440. package/dist/components/tabs.d.ts +45 -0
  441. package/dist/components/tabs.js +167 -0
  442. package/dist/components/tabs.js.map +1 -0
  443. package/dist/components/theme.cjs +6 -0
  444. package/dist/components/theme.d.cts +38 -0
  445. package/dist/components/theme.d.ts +38 -0
  446. package/dist/components/theme.js +4 -0
  447. package/dist/components/thumbnail.cjs +54 -0
  448. package/dist/components/thumbnail.cjs.map +1 -0
  449. package/dist/components/thumbnail.d.cts +34 -0
  450. package/dist/components/thumbnail.d.ts +34 -0
  451. package/dist/components/thumbnail.js +51 -0
  452. package/dist/components/thumbnail.js.map +1 -0
  453. package/dist/components/time-picker.cjs +55 -0
  454. package/dist/components/time-picker.cjs.map +1 -0
  455. package/dist/components/time-picker.d.cts +41 -0
  456. package/dist/components/time-picker.d.ts +41 -0
  457. package/dist/components/time-picker.js +51 -0
  458. package/dist/components/time-picker.js.map +1 -0
  459. package/dist/components/toast.cjs +99 -0
  460. package/dist/components/toast.cjs.map +1 -0
  461. package/dist/components/toast.d.cts +18 -0
  462. package/dist/components/toast.d.ts +18 -0
  463. package/dist/components/toast.js +95 -0
  464. package/dist/components/toast.js.map +1 -0
  465. package/dist/components/tooltip.cjs +75 -0
  466. package/dist/components/tooltip.cjs.map +1 -0
  467. package/dist/components/tooltip.d.cts +47 -0
  468. package/dist/components/tooltip.d.ts +47 -0
  469. package/dist/components/tooltip.js +67 -0
  470. package/dist/components/tooltip.js.map +1 -0
  471. package/dist/components/typography.cjs +52 -0
  472. package/dist/components/typography.cjs.map +1 -0
  473. package/dist/components/typography.d.cts +32 -0
  474. package/dist/components/typography.d.ts +32 -0
  475. package/dist/components/typography.js +45 -0
  476. package/dist/components/typography.js.map +1 -0
  477. package/dist/hooks/use-container-width.cjs +22 -0
  478. package/dist/hooks/use-container-width.cjs.map +1 -0
  479. package/dist/hooks/use-container-width.d.cts +7 -0
  480. package/dist/hooks/use-container-width.d.ts +7 -0
  481. package/dist/hooks/use-container-width.js +20 -0
  482. package/dist/hooks/use-container-width.js.map +1 -0
  483. package/dist/icons/index.cjs +7 -0
  484. package/dist/icons/index.d.cts +4 -0
  485. package/dist/icons/index.d.ts +4 -0
  486. package/dist/icons/index.js +3 -0
  487. package/dist/icons/material-symbol.cjs +105 -0
  488. package/dist/icons/material-symbol.cjs.map +1 -0
  489. package/dist/icons/material-symbol.d.cts +23 -0
  490. package/dist/icons/material-symbol.d.ts +23 -0
  491. package/dist/icons/material-symbol.js +100 -0
  492. package/dist/icons/material-symbol.js.map +1 -0
  493. package/dist/input-box-variants-BMDdwvqg.cjs +40 -0
  494. package/dist/input-box-variants-BMDdwvqg.cjs.map +1 -0
  495. package/dist/input-box-variants-Dr1K7uYE.js +28 -0
  496. package/dist/input-box-variants-Dr1K7uYE.js.map +1 -0
  497. package/dist/number-flow-DMJouddg.d.cts +15 -0
  498. package/dist/number-flow-DSbucQ_K.d.ts +15 -0
  499. package/dist/styles/index.css +223 -0
  500. package/dist/styles/internal.css +5 -0
  501. package/dist/styles/material-symbol.css +22 -0
  502. package/dist/styles/spark-default.css +883 -0
  503. package/dist/styles/theme.css +542 -0
  504. package/dist/styles/utilities.css +557 -0
  505. package/dist/theme-B3WtiByA.js +574 -0
  506. package/dist/theme-B3WtiByA.js.map +1 -0
  507. package/dist/theme-C9_OSe0S.cjs +592 -0
  508. package/dist/theme-C9_OSe0S.cjs.map +1 -0
  509. package/dist/theme-types-DoROIXpi.d.ts +30 -0
  510. package/dist/theme-types-r20EJfEC.d.cts +30 -0
  511. package/dist/tones-DjgKOX3s.d.cts +8 -0
  512. package/dist/tones-DyCkL71h.d.ts +8 -0
  513. package/dist/utils/build-sankey-nodes.cjs +59 -0
  514. package/dist/utils/build-sankey-nodes.cjs.map +1 -0
  515. package/dist/utils/build-sankey-nodes.d.cts +27 -0
  516. package/dist/utils/build-sankey-nodes.d.ts +27 -0
  517. package/dist/utils/build-sankey-nodes.js +58 -0
  518. package/dist/utils/build-sankey-nodes.js.map +1 -0
  519. package/dist/utils/chars.cjs +18 -0
  520. package/dist/utils/chars.cjs.map +1 -0
  521. package/dist/utils/chars.d.cts +10 -0
  522. package/dist/utils/chars.d.ts +10 -0
  523. package/dist/utils/chars.js +14 -0
  524. package/dist/utils/chars.js.map +1 -0
  525. package/dist/utils/cn.cjs +10 -0
  526. package/dist/utils/cn.d.cts +4 -0
  527. package/dist/utils/cn.d.ts +4 -0
  528. package/dist/utils/cn.js +3 -0
  529. package/dist/utils/date-mask.cjs +45 -0
  530. package/dist/utils/date-mask.cjs.map +1 -0
  531. package/dist/utils/date-mask.d.cts +17 -0
  532. package/dist/utils/date-mask.d.ts +17 -0
  533. package/dist/utils/date-mask.js +41 -0
  534. package/dist/utils/date-mask.js.map +1 -0
  535. package/dist/utils/format.cjs +57 -0
  536. package/dist/utils/format.cjs.map +1 -0
  537. package/dist/utils/format.d.cts +23 -0
  538. package/dist/utils/format.d.ts +23 -0
  539. package/dist/utils/format.js +47 -0
  540. package/dist/utils/format.js.map +1 -0
  541. package/package.json +79 -49
  542. package/dist/index.cjs +0 -303
  543. package/dist/index.cjs.map +0 -1
  544. package/dist/index.css +0 -1
  545. package/dist/index.d.cts +0 -75
  546. package/dist/index.d.ts +0 -75
  547. package/dist/index.js +0 -255
  548. package/dist/index.js.map +0 -1
  549. package/dist/styles.js +0 -1
@@ -0,0 +1,66 @@
1
+ "use client";
2
+
3
+ import { MaterialSymbolIconName } from "../icons/material-symbol.js";
4
+ import { LineChartCurve, LineChartDatum } from "./line-chart.js";
5
+ import { JSX, ReactNode } from "react";
6
+
7
+ //#region src/components/solar-forecast-chart.d.ts
8
+ interface SolarForecastWeatherPoint {
9
+ date: Date;
10
+ icon: MaterialSymbolIconName;
11
+ }
12
+ interface SolarForecastChartProps {
13
+ /** Measured production, drawn as the solid line. */
14
+ produced: LineChartDatum[];
15
+ /** Predicted production, drawn as the dashed line. */
16
+ forecast: LineChartDatum[];
17
+ /** Tooltip label for the produced series. */
18
+ producedLabel?: ReactNode;
19
+ /** Tooltip label for the forecast series. */
20
+ forecastLabel?: ReactNode;
21
+ /** Y-axis + tooltip formatter. Defaults to one-decimal kW (power). */
22
+ formatValue?: (value: number) => string;
23
+ /** X-axis tick formatter. Defaults to the zero-padded hour. */
24
+ formatTime?: (date: Date) => string;
25
+ /** Tooltip time formatter. Defaults to `formatTime`. */
26
+ formatTooltipTime?: (date: Date) => string;
27
+ /**
28
+ * Hourly weather icons drawn along the top of the plot, aligned to the time
29
+ * axis. Their dates must fall within the plotted day.
30
+ */
31
+ weather?: SolarForecastWeatherPoint[];
32
+ /** Sunrise time, drawn as a labelled vertical marker on the plot. */
33
+ sunrise?: Date;
34
+ /** Sunset time, drawn as a labelled vertical marker on the plot. */
35
+ sunset?: Date;
36
+ /** Label formatter for the sunrise/sunset markers. Defaults to `formatTime`. */
37
+ formatMarkerTime?: (date: Date) => string;
38
+ curve?: LineChartCurve;
39
+ height?: number;
40
+ className?: string;
41
+ }
42
+ /**
43
+ * Responsive line plot of measured production (solid) against a forecast
44
+ * (dashed) over a day. Optionally overlays hourly weather icons and
45
+ * sunrise/sunset markers, all pinned to the same time axis. Sizes itself to its
46
+ * container; compose a title and any summary around it.
47
+ */
48
+ declare function SolarForecastChart({
49
+ produced,
50
+ forecast,
51
+ producedLabel,
52
+ forecastLabel,
53
+ formatValue,
54
+ formatTime,
55
+ formatTooltipTime,
56
+ weather,
57
+ sunrise,
58
+ sunset,
59
+ formatMarkerTime,
60
+ curve,
61
+ height,
62
+ className
63
+ }: SolarForecastChartProps): JSX.Element;
64
+ //#endregion
65
+ export { SolarForecastChart, SolarForecastChart as default, SolarForecastChartProps, SolarForecastWeatherPoint };
66
+ //# sourceMappingURL=solar-forecast-chart.d.ts.map
@@ -0,0 +1,99 @@
1
+ "use client";
2
+ import { cn } from "../utils/cn.js";
3
+ import { MaterialSymbol } from "../icons/material-symbol.js";
4
+ import "../utils/chars.js";
5
+ import { oneDecimalFormat } from "../utils/format.js";
6
+ import { LineChart } from "./line-chart.js";
7
+ import { useEffect, useRef, useState } from "react";
8
+ import { jsx } from "react/jsx-runtime";
9
+ //#region src/components/solar-forecast-chart.tsx
10
+ const DEFAULT_HEIGHT = 180;
11
+ const BASE_MARGIN = {
12
+ top: 8,
13
+ right: 8,
14
+ bottom: 28,
15
+ left: 8
16
+ };
17
+ /** Extra headroom for the weather icon row pinned above the plot. */
18
+ const WEATHER_ROW_HEIGHT = 24;
19
+ function defaultFormatValue(value) {
20
+ return `${oneDecimalFormat.format(value)} kW`;
21
+ }
22
+ function defaultFormatTime(date) {
23
+ return date.getHours().toString().padStart(2, "0");
24
+ }
25
+ /**
26
+ * Responsive line plot of measured production (solid) against a forecast
27
+ * (dashed) over a day. Optionally overlays hourly weather icons and
28
+ * sunrise/sunset markers, all pinned to the same time axis. Sizes itself to its
29
+ * container; compose a title and any summary around it.
30
+ */
31
+ function SolarForecastChart({ produced, forecast, producedLabel = "Produced", forecastLabel = "Forecast", formatValue = defaultFormatValue, formatTime = defaultFormatTime, formatTooltipTime, weather, sunrise, sunset, formatMarkerTime, curve = "monotone", height = DEFAULT_HEIGHT, className }) {
32
+ const containerRef = useRef(null);
33
+ const [width, setWidth] = useState(0);
34
+ useEffect(() => {
35
+ const el = containerRef.current;
36
+ if (!el) return;
37
+ const ro = new ResizeObserver((entries) => {
38
+ const entry = entries[0];
39
+ if (entry) setWidth(entry.contentRect.width);
40
+ });
41
+ ro.observe(el);
42
+ return () => ro.disconnect();
43
+ }, []);
44
+ const hasWeather = weather != null && weather.length > 0;
45
+ const margin = {
46
+ ...BASE_MARGIN,
47
+ top: hasWeather ? BASE_MARGIN.top + WEATHER_ROW_HEIGHT : BASE_MARGIN.top
48
+ };
49
+ const formatMarker = formatMarkerTime ?? formatTooltipTime ?? formatTime;
50
+ const topContent = hasWeather ? weather.map((point, i) => ({
51
+ key: `weather-${point.date.valueOf()}-${i}`,
52
+ date: point.date,
53
+ content: /* @__PURE__ */ jsx(MaterialSymbol, {
54
+ name: point.icon,
55
+ className: "text-(length:--spark-icon-size,18px)! text-gray-light"
56
+ })
57
+ })) : void 0;
58
+ const referenceLines = [sunrise && {
59
+ key: "sunrise",
60
+ date: sunrise,
61
+ label: formatMarker(sunrise)
62
+ }, sunset && {
63
+ key: "sunset",
64
+ date: sunset,
65
+ label: formatMarker(sunset)
66
+ }].filter((x) => Boolean(x));
67
+ return /* @__PURE__ */ jsx("div", {
68
+ ref: containerRef,
69
+ className: cn("w-full", className),
70
+ children: width > 0 && /* @__PURE__ */ jsx(LineChart, {
71
+ width,
72
+ height,
73
+ margin,
74
+ curve,
75
+ series: [{
76
+ id: "produced",
77
+ data: produced,
78
+ label: producedLabel
79
+ }, {
80
+ id: "forecast",
81
+ data: forecast,
82
+ label: forecastLabel,
83
+ dashed: true
84
+ }],
85
+ showGrid: true,
86
+ xTickCount: 6,
87
+ yTickCount: 4,
88
+ formatDate: formatTime,
89
+ formatTooltipDate: formatTooltipTime ?? formatTime,
90
+ formatValue,
91
+ referenceLines: referenceLines.length > 0 ? referenceLines : void 0,
92
+ topContent
93
+ })
94
+ });
95
+ }
96
+ //#endregion
97
+ export { SolarForecastChart, SolarForecastChart as default };
98
+
99
+ //# sourceMappingURL=solar-forecast-chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solar-forecast-chart.js","names":[],"sources":["../../src/components/solar-forecast-chart.tsx"],"sourcesContent":["import { type JSX, type ReactNode, useEffect, useRef, useState } from 'react'\nimport {\n MaterialSymbol,\n type MaterialSymbolIconName,\n} from '../icons/material-symbol'\nimport { NARROW_NBSP } from '../utils/chars'\nimport { cn } from '../utils/cn'\nimport { oneDecimalFormat } from '../utils/format'\nimport {\n LineChart,\n type LineChartCurve,\n type LineChartDatum,\n} from './line-chart'\n\nconst DEFAULT_HEIGHT = 180\nconst BASE_MARGIN = { top: 8, right: 8, bottom: 28, left: 8 }\n/** Extra headroom for the weather icon row pinned above the plot. */\nconst WEATHER_ROW_HEIGHT = 24\n\nfunction defaultFormatValue(value: number): string {\n return `${oneDecimalFormat.format(value)}${NARROW_NBSP}kW`\n}\n\nfunction defaultFormatTime(date: Date): string {\n return date.getHours().toString().padStart(2, '0')\n}\n\nexport interface SolarForecastWeatherPoint {\n date: Date\n icon: MaterialSymbolIconName\n}\n\nexport interface SolarForecastChartProps {\n /** Measured production, drawn as the solid line. */\n produced: LineChartDatum[]\n /** Predicted production, drawn as the dashed line. */\n forecast: LineChartDatum[]\n /** Tooltip label for the produced series. */\n producedLabel?: ReactNode\n /** Tooltip label for the forecast series. */\n forecastLabel?: ReactNode\n /** Y-axis + tooltip formatter. Defaults to one-decimal kW (power). */\n formatValue?: (value: number) => string\n /** X-axis tick formatter. Defaults to the zero-padded hour. */\n formatTime?: (date: Date) => string\n /** Tooltip time formatter. Defaults to `formatTime`. */\n formatTooltipTime?: (date: Date) => string\n /**\n * Hourly weather icons drawn along the top of the plot, aligned to the time\n * axis. Their dates must fall within the plotted day.\n */\n weather?: SolarForecastWeatherPoint[]\n /** Sunrise time, drawn as a labelled vertical marker on the plot. */\n sunrise?: Date\n /** Sunset time, drawn as a labelled vertical marker on the plot. */\n sunset?: Date\n /** Label formatter for the sunrise/sunset markers. Defaults to `formatTime`. */\n formatMarkerTime?: (date: Date) => string\n curve?: LineChartCurve\n height?: number\n className?: string\n}\n\n/**\n * Responsive line plot of measured production (solid) against a forecast\n * (dashed) over a day. Optionally overlays hourly weather icons and\n * sunrise/sunset markers, all pinned to the same time axis. Sizes itself to its\n * container; compose a title and any summary around it.\n */\nexport function SolarForecastChart({\n produced,\n forecast,\n producedLabel = 'Produced',\n forecastLabel = 'Forecast',\n formatValue = defaultFormatValue,\n formatTime = defaultFormatTime,\n formatTooltipTime,\n weather,\n sunrise,\n sunset,\n formatMarkerTime,\n curve = 'monotone',\n height = DEFAULT_HEIGHT,\n className,\n}: SolarForecastChartProps): JSX.Element {\n const containerRef = useRef<HTMLDivElement>(null)\n const [width, setWidth] = useState(0)\n\n useEffect(() => {\n const el = containerRef.current\n if (!el) return\n const ro = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (entry) setWidth(entry.contentRect.width)\n })\n ro.observe(el)\n return () => ro.disconnect()\n }, [])\n\n const hasWeather = weather != null && weather.length > 0\n const margin = {\n ...BASE_MARGIN,\n top: hasWeather ? BASE_MARGIN.top + WEATHER_ROW_HEIGHT : BASE_MARGIN.top,\n }\n const formatMarker = formatMarkerTime ?? formatTooltipTime ?? formatTime\n\n const topContent = hasWeather\n ? weather.map((point, i) => ({\n key: `weather-${point.date.valueOf()}-${i}`,\n date: point.date,\n content: (\n <MaterialSymbol\n name={point.icon}\n className=\"text-(length:--spark-icon-size,18px)! text-gray-light\"\n />\n ),\n }))\n : undefined\n\n const referenceLines = [\n sunrise && { key: 'sunrise', date: sunrise, label: formatMarker(sunrise) },\n sunset && { key: 'sunset', date: sunset, label: formatMarker(sunset) },\n ].filter((x): x is { key: string; date: Date; label: string } => Boolean(x))\n\n return (\n <div ref={containerRef} className={cn('w-full', className)}>\n {width > 0 && (\n <LineChart\n width={width}\n height={height}\n margin={margin}\n curve={curve}\n series={[\n { id: 'produced', data: produced, label: producedLabel },\n {\n id: 'forecast',\n data: forecast,\n label: forecastLabel,\n dashed: true,\n },\n ]}\n showGrid\n xTickCount={6}\n yTickCount={4}\n formatDate={formatTime}\n formatTooltipDate={formatTooltipTime ?? formatTime}\n formatValue={formatValue}\n referenceLines={\n referenceLines.length > 0 ? referenceLines : undefined\n }\n topContent={topContent}\n />\n )}\n </div>\n )\n}\n\nexport default SolarForecastChart\n"],"mappings":";;;;;;;;;AAcA,MAAM,iBAAiB;AACvB,MAAM,cAAc;CAAE,KAAK;CAAG,OAAO;CAAG,QAAQ;CAAI,MAAM;CAAG;;AAE7D,MAAM,qBAAqB;AAE3B,SAAS,mBAAmB,OAAuB;AACjD,QAAO,GAAG,iBAAiB,OAAO,MAAM;;AAG1C,SAAS,kBAAkB,MAAoB;AAC7C,QAAO,KAAK,UAAU,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI;;;;;;;;AA6CpD,SAAgB,mBAAmB,EACjC,UACA,UACA,gBAAgB,YAChB,gBAAgB,YAChB,cAAc,oBACd,aAAa,mBACb,mBACA,SACA,SACA,QACA,kBACA,QAAQ,YACR,SAAS,gBACT,aACuC;CACvC,MAAM,eAAe,OAAuB,KAAK;CACjD,MAAM,CAAC,OAAO,YAAY,SAAS,EAAE;AAErC,iBAAgB;EACd,MAAM,KAAK,aAAa;AACxB,MAAI,CAAC,GAAI;EACT,MAAM,KAAK,IAAI,gBAAgB,YAAY;GACzC,MAAM,QAAQ,QAAQ;AACtB,OAAI,MAAO,UAAS,MAAM,YAAY,MAAM;IAC5C;AACF,KAAG,QAAQ,GAAG;AACd,eAAa,GAAG,YAAY;IAC3B,EAAE,CAAC;CAEN,MAAM,aAAa,WAAW,QAAQ,QAAQ,SAAS;CACvD,MAAM,SAAS;EACb,GAAG;EACH,KAAK,aAAa,YAAY,MAAM,qBAAqB,YAAY;EACtE;CACD,MAAM,eAAe,oBAAoB,qBAAqB;CAE9D,MAAM,aAAa,aACf,QAAQ,KAAK,OAAO,OAAO;EACzB,KAAK,WAAW,MAAM,KAAK,SAAS,CAAC,GAAG;EACxC,MAAM,MAAM;EACZ,SACE,oBAAC,gBAAD;GACE,MAAM,MAAM;GACZ,WAAU;GACV,CAAA;EAEL,EAAE,GACH,KAAA;CAEJ,MAAM,iBAAiB,CACrB,WAAW;EAAE,KAAK;EAAW,MAAM;EAAS,OAAO,aAAa,QAAQ;EAAE,EAC1E,UAAU;EAAE,KAAK;EAAU,MAAM;EAAQ,OAAO,aAAa,OAAO;EAAE,CACvE,CAAC,QAAQ,MAAuD,QAAQ,EAAE,CAAC;AAE5E,QACE,oBAAC,OAAD;EAAK,KAAK;EAAc,WAAW,GAAG,UAAU,UAAU;YACvD,QAAQ,KACP,oBAAC,WAAD;GACS;GACC;GACA;GACD;GACP,QAAQ,CACN;IAAE,IAAI;IAAY,MAAM;IAAU,OAAO;IAAe,EACxD;IACE,IAAI;IACJ,MAAM;IACN,OAAO;IACP,QAAQ;IACT,CACF;GACD,UAAA;GACA,YAAY;GACZ,YAAY;GACZ,YAAY;GACZ,mBAAmB,qBAAqB;GAC3B;GACb,gBACE,eAAe,SAAS,IAAI,iBAAiB,KAAA;GAEnC;GACZ,CAAA;EAEA,CAAA"}
@@ -0,0 +1,69 @@
1
+ "use client";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ require("../chunk-aJGBMT86.cjs");
4
+ let react_jsx_runtime = require("react/jsx-runtime");
5
+ let _dnd_kit_core = require("@dnd-kit/core");
6
+ let _dnd_kit_modifiers = require("@dnd-kit/modifiers");
7
+ let _dnd_kit_sortable = require("@dnd-kit/sortable");
8
+ let _dnd_kit_utilities = require("@dnd-kit/utilities");
9
+ let cnfast = require("cnfast");
10
+ //#region src/components/sortable-list.tsx
11
+ /**
12
+ * Vertical drag-and-drop sortable list built on @dnd-kit. Pointer, touch and
13
+ * keyboard sensors are wired up; dragging is constrained to the vertical axis
14
+ * within the list. The consumer owns row markup and decides which element is
15
+ * the handle via the `handle` argument of `renderItem`.
16
+ */
17
+ function SortableList({ items, getItemId, onReorder, renderItem, className }) {
18
+ const ids = items.map(getItemId);
19
+ const sensors = (0, _dnd_kit_core.useSensors)((0, _dnd_kit_core.useSensor)(_dnd_kit_core.PointerSensor, { activationConstraint: { distance: 5 } }), (0, _dnd_kit_core.useSensor)(_dnd_kit_core.TouchSensor, { activationConstraint: {
20
+ delay: 150,
21
+ tolerance: 5
22
+ } }), (0, _dnd_kit_core.useSensor)(_dnd_kit_core.KeyboardSensor, { coordinateGetter: _dnd_kit_sortable.sortableKeyboardCoordinates }));
23
+ const handleDragEnd = (event) => {
24
+ const { active, over } = event;
25
+ if (!over || active.id === over.id) return;
26
+ const oldIndex = ids.indexOf(String(active.id));
27
+ const newIndex = ids.indexOf(String(over.id));
28
+ if (oldIndex < 0 || newIndex < 0) return;
29
+ onReorder((0, _dnd_kit_sortable.arrayMove)(items, oldIndex, newIndex));
30
+ };
31
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_dnd_kit_core.DndContext, {
32
+ sensors,
33
+ collisionDetection: _dnd_kit_core.closestCenter,
34
+ modifiers: [_dnd_kit_modifiers.restrictToVerticalAxis, _dnd_kit_modifiers.restrictToParentElement],
35
+ onDragEnd: handleDragEnd,
36
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_dnd_kit_sortable.SortableContext, {
37
+ items: ids,
38
+ strategy: _dnd_kit_sortable.verticalListSortingStrategy,
39
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
40
+ className: (0, cnfast.cn)("flex flex-col gap-2", className),
41
+ children: items.map((item, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SortableRow, {
42
+ id: getItemId(item),
43
+ children: (handle) => renderItem(item, handle, index)
44
+ }, getItemId(item)))
45
+ })
46
+ })
47
+ });
48
+ }
49
+ function SortableRow({ id, children }) {
50
+ const { attributes, listeners, setNodeRef, setActivatorNodeRef, transform, transition, isDragging } = (0, _dnd_kit_sortable.useSortable)({ id });
51
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
52
+ ref: setNodeRef,
53
+ style: {
54
+ transform: _dnd_kit_utilities.CSS.Transform.toString(transform),
55
+ transition
56
+ },
57
+ className: (0, cnfast.cn)(isDragging && "relative z-10"),
58
+ children: children({
59
+ ref: setActivatorNodeRef,
60
+ attributes,
61
+ listeners,
62
+ isDragging
63
+ })
64
+ });
65
+ }
66
+ //#endregion
67
+ exports.SortableList = SortableList;
68
+
69
+ //# sourceMappingURL=sortable-list.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sortable-list.cjs","names":["PointerSensor","TouchSensor","KeyboardSensor","sortableKeyboardCoordinates","DndContext","closestCenter","restrictToVerticalAxis","restrictToParentElement","SortableContext","verticalListSortingStrategy","CSS"],"sources":["../../src/components/sortable-list.tsx"],"sourcesContent":["import {\n DndContext,\n type DragEndEvent,\n KeyboardSensor,\n PointerSensor,\n TouchSensor,\n closestCenter,\n useSensor,\n useSensors,\n} from '@dnd-kit/core'\nimport {\n restrictToParentElement,\n restrictToVerticalAxis,\n} from '@dnd-kit/modifiers'\nimport {\n SortableContext,\n arrayMove,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport type { ReactNode } from 'react'\nimport { cn } from '../utils/cn'\n\ntype SortableHookResult = ReturnType<typeof useSortable>\n\n/**\n * Props to spread onto the element that should start a drag (the handle).\n * Attach `ref`, `attributes`, and `listeners` to a focusable element such as a\n * button to make it the drag handle; `isDragging` reflects the row's state.\n */\nexport interface SortableDragHandle {\n ref: SortableHookResult['setActivatorNodeRef']\n attributes: SortableHookResult['attributes']\n listeners: SortableHookResult['listeners']\n isDragging: boolean\n}\n\nexport interface SortableListProps<T> {\n items: T[]\n /** Stable unique id for an item. */\n getItemId: (item: T) => string\n /** Called with the reordered items after a drag completes. */\n onReorder: (items: T[]) => void\n /** Render a single row. Spread `handle` onto the drag-handle element. */\n renderItem: (item: T, handle: SortableDragHandle, index: number) => ReactNode\n /** Classes for the list container (defaults to a vertical flex with gap). */\n className?: string\n}\n\n/**\n * Vertical drag-and-drop sortable list built on @dnd-kit. Pointer, touch and\n * keyboard sensors are wired up; dragging is constrained to the vertical axis\n * within the list. The consumer owns row markup and decides which element is\n * the handle via the `handle` argument of `renderItem`.\n */\nexport function SortableList<T>({\n items,\n getItemId,\n onReorder,\n renderItem,\n className,\n}: SortableListProps<T>) {\n const ids = items.map(getItemId)\n\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 5 } }),\n useSensor(TouchSensor, {\n activationConstraint: { delay: 150, tolerance: 5 },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n )\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event\n if (!over || active.id === over.id) return\n const oldIndex = ids.indexOf(String(active.id))\n const newIndex = ids.indexOf(String(over.id))\n if (oldIndex < 0 || newIndex < 0) return\n onReorder(arrayMove(items, oldIndex, newIndex))\n }\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n modifiers={[restrictToVerticalAxis, restrictToParentElement]}\n onDragEnd={handleDragEnd}\n >\n <SortableContext items={ids} strategy={verticalListSortingStrategy}>\n <div className={cn('flex flex-col gap-2', className)}>\n {items.map((item, index) => (\n <SortableRow key={getItemId(item)} id={getItemId(item)}>\n {(handle) => renderItem(item, handle, index)}\n </SortableRow>\n ))}\n </div>\n </SortableContext>\n </DndContext>\n )\n}\n\ninterface SortableRowProps {\n id: string\n children: (handle: SortableDragHandle) => ReactNode\n}\n\nfunction SortableRow({ id, children }: SortableRowProps) {\n const {\n attributes,\n listeners,\n setNodeRef,\n setActivatorNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id })\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n }\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={cn(isDragging && 'relative z-10')}\n >\n {children({\n ref: setActivatorNodeRef,\n attributes,\n listeners,\n isDragging,\n })}\n </div>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAyDA,SAAgB,aAAgB,EAC9B,OACA,WACA,WACA,YACA,aACuB;CACvB,MAAM,MAAM,MAAM,IAAI,UAAU;CAEhC,MAAM,WAAA,GAAA,cAAA,aAAA,GAAA,cAAA,WACMA,cAAAA,eAAe,EAAE,sBAAsB,EAAE,UAAU,GAAG,EAAE,CAAC,GAAA,GAAA,cAAA,WACzDC,cAAAA,aAAa,EACrB,sBAAsB;EAAE,OAAO;EAAK,WAAW;EAAG,EACnD,CAAC,GAAA,GAAA,cAAA,WACQC,cAAAA,gBAAgB,EACxB,kBAAkBC,kBAAAA,6BACnB,CAAC,CACH;CAED,MAAM,iBAAiB,UAAwB;EAC7C,MAAM,EAAE,QAAQ,SAAS;AACzB,MAAI,CAAC,QAAQ,OAAO,OAAO,KAAK,GAAI;EACpC,MAAM,WAAW,IAAI,QAAQ,OAAO,OAAO,GAAG,CAAC;EAC/C,MAAM,WAAW,IAAI,QAAQ,OAAO,KAAK,GAAG,CAAC;AAC7C,MAAI,WAAW,KAAK,WAAW,EAAG;AAClC,aAAA,GAAA,kBAAA,WAAoB,OAAO,UAAU,SAAS,CAAC;;AAGjD,QACE,iBAAA,GAAA,kBAAA,KAACC,cAAAA,YAAD;EACW;EACT,oBAAoBC,cAAAA;EACpB,WAAW,CAACC,mBAAAA,wBAAwBC,mBAAAA,wBAAwB;EAC5D,WAAW;YAEX,iBAAA,GAAA,kBAAA,KAACC,kBAAAA,iBAAD;GAAiB,OAAO;GAAK,UAAUC,kBAAAA;aACrC,iBAAA,GAAA,kBAAA,KAAC,OAAD;IAAK,YAAA,GAAA,OAAA,IAAc,uBAAuB,UAAU;cACjD,MAAM,KAAK,MAAM,UAChB,iBAAA,GAAA,kBAAA,KAAC,aAAD;KAAmC,IAAI,UAAU,KAAK;gBAClD,WAAW,WAAW,MAAM,QAAQ,MAAM;KAChC,EAFI,UAAU,KAAK,CAEnB,CACd;IACE,CAAA;GACU,CAAA;EACP,CAAA;;AASjB,SAAS,YAAY,EAAE,IAAI,YAA8B;CACvD,MAAM,EACJ,YACA,WACA,YACA,qBACA,WACA,YACA,gBAAA,GAAA,kBAAA,aACc,EAAE,IAAI,CAAC;AAOvB,QACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,KAAK;EACL,OAAO;GAPT,WAAWC,mBAAAA,IAAI,UAAU,SAAS,UAAU;GAC5C;GAMc;EACZ,YAAA,GAAA,OAAA,IAAc,cAAc,gBAAgB;YAE3C,SAAS;GACR,KAAK;GACL;GACA;GACA;GACD,CAAC;EACE,CAAA"}
@@ -0,0 +1,46 @@
1
+ "use client";
2
+
3
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
4
+ import { ReactNode } from "react";
5
+ import { useSortable } from "@dnd-kit/sortable";
6
+
7
+ //#region src/components/sortable-list.d.ts
8
+ type SortableHookResult = ReturnType<typeof useSortable>;
9
+ /**
10
+ * Props to spread onto the element that should start a drag (the handle).
11
+ * Attach `ref`, `attributes`, and `listeners` to a focusable element such as a
12
+ * button to make it the drag handle; `isDragging` reflects the row's state.
13
+ */
14
+ interface SortableDragHandle {
15
+ ref: SortableHookResult['setActivatorNodeRef'];
16
+ attributes: SortableHookResult['attributes'];
17
+ listeners: SortableHookResult['listeners'];
18
+ isDragging: boolean;
19
+ }
20
+ interface SortableListProps<T> {
21
+ items: T[];
22
+ /** Stable unique id for an item. */
23
+ getItemId: (item: T) => string;
24
+ /** Called with the reordered items after a drag completes. */
25
+ onReorder: (items: T[]) => void;
26
+ /** Render a single row. Spread `handle` onto the drag-handle element. */
27
+ renderItem: (item: T, handle: SortableDragHandle, index: number) => ReactNode;
28
+ /** Classes for the list container (defaults to a vertical flex with gap). */
29
+ className?: string;
30
+ }
31
+ /**
32
+ * Vertical drag-and-drop sortable list built on @dnd-kit. Pointer, touch and
33
+ * keyboard sensors are wired up; dragging is constrained to the vertical axis
34
+ * within the list. The consumer owns row markup and decides which element is
35
+ * the handle via the `handle` argument of `renderItem`.
36
+ */
37
+ declare function SortableList<T>({
38
+ items,
39
+ getItemId,
40
+ onReorder,
41
+ renderItem,
42
+ className
43
+ }: SortableListProps<T>): _$react_jsx_runtime0.JSX.Element;
44
+ //#endregion
45
+ export { SortableDragHandle, SortableList, SortableListProps };
46
+ //# sourceMappingURL=sortable-list.d.cts.map
@@ -0,0 +1,46 @@
1
+ "use client";
2
+
3
+ import { ReactNode } from "react";
4
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
5
+ import { useSortable } from "@dnd-kit/sortable";
6
+
7
+ //#region src/components/sortable-list.d.ts
8
+ type SortableHookResult = ReturnType<typeof useSortable>;
9
+ /**
10
+ * Props to spread onto the element that should start a drag (the handle).
11
+ * Attach `ref`, `attributes`, and `listeners` to a focusable element such as a
12
+ * button to make it the drag handle; `isDragging` reflects the row's state.
13
+ */
14
+ interface SortableDragHandle {
15
+ ref: SortableHookResult['setActivatorNodeRef'];
16
+ attributes: SortableHookResult['attributes'];
17
+ listeners: SortableHookResult['listeners'];
18
+ isDragging: boolean;
19
+ }
20
+ interface SortableListProps<T> {
21
+ items: T[];
22
+ /** Stable unique id for an item. */
23
+ getItemId: (item: T) => string;
24
+ /** Called with the reordered items after a drag completes. */
25
+ onReorder: (items: T[]) => void;
26
+ /** Render a single row. Spread `handle` onto the drag-handle element. */
27
+ renderItem: (item: T, handle: SortableDragHandle, index: number) => ReactNode;
28
+ /** Classes for the list container (defaults to a vertical flex with gap). */
29
+ className?: string;
30
+ }
31
+ /**
32
+ * Vertical drag-and-drop sortable list built on @dnd-kit. Pointer, touch and
33
+ * keyboard sensors are wired up; dragging is constrained to the vertical axis
34
+ * within the list. The consumer owns row markup and decides which element is
35
+ * the handle via the `handle` argument of `renderItem`.
36
+ */
37
+ declare function SortableList<T>({
38
+ items,
39
+ getItemId,
40
+ onReorder,
41
+ renderItem,
42
+ className
43
+ }: SortableListProps<T>): _$react_jsx_runtime0.JSX.Element;
44
+ //#endregion
45
+ export { SortableDragHandle, SortableList, SortableListProps };
46
+ //# sourceMappingURL=sortable-list.d.ts.map
@@ -0,0 +1,67 @@
1
+ "use client";
2
+ import { cn } from "../utils/cn.js";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import { DndContext, KeyboardSensor, PointerSensor, TouchSensor, closestCenter, useSensor, useSensors } from "@dnd-kit/core";
5
+ import { restrictToParentElement, restrictToVerticalAxis } from "@dnd-kit/modifiers";
6
+ import { SortableContext, arrayMove, sortableKeyboardCoordinates, useSortable, verticalListSortingStrategy } from "@dnd-kit/sortable";
7
+ import { CSS } from "@dnd-kit/utilities";
8
+ //#region src/components/sortable-list.tsx
9
+ /**
10
+ * Vertical drag-and-drop sortable list built on @dnd-kit. Pointer, touch and
11
+ * keyboard sensors are wired up; dragging is constrained to the vertical axis
12
+ * within the list. The consumer owns row markup and decides which element is
13
+ * the handle via the `handle` argument of `renderItem`.
14
+ */
15
+ function SortableList({ items, getItemId, onReorder, renderItem, className }) {
16
+ const ids = items.map(getItemId);
17
+ const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }), useSensor(TouchSensor, { activationConstraint: {
18
+ delay: 150,
19
+ tolerance: 5
20
+ } }), useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }));
21
+ const handleDragEnd = (event) => {
22
+ const { active, over } = event;
23
+ if (!over || active.id === over.id) return;
24
+ const oldIndex = ids.indexOf(String(active.id));
25
+ const newIndex = ids.indexOf(String(over.id));
26
+ if (oldIndex < 0 || newIndex < 0) return;
27
+ onReorder(arrayMove(items, oldIndex, newIndex));
28
+ };
29
+ return /* @__PURE__ */ jsx(DndContext, {
30
+ sensors,
31
+ collisionDetection: closestCenter,
32
+ modifiers: [restrictToVerticalAxis, restrictToParentElement],
33
+ onDragEnd: handleDragEnd,
34
+ children: /* @__PURE__ */ jsx(SortableContext, {
35
+ items: ids,
36
+ strategy: verticalListSortingStrategy,
37
+ children: /* @__PURE__ */ jsx("div", {
38
+ className: cn("flex flex-col gap-2", className),
39
+ children: items.map((item, index) => /* @__PURE__ */ jsx(SortableRow, {
40
+ id: getItemId(item),
41
+ children: (handle) => renderItem(item, handle, index)
42
+ }, getItemId(item)))
43
+ })
44
+ })
45
+ });
46
+ }
47
+ function SortableRow({ id, children }) {
48
+ const { attributes, listeners, setNodeRef, setActivatorNodeRef, transform, transition, isDragging } = useSortable({ id });
49
+ return /* @__PURE__ */ jsx("div", {
50
+ ref: setNodeRef,
51
+ style: {
52
+ transform: CSS.Transform.toString(transform),
53
+ transition
54
+ },
55
+ className: cn(isDragging && "relative z-10"),
56
+ children: children({
57
+ ref: setActivatorNodeRef,
58
+ attributes,
59
+ listeners,
60
+ isDragging
61
+ })
62
+ });
63
+ }
64
+ //#endregion
65
+ export { SortableList };
66
+
67
+ //# sourceMappingURL=sortable-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sortable-list.js","names":[],"sources":["../../src/components/sortable-list.tsx"],"sourcesContent":["import {\n DndContext,\n type DragEndEvent,\n KeyboardSensor,\n PointerSensor,\n TouchSensor,\n closestCenter,\n useSensor,\n useSensors,\n} from '@dnd-kit/core'\nimport {\n restrictToParentElement,\n restrictToVerticalAxis,\n} from '@dnd-kit/modifiers'\nimport {\n SortableContext,\n arrayMove,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport type { ReactNode } from 'react'\nimport { cn } from '../utils/cn'\n\ntype SortableHookResult = ReturnType<typeof useSortable>\n\n/**\n * Props to spread onto the element that should start a drag (the handle).\n * Attach `ref`, `attributes`, and `listeners` to a focusable element such as a\n * button to make it the drag handle; `isDragging` reflects the row's state.\n */\nexport interface SortableDragHandle {\n ref: SortableHookResult['setActivatorNodeRef']\n attributes: SortableHookResult['attributes']\n listeners: SortableHookResult['listeners']\n isDragging: boolean\n}\n\nexport interface SortableListProps<T> {\n items: T[]\n /** Stable unique id for an item. */\n getItemId: (item: T) => string\n /** Called with the reordered items after a drag completes. */\n onReorder: (items: T[]) => void\n /** Render a single row. Spread `handle` onto the drag-handle element. */\n renderItem: (item: T, handle: SortableDragHandle, index: number) => ReactNode\n /** Classes for the list container (defaults to a vertical flex with gap). */\n className?: string\n}\n\n/**\n * Vertical drag-and-drop sortable list built on @dnd-kit. Pointer, touch and\n * keyboard sensors are wired up; dragging is constrained to the vertical axis\n * within the list. The consumer owns row markup and decides which element is\n * the handle via the `handle` argument of `renderItem`.\n */\nexport function SortableList<T>({\n items,\n getItemId,\n onReorder,\n renderItem,\n className,\n}: SortableListProps<T>) {\n const ids = items.map(getItemId)\n\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 5 } }),\n useSensor(TouchSensor, {\n activationConstraint: { delay: 150, tolerance: 5 },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n )\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event\n if (!over || active.id === over.id) return\n const oldIndex = ids.indexOf(String(active.id))\n const newIndex = ids.indexOf(String(over.id))\n if (oldIndex < 0 || newIndex < 0) return\n onReorder(arrayMove(items, oldIndex, newIndex))\n }\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n modifiers={[restrictToVerticalAxis, restrictToParentElement]}\n onDragEnd={handleDragEnd}\n >\n <SortableContext items={ids} strategy={verticalListSortingStrategy}>\n <div className={cn('flex flex-col gap-2', className)}>\n {items.map((item, index) => (\n <SortableRow key={getItemId(item)} id={getItemId(item)}>\n {(handle) => renderItem(item, handle, index)}\n </SortableRow>\n ))}\n </div>\n </SortableContext>\n </DndContext>\n )\n}\n\ninterface SortableRowProps {\n id: string\n children: (handle: SortableDragHandle) => ReactNode\n}\n\nfunction SortableRow({ id, children }: SortableRowProps) {\n const {\n attributes,\n listeners,\n setNodeRef,\n setActivatorNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id })\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n }\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={cn(isDragging && 'relative z-10')}\n >\n {children({\n ref: setActivatorNodeRef,\n attributes,\n listeners,\n isDragging,\n })}\n </div>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;AAyDA,SAAgB,aAAgB,EAC9B,OACA,WACA,WACA,YACA,aACuB;CACvB,MAAM,MAAM,MAAM,IAAI,UAAU;CAEhC,MAAM,UAAU,WACd,UAAU,eAAe,EAAE,sBAAsB,EAAE,UAAU,GAAG,EAAE,CAAC,EACnE,UAAU,aAAa,EACrB,sBAAsB;EAAE,OAAO;EAAK,WAAW;EAAG,EACnD,CAAC,EACF,UAAU,gBAAgB,EACxB,kBAAkB,6BACnB,CAAC,CACH;CAED,MAAM,iBAAiB,UAAwB;EAC7C,MAAM,EAAE,QAAQ,SAAS;AACzB,MAAI,CAAC,QAAQ,OAAO,OAAO,KAAK,GAAI;EACpC,MAAM,WAAW,IAAI,QAAQ,OAAO,OAAO,GAAG,CAAC;EAC/C,MAAM,WAAW,IAAI,QAAQ,OAAO,KAAK,GAAG,CAAC;AAC7C,MAAI,WAAW,KAAK,WAAW,EAAG;AAClC,YAAU,UAAU,OAAO,UAAU,SAAS,CAAC;;AAGjD,QACE,oBAAC,YAAD;EACW;EACT,oBAAoB;EACpB,WAAW,CAAC,wBAAwB,wBAAwB;EAC5D,WAAW;YAEX,oBAAC,iBAAD;GAAiB,OAAO;GAAK,UAAU;aACrC,oBAAC,OAAD;IAAK,WAAW,GAAG,uBAAuB,UAAU;cACjD,MAAM,KAAK,MAAM,UAChB,oBAAC,aAAD;KAAmC,IAAI,UAAU,KAAK;gBAClD,WAAW,WAAW,MAAM,QAAQ,MAAM;KAChC,EAFI,UAAU,KAAK,CAEnB,CACd;IACE,CAAA;GACU,CAAA;EACP,CAAA;;AASjB,SAAS,YAAY,EAAE,IAAI,YAA8B;CACvD,MAAM,EACJ,YACA,WACA,YACA,qBACA,WACA,YACA,eACE,YAAY,EAAE,IAAI,CAAC;AAOvB,QACE,oBAAC,OAAD;EACE,KAAK;EACL,OAAO;GAPT,WAAW,IAAI,UAAU,SAAS,UAAU;GAC5C;GAMc;EACZ,WAAW,GAAG,cAAc,gBAAgB;YAE3C,SAAS;GACR,KAAK;GACL;GACA;GACA;GACD,CAAC;EACE,CAAA"}
@@ -0,0 +1,42 @@
1
+ "use client";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const require_chunk = require("../chunk-aJGBMT86.cjs");
4
+ let react = require("react");
5
+ react = require_chunk.__toESM(react);
6
+ let react_jsx_runtime = require("react/jsx-runtime");
7
+ let cnfast = require("cnfast");
8
+ //#region src/components/spinner.tsx
9
+ const sizeClasses = {
10
+ sm: "size-4",
11
+ default: "size-6",
12
+ lg: "size-8"
13
+ };
14
+ const Spinner = react.forwardRef(({ className, size = "default", label = "Loading", ...props }, ref) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
15
+ className: (0, cnfast.cn)("inline-flex text-spark-9", sizeClasses[size], className),
16
+ "data-slot": "spinner",
17
+ ref,
18
+ role: "status",
19
+ ...props,
20
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
21
+ className: "sr-only",
22
+ children: label
23
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
24
+ className: "size-full animate-spin [animation-duration:.65s] motion-reduce:animate-none",
25
+ fill: "none",
26
+ viewBox: "0 0 24 24",
27
+ xmlns: "http://www.w3.org/2000/svg",
28
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
29
+ d: "M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z",
30
+ fill: "currentColor",
31
+ opacity: ".25"
32
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
33
+ d: "M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z",
34
+ fill: "currentColor"
35
+ })]
36
+ })]
37
+ }));
38
+ Spinner.displayName = "Spinner";
39
+ //#endregion
40
+ exports.Spinner = Spinner;
41
+
42
+ //# sourceMappingURL=spinner.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.cjs","names":["React"],"sources":["../../src/components/spinner.tsx"],"sourcesContent":["import * as React from 'react'\nimport { cn } from '../utils/cn'\n\ninterface SpinnerProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Size variant */\n size?: 'sm' | 'default' | 'lg'\n /** Screen-reader announcement */\n label?: string\n}\n\nconst sizeClasses = {\n sm: 'size-4',\n default: 'size-6',\n lg: 'size-8',\n} as const\n\nconst Spinner = React.forwardRef<HTMLDivElement, SpinnerProps>(\n ({ className, size = 'default', label = 'Loading', ...props }, ref) => (\n // color + size live on the wrapper so className can override them (svg inherits via currentColor/size-full)\n <div\n className={cn('inline-flex text-spark-9', sizeClasses[size], className)}\n data-slot=\"spinner\"\n ref={ref}\n role=\"status\"\n {...props}\n >\n <span className=\"sr-only\">{label}</span>\n {/* CSS animation (not the ECP loader's SMIL): respects prefers-reduced-motion\n and stays off the main thread; the 0.65s speed matches ECP */}\n <svg\n className=\"size-full animate-spin [animation-duration:.65s] motion-reduce:animate-none\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z\"\n fill=\"currentColor\"\n opacity=\".25\"\n />\n <path\n d=\"M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z\"\n fill=\"currentColor\"\n />\n </svg>\n </div>\n ),\n)\n\nSpinner.displayName = 'Spinner'\n\nexport { Spinner }\nexport type { SpinnerProps }\n"],"mappings":";;;;;;;;AAUA,MAAM,cAAc;CAClB,IAAI;CACJ,SAAS;CACT,IAAI;CACL;AAED,MAAM,UAAUA,MAAM,YACnB,EAAE,WAAW,OAAO,WAAW,QAAQ,WAAW,GAAG,SAAS,QAE7D,iBAAA,GAAA,kBAAA,MAAC,OAAD;CACE,YAAA,GAAA,OAAA,IAAc,4BAA4B,YAAY,OAAO,UAAU;CACvE,aAAU;CACL;CACL,MAAK;CACL,GAAI;WALN,CAOE,iBAAA,GAAA,kBAAA,KAAC,QAAD;EAAM,WAAU;YAAW;EAAa,CAAA,EAGxC,iBAAA,GAAA,kBAAA,MAAC,OAAD;EACE,WAAU;EACV,MAAK;EACL,SAAQ;EACR,OAAM;YAJR,CAME,iBAAA,GAAA,kBAAA,KAAC,QAAD;GACE,GAAE;GACF,MAAK;GACL,SAAQ;GACR,CAAA,EACF,iBAAA,GAAA,kBAAA,KAAC,QAAD;GACE,GAAE;GACF,MAAK;GACL,CAAA,CACE;IACF;GAET;AAED,QAAQ,cAAc"}
@@ -0,0 +1,15 @@
1
+ "use client";
2
+
3
+ import * as React$1 from "react";
4
+
5
+ //#region src/components/spinner.d.ts
6
+ interface SpinnerProps extends React$1.HTMLAttributes<HTMLDivElement> {
7
+ /** Size variant */
8
+ size?: 'sm' | 'default' | 'lg';
9
+ /** Screen-reader announcement */
10
+ label?: string;
11
+ }
12
+ declare const Spinner: React$1.ForwardRefExoticComponent<SpinnerProps & React$1.RefAttributes<HTMLDivElement>>;
13
+ //#endregion
14
+ export { Spinner, type SpinnerProps };
15
+ //# sourceMappingURL=spinner.d.cts.map
@@ -0,0 +1,15 @@
1
+ "use client";
2
+
3
+ import * as React$1 from "react";
4
+
5
+ //#region src/components/spinner.d.ts
6
+ interface SpinnerProps extends React$1.HTMLAttributes<HTMLDivElement> {
7
+ /** Size variant */
8
+ size?: 'sm' | 'default' | 'lg';
9
+ /** Screen-reader announcement */
10
+ label?: string;
11
+ }
12
+ declare const Spinner: React$1.ForwardRefExoticComponent<SpinnerProps & React$1.RefAttributes<HTMLDivElement>>;
13
+ //#endregion
14
+ export { Spinner, type SpinnerProps };
15
+ //# sourceMappingURL=spinner.d.ts.map
@@ -0,0 +1,39 @@
1
+ "use client";
2
+ import { cn } from "../utils/cn.js";
3
+ import * as React$1 from "react";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ //#region src/components/spinner.tsx
6
+ const sizeClasses = {
7
+ sm: "size-4",
8
+ default: "size-6",
9
+ lg: "size-8"
10
+ };
11
+ const Spinner = React$1.forwardRef(({ className, size = "default", label = "Loading", ...props }, ref) => /* @__PURE__ */ jsxs("div", {
12
+ className: cn("inline-flex text-spark-9", sizeClasses[size], className),
13
+ "data-slot": "spinner",
14
+ ref,
15
+ role: "status",
16
+ ...props,
17
+ children: [/* @__PURE__ */ jsx("span", {
18
+ className: "sr-only",
19
+ children: label
20
+ }), /* @__PURE__ */ jsxs("svg", {
21
+ className: "size-full animate-spin [animation-duration:.65s] motion-reduce:animate-none",
22
+ fill: "none",
23
+ viewBox: "0 0 24 24",
24
+ xmlns: "http://www.w3.org/2000/svg",
25
+ children: [/* @__PURE__ */ jsx("path", {
26
+ d: "M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z",
27
+ fill: "currentColor",
28
+ opacity: ".25"
29
+ }), /* @__PURE__ */ jsx("path", {
30
+ d: "M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z",
31
+ fill: "currentColor"
32
+ })]
33
+ })]
34
+ }));
35
+ Spinner.displayName = "Spinner";
36
+ //#endregion
37
+ export { Spinner };
38
+
39
+ //# sourceMappingURL=spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.js","names":["React"],"sources":["../../src/components/spinner.tsx"],"sourcesContent":["import * as React from 'react'\nimport { cn } from '../utils/cn'\n\ninterface SpinnerProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Size variant */\n size?: 'sm' | 'default' | 'lg'\n /** Screen-reader announcement */\n label?: string\n}\n\nconst sizeClasses = {\n sm: 'size-4',\n default: 'size-6',\n lg: 'size-8',\n} as const\n\nconst Spinner = React.forwardRef<HTMLDivElement, SpinnerProps>(\n ({ className, size = 'default', label = 'Loading', ...props }, ref) => (\n // color + size live on the wrapper so className can override them (svg inherits via currentColor/size-full)\n <div\n className={cn('inline-flex text-spark-9', sizeClasses[size], className)}\n data-slot=\"spinner\"\n ref={ref}\n role=\"status\"\n {...props}\n >\n <span className=\"sr-only\">{label}</span>\n {/* CSS animation (not the ECP loader's SMIL): respects prefers-reduced-motion\n and stays off the main thread; the 0.65s speed matches ECP */}\n <svg\n className=\"size-full animate-spin [animation-duration:.65s] motion-reduce:animate-none\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z\"\n fill=\"currentColor\"\n opacity=\".25\"\n />\n <path\n d=\"M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z\"\n fill=\"currentColor\"\n />\n </svg>\n </div>\n ),\n)\n\nSpinner.displayName = 'Spinner'\n\nexport { Spinner }\nexport type { SpinnerProps }\n"],"mappings":";;;;;AAUA,MAAM,cAAc;CAClB,IAAI;CACJ,SAAS;CACT,IAAI;CACL;AAED,MAAM,UAAUA,QAAM,YACnB,EAAE,WAAW,OAAO,WAAW,QAAQ,WAAW,GAAG,SAAS,QAE7D,qBAAC,OAAD;CACE,WAAW,GAAG,4BAA4B,YAAY,OAAO,UAAU;CACvE,aAAU;CACL;CACL,MAAK;CACL,GAAI;WALN,CAOE,oBAAC,QAAD;EAAM,WAAU;YAAW;EAAa,CAAA,EAGxC,qBAAC,OAAD;EACE,WAAU;EACV,MAAK;EACL,SAAQ;EACR,OAAM;YAJR,CAME,oBAAC,QAAD;GACE,GAAE;GACF,MAAK;GACL,SAAQ;GACR,CAAA,EACF,oBAAC,QAAD;GACE,GAAE;GACF,MAAK;GACL,CAAA,CACE;IACF;GAET;AAED,QAAQ,cAAc"}
@@ -0,0 +1,58 @@
1
+ "use client";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ require("../chunk-aJGBMT86.cjs");
4
+ let react_jsx_runtime = require("react/jsx-runtime");
5
+ let cnfast = require("cnfast");
6
+ //#region src/components/stat-card.tsx
7
+ const StatCardContainer = ({ className, ...rest }) => {
8
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
9
+ className: (0, cnfast.cn)("flex w-full flex-col gap-3 p-4 text-left", className),
10
+ ...rest
11
+ });
12
+ };
13
+ const StatCardLabel = ({ className, ...rest }) => {
14
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
15
+ className: (0, cnfast.cn)("text-xs font-medium text-gray-light", className),
16
+ ...rest
17
+ });
18
+ };
19
+ const StatCardContent = ({ className, ...rest }) => {
20
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
21
+ className: (0, cnfast.cn)("flex items-end justify-between gap-px", className),
22
+ ...rest
23
+ });
24
+ };
25
+ const StatCardValueContainer = ({ className, ...rest }) => {
26
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
27
+ className: (0, cnfast.cn)("flex flex-col gap-0.5", className),
28
+ ...rest
29
+ });
30
+ };
31
+ const StatCardValue = ({ className, ...rest }) => {
32
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
33
+ className: (0, cnfast.cn)("text-lg font-bold text-gray tabular-nums", className),
34
+ ...rest
35
+ });
36
+ };
37
+ const StatCardSecondaryValue = ({ className, ...rest }) => {
38
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
39
+ className: (0, cnfast.cn)("text-xs text-gray-light", className),
40
+ ...rest
41
+ });
42
+ };
43
+ const StatCardIcon = ({ className, ...rest }) => {
44
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
45
+ className: (0, cnfast.cn)(`flex size-10 shrink-0 items-center justify-center rounded-xl`, className),
46
+ ...rest
47
+ });
48
+ };
49
+ //#endregion
50
+ exports.StatCardContainer = StatCardContainer;
51
+ exports.StatCardContent = StatCardContent;
52
+ exports.StatCardIcon = StatCardIcon;
53
+ exports.StatCardLabel = StatCardLabel;
54
+ exports.StatCardSecondaryValue = StatCardSecondaryValue;
55
+ exports.StatCardValue = StatCardValue;
56
+ exports.StatCardValueContainer = StatCardValueContainer;
57
+
58
+ //# sourceMappingURL=stat-card.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stat-card.cjs","names":[],"sources":["../../src/components/stat-card.tsx"],"sourcesContent":["import { cn } from '../utils/cn'\n\nconst StatCardContainer = ({\n className,\n ...rest\n}: React.ComponentProps<'div'>) => {\n return (\n <div\n className={cn('flex w-full flex-col gap-3 p-4 text-left', className)}\n {...rest}\n />\n )\n}\n\nconst StatCardLabel = ({\n className,\n ...rest\n}: React.ComponentProps<'span'>) => {\n return (\n <span\n className={cn('text-xs font-medium text-gray-light', className)}\n {...rest}\n />\n )\n}\n\nconst StatCardContent = ({\n className,\n ...rest\n}: React.ComponentProps<'div'>) => {\n return (\n <div\n className={cn('flex items-end justify-between gap-px', className)}\n {...rest}\n />\n )\n}\n\nconst StatCardValueContainer = ({\n className,\n ...rest\n}: React.ComponentProps<'div'>) => {\n return <div className={cn('flex flex-col gap-0.5', className)} {...rest} />\n}\n\nconst StatCardValue = ({\n className,\n ...rest\n}: React.ComponentProps<'span'>) => {\n return (\n <span\n className={cn('text-lg font-bold text-gray tabular-nums', className)}\n {...rest}\n />\n )\n}\n\nconst StatCardSecondaryValue = ({\n className,\n ...rest\n}: React.ComponentProps<'span'>) => {\n return <span className={cn('text-xs text-gray-light', className)} {...rest} />\n}\n\nconst StatCardIcon = ({ className, ...rest }: React.ComponentProps<'div'>) => {\n return (\n <div\n className={cn(\n `flex size-10 shrink-0 items-center justify-center rounded-xl`,\n className,\n )}\n {...rest}\n />\n )\n}\n\nexport {\n StatCardContainer,\n StatCardLabel,\n StatCardContent,\n StatCardValueContainer,\n StatCardValue,\n StatCardSecondaryValue,\n StatCardIcon,\n}\n"],"mappings":";;;;;;AAEA,MAAM,qBAAqB,EACzB,WACA,GAAG,WAC8B;AACjC,QACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,YAAA,GAAA,OAAA,IAAc,4CAA4C,UAAU;EACpE,GAAI;EACJ,CAAA;;AAIN,MAAM,iBAAiB,EACrB,WACA,GAAG,WAC+B;AAClC,QACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;EACE,YAAA,GAAA,OAAA,IAAc,uCAAuC,UAAU;EAC/D,GAAI;EACJ,CAAA;;AAIN,MAAM,mBAAmB,EACvB,WACA,GAAG,WAC8B;AACjC,QACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,YAAA,GAAA,OAAA,IAAc,yCAAyC,UAAU;EACjE,GAAI;EACJ,CAAA;;AAIN,MAAM,0BAA0B,EAC9B,WACA,GAAG,WAC8B;AACjC,QAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,YAAA,GAAA,OAAA,IAAc,yBAAyB,UAAU;EAAE,GAAI;EAAQ,CAAA;;AAG7E,MAAM,iBAAiB,EACrB,WACA,GAAG,WAC+B;AAClC,QACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;EACE,YAAA,GAAA,OAAA,IAAc,4CAA4C,UAAU;EACpE,GAAI;EACJ,CAAA;;AAIN,MAAM,0BAA0B,EAC9B,WACA,GAAG,WAC+B;AAClC,QAAO,iBAAA,GAAA,kBAAA,KAAC,QAAD;EAAM,YAAA,GAAA,OAAA,IAAc,2BAA2B,UAAU;EAAE,GAAI;EAAQ,CAAA;;AAGhF,MAAM,gBAAgB,EAAE,WAAW,GAAG,WAAwC;AAC5E,QACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,YAAA,GAAA,OAAA,IACE,gEACA,UACD;EACD,GAAI;EACJ,CAAA"}