@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":"energy-bar-chart.js","names":[],"sources":["../../src/components/energy-bar-chart.tsx"],"sourcesContent":["import {\n BarChart,\n type BarChartCategory,\n type BarChartLineSeries,\n type BarChartSeries,\n} from './bar-chart'\nimport NumberFlow, { type Format } from './number-flow'\n\nexport type Category = BarChartCategory\n\nexport interface HourBucket {\n hour: number\n solar: number\n battery: number\n grid: number\n}\n\nexport type EnergyBarSeries<TDatum = HourBucket> = BarChartSeries<TDatum>\nexport type EnergyBarLineSeries<TDatum = HourBucket> =\n BarChartLineSeries<TDatum>\n\ninterface EnergyBarChartProps<TDatum> {\n data: TDatum[]\n series: BarChartSeries<TDatum>[]\n lines?: BarChartLineSeries<TDatum>[]\n getCategory: (datum: TDatum) => Category\n categories?: Category[]\n categoryTicks?: Category[]\n formatCategory?: (category: Category) => string\n formatTooltipCategory?: (category: Category) => string\n highlightedCategory?: Category\n showHighlightLine?: boolean\n title?: string\n yAxisUnit?: string\n formatValue?: (value: number) => string\n totalSuffix?: string\n totalFormat?: Format\n height?: number\n className?: string\n}\n\nexport function EnergyBarChart<TDatum>({\n totalSuffix,\n totalFormat,\n className,\n ...rest\n}: EnergyBarChartProps<TDatum>): React.ReactElement {\n return (\n <BarChart<TDatum>\n {...rest}\n className={className}\n renderTotal={(value, animated) => (\n <NumberFlow\n value={value}\n animated={animated}\n {...(totalSuffix !== undefined && { suffix: totalSuffix })}\n {...(totalFormat !== undefined && { format: totalFormat })}\n className=\"text-base font-bold text-gray tabular-nums\"\n />\n )}\n />\n )\n}\n"],"mappings":";;;;;AAyCA,SAAgB,eAAuB,EACrC,aACA,aACA,WACA,GAAG,QAC+C;CAClD,OACE,oBAAC,UAAD;EACE,GAAI;EACO;EACX,cAAc,OAAO,aACnB,oBAAC,YAAD;GACS;GACG;GACV,GAAK,gBAAgB,KAAA,KAAa,EAAE,QAAQ,YAAY;GACxD,GAAK,gBAAgB,KAAA,KAAa,EAAE,QAAQ,YAAY;GACxD,WAAU;EACX,CAAA;CAEJ,CAAA;AAEL"}
@@ -0,0 +1,80 @@
1
+ "use client";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ require("../utils/chars.cjs");
4
+ const require_utils_format = require("../utils/format.cjs");
5
+ const require_components_donut_chart = require("./donut-chart.cjs");
6
+ let react = require("react");
7
+ let react_jsx_runtime = require("react/jsx-runtime");
8
+ //#region src/components/energy-breakdown.tsx
9
+ function formatBreakdownCenter(v) {
10
+ if (v >= 1e3) return require_utils_format.formatThousands(v);
11
+ if (v >= 100) return require_utils_format.integerFormat.format(v);
12
+ if (v >= 10) return require_utils_format.oneDecimalFormat.format(v);
13
+ return require_utils_format.twoDecimalFormat.format(v);
14
+ }
15
+ function EnergyBreakdown({ title, subtitle, items, centerSub = "kWh" }) {
16
+ const sortedItems = (0, react.useMemo)(() => [...items].sort((a, b) => b.value - a.value), [items]);
17
+ const total = items.reduce((s, i) => s + i.value, 0);
18
+ const centerTotal = items.filter((i) => !i.excludeFromCenterTotal).reduce((s, i) => s + i.value, 0);
19
+ if (total === 0) return null;
20
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
21
+ className: "flex flex-col gap-4 pt-3 pb-5",
22
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
23
+ className: "flex flex-col gap-0.5",
24
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
25
+ className: "text-sm font-semibold text-gray",
26
+ children: title
27
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
28
+ className: "text-xs text-gray-light",
29
+ children: subtitle
30
+ })]
31
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
32
+ className: "flex items-center gap-6",
33
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_donut_chart.DonutChart, {
34
+ centerLabel: formatBreakdownCenter(centerTotal),
35
+ centerSub,
36
+ segments: sortedItems.map(({ value, color }) => ({
37
+ value,
38
+ color
39
+ }))
40
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
41
+ className: "flex flex-1 flex-col gap-3",
42
+ children: sortedItems.map(({ label, value, color }) => {
43
+ const pct = value / total * 100;
44
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
45
+ className: "flex flex-col gap-1.5",
46
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
47
+ className: "flex items-baseline justify-between gap-2",
48
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
49
+ className: "min-w-0 truncate text-sm font-medium text-gray",
50
+ children: label
51
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
52
+ className: "flex shrink-0 items-baseline gap-1.5 text-xs tabular-nums",
53
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
54
+ className: "text-gray-light",
55
+ children: require_utils_format.formatEnergy(value)
56
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
57
+ className: "font-semibold text-gray",
58
+ children: `${require_utils_format.integerFormat.format(pct)} %`
59
+ })]
60
+ })]
61
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
62
+ className: "h-1 w-full overflow-hidden rounded-full bg-gray-a4",
63
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
64
+ className: "h-full rounded-full",
65
+ style: {
66
+ width: `${pct}%`,
67
+ background: color
68
+ }
69
+ })
70
+ })]
71
+ }, label);
72
+ })
73
+ })]
74
+ })]
75
+ });
76
+ }
77
+ //#endregion
78
+ exports.EnergyBreakdown = EnergyBreakdown;
79
+
80
+ //# sourceMappingURL=energy-breakdown.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"energy-breakdown.cjs","names":["formatThousands","integerFormat","oneDecimalFormat","twoDecimalFormat","DonutChart","formatEnergy"],"sources":["../../src/components/energy-breakdown.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { NARROW_NBSP } from '../utils/chars'\nimport {\n formatEnergy,\n formatThousands,\n integerFormat,\n oneDecimalFormat,\n twoDecimalFormat,\n} from '../utils/format'\nimport { DonutChart } from './donut-chart'\n\nexport type BreakdownItem = {\n label: string\n value: number\n color: string\n excludeFromCenterTotal?: boolean\n}\n\nexport type EnergyBreakdownProps = {\n title: string\n subtitle: string\n items: BreakdownItem[]\n centerSub?: string\n}\n\nfunction formatBreakdownCenter(v: number) {\n if (v >= 1000) return formatThousands(v)\n if (v >= 100) return integerFormat.format(v)\n if (v >= 10) return oneDecimalFormat.format(v)\n return twoDecimalFormat.format(v)\n}\n\nexport function EnergyBreakdown({\n title,\n subtitle,\n items,\n centerSub = 'kWh',\n}: EnergyBreakdownProps) {\n const sortedItems = useMemo(\n () => [...items].sort((a, b) => b.value - a.value),\n [items],\n )\n\n const total = items.reduce((s, i) => s + i.value, 0)\n const centerTotal = items\n .filter((i) => !i.excludeFromCenterTotal)\n .reduce((s, i) => s + i.value, 0)\n\n const dataEmpty = total === 0\n\n if (dataEmpty) return null\n\n return (\n <div className=\"flex flex-col gap-4 pt-3 pb-5\">\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-sm font-semibold text-gray\">{title}</span>\n <span className=\"text-xs text-gray-light\">{subtitle}</span>\n </div>\n\n <div className=\"flex items-center gap-6\">\n <DonutChart\n centerLabel={formatBreakdownCenter(centerTotal)}\n centerSub={centerSub}\n segments={sortedItems.map(({ value, color }) => ({ value, color }))}\n />\n\n <div className=\"flex flex-1 flex-col gap-3\">\n {sortedItems.map(({ label, value, color }) => {\n const pct = (value / total) * 100\n return (\n <div key={label} className=\"flex flex-col gap-1.5\">\n <div className=\"flex items-baseline justify-between gap-2\">\n <span className=\"min-w-0 truncate text-sm font-medium text-gray\">\n {label}\n </span>\n <span className=\"flex shrink-0 items-baseline gap-1.5 text-xs tabular-nums\">\n <span className=\"text-gray-light\">\n {formatEnergy(value)}\n </span>\n <span className=\"font-semibold text-gray\">\n {`${integerFormat.format(pct)}${NARROW_NBSP}%`}\n </span>\n </span>\n </div>\n <div className=\"h-1 w-full overflow-hidden rounded-full bg-gray-a4\">\n <div\n className=\"h-full rounded-full\"\n style={{ width: `${pct}%`, background: color }}\n />\n </div>\n </div>\n )\n })}\n </div>\n </div>\n </div>\n )\n}\n"],"mappings":";;;;;;;;AAyBA,SAAS,sBAAsB,GAAW;CACxC,IAAI,KAAK,KAAM,OAAOA,qBAAAA,gBAAgB,CAAC;CACvC,IAAI,KAAK,KAAK,OAAOC,qBAAAA,cAAc,OAAO,CAAC;CAC3C,IAAI,KAAK,IAAI,OAAOC,qBAAAA,iBAAiB,OAAO,CAAC;CAC7C,OAAOC,qBAAAA,iBAAiB,OAAO,CAAC;AAClC;AAEA,SAAgB,gBAAgB,EAC9B,OACA,UACA,OACA,YAAY,SACW;CACvB,MAAM,eAAA,GAAA,MAAA,eACE,CAAC,GAAG,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK,GACjD,CAAC,KAAK,CACR;CAEA,MAAM,QAAQ,MAAM,QAAQ,GAAG,MAAM,IAAI,EAAE,OAAO,CAAC;CACnD,MAAM,cAAc,MACjB,QAAQ,MAAM,CAAC,EAAE,sBAAsB,EACvC,QAAQ,GAAG,MAAM,IAAI,EAAE,OAAO,CAAC;CAIlC,IAFkB,UAAU,GAEb,OAAO;CAEtB,OACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EAAK,WAAU;YAAf,CACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;GAAK,WAAU;aAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;IAAM,WAAU;cAAmC;GAAY,CAAA,GAC/D,iBAAA,GAAA,kBAAA,KAAC,QAAD;IAAM,WAAU;cAA2B;GAAe,CAAA,CACvD;MAEL,iBAAA,GAAA,kBAAA,MAAC,OAAD;GAAK,WAAU;aAAf,CACE,iBAAA,GAAA,kBAAA,KAACC,+BAAAA,YAAD;IACE,aAAa,sBAAsB,WAAW;IACnC;IACX,UAAU,YAAY,KAAK,EAAE,OAAO,aAAa;KAAE;KAAO;IAAM,EAAE;GACnE,CAAA,GAED,iBAAA,GAAA,kBAAA,KAAC,OAAD;IAAK,WAAU;cACZ,YAAY,KAAK,EAAE,OAAO,OAAO,YAAY;KAC5C,MAAM,MAAO,QAAQ,QAAS;KAC9B,OACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;MAAiB,WAAU;gBAA3B,CACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;OAAK,WAAU;iBAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;QAAM,WAAU;kBACb;OACG,CAAA,GACN,iBAAA,GAAA,kBAAA,MAAC,QAAD;QAAM,WAAU;kBAAhB,CACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;SAAM,WAAU;mBACbC,qBAAAA,aAAa,KAAK;QACf,CAAA,GACN,iBAAA,GAAA,kBAAA,KAAC,QAAD;SAAM,WAAU;mBACb,GAAGJ,qBAAAA,cAAc,OAAO,GAAG;QACxB,CAAA,CACF;SACH;UACL,iBAAA,GAAA,kBAAA,KAAC,OAAD;OAAK,WAAU;iBACb,iBAAA,GAAA,kBAAA,KAAC,OAAD;QACE,WAAU;QACV,OAAO;SAAE,OAAO,GAAG,IAAI;SAAI,YAAY;QAAM;OAC9C,CAAA;MACE,CAAA,CACF;QApBK,KAoBL;IAET,CAAC;GACE,CAAA,CACF;IACF;;AAET"}
@@ -0,0 +1,24 @@
1
+ "use client";
2
+
3
+ //#region src/components/energy-breakdown.d.ts
4
+ type BreakdownItem = {
5
+ label: string;
6
+ value: number;
7
+ color: string;
8
+ excludeFromCenterTotal?: boolean;
9
+ };
10
+ type EnergyBreakdownProps = {
11
+ title: string;
12
+ subtitle: string;
13
+ items: BreakdownItem[];
14
+ centerSub?: string;
15
+ };
16
+ declare function EnergyBreakdown({
17
+ title,
18
+ subtitle,
19
+ items,
20
+ centerSub
21
+ }: EnergyBreakdownProps): import("react/jsx-runtime").JSX.Element | null;
22
+ //#endregion
23
+ export { BreakdownItem, EnergyBreakdown, EnergyBreakdownProps };
24
+ //# sourceMappingURL=energy-breakdown.d.cts.map
@@ -0,0 +1,24 @@
1
+ "use client";
2
+
3
+ //#region src/components/energy-breakdown.d.ts
4
+ type BreakdownItem = {
5
+ label: string;
6
+ value: number;
7
+ color: string;
8
+ excludeFromCenterTotal?: boolean;
9
+ };
10
+ type EnergyBreakdownProps = {
11
+ title: string;
12
+ subtitle: string;
13
+ items: BreakdownItem[];
14
+ centerSub?: string;
15
+ };
16
+ declare function EnergyBreakdown({
17
+ title,
18
+ subtitle,
19
+ items,
20
+ centerSub
21
+ }: EnergyBreakdownProps): import("react/jsx-runtime").JSX.Element | null;
22
+ //#endregion
23
+ export { BreakdownItem, EnergyBreakdown, EnergyBreakdownProps };
24
+ //# sourceMappingURL=energy-breakdown.d.ts.map
@@ -0,0 +1,79 @@
1
+ "use client";
2
+ import "../utils/chars.js";
3
+ import { formatEnergy, formatThousands, integerFormat, oneDecimalFormat, twoDecimalFormat } from "../utils/format.js";
4
+ import { DonutChart } from "./donut-chart.js";
5
+ import { useMemo } from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ //#region src/components/energy-breakdown.tsx
8
+ function formatBreakdownCenter(v) {
9
+ if (v >= 1e3) return formatThousands(v);
10
+ if (v >= 100) return integerFormat.format(v);
11
+ if (v >= 10) return oneDecimalFormat.format(v);
12
+ return twoDecimalFormat.format(v);
13
+ }
14
+ function EnergyBreakdown({ title, subtitle, items, centerSub = "kWh" }) {
15
+ const sortedItems = useMemo(() => [...items].sort((a, b) => b.value - a.value), [items]);
16
+ const total = items.reduce((s, i) => s + i.value, 0);
17
+ const centerTotal = items.filter((i) => !i.excludeFromCenterTotal).reduce((s, i) => s + i.value, 0);
18
+ if (total === 0) return null;
19
+ return /* @__PURE__ */ jsxs("div", {
20
+ className: "flex flex-col gap-4 pt-3 pb-5",
21
+ children: [/* @__PURE__ */ jsxs("div", {
22
+ className: "flex flex-col gap-0.5",
23
+ children: [/* @__PURE__ */ jsx("span", {
24
+ className: "text-sm font-semibold text-gray",
25
+ children: title
26
+ }), /* @__PURE__ */ jsx("span", {
27
+ className: "text-xs text-gray-light",
28
+ children: subtitle
29
+ })]
30
+ }), /* @__PURE__ */ jsxs("div", {
31
+ className: "flex items-center gap-6",
32
+ children: [/* @__PURE__ */ jsx(DonutChart, {
33
+ centerLabel: formatBreakdownCenter(centerTotal),
34
+ centerSub,
35
+ segments: sortedItems.map(({ value, color }) => ({
36
+ value,
37
+ color
38
+ }))
39
+ }), /* @__PURE__ */ jsx("div", {
40
+ className: "flex flex-1 flex-col gap-3",
41
+ children: sortedItems.map(({ label, value, color }) => {
42
+ const pct = value / total * 100;
43
+ return /* @__PURE__ */ jsxs("div", {
44
+ className: "flex flex-col gap-1.5",
45
+ children: [/* @__PURE__ */ jsxs("div", {
46
+ className: "flex items-baseline justify-between gap-2",
47
+ children: [/* @__PURE__ */ jsx("span", {
48
+ className: "min-w-0 truncate text-sm font-medium text-gray",
49
+ children: label
50
+ }), /* @__PURE__ */ jsxs("span", {
51
+ className: "flex shrink-0 items-baseline gap-1.5 text-xs tabular-nums",
52
+ children: [/* @__PURE__ */ jsx("span", {
53
+ className: "text-gray-light",
54
+ children: formatEnergy(value)
55
+ }), /* @__PURE__ */ jsx("span", {
56
+ className: "font-semibold text-gray",
57
+ children: `${integerFormat.format(pct)} %`
58
+ })]
59
+ })]
60
+ }), /* @__PURE__ */ jsx("div", {
61
+ className: "h-1 w-full overflow-hidden rounded-full bg-gray-a4",
62
+ children: /* @__PURE__ */ jsx("div", {
63
+ className: "h-full rounded-full",
64
+ style: {
65
+ width: `${pct}%`,
66
+ background: color
67
+ }
68
+ })
69
+ })]
70
+ }, label);
71
+ })
72
+ })]
73
+ })]
74
+ });
75
+ }
76
+ //#endregion
77
+ export { EnergyBreakdown };
78
+
79
+ //# sourceMappingURL=energy-breakdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"energy-breakdown.js","names":[],"sources":["../../src/components/energy-breakdown.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { NARROW_NBSP } from '../utils/chars'\nimport {\n formatEnergy,\n formatThousands,\n integerFormat,\n oneDecimalFormat,\n twoDecimalFormat,\n} from '../utils/format'\nimport { DonutChart } from './donut-chart'\n\nexport type BreakdownItem = {\n label: string\n value: number\n color: string\n excludeFromCenterTotal?: boolean\n}\n\nexport type EnergyBreakdownProps = {\n title: string\n subtitle: string\n items: BreakdownItem[]\n centerSub?: string\n}\n\nfunction formatBreakdownCenter(v: number) {\n if (v >= 1000) return formatThousands(v)\n if (v >= 100) return integerFormat.format(v)\n if (v >= 10) return oneDecimalFormat.format(v)\n return twoDecimalFormat.format(v)\n}\n\nexport function EnergyBreakdown({\n title,\n subtitle,\n items,\n centerSub = 'kWh',\n}: EnergyBreakdownProps) {\n const sortedItems = useMemo(\n () => [...items].sort((a, b) => b.value - a.value),\n [items],\n )\n\n const total = items.reduce((s, i) => s + i.value, 0)\n const centerTotal = items\n .filter((i) => !i.excludeFromCenterTotal)\n .reduce((s, i) => s + i.value, 0)\n\n const dataEmpty = total === 0\n\n if (dataEmpty) return null\n\n return (\n <div className=\"flex flex-col gap-4 pt-3 pb-5\">\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-sm font-semibold text-gray\">{title}</span>\n <span className=\"text-xs text-gray-light\">{subtitle}</span>\n </div>\n\n <div className=\"flex items-center gap-6\">\n <DonutChart\n centerLabel={formatBreakdownCenter(centerTotal)}\n centerSub={centerSub}\n segments={sortedItems.map(({ value, color }) => ({ value, color }))}\n />\n\n <div className=\"flex flex-1 flex-col gap-3\">\n {sortedItems.map(({ label, value, color }) => {\n const pct = (value / total) * 100\n return (\n <div key={label} className=\"flex flex-col gap-1.5\">\n <div className=\"flex items-baseline justify-between gap-2\">\n <span className=\"min-w-0 truncate text-sm font-medium text-gray\">\n {label}\n </span>\n <span className=\"flex shrink-0 items-baseline gap-1.5 text-xs tabular-nums\">\n <span className=\"text-gray-light\">\n {formatEnergy(value)}\n </span>\n <span className=\"font-semibold text-gray\">\n {`${integerFormat.format(pct)}${NARROW_NBSP}%`}\n </span>\n </span>\n </div>\n <div className=\"h-1 w-full overflow-hidden rounded-full bg-gray-a4\">\n <div\n className=\"h-full rounded-full\"\n style={{ width: `${pct}%`, background: color }}\n />\n </div>\n </div>\n )\n })}\n </div>\n </div>\n </div>\n )\n}\n"],"mappings":";;;;;;;AAyBA,SAAS,sBAAsB,GAAW;CACxC,IAAI,KAAK,KAAM,OAAO,gBAAgB,CAAC;CACvC,IAAI,KAAK,KAAK,OAAO,cAAc,OAAO,CAAC;CAC3C,IAAI,KAAK,IAAI,OAAO,iBAAiB,OAAO,CAAC;CAC7C,OAAO,iBAAiB,OAAO,CAAC;AAClC;AAEA,SAAgB,gBAAgB,EAC9B,OACA,UACA,OACA,YAAY,SACW;CACvB,MAAM,cAAc,cACZ,CAAC,GAAG,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK,GACjD,CAAC,KAAK,CACR;CAEA,MAAM,QAAQ,MAAM,QAAQ,GAAG,MAAM,IAAI,EAAE,OAAO,CAAC;CACnD,MAAM,cAAc,MACjB,QAAQ,MAAM,CAAC,EAAE,sBAAsB,EACvC,QAAQ,GAAG,MAAM,IAAI,EAAE,OAAO,CAAC;CAIlC,IAFkB,UAAU,GAEb,OAAO;CAEtB,OACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,qBAAC,OAAD;GAAK,WAAU;aAAf,CACE,oBAAC,QAAD;IAAM,WAAU;cAAmC;GAAY,CAAA,GAC/D,oBAAC,QAAD;IAAM,WAAU;cAA2B;GAAe,CAAA,CACvD;MAEL,qBAAC,OAAD;GAAK,WAAU;aAAf,CACE,oBAAC,YAAD;IACE,aAAa,sBAAsB,WAAW;IACnC;IACX,UAAU,YAAY,KAAK,EAAE,OAAO,aAAa;KAAE;KAAO;IAAM,EAAE;GACnE,CAAA,GAED,oBAAC,OAAD;IAAK,WAAU;cACZ,YAAY,KAAK,EAAE,OAAO,OAAO,YAAY;KAC5C,MAAM,MAAO,QAAQ,QAAS;KAC9B,OACE,qBAAC,OAAD;MAAiB,WAAU;gBAA3B,CACE,qBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,oBAAC,QAAD;QAAM,WAAU;kBACb;OACG,CAAA,GACN,qBAAC,QAAD;QAAM,WAAU;kBAAhB,CACE,oBAAC,QAAD;SAAM,WAAU;mBACb,aAAa,KAAK;QACf,CAAA,GACN,oBAAC,QAAD;SAAM,WAAU;mBACb,GAAG,cAAc,OAAO,GAAG;QACxB,CAAA,CACF;SACH;UACL,oBAAC,OAAD;OAAK,WAAU;iBACb,oBAAC,OAAD;QACE,WAAU;QACV,OAAO;SAAE,OAAO,GAAG,IAAI;SAAI,YAAY;QAAM;OAC9C,CAAA;MACE,CAAA,CACF;QApBK,KAoBL;IAET,CAAC;GACE,CAAA,CACF;IACF;;AAET"}
@@ -0,0 +1,63 @@
1
+ "use client";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ require("../utils/chars.cjs");
4
+ const require_utils_format = require("../utils/format.cjs");
5
+ const require_components_energy_bar_chart = require("./energy-bar-chart.cjs");
6
+ let react_jsx_runtime = require("react/jsx-runtime");
7
+ //#region src/components/energy-history-chart.tsx
8
+ /**
9
+ * Energy-per-bucket stacked bar chart: solar (orange), battery (green) and grid
10
+ * (blue) energy sources stacked per bucket, the total height being the energy
11
+ * consumed. Grid feed-in (translucent blue) dips below the baseline as an
12
+ * export. For cumulative energy (week/month/year views). Thin wrapper over the
13
+ * shared visx `BarChart`, so it inherits the card tooltip and both indicators.
14
+ */
15
+ function EnergyHistoryChart({ data, unit, formatValue, formatBucketLabel, labels, omitSeries, highlightedBucket, showHighlightLine, title, className, height = 260, categoryTicks }) {
16
+ const fmtValue = (value) => formatValue ? formatValue(value) : `${require_utils_format.twoDecimalFormat.format(value)} ${unit}`;
17
+ const omitted = new Set(omitSeries);
18
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_energy_bar_chart.EnergyBarChart, {
19
+ data,
20
+ series: [
21
+ {
22
+ key: "solar",
23
+ label: labels.solar,
24
+ color: "var(--orange-9)",
25
+ getValue: (d) => d.solar
26
+ },
27
+ {
28
+ key: "battery",
29
+ label: labels.battery,
30
+ color: "var(--green-9)",
31
+ getValue: (d) => d.battery
32
+ },
33
+ {
34
+ key: "grid",
35
+ label: labels.grid,
36
+ color: "var(--blue-9)",
37
+ getValue: (d) => d.grid
38
+ },
39
+ ...labels.gridFeedIn !== void 0 ? [{
40
+ key: "gridFeedIn",
41
+ label: labels.gridFeedIn,
42
+ color: "var(--blue-7)",
43
+ getValue: (d) => -Math.max(0, d.gridFeedIn ?? 0)
44
+ }] : []
45
+ ].filter((s) => !omitted.has(s.key)),
46
+ getCategory: (d) => d.bucket,
47
+ title,
48
+ yAxisUnit: unit,
49
+ height,
50
+ className,
51
+ formatValue: fmtValue,
52
+ categoryTicks,
53
+ ...formatBucketLabel && { formatTooltipCategory: (category) => formatBucketLabel(String(category)) },
54
+ totalSuffix: unit,
55
+ totalFormat: { maximumFractionDigits: 2 },
56
+ ...highlightedBucket !== void 0 && { highlightedCategory: highlightedBucket },
57
+ ...showHighlightLine !== void 0 && { showHighlightLine }
58
+ });
59
+ }
60
+ //#endregion
61
+ exports.EnergyHistoryChart = EnergyHistoryChart;
62
+
63
+ //# sourceMappingURL=energy-history-chart.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"energy-history-chart.cjs","names":["valueFormat","EnergyBarChart"],"sources":["../../src/components/energy-history-chart.tsx"],"sourcesContent":["import { NARROW_NBSP } from '../utils/chars'\nimport { twoDecimalFormat as valueFormat } from '../utils/format'\nimport type { BarChartSeries } from './bar-chart'\nimport { EnergyBarChart } from './energy-bar-chart'\n\nexport interface EnergyHistoryDatum {\n /** Bucket label/id (e.g. weekday, day-of-month, month). */\n bucket: string\n /** Solar used on-site (kWh, ≥ 0). */\n solar: number\n /** Battery discharged (kWh, ≥ 0). */\n battery: number\n /** Grid imported (kWh, ≥ 0). */\n grid: number\n /** Grid feed-in (kWh, ≥ 0); drawn below the baseline as an export. */\n gridFeedIn?: number\n}\n\nexport interface EnergyHistoryChartProps {\n data: EnergyHistoryDatum[]\n /** Axis/tooltip unit, e.g. \"kWh\". */\n unit: string\n formatValue?: (value: number) => string\n /** Formats the hovered bucket in the tooltip header. Defaults to the raw bucket. */\n formatBucketLabel?: (bucket: string) => string\n labels: {\n solar: string\n battery: string\n grid: string\n /** Optional; when set, grid feed-in is drawn below the baseline. */\n gridFeedIn?: string\n }\n /** Series to drop entirely (no legend entry, bar segment, or tooltip row). */\n omitSeries?: readonly EnergyHistorySeriesKey[]\n /** Bucket to mark with the current-period dashed line. */\n highlightedBucket?: string\n showHighlightLine?: boolean\n title?: string\n className?: string\n height?: number\n /** Subset of bucket ids to label on the x-axis. Defaults to all buckets. */\n categoryTicks?: string[]\n}\n\nexport type EnergyHistorySeriesKey = 'solar' | 'battery' | 'grid' | 'gridFeedIn'\n\n/**\n * Energy-per-bucket stacked bar chart: solar (orange), battery (green) and grid\n * (blue) energy sources stacked per bucket, the total height being the energy\n * consumed. Grid feed-in (translucent blue) dips below the baseline as an\n * export. For cumulative energy (week/month/year views). Thin wrapper over the\n * shared visx `BarChart`, so it inherits the card tooltip and both indicators.\n */\nexport function EnergyHistoryChart({\n data,\n unit,\n formatValue,\n formatBucketLabel,\n labels,\n omitSeries,\n highlightedBucket,\n showHighlightLine,\n title,\n className,\n height = 260,\n categoryTicks,\n}: EnergyHistoryChartProps) {\n const fmtValue = (value: number) =>\n formatValue\n ? formatValue(value)\n : `${valueFormat.format(value)}${NARROW_NBSP}${unit}`\n\n const omitted = new Set<EnergyHistorySeriesKey>(omitSeries)\n const allSeries: BarChartSeries<EnergyHistoryDatum>[] = [\n {\n key: 'solar',\n label: labels.solar,\n color: 'var(--orange-9)',\n getValue: (d) => d.solar,\n },\n {\n key: 'battery',\n label: labels.battery,\n color: 'var(--green-9)',\n getValue: (d) => d.battery,\n },\n {\n key: 'grid',\n label: labels.grid,\n color: 'var(--blue-9)',\n getValue: (d) => d.grid,\n },\n ...(labels.gridFeedIn !== undefined\n ? [\n {\n key: 'gridFeedIn',\n label: labels.gridFeedIn,\n color: 'var(--blue-7)',\n getValue: (d: EnergyHistoryDatum) =>\n -Math.max(0, d.gridFeedIn ?? 0),\n },\n ]\n : []),\n ]\n const series = allSeries.filter(\n (s) => !omitted.has(s.key as EnergyHistorySeriesKey),\n )\n\n return (\n <EnergyBarChart<EnergyHistoryDatum>\n data={data}\n series={series}\n getCategory={(d) => d.bucket}\n title={title}\n yAxisUnit={unit}\n height={height}\n className={className}\n formatValue={fmtValue}\n categoryTicks={categoryTicks}\n {...(formatBucketLabel && {\n formatTooltipCategory: (category: string | number) =>\n formatBucketLabel(String(category)),\n })}\n totalSuffix={unit}\n totalFormat={{ maximumFractionDigits: 2 }}\n {...(highlightedBucket !== undefined && {\n highlightedCategory: highlightedBucket,\n })}\n {...(showHighlightLine !== undefined && { showHighlightLine })}\n />\n )\n}\n"],"mappings":";;;;;;;;;;;;;;AAqDA,SAAgB,mBAAmB,EACjC,MACA,MACA,aACA,mBACA,QACA,YACA,mBACA,mBACA,OACA,WACA,SAAS,KACT,iBAC0B;CAC1B,MAAM,YAAY,UAChB,cACI,YAAY,KAAK,IACjB,GAAGA,qBAAAA,iBAAY,OAAO,KAAK,KAAkB;CAEnD,MAAM,UAAU,IAAI,IAA4B,UAAU;CAoC1D,OACE,iBAAA,GAAA,kBAAA,KAACC,oCAAAA,gBAAD;EACQ;EACN,QAPW;GA9Bb;IACE,KAAK;IACL,OAAO,OAAO;IACd,OAAO;IACP,WAAW,MAAM,EAAE;GACrB;GACA;IACE,KAAK;IACL,OAAO,OAAO;IACd,OAAO;IACP,WAAW,MAAM,EAAE;GACrB;GACA;IACE,KAAK;IACL,OAAO,OAAO;IACd,OAAO;IACP,WAAW,MAAM,EAAE;GACrB;GACA,GAAI,OAAO,eAAe,KAAA,IACtB,CACE;IACE,KAAK;IACL,OAAO,OAAO;IACd,OAAO;IACP,WAAW,MACT,CAAC,KAAK,IAAI,GAAG,EAAE,cAAc,CAAC;GAClC,CACF,IACA,CAAC;EAEgB,EAAE,QACtB,MAAM,CAAC,QAAQ,IAAI,EAAE,GAA6B,CAMpC;EACb,cAAc,MAAM,EAAE;EACf;EACP,WAAW;EACH;EACG;EACX,aAAa;EACE;EACf,GAAK,qBAAqB,EACxB,wBAAwB,aACtB,kBAAkB,OAAO,QAAQ,CAAC,EACtC;EACA,aAAa;EACb,aAAa,EAAE,uBAAuB,EAAE;EACxC,GAAK,sBAAsB,KAAA,KAAa,EACtC,qBAAqB,kBACvB;EACA,GAAK,sBAAsB,KAAA,KAAa,EAAE,kBAAkB;CAC7D,CAAA;AAEL"}
@@ -0,0 +1,64 @@
1
+ "use client";
2
+
3
+ //#region src/components/energy-history-chart.d.ts
4
+ interface EnergyHistoryDatum {
5
+ /** Bucket label/id (e.g. weekday, day-of-month, month). */
6
+ bucket: string;
7
+ /** Solar used on-site (kWh, ≥ 0). */
8
+ solar: number;
9
+ /** Battery discharged (kWh, ≥ 0). */
10
+ battery: number;
11
+ /** Grid imported (kWh, ≥ 0). */
12
+ grid: number;
13
+ /** Grid feed-in (kWh, ≥ 0); drawn below the baseline as an export. */
14
+ gridFeedIn?: number;
15
+ }
16
+ interface EnergyHistoryChartProps {
17
+ data: EnergyHistoryDatum[];
18
+ /** Axis/tooltip unit, e.g. "kWh". */
19
+ unit: string;
20
+ formatValue?: (value: number) => string;
21
+ /** Formats the hovered bucket in the tooltip header. Defaults to the raw bucket. */
22
+ formatBucketLabel?: (bucket: string) => string;
23
+ labels: {
24
+ solar: string;
25
+ battery: string;
26
+ grid: string; /** Optional; when set, grid feed-in is drawn below the baseline. */
27
+ gridFeedIn?: string;
28
+ };
29
+ /** Series to drop entirely (no legend entry, bar segment, or tooltip row). */
30
+ omitSeries?: readonly EnergyHistorySeriesKey[];
31
+ /** Bucket to mark with the current-period dashed line. */
32
+ highlightedBucket?: string;
33
+ showHighlightLine?: boolean;
34
+ title?: string;
35
+ className?: string;
36
+ height?: number;
37
+ /** Subset of bucket ids to label on the x-axis. Defaults to all buckets. */
38
+ categoryTicks?: string[];
39
+ }
40
+ type EnergyHistorySeriesKey = 'solar' | 'battery' | 'grid' | 'gridFeedIn';
41
+ /**
42
+ * Energy-per-bucket stacked bar chart: solar (orange), battery (green) and grid
43
+ * (blue) energy sources stacked per bucket, the total height being the energy
44
+ * consumed. Grid feed-in (translucent blue) dips below the baseline as an
45
+ * export. For cumulative energy (week/month/year views). Thin wrapper over the
46
+ * shared visx `BarChart`, so it inherits the card tooltip and both indicators.
47
+ */
48
+ declare function EnergyHistoryChart({
49
+ data,
50
+ unit,
51
+ formatValue,
52
+ formatBucketLabel,
53
+ labels,
54
+ omitSeries,
55
+ highlightedBucket,
56
+ showHighlightLine,
57
+ title,
58
+ className,
59
+ height,
60
+ categoryTicks
61
+ }: EnergyHistoryChartProps): import("react/jsx-runtime").JSX.Element;
62
+ //#endregion
63
+ export { EnergyHistoryChart, EnergyHistoryChartProps, EnergyHistoryDatum, EnergyHistorySeriesKey };
64
+ //# sourceMappingURL=energy-history-chart.d.cts.map
@@ -0,0 +1,64 @@
1
+ "use client";
2
+
3
+ //#region src/components/energy-history-chart.d.ts
4
+ interface EnergyHistoryDatum {
5
+ /** Bucket label/id (e.g. weekday, day-of-month, month). */
6
+ bucket: string;
7
+ /** Solar used on-site (kWh, ≥ 0). */
8
+ solar: number;
9
+ /** Battery discharged (kWh, ≥ 0). */
10
+ battery: number;
11
+ /** Grid imported (kWh, ≥ 0). */
12
+ grid: number;
13
+ /** Grid feed-in (kWh, ≥ 0); drawn below the baseline as an export. */
14
+ gridFeedIn?: number;
15
+ }
16
+ interface EnergyHistoryChartProps {
17
+ data: EnergyHistoryDatum[];
18
+ /** Axis/tooltip unit, e.g. "kWh". */
19
+ unit: string;
20
+ formatValue?: (value: number) => string;
21
+ /** Formats the hovered bucket in the tooltip header. Defaults to the raw bucket. */
22
+ formatBucketLabel?: (bucket: string) => string;
23
+ labels: {
24
+ solar: string;
25
+ battery: string;
26
+ grid: string; /** Optional; when set, grid feed-in is drawn below the baseline. */
27
+ gridFeedIn?: string;
28
+ };
29
+ /** Series to drop entirely (no legend entry, bar segment, or tooltip row). */
30
+ omitSeries?: readonly EnergyHistorySeriesKey[];
31
+ /** Bucket to mark with the current-period dashed line. */
32
+ highlightedBucket?: string;
33
+ showHighlightLine?: boolean;
34
+ title?: string;
35
+ className?: string;
36
+ height?: number;
37
+ /** Subset of bucket ids to label on the x-axis. Defaults to all buckets. */
38
+ categoryTicks?: string[];
39
+ }
40
+ type EnergyHistorySeriesKey = 'solar' | 'battery' | 'grid' | 'gridFeedIn';
41
+ /**
42
+ * Energy-per-bucket stacked bar chart: solar (orange), battery (green) and grid
43
+ * (blue) energy sources stacked per bucket, the total height being the energy
44
+ * consumed. Grid feed-in (translucent blue) dips below the baseline as an
45
+ * export. For cumulative energy (week/month/year views). Thin wrapper over the
46
+ * shared visx `BarChart`, so it inherits the card tooltip and both indicators.
47
+ */
48
+ declare function EnergyHistoryChart({
49
+ data,
50
+ unit,
51
+ formatValue,
52
+ formatBucketLabel,
53
+ labels,
54
+ omitSeries,
55
+ highlightedBucket,
56
+ showHighlightLine,
57
+ title,
58
+ className,
59
+ height,
60
+ categoryTicks
61
+ }: EnergyHistoryChartProps): import("react/jsx-runtime").JSX.Element;
62
+ //#endregion
63
+ export { EnergyHistoryChart, EnergyHistoryChartProps, EnergyHistoryDatum, EnergyHistorySeriesKey };
64
+ //# sourceMappingURL=energy-history-chart.d.ts.map
@@ -0,0 +1,62 @@
1
+ "use client";
2
+ import "../utils/chars.js";
3
+ import { twoDecimalFormat } from "../utils/format.js";
4
+ import { EnergyBarChart } from "./energy-bar-chart.js";
5
+ import { jsx } from "react/jsx-runtime";
6
+ //#region src/components/energy-history-chart.tsx
7
+ /**
8
+ * Energy-per-bucket stacked bar chart: solar (orange), battery (green) and grid
9
+ * (blue) energy sources stacked per bucket, the total height being the energy
10
+ * consumed. Grid feed-in (translucent blue) dips below the baseline as an
11
+ * export. For cumulative energy (week/month/year views). Thin wrapper over the
12
+ * shared visx `BarChart`, so it inherits the card tooltip and both indicators.
13
+ */
14
+ function EnergyHistoryChart({ data, unit, formatValue, formatBucketLabel, labels, omitSeries, highlightedBucket, showHighlightLine, title, className, height = 260, categoryTicks }) {
15
+ const fmtValue = (value) => formatValue ? formatValue(value) : `${twoDecimalFormat.format(value)} ${unit}`;
16
+ const omitted = new Set(omitSeries);
17
+ return /* @__PURE__ */ jsx(EnergyBarChart, {
18
+ data,
19
+ series: [
20
+ {
21
+ key: "solar",
22
+ label: labels.solar,
23
+ color: "var(--orange-9)",
24
+ getValue: (d) => d.solar
25
+ },
26
+ {
27
+ key: "battery",
28
+ label: labels.battery,
29
+ color: "var(--green-9)",
30
+ getValue: (d) => d.battery
31
+ },
32
+ {
33
+ key: "grid",
34
+ label: labels.grid,
35
+ color: "var(--blue-9)",
36
+ getValue: (d) => d.grid
37
+ },
38
+ ...labels.gridFeedIn !== void 0 ? [{
39
+ key: "gridFeedIn",
40
+ label: labels.gridFeedIn,
41
+ color: "var(--blue-7)",
42
+ getValue: (d) => -Math.max(0, d.gridFeedIn ?? 0)
43
+ }] : []
44
+ ].filter((s) => !omitted.has(s.key)),
45
+ getCategory: (d) => d.bucket,
46
+ title,
47
+ yAxisUnit: unit,
48
+ height,
49
+ className,
50
+ formatValue: fmtValue,
51
+ categoryTicks,
52
+ ...formatBucketLabel && { formatTooltipCategory: (category) => formatBucketLabel(String(category)) },
53
+ totalSuffix: unit,
54
+ totalFormat: { maximumFractionDigits: 2 },
55
+ ...highlightedBucket !== void 0 && { highlightedCategory: highlightedBucket },
56
+ ...showHighlightLine !== void 0 && { showHighlightLine }
57
+ });
58
+ }
59
+ //#endregion
60
+ export { EnergyHistoryChart };
61
+
62
+ //# sourceMappingURL=energy-history-chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"energy-history-chart.js","names":["valueFormat"],"sources":["../../src/components/energy-history-chart.tsx"],"sourcesContent":["import { NARROW_NBSP } from '../utils/chars'\nimport { twoDecimalFormat as valueFormat } from '../utils/format'\nimport type { BarChartSeries } from './bar-chart'\nimport { EnergyBarChart } from './energy-bar-chart'\n\nexport interface EnergyHistoryDatum {\n /** Bucket label/id (e.g. weekday, day-of-month, month). */\n bucket: string\n /** Solar used on-site (kWh, ≥ 0). */\n solar: number\n /** Battery discharged (kWh, ≥ 0). */\n battery: number\n /** Grid imported (kWh, ≥ 0). */\n grid: number\n /** Grid feed-in (kWh, ≥ 0); drawn below the baseline as an export. */\n gridFeedIn?: number\n}\n\nexport interface EnergyHistoryChartProps {\n data: EnergyHistoryDatum[]\n /** Axis/tooltip unit, e.g. \"kWh\". */\n unit: string\n formatValue?: (value: number) => string\n /** Formats the hovered bucket in the tooltip header. Defaults to the raw bucket. */\n formatBucketLabel?: (bucket: string) => string\n labels: {\n solar: string\n battery: string\n grid: string\n /** Optional; when set, grid feed-in is drawn below the baseline. */\n gridFeedIn?: string\n }\n /** Series to drop entirely (no legend entry, bar segment, or tooltip row). */\n omitSeries?: readonly EnergyHistorySeriesKey[]\n /** Bucket to mark with the current-period dashed line. */\n highlightedBucket?: string\n showHighlightLine?: boolean\n title?: string\n className?: string\n height?: number\n /** Subset of bucket ids to label on the x-axis. Defaults to all buckets. */\n categoryTicks?: string[]\n}\n\nexport type EnergyHistorySeriesKey = 'solar' | 'battery' | 'grid' | 'gridFeedIn'\n\n/**\n * Energy-per-bucket stacked bar chart: solar (orange), battery (green) and grid\n * (blue) energy sources stacked per bucket, the total height being the energy\n * consumed. Grid feed-in (translucent blue) dips below the baseline as an\n * export. For cumulative energy (week/month/year views). Thin wrapper over the\n * shared visx `BarChart`, so it inherits the card tooltip and both indicators.\n */\nexport function EnergyHistoryChart({\n data,\n unit,\n formatValue,\n formatBucketLabel,\n labels,\n omitSeries,\n highlightedBucket,\n showHighlightLine,\n title,\n className,\n height = 260,\n categoryTicks,\n}: EnergyHistoryChartProps) {\n const fmtValue = (value: number) =>\n formatValue\n ? formatValue(value)\n : `${valueFormat.format(value)}${NARROW_NBSP}${unit}`\n\n const omitted = new Set<EnergyHistorySeriesKey>(omitSeries)\n const allSeries: BarChartSeries<EnergyHistoryDatum>[] = [\n {\n key: 'solar',\n label: labels.solar,\n color: 'var(--orange-9)',\n getValue: (d) => d.solar,\n },\n {\n key: 'battery',\n label: labels.battery,\n color: 'var(--green-9)',\n getValue: (d) => d.battery,\n },\n {\n key: 'grid',\n label: labels.grid,\n color: 'var(--blue-9)',\n getValue: (d) => d.grid,\n },\n ...(labels.gridFeedIn !== undefined\n ? [\n {\n key: 'gridFeedIn',\n label: labels.gridFeedIn,\n color: 'var(--blue-7)',\n getValue: (d: EnergyHistoryDatum) =>\n -Math.max(0, d.gridFeedIn ?? 0),\n },\n ]\n : []),\n ]\n const series = allSeries.filter(\n (s) => !omitted.has(s.key as EnergyHistorySeriesKey),\n )\n\n return (\n <EnergyBarChart<EnergyHistoryDatum>\n data={data}\n series={series}\n getCategory={(d) => d.bucket}\n title={title}\n yAxisUnit={unit}\n height={height}\n className={className}\n formatValue={fmtValue}\n categoryTicks={categoryTicks}\n {...(formatBucketLabel && {\n formatTooltipCategory: (category: string | number) =>\n formatBucketLabel(String(category)),\n })}\n totalSuffix={unit}\n totalFormat={{ maximumFractionDigits: 2 }}\n {...(highlightedBucket !== undefined && {\n highlightedCategory: highlightedBucket,\n })}\n {...(showHighlightLine !== undefined && { showHighlightLine })}\n />\n )\n}\n"],"mappings":";;;;;;;;;;;;;AAqDA,SAAgB,mBAAmB,EACjC,MACA,MACA,aACA,mBACA,QACA,YACA,mBACA,mBACA,OACA,WACA,SAAS,KACT,iBAC0B;CAC1B,MAAM,YAAY,UAChB,cACI,YAAY,KAAK,IACjB,GAAGA,iBAAY,OAAO,KAAK,KAAkB;CAEnD,MAAM,UAAU,IAAI,IAA4B,UAAU;CAoC1D,OACE,oBAAC,gBAAD;EACQ;EACN,QAPW;GA9Bb;IACE,KAAK;IACL,OAAO,OAAO;IACd,OAAO;IACP,WAAW,MAAM,EAAE;GACrB;GACA;IACE,KAAK;IACL,OAAO,OAAO;IACd,OAAO;IACP,WAAW,MAAM,EAAE;GACrB;GACA;IACE,KAAK;IACL,OAAO,OAAO;IACd,OAAO;IACP,WAAW,MAAM,EAAE;GACrB;GACA,GAAI,OAAO,eAAe,KAAA,IACtB,CACE;IACE,KAAK;IACL,OAAO,OAAO;IACd,OAAO;IACP,WAAW,MACT,CAAC,KAAK,IAAI,GAAG,EAAE,cAAc,CAAC;GAClC,CACF,IACA,CAAC;EAEgB,EAAE,QACtB,MAAM,CAAC,QAAQ,IAAI,EAAE,GAA6B,CAMpC;EACb,cAAc,MAAM,EAAE;EACf;EACP,WAAW;EACH;EACG;EACX,aAAa;EACE;EACf,GAAK,qBAAqB,EACxB,wBAAwB,aACtB,kBAAkB,OAAO,QAAQ,CAAC,EACtC;EACA,aAAa;EACb,aAAa,EAAE,uBAAuB,EAAE;EACxC,GAAK,sBAAsB,KAAA,KAAa,EACtC,qBAAqB,kBACvB;EACA,GAAK,sBAAsB,KAAA,KAAa,EAAE,kBAAkB;CAC7D,CAAA;AAEL"}
@@ -0,0 +1,55 @@
1
+ "use client";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ let react_jsx_runtime = require("react/jsx-runtime");
4
+ let class_variance_authority = require("class-variance-authority");
5
+ let cnfast = require("cnfast");
6
+ //#region src/components/feed-in-hero.tsx
7
+ const FeedInHero = ({ className, ...rest }) => {
8
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
9
+ className: (0, cnfast.cn)("flex flex-col items-center gap-1 rounded-2xl border border-gray p-5 text-center", className),
10
+ ...rest
11
+ });
12
+ };
13
+ /**
14
+ * Label row above the value. Lays out children in a flex row with a small
15
+ * gap so a tooltip / icon can sit alongside the label text.
16
+ */
17
+ const FeedInHeroLabel = ({ className, ...rest }) => {
18
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
19
+ className: (0, cnfast.cn)("flex items-center gap-1.5 text-xs font-medium text-gray-light", className),
20
+ ...rest
21
+ });
22
+ };
23
+ const valueToneVariants = (0, class_variance_authority.cva)("text-4xl font-bold tabular-nums", {
24
+ variants: { tone: {
25
+ success: "text-success",
26
+ warning: "text-warning",
27
+ error: "text-error",
28
+ accent: "text-accent",
29
+ neutral: "text-gray"
30
+ } },
31
+ defaultVariants: { tone: "neutral" }
32
+ });
33
+ const FeedInHeroValue = ({ className, tone, ...rest }) => {
34
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
35
+ className: valueToneVariants({
36
+ tone,
37
+ className
38
+ }),
39
+ ...rest
40
+ });
41
+ };
42
+ /** Smaller-weight unit suffix that sits inline with the value (e.g. "W"). */
43
+ const FeedInHeroValueUnit = ({ className, ...rest }) => {
44
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
45
+ className: (0, cnfast.cn)("text-2xl font-semibold", className),
46
+ ...rest
47
+ });
48
+ };
49
+ //#endregion
50
+ exports.FeedInHero = FeedInHero;
51
+ exports.FeedInHeroLabel = FeedInHeroLabel;
52
+ exports.FeedInHeroValue = FeedInHeroValue;
53
+ exports.FeedInHeroValueUnit = FeedInHeroValueUnit;
54
+
55
+ //# sourceMappingURL=feed-in-hero.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feed-in-hero.cjs","names":[],"sources":["../../src/components/feed-in-hero.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority'\nimport type { Tone } from '../lib/tones'\nimport { cn } from '../utils/cn'\n\nconst FeedInHero = ({ className, ...rest }: React.ComponentProps<'div'>) => {\n return (\n <div\n className={cn(\n 'flex flex-col items-center gap-1 rounded-2xl border border-gray p-5 text-center',\n className,\n )}\n {...rest}\n />\n )\n}\n\n/**\n * Label row above the value. Lays out children in a flex row with a small\n * gap so a tooltip / icon can sit alongside the label text.\n */\nconst FeedInHeroLabel = ({\n className,\n ...rest\n}: React.ComponentProps<'div'>) => {\n return (\n <div\n className={cn(\n 'flex items-center gap-1.5 text-xs font-medium text-gray-light',\n className,\n )}\n {...rest}\n />\n )\n}\n\nconst valueToneVariants = cva('text-4xl font-bold tabular-nums', {\n variants: {\n tone: {\n success: 'text-success',\n warning: 'text-warning',\n error: 'text-error',\n accent: 'text-accent',\n neutral: 'text-gray',\n },\n },\n defaultVariants: {\n tone: 'neutral',\n },\n})\n\nconst FeedInHeroValue = ({\n className,\n tone,\n ...rest\n}: React.ComponentProps<'span'> & { tone?: Tone }) => {\n return <span className={valueToneVariants({ tone, className })} {...rest} />\n}\n\n/** Smaller-weight unit suffix that sits inline with the value (e.g. \"W\"). */\nconst FeedInHeroValueUnit = ({\n className,\n ...rest\n}: React.ComponentProps<'span'>) => {\n return <span className={cn('text-2xl font-semibold', className)} {...rest} />\n}\n\nexport { FeedInHero, FeedInHeroLabel, FeedInHeroValue, FeedInHeroValueUnit }\n"],"mappings":";;;;;;AAIA,MAAM,cAAc,EAAE,WAAW,GAAG,WAAwC;CAC1E,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,YAAA,GAAA,OAAA,IACE,mFACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;;;;;AAMA,MAAM,mBAAmB,EACvB,WACA,GAAG,WAC8B;CACjC,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,YAAA,GAAA,OAAA,IACE,iEACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,MAAM,qBAAA,GAAA,yBAAA,KAAwB,mCAAmC;CAC/D,UAAU,EACR,MAAM;EACJ,SAAS;EACT,SAAS;EACT,OAAO;EACP,QAAQ;EACR,SAAS;CACX,EACF;CACA,iBAAiB,EACf,MAAM,UACR;AACF,CAAC;AAED,MAAM,mBAAmB,EACvB,WACA,MACA,GAAG,WACiD;CACpD,OAAO,iBAAA,GAAA,kBAAA,KAAC,QAAD;EAAM,WAAW,kBAAkB;GAAE;GAAM;EAAU,CAAC;EAAG,GAAI;CAAO,CAAA;AAC7E;;AAGA,MAAM,uBAAuB,EAC3B,WACA,GAAG,WAC+B;CAClC,OAAO,iBAAA,GAAA,kBAAA,KAAC,QAAD;EAAM,YAAA,GAAA,OAAA,IAAc,0BAA0B,SAAS;EAAG,GAAI;CAAO,CAAA;AAC9E"}
@@ -0,0 +1,32 @@
1
+ "use client";
2
+
3
+ import { Tone } from "../lib/tones.cjs";
4
+
5
+ //#region src/components/feed-in-hero.d.ts
6
+ declare const FeedInHero: ({
7
+ className,
8
+ ...rest
9
+ }: React.ComponentProps<"div">) => import("react/jsx-runtime").JSX.Element;
10
+ /**
11
+ * Label row above the value. Lays out children in a flex row with a small
12
+ * gap so a tooltip / icon can sit alongside the label text.
13
+ */
14
+ declare const FeedInHeroLabel: ({
15
+ className,
16
+ ...rest
17
+ }: React.ComponentProps<"div">) => import("react/jsx-runtime").JSX.Element;
18
+ declare const FeedInHeroValue: ({
19
+ className,
20
+ tone,
21
+ ...rest
22
+ }: React.ComponentProps<"span"> & {
23
+ tone?: Tone;
24
+ }) => import("react/jsx-runtime").JSX.Element;
25
+ /** Smaller-weight unit suffix that sits inline with the value (e.g. "W"). */
26
+ declare const FeedInHeroValueUnit: ({
27
+ className,
28
+ ...rest
29
+ }: React.ComponentProps<"span">) => import("react/jsx-runtime").JSX.Element;
30
+ //#endregion
31
+ export { FeedInHero, FeedInHeroLabel, FeedInHeroValue, FeedInHeroValueUnit };
32
+ //# sourceMappingURL=feed-in-hero.d.cts.map
@@ -0,0 +1,32 @@
1
+ "use client";
2
+
3
+ import { Tone } from "../lib/tones.js";
4
+
5
+ //#region src/components/feed-in-hero.d.ts
6
+ declare const FeedInHero: ({
7
+ className,
8
+ ...rest
9
+ }: React.ComponentProps<"div">) => import("react/jsx-runtime").JSX.Element;
10
+ /**
11
+ * Label row above the value. Lays out children in a flex row with a small
12
+ * gap so a tooltip / icon can sit alongside the label text.
13
+ */
14
+ declare const FeedInHeroLabel: ({
15
+ className,
16
+ ...rest
17
+ }: React.ComponentProps<"div">) => import("react/jsx-runtime").JSX.Element;
18
+ declare const FeedInHeroValue: ({
19
+ className,
20
+ tone,
21
+ ...rest
22
+ }: React.ComponentProps<"span"> & {
23
+ tone?: Tone;
24
+ }) => import("react/jsx-runtime").JSX.Element;
25
+ /** Smaller-weight unit suffix that sits inline with the value (e.g. "W"). */
26
+ declare const FeedInHeroValueUnit: ({
27
+ className,
28
+ ...rest
29
+ }: React.ComponentProps<"span">) => import("react/jsx-runtime").JSX.Element;
30
+ //#endregion
31
+ export { FeedInHero, FeedInHeroLabel, FeedInHeroValue, FeedInHeroValueUnit };
32
+ //# sourceMappingURL=feed-in-hero.d.ts.map