@epilot/spark-ui 1.0.0-alpha.2 → 1.0.0-alpha.4

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 (561) 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 +520 -0
  30. package/dist/components/bar-chart.cjs.map +1 -0
  31. package/dist/components/bar-chart.d.cts +88 -0
  32. package/dist/components/bar-chart.d.ts +88 -0
  33. package/dist/components/bar-chart.js +518 -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 +42 -0
  56. package/dist/components/button.d.ts +42 -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 +24 -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 +22 -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 +64 -0
  150. package/dist/components/energy-history-chart.cjs.map +1 -0
  151. package/dist/components/energy-history-chart.d.cts +66 -0
  152. package/dist/components/energy-history-chart.d.ts +66 -0
  153. package/dist/components/energy-history-chart.js +62 -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 +350 -0
  210. package/dist/components/line-chart.cjs.map +1 -0
  211. package/dist/components/line-chart.d.cts +78 -0
  212. package/dist/components/line-chart.d.ts +78 -0
  213. package/dist/components/line-chart.js +347 -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 +335 -0
  294. package/dist/components/power-history-chart.cjs.map +1 -0
  295. package/dist/components/power-history-chart.d.cts +63 -0
  296. package/dist/components/power-history-chart.d.ts +63 -0
  297. package/dist/components/power-history-chart.js +332 -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 +188 -0
  336. package/dist/components/sankey-chart.cjs.map +1 -0
  337. package/dist/components/sankey-chart.d.cts +66 -0
  338. package/dist/components/sankey-chart.d.ts +66 -0
  339. package/dist/components/sankey-chart.js +185 -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/segmented-control.cjs +44 -0
  360. package/dist/components/segmented-control.cjs.map +1 -0
  361. package/dist/components/segmented-control.d.cts +33 -0
  362. package/dist/components/segmented-control.d.ts +33 -0
  363. package/dist/components/segmented-control.js +40 -0
  364. package/dist/components/segmented-control.js.map +1 -0
  365. package/dist/components/select.cjs +136 -0
  366. package/dist/components/select.cjs.map +1 -0
  367. package/dist/components/select.d.cts +63 -0
  368. package/dist/components/select.d.ts +63 -0
  369. package/dist/components/select.js +124 -0
  370. package/dist/components/select.js.map +1 -0
  371. package/dist/components/separator.cjs +38 -0
  372. package/dist/components/separator.cjs.map +1 -0
  373. package/dist/components/separator.d.cts +13 -0
  374. package/dist/components/separator.d.ts +13 -0
  375. package/dist/components/separator.js +35 -0
  376. package/dist/components/separator.js.map +1 -0
  377. package/dist/components/series-legend.cjs +39 -0
  378. package/dist/components/series-legend.cjs.map +1 -0
  379. package/dist/components/series-legend.d.cts +31 -0
  380. package/dist/components/series-legend.d.ts +31 -0
  381. package/dist/components/series-legend.js +37 -0
  382. package/dist/components/series-legend.js.map +1 -0
  383. package/dist/components/sheet.cjs +102 -0
  384. package/dist/components/sheet.cjs.map +1 -0
  385. package/dist/components/sheet.d.cts +46 -0
  386. package/dist/components/sheet.d.ts +46 -0
  387. package/dist/components/sheet.js +90 -0
  388. package/dist/components/sheet.js.map +1 -0
  389. package/dist/components/skeleton.cjs +24 -0
  390. package/dist/components/skeleton.cjs.map +1 -0
  391. package/dist/components/skeleton.d.cts +24 -0
  392. package/dist/components/skeleton.d.ts +24 -0
  393. package/dist/components/skeleton.js +21 -0
  394. package/dist/components/skeleton.js.map +1 -0
  395. package/dist/components/slider.cjs +276 -0
  396. package/dist/components/slider.cjs.map +1 -0
  397. package/dist/components/slider.d.cts +150 -0
  398. package/dist/components/slider.d.ts +150 -0
  399. package/dist/components/slider.js +266 -0
  400. package/dist/components/slider.js.map +1 -0
  401. package/dist/components/smart-toggle-button.cjs +28 -0
  402. package/dist/components/smart-toggle-button.cjs.map +1 -0
  403. package/dist/components/smart-toggle-button.d.cts +18 -0
  404. package/dist/components/smart-toggle-button.d.ts +18 -0
  405. package/dist/components/smart-toggle-button.js +26 -0
  406. package/dist/components/smart-toggle-button.js.map +1 -0
  407. package/dist/components/solar-forecast-chart.cjs +106 -0
  408. package/dist/components/solar-forecast-chart.cjs.map +1 -0
  409. package/dist/components/solar-forecast-chart.d.cts +69 -0
  410. package/dist/components/solar-forecast-chart.d.ts +69 -0
  411. package/dist/components/solar-forecast-chart.js +100 -0
  412. package/dist/components/solar-forecast-chart.js.map +1 -0
  413. package/dist/components/sortable-list.cjs +69 -0
  414. package/dist/components/sortable-list.cjs.map +1 -0
  415. package/dist/components/sortable-list.d.cts +46 -0
  416. package/dist/components/sortable-list.d.ts +46 -0
  417. package/dist/components/sortable-list.js +67 -0
  418. package/dist/components/sortable-list.js.map +1 -0
  419. package/dist/components/spinner.cjs +42 -0
  420. package/dist/components/spinner.cjs.map +1 -0
  421. package/dist/components/spinner.d.cts +15 -0
  422. package/dist/components/spinner.d.ts +15 -0
  423. package/dist/components/spinner.js +39 -0
  424. package/dist/components/spinner.js.map +1 -0
  425. package/dist/components/stat-card.cjs +58 -0
  426. package/dist/components/stat-card.cjs.map +1 -0
  427. package/dist/components/stat-card.d.cts +36 -0
  428. package/dist/components/stat-card.d.ts +36 -0
  429. package/dist/components/stat-card.js +50 -0
  430. package/dist/components/stat-card.js.map +1 -0
  431. package/dist/components/stepper.cjs +79 -0
  432. package/dist/components/stepper.cjs.map +1 -0
  433. package/dist/components/stepper.d.cts +33 -0
  434. package/dist/components/stepper.d.ts +33 -0
  435. package/dist/components/stepper.js +76 -0
  436. package/dist/components/stepper.js.map +1 -0
  437. package/dist/components/switch.cjs +22 -0
  438. package/dist/components/switch.cjs.map +1 -0
  439. package/dist/components/switch.d.cts +28 -0
  440. package/dist/components/switch.d.ts +28 -0
  441. package/dist/components/switch.js +20 -0
  442. package/dist/components/switch.js.map +1 -0
  443. package/dist/components/tabs.cjs +175 -0
  444. package/dist/components/tabs.cjs.map +1 -0
  445. package/dist/components/tabs.d.cts +45 -0
  446. package/dist/components/tabs.d.ts +45 -0
  447. package/dist/components/tabs.js +167 -0
  448. package/dist/components/tabs.js.map +1 -0
  449. package/dist/components/theme.cjs +6 -0
  450. package/dist/components/theme.d.cts +38 -0
  451. package/dist/components/theme.d.ts +38 -0
  452. package/dist/components/theme.js +4 -0
  453. package/dist/components/thumbnail.cjs +54 -0
  454. package/dist/components/thumbnail.cjs.map +1 -0
  455. package/dist/components/thumbnail.d.cts +34 -0
  456. package/dist/components/thumbnail.d.ts +34 -0
  457. package/dist/components/thumbnail.js +51 -0
  458. package/dist/components/thumbnail.js.map +1 -0
  459. package/dist/components/time-picker.cjs +55 -0
  460. package/dist/components/time-picker.cjs.map +1 -0
  461. package/dist/components/time-picker.d.cts +41 -0
  462. package/dist/components/time-picker.d.ts +41 -0
  463. package/dist/components/time-picker.js +51 -0
  464. package/dist/components/time-picker.js.map +1 -0
  465. package/dist/components/toast.cjs +99 -0
  466. package/dist/components/toast.cjs.map +1 -0
  467. package/dist/components/toast.d.cts +18 -0
  468. package/dist/components/toast.d.ts +18 -0
  469. package/dist/components/toast.js +95 -0
  470. package/dist/components/toast.js.map +1 -0
  471. package/dist/components/tooltip.cjs +75 -0
  472. package/dist/components/tooltip.cjs.map +1 -0
  473. package/dist/components/tooltip.d.cts +47 -0
  474. package/dist/components/tooltip.d.ts +47 -0
  475. package/dist/components/tooltip.js +67 -0
  476. package/dist/components/tooltip.js.map +1 -0
  477. package/dist/components/typography.cjs +52 -0
  478. package/dist/components/typography.cjs.map +1 -0
  479. package/dist/components/typography.d.cts +32 -0
  480. package/dist/components/typography.d.ts +32 -0
  481. package/dist/components/typography.js +45 -0
  482. package/dist/components/typography.js.map +1 -0
  483. package/dist/hooks/use-container-width.cjs +22 -0
  484. package/dist/hooks/use-container-width.cjs.map +1 -0
  485. package/dist/hooks/use-container-width.d.cts +7 -0
  486. package/dist/hooks/use-container-width.d.ts +7 -0
  487. package/dist/hooks/use-container-width.js +20 -0
  488. package/dist/hooks/use-container-width.js.map +1 -0
  489. package/dist/icons/index.cjs +7 -0
  490. package/dist/icons/index.d.cts +4 -0
  491. package/dist/icons/index.d.ts +4 -0
  492. package/dist/icons/index.js +3 -0
  493. package/dist/icons/material-symbol.cjs +105 -0
  494. package/dist/icons/material-symbol.cjs.map +1 -0
  495. package/dist/icons/material-symbol.d.cts +23 -0
  496. package/dist/icons/material-symbol.d.ts +23 -0
  497. package/dist/icons/material-symbol.js +100 -0
  498. package/dist/icons/material-symbol.js.map +1 -0
  499. package/dist/input-box-variants-BMDdwvqg.cjs +40 -0
  500. package/dist/input-box-variants-BMDdwvqg.cjs.map +1 -0
  501. package/dist/input-box-variants-Dr1K7uYE.js +28 -0
  502. package/dist/input-box-variants-Dr1K7uYE.js.map +1 -0
  503. package/dist/number-flow-DMJouddg.d.cts +15 -0
  504. package/dist/number-flow-DSbucQ_K.d.ts +15 -0
  505. package/dist/styles/index.css +260 -0
  506. package/dist/styles/internal.css +5 -0
  507. package/dist/styles/material-symbol.css +22 -0
  508. package/dist/styles/spark-default.css +888 -0
  509. package/dist/styles/theme.css +620 -0
  510. package/dist/styles/utilities.css +557 -0
  511. package/dist/theme-C19BbKfO.js +574 -0
  512. package/dist/theme-C19BbKfO.js.map +1 -0
  513. package/dist/theme-CfFWrMEF.cjs +592 -0
  514. package/dist/theme-CfFWrMEF.cjs.map +1 -0
  515. package/dist/theme-types-DoROIXpi.d.ts +30 -0
  516. package/dist/theme-types-r20EJfEC.d.cts +30 -0
  517. package/dist/tones-DjgKOX3s.d.cts +8 -0
  518. package/dist/tones-DyCkL71h.d.ts +8 -0
  519. package/dist/utils/build-sankey-nodes.cjs +72 -0
  520. package/dist/utils/build-sankey-nodes.cjs.map +1 -0
  521. package/dist/utils/build-sankey-nodes.d.cts +27 -0
  522. package/dist/utils/build-sankey-nodes.d.ts +27 -0
  523. package/dist/utils/build-sankey-nodes.js +71 -0
  524. package/dist/utils/build-sankey-nodes.js.map +1 -0
  525. package/dist/utils/chars.cjs +18 -0
  526. package/dist/utils/chars.cjs.map +1 -0
  527. package/dist/utils/chars.d.cts +10 -0
  528. package/dist/utils/chars.d.ts +10 -0
  529. package/dist/utils/chars.js +14 -0
  530. package/dist/utils/chars.js.map +1 -0
  531. package/dist/utils/chart-scale.cjs +43 -0
  532. package/dist/utils/chart-scale.cjs.map +1 -0
  533. package/dist/utils/chart-scale.d.cts +22 -0
  534. package/dist/utils/chart-scale.d.ts +22 -0
  535. package/dist/utils/chart-scale.js +41 -0
  536. package/dist/utils/chart-scale.js.map +1 -0
  537. package/dist/utils/cn.cjs +10 -0
  538. package/dist/utils/cn.d.cts +4 -0
  539. package/dist/utils/cn.d.ts +4 -0
  540. package/dist/utils/cn.js +3 -0
  541. package/dist/utils/date-mask.cjs +45 -0
  542. package/dist/utils/date-mask.cjs.map +1 -0
  543. package/dist/utils/date-mask.d.cts +17 -0
  544. package/dist/utils/date-mask.d.ts +17 -0
  545. package/dist/utils/date-mask.js +41 -0
  546. package/dist/utils/date-mask.js.map +1 -0
  547. package/dist/utils/format.cjs +57 -0
  548. package/dist/utils/format.cjs.map +1 -0
  549. package/dist/utils/format.d.cts +23 -0
  550. package/dist/utils/format.d.ts +23 -0
  551. package/dist/utils/format.js +47 -0
  552. package/dist/utils/format.js.map +1 -0
  553. package/package.json +78 -63
  554. package/dist/index.cjs +0 -1631
  555. package/dist/index.cjs.map +0 -1
  556. package/dist/index.css +0 -1
  557. package/dist/index.d.cts +0 -299
  558. package/dist/index.d.ts +0 -299
  559. package/dist/index.js +0 -1518
  560. package/dist/index.js.map +0 -1
  561. package/dist/styles.js +0 -1
@@ -0,0 +1,62 @@
1
+ "use client";
2
+ import "../utils/chars.js";
3
+ import { twoDecimalFormat } from "../utils/format.js";
4
+ import { EnergyBarChart } from "./energy-bar-chart.js";
5
+ import { jsx } from "react/jsx-runtime";
6
+ //#region src/components/energy-history-chart.tsx
7
+ /**
8
+ * Energy-per-bucket stacked bar chart: solar (orange), battery (green) and grid
9
+ * (blue) energy sources stacked per bucket, the total height being the energy
10
+ * consumed. Grid feed-in (translucent blue) dips below the baseline as an
11
+ * export. For cumulative energy (week/month/year views). Thin wrapper over the
12
+ * shared visx `BarChart`, so it inherits the card tooltip and both indicators.
13
+ */
14
+ function EnergyHistoryChart({ data, unit, formatValue, formatBucketLabel, labels, omitSeries, highlightedBucket, showHighlightLine, title, className, height = 260, categoryTicks }) {
15
+ const fmtValue = (value) => formatValue ? formatValue(value) : `${twoDecimalFormat.format(value)} ${unit}`;
16
+ const omitted = new Set(omitSeries);
17
+ return /* @__PURE__ */ jsx(EnergyBarChart, {
18
+ data,
19
+ series: [
20
+ {
21
+ key: "solar",
22
+ label: labels.solar,
23
+ color: "var(--orange-9)",
24
+ getValue: (d) => d.solar
25
+ },
26
+ {
27
+ key: "battery",
28
+ label: labels.battery,
29
+ color: "var(--green-9)",
30
+ getValue: (d) => d.battery
31
+ },
32
+ {
33
+ key: "grid",
34
+ label: labels.grid,
35
+ color: "var(--blue-9)",
36
+ getValue: (d) => d.grid
37
+ },
38
+ ...labels.gridFeedIn !== void 0 ? [{
39
+ key: "gridFeedIn",
40
+ label: labels.gridFeedIn,
41
+ color: "var(--blue-7)",
42
+ getValue: (d) => -Math.max(0, d.gridFeedIn ?? 0)
43
+ }] : []
44
+ ].filter((s) => !omitted.has(s.key)),
45
+ getCategory: (d) => d.bucket,
46
+ title,
47
+ yAxisUnit: unit,
48
+ height,
49
+ className,
50
+ formatValue: fmtValue,
51
+ categoryTicks,
52
+ ...formatBucketLabel && { formatTooltipCategory: (category) => formatBucketLabel(String(category)) },
53
+ totalSuffix: unit,
54
+ totalFormat: { maximumFractionDigits: 2 },
55
+ ...highlightedBucket !== void 0 && { highlightedCategory: highlightedBucket },
56
+ ...showHighlightLine !== void 0 && { showHighlightLine }
57
+ });
58
+ }
59
+ //#endregion
60
+ export { EnergyHistoryChart };
61
+
62
+ //# sourceMappingURL=energy-history-chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"energy-history-chart.js","names":["valueFormat"],"sources":["../../src/components/energy-history-chart.tsx"],"sourcesContent":["import { NARROW_NBSP } from '../utils/chars'\nimport { twoDecimalFormat as valueFormat } from '../utils/format'\nimport type { BarChartSeries } from './bar-chart'\nimport { EnergyBarChart } from './energy-bar-chart'\n\nexport interface EnergyHistoryDatum {\n /** Bucket label/id (e.g. weekday, day-of-month, month). */\n bucket: string\n /** Solar used on-site (kWh, ≥ 0). */\n solar: number\n /** Battery discharged (kWh, ≥ 0). */\n battery: number\n /** Grid imported (kWh, ≥ 0). */\n grid: number\n /** Grid feed-in (kWh, ≥ 0); drawn below the baseline as an export. */\n gridFeedIn?: number\n}\n\nexport interface EnergyHistoryChartProps {\n data: EnergyHistoryDatum[]\n /** Axis/tooltip unit, e.g. \"kWh\". */\n unit: string\n formatValue?: (value: number) => string\n /** Formats the hovered bucket in the tooltip header. Defaults to the raw bucket. */\n formatBucketLabel?: (bucket: string) => string\n labels: {\n solar: string\n battery: string\n grid: string\n /** Optional; when set, grid feed-in is drawn below the baseline. */\n gridFeedIn?: string\n }\n /** Series to drop entirely (no legend entry, bar segment, or tooltip row). */\n omitSeries?: readonly EnergyHistorySeriesKey[]\n /** Bucket to mark with the current-period dashed line. */\n highlightedBucket?: string\n showHighlightLine?: boolean\n title?: string\n className?: string\n height?: number\n /** Subset of bucket ids to label on the x-axis. Defaults to all buckets. */\n categoryTicks?: string[]\n}\n\nexport type EnergyHistorySeriesKey = 'solar' | 'battery' | 'grid' | 'gridFeedIn'\n\n/**\n * Energy-per-bucket stacked bar chart: solar (orange), battery (green) and grid\n * (blue) energy sources stacked per bucket, the total height being the energy\n * consumed. Grid feed-in (translucent blue) dips below the baseline as an\n * export. For cumulative energy (week/month/year views). Thin wrapper over the\n * shared visx `BarChart`, so it inherits the card tooltip and both indicators.\n */\nexport function EnergyHistoryChart({\n data,\n unit,\n formatValue,\n formatBucketLabel,\n labels,\n omitSeries,\n highlightedBucket,\n showHighlightLine,\n title,\n className,\n height = 260,\n categoryTicks,\n}: EnergyHistoryChartProps) {\n const fmtValue = (value: number) =>\n formatValue\n ? formatValue(value)\n : `${valueFormat.format(value)}${NARROW_NBSP}${unit}`\n\n const omitted = new Set<EnergyHistorySeriesKey>(omitSeries)\n const allSeries: BarChartSeries<EnergyHistoryDatum>[] = [\n {\n key: 'solar',\n label: labels.solar,\n color: 'var(--orange-9)',\n getValue: (d) => d.solar,\n },\n {\n key: 'battery',\n label: labels.battery,\n color: 'var(--green-9)',\n getValue: (d) => d.battery,\n },\n {\n key: 'grid',\n label: labels.grid,\n color: 'var(--blue-9)',\n getValue: (d) => d.grid,\n },\n ...(labels.gridFeedIn !== undefined\n ? [\n {\n key: 'gridFeedIn',\n label: labels.gridFeedIn,\n color: 'var(--blue-7)',\n getValue: (d: EnergyHistoryDatum) =>\n -Math.max(0, d.gridFeedIn ?? 0),\n },\n ]\n : []),\n ]\n const series = allSeries.filter(\n (s) => !omitted.has(s.key as EnergyHistorySeriesKey),\n )\n\n return (\n <EnergyBarChart<EnergyHistoryDatum>\n data={data}\n series={series}\n getCategory={(d) => d.bucket}\n title={title}\n yAxisUnit={unit}\n height={height}\n className={className}\n formatValue={fmtValue}\n categoryTicks={categoryTicks}\n {...(formatBucketLabel && {\n formatTooltipCategory: (category: string | number) =>\n formatBucketLabel(String(category)),\n })}\n totalSuffix={unit}\n totalFormat={{ maximumFractionDigits: 2 }}\n {...(highlightedBucket !== undefined && {\n highlightedCategory: highlightedBucket,\n })}\n {...(showHighlightLine !== undefined && { showHighlightLine })}\n />\n )\n}\n"],"mappings":";;;;;;;;;;;;;AAqDA,SAAgB,mBAAmB,EACjC,MACA,MACA,aACA,mBACA,QACA,YACA,mBACA,mBACA,OACA,WACA,SAAS,KACT,iBAC0B;CAC1B,MAAM,YAAY,UAChB,cACI,YAAY,MAAM,GAClB,GAAGA,iBAAY,OAAO,MAAM,IAAiB;CAEnD,MAAM,UAAU,IAAI,IAA4B,WAAW;AAoC3D,QACE,oBAAC,gBAAD;EACQ;EACN,QAPW;GA9Bb;IACE,KAAK;IACL,OAAO,OAAO;IACd,OAAO;IACP,WAAW,MAAM,EAAE;IACpB;GACD;IACE,KAAK;IACL,OAAO,OAAO;IACd,OAAO;IACP,WAAW,MAAM,EAAE;IACpB;GACD;IACE,KAAK;IACL,OAAO,OAAO;IACd,OAAO;IACP,WAAW,MAAM,EAAE;IACpB;GACD,GAAI,OAAO,eAAe,KAAA,IACtB,CACE;IACE,KAAK;IACL,OAAO,OAAO;IACd,OAAO;IACP,WAAW,MACT,CAAC,KAAK,IAAI,GAAG,EAAE,cAAc,EAAE;IAClC,CACF,GACD,EAAE;GAEgB,CAAC,QACtB,MAAM,CAAC,QAAQ,IAAI,EAAE,IAA8B,CAMpC;EACd,cAAc,MAAM,EAAE;EACf;EACP,WAAW;EACH;EACG;EACX,aAAa;EACE;EACf,GAAK,qBAAqB,EACxB,wBAAwB,aACtB,kBAAkB,OAAO,SAAS,CAAC,EACtC;EACD,aAAa;EACb,aAAa,EAAE,uBAAuB,GAAG;EACzC,GAAK,sBAAsB,KAAA,KAAa,EACtC,qBAAqB,mBACtB;EACD,GAAK,sBAAsB,KAAA,KAAa,EAAE,mBAAmB;EAC7D,CAAA"}
@@ -0,0 +1,56 @@
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 class_variance_authority = require("class-variance-authority");
6
+ let cnfast = require("cnfast");
7
+ //#region src/components/feed-in-hero.tsx
8
+ const FeedInHero = ({ className, ...rest }) => {
9
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
10
+ className: (0, cnfast.cn)("flex flex-col items-center gap-1 rounded-2xl border border-gray p-5 text-center", className),
11
+ ...rest
12
+ });
13
+ };
14
+ /**
15
+ * Label row above the value. Lays out children in a flex row with a small
16
+ * gap so a tooltip / icon can sit alongside the label text.
17
+ */
18
+ const FeedInHeroLabel = ({ className, ...rest }) => {
19
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
20
+ className: (0, cnfast.cn)("flex items-center gap-1.5 text-xs font-medium text-gray-light", className),
21
+ ...rest
22
+ });
23
+ };
24
+ const valueToneVariants = (0, class_variance_authority.cva)("text-4xl font-bold tabular-nums", {
25
+ variants: { tone: {
26
+ success: "text-success",
27
+ warning: "text-warning",
28
+ error: "text-error",
29
+ accent: "text-accent",
30
+ neutral: "text-gray"
31
+ } },
32
+ defaultVariants: { tone: "neutral" }
33
+ });
34
+ const FeedInHeroValue = ({ className, tone, ...rest }) => {
35
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
36
+ className: valueToneVariants({
37
+ tone,
38
+ className
39
+ }),
40
+ ...rest
41
+ });
42
+ };
43
+ /** Smaller-weight unit suffix that sits inline with the value (e.g. "W"). */
44
+ const FeedInHeroValueUnit = ({ className, ...rest }) => {
45
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
46
+ className: (0, cnfast.cn)("text-2xl font-semibold", className),
47
+ ...rest
48
+ });
49
+ };
50
+ //#endregion
51
+ exports.FeedInHero = FeedInHero;
52
+ exports.FeedInHeroLabel = FeedInHeroLabel;
53
+ exports.FeedInHeroValue = FeedInHeroValue;
54
+ exports.FeedInHeroValueUnit = FeedInHeroValueUnit;
55
+
56
+ //# sourceMappingURL=feed-in-hero.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feed-in-hero.cjs","names":[],"sources":["../../src/components/feed-in-hero.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority'\nimport type { Tone } from '../lib/tones'\nimport { cn } from '../utils/cn'\n\nconst FeedInHero = ({ className, ...rest }: React.ComponentProps<'div'>) => {\n return (\n <div\n className={cn(\n 'flex flex-col items-center gap-1 rounded-2xl border border-gray p-5 text-center',\n className,\n )}\n {...rest}\n />\n )\n}\n\n/**\n * Label row above the value. Lays out children in a flex row with a small\n * gap so a tooltip / icon can sit alongside the label text.\n */\nconst FeedInHeroLabel = ({\n className,\n ...rest\n}: React.ComponentProps<'div'>) => {\n return (\n <div\n className={cn(\n 'flex items-center gap-1.5 text-xs font-medium text-gray-light',\n className,\n )}\n {...rest}\n />\n )\n}\n\nconst valueToneVariants = cva('text-4xl font-bold tabular-nums', {\n variants: {\n tone: {\n success: 'text-success',\n warning: 'text-warning',\n error: 'text-error',\n accent: 'text-accent',\n neutral: 'text-gray',\n },\n },\n defaultVariants: {\n tone: 'neutral',\n },\n})\n\nconst FeedInHeroValue = ({\n className,\n tone,\n ...rest\n}: React.ComponentProps<'span'> & { tone?: Tone }) => {\n return <span className={valueToneVariants({ tone, className })} {...rest} />\n}\n\n/** Smaller-weight unit suffix that sits inline with the value (e.g. \"W\"). */\nconst FeedInHeroValueUnit = ({\n className,\n ...rest\n}: React.ComponentProps<'span'>) => {\n return <span className={cn('text-2xl font-semibold', className)} {...rest} />\n}\n\nexport { FeedInHero, FeedInHeroLabel, FeedInHeroValue, FeedInHeroValueUnit }\n"],"mappings":";;;;;;;AAIA,MAAM,cAAc,EAAE,WAAW,GAAG,WAAwC;AAC1E,QACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,YAAA,GAAA,OAAA,IACE,mFACA,UACD;EACD,GAAI;EACJ,CAAA;;;;;;AAQN,MAAM,mBAAmB,EACvB,WACA,GAAG,WAC8B;AACjC,QACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,YAAA,GAAA,OAAA,IACE,iEACA,UACD;EACD,GAAI;EACJ,CAAA;;AAIN,MAAM,qBAAA,GAAA,yBAAA,KAAwB,mCAAmC;CAC/D,UAAU,EACR,MAAM;EACJ,SAAS;EACT,SAAS;EACT,OAAO;EACP,QAAQ;EACR,SAAS;EACV,EACF;CACD,iBAAiB,EACf,MAAM,WACP;CACF,CAAC;AAEF,MAAM,mBAAmB,EACvB,WACA,MACA,GAAG,WACiD;AACpD,QAAO,iBAAA,GAAA,kBAAA,KAAC,QAAD;EAAM,WAAW,kBAAkB;GAAE;GAAM;GAAW,CAAC;EAAE,GAAI;EAAQ,CAAA;;;AAI9E,MAAM,uBAAuB,EAC3B,WACA,GAAG,WAC+B;AAClC,QAAO,iBAAA,GAAA,kBAAA,KAAC,QAAD;EAAM,YAAA,GAAA,OAAA,IAAc,0BAA0B,UAAU;EAAE,GAAI;EAAQ,CAAA"}
@@ -0,0 +1,33 @@
1
+ "use client";
2
+
3
+ import { t as Tone } from "../tones-DjgKOX3s.cjs";
4
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
5
+
6
+ //#region src/components/feed-in-hero.d.ts
7
+ declare const FeedInHero: ({
8
+ className,
9
+ ...rest
10
+ }: React.ComponentProps<"div">) => _$react_jsx_runtime0.JSX.Element;
11
+ /**
12
+ * Label row above the value. Lays out children in a flex row with a small
13
+ * gap so a tooltip / icon can sit alongside the label text.
14
+ */
15
+ declare const FeedInHeroLabel: ({
16
+ className,
17
+ ...rest
18
+ }: React.ComponentProps<"div">) => _$react_jsx_runtime0.JSX.Element;
19
+ declare const FeedInHeroValue: ({
20
+ className,
21
+ tone,
22
+ ...rest
23
+ }: React.ComponentProps<"span"> & {
24
+ tone?: Tone;
25
+ }) => _$react_jsx_runtime0.JSX.Element;
26
+ /** Smaller-weight unit suffix that sits inline with the value (e.g. "W"). */
27
+ declare const FeedInHeroValueUnit: ({
28
+ className,
29
+ ...rest
30
+ }: React.ComponentProps<"span">) => _$react_jsx_runtime0.JSX.Element;
31
+ //#endregion
32
+ export { FeedInHero, FeedInHeroLabel, FeedInHeroValue, FeedInHeroValueUnit };
33
+ //# sourceMappingURL=feed-in-hero.d.cts.map
@@ -0,0 +1,33 @@
1
+ "use client";
2
+
3
+ import { t as Tone } from "../tones-DyCkL71h.js";
4
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
5
+
6
+ //#region src/components/feed-in-hero.d.ts
7
+ declare const FeedInHero: ({
8
+ className,
9
+ ...rest
10
+ }: React.ComponentProps<"div">) => _$react_jsx_runtime0.JSX.Element;
11
+ /**
12
+ * Label row above the value. Lays out children in a flex row with a small
13
+ * gap so a tooltip / icon can sit alongside the label text.
14
+ */
15
+ declare const FeedInHeroLabel: ({
16
+ className,
17
+ ...rest
18
+ }: React.ComponentProps<"div">) => _$react_jsx_runtime0.JSX.Element;
19
+ declare const FeedInHeroValue: ({
20
+ className,
21
+ tone,
22
+ ...rest
23
+ }: React.ComponentProps<"span"> & {
24
+ tone?: Tone;
25
+ }) => _$react_jsx_runtime0.JSX.Element;
26
+ /** Smaller-weight unit suffix that sits inline with the value (e.g. "W"). */
27
+ declare const FeedInHeroValueUnit: ({
28
+ className,
29
+ ...rest
30
+ }: React.ComponentProps<"span">) => _$react_jsx_runtime0.JSX.Element;
31
+ //#endregion
32
+ export { FeedInHero, FeedInHeroLabel, FeedInHeroValue, FeedInHeroValueUnit };
33
+ //# sourceMappingURL=feed-in-hero.d.ts.map
@@ -0,0 +1,51 @@
1
+ "use client";
2
+ import { cn } from "../utils/cn.js";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import { cva } from "class-variance-authority";
5
+ //#region src/components/feed-in-hero.tsx
6
+ const FeedInHero = ({ className, ...rest }) => {
7
+ return /* @__PURE__ */ jsx("div", {
8
+ className: cn("flex flex-col items-center gap-1 rounded-2xl border border-gray p-5 text-center", className),
9
+ ...rest
10
+ });
11
+ };
12
+ /**
13
+ * Label row above the value. Lays out children in a flex row with a small
14
+ * gap so a tooltip / icon can sit alongside the label text.
15
+ */
16
+ const FeedInHeroLabel = ({ className, ...rest }) => {
17
+ return /* @__PURE__ */ jsx("div", {
18
+ className: cn("flex items-center gap-1.5 text-xs font-medium text-gray-light", className),
19
+ ...rest
20
+ });
21
+ };
22
+ const valueToneVariants = cva("text-4xl font-bold tabular-nums", {
23
+ variants: { tone: {
24
+ success: "text-success",
25
+ warning: "text-warning",
26
+ error: "text-error",
27
+ accent: "text-accent",
28
+ neutral: "text-gray"
29
+ } },
30
+ defaultVariants: { tone: "neutral" }
31
+ });
32
+ const FeedInHeroValue = ({ className, tone, ...rest }) => {
33
+ return /* @__PURE__ */ jsx("span", {
34
+ className: valueToneVariants({
35
+ tone,
36
+ className
37
+ }),
38
+ ...rest
39
+ });
40
+ };
41
+ /** Smaller-weight unit suffix that sits inline with the value (e.g. "W"). */
42
+ const FeedInHeroValueUnit = ({ className, ...rest }) => {
43
+ return /* @__PURE__ */ jsx("span", {
44
+ className: cn("text-2xl font-semibold", className),
45
+ ...rest
46
+ });
47
+ };
48
+ //#endregion
49
+ export { FeedInHero, FeedInHeroLabel, FeedInHeroValue, FeedInHeroValueUnit };
50
+
51
+ //# sourceMappingURL=feed-in-hero.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feed-in-hero.js","names":[],"sources":["../../src/components/feed-in-hero.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority'\nimport type { Tone } from '../lib/tones'\nimport { cn } from '../utils/cn'\n\nconst FeedInHero = ({ className, ...rest }: React.ComponentProps<'div'>) => {\n return (\n <div\n className={cn(\n 'flex flex-col items-center gap-1 rounded-2xl border border-gray p-5 text-center',\n className,\n )}\n {...rest}\n />\n )\n}\n\n/**\n * Label row above the value. Lays out children in a flex row with a small\n * gap so a tooltip / icon can sit alongside the label text.\n */\nconst FeedInHeroLabel = ({\n className,\n ...rest\n}: React.ComponentProps<'div'>) => {\n return (\n <div\n className={cn(\n 'flex items-center gap-1.5 text-xs font-medium text-gray-light',\n className,\n )}\n {...rest}\n />\n )\n}\n\nconst valueToneVariants = cva('text-4xl font-bold tabular-nums', {\n variants: {\n tone: {\n success: 'text-success',\n warning: 'text-warning',\n error: 'text-error',\n accent: 'text-accent',\n neutral: 'text-gray',\n },\n },\n defaultVariants: {\n tone: 'neutral',\n },\n})\n\nconst FeedInHeroValue = ({\n className,\n tone,\n ...rest\n}: React.ComponentProps<'span'> & { tone?: Tone }) => {\n return <span className={valueToneVariants({ tone, className })} {...rest} />\n}\n\n/** Smaller-weight unit suffix that sits inline with the value (e.g. \"W\"). */\nconst FeedInHeroValueUnit = ({\n className,\n ...rest\n}: React.ComponentProps<'span'>) => {\n return <span className={cn('text-2xl font-semibold', className)} {...rest} />\n}\n\nexport { FeedInHero, FeedInHeroLabel, FeedInHeroValue, FeedInHeroValueUnit }\n"],"mappings":";;;;;AAIA,MAAM,cAAc,EAAE,WAAW,GAAG,WAAwC;AAC1E,QACE,oBAAC,OAAD;EACE,WAAW,GACT,mFACA,UACD;EACD,GAAI;EACJ,CAAA;;;;;;AAQN,MAAM,mBAAmB,EACvB,WACA,GAAG,WAC8B;AACjC,QACE,oBAAC,OAAD;EACE,WAAW,GACT,iEACA,UACD;EACD,GAAI;EACJ,CAAA;;AAIN,MAAM,oBAAoB,IAAI,mCAAmC;CAC/D,UAAU,EACR,MAAM;EACJ,SAAS;EACT,SAAS;EACT,OAAO;EACP,QAAQ;EACR,SAAS;EACV,EACF;CACD,iBAAiB,EACf,MAAM,WACP;CACF,CAAC;AAEF,MAAM,mBAAmB,EACvB,WACA,MACA,GAAG,WACiD;AACpD,QAAO,oBAAC,QAAD;EAAM,WAAW,kBAAkB;GAAE;GAAM;GAAW,CAAC;EAAE,GAAI;EAAQ,CAAA;;;AAI9E,MAAM,uBAAuB,EAC3B,WACA,GAAG,WAC+B;AAClC,QAAO,oBAAC,QAAD;EAAM,WAAW,GAAG,0BAA0B,UAAU;EAAE,GAAI;EAAQ,CAAA"}
@@ -0,0 +1,257 @@
1
+ "use client";
2
+ "use client";
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
+ const require_chunk = require("../chunk-aJGBMT86.cjs");
5
+ const require_components_separator = require("./separator.cjs");
6
+ const require_theme = require("../theme-CfFWrMEF.cjs");
7
+ let react = require("react");
8
+ react = require_chunk.__toESM(react);
9
+ let react_jsx_runtime = require("react/jsx-runtime");
10
+ let class_variance_authority = require("class-variance-authority");
11
+ let cnfast = require("cnfast");
12
+ //#region src/components/field.tsx
13
+ const FieldContext = react.createContext(null);
14
+ function useFieldContext() {
15
+ return react.useContext(FieldContext);
16
+ }
17
+ function useFieldControl(options) {
18
+ const field = useFieldContext();
19
+ const theme = require_theme.useTheme();
20
+ return {
21
+ field,
22
+ id: options?.id ?? field?.id,
23
+ ariaDescribedBy: [field?.hasDescription ? field.descriptionId : void 0, options?.ariaDescribedBy].filter(Boolean).join(" ") || void 0,
24
+ inputStyle: options?.variant ?? field?.inputStyle ?? theme.inputStyle ?? "soft",
25
+ inputColor: field?.inputColor ?? theme.inputColor ?? "brand"
26
+ };
27
+ }
28
+ function FieldSet({ className, ...props }) {
29
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("fieldset", {
30
+ "data-slot": "field-set",
31
+ className: (0, cnfast.cn)("flex flex-col gap-4", className),
32
+ ...props
33
+ });
34
+ }
35
+ function FieldLegend({ className, variant = "legend", ...props }) {
36
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("legend", {
37
+ "data-slot": "field-legend",
38
+ "data-variant": variant,
39
+ className: (0, cnfast.cn)("mb-1.5 font-medium text-gray data-[variant=label]:text-sm data-[variant=legend]:text-base", className),
40
+ ...props
41
+ });
42
+ }
43
+ function FieldGroup({ className, ...props }) {
44
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
45
+ "data-slot": "field-group",
46
+ className: (0, cnfast.cn)("group/field-group flex w-full flex-col gap-4", className),
47
+ ...props
48
+ });
49
+ }
50
+ const fieldVariants = (0, class_variance_authority.cva)("group/field relative flex w-full flex-col data-[invalid=true]:text-error-active", {
51
+ variants: {
52
+ labelPosition: {
53
+ inset: "gap-y-1 rounded-lg px-4 py-3",
54
+ outset: "gap-y-2"
55
+ },
56
+ inputStyle: {
57
+ soft: "",
58
+ surface: "",
59
+ outlined: "",
60
+ ghost: ""
61
+ },
62
+ inputColor: {
63
+ brand: "",
64
+ gray: ""
65
+ }
66
+ },
67
+ compoundVariants: [
68
+ {
69
+ labelPosition: "inset",
70
+ inputStyle: "soft",
71
+ inputColor: "brand",
72
+ class: "bg-input-base has-[:is(input,[data-slot=select-trigger]):not(:disabled)]:hover:bg-input-base-hover"
73
+ },
74
+ {
75
+ labelPosition: "inset",
76
+ inputStyle: "soft",
77
+ inputColor: "gray",
78
+ class: "bg-base-gray-soft has-[:is(input,[data-slot=select-trigger]):not(:disabled)]:hover:bg-gray-a4"
79
+ },
80
+ {
81
+ labelPosition: "inset",
82
+ inputStyle: "surface",
83
+ inputColor: "brand",
84
+ class: "border border-input bg-base-accent-surface"
85
+ },
86
+ {
87
+ labelPosition: "inset",
88
+ inputStyle: "surface",
89
+ inputColor: "gray",
90
+ class: "border border-input-gray bg-base-gray-surface"
91
+ },
92
+ {
93
+ labelPosition: "inset",
94
+ inputStyle: "outlined",
95
+ inputColor: "brand",
96
+ class: "border border-input"
97
+ },
98
+ {
99
+ labelPosition: "inset",
100
+ inputStyle: "outlined",
101
+ inputColor: "gray",
102
+ class: "border border-input-gray"
103
+ },
104
+ {
105
+ labelPosition: "inset",
106
+ inputStyle: "ghost",
107
+ class: "rounded-none px-0"
108
+ },
109
+ {
110
+ labelPosition: "inset",
111
+ inputStyle: ["soft", "surface"],
112
+ class: "data-[disabled=true]:bg-base-gray-soft data-[invalid=true]:bg-base-error-soft data-[invalid=true]:has-[:is(input,[data-slot=select-trigger]):not(:disabled)]:hover:bg-red-a4"
113
+ },
114
+ {
115
+ labelPosition: "inset",
116
+ inputStyle: ["surface", "outlined"],
117
+ class: "data-[disabled=true]:border-input-disabled data-[invalid=true]:border-input-invalid"
118
+ }
119
+ ]
120
+ });
121
+ function Field({ className, labelPosition: labelPositionProp, inputStyle: inputStyleProp, inputColor: inputColorProp, ...props }) {
122
+ const id = (0, react.useId)();
123
+ const [hasDescription, setHasDescription] = react.useState(false);
124
+ const theme = require_theme.useTheme();
125
+ const labelPosition = labelPositionProp ?? theme.labelPosition ?? "inset";
126
+ const inputStyle = inputStyleProp ?? theme.inputStyle ?? "soft";
127
+ const inputColor = inputColorProp ?? theme.inputColor ?? "brand";
128
+ const value = react.useMemo(() => ({
129
+ id: `field-${id}`,
130
+ descriptionId: `field-${id}-description`,
131
+ hasDescription,
132
+ setHasDescription,
133
+ labelPosition,
134
+ inputStyle,
135
+ inputColor
136
+ }), [
137
+ id,
138
+ hasDescription,
139
+ labelPosition,
140
+ inputStyle,
141
+ inputColor
142
+ ]);
143
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FieldContext.Provider, {
144
+ value,
145
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
146
+ role: "group",
147
+ "data-slot": "field",
148
+ "data-label-position": labelPosition,
149
+ "data-input-style": inputStyle,
150
+ "data-input-color": inputColor,
151
+ className: (0, cnfast.cn)(fieldVariants({
152
+ labelPosition,
153
+ inputStyle,
154
+ inputColor
155
+ }), className),
156
+ ...props
157
+ })
158
+ });
159
+ }
160
+ function FieldContent({ className, ...props }) {
161
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
162
+ "data-slot": "field-content",
163
+ className: (0, cnfast.cn)("flex min-w-0 flex-1 flex-col gap-0.5 leading-snug", className),
164
+ ...props
165
+ });
166
+ }
167
+ function FieldLabel({ className, htmlFor, srOnly, ...props }) {
168
+ const field = useFieldContext();
169
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
170
+ "data-slot": "field-label",
171
+ className: (0, cnfast.cn)("text-sm leading-5 font-normal text-gray-light transition-all group-data-[invalid=true]/field:text-error-active! motion-reduce:transition-none", srOnly && "sr-only", className),
172
+ htmlFor: htmlFor ?? field?.id,
173
+ ...props
174
+ });
175
+ }
176
+ function FieldValue({ className, id, title, truncate, children, ...props }) {
177
+ const field = useFieldContext();
178
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
179
+ "data-slot": "field-value",
180
+ id: id ?? field?.id,
181
+ title: title ?? (truncate && typeof children === "string" ? children : void 0),
182
+ className: (0, cnfast.cn)("min-h-8 w-full text-base text-gray tabular-nums group-data-[disabled=true]/field:opacity-70", truncate ? "block truncate leading-8" : "inline-flex items-center wrap-anywhere whitespace-pre-wrap", className),
183
+ ...props,
184
+ children
185
+ });
186
+ }
187
+ function FieldTitle({ className, ...props }) {
188
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
189
+ "data-slot": "field-title",
190
+ className: (0, cnfast.cn)("flex w-fit items-center gap-2 text-sm font-medium text-gray", className),
191
+ ...props
192
+ });
193
+ }
194
+ function FieldDescription({ className, id, ...props }) {
195
+ const field = useFieldContext();
196
+ const setHasDescription = field?.setHasDescription;
197
+ react.useEffect(() => {
198
+ if (!setHasDescription) return;
199
+ setHasDescription(true);
200
+ return () => setHasDescription(false);
201
+ }, [setHasDescription]);
202
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
203
+ "data-slot": "field-description",
204
+ id: id ?? field?.descriptionId,
205
+ className: (0, cnfast.cn)("mt-0.5 text-sm leading-normal text-gray-light", className),
206
+ ...props
207
+ });
208
+ }
209
+ function FieldSeparator({ children, className, ...props }) {
210
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
211
+ "data-slot": "field-separator",
212
+ "data-content": !!children,
213
+ className: (0, cnfast.cn)("relative -my-2 h-5 text-sm", className),
214
+ ...props,
215
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_separator.Separator, { className: "absolute inset-0 top-1/2" }), children && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
216
+ className: "relative mx-auto block w-fit bg-(--spark-background) px-2 text-gray-light",
217
+ "data-slot": "field-separator-content",
218
+ children
219
+ })]
220
+ });
221
+ }
222
+ function FieldError({ className, children, errors, ...props }) {
223
+ const content = react.useMemo(() => {
224
+ if (children) return children;
225
+ if (!errors?.length) return null;
226
+ const unique = [...new Map(errors.map((error) => [error?.message, error])).values()];
227
+ if (unique.length === 1) return unique[0]?.message;
228
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
229
+ className: "ml-4 flex list-disc flex-col gap-1",
230
+ children: unique.map((error, index) => error?.message && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: error.message }, index))
231
+ });
232
+ }, [children, errors]);
233
+ if (!content) return null;
234
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
235
+ role: "alert",
236
+ "data-slot": "field-error",
237
+ className: (0, cnfast.cn)("mt-0.5 text-sm font-normal text-error", className),
238
+ ...props,
239
+ children: content
240
+ });
241
+ }
242
+ //#endregion
243
+ exports.Field = Field;
244
+ exports.FieldContent = FieldContent;
245
+ exports.FieldDescription = FieldDescription;
246
+ exports.FieldError = FieldError;
247
+ exports.FieldGroup = FieldGroup;
248
+ exports.FieldLabel = FieldLabel;
249
+ exports.FieldLegend = FieldLegend;
250
+ exports.FieldSeparator = FieldSeparator;
251
+ exports.FieldSet = FieldSet;
252
+ exports.FieldTitle = FieldTitle;
253
+ exports.FieldValue = FieldValue;
254
+ exports.useFieldContext = useFieldContext;
255
+ exports.useFieldControl = useFieldControl;
256
+
257
+ //# sourceMappingURL=field.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field.cjs","names":["React","useTheme","Separator"],"sources":["../../src/components/field.tsx"],"sourcesContent":["'use client'\n\nimport { cva } from 'class-variance-authority'\nimport * as React from 'react'\nimport { useId } from 'react'\nimport type {\n SparkInputColor,\n SparkInputStyle,\n SparkLabelPosition,\n} from '../lib/theme-types'\nimport { cn } from '../utils/cn'\nimport { Separator } from './separator'\nimport { useTheme } from './theme'\n\ntype FieldContextValue = {\n id: string\n descriptionId: string\n hasDescription: boolean\n setHasDescription: (has: boolean) => void\n labelPosition: SparkLabelPosition\n inputStyle: SparkInputStyle\n inputColor: SparkInputColor\n}\n\nconst FieldContext = React.createContext<FieldContextValue | null>(null)\n\nexport function useFieldContext() {\n return React.useContext(FieldContext)\n}\n\n// Field→Theme→default resolution + id/aria-describedby wiring, shared by every\n// control that can sit inside a Field (Input, SelectTrigger, …) so they can't\n// drift on how a style/color/id resolves. `variant` is the control's own\n// per-instance override (already normalized — e.g. Input maps its 'none' to\n// undefined before calling this).\nexport function useFieldControl(options?: {\n id?: string\n ariaDescribedBy?: string\n variant?: SparkInputStyle\n}) {\n const field = useFieldContext()\n const theme = useTheme()\n const id = options?.id ?? field?.id\n const descriptionId = field?.hasDescription ? field.descriptionId : undefined\n const ariaDescribedBy =\n [descriptionId, options?.ariaDescribedBy].filter(Boolean).join(' ') ||\n undefined\n const inputStyle =\n options?.variant ?? field?.inputStyle ?? theme.inputStyle ?? 'soft'\n const inputColor = field?.inputColor ?? theme.inputColor ?? 'brand'\n return { field, id, ariaDescribedBy, inputStyle, inputColor }\n}\n\nfunction FieldSet({ className, ...props }: React.ComponentProps<'fieldset'>) {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn('flex flex-col gap-4', className)}\n {...props}\n />\n )\n}\n\nfunction FieldLegend({\n className,\n variant = 'legend',\n ...props\n}: React.ComponentProps<'legend'> & { variant?: 'legend' | 'label' }) {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn(\n 'mb-1.5 font-medium text-gray data-[variant=label]:text-sm data-[variant=legend]:text-base',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"field-group\"\n className={cn('group/field-group flex w-full flex-col gap-4', className)}\n {...props}\n />\n )\n}\n\nconst fieldVariants = cva(\n 'group/field relative flex w-full flex-col data-[invalid=true]:text-error-active',\n {\n variants: {\n labelPosition: {\n // inset puts label + input inside one shell, so the shell is the box\n // focus inside inset is the classic underline cue, not a shell ring\n inset: 'gap-y-1 rounded-lg px-4 py-3',\n outset: 'gap-y-2',\n },\n inputStyle: { soft: '', surface: '', outlined: '', ghost: '' },\n inputColor: { brand: '', gray: '' },\n },\n compoundVariants: [\n {\n labelPosition: 'inset',\n inputStyle: 'soft',\n inputColor: 'brand',\n class:\n 'bg-input-base has-[:is(input,[data-slot=select-trigger]):not(:disabled)]:hover:bg-input-base-hover',\n },\n {\n labelPosition: 'inset',\n inputStyle: 'soft',\n inputColor: 'gray',\n class:\n 'bg-base-gray-soft has-[:is(input,[data-slot=select-trigger]):not(:disabled)]:hover:bg-gray-a4',\n },\n {\n labelPosition: 'inset',\n inputStyle: 'surface',\n inputColor: 'brand',\n class: 'border border-input bg-base-accent-surface',\n },\n {\n labelPosition: 'inset',\n inputStyle: 'surface',\n inputColor: 'gray',\n class: 'border border-input-gray bg-base-gray-surface',\n },\n {\n labelPosition: 'inset',\n inputStyle: 'outlined',\n inputColor: 'brand',\n class: 'border border-input',\n },\n {\n labelPosition: 'inset',\n inputStyle: 'outlined',\n inputColor: 'gray',\n class: 'border border-input-gray',\n },\n // ghost inset = bare label + underlined input; the input carries the line\n {\n labelPosition: 'inset',\n inputStyle: 'ghost',\n class: 'rounded-none px-0',\n },\n // shared inset states: filled shells swap bg, bordered shells swap border\n // invalid hover deepens the error tint instead of falling back to accent\n {\n labelPosition: 'inset',\n inputStyle: ['soft', 'surface'],\n class:\n 'data-[disabled=true]:bg-base-gray-soft data-[invalid=true]:bg-base-error-soft data-[invalid=true]:has-[:is(input,[data-slot=select-trigger]):not(:disabled)]:hover:bg-red-a4',\n },\n {\n labelPosition: 'inset',\n inputStyle: ['surface', 'outlined'],\n class:\n 'data-[disabled=true]:border-input-disabled data-[invalid=true]:border-input-invalid',\n },\n ],\n },\n)\n\ninterface FieldProps extends React.ComponentProps<'div'> {\n labelPosition?: SparkLabelPosition\n inputStyle?: SparkInputStyle\n inputColor?: SparkInputColor\n}\n\nfunction Field({\n className,\n labelPosition: labelPositionProp,\n inputStyle: inputStyleProp,\n inputColor: inputColorProp,\n ...props\n}: FieldProps) {\n const id = useId()\n const [hasDescription, setHasDescription] = React.useState(false)\n // knobs are structural (they move the label / pick the box carrier), so they\n // resolve here via the <Theme> context; props override per instance\n const theme = useTheme()\n const labelPosition = labelPositionProp ?? theme.labelPosition ?? 'inset'\n const inputStyle = inputStyleProp ?? theme.inputStyle ?? 'soft'\n const inputColor = inputColorProp ?? theme.inputColor ?? 'brand'\n const value = React.useMemo<FieldContextValue>(\n () => ({\n id: `field-${id}`,\n descriptionId: `field-${id}-description`,\n hasDescription,\n setHasDescription,\n labelPosition,\n inputStyle,\n inputColor,\n }),\n [id, hasDescription, labelPosition, inputStyle, inputColor],\n )\n\n return (\n <FieldContext.Provider value={value}>\n <div\n role=\"group\"\n data-slot=\"field\"\n data-label-position={labelPosition}\n data-input-style={inputStyle}\n data-input-color={inputColor}\n className={cn(\n fieldVariants({ labelPosition, inputStyle, inputColor }),\n className,\n )}\n {...props}\n />\n </FieldContext.Provider>\n )\n}\n\nfunction FieldContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"field-content\"\n className={cn(\n 'flex min-w-0 flex-1 flex-col gap-0.5 leading-snug',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLabel({\n className,\n htmlFor,\n srOnly,\n ...props\n}: React.ComponentProps<'label'> & { srOnly?: boolean }) {\n const field = useFieldContext()\n return (\n <label\n data-slot=\"field-label\"\n className={cn(\n // labels stay full-contrast even when disabled — the control itself\n // (dimmed text, gray shell) signals the state\n 'text-sm leading-5 font-normal text-gray-light transition-all group-data-[invalid=true]/field:text-error-active! motion-reduce:transition-none',\n // visually hidden but kept in the a11y tree (still names + focuses the control)\n srOnly && 'sr-only',\n className,\n )}\n htmlFor={htmlFor ?? field?.id}\n {...props}\n />\n )\n}\n\nfunction FieldValue({\n className,\n id,\n title,\n truncate,\n children,\n ...props\n}: React.ComponentProps<'div'> & { truncate?: boolean }) {\n const field = useFieldContext()\n return (\n <div\n data-slot=\"field-value\"\n id={id ?? field?.id}\n // truncated string values keep the full text reachable on hover\n title={\n title ??\n (truncate && typeof children === 'string' ? children : undefined)\n }\n className={cn(\n // values are content, not controls — disabled dims but stays ≥4.5:1\n 'min-h-8 w-full text-base text-gray tabular-nums group-data-[disabled=true]/field:opacity-70',\n truncate\n ? 'block truncate leading-8'\n : 'inline-flex items-center wrap-anywhere whitespace-pre-wrap',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n )\n}\n\nfunction FieldTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"field-title\"\n className={cn(\n 'flex w-fit items-center gap-2 text-sm font-medium text-gray',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction FieldDescription({\n className,\n id,\n ...props\n}: React.ComponentProps<'div'>) {\n const field = useFieldContext()\n const setHasDescription = field?.setHasDescription\n\n React.useEffect(() => {\n if (!setHasDescription) return\n setHasDescription(true)\n return () => setHasDescription(false)\n }, [setHasDescription])\n\n return (\n <div\n data-slot=\"field-description\"\n id={id ?? field?.descriptionId}\n className={cn('mt-0.5 text-sm leading-normal text-gray-light', className)}\n {...props}\n />\n )\n}\n\nfunction FieldSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn('relative -my-2 h-5 text-sm', className)}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span\n className=\"relative mx-auto block w-fit bg-(--spark-background) px-2 text-gray-light\"\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n )}\n </div>\n )\n}\n\nfunction FieldError({\n className,\n children,\n errors,\n ...props\n}: React.ComponentProps<'div'> & {\n errors?: Array<{ message?: string } | undefined>\n}) {\n const content = React.useMemo(() => {\n if (children) return children\n if (!errors?.length) return null\n const unique = [\n ...new Map(errors.map((error) => [error?.message, error])).values(),\n ]\n if (unique.length === 1) return unique[0]?.message\n return (\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n {unique.map(\n (error, index) =>\n error?.message && <li key={index}>{error.message}</li>,\n )}\n </ul>\n )\n }, [children, errors])\n\n if (!content) return null\n\n return (\n <div\n role=\"alert\"\n data-slot=\"field-error\"\n className={cn('mt-0.5 text-sm font-normal text-error', className)}\n {...props}\n >\n {content}\n </div>\n )\n}\n\nexport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldTitle,\n FieldValue,\n}\nexport type { FieldProps }\n"],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ "use client";
2
+
3
+ import { a as SparkInputStyle, i as SparkInputColor, o as SparkLabelPosition } from "../theme-types-r20EJfEC.cjs";
4
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
5
+ import * as React$1 from "react";
6
+
7
+ //#region src/components/field.d.ts
8
+ type FieldContextValue = {
9
+ id: string;
10
+ descriptionId: string;
11
+ hasDescription: boolean;
12
+ setHasDescription: (has: boolean) => void;
13
+ labelPosition: SparkLabelPosition;
14
+ inputStyle: SparkInputStyle;
15
+ inputColor: SparkInputColor;
16
+ };
17
+ declare function useFieldContext(): FieldContextValue | null;
18
+ declare function useFieldControl(options?: {
19
+ id?: string;
20
+ ariaDescribedBy?: string;
21
+ variant?: SparkInputStyle;
22
+ }): {
23
+ field: FieldContextValue | null;
24
+ id: string | undefined;
25
+ ariaDescribedBy: string | undefined;
26
+ inputStyle: SparkInputStyle;
27
+ inputColor: SparkInputColor;
28
+ };
29
+ declare function FieldSet({
30
+ className,
31
+ ...props
32
+ }: React$1.ComponentProps<'fieldset'>): _$react_jsx_runtime0.JSX.Element;
33
+ declare function FieldLegend({
34
+ className,
35
+ variant,
36
+ ...props
37
+ }: React$1.ComponentProps<'legend'> & {
38
+ variant?: 'legend' | 'label';
39
+ }): _$react_jsx_runtime0.JSX.Element;
40
+ declare function FieldGroup({
41
+ className,
42
+ ...props
43
+ }: React$1.ComponentProps<'div'>): _$react_jsx_runtime0.JSX.Element;
44
+ interface FieldProps extends React$1.ComponentProps<'div'> {
45
+ labelPosition?: SparkLabelPosition;
46
+ inputStyle?: SparkInputStyle;
47
+ inputColor?: SparkInputColor;
48
+ }
49
+ declare function Field({
50
+ className,
51
+ labelPosition: labelPositionProp,
52
+ inputStyle: inputStyleProp,
53
+ inputColor: inputColorProp,
54
+ ...props
55
+ }: FieldProps): _$react_jsx_runtime0.JSX.Element;
56
+ declare function FieldContent({
57
+ className,
58
+ ...props
59
+ }: React$1.ComponentProps<'div'>): _$react_jsx_runtime0.JSX.Element;
60
+ declare function FieldLabel({
61
+ className,
62
+ htmlFor,
63
+ srOnly,
64
+ ...props
65
+ }: React$1.ComponentProps<'label'> & {
66
+ srOnly?: boolean;
67
+ }): _$react_jsx_runtime0.JSX.Element;
68
+ declare function FieldValue({
69
+ className,
70
+ id,
71
+ title,
72
+ truncate,
73
+ children,
74
+ ...props
75
+ }: React$1.ComponentProps<'div'> & {
76
+ truncate?: boolean;
77
+ }): _$react_jsx_runtime0.JSX.Element;
78
+ declare function FieldTitle({
79
+ className,
80
+ ...props
81
+ }: React$1.ComponentProps<'div'>): _$react_jsx_runtime0.JSX.Element;
82
+ declare function FieldDescription({
83
+ className,
84
+ id,
85
+ ...props
86
+ }: React$1.ComponentProps<'div'>): _$react_jsx_runtime0.JSX.Element;
87
+ declare function FieldSeparator({
88
+ children,
89
+ className,
90
+ ...props
91
+ }: React$1.ComponentProps<'div'>): _$react_jsx_runtime0.JSX.Element;
92
+ declare function FieldError({
93
+ className,
94
+ children,
95
+ errors,
96
+ ...props
97
+ }: React$1.ComponentProps<'div'> & {
98
+ errors?: Array<{
99
+ message?: string;
100
+ } | undefined>;
101
+ }): _$react_jsx_runtime0.JSX.Element | null;
102
+ //#endregion
103
+ export { Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, type FieldProps, FieldSeparator, FieldSet, FieldTitle, FieldValue, useFieldContext, useFieldControl };
104
+ //# sourceMappingURL=field.d.cts.map