@epilot/spark-ui 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (629) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +2 -0
  3. package/README.md +32 -0
  4. package/dist/chunk-DY84GLCh.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 +44 -0
  8. package/dist/components/accordion.d.ts +44 -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 +62 -0
  14. package/dist/components/alert-dialog.d.ts +62 -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 +65 -0
  20. package/dist/components/attachment.d.ts +65 -0
  21. package/dist/components/attachment.js +108 -0
  22. package/dist/components/attachment.js.map +1 -0
  23. package/dist/components/avatar.cjs +56 -0
  24. package/dist/components/avatar.cjs.map +1 -0
  25. package/dist/components/avatar.d.cts +26 -0
  26. package/dist/components/avatar.d.ts +26 -0
  27. package/dist/components/avatar.js +52 -0
  28. package/dist/components/avatar.js.map +1 -0
  29. package/dist/components/badge.cjs +25 -0
  30. package/dist/components/badge.cjs.map +1 -0
  31. package/dist/components/badge.d.cts +16 -0
  32. package/dist/components/badge.d.ts +16 -0
  33. package/dist/components/badge.js +22 -0
  34. package/dist/components/badge.js.map +1 -0
  35. package/dist/components/bar-chart.cjs +584 -0
  36. package/dist/components/bar-chart.cjs.map +1 -0
  37. package/dist/components/bar-chart.d.cts +102 -0
  38. package/dist/components/bar-chart.d.ts +102 -0
  39. package/dist/components/bar-chart.js +583 -0
  40. package/dist/components/bar-chart.js.map +1 -0
  41. package/dist/components/battery-progress-row.cjs +133 -0
  42. package/dist/components/battery-progress-row.cjs.map +1 -0
  43. package/dist/components/battery-progress-row.d.cts +77 -0
  44. package/dist/components/battery-progress-row.d.ts +77 -0
  45. package/dist/components/battery-progress-row.js +123 -0
  46. package/dist/components/battery-progress-row.js.map +1 -0
  47. package/dist/components/breadcrumbs.cjs +64 -0
  48. package/dist/components/breadcrumbs.cjs.map +1 -0
  49. package/dist/components/breadcrumbs.d.cts +42 -0
  50. package/dist/components/breadcrumbs.d.ts +42 -0
  51. package/dist/components/breadcrumbs.js +58 -0
  52. package/dist/components/breadcrumbs.js.map +1 -0
  53. package/dist/components/bubble.cjs +84 -0
  54. package/dist/components/bubble.cjs.map +1 -0
  55. package/dist/components/bubble.d.cts +39 -0
  56. package/dist/components/bubble.d.ts +39 -0
  57. package/dist/components/bubble.js +78 -0
  58. package/dist/components/bubble.js.map +1 -0
  59. package/dist/components/button-group.cjs +72 -0
  60. package/dist/components/button-group.cjs.map +1 -0
  61. package/dist/components/button-group.d.cts +29 -0
  62. package/dist/components/button-group.d.ts +29 -0
  63. package/dist/components/button-group.js +64 -0
  64. package/dist/components/button-group.js.map +1 -0
  65. package/dist/components/button.cjs +58 -0
  66. package/dist/components/button.cjs.map +1 -0
  67. package/dist/components/button.d.cts +29 -0
  68. package/dist/components/button.d.ts +29 -0
  69. package/dist/components/button.js +54 -0
  70. package/dist/components/button.js.map +1 -0
  71. package/dist/components/calendar.cjs +59 -0
  72. package/dist/components/calendar.cjs.map +1 -0
  73. package/dist/components/calendar.d.cts +20 -0
  74. package/dist/components/calendar.d.ts +20 -0
  75. package/dist/components/calendar.js +56 -0
  76. package/dist/components/calendar.js.map +1 -0
  77. package/dist/components/callout.cjs +95 -0
  78. package/dist/components/callout.cjs.map +1 -0
  79. package/dist/components/callout.d.cts +42 -0
  80. package/dist/components/callout.d.ts +42 -0
  81. package/dist/components/callout.js +88 -0
  82. package/dist/components/callout.js.map +1 -0
  83. package/dist/components/card.cjs +100 -0
  84. package/dist/components/card.cjs.map +1 -0
  85. package/dist/components/card.d.cts +34 -0
  86. package/dist/components/card.d.ts +34 -0
  87. package/dist/components/card.js +90 -0
  88. package/dist/components/card.js.map +1 -0
  89. package/dist/components/chart.cjs +110 -0
  90. package/dist/components/chart.cjs.map +1 -0
  91. package/dist/components/chart.d.cts +92 -0
  92. package/dist/components/chart.d.ts +92 -0
  93. package/dist/components/chart.js +104 -0
  94. package/dist/components/chart.js.map +1 -0
  95. package/dist/components/checkbox.cjs +44 -0
  96. package/dist/components/checkbox.cjs.map +1 -0
  97. package/dist/components/checkbox.d.cts +26 -0
  98. package/dist/components/checkbox.d.ts +26 -0
  99. package/dist/components/checkbox.js +41 -0
  100. package/dist/components/checkbox.js.map +1 -0
  101. package/dist/components/circular-gauge.cjs +74 -0
  102. package/dist/components/circular-gauge.cjs.map +1 -0
  103. package/dist/components/circular-gauge.d.cts +37 -0
  104. package/dist/components/circular-gauge.d.ts +37 -0
  105. package/dist/components/circular-gauge.js +71 -0
  106. package/dist/components/circular-gauge.js.map +1 -0
  107. package/dist/components/day-of-week-picker.cjs +123 -0
  108. package/dist/components/day-of-week-picker.cjs.map +1 -0
  109. package/dist/components/day-of-week-picker.d.cts +39 -0
  110. package/dist/components/day-of-week-picker.d.ts +39 -0
  111. package/dist/components/day-of-week-picker.js +119 -0
  112. package/dist/components/day-of-week-picker.js.map +1 -0
  113. package/dist/components/device-card.cjs +118 -0
  114. package/dist/components/device-card.cjs.map +1 -0
  115. package/dist/components/device-card.d.cts +70 -0
  116. package/dist/components/device-card.d.ts +70 -0
  117. package/dist/components/device-card.js +104 -0
  118. package/dist/components/device-card.js.map +1 -0
  119. package/dist/components/dialog.cjs +115 -0
  120. package/dist/components/dialog.cjs.map +1 -0
  121. package/dist/components/dialog.d.cts +44 -0
  122. package/dist/components/dialog.d.ts +44 -0
  123. package/dist/components/dialog.js +103 -0
  124. package/dist/components/dialog.js.map +1 -0
  125. package/dist/components/donut-chart.cjs +70 -0
  126. package/dist/components/donut-chart.cjs.map +1 -0
  127. package/dist/components/donut-chart.d.cts +20 -0
  128. package/dist/components/donut-chart.d.ts +20 -0
  129. package/dist/components/donut-chart.js +69 -0
  130. package/dist/components/donut-chart.js.map +1 -0
  131. package/dist/components/drawer.cjs +95 -0
  132. package/dist/components/drawer.cjs.map +1 -0
  133. package/dist/components/drawer.d.cts +45 -0
  134. package/dist/components/drawer.d.ts +45 -0
  135. package/dist/components/drawer.js +83 -0
  136. package/dist/components/drawer.js.map +1 -0
  137. package/dist/components/dropdown-menu.cjs +165 -0
  138. package/dist/components/dropdown-menu.cjs.map +1 -0
  139. package/dist/components/dropdown-menu.d.cts +92 -0
  140. package/dist/components/dropdown-menu.d.ts +92 -0
  141. package/dist/components/dropdown-menu.js +148 -0
  142. package/dist/components/dropdown-menu.js.map +1 -0
  143. package/dist/components/empty-state.cjs +41 -0
  144. package/dist/components/empty-state.cjs.map +1 -0
  145. package/dist/components/empty-state.d.cts +26 -0
  146. package/dist/components/empty-state.d.ts +26 -0
  147. package/dist/components/empty-state.js +41 -0
  148. package/dist/components/empty-state.js.map +1 -0
  149. package/dist/components/energy-bar-chart.cjs +23 -0
  150. package/dist/components/energy-bar-chart.cjs.map +1 -0
  151. package/dist/components/energy-bar-chart.d.cts +43 -0
  152. package/dist/components/energy-bar-chart.d.ts +43 -0
  153. package/dist/components/energy-bar-chart.js +22 -0
  154. package/dist/components/energy-bar-chart.js.map +1 -0
  155. package/dist/components/energy-breakdown.cjs +80 -0
  156. package/dist/components/energy-breakdown.cjs.map +1 -0
  157. package/dist/components/energy-breakdown.d.cts +24 -0
  158. package/dist/components/energy-breakdown.d.ts +24 -0
  159. package/dist/components/energy-breakdown.js +79 -0
  160. package/dist/components/energy-breakdown.js.map +1 -0
  161. package/dist/components/energy-history-chart.cjs +63 -0
  162. package/dist/components/energy-history-chart.cjs.map +1 -0
  163. package/dist/components/energy-history-chart.d.cts +64 -0
  164. package/dist/components/energy-history-chart.d.ts +64 -0
  165. package/dist/components/energy-history-chart.js +62 -0
  166. package/dist/components/energy-history-chart.js.map +1 -0
  167. package/dist/components/feed-in-hero.cjs +55 -0
  168. package/dist/components/feed-in-hero.cjs.map +1 -0
  169. package/dist/components/feed-in-hero.d.cts +32 -0
  170. package/dist/components/feed-in-hero.d.ts +32 -0
  171. package/dist/components/feed-in-hero.js +51 -0
  172. package/dist/components/feed-in-hero.js.map +1 -0
  173. package/dist/components/field.cjs +257 -0
  174. package/dist/components/field.cjs.map +1 -0
  175. package/dist/components/field.d.cts +103 -0
  176. package/dist/components/field.d.ts +103 -0
  177. package/dist/components/field.js +243 -0
  178. package/dist/components/field.js.map +1 -0
  179. package/dist/components/icon.cjs +35 -0
  180. package/dist/components/icon.cjs.map +1 -0
  181. package/dist/components/icon.d.cts +26 -0
  182. package/dist/components/icon.d.ts +26 -0
  183. package/dist/components/icon.js +32 -0
  184. package/dist/components/icon.js.map +1 -0
  185. package/dist/components/info-block.cjs +75 -0
  186. package/dist/components/info-block.cjs.map +1 -0
  187. package/dist/components/info-block.d.cts +19 -0
  188. package/dist/components/info-block.d.ts +19 -0
  189. package/dist/components/info-block.js +65 -0
  190. package/dist/components/info-block.js.map +1 -0
  191. package/dist/components/input-group.cjs +165 -0
  192. package/dist/components/input-group.cjs.map +1 -0
  193. package/dist/components/input-group.d.cts +27 -0
  194. package/dist/components/input-group.d.ts +27 -0
  195. package/dist/components/input-group.js +159 -0
  196. package/dist/components/input-group.js.map +1 -0
  197. package/dist/components/input-otp.cjs +112 -0
  198. package/dist/components/input-otp.cjs.map +1 -0
  199. package/dist/components/input-otp.d.cts +24 -0
  200. package/dist/components/input-otp.d.ts +24 -0
  201. package/dist/components/input-otp.js +111 -0
  202. package/dist/components/input-otp.js.map +1 -0
  203. package/dist/components/input.cjs +113 -0
  204. package/dist/components/input.cjs.map +1 -0
  205. package/dist/components/input.d.cts +14 -0
  206. package/dist/components/input.d.ts +14 -0
  207. package/dist/components/input.js +110 -0
  208. package/dist/components/input.js.map +1 -0
  209. package/dist/components/label.cjs +18 -0
  210. package/dist/components/label.cjs.map +1 -0
  211. package/dist/components/label.d.cts +10 -0
  212. package/dist/components/label.d.ts +10 -0
  213. package/dist/components/label.js +15 -0
  214. package/dist/components/label.js.map +1 -0
  215. package/dist/components/layout.cjs +14 -0
  216. package/dist/components/layout.cjs.map +1 -0
  217. package/dist/components/layout.d.cts +11 -0
  218. package/dist/components/layout.d.ts +12 -0
  219. package/dist/components/layout.js +14 -0
  220. package/dist/components/layout.js.map +1 -0
  221. package/dist/components/line-chart.cjs +538 -0
  222. package/dist/components/line-chart.cjs.map +1 -0
  223. package/dist/components/line-chart.d.cts +90 -0
  224. package/dist/components/line-chart.d.ts +90 -0
  225. package/dist/components/line-chart.js +536 -0
  226. package/dist/components/line-chart.js.map +1 -0
  227. package/dist/components/list.cjs +132 -0
  228. package/dist/components/list.cjs.map +1 -0
  229. package/dist/components/list.d.cts +71 -0
  230. package/dist/components/list.d.ts +71 -0
  231. package/dist/components/list.js +122 -0
  232. package/dist/components/list.js.map +1 -0
  233. package/dist/components/marker.cjs +52 -0
  234. package/dist/components/marker.cjs.map +1 -0
  235. package/dist/components/marker.d.cts +27 -0
  236. package/dist/components/marker.d.ts +27 -0
  237. package/dist/components/marker.js +46 -0
  238. package/dist/components/marker.js.map +1 -0
  239. package/dist/components/message-scroller.cjs +73 -0
  240. package/dist/components/message-scroller.cjs.map +1 -0
  241. package/dist/components/message-scroller.d.cts +38 -0
  242. package/dist/components/message-scroller.d.ts +38 -0
  243. package/dist/components/message-scroller.js +62 -0
  244. package/dist/components/message-scroller.js.map +1 -0
  245. package/dist/components/message.cjs +60 -0
  246. package/dist/components/message.cjs.map +1 -0
  247. package/dist/components/message.d.cts +35 -0
  248. package/dist/components/message.d.ts +35 -0
  249. package/dist/components/message.js +52 -0
  250. package/dist/components/message.js.map +1 -0
  251. package/dist/components/metering-row.cjs +42 -0
  252. package/dist/components/metering-row.cjs.map +1 -0
  253. package/dist/components/metering-row.d.cts +31 -0
  254. package/dist/components/metering-row.d.ts +31 -0
  255. package/dist/components/metering-row.js +38 -0
  256. package/dist/components/metering-row.js.map +1 -0
  257. package/dist/components/money-saved-block.cjs +86 -0
  258. package/dist/components/money-saved-block.cjs.map +1 -0
  259. package/dist/components/money-saved-block.d.cts +55 -0
  260. package/dist/components/money-saved-block.d.ts +55 -0
  261. package/dist/components/money-saved-block.js +79 -0
  262. package/dist/components/money-saved-block.js.map +1 -0
  263. package/dist/components/number-flow.cjs +44 -0
  264. package/dist/components/number-flow.cjs.map +1 -0
  265. package/dist/components/number-flow.d.cts +4 -0
  266. package/dist/components/number-flow.d.ts +4 -0
  267. package/dist/components/number-flow.js +42 -0
  268. package/dist/components/number-flow.js.map +1 -0
  269. package/dist/components/on-off-button.cjs +35 -0
  270. package/dist/components/on-off-button.cjs.map +1 -0
  271. package/dist/components/on-off-button.d.cts +18 -0
  272. package/dist/components/on-off-button.d.ts +18 -0
  273. package/dist/components/on-off-button.js +34 -0
  274. package/dist/components/on-off-button.js.map +1 -0
  275. package/dist/components/onboarding-layout.cjs +67 -0
  276. package/dist/components/onboarding-layout.cjs.map +1 -0
  277. package/dist/components/onboarding-layout.d.cts +44 -0
  278. package/dist/components/onboarding-layout.d.ts +44 -0
  279. package/dist/components/onboarding-layout.js +60 -0
  280. package/dist/components/onboarding-layout.js.map +1 -0
  281. package/dist/components/page-header.cjs +50 -0
  282. package/dist/components/page-header.cjs.map +1 -0
  283. package/dist/components/page-header.d.cts +25 -0
  284. package/dist/components/page-header.d.ts +25 -0
  285. package/dist/components/page-header.js +44 -0
  286. package/dist/components/page-header.js.map +1 -0
  287. package/dist/components/page-spinner.cjs +18 -0
  288. package/dist/components/page-spinner.cjs.map +1 -0
  289. package/dist/components/page-spinner.d.cts +12 -0
  290. package/dist/components/page-spinner.d.ts +12 -0
  291. package/dist/components/page-spinner.js +17 -0
  292. package/dist/components/page-spinner.js.map +1 -0
  293. package/dist/components/period-tabs.cjs +78 -0
  294. package/dist/components/period-tabs.cjs.map +1 -0
  295. package/dist/components/period-tabs.d.cts +50 -0
  296. package/dist/components/period-tabs.d.ts +50 -0
  297. package/dist/components/period-tabs.js +73 -0
  298. package/dist/components/period-tabs.js.map +1 -0
  299. package/dist/components/pill.cjs +62 -0
  300. package/dist/components/pill.cjs.map +1 -0
  301. package/dist/components/pill.d.cts +29 -0
  302. package/dist/components/pill.d.ts +29 -0
  303. package/dist/components/pill.js +59 -0
  304. package/dist/components/pill.js.map +1 -0
  305. package/dist/components/popover.cjs +62 -0
  306. package/dist/components/popover.cjs.map +1 -0
  307. package/dist/components/popover.d.cts +28 -0
  308. package/dist/components/popover.d.ts +28 -0
  309. package/dist/components/popover.js +56 -0
  310. package/dist/components/popover.js.map +1 -0
  311. package/dist/components/power-history-chart.cjs +498 -0
  312. package/dist/components/power-history-chart.cjs.map +1 -0
  313. package/dist/components/power-history-chart.d.cts +71 -0
  314. package/dist/components/power-history-chart.d.ts +71 -0
  315. package/dist/components/power-history-chart.js +496 -0
  316. package/dist/components/power-history-chart.js.map +1 -0
  317. package/dist/components/power-history.cjs +114 -0
  318. package/dist/components/power-history.cjs.map +1 -0
  319. package/dist/components/power-history.d.cts +40 -0
  320. package/dist/components/power-history.d.ts +41 -0
  321. package/dist/components/power-history.js +114 -0
  322. package/dist/components/power-history.js.map +1 -0
  323. package/dist/components/power-network.cjs +562 -0
  324. package/dist/components/power-network.cjs.map +1 -0
  325. package/dist/components/power-network.d.cts +80 -0
  326. package/dist/components/power-network.d.ts +80 -0
  327. package/dist/components/power-network.js +556 -0
  328. package/dist/components/power-network.js.map +1 -0
  329. package/dist/components/progress.cjs +34 -0
  330. package/dist/components/progress.cjs.map +1 -0
  331. package/dist/components/progress.d.cts +17 -0
  332. package/dist/components/progress.d.ts +17 -0
  333. package/dist/components/progress.js +31 -0
  334. package/dist/components/progress.js.map +1 -0
  335. package/dist/components/radio-card-group.cjs +94 -0
  336. package/dist/components/radio-card-group.cjs.map +1 -0
  337. package/dist/components/radio-card-group.d.cts +21 -0
  338. package/dist/components/radio-card-group.d.ts +21 -0
  339. package/dist/components/radio-card-group.js +90 -0
  340. package/dist/components/radio-card-group.js.map +1 -0
  341. package/dist/components/radio.cjs +41 -0
  342. package/dist/components/radio.cjs.map +1 -0
  343. package/dist/components/radio.d.cts +32 -0
  344. package/dist/components/radio.d.ts +32 -0
  345. package/dist/components/radio.js +37 -0
  346. package/dist/components/radio.js.map +1 -0
  347. package/dist/components/reparent.cjs +55 -0
  348. package/dist/components/reparent.cjs.map +1 -0
  349. package/dist/components/reparent.d.cts +28 -0
  350. package/dist/components/reparent.d.ts +28 -0
  351. package/dist/components/reparent.js +49 -0
  352. package/dist/components/reparent.js.map +1 -0
  353. package/dist/components/sankey-chart.cjs +187 -0
  354. package/dist/components/sankey-chart.cjs.map +1 -0
  355. package/dist/components/sankey-chart.d.cts +66 -0
  356. package/dist/components/sankey-chart.d.ts +66 -0
  357. package/dist/components/sankey-chart.js +185 -0
  358. package/dist/components/sankey-chart.js.map +1 -0
  359. package/dist/components/schedule-editor.cjs +82 -0
  360. package/dist/components/schedule-editor.cjs.map +1 -0
  361. package/dist/components/schedule-editor.d.cts +25 -0
  362. package/dist/components/schedule-editor.d.ts +25 -0
  363. package/dist/components/schedule-editor.js +72 -0
  364. package/dist/components/schedule-editor.js.map +1 -0
  365. package/dist/components/schedule-list.cjs +110 -0
  366. package/dist/components/schedule-list.cjs.map +1 -0
  367. package/dist/components/schedule-list.d.cts +29 -0
  368. package/dist/components/schedule-list.d.ts +29 -0
  369. package/dist/components/schedule-list.js +99 -0
  370. package/dist/components/schedule-list.js.map +1 -0
  371. package/dist/components/scroll-area.cjs +53 -0
  372. package/dist/components/scroll-area.cjs.map +1 -0
  373. package/dist/components/scroll-area.d.cts +24 -0
  374. package/dist/components/scroll-area.d.ts +24 -0
  375. package/dist/components/scroll-area.js +44 -0
  376. package/dist/components/scroll-area.js.map +1 -0
  377. package/dist/components/segmented-control.cjs +44 -0
  378. package/dist/components/segmented-control.cjs.map +1 -0
  379. package/dist/components/segmented-control.d.cts +32 -0
  380. package/dist/components/segmented-control.d.ts +32 -0
  381. package/dist/components/segmented-control.js +40 -0
  382. package/dist/components/segmented-control.js.map +1 -0
  383. package/dist/components/select.cjs +136 -0
  384. package/dist/components/select.cjs.map +1 -0
  385. package/dist/components/select.d.cts +62 -0
  386. package/dist/components/select.d.ts +62 -0
  387. package/dist/components/select.js +124 -0
  388. package/dist/components/select.js.map +1 -0
  389. package/dist/components/separator.cjs +38 -0
  390. package/dist/components/separator.cjs.map +1 -0
  391. package/dist/components/separator.d.cts +13 -0
  392. package/dist/components/separator.d.ts +13 -0
  393. package/dist/components/separator.js +35 -0
  394. package/dist/components/separator.js.map +1 -0
  395. package/dist/components/series-legend.cjs +38 -0
  396. package/dist/components/series-legend.cjs.map +1 -0
  397. package/dist/components/series-legend.d.cts +29 -0
  398. package/dist/components/series-legend.d.ts +29 -0
  399. package/dist/components/series-legend.js +37 -0
  400. package/dist/components/series-legend.js.map +1 -0
  401. package/dist/components/sheet.cjs +102 -0
  402. package/dist/components/sheet.cjs.map +1 -0
  403. package/dist/components/sheet.d.cts +45 -0
  404. package/dist/components/sheet.d.ts +45 -0
  405. package/dist/components/sheet.js +90 -0
  406. package/dist/components/sheet.js.map +1 -0
  407. package/dist/components/skeleton.cjs +23 -0
  408. package/dist/components/skeleton.cjs.map +1 -0
  409. package/dist/components/skeleton.d.cts +23 -0
  410. package/dist/components/skeleton.d.ts +23 -0
  411. package/dist/components/skeleton.js +21 -0
  412. package/dist/components/skeleton.js.map +1 -0
  413. package/dist/components/slider.cjs +263 -0
  414. package/dist/components/slider.cjs.map +1 -0
  415. package/dist/components/slider.d.cts +136 -0
  416. package/dist/components/slider.d.ts +136 -0
  417. package/dist/components/slider.js +253 -0
  418. package/dist/components/slider.js.map +1 -0
  419. package/dist/components/smart-toggle-button.cjs +27 -0
  420. package/dist/components/smart-toggle-button.cjs.map +1 -0
  421. package/dist/components/smart-toggle-button.d.cts +16 -0
  422. package/dist/components/smart-toggle-button.d.ts +16 -0
  423. package/dist/components/smart-toggle-button.js +26 -0
  424. package/dist/components/smart-toggle-button.js.map +1 -0
  425. package/dist/components/solar-forecast-chart.cjs +109 -0
  426. package/dist/components/solar-forecast-chart.cjs.map +1 -0
  427. package/dist/components/solar-forecast-chart.d.cts +77 -0
  428. package/dist/components/solar-forecast-chart.d.ts +77 -0
  429. package/dist/components/solar-forecast-chart.js +104 -0
  430. package/dist/components/solar-forecast-chart.js.map +1 -0
  431. package/dist/components/sortable-list.cjs +68 -0
  432. package/dist/components/sortable-list.cjs.map +1 -0
  433. package/dist/components/sortable-list.d.cts +45 -0
  434. package/dist/components/sortable-list.d.ts +45 -0
  435. package/dist/components/sortable-list.js +67 -0
  436. package/dist/components/sortable-list.js.map +1 -0
  437. package/dist/components/spinner.cjs +42 -0
  438. package/dist/components/spinner.cjs.map +1 -0
  439. package/dist/components/spinner.d.cts +15 -0
  440. package/dist/components/spinner.d.ts +15 -0
  441. package/dist/components/spinner.js +39 -0
  442. package/dist/components/spinner.js.map +1 -0
  443. package/dist/components/stat-card.cjs +57 -0
  444. package/dist/components/stat-card.cjs.map +1 -0
  445. package/dist/components/stat-card.d.cts +34 -0
  446. package/dist/components/stat-card.d.ts +34 -0
  447. package/dist/components/stat-card.js +50 -0
  448. package/dist/components/stat-card.js.map +1 -0
  449. package/dist/components/stepper.cjs +79 -0
  450. package/dist/components/stepper.cjs.map +1 -0
  451. package/dist/components/stepper.d.cts +33 -0
  452. package/dist/components/stepper.d.ts +33 -0
  453. package/dist/components/stepper.js +76 -0
  454. package/dist/components/stepper.js.map +1 -0
  455. package/dist/components/switch.cjs +26 -0
  456. package/dist/components/switch.cjs.map +1 -0
  457. package/dist/components/switch.d.cts +32 -0
  458. package/dist/components/switch.d.ts +32 -0
  459. package/dist/components/switch.js +25 -0
  460. package/dist/components/switch.js.map +1 -0
  461. package/dist/components/tabs.cjs +178 -0
  462. package/dist/components/tabs.cjs.map +1 -0
  463. package/dist/components/tabs.d.cts +44 -0
  464. package/dist/components/tabs.d.ts +44 -0
  465. package/dist/components/tabs.js +170 -0
  466. package/dist/components/tabs.js.map +1 -0
  467. package/dist/components/textarea.cjs +128 -0
  468. package/dist/components/textarea.cjs.map +1 -0
  469. package/dist/components/textarea.d.cts +15 -0
  470. package/dist/components/textarea.d.ts +15 -0
  471. package/dist/components/textarea.js +125 -0
  472. package/dist/components/textarea.js.map +1 -0
  473. package/dist/components/theme.cjs +122 -0
  474. package/dist/components/theme.cjs.map +1 -0
  475. package/dist/components/theme.d.cts +36 -0
  476. package/dist/components/theme.d.ts +36 -0
  477. package/dist/components/theme.js +118 -0
  478. package/dist/components/theme.js.map +1 -0
  479. package/dist/components/thumbnail.cjs +54 -0
  480. package/dist/components/thumbnail.cjs.map +1 -0
  481. package/dist/components/thumbnail.d.cts +33 -0
  482. package/dist/components/thumbnail.d.ts +33 -0
  483. package/dist/components/thumbnail.js +51 -0
  484. package/dist/components/thumbnail.js.map +1 -0
  485. package/dist/components/time-picker.cjs +105 -0
  486. package/dist/components/time-picker.cjs.map +1 -0
  487. package/dist/components/time-picker.d.cts +43 -0
  488. package/dist/components/time-picker.d.ts +43 -0
  489. package/dist/components/time-picker.js +101 -0
  490. package/dist/components/time-picker.js.map +1 -0
  491. package/dist/components/toast.cjs +192 -0
  492. package/dist/components/toast.cjs.map +1 -0
  493. package/dist/components/toast.d.cts +59 -0
  494. package/dist/components/toast.d.ts +59 -0
  495. package/dist/components/toast.js +188 -0
  496. package/dist/components/toast.js.map +1 -0
  497. package/dist/components/tooltip.cjs +85 -0
  498. package/dist/components/tooltip.cjs.map +1 -0
  499. package/dist/components/tooltip.d.cts +48 -0
  500. package/dist/components/tooltip.d.ts +48 -0
  501. package/dist/components/tooltip.js +77 -0
  502. package/dist/components/tooltip.js.map +1 -0
  503. package/dist/components/typography.cjs +51 -0
  504. package/dist/components/typography.cjs.map +1 -0
  505. package/dist/components/typography.d.cts +30 -0
  506. package/dist/components/typography.d.ts +30 -0
  507. package/dist/components/typography.js +45 -0
  508. package/dist/components/typography.js.map +1 -0
  509. package/dist/generate-radix-colors-Bw-RYaV4.d.cts +33 -0
  510. package/dist/generate-radix-colors-Bw-RYaV4.d.ts +33 -0
  511. package/dist/hooks/use-chart-zoom.cjs +236 -0
  512. package/dist/hooks/use-chart-zoom.cjs.map +1 -0
  513. package/dist/hooks/use-chart-zoom.d.cts +53 -0
  514. package/dist/hooks/use-chart-zoom.d.ts +53 -0
  515. package/dist/hooks/use-chart-zoom.js +234 -0
  516. package/dist/hooks/use-chart-zoom.js.map +1 -0
  517. package/dist/hooks/use-container-width.cjs +21 -0
  518. package/dist/hooks/use-container-width.cjs.map +1 -0
  519. package/dist/hooks/use-container-width.d.cts +7 -0
  520. package/dist/hooks/use-container-width.d.ts +7 -0
  521. package/dist/hooks/use-container-width.js +20 -0
  522. package/dist/hooks/use-container-width.js.map +1 -0
  523. package/dist/hooks/use-reduced-motion.cjs +21 -0
  524. package/dist/hooks/use-reduced-motion.cjs.map +1 -0
  525. package/dist/hooks/use-reduced-motion.d.cts +7 -0
  526. package/dist/hooks/use-reduced-motion.d.ts +7 -0
  527. package/dist/hooks/use-reduced-motion.js +20 -0
  528. package/dist/hooks/use-reduced-motion.js.map +1 -0
  529. package/dist/icons/index.cjs +7 -0
  530. package/dist/icons/index.d.cts +4 -0
  531. package/dist/icons/index.d.ts +4 -0
  532. package/dist/icons/index.js +3 -0
  533. package/dist/icons/material-symbol.cjs +104 -0
  534. package/dist/icons/material-symbol.cjs.map +1 -0
  535. package/dist/icons/material-symbol.d.cts +21 -0
  536. package/dist/icons/material-symbol.d.ts +21 -0
  537. package/dist/icons/material-symbol.js +100 -0
  538. package/dist/icons/material-symbol.js.map +1 -0
  539. package/dist/lib/accent-colors.cjs +14 -0
  540. package/dist/lib/accent-colors.cjs.map +1 -0
  541. package/dist/lib/accent-colors.d.cts +8 -0
  542. package/dist/lib/accent-colors.d.ts +8 -0
  543. package/dist/lib/accent-colors.js +13 -0
  544. package/dist/lib/accent-colors.js.map +1 -0
  545. package/dist/lib/accent-theme.cjs +130 -0
  546. package/dist/lib/accent-theme.cjs.map +1 -0
  547. package/dist/lib/accent-theme.d.cts +35 -0
  548. package/dist/lib/accent-theme.d.ts +35 -0
  549. package/dist/lib/accent-theme.js +122 -0
  550. package/dist/lib/accent-theme.js.map +1 -0
  551. package/dist/lib/generate-radix-colors.cjs +364 -0
  552. package/dist/lib/generate-radix-colors.cjs.map +1 -0
  553. package/dist/lib/generate-radix-colors.d.cts +4 -0
  554. package/dist/lib/generate-radix-colors.d.ts +4 -0
  555. package/dist/lib/generate-radix-colors.js +357 -0
  556. package/dist/lib/generate-radix-colors.js.map +1 -0
  557. package/dist/lib/input-box-variants.cjs +30 -0
  558. package/dist/lib/input-box-variants.cjs.map +1 -0
  559. package/dist/lib/input-box-variants.d.cts +10 -0
  560. package/dist/lib/input-box-variants.d.ts +10 -0
  561. package/dist/lib/input-box-variants.js +28 -0
  562. package/dist/lib/input-box-variants.js.map +1 -0
  563. package/dist/lib/theme-types.cjs +1 -0
  564. package/dist/lib/theme-types.d.cts +4 -0
  565. package/dist/lib/theme-types.d.ts +4 -0
  566. package/dist/lib/theme-types.js +2 -0
  567. package/dist/lib/tones.cjs +14 -0
  568. package/dist/lib/tones.cjs.map +1 -0
  569. package/dist/lib/tones.d.cts +8 -0
  570. package/dist/lib/tones.d.ts +8 -0
  571. package/dist/lib/tones.js +13 -0
  572. package/dist/lib/tones.js.map +1 -0
  573. package/dist/number-flow-Bch81ixZ.d.cts +14 -0
  574. package/dist/number-flow-Bch81ixZ.d.ts +14 -0
  575. package/dist/styles/index.css +447 -0
  576. package/dist/styles/internal.css +5 -0
  577. package/dist/styles/material-symbol.css +22 -0
  578. package/dist/styles/spark-default.css +980 -0
  579. package/dist/styles/theme.css +623 -0
  580. package/dist/styles/utilities.css +557 -0
  581. package/dist/theme-types-8wjgiNA_.d.cts +29 -0
  582. package/dist/theme-types-8wjgiNA_.d.ts +29 -0
  583. package/dist/utils/build-sankey-nodes.cjs +72 -0
  584. package/dist/utils/build-sankey-nodes.cjs.map +1 -0
  585. package/dist/utils/build-sankey-nodes.d.cts +27 -0
  586. package/dist/utils/build-sankey-nodes.d.ts +27 -0
  587. package/dist/utils/build-sankey-nodes.js +71 -0
  588. package/dist/utils/build-sankey-nodes.js.map +1 -0
  589. package/dist/utils/chars.cjs +18 -0
  590. package/dist/utils/chars.cjs.map +1 -0
  591. package/dist/utils/chars.d.cts +10 -0
  592. package/dist/utils/chars.d.ts +10 -0
  593. package/dist/utils/chars.js +14 -0
  594. package/dist/utils/chars.js.map +1 -0
  595. package/dist/utils/chart-scale.cjs +54 -0
  596. package/dist/utils/chart-scale.cjs.map +1 -0
  597. package/dist/utils/chart-scale.d.cts +29 -0
  598. package/dist/utils/chart-scale.d.ts +29 -0
  599. package/dist/utils/chart-scale.js +51 -0
  600. package/dist/utils/chart-scale.js.map +1 -0
  601. package/dist/utils/chart-time-ticks.cjs +35 -0
  602. package/dist/utils/chart-time-ticks.cjs.map +1 -0
  603. package/dist/utils/chart-time-ticks.d.cts +7 -0
  604. package/dist/utils/chart-time-ticks.d.ts +7 -0
  605. package/dist/utils/chart-time-ticks.js +34 -0
  606. package/dist/utils/chart-time-ticks.js.map +1 -0
  607. package/dist/utils/chart-zoom.cjs +84 -0
  608. package/dist/utils/chart-zoom.cjs.map +1 -0
  609. package/dist/utils/chart-zoom.d.cts +14 -0
  610. package/dist/utils/chart-zoom.d.ts +14 -0
  611. package/dist/utils/chart-zoom.js +77 -0
  612. package/dist/utils/chart-zoom.js.map +1 -0
  613. package/dist/utils/cn.cjs +9 -0
  614. package/dist/utils/cn.d.cts +4 -0
  615. package/dist/utils/cn.d.ts +4 -0
  616. package/dist/utils/cn.js +3 -0
  617. package/dist/utils/date-mask.cjs +45 -0
  618. package/dist/utils/date-mask.cjs.map +1 -0
  619. package/dist/utils/date-mask.d.cts +17 -0
  620. package/dist/utils/date-mask.d.ts +17 -0
  621. package/dist/utils/date-mask.js +41 -0
  622. package/dist/utils/date-mask.js.map +1 -0
  623. package/dist/utils/format.cjs +57 -0
  624. package/dist/utils/format.cjs.map +1 -0
  625. package/dist/utils/format.d.cts +23 -0
  626. package/dist/utils/format.d.ts +23 -0
  627. package/dist/utils/format.js +47 -0
  628. package/dist/utils/format.js.map +1 -0
  629. package/package.json +109 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bar-chart.js","names":[],"sources":["../../src/components/bar-chart.tsx"],"sourcesContent":["import { localPoint } from '@visx/event'\nimport { Group } from '@visx/group'\nimport { scaleBand, scaleLinear, scaleOrdinal } from '@visx/scale'\nimport { BarStack } from '@visx/shape'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useReducedMotion } from '../hooks/use-reduced-motion'\nimport {\n buildYAxisScale,\n formatYAxisTick,\n measureYAxisGutter,\n} from '../utils/chart-scale'\nimport { cn } from '../utils/cn'\nimport { localeNumberFormat } from '../utils/format'\nimport {\n ChartTooltipCard,\n type ChartTooltipRow,\n clampTooltipPosition,\n useMeasuredSize,\n} from './chart'\nimport { SeriesLegend } from './series-legend'\nimport { SectionTitle } from './typography'\n\nconst defaultTotalFormat = localeNumberFormat()\n\nexport type BarChartCategory = string | number\n\nexport interface BarChartSeries<TDatum> {\n key: string\n label: string\n color: string\n hoverFill?: string\n getValue: (datum: TDatum) => number\n}\n\nexport interface BarChartLineSeries<TDatum> {\n key: string\n label: string\n color: string\n /** `null` gaps break the line (e.g. hours without a reading). */\n getValue: (datum: TDatum) => number | null\n /** Own y-domain for this line (e.g. `[0, 100]` for a percentage). Defaults to the bar scale. */\n domain?: [number, number]\n /** Start hidden; the user can enable the line from the legend. */\n hiddenByDefault?: boolean\n /** Formats this line's value in the hover tooltip. Defaults to `formatValue`. */\n formatValue?: (value: number) => string\n strokeDasharray?: string\n}\n\nexport interface BarChartProps<TDatum> {\n data: TDatum[]\n series: BarChartSeries<TDatum>[]\n /** Line overlays drawn on top of the bars, toggleable from the legend. */\n lines?: BarChartLineSeries<TDatum>[]\n getCategory: (datum: TDatum) => BarChartCategory\n /** Full ordered set of categories on the x-axis. Defaults to `data.map(getCategory)`. */\n categories?: BarChartCategory[]\n /** Subset of categories that should render an x-axis label. Defaults to every category. */\n categoryTicks?: BarChartCategory[]\n formatCategory?: (category: BarChartCategory) => string\n /** Formats the hovered category in the tooltip header. Defaults to `formatCategory`. */\n formatTooltipCategory?: (category: BarChartCategory) => string\n highlightedCategory?: BarChartCategory\n showHighlightLine?: boolean\n /**\n * Horizontal reference line drawn across the plot at a given y-value.\n * Useful for thresholds (e.g. price ceiling).\n */\n referenceLine?: { value: number; label?: string; color?: string }\n title?: string\n yAxisUnit?: string\n /** Overrides the y-axis tick formatter. Defaults to the shared compact formatter. */\n formatYTick?: (value: number) => string\n /** Fixes the y-axis gutter width (px). Defaults to auto-measuring the widest tick label. */\n yAxisWidth?: number\n yAxisRightUnit?: string\n /** Overrides the right y-axis tick formatter. Defaults to the shared compact formatter. */\n formatYTickRight?: (value: number) => string\n /** Fixes the right y-axis gutter width (px). Defaults to auto-measuring the widest tick label. */\n yAxisRightWidth?: number\n height?: number\n /**\n * Override how the total value (sum of focused or all categories) is\n * rendered. `animated` is false while a bar is focused (hover), so an\n * animated total can snap between hovered buckets instead of re-firing a\n * tween on every bar the pointer crosses.\n */\n renderTotal?: (value: number, animated: boolean) => React.ReactNode\n /** Format function used when `renderTotal` is not provided. */\n formatTotal?: (value: number) => string\n /** Formats per-series values in the hover tooltip. Defaults to `formatTotal`. */\n formatValue?: (value: number) => string\n className?: string\n}\n\ninterface StackDatum {\n __category: BarChartCategory\n __values: Record<string, number>\n}\n\ninterface BarStackLayerProps<TDatum> {\n stackData: StackDatum[]\n series: BarChartSeries<TDatum>[]\n seriesByKey: Map<string, BarChartSeries<TDatum>>\n xScale: ReturnType<typeof scaleBand<BarChartCategory>>\n yScale: ReturnType<typeof scaleLinear<number>>\n colorScale: ReturnType<typeof scaleOrdinal<string, string>>\n}\n\ninterface CategoryTicksProps {\n ticks: BarChartCategory[]\n xScale: ReturnType<typeof scaleBand<BarChartCategory>>\n height: number\n formatCategory: (category: BarChartCategory) => string\n}\n\nconst PADDING_TOP = 20\nconst PADDING_BOTTOM = 28\nconst HOVER_FADE_MS = 200\nconst FOCUS_TRANSITION_MS = 180\nconst DEFAULT_HEIGHT = 220\nconst BAR_RADIUS = 2\n\nfunction buildBarPath(\n x: number,\n y: number,\n width: number,\n height: number,\n radius: number,\n roundTop: boolean,\n roundBottom: boolean,\n) {\n const r = Math.max(0, Math.min(radius, width / 2, height / 2))\n\n if (r === 0 || (!roundTop && !roundBottom)) {\n return `M ${x} ${y} H ${x + width} V ${y + height} H ${x} Z`\n }\n\n const tl = roundTop ? r : 0\n const tr = roundTop ? r : 0\n const br = roundBottom ? r : 0\n const bl = roundBottom ? r : 0\n\n return [\n `M ${x + tl} ${y}`,\n `H ${x + width - tr}`,\n tr > 0\n ? `Q ${x + width} ${y} ${x + width} ${y + tr}`\n : `L ${x + width} ${y}`,\n `V ${y + height - br}`,\n br > 0\n ? `Q ${x + width} ${y + height} ${x + width - br} ${y + height}`\n : `L ${x + width} ${y + height}`,\n `H ${x + bl}`,\n bl > 0\n ? `Q ${x} ${y + height} ${x} ${y + height - bl}`\n : `L ${x} ${y + height}`,\n `V ${y + tl}`,\n tl > 0 ? `Q ${x} ${y} ${x + tl} ${y}` : `L ${x} ${y}`,\n 'Z',\n ].join(' ')\n}\n\nfunction BarStackLayer<TDatum>({\n stackData,\n series,\n seriesByKey,\n xScale,\n yScale,\n colorScale,\n}: BarStackLayerProps<TDatum>) {\n return (\n <BarStack<StackDatum, string>\n data={stackData}\n keys={series.map((entry) => entry.key)}\n x={(record) => record.__category}\n value={(record, key) => record.__values[key] ?? 0}\n xScale={xScale}\n yScale={yScale}\n color={colorScale}\n offset=\"diverging\"\n >\n {(barStacks) =>\n barStacks.map((barStack) =>\n barStack.bars.map((bar) => {\n const values = bar.bar.data.__values\n const segmentValue = values[barStack.key] ?? 0\n\n if (segmentValue === 0) {\n return null\n }\n\n const seriesEntry = seriesByKey.get(barStack.key)\n const strokeColor = seriesEntry?.color ?? bar.color\n const fillColor = strokeColor\n\n // Positive segments stack up from the baseline, negatives down.\n // Round only the outermost corner of each side of the axis.\n const positiveKeys = series\n .map((entry) => entry.key)\n .filter((key) => (values[key] ?? 0) > 0)\n const negativeKeys = series\n .map((entry) => entry.key)\n .filter((key) => (values[key] ?? 0) < 0)\n const roundTop =\n segmentValue > 0 &&\n positiveKeys[positiveKeys.length - 1] === barStack.key\n const roundBottom =\n segmentValue > 0\n ? positiveKeys[0] === barStack.key\n : negativeKeys[negativeKeys.length - 1] === barStack.key\n\n // visx returns a signed height for below-baseline bars; normalize\n // to a top-left origin with a positive height for the path.\n const top = bar.height < 0 ? bar.y + bar.height : bar.y\n const barHeight = Math.abs(bar.height)\n\n return (\n <path\n key={`bar-${barStack.index}-${bar.index}`}\n d={buildBarPath(\n bar.x,\n top,\n bar.width,\n Math.max(0, barHeight),\n BAR_RADIUS,\n roundTop,\n roundBottom,\n )}\n fill={fillColor}\n stroke={strokeColor}\n strokeWidth={1}\n style={{ transition: 'fill 180ms ease' }}\n />\n )\n }),\n )\n }\n </BarStack>\n )\n}\n\ninterface FocusBorderProps<TDatum> {\n category: BarChartCategory\n visible: boolean\n stackData: StackDatum[]\n series: BarChartSeries<TDatum>[]\n xScale: ReturnType<typeof scaleBand<BarChartCategory>>\n yScale: ReturnType<typeof scaleLinear<number>>\n}\n\nfunction FocusBorder<TDatum>({\n category,\n visible,\n stackData,\n series,\n xScale,\n yScale,\n}: FocusBorderProps<TDatum>) {\n const reducedMotion = useReducedMotion()\n const x = xScale(category)\n const datum = stackData.find((entry) => entry.__category === category)\n\n if (x === undefined || !datum) {\n return null\n }\n\n const hasAnyValue = series.some(\n (entry) => (datum.__values[entry.key] ?? 0) !== 0,\n )\n\n if (!hasAnyValue) {\n return null\n }\n\n const topY = PADDING_TOP\n // Extend past the baseline to cover any below-axis (feed-in) segment.\n const negativeSum = series.reduce(\n (sum, entry) => sum + Math.min(0, datum.__values[entry.key] ?? 0),\n 0,\n )\n const bottomY = yScale(negativeSum)\n const borderPaddingX = 4\n const borderPaddingY = 3\n const borderXRaw = x - borderPaddingX\n const borderY = topY - borderPaddingY\n const borderWidthRaw = xScale.bandwidth() + borderPaddingX * 2\n const [rangeStart, rangeEnd] = xScale.range()\n const minX = Math.min(rangeStart, rangeEnd)\n const maxX = Math.max(rangeStart, rangeEnd)\n const borderX = Math.max(minX, borderXRaw)\n const borderRight = Math.min(maxX, borderXRaw + borderWidthRaw)\n const borderWidth = Math.max(0, borderRight - borderX)\n const borderHeight = Math.max(1, bottomY - topY + borderPaddingY * 2)\n\n if (borderWidth <= 0) {\n return null\n }\n\n return (\n <rect\n x={borderX}\n y={borderY}\n width={borderWidth}\n height={borderHeight}\n rx={6}\n fill=\"var(--spark-a2)\"\n stroke=\"var(--spark-a9)\"\n strokeWidth={2}\n pointerEvents=\"none\"\n style={{\n opacity: visible ? 1 : 0,\n transition: reducedMotion\n ? `opacity ${FOCUS_TRANSITION_MS}ms ease`\n : `x ${FOCUS_TRANSITION_MS}ms ease, y ${FOCUS_TRANSITION_MS}ms ease, width ${FOCUS_TRANSITION_MS}ms ease, height ${FOCUS_TRANSITION_MS}ms ease, opacity ${FOCUS_TRANSITION_MS}ms ease`,\n }}\n />\n )\n}\n\ninterface InteractionLayerProps {\n xDomain: BarChartCategory[]\n activeCategories: Set<BarChartCategory>\n xScale: ReturnType<typeof scaleBand<BarChartCategory>>\n height: number\n onHoverChange: (category: BarChartCategory | null) => void\n}\n\nfunction InteractionLayer({\n xDomain,\n activeCategories,\n xScale,\n height,\n onHoverChange,\n}: InteractionLayerProps) {\n const bandwidth = xScale.bandwidth()\n const [rangeStart, rangeEnd] = xScale.range()\n const minX = Math.min(rangeStart, rangeEnd)\n const maxX = Math.max(rangeStart, rangeEnd)\n\n // A single overlay that maps the pointer to the nearest category with data,\n // so there are no dead zones between/around bars to break the hover.\n const handleMove = (\n event: React.MouseEvent<SVGRectElement> | React.TouchEvent<SVGRectElement>,\n ) => {\n const point = localPoint(event)\n if (!point) return\n\n let nearest: BarChartCategory | null = null\n let best = Infinity\n for (const category of xDomain) {\n if (!activeCategories.has(category)) continue\n const x = xScale(category)\n if (x === undefined) continue\n const distance = Math.abs(x + bandwidth / 2 - point.x)\n if (distance < best) {\n best = distance\n nearest = category\n }\n }\n\n if (nearest !== null) onHoverChange(nearest)\n }\n\n return (\n <rect\n x={minX}\n y={PADDING_TOP}\n width={Math.max(0, maxX - minX)}\n height={height - PADDING_TOP - PADDING_BOTTOM}\n fill=\"transparent\"\n onMouseMove={handleMove}\n onMouseLeave={() => onHoverChange(null)}\n onTouchMove={handleMove}\n onTouchEnd={() => onHoverChange(null)}\n />\n )\n}\n\nfunction CategoryTicks({\n ticks,\n xScale,\n height,\n formatCategory,\n}: CategoryTicksProps) {\n return (\n <>\n {ticks.map((category) => {\n const x = xScale(category)\n\n if (x === undefined) {\n return null\n }\n\n return (\n <text\n key={`tick-${String(category)}`}\n x={x + xScale.bandwidth() / 2}\n y={height - PADDING_BOTTOM + 16}\n textAnchor=\"middle\"\n fill=\"var(--neutral-a11)\"\n fontSize={10}\n >\n {formatCategory(category)}\n </text>\n )\n })}\n </>\n )\n}\n\nfunction defaultFormatTotal(value: number) {\n return defaultTotalFormat.format(value)\n}\n\nexport function BarChart<TDatum>({\n data,\n series,\n lines,\n getCategory,\n categories,\n categoryTicks,\n formatCategory = (category) => String(category),\n formatTooltipCategory = formatCategory,\n highlightedCategory,\n showHighlightLine = false,\n referenceLine,\n title,\n yAxisUnit,\n formatYTick = formatYAxisTick,\n yAxisWidth,\n yAxisRightUnit,\n formatYTickRight = formatYAxisTick,\n yAxisRightWidth,\n height = DEFAULT_HEIGHT,\n renderTotal,\n formatTotal = defaultFormatTotal,\n formatValue,\n className,\n}: BarChartProps<TDatum>): React.ReactElement {\n const containerRef = useRef<HTMLDivElement>(null)\n const reducedMotion = useReducedMotion()\n const [width, setWidth] = useState(0)\n const [hoveredCategory, setHoveredCategory] =\n useState<BarChartCategory | null>(null)\n const [trailingHoverLabel, setTrailingHoverLabel] = useState<string | null>(\n null,\n )\n const [hiddenSeries, setHiddenSeries] = useState<ReadonlySet<string>>(\n () =>\n new Set(\n (lines ?? [])\n .filter((line) => line.hiddenByDefault)\n .map((line) => line.key),\n ),\n )\n\n const toggleSeries = useCallback((id: string) => {\n setHiddenSeries((prev) => {\n const next = new Set(prev)\n if (next.has(id)) {\n next.delete(id)\n } else {\n next.add(id)\n }\n return next\n })\n }, [])\n\n useEffect(() => {\n const element = containerRef.current\n\n if (!element) {\n return\n }\n\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0]\n\n if (!entry) {\n return\n }\n\n setWidth(entry.contentRect.width)\n })\n\n resizeObserver.observe(element)\n\n return () => {\n resizeObserver.disconnect()\n }\n }, [])\n\n const seriesByKey = useMemo(() => {\n const map = new Map<string, BarChartSeries<TDatum>>()\n\n for (const entry of series) {\n map.set(entry.key, entry)\n }\n\n return map\n }, [series])\n\n const stackData = useMemo<StackDatum[]>(\n () =>\n data.map((datum) => {\n const values: Record<string, number> = {}\n\n for (const entry of series) {\n values[entry.key] = hiddenSeries.has(entry.key)\n ? 0\n : entry.getValue(datum)\n }\n\n return { __category: getCategory(datum), __values: values }\n }),\n [data, getCategory, series, hiddenSeries],\n )\n\n const yMax = useMemo(\n () =>\n Math.max(\n 1,\n referenceLine?.value ?? 0,\n ...stackData.map((record) =>\n series.reduce(\n (sum, entry) => sum + Math.max(0, record.__values[entry.key] ?? 0),\n 0,\n ),\n ),\n ),\n [referenceLine, series, stackData],\n )\n\n // Most negative stack sum across buckets (0 when nothing dips below the axis).\n const yMin = useMemo(\n () =>\n Math.min(\n 0,\n ...stackData.map((record) =>\n series.reduce(\n (sum, entry) => sum + Math.min(0, record.__values[entry.key] ?? 0),\n 0,\n ),\n ),\n ),\n [series, stackData],\n )\n\n const xDomain = useMemo(\n () => categories ?? stackData.map((record) => record.__category),\n [categories, stackData],\n )\n\n const yTicks = useMemo(() => buildYAxisScale(yMin, yMax).ticks, [yMin, yMax])\n const gutter = useMemo(\n () => yAxisWidth ?? measureYAxisGutter(yTicks, formatYTick),\n [yTicks, formatYTick, yAxisWidth],\n )\n\n const visibleDomainLines = useMemo(\n () =>\n (lines ?? []).filter(\n (line) => line.domain !== undefined && !hiddenSeries.has(line.key),\n ),\n [lines, hiddenSeries],\n )\n\n const rightAxisDomain = visibleDomainLines[0]?.domain\n const rightAxisScale = useMemo(\n () =>\n rightAxisDomain === undefined\n ? null\n : buildYAxisScale(rightAxisDomain[0], rightAxisDomain[1]),\n [rightAxisDomain],\n )\n const rightTicks = rightAxisScale?.ticks ?? []\n const rightGutter = useMemo(\n () =>\n rightAxisScale === null\n ? 0\n : (yAxisRightWidth ??\n measureYAxisGutter(rightTicks, formatYTickRight, 0)),\n [rightAxisScale, rightTicks, formatYTickRight, yAxisRightWidth],\n )\n const plotRight = Math.max(gutter, width - rightGutter)\n\n const xScale = useMemo(\n () =>\n scaleBand<BarChartCategory>({\n domain: xDomain,\n range: [gutter, plotRight],\n padding: 0.32,\n }),\n [xDomain, gutter, plotRight],\n )\n\n const yScale = useMemo(\n () =>\n scaleLinear<number>({\n domain: [yMin, yMax],\n range: [height - PADDING_BOTTOM, PADDING_TOP],\n }),\n [height, yMax, yMin],\n )\n\n const rightYScale = useMemo(\n () =>\n rightAxisDomain === undefined\n ? null\n : scaleLinear<number>({\n domain: rightAxisDomain,\n range: [height - PADDING_BOTTOM, PADDING_TOP],\n }),\n [height, rightAxisDomain],\n )\n\n const colorScale = useMemo(\n () =>\n scaleOrdinal<string, string>({\n domain: series.map((entry) => entry.key),\n range: series.map((entry) => entry.color),\n }),\n [series],\n )\n\n const linePaths = useMemo(() => {\n if (!lines || width === 0) {\n return []\n }\n\n return lines\n .filter((line) => !hiddenSeries.has(line.key))\n .map((line) => {\n const lineScale = line.domain\n ? scaleLinear<number>({\n domain: line.domain,\n range: [height - PADDING_BOTTOM, PADDING_TOP],\n })\n : yScale\n const segments: string[] = []\n let previous: { x: number; y: number } | null = null\n\n for (const datum of data) {\n const x = xScale(getCategory(datum))\n const value = line.getValue(datum)\n\n if (x === undefined || value === null || !Number.isFinite(value)) {\n previous = null\n continue\n }\n\n const point = {\n x: x + xScale.bandwidth() / 2,\n y: lineScale(value),\n }\n segments.push(\n previous === null\n ? `M ${point.x} ${point.y}`\n : `L ${point.x} ${point.y}`,\n )\n previous = point\n }\n\n return {\n key: line.key,\n d: segments.join(' '),\n color: line.color,\n strokeDasharray: line.strokeDasharray ?? '5 4',\n }\n })\n .filter((path) => path.d !== '')\n }, [lines, hiddenSeries, data, getCategory, xScale, yScale, height, width])\n\n const stackCategorySet = useMemo(\n () => new Set(stackData.map((record) => record.__category)),\n [stackData],\n )\n\n const lastFocusCategoryRef = useRef<BarChartCategory | null>(null)\n if (hoveredCategory !== null) {\n lastFocusCategoryRef.current = hoveredCategory\n }\n const focusCategory = lastFocusCategoryRef.current\n\n const focused = useMemo(\n () =>\n hoveredCategory === null\n ? null\n : (stackData.find((record) => record.__category === hoveredCategory) ??\n null),\n [hoveredCategory, stackData],\n )\n\n // Below-baseline segments (feed-in) are context, not part of the headline\n // sum, so the total counts only the positive stack (energy consumed).\n const totalValue = useMemo(() => {\n if (focused) {\n return series.reduce(\n (sum, entry) => sum + Math.max(0, focused.__values[entry.key] ?? 0),\n 0,\n )\n }\n\n return stackData.reduce(\n (sum, record) =>\n sum +\n series.reduce(\n (s, entry) => s + Math.max(0, record.__values[entry.key] ?? 0),\n 0,\n ),\n 0,\n )\n }, [focused, series, stackData])\n\n const hoverLabel = focused ? formatTooltipCategory(focused.__category) : null\n\n useEffect(() => {\n if (hoverLabel) {\n setTrailingHoverLabel(hoverLabel)\n return\n }\n\n const timeoutId = window.setTimeout(() => {\n setTrailingHoverLabel(null)\n }, HOVER_FADE_MS)\n\n return () => {\n window.clearTimeout(timeoutId)\n }\n }, [hoverLabel])\n\n const ticks = categoryTicks ?? xDomain\n const highlightX = useMemo(() => {\n if (!showHighlightLine || highlightedCategory === undefined) {\n return null\n }\n\n const x = xScale(highlightedCategory)\n\n if (x === undefined) {\n return null\n }\n\n return x + xScale.bandwidth() / 2\n }, [highlightedCategory, showHighlightLine, xScale])\n\n const focusedDatum = useMemo(\n () =>\n hoveredCategory === null\n ? null\n : (data.find((datum) => getCategory(datum) === hoveredCategory) ??\n null),\n [hoveredCategory, data, getCategory],\n )\n\n // The bars don't depend on hover state, so memoize the layer: hovering\n // across bars must not re-render (and re-stack) every bar path each move.\n const barStackLayer = useMemo(\n () => (\n <BarStackLayer\n stackData={stackData}\n series={series}\n seriesByKey={seriesByKey}\n xScale={xScale}\n yScale={yScale}\n colorScale={colorScale}\n />\n ),\n [stackData, series, seriesByKey, xScale, yScale, colorScale],\n )\n\n const fmtTooltipValue = formatValue ?? formatTotal\n const tooltipRows: ChartTooltipRow[] = focused\n ? [\n ...series\n .filter((entry) => (focused.__values[entry.key] ?? 0) !== 0)\n .map((entry) => ({\n key: entry.key,\n label: entry.label,\n color: entry.color,\n value: fmtTooltipValue(Math.abs(focused.__values[entry.key] ?? 0)),\n })),\n ...(lines ?? [])\n .filter((line) => !hiddenSeries.has(line.key))\n .flatMap((line) => {\n const value =\n focusedDatum === null ? null : line.getValue(focusedDatum)\n\n if (value === null || !Number.isFinite(value)) {\n return []\n }\n\n return [\n {\n key: line.key,\n label: line.label,\n color: line.color,\n value: (line.formatValue ?? fmtTooltipValue)(value),\n marker: 'dashed-line' as const,\n },\n ]\n }),\n ]\n : []\n const tooltipActive = tooltipRows.length > 0\n const anchorX =\n focusCategory !== null\n ? (xScale(focusCategory) ?? 0) + xScale.bandwidth() / 2\n : 0\n const anchorY = yScale(totalValue)\n const [tooltipRef, tooltipSize] = useMeasuredSize<HTMLDivElement>()\n const tooltipPos = clampTooltipPosition({\n anchorX,\n anchorY,\n width,\n height,\n tipWidth: tooltipSize.width,\n tipHeight: tooltipSize.height,\n })\n\n return (\n <div\n data-slot=\"bar-chart\"\n className={cn('flex w-full flex-col', className)}\n >\n <div className=\"flex items-baseline justify-between\">\n {title && <SectionTitle>{title}</SectionTitle>}\n <span className=\"tabular-nums\">\n {renderTotal ? (\n renderTotal(totalValue, focused === null)\n ) : (\n <span className=\"text-base font-bold text-gray tabular-nums\">\n {formatTotal(totalValue)}\n </span>\n )}\n </span>\n </div>\n\n <div className=\"flex min-h-5 items-baseline justify-between gap-4\">\n <SeriesLegend\n items={[\n ...series.map((entry) => ({\n id: entry.key,\n label: entry.label,\n color: entry.color,\n })),\n ...(lines ?? []).map((line) => ({\n id: line.key,\n label: line.label,\n color: line.color,\n marker: 'dashed-line' as const,\n })),\n ]}\n hiddenIds={hiddenSeries}\n onToggle={toggleSeries}\n className=\"gap-y-1\"\n />\n <span\n className={cn(\n 'text-xs text-gray-light transition-opacity duration-200',\n hoverLabel ? 'opacity-100' : 'opacity-0',\n )}\n >\n {trailingHoverLabel ?? ' '}\n </span>\n </div>\n\n <div\n ref={containerRef}\n className=\"relative mt-2 w-full\"\n style={{ height }}\n >\n <div\n ref={tooltipRef}\n className=\"pointer-events-none absolute z-10\"\n style={{\n left: tooltipPos.left,\n top: tooltipPos.top,\n opacity: tooltipActive ? 1 : 0,\n transition: reducedMotion\n ? 'opacity 140ms ease-out'\n : 'left 140ms ease-out, top 140ms ease-out, opacity 140ms ease-out',\n }}\n >\n {focusCategory !== null && (\n <ChartTooltipCard\n label={formatTooltipCategory(focusCategory)}\n rows={tooltipRows}\n />\n )}\n </div>\n {width > 0 && (\n <svg width={width} height={height}>\n <line\n x1={gutter}\n x2={gutter}\n y1={PADDING_TOP}\n y2={height - PADDING_BOTTOM}\n stroke=\"var(--neutral-a6)\"\n strokeWidth={1}\n />\n\n {yTicks.map((tick, index) => {\n const y = yScale(tick)\n const hideTickLabel =\n yAxisUnit !== undefined && index === yTicks.length - 1\n\n return (\n <g key={`y-tick-${tick}`}>\n {!hideTickLabel && (\n <line\n x1={gutter - 4}\n x2={gutter}\n y1={y}\n y2={y}\n stroke=\"var(--neutral-a8)\"\n strokeWidth={1}\n />\n )}\n {!hideTickLabel && (\n <text\n x={gutter - 7}\n y={y + 3}\n textAnchor=\"end\"\n fill=\"var(--neutral-a11)\"\n fontSize={10}\n >\n {formatYTick(tick)}\n </text>\n )}\n </g>\n )\n })}\n\n {yAxisUnit && (\n <text\n x={0}\n y={PADDING_TOP - 6}\n textAnchor=\"start\"\n fill=\"var(--neutral-a11)\"\n fontSize={10}\n fontWeight={600}\n >\n {yAxisUnit}\n </text>\n )}\n\n {highlightX !== null && (\n <line\n x1={highlightX}\n x2={highlightX}\n y1={PADDING_TOP}\n y2={height - PADDING_BOTTOM}\n stroke=\"var(--spark-a9)\"\n strokeWidth={1.5}\n strokeDasharray=\"5 4\"\n pointerEvents=\"none\"\n />\n )}\n\n <line\n x1={gutter}\n x2={plotRight}\n y1={yScale(0)}\n y2={yScale(0)}\n stroke=\"var(--neutral-a5)\"\n strokeWidth={1}\n />\n\n {rightYScale !== null && (\n <>\n <line\n x1={plotRight}\n x2={plotRight}\n y1={PADDING_TOP}\n y2={height - PADDING_BOTTOM}\n stroke=\"var(--neutral-a6)\"\n strokeWidth={1}\n />\n\n {rightTicks.map((tick, index) => {\n const y = rightYScale(tick)\n const hideTickLabel =\n yAxisRightUnit !== undefined &&\n index === rightTicks.length - 1\n\n return (\n <g key={`y-tick-right-${tick}`}>\n {!hideTickLabel && (\n <line\n x1={plotRight}\n x2={plotRight + 4}\n y1={y}\n y2={y}\n stroke=\"var(--neutral-a8)\"\n strokeWidth={1}\n />\n )}\n {!hideTickLabel && (\n <text\n x={plotRight + 7}\n y={y + 3}\n textAnchor=\"start\"\n fill=\"var(--neutral-a11)\"\n fontSize={10}\n >\n {formatYTickRight(tick)}\n </text>\n )}\n </g>\n )\n })}\n\n {yAxisRightUnit && (\n <text\n x={width}\n y={PADDING_TOP - 6}\n textAnchor=\"end\"\n fill=\"var(--neutral-a11)\"\n fontSize={10}\n fontWeight={600}\n >\n {yAxisRightUnit}\n </text>\n )}\n </>\n )}\n\n <Group>\n {focusCategory !== null && (\n <FocusBorder\n category={focusCategory}\n visible={hoveredCategory !== null}\n stackData={stackData}\n series={series}\n xScale={xScale}\n yScale={yScale}\n />\n )}\n {barStackLayer}\n\n {referenceLine && (\n <line\n x1={gutter}\n x2={width}\n y1={yScale(referenceLine.value)}\n y2={yScale(referenceLine.value)}\n stroke={referenceLine.color ?? 'var(--neutral-a11)'}\n strokeWidth={1.5}\n pointerEvents=\"none\"\n />\n )}\n\n {linePaths.map((path) => (\n <path\n key={`line-${path.key}`}\n d={path.d}\n fill=\"none\"\n stroke={path.color}\n strokeWidth={1.5}\n strokeDasharray={path.strokeDasharray}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n pointerEvents=\"none\"\n />\n ))}\n </Group>\n\n <InteractionLayer\n xDomain={xDomain}\n activeCategories={stackCategorySet}\n xScale={xScale}\n height={height}\n onHoverChange={setHoveredCategory}\n />\n\n <CategoryTicks\n ticks={ticks}\n xScale={xScale}\n height={height}\n formatCategory={formatCategory}\n />\n </svg>\n )}\n </div>\n </div>\n )\n}\n"],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ "use client";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const require_icons_material_symbol = require("../icons/material-symbol.cjs");
4
+ const require_components_badge = require("./badge.cjs");
5
+ const require_components_progress = require("./progress.cjs");
6
+ let react = require("react");
7
+ let react_jsx_runtime = require("react/jsx-runtime");
8
+ let cnfast = require("cnfast");
9
+ //#region src/components/battery-progress-row.tsx
10
+ const BatteryProgressRowContext = (0, react.createContext)(null);
11
+ function useBatteryProgressRowContext() {
12
+ const context = (0, react.useContext)(BatteryProgressRowContext);
13
+ if (!context) throw new Error("BatteryProgressRow.* must be rendered inside <BatteryProgressRow>");
14
+ return context;
15
+ }
16
+ const BatteryProgressRow = ({ className, soc, children, ...rest }) => {
17
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BatteryProgressRowContext.Provider, {
18
+ value: { soc },
19
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
20
+ className: (0, cnfast.cn)("flex items-center gap-3", className),
21
+ ...rest,
22
+ children
23
+ })
24
+ });
25
+ };
26
+ /**
27
+ * Battery icon. Auto-selects its variant from the row's `soc`.
28
+ *
29
+ * @param className - Optional className to apply to the icon to further style it
30
+ * @param icon - The icon to render (defaults to auto-selecting based on the row's `soc`)
31
+ * @param ...rest - Additional props to pass to the span
32
+ * @returns A React component that renders a battery icon
33
+ */
34
+ const BatteryProgressRowIcon = ({ className, icon: overrideIcon, ...rest }) => {
35
+ const { soc } = useBatteryProgressRowContext();
36
+ const clampedSoc = Math.min(Math.max(soc, 0), 100);
37
+ const batteryLevel = Math.min(Math.floor(clampedSoc / (100 / 7)), 6);
38
+ const iconName = clampedSoc === 100 ? "battery_full" : `battery_${batteryLevel}_bar`;
39
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
40
+ className: (0, cnfast.cn)("flex size-10 shrink-0 items-center justify-center rounded-xl bg-base-success-soft text-success", className),
41
+ ...rest,
42
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_material_symbol.MaterialSymbol, {
43
+ className: "text-[18px]",
44
+ name: overrideIcon ?? iconName
45
+ })
46
+ });
47
+ };
48
+ const BatteryProgressRowContent = ({ className, ...rest }) => {
49
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
50
+ className: (0, cnfast.cn)("flex min-w-0 flex-1 flex-col gap-1.5", className),
51
+ ...rest
52
+ });
53
+ };
54
+ const BatteryProgressRowHeader = ({ className, ...rest }) => {
55
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
56
+ className: (0, cnfast.cn)("flex items-center justify-between gap-2", className),
57
+ ...rest
58
+ });
59
+ };
60
+ const toneToBadgeColor = {
61
+ success: "success",
62
+ warning: "warning",
63
+ error: "danger",
64
+ accent: "accent",
65
+ neutral: "neutral"
66
+ };
67
+ const BatteryProgressRowStateBadge = ({ className, children, tone = "neutral", ...rest }) => {
68
+ if (children === null || children === void 0) return null;
69
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_badge.Badge, {
70
+ color: toneToBadgeColor[tone],
71
+ className: (0, cnfast.cn)("w-fit", className),
72
+ ...rest,
73
+ children
74
+ });
75
+ };
76
+ const BatteryProgressRowChargingPower = ({ className, children, ...rest }) => {
77
+ if (children === null || children === void 0) return null;
78
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
79
+ className: (0, cnfast.cn)("ml-auto text-lg leading-tight font-bold text-gray tabular-nums", className),
80
+ ...rest,
81
+ children
82
+ });
83
+ };
84
+ /**
85
+ * Linear progress bar bound to the row's `soc`.
86
+ */
87
+ const BatteryProgressRowProgressBar = ({ className, ...rest }) => {
88
+ const { soc } = useBatteryProgressRowContext();
89
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_progress.Progress, {
90
+ className,
91
+ max: 100,
92
+ value: soc,
93
+ ...rest
94
+ });
95
+ };
96
+ const BatteryProgressRowFooter = ({ className, ...rest }) => {
97
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
98
+ className: (0, cnfast.cn)("flex justify-between text-xs text-gray-light tabular-nums", className),
99
+ ...rest
100
+ });
101
+ };
102
+ const BatteryProgressRowMinSoc = ({ className, children, ...rest }) => {
103
+ if (children === null || children === void 0) return null;
104
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
105
+ className: (0, cnfast.cn)(className),
106
+ ...rest,
107
+ children
108
+ });
109
+ };
110
+ /**
111
+ * Current state-of-charge label, rendered as `{soc}%`. Reads from context.
112
+ */
113
+ const BatteryProgressRowSoc = ({ className, ...rest }) => {
114
+ const { soc } = useBatteryProgressRowContext();
115
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
116
+ className: (0, cnfast.cn)(className),
117
+ ...rest,
118
+ children: `${soc}%`
119
+ });
120
+ };
121
+ //#endregion
122
+ exports.BatteryProgressRow = BatteryProgressRow;
123
+ exports.BatteryProgressRowChargingPower = BatteryProgressRowChargingPower;
124
+ exports.BatteryProgressRowContent = BatteryProgressRowContent;
125
+ exports.BatteryProgressRowFooter = BatteryProgressRowFooter;
126
+ exports.BatteryProgressRowHeader = BatteryProgressRowHeader;
127
+ exports.BatteryProgressRowIcon = BatteryProgressRowIcon;
128
+ exports.BatteryProgressRowMinSoc = BatteryProgressRowMinSoc;
129
+ exports.BatteryProgressRowProgressBar = BatteryProgressRowProgressBar;
130
+ exports.BatteryProgressRowSoc = BatteryProgressRowSoc;
131
+ exports.BatteryProgressRowStateBadge = BatteryProgressRowStateBadge;
132
+
133
+ //# sourceMappingURL=battery-progress-row.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"battery-progress-row.cjs","names":["MaterialSymbol","Badge","Progress"],"sources":["../../src/components/battery-progress-row.tsx"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport {\n MaterialSymbol,\n type MaterialSymbolIconName,\n} from '../icons/material-symbol'\nimport type { Tone } from '../lib/tones'\nimport { cn } from '../utils/cn'\nimport { Badge, type SparkBadgeColor } from './badge'\nimport { Progress } from './progress'\n\ninterface BatteryProgressRowContextValue {\n soc: number\n}\n\nconst BatteryProgressRowContext =\n createContext<BatteryProgressRowContextValue | null>(null)\n\nfunction useBatteryProgressRowContext() {\n const context = useContext(BatteryProgressRowContext)\n if (!context) {\n throw new Error(\n 'BatteryProgressRow.* must be rendered inside <BatteryProgressRow>',\n )\n }\n return context\n}\n\nconst BatteryProgressRow = ({\n className,\n soc,\n children,\n ...rest\n}: React.ComponentProps<'div'> & { soc: number }) => {\n return (\n <BatteryProgressRowContext.Provider value={{ soc }}>\n <div className={cn('flex items-center gap-3', className)} {...rest}>\n {children}\n </div>\n </BatteryProgressRowContext.Provider>\n )\n}\n\n/**\n * Battery icon. Auto-selects its variant from the row's `soc`.\n *\n * @param className - Optional className to apply to the icon to further style it\n * @param icon - The icon to render (defaults to auto-selecting based on the row's `soc`)\n * @param ...rest - Additional props to pass to the span\n * @returns A React component that renders a battery icon\n */\nconst BatteryProgressRowIcon = ({\n className,\n icon: overrideIcon,\n ...rest\n}: React.ComponentProps<'span'> & { icon?: MaterialSymbolIconName }) => {\n const { soc } = useBatteryProgressRowContext()\n const clampedSoc = Math.min(Math.max(soc, 0), 100)\n const batteryLevel = Math.min(Math.floor(clampedSoc / (100 / 7)), 6)\n const iconName: MaterialSymbolIconName =\n clampedSoc === 100\n ? 'battery_full'\n : (`battery_${batteryLevel}_bar` as MaterialSymbolIconName)\n\n return (\n <span\n className={cn(\n 'flex size-10 shrink-0 items-center justify-center rounded-xl bg-base-success-soft text-success',\n className,\n )}\n {...rest}\n >\n <MaterialSymbol className=\"text-[18px]\" name={overrideIcon ?? iconName} />\n </span>\n )\n}\n\nconst BatteryProgressRowContent = ({\n className,\n ...rest\n}: React.ComponentProps<'div'>) => {\n return (\n <div\n className={cn('flex min-w-0 flex-1 flex-col gap-1.5', className)}\n {...rest}\n />\n )\n}\n\nconst BatteryProgressRowHeader = ({\n className,\n ...rest\n}: React.ComponentProps<'div'>) => {\n return (\n <div\n className={cn('flex items-center justify-between gap-2', className)}\n {...rest}\n />\n )\n}\n\nconst toneToBadgeColor: Record<Tone, SparkBadgeColor> = {\n success: 'success',\n warning: 'warning',\n error: 'danger',\n accent: 'accent',\n neutral: 'neutral',\n}\n\nconst BatteryProgressRowStateBadge = ({\n className,\n children,\n tone = 'neutral',\n ...rest\n}: Omit<React.ComponentProps<'span'>, 'color'> & { tone?: Tone }) => {\n if (children === null || children === undefined) return null\n return (\n <Badge\n color={toneToBadgeColor[tone]}\n className={cn('w-fit', className)}\n {...rest}\n >\n {children}\n </Badge>\n )\n}\n\nconst BatteryProgressRowChargingPower = ({\n className,\n children,\n ...rest\n}: React.ComponentProps<'span'>) => {\n if (children === null || children === undefined) return null\n return (\n <span\n className={cn(\n 'ml-auto text-lg leading-tight font-bold text-gray tabular-nums',\n className,\n )}\n {...rest}\n >\n {children}\n </span>\n )\n}\n\n/**\n * Linear progress bar bound to the row's `soc`.\n */\nconst BatteryProgressRowProgressBar = ({\n className,\n ...rest\n}: Omit<React.ComponentProps<typeof Progress>, 'value' | 'max'>) => {\n const { soc } = useBatteryProgressRowContext()\n return <Progress className={className} max={100} value={soc} {...rest} />\n}\n\nconst BatteryProgressRowFooter = ({\n className,\n ...rest\n}: React.ComponentProps<'div'>) => {\n return (\n <div\n className={cn(\n 'flex justify-between text-xs text-gray-light tabular-nums',\n className,\n )}\n {...rest}\n />\n )\n}\n\nconst BatteryProgressRowMinSoc = ({\n className,\n children,\n ...rest\n}: React.ComponentProps<'span'>) => {\n if (children === null || children === undefined) return null\n return (\n <span className={cn(className)} {...rest}>\n {children}\n </span>\n )\n}\n\n/**\n * Current state-of-charge label, rendered as `{soc}%`. Reads from context.\n */\nconst BatteryProgressRowSoc = ({\n className,\n ...rest\n}: React.ComponentProps<'span'>) => {\n const { soc } = useBatteryProgressRowContext()\n return (\n <span className={cn(className)} {...rest}>\n {`${soc}%`}\n </span>\n )\n}\n\nexport {\n BatteryProgressRow,\n BatteryProgressRowIcon,\n BatteryProgressRowContent,\n BatteryProgressRowHeader,\n BatteryProgressRowStateBadge,\n BatteryProgressRowChargingPower,\n BatteryProgressRowProgressBar,\n BatteryProgressRowFooter,\n BatteryProgressRowMinSoc,\n BatteryProgressRowSoc,\n}\n"],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ "use client";
2
+
3
+ import { MaterialSymbolIconName } from "../icons/material-symbol.cjs";
4
+ import { Tone } from "../lib/tones.cjs";
5
+ import { Progress } from "./progress.cjs";
6
+
7
+ //#region src/components/battery-progress-row.d.ts
8
+ declare const BatteryProgressRow: ({
9
+ className,
10
+ soc,
11
+ children,
12
+ ...rest
13
+ }: React.ComponentProps<"div"> & {
14
+ soc: number;
15
+ }) => import("react/jsx-runtime").JSX.Element;
16
+ /**
17
+ * Battery icon. Auto-selects its variant from the row's `soc`.
18
+ *
19
+ * @param className - Optional className to apply to the icon to further style it
20
+ * @param icon - The icon to render (defaults to auto-selecting based on the row's `soc`)
21
+ * @param ...rest - Additional props to pass to the span
22
+ * @returns A React component that renders a battery icon
23
+ */
24
+ declare const BatteryProgressRowIcon: ({
25
+ className,
26
+ icon: overrideIcon,
27
+ ...rest
28
+ }: React.ComponentProps<"span"> & {
29
+ icon?: MaterialSymbolIconName;
30
+ }) => import("react/jsx-runtime").JSX.Element;
31
+ declare const BatteryProgressRowContent: ({
32
+ className,
33
+ ...rest
34
+ }: React.ComponentProps<"div">) => import("react/jsx-runtime").JSX.Element;
35
+ declare const BatteryProgressRowHeader: ({
36
+ className,
37
+ ...rest
38
+ }: React.ComponentProps<"div">) => import("react/jsx-runtime").JSX.Element;
39
+ declare const BatteryProgressRowStateBadge: ({
40
+ className,
41
+ children,
42
+ tone,
43
+ ...rest
44
+ }: Omit<React.ComponentProps<"span">, "color"> & {
45
+ tone?: Tone;
46
+ }) => import("react/jsx-runtime").JSX.Element | null;
47
+ declare const BatteryProgressRowChargingPower: ({
48
+ className,
49
+ children,
50
+ ...rest
51
+ }: React.ComponentProps<"span">) => import("react/jsx-runtime").JSX.Element | null;
52
+ /**
53
+ * Linear progress bar bound to the row's `soc`.
54
+ */
55
+ declare const BatteryProgressRowProgressBar: ({
56
+ className,
57
+ ...rest
58
+ }: Omit<React.ComponentProps<typeof Progress>, "value" | "max">) => import("react/jsx-runtime").JSX.Element;
59
+ declare const BatteryProgressRowFooter: ({
60
+ className,
61
+ ...rest
62
+ }: React.ComponentProps<"div">) => import("react/jsx-runtime").JSX.Element;
63
+ declare const BatteryProgressRowMinSoc: ({
64
+ className,
65
+ children,
66
+ ...rest
67
+ }: React.ComponentProps<"span">) => import("react/jsx-runtime").JSX.Element | null;
68
+ /**
69
+ * Current state-of-charge label, rendered as `{soc}%`. Reads from context.
70
+ */
71
+ declare const BatteryProgressRowSoc: ({
72
+ className,
73
+ ...rest
74
+ }: React.ComponentProps<"span">) => import("react/jsx-runtime").JSX.Element;
75
+ //#endregion
76
+ export { BatteryProgressRow, BatteryProgressRowChargingPower, BatteryProgressRowContent, BatteryProgressRowFooter, BatteryProgressRowHeader, BatteryProgressRowIcon, BatteryProgressRowMinSoc, BatteryProgressRowProgressBar, BatteryProgressRowSoc, BatteryProgressRowStateBadge };
77
+ //# sourceMappingURL=battery-progress-row.d.cts.map
@@ -0,0 +1,77 @@
1
+ "use client";
2
+
3
+ import { MaterialSymbolIconName } from "../icons/material-symbol.js";
4
+ import { Tone } from "../lib/tones.js";
5
+ import { Progress } from "./progress.js";
6
+
7
+ //#region src/components/battery-progress-row.d.ts
8
+ declare const BatteryProgressRow: ({
9
+ className,
10
+ soc,
11
+ children,
12
+ ...rest
13
+ }: React.ComponentProps<"div"> & {
14
+ soc: number;
15
+ }) => import("react/jsx-runtime").JSX.Element;
16
+ /**
17
+ * Battery icon. Auto-selects its variant from the row's `soc`.
18
+ *
19
+ * @param className - Optional className to apply to the icon to further style it
20
+ * @param icon - The icon to render (defaults to auto-selecting based on the row's `soc`)
21
+ * @param ...rest - Additional props to pass to the span
22
+ * @returns A React component that renders a battery icon
23
+ */
24
+ declare const BatteryProgressRowIcon: ({
25
+ className,
26
+ icon: overrideIcon,
27
+ ...rest
28
+ }: React.ComponentProps<"span"> & {
29
+ icon?: MaterialSymbolIconName;
30
+ }) => import("react/jsx-runtime").JSX.Element;
31
+ declare const BatteryProgressRowContent: ({
32
+ className,
33
+ ...rest
34
+ }: React.ComponentProps<"div">) => import("react/jsx-runtime").JSX.Element;
35
+ declare const BatteryProgressRowHeader: ({
36
+ className,
37
+ ...rest
38
+ }: React.ComponentProps<"div">) => import("react/jsx-runtime").JSX.Element;
39
+ declare const BatteryProgressRowStateBadge: ({
40
+ className,
41
+ children,
42
+ tone,
43
+ ...rest
44
+ }: Omit<React.ComponentProps<"span">, "color"> & {
45
+ tone?: Tone;
46
+ }) => import("react/jsx-runtime").JSX.Element | null;
47
+ declare const BatteryProgressRowChargingPower: ({
48
+ className,
49
+ children,
50
+ ...rest
51
+ }: React.ComponentProps<"span">) => import("react/jsx-runtime").JSX.Element | null;
52
+ /**
53
+ * Linear progress bar bound to the row's `soc`.
54
+ */
55
+ declare const BatteryProgressRowProgressBar: ({
56
+ className,
57
+ ...rest
58
+ }: Omit<React.ComponentProps<typeof Progress>, "value" | "max">) => import("react/jsx-runtime").JSX.Element;
59
+ declare const BatteryProgressRowFooter: ({
60
+ className,
61
+ ...rest
62
+ }: React.ComponentProps<"div">) => import("react/jsx-runtime").JSX.Element;
63
+ declare const BatteryProgressRowMinSoc: ({
64
+ className,
65
+ children,
66
+ ...rest
67
+ }: React.ComponentProps<"span">) => import("react/jsx-runtime").JSX.Element | null;
68
+ /**
69
+ * Current state-of-charge label, rendered as `{soc}%`. Reads from context.
70
+ */
71
+ declare const BatteryProgressRowSoc: ({
72
+ className,
73
+ ...rest
74
+ }: React.ComponentProps<"span">) => import("react/jsx-runtime").JSX.Element;
75
+ //#endregion
76
+ export { BatteryProgressRow, BatteryProgressRowChargingPower, BatteryProgressRowContent, BatteryProgressRowFooter, BatteryProgressRowHeader, BatteryProgressRowIcon, BatteryProgressRowMinSoc, BatteryProgressRowProgressBar, BatteryProgressRowSoc, BatteryProgressRowStateBadge };
77
+ //# sourceMappingURL=battery-progress-row.d.ts.map
@@ -0,0 +1,123 @@
1
+ "use client";
2
+ import { cn } from "../utils/cn.js";
3
+ import { MaterialSymbol } from "../icons/material-symbol.js";
4
+ import { Badge } from "./badge.js";
5
+ import { Progress } from "./progress.js";
6
+ import { createContext, useContext } from "react";
7
+ import { jsx } from "react/jsx-runtime";
8
+ //#region src/components/battery-progress-row.tsx
9
+ const BatteryProgressRowContext = createContext(null);
10
+ function useBatteryProgressRowContext() {
11
+ const context = useContext(BatteryProgressRowContext);
12
+ if (!context) throw new Error("BatteryProgressRow.* must be rendered inside <BatteryProgressRow>");
13
+ return context;
14
+ }
15
+ const BatteryProgressRow = ({ className, soc, children, ...rest }) => {
16
+ return /* @__PURE__ */ jsx(BatteryProgressRowContext.Provider, {
17
+ value: { soc },
18
+ children: /* @__PURE__ */ jsx("div", {
19
+ className: cn("flex items-center gap-3", className),
20
+ ...rest,
21
+ children
22
+ })
23
+ });
24
+ };
25
+ /**
26
+ * Battery icon. Auto-selects its variant from the row's `soc`.
27
+ *
28
+ * @param className - Optional className to apply to the icon to further style it
29
+ * @param icon - The icon to render (defaults to auto-selecting based on the row's `soc`)
30
+ * @param ...rest - Additional props to pass to the span
31
+ * @returns A React component that renders a battery icon
32
+ */
33
+ const BatteryProgressRowIcon = ({ className, icon: overrideIcon, ...rest }) => {
34
+ const { soc } = useBatteryProgressRowContext();
35
+ const clampedSoc = Math.min(Math.max(soc, 0), 100);
36
+ const batteryLevel = Math.min(Math.floor(clampedSoc / (100 / 7)), 6);
37
+ const iconName = clampedSoc === 100 ? "battery_full" : `battery_${batteryLevel}_bar`;
38
+ return /* @__PURE__ */ jsx("span", {
39
+ className: cn("flex size-10 shrink-0 items-center justify-center rounded-xl bg-base-success-soft text-success", className),
40
+ ...rest,
41
+ children: /* @__PURE__ */ jsx(MaterialSymbol, {
42
+ className: "text-[18px]",
43
+ name: overrideIcon ?? iconName
44
+ })
45
+ });
46
+ };
47
+ const BatteryProgressRowContent = ({ className, ...rest }) => {
48
+ return /* @__PURE__ */ jsx("div", {
49
+ className: cn("flex min-w-0 flex-1 flex-col gap-1.5", className),
50
+ ...rest
51
+ });
52
+ };
53
+ const BatteryProgressRowHeader = ({ className, ...rest }) => {
54
+ return /* @__PURE__ */ jsx("div", {
55
+ className: cn("flex items-center justify-between gap-2", className),
56
+ ...rest
57
+ });
58
+ };
59
+ const toneToBadgeColor = {
60
+ success: "success",
61
+ warning: "warning",
62
+ error: "danger",
63
+ accent: "accent",
64
+ neutral: "neutral"
65
+ };
66
+ const BatteryProgressRowStateBadge = ({ className, children, tone = "neutral", ...rest }) => {
67
+ if (children === null || children === void 0) return null;
68
+ return /* @__PURE__ */ jsx(Badge, {
69
+ color: toneToBadgeColor[tone],
70
+ className: cn("w-fit", className),
71
+ ...rest,
72
+ children
73
+ });
74
+ };
75
+ const BatteryProgressRowChargingPower = ({ className, children, ...rest }) => {
76
+ if (children === null || children === void 0) return null;
77
+ return /* @__PURE__ */ jsx("span", {
78
+ className: cn("ml-auto text-lg leading-tight font-bold text-gray tabular-nums", className),
79
+ ...rest,
80
+ children
81
+ });
82
+ };
83
+ /**
84
+ * Linear progress bar bound to the row's `soc`.
85
+ */
86
+ const BatteryProgressRowProgressBar = ({ className, ...rest }) => {
87
+ const { soc } = useBatteryProgressRowContext();
88
+ return /* @__PURE__ */ jsx(Progress, {
89
+ className,
90
+ max: 100,
91
+ value: soc,
92
+ ...rest
93
+ });
94
+ };
95
+ const BatteryProgressRowFooter = ({ className, ...rest }) => {
96
+ return /* @__PURE__ */ jsx("div", {
97
+ className: cn("flex justify-between text-xs text-gray-light tabular-nums", className),
98
+ ...rest
99
+ });
100
+ };
101
+ const BatteryProgressRowMinSoc = ({ className, children, ...rest }) => {
102
+ if (children === null || children === void 0) return null;
103
+ return /* @__PURE__ */ jsx("span", {
104
+ className: cn(className),
105
+ ...rest,
106
+ children
107
+ });
108
+ };
109
+ /**
110
+ * Current state-of-charge label, rendered as `{soc}%`. Reads from context.
111
+ */
112
+ const BatteryProgressRowSoc = ({ className, ...rest }) => {
113
+ const { soc } = useBatteryProgressRowContext();
114
+ return /* @__PURE__ */ jsx("span", {
115
+ className: cn(className),
116
+ ...rest,
117
+ children: `${soc}%`
118
+ });
119
+ };
120
+ //#endregion
121
+ export { BatteryProgressRow, BatteryProgressRowChargingPower, BatteryProgressRowContent, BatteryProgressRowFooter, BatteryProgressRowHeader, BatteryProgressRowIcon, BatteryProgressRowMinSoc, BatteryProgressRowProgressBar, BatteryProgressRowSoc, BatteryProgressRowStateBadge };
122
+
123
+ //# sourceMappingURL=battery-progress-row.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"battery-progress-row.js","names":[],"sources":["../../src/components/battery-progress-row.tsx"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport {\n MaterialSymbol,\n type MaterialSymbolIconName,\n} from '../icons/material-symbol'\nimport type { Tone } from '../lib/tones'\nimport { cn } from '../utils/cn'\nimport { Badge, type SparkBadgeColor } from './badge'\nimport { Progress } from './progress'\n\ninterface BatteryProgressRowContextValue {\n soc: number\n}\n\nconst BatteryProgressRowContext =\n createContext<BatteryProgressRowContextValue | null>(null)\n\nfunction useBatteryProgressRowContext() {\n const context = useContext(BatteryProgressRowContext)\n if (!context) {\n throw new Error(\n 'BatteryProgressRow.* must be rendered inside <BatteryProgressRow>',\n )\n }\n return context\n}\n\nconst BatteryProgressRow = ({\n className,\n soc,\n children,\n ...rest\n}: React.ComponentProps<'div'> & { soc: number }) => {\n return (\n <BatteryProgressRowContext.Provider value={{ soc }}>\n <div className={cn('flex items-center gap-3', className)} {...rest}>\n {children}\n </div>\n </BatteryProgressRowContext.Provider>\n )\n}\n\n/**\n * Battery icon. Auto-selects its variant from the row's `soc`.\n *\n * @param className - Optional className to apply to the icon to further style it\n * @param icon - The icon to render (defaults to auto-selecting based on the row's `soc`)\n * @param ...rest - Additional props to pass to the span\n * @returns A React component that renders a battery icon\n */\nconst BatteryProgressRowIcon = ({\n className,\n icon: overrideIcon,\n ...rest\n}: React.ComponentProps<'span'> & { icon?: MaterialSymbolIconName }) => {\n const { soc } = useBatteryProgressRowContext()\n const clampedSoc = Math.min(Math.max(soc, 0), 100)\n const batteryLevel = Math.min(Math.floor(clampedSoc / (100 / 7)), 6)\n const iconName: MaterialSymbolIconName =\n clampedSoc === 100\n ? 'battery_full'\n : (`battery_${batteryLevel}_bar` as MaterialSymbolIconName)\n\n return (\n <span\n className={cn(\n 'flex size-10 shrink-0 items-center justify-center rounded-xl bg-base-success-soft text-success',\n className,\n )}\n {...rest}\n >\n <MaterialSymbol className=\"text-[18px]\" name={overrideIcon ?? iconName} />\n </span>\n )\n}\n\nconst BatteryProgressRowContent = ({\n className,\n ...rest\n}: React.ComponentProps<'div'>) => {\n return (\n <div\n className={cn('flex min-w-0 flex-1 flex-col gap-1.5', className)}\n {...rest}\n />\n )\n}\n\nconst BatteryProgressRowHeader = ({\n className,\n ...rest\n}: React.ComponentProps<'div'>) => {\n return (\n <div\n className={cn('flex items-center justify-between gap-2', className)}\n {...rest}\n />\n )\n}\n\nconst toneToBadgeColor: Record<Tone, SparkBadgeColor> = {\n success: 'success',\n warning: 'warning',\n error: 'danger',\n accent: 'accent',\n neutral: 'neutral',\n}\n\nconst BatteryProgressRowStateBadge = ({\n className,\n children,\n tone = 'neutral',\n ...rest\n}: Omit<React.ComponentProps<'span'>, 'color'> & { tone?: Tone }) => {\n if (children === null || children === undefined) return null\n return (\n <Badge\n color={toneToBadgeColor[tone]}\n className={cn('w-fit', className)}\n {...rest}\n >\n {children}\n </Badge>\n )\n}\n\nconst BatteryProgressRowChargingPower = ({\n className,\n children,\n ...rest\n}: React.ComponentProps<'span'>) => {\n if (children === null || children === undefined) return null\n return (\n <span\n className={cn(\n 'ml-auto text-lg leading-tight font-bold text-gray tabular-nums',\n className,\n )}\n {...rest}\n >\n {children}\n </span>\n )\n}\n\n/**\n * Linear progress bar bound to the row's `soc`.\n */\nconst BatteryProgressRowProgressBar = ({\n className,\n ...rest\n}: Omit<React.ComponentProps<typeof Progress>, 'value' | 'max'>) => {\n const { soc } = useBatteryProgressRowContext()\n return <Progress className={className} max={100} value={soc} {...rest} />\n}\n\nconst BatteryProgressRowFooter = ({\n className,\n ...rest\n}: React.ComponentProps<'div'>) => {\n return (\n <div\n className={cn(\n 'flex justify-between text-xs text-gray-light tabular-nums',\n className,\n )}\n {...rest}\n />\n )\n}\n\nconst BatteryProgressRowMinSoc = ({\n className,\n children,\n ...rest\n}: React.ComponentProps<'span'>) => {\n if (children === null || children === undefined) return null\n return (\n <span className={cn(className)} {...rest}>\n {children}\n </span>\n )\n}\n\n/**\n * Current state-of-charge label, rendered as `{soc}%`. Reads from context.\n */\nconst BatteryProgressRowSoc = ({\n className,\n ...rest\n}: React.ComponentProps<'span'>) => {\n const { soc } = useBatteryProgressRowContext()\n return (\n <span className={cn(className)} {...rest}>\n {`${soc}%`}\n </span>\n )\n}\n\nexport {\n BatteryProgressRow,\n BatteryProgressRowIcon,\n BatteryProgressRowContent,\n BatteryProgressRowHeader,\n BatteryProgressRowStateBadge,\n BatteryProgressRowChargingPower,\n BatteryProgressRowProgressBar,\n BatteryProgressRowFooter,\n BatteryProgressRowMinSoc,\n BatteryProgressRowSoc,\n}\n"],"mappings":";;;;;;;;AAcA,MAAM,4BACJ,cAAqD,IAAI;AAE3D,SAAS,+BAA+B;CACtC,MAAM,UAAU,WAAW,yBAAyB;CACpD,IAAI,CAAC,SACH,MAAM,IAAI,MACR,mEACF;CAEF,OAAO;AACT;AAEA,MAAM,sBAAsB,EAC1B,WACA,KACA,UACA,GAAG,WACgD;CACnD,OACE,oBAAC,0BAA0B,UAA3B;EAAoC,OAAO,EAAE,IAAI;YAC/C,oBAAC,OAAD;GAAK,WAAW,GAAG,2BAA2B,SAAS;GAAG,GAAI;GAC3D;EACE,CAAA;CAC6B,CAAA;AAExC;;;;;;;;;AAUA,MAAM,0BAA0B,EAC9B,WACA,MAAM,cACN,GAAG,WACmE;CACtE,MAAM,EAAE,QAAQ,6BAA6B;CAC7C,MAAM,aAAa,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG,GAAG;CACjD,MAAM,eAAe,KAAK,IAAI,KAAK,MAAM,cAAc,MAAM,EAAE,GAAG,CAAC;CACnE,MAAM,WACJ,eAAe,MACX,iBACC,WAAW,aAAa;CAE/B,OACE,oBAAC,QAAD;EACE,WAAW,GACT,kGACA,SACF;EACA,GAAI;YAEJ,oBAAC,gBAAD;GAAgB,WAAU;GAAc,MAAM,gBAAgB;EAAW,CAAA;CACrE,CAAA;AAEV;AAEA,MAAM,6BAA6B,EACjC,WACA,GAAG,WAC8B;CACjC,OACE,oBAAC,OAAD;EACE,WAAW,GAAG,wCAAwC,SAAS;EAC/D,GAAI;CACL,CAAA;AAEL;AAEA,MAAM,4BAA4B,EAChC,WACA,GAAG,WAC8B;CACjC,OACE,oBAAC,OAAD;EACE,WAAW,GAAG,2CAA2C,SAAS;EAClE,GAAI;CACL,CAAA;AAEL;AAEA,MAAM,mBAAkD;CACtD,SAAS;CACT,SAAS;CACT,OAAO;CACP,QAAQ;CACR,SAAS;AACX;AAEA,MAAM,gCAAgC,EACpC,WACA,UACA,OAAO,WACP,GAAG,WACgE;CACnE,IAAI,aAAa,QAAQ,aAAa,KAAA,GAAW,OAAO;CACxD,OACE,oBAAC,OAAD;EACE,OAAO,iBAAiB;EACxB,WAAW,GAAG,SAAS,SAAS;EAChC,GAAI;EAEH;CACI,CAAA;AAEX;AAEA,MAAM,mCAAmC,EACvC,WACA,UACA,GAAG,WAC+B;CAClC,IAAI,aAAa,QAAQ,aAAa,KAAA,GAAW,OAAO;CACxD,OACE,oBAAC,QAAD;EACE,WAAW,GACT,kEACA,SACF;EACA,GAAI;EAEH;CACG,CAAA;AAEV;;;;AAKA,MAAM,iCAAiC,EACrC,WACA,GAAG,WAC+D;CAClE,MAAM,EAAE,QAAQ,6BAA6B;CAC7C,OAAO,oBAAC,UAAD;EAAqB;EAAW,KAAK;EAAK,OAAO;EAAK,GAAI;CAAO,CAAA;AAC1E;AAEA,MAAM,4BAA4B,EAChC,WACA,GAAG,WAC8B;CACjC,OACE,oBAAC,OAAD;EACE,WAAW,GACT,6DACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,MAAM,4BAA4B,EAChC,WACA,UACA,GAAG,WAC+B;CAClC,IAAI,aAAa,QAAQ,aAAa,KAAA,GAAW,OAAO;CACxD,OACE,oBAAC,QAAD;EAAM,WAAW,GAAG,SAAS;EAAG,GAAI;EACjC;CACG,CAAA;AAEV;;;;AAKA,MAAM,yBAAyB,EAC7B,WACA,GAAG,WAC+B;CAClC,MAAM,EAAE,QAAQ,6BAA6B;CAC7C,OACE,oBAAC,QAAD;EAAM,WAAW,GAAG,SAAS;EAAG,GAAI;YACjC,GAAG,IAAI;CACJ,CAAA;AAEV"}
@@ -0,0 +1,64 @@
1
+ "use client";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ let react_jsx_runtime = require("react/jsx-runtime");
4
+ let _base_ui_react_merge_props = require("@base-ui/react/merge-props");
5
+ let _base_ui_react_use_render = require("@base-ui/react/use-render");
6
+ let cnfast = require("cnfast");
7
+ //#region src/components/breadcrumbs.tsx
8
+ const Breadcrumbs = ({ className, "aria-label": ariaLabel = "Breadcrumb", ...rest }) => {
9
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("nav", {
10
+ "aria-label": ariaLabel,
11
+ className: (0, cnfast.cn)(className),
12
+ ...rest
13
+ });
14
+ };
15
+ const BreadcrumbsList = ({ className, ...rest }) => {
16
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ol", {
17
+ className: (0, cnfast.cn)("flex flex-wrap items-center gap-1.5 text-sm text-gray-light", className),
18
+ ...rest
19
+ });
20
+ };
21
+ const BreadcrumbsItem = ({ className, ...rest }) => {
22
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", {
23
+ className: (0, cnfast.cn)("flex items-center gap-1.5", className),
24
+ ...rest
25
+ });
26
+ };
27
+ /**
28
+ * Link inside a breadcrumb. Pass `render` to render any router-specific link
29
+ * component (TanStack `Link`, Next `Link`, plain `<a>`, …) and inherit the
30
+ * breadcrumb link styling. Without `render` it renders as a plain anchor.
31
+ */
32
+ const BreadcrumbsLink = ({ className, render, ...rest }) => {
33
+ return (0, _base_ui_react_use_render.useRender)({
34
+ defaultTagName: "a",
35
+ render,
36
+ props: (0, _base_ui_react_merge_props.mergeProps)({ className: (0, cnfast.cn)("rounded-xs transition-colors hover:text-gray focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden", className) }, rest)
37
+ });
38
+ };
39
+ /** Current page marker — the trailing breadcrumb the user is on. */
40
+ const BreadcrumbsPage = ({ className, ...rest }) => {
41
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
42
+ "aria-current": "page",
43
+ className: (0, cnfast.cn)("font-medium text-gray", className),
44
+ ...rest
45
+ });
46
+ };
47
+ /** Visual separator between breadcrumb items. Defaults to "/". */
48
+ const BreadcrumbsSeparator = ({ children, className, ...rest }) => {
49
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
50
+ "aria-hidden": "true",
51
+ className: (0, cnfast.cn)(className),
52
+ ...rest,
53
+ children: children ?? "/"
54
+ });
55
+ };
56
+ //#endregion
57
+ exports.Breadcrumbs = Breadcrumbs;
58
+ exports.BreadcrumbsItem = BreadcrumbsItem;
59
+ exports.BreadcrumbsLink = BreadcrumbsLink;
60
+ exports.BreadcrumbsList = BreadcrumbsList;
61
+ exports.BreadcrumbsPage = BreadcrumbsPage;
62
+ exports.BreadcrumbsSeparator = BreadcrumbsSeparator;
63
+
64
+ //# sourceMappingURL=breadcrumbs.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breadcrumbs.cjs","names":[],"sources":["../../src/components/breadcrumbs.tsx"],"sourcesContent":["import { mergeProps } from '@base-ui/react/merge-props'\nimport { useRender } from '@base-ui/react/use-render'\nimport { cn } from '../utils/cn'\n\nconst Breadcrumbs = ({\n className,\n 'aria-label': ariaLabel = 'Breadcrumb',\n ...rest\n}: React.ComponentProps<'nav'>) => {\n return <nav aria-label={ariaLabel} className={cn(className)} {...rest} />\n}\n\nconst BreadcrumbsList = ({\n className,\n ...rest\n}: React.ComponentProps<'ol'>) => {\n return (\n <ol\n className={cn(\n 'flex flex-wrap items-center gap-1.5 text-sm text-gray-light',\n className,\n )}\n {...rest}\n />\n )\n}\n\nconst BreadcrumbsItem = ({\n className,\n ...rest\n}: React.ComponentProps<'li'>) => {\n return <li className={cn('flex items-center gap-1.5', className)} {...rest} />\n}\n\n/**\n * Link inside a breadcrumb. Pass `render` to render any router-specific link\n * component (TanStack `Link`, Next `Link`, plain `<a>`, …) and inherit the\n * breadcrumb link styling. Without `render` it renders as a plain anchor.\n */\nconst BreadcrumbsLink = ({\n className,\n render,\n ...rest\n}: useRender.ComponentProps<'a'>) => {\n return useRender({\n defaultTagName: 'a',\n render,\n props: mergeProps<'a'>(\n {\n className: cn(\n 'rounded-xs transition-colors hover:text-gray focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden',\n className,\n ),\n },\n rest,\n ),\n })\n}\n\n/** Current page marker — the trailing breadcrumb the user is on. */\nconst BreadcrumbsPage = ({\n className,\n ...rest\n}: React.ComponentProps<'span'>) => {\n return (\n <span\n aria-current=\"page\"\n className={cn('font-medium text-gray', className)}\n {...rest}\n />\n )\n}\n\n/** Visual separator between breadcrumb items. Defaults to \"/\". */\nconst BreadcrumbsSeparator = ({\n children,\n className,\n ...rest\n}: React.ComponentProps<'span'>) => {\n return (\n <span aria-hidden=\"true\" className={cn(className)} {...rest}>\n {children ?? '/'}\n </span>\n )\n}\n\nexport {\n Breadcrumbs,\n BreadcrumbsList,\n BreadcrumbsItem,\n BreadcrumbsLink,\n BreadcrumbsPage,\n BreadcrumbsSeparator,\n}\n"],"mappings":";;;;;;;AAIA,MAAM,eAAe,EACnB,WACA,cAAc,YAAY,cAC1B,GAAG,WAC8B;CACjC,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,cAAY;EAAW,YAAA,GAAA,OAAA,IAAc,SAAS;EAAG,GAAI;CAAO,CAAA;AAC1E;AAEA,MAAM,mBAAmB,EACvB,WACA,GAAG,WAC6B;CAChC,OACE,iBAAA,GAAA,kBAAA,KAAC,MAAD;EACE,YAAA,GAAA,OAAA,IACE,+DACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,MAAM,mBAAmB,EACvB,WACA,GAAG,WAC6B;CAChC,OAAO,iBAAA,GAAA,kBAAA,KAAC,MAAD;EAAI,YAAA,GAAA,OAAA,IAAc,6BAA6B,SAAS;EAAG,GAAI;CAAO,CAAA;AAC/E;;;;;;AAOA,MAAM,mBAAmB,EACvB,WACA,QACA,GAAG,WACgC;CACnC,QAAA,GAAA,0BAAA,WAAiB;EACf,gBAAgB;EAChB;EACA,QAAA,GAAA,2BAAA,YACE,EACE,YAAA,GAAA,OAAA,IACE,8HACA,SACF,EACF,GACA,IACF;CACF,CAAC;AACH;;AAGA,MAAM,mBAAmB,EACvB,WACA,GAAG,WAC+B;CAClC,OACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;EACE,gBAAa;EACb,YAAA,GAAA,OAAA,IAAc,yBAAyB,SAAS;EAChD,GAAI;CACL,CAAA;AAEL;;AAGA,MAAM,wBAAwB,EAC5B,UACA,WACA,GAAG,WAC+B;CAClC,OACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;EAAM,eAAY;EAAO,YAAA,GAAA,OAAA,IAAc,SAAS;EAAG,GAAI;YACpD,YAAY;CACT,CAAA;AAEV"}