@epilot/spark-ui 0.19.0 → 0.20.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 (275) hide show
  1. package/dist/components/accordion.cjs +2 -2
  2. package/dist/components/accordion.d.ts +1 -1
  3. package/dist/components/accordion.js +1 -1
  4. package/dist/components/alert-dialog.cjs +1 -1
  5. package/dist/components/alert-dialog.js +1 -1
  6. package/dist/components/attachment.d.cts +2 -2
  7. package/dist/components/attachment.d.ts +2 -2
  8. package/dist/components/autocomplete.cjs +1 -1
  9. package/dist/components/autocomplete.js +1 -1
  10. package/dist/components/avatar.cjs +1 -1
  11. package/dist/components/avatar.cjs.map +1 -1
  12. package/dist/components/avatar.js +1 -1
  13. package/dist/components/avatar.js.map +1 -1
  14. package/dist/components/badge.cjs +1 -1
  15. package/dist/components/badge.cjs.map +1 -1
  16. package/dist/components/badge.d.cts +2 -1
  17. package/dist/components/badge.d.ts +2 -1
  18. package/dist/components/badge.js +1 -1
  19. package/dist/components/badge.js.map +1 -1
  20. package/dist/components/{energy-bar-chart.cjs → bar-chart-with-total.cjs} +4 -4
  21. package/dist/components/bar-chart-with-total.cjs.map +1 -0
  22. package/dist/components/bar-chart-with-total.d.cts +19 -0
  23. package/dist/components/bar-chart-with-total.d.ts +19 -0
  24. package/dist/components/{energy-bar-chart.js → bar-chart-with-total.js} +4 -4
  25. package/dist/components/bar-chart-with-total.js.map +1 -0
  26. package/dist/components/bubble.d.cts +1 -1
  27. package/dist/components/bubble.d.ts +1 -1
  28. package/dist/components/button-group.cjs +2 -2
  29. package/dist/components/button-group.cjs.map +1 -1
  30. package/dist/components/button-group.d.cts +1 -1
  31. package/dist/components/button-group.d.ts +1 -1
  32. package/dist/components/button-group.js +2 -2
  33. package/dist/components/button-group.js.map +1 -1
  34. package/dist/components/button.cjs +6 -4
  35. package/dist/components/button.cjs.map +1 -1
  36. package/dist/components/button.d.cts +6 -5
  37. package/dist/components/button.d.ts +6 -5
  38. package/dist/components/button.js +6 -4
  39. package/dist/components/button.js.map +1 -1
  40. package/dist/components/calendar.cjs +3 -3
  41. package/dist/components/calendar.cjs.map +1 -1
  42. package/dist/components/calendar.js +3 -3
  43. package/dist/components/calendar.js.map +1 -1
  44. package/dist/components/callout.cjs +11 -11
  45. package/dist/components/callout.cjs.map +1 -1
  46. package/dist/components/callout.d.ts +1 -1
  47. package/dist/components/callout.js +11 -11
  48. package/dist/components/callout.js.map +1 -1
  49. package/dist/components/checkbox.cjs +1 -1
  50. package/dist/components/checkbox.cjs.map +1 -1
  51. package/dist/components/checkbox.js +1 -1
  52. package/dist/components/checkbox.js.map +1 -1
  53. package/dist/components/circular-gauge.cjs +7 -7
  54. package/dist/components/circular-gauge.cjs.map +1 -1
  55. package/dist/components/circular-gauge.js +7 -7
  56. package/dist/components/circular-gauge.js.map +1 -1
  57. package/dist/components/day-of-week-picker.cjs +21 -41
  58. package/dist/components/day-of-week-picker.cjs.map +1 -1
  59. package/dist/components/day-of-week-picker.d.cts +19 -23
  60. package/dist/components/day-of-week-picker.d.ts +19 -23
  61. package/dist/components/day-of-week-picker.js +21 -41
  62. package/dist/components/day-of-week-picker.js.map +1 -1
  63. package/dist/components/dialog.cjs +1 -1
  64. package/dist/components/dialog.js +1 -1
  65. package/dist/components/dropdown-menu.cjs +1 -1
  66. package/dist/components/dropdown-menu.js +1 -1
  67. package/dist/components/empty-state.d.ts +1 -1
  68. package/dist/components/{device-card.cjs → entity-card.cjs} +31 -31
  69. package/dist/components/entity-card.cjs.map +1 -0
  70. package/dist/components/{device-card.d.cts → entity-card.d.cts} +15 -15
  71. package/dist/components/{device-card.d.ts → entity-card.d.ts} +16 -16
  72. package/dist/components/{device-card.js → entity-card.js} +20 -20
  73. package/dist/components/entity-card.js.map +1 -0
  74. package/dist/components/{feed-in-hero.cjs → hero-metric.cjs} +10 -15
  75. package/dist/components/hero-metric.cjs.map +1 -0
  76. package/dist/components/hero-metric.d.cts +27 -0
  77. package/dist/components/hero-metric.d.ts +27 -0
  78. package/dist/components/{feed-in-hero.js → hero-metric.js} +7 -12
  79. package/dist/components/hero-metric.js.map +1 -0
  80. package/dist/components/info-block.d.cts +1 -1
  81. package/dist/components/info-block.d.ts +1 -1
  82. package/dist/components/input-date.cjs +1 -1
  83. package/dist/components/input-date.js +1 -1
  84. package/dist/components/input-otp.cjs +1 -1
  85. package/dist/components/input-otp.js +1 -1
  86. package/dist/components/input.cjs +1 -1
  87. package/dist/components/input.js +1 -1
  88. package/dist/components/line-chart.cjs +1 -1
  89. package/dist/components/line-chart.js +1 -1
  90. package/dist/components/marker.d.cts +1 -1
  91. package/dist/components/marker.d.ts +1 -1
  92. package/dist/components/message-scroller.cjs +3 -3
  93. package/dist/components/message-scroller.js +3 -3
  94. package/dist/components/number-flow.d.cts +12 -2
  95. package/dist/components/number-flow.d.ts +12 -2
  96. package/dist/components/page-header.cjs +1 -1
  97. package/dist/components/page-header.js +1 -1
  98. package/dist/components/period-tabs.cjs +2 -22
  99. package/dist/components/period-tabs.cjs.map +1 -1
  100. package/dist/components/period-tabs.d.cts +5 -22
  101. package/dist/components/period-tabs.d.ts +5 -22
  102. package/dist/components/period-tabs.js +2 -22
  103. package/dist/components/period-tabs.js.map +1 -1
  104. package/dist/components/pill.cjs +3 -3
  105. package/dist/components/pill.cjs.map +1 -1
  106. package/dist/components/pill.js +3 -3
  107. package/dist/components/pill.js.map +1 -1
  108. package/dist/components/progress.cjs +1 -1
  109. package/dist/components/progress.cjs.map +1 -1
  110. package/dist/components/progress.js +1 -1
  111. package/dist/components/progress.js.map +1 -1
  112. package/dist/components/radio.cjs +1 -1
  113. package/dist/components/radio.cjs.map +1 -1
  114. package/dist/components/radio.js +1 -1
  115. package/dist/components/radio.js.map +1 -1
  116. package/dist/components/sankey-chart.cjs +1 -11
  117. package/dist/components/sankey-chart.cjs.map +1 -1
  118. package/dist/components/sankey-chart.d.cts +2 -3
  119. package/dist/components/sankey-chart.d.ts +2 -3
  120. package/dist/components/sankey-chart.js +2 -11
  121. package/dist/components/sankey-chart.js.map +1 -1
  122. package/dist/components/schedule-list.cjs +1 -1
  123. package/dist/components/schedule-list.js +1 -1
  124. package/dist/components/segmented-control.cjs +2 -2
  125. package/dist/components/segmented-control.cjs.map +1 -1
  126. package/dist/components/segmented-control.js +2 -2
  127. package/dist/components/segmented-control.js.map +1 -1
  128. package/dist/components/select.cjs +33 -3
  129. package/dist/components/select.cjs.map +1 -1
  130. package/dist/components/select.d.cts +11 -1
  131. package/dist/components/select.d.ts +11 -1
  132. package/dist/components/select.js +32 -4
  133. package/dist/components/select.js.map +1 -1
  134. package/dist/components/sheet.cjs +1 -1
  135. package/dist/components/sheet.js +1 -1
  136. package/dist/components/stepper.cjs +2 -2
  137. package/dist/components/stepper.cjs.map +1 -1
  138. package/dist/components/stepper.d.cts +4 -4
  139. package/dist/components/stepper.d.ts +4 -4
  140. package/dist/components/stepper.js +2 -2
  141. package/dist/components/stepper.js.map +1 -1
  142. package/dist/components/table.cjs +1 -1
  143. package/dist/components/table.js +1 -1
  144. package/dist/components/tabs.cjs +1 -1
  145. package/dist/components/tabs.js +1 -1
  146. package/dist/components/textarea.cjs +1 -1
  147. package/dist/components/textarea.js +1 -1
  148. package/dist/components/toast.cjs +1 -1
  149. package/dist/components/toast.js +1 -1
  150. package/dist/components/tooltip.cjs +2 -2
  151. package/dist/components/tooltip.cjs.map +1 -1
  152. package/dist/components/tooltip.js +2 -2
  153. package/dist/components/tooltip.js.map +1 -1
  154. package/dist/components/typography.cjs +1 -1
  155. package/dist/components/typography.cjs.map +1 -1
  156. package/dist/components/typography.d.cts +4 -1
  157. package/dist/components/typography.d.ts +4 -1
  158. package/dist/components/typography.js +1 -1
  159. package/dist/components/typography.js.map +1 -1
  160. package/dist/components/wizard-layout.cjs +57 -0
  161. package/dist/components/wizard-layout.cjs.map +1 -0
  162. package/dist/components/wizard-layout.d.cts +34 -0
  163. package/dist/components/wizard-layout.d.ts +34 -0
  164. package/dist/components/wizard-layout.js +50 -0
  165. package/dist/components/wizard-layout.js.map +1 -0
  166. package/dist/lib/accent-colors.cjs +4 -1
  167. package/dist/lib/accent-colors.cjs.map +1 -1
  168. package/dist/lib/accent-colors.d.cts +1 -1
  169. package/dist/lib/accent-colors.d.ts +1 -1
  170. package/dist/lib/accent-colors.js +4 -1
  171. package/dist/lib/accent-colors.js.map +1 -1
  172. package/dist/lib/accent-theme.cjs +2 -2
  173. package/dist/lib/accent-theme.cjs.map +1 -1
  174. package/dist/lib/accent-theme.js +2 -2
  175. package/dist/lib/accent-theme.js.map +1 -1
  176. package/dist/styles/index.css +1 -1
  177. package/dist/styles/spark-default.css +49 -314
  178. package/dist/styles/theme.css +52 -6
  179. package/dist/utils/format.cjs +0 -13
  180. package/dist/utils/format.cjs.map +1 -1
  181. package/dist/utils/format.d.cts +1 -7
  182. package/dist/utils/format.d.ts +1 -7
  183. package/dist/utils/format.js +1 -12
  184. package/dist/utils/format.js.map +1 -1
  185. package/package.json +1 -1
  186. package/dist/components/battery-progress-row.cjs +0 -135
  187. package/dist/components/battery-progress-row.cjs.map +0 -1
  188. package/dist/components/battery-progress-row.d.cts +0 -69
  189. package/dist/components/battery-progress-row.d.ts +0 -69
  190. package/dist/components/battery-progress-row.js +0 -125
  191. package/dist/components/battery-progress-row.js.map +0 -1
  192. package/dist/components/device-card.cjs.map +0 -1
  193. package/dist/components/device-card.js.map +0 -1
  194. package/dist/components/energy-bar-chart.cjs.map +0 -1
  195. package/dist/components/energy-bar-chart.d.cts +0 -43
  196. package/dist/components/energy-bar-chart.d.ts +0 -43
  197. package/dist/components/energy-bar-chart.js.map +0 -1
  198. package/dist/components/energy-breakdown.cjs +0 -80
  199. package/dist/components/energy-breakdown.cjs.map +0 -1
  200. package/dist/components/energy-breakdown.d.cts +0 -24
  201. package/dist/components/energy-breakdown.d.ts +0 -24
  202. package/dist/components/energy-breakdown.js +0 -79
  203. package/dist/components/energy-breakdown.js.map +0 -1
  204. package/dist/components/energy-history-chart.cjs +0 -63
  205. package/dist/components/energy-history-chart.cjs.map +0 -1
  206. package/dist/components/energy-history-chart.d.cts +0 -64
  207. package/dist/components/energy-history-chart.d.ts +0 -64
  208. package/dist/components/energy-history-chart.js +0 -62
  209. package/dist/components/energy-history-chart.js.map +0 -1
  210. package/dist/components/feed-in-hero.cjs.map +0 -1
  211. package/dist/components/feed-in-hero.d.cts +0 -32
  212. package/dist/components/feed-in-hero.d.ts +0 -32
  213. package/dist/components/feed-in-hero.js.map +0 -1
  214. package/dist/components/metering-row.cjs +0 -59
  215. package/dist/components/metering-row.cjs.map +0 -1
  216. package/dist/components/metering-row.d.cts +0 -31
  217. package/dist/components/metering-row.d.ts +0 -31
  218. package/dist/components/metering-row.js +0 -55
  219. package/dist/components/metering-row.js.map +0 -1
  220. package/dist/components/money-saved-block.cjs +0 -83
  221. package/dist/components/money-saved-block.cjs.map +0 -1
  222. package/dist/components/money-saved-block.d.cts +0 -55
  223. package/dist/components/money-saved-block.d.ts +0 -55
  224. package/dist/components/money-saved-block.js +0 -76
  225. package/dist/components/money-saved-block.js.map +0 -1
  226. package/dist/components/on-off-button.cjs +0 -32
  227. package/dist/components/on-off-button.cjs.map +0 -1
  228. package/dist/components/on-off-button.d.cts +0 -18
  229. package/dist/components/on-off-button.d.ts +0 -18
  230. package/dist/components/on-off-button.js +0 -31
  231. package/dist/components/on-off-button.js.map +0 -1
  232. package/dist/components/onboarding-layout.cjs +0 -67
  233. package/dist/components/onboarding-layout.cjs.map +0 -1
  234. package/dist/components/onboarding-layout.d.cts +0 -44
  235. package/dist/components/onboarding-layout.d.ts +0 -44
  236. package/dist/components/onboarding-layout.js +0 -60
  237. package/dist/components/onboarding-layout.js.map +0 -1
  238. package/dist/components/power-history-chart.cjs +0 -498
  239. package/dist/components/power-history-chart.cjs.map +0 -1
  240. package/dist/components/power-history-chart.d.cts +0 -71
  241. package/dist/components/power-history-chart.d.ts +0 -71
  242. package/dist/components/power-history-chart.js +0 -496
  243. package/dist/components/power-history-chart.js.map +0 -1
  244. package/dist/components/power-history.cjs +0 -114
  245. package/dist/components/power-history.cjs.map +0 -1
  246. package/dist/components/power-history.d.cts +0 -40
  247. package/dist/components/power-history.d.ts +0 -41
  248. package/dist/components/power-history.js +0 -114
  249. package/dist/components/power-history.js.map +0 -1
  250. package/dist/components/power-network.cjs +0 -559
  251. package/dist/components/power-network.cjs.map +0 -1
  252. package/dist/components/power-network.d.cts +0 -80
  253. package/dist/components/power-network.d.ts +0 -80
  254. package/dist/components/power-network.js +0 -553
  255. package/dist/components/power-network.js.map +0 -1
  256. package/dist/components/smart-toggle-button.cjs +0 -24
  257. package/dist/components/smart-toggle-button.cjs.map +0 -1
  258. package/dist/components/smart-toggle-button.d.cts +0 -16
  259. package/dist/components/smart-toggle-button.d.ts +0 -16
  260. package/dist/components/smart-toggle-button.js +0 -23
  261. package/dist/components/smart-toggle-button.js.map +0 -1
  262. package/dist/components/solar-forecast-chart.cjs +0 -108
  263. package/dist/components/solar-forecast-chart.cjs.map +0 -1
  264. package/dist/components/solar-forecast-chart.d.cts +0 -77
  265. package/dist/components/solar-forecast-chart.d.ts +0 -77
  266. package/dist/components/solar-forecast-chart.js +0 -103
  267. package/dist/components/solar-forecast-chart.js.map +0 -1
  268. package/dist/number-flow-Bch81ixZ.d.cts +0 -14
  269. package/dist/number-flow-Bch81ixZ.d.ts +0 -14
  270. package/dist/utils/build-sankey-nodes.cjs +0 -72
  271. package/dist/utils/build-sankey-nodes.cjs.map +0 -1
  272. package/dist/utils/build-sankey-nodes.d.cts +0 -27
  273. package/dist/utils/build-sankey-nodes.d.ts +0 -27
  274. package/dist/utils/build-sankey-nodes.js +0 -71
  275. package/dist/utils/build-sankey-nodes.js.map +0 -1
@@ -44,104 +44,36 @@
44
44
  --spark-indicator: #005eb4;
45
45
  --spark-track: #005eb4;
46
46
 
47
- /* The colour axis (Button color="neutral"|"danger"|"success"|"warning"),
48
- generated the same way as --spark-* above: generateRadixColors() seeded with
49
- the brand hex, which the generator pins at step 9. Radix's stock step 9
50
- (#e5484d/#30a46c/#f76b15) is too light to carry white text (WCAG 2.97-3.91),
51
- and dark ink on it clears WCAG only by exploiting its blind spot for
52
- saturated mid-tones (APCA Lc 38-46, under the ~60 body-text floor). Seeding
53
- the generator with a darker step 9 satisfies both metrics (WCAG 4.68-5.55,
54
- Lc 77-82) and re-derives 1-8/11-12 and every alpha step around it, so the
55
- ramp stays internally consistent -- aN still composites to step N over the
56
- canvas. -surface stays step 2, the static families' convention (see
57
- neutralSparkVars in accent-theme.ts), not the generator's translucent
58
- surface. Declared per appearance because Radix's `<scale>.css` and
59
- `<scale>-dark.css` sit in this same layer. --neutral-* is untouched: it
60
- tracks the neutral knob. spark-default-parity.test.ts re-derives every value
61
- below from the same generator call, so drift fails the suite. */
62
- --red-1: #fffcfc;
63
- --red-2: #fff7f6;
64
- --red-3: #ffebe8;
65
- --red-4: #ffdbd5;
66
- --red-5: #ffcdc5;
67
- --red-6: #ffbcb4;
68
- --red-7: #f8a89e;
69
- --red-8: #f08d82;
70
- --red-9: #cf161c;
71
- --red-10: #be0006;
72
- --red-11: #be0006;
73
- --red-12: #671512;
74
- --red-a1: #ff000003;
75
- --red-a2: #ff1d0009;
76
- --red-a3: #ff220017;
77
- --red-a4: #ff25002a;
78
- --red-a5: #ff24003a;
79
- --red-a6: #ff1c014b;
80
- --red-a7: #ed1b0061;
81
- --red-a8: #e117007d;
82
- --red-a9: #cb0007e9;
83
- --red-a10: #be0006;
84
- --red-a11: #be0006;
85
- --red-a12: #5b0300ed;
47
+ /* Solid danger/success/warning fills only. Radix keeps --red/green/orange-*
48
+ (charts, tints, text), including steps 9/10. Its step 9 is too light for
49
+ white label text, and dark ink on it fails APCA, so solid style recipes
50
+ read these dedicated tokens instead of remapping --spark-9/10. */
51
+ --red-solid: #cf161c;
52
+ --red-solid-hover: #be0006;
86
53
  --red-contrast: #fff;
87
54
  --red-on-solid: #fff;
88
55
  --red-surface: var(--red-2);
89
56
 
90
- --green-1: #fbfefc;
91
- --green-2: #f5fbf7;
92
- --green-3: #e7f6ec;
93
- --green-4: #d8f0e0;
94
- --green-5: #c7e8d2;
95
- --green-6: #b2dcc0;
96
- --green-7: #94cca8;
97
- --green-8: #69b787;
98
- --green-9: #147a49;
99
- --green-10: #006b3c;
100
- --green-11: #007040;
101
- --green-12: #203a2a;
102
- --green-a1: #00c04004;
103
- --green-a2: #0099330a;
104
- --green-a3: #00a03618;
105
- --green-a4: #009d3527;
106
- --green-a5: #00973338;
107
- --green-a6: #008c2f4d;
108
- --green-a7: #0186306b;
109
- --green-a8: #00853396;
110
- --green-a9: #006f3aeb;
111
- --green-a10: #006b3c;
112
- --green-a11: #007040;
113
- --green-a12: #001e0cdf;
57
+ --green-solid: #147a49;
58
+ --green-solid-hover: #006b3c;
114
59
  --green-contrast: #fff;
115
60
  --green-on-solid: #fff;
116
61
  --green-surface: var(--green-2);
117
62
 
118
- --orange-1: #fefcfb;
119
- --orange-2: #fff6f2;
120
- --orange-3: #ffebe2;
121
- --orange-4: #ffd8c3;
122
- --orange-5: #ffc9af;
123
- --orange-6: #ffbca0;
124
- --orange-7: #f5ab8d;
125
- --orange-8: #ea936f;
126
- --orange-9: #c84c00;
127
- --orange-10: #b93d00;
128
- --orange-11: #ab3000;
129
- --orange-12: #562e1e;
130
- --orange-a1: #c0400004;
131
- --orange-a2: #ff4f000d;
132
- --orange-a3: #ff50001d;
133
- --orange-a4: #ff5a003c;
134
- --orange-a5: #ff530050;
135
- --orange-a6: #ff4c005f;
136
- --orange-a7: #e9440072;
137
- --orange-a8: #da400090;
138
- --orange-a9: #c84c00;
139
- --orange-a10: #b93d00;
140
- --orange-a11: #ab3000;
141
- --orange-a12: #401200e1;
63
+ --orange-solid: #c84c00;
64
+ --orange-solid-hover: #b93d00;
142
65
  --orange-contrast: #fff;
143
66
  --orange-on-solid: #fff;
144
67
  --orange-surface: var(--orange-2);
68
+ /* Stock Radix light step 11 / a11 clears ~4.5:1 on pure white but fails on
69
+ soft fills (a3/a4 hover) — soft status chrome, warning-light, callout soft
70
+ actions. Keep the rest of the Radix ramp; darken ink only. */
71
+ --red-11: #be0006;
72
+ --red-a11: #be0006;
73
+ --green-11: #007040;
74
+ --green-a11: #007040;
75
+ --orange-11: #ab3000;
76
+ --orange-a11: #ab3000;
145
77
  /* Solid-fill ink per neutral family, so [data-neutral-color] swaps the ink
146
78
  with the ramp. Light step 9 is a desaturated mid-grey, where no ink
147
79
  satisfies both metrics: white reads best at APCA Lc 65.9-66.5 but only
@@ -222,82 +154,6 @@
222
154
  --spark-background: #ffffff;
223
155
  --spark-indicator: oklch(48.6% 0.1556 254.2);
224
156
  --spark-track: oklch(48.6% 0.1556 254.2);
225
-
226
- /* Colour axis, wide-gamut twin (light). */
227
- --red-1: oklch(99.4% 0.0033 27.27);
228
- --red-2: oklch(98.3% 0.0088 27.27);
229
- --red-3: oklch(95.6% 0.0226 27.27);
230
- --red-4: oklch(92.8% 0.0508 27.27);
231
- --red-5: oklch(89.6% 0.0666 27.27);
232
- --red-6: oklch(85.7% 0.0802 27.27);
233
- --red-7: oklch(80.7% 0.0963 27.27);
234
- --red-8: oklch(74.5% 0.1219 27.27);
235
- --red-9: oklch(54.4% 0.2125 27.27);
236
- --red-10: oklch(49.8% 0.2125 27.27);
237
- --red-11: oklch(49.9% 0.2125 27.27);
238
- --red-12: oklch(33.9% 0.1158 27.27);
239
- --red-a1: color(display-p3 0.6745 0.0235 0.0235 / 0.012);
240
- --red-a2: color(display-p3 0.8941 0.1294 0.0235 / 0.036);
241
- --red-a3: color(display-p3 0.8667 0.1451 0.0118 / 0.087);
242
- --red-a4: color(display-p3 0.8549 0.149 0.0039 / 0.161);
243
- --red-a5: color(display-p3 0.8588 0.1451 0.0039 / 0.22);
244
- --red-a6: color(display-p3 0.8667 0.1294 0.0039 / 0.287);
245
- --red-a7: color(display-p3 0.8 0.1098 0.0039 / 0.369);
246
- --red-a8: color(display-p3 0.7608 0.102 0.0039 / 0.475);
247
- --red-a9: color(display-p3 0.6941 0.0275 0 / 0.84);
248
- --red-a10: color(display-p3 0.6471 0.0392 0 / 0.899);
249
- --red-a11: color(display-p3 0.6471 0.0039 0 / 0.899);
250
- --red-a12: color(display-p3 0.3059 0.0235 0 / 0.91);
251
-
252
- --green-1: oklch(99.4% 0.0041 156);
253
- --green-2: oklch(98.2% 0.0081 156);
254
- --green-3: oklch(95.9% 0.0205 156);
255
- --green-4: oklch(93.3% 0.0326 156);
256
- --green-5: oklch(90% 0.0451 156);
257
- --green-6: oklch(85.7% 0.0592 156);
258
- --green-7: oklch(79.8% 0.0776 156);
259
- --green-8: oklch(71.5% 0.1046 156);
260
- --green-9: oklch(51.2% 0.1175 156);
261
- --green-10: oklch(46.3% 0.1175 156);
262
- --green-11: oklch(48% 0.1175 156);
263
- --green-12: oklch(32.3% 0.0436 156);
264
- --green-a1: color(display-p3 0.0235 0.6745 0.0235 / 0.012);
265
- --green-a2: color(display-p3 0.0235 0.5647 0.1294 / 0.036);
266
- --green-a3: color(display-p3 0.0078 0.5765 0.1529 / 0.083);
267
- --green-a4: color(display-p3 0.0078 0.5333 0.1255 / 0.134);
268
- --green-a5: color(display-p3 0.0078 0.5255 0.1451 / 0.197);
269
- --green-a6: color(display-p3 0.0039 0.4824 0.1176 / 0.271);
270
- --green-a7: color(display-p3 0.0039 0.4431 0.1176 / 0.373);
271
- --green-a8: color(display-p3 0 0.4353 0.1176 / 0.514);
272
- --green-a9: color(display-p3 0 0.3176 0.102 / 0.777);
273
- --green-a10: color(display-p3 0 0.2863 0.0902 / 0.824);
274
- --green-a11: color(display-p3 0 0.3098 0.1059 / 0.816);
275
- --green-a12: color(display-p3 0 0.0863 0.0235 / 0.851);
276
-
277
- --orange-1: oklch(99.2% 0.0025 42.62);
278
- --orange-2: oklch(98% 0.0121 42.62);
279
- --orange-3: oklch(95.7% 0.0294 42.62);
280
- --orange-4: oklch(92.1% 0.0654 42.62);
281
- --orange-5: oklch(89.1% 0.0867 42.62);
282
- --orange-6: oklch(85.6% 0.0924 42.62);
283
- --orange-7: oklch(80.5% 0.0978 42.62);
284
- --orange-8: oklch(74.4% 0.117 42.62);
285
- --orange-9: oklch(57.6% 0.172 42.62);
286
- --orange-10: oklch(53.2% 0.172 42.62);
287
- --orange-11: oklch(49.4% 0.1707 41.39);
288
- --orange-12: oklch(34.9% 0.0649 42.62);
289
- --orange-a1: color(display-p3 0.7569 0.2667 0.0235 / 0.016);
290
- --orange-a2: color(display-p3 0.8392 0.2667 0.0235 / 0.048);
291
- --orange-a3: color(display-p3 0.8941 0.3255 0.0039 / 0.11);
292
- --orange-a4: color(display-p3 0.898 0.3373 0.0039 / 0.224);
293
- --orange-a5: color(display-p3 0.898 0.3176 0.0039 / 0.299);
294
- --orange-a6: color(display-p3 0.8902 0.298 0.0039 / 0.357);
295
- --orange-a7: color(display-p3 0.8078 0.2588 0.0039 / 0.428);
296
- --orange-a8: color(display-p3 0.7608 0.2431 0 / 0.538);
297
- --orange-a9: color(display-p3 0.6863 0.2314 0 / 0.871);
298
- --orange-a10: color(display-p3 0.6314 0.1843 0 / 0.891);
299
- --orange-a11: color(display-p3 0.6196 0.2275 0);
300
- --orange-a12: color(display-p3 0.2157 0.0667 0 / 0.871);
301
157
  }
302
158
  }
303
159
  }
@@ -337,90 +193,30 @@
337
193
  --spark-indicator: #005eb4;
338
194
  --spark-track: #005eb4;
339
195
 
340
- /* Colour axis, dark twin -- see the light block above. */
341
- --red-1: #000;
342
- --red-2: #1c0a09;
343
- --red-3: #400103;
344
- --red-4: #5a0000;
345
- --red-5: #6f0000;
346
- --red-6: #840003;
347
- --red-7: #a00f13;
348
- --red-8: #cf151c;
349
- --red-9: #cf161c;
350
- --red-10: #be0006;
351
- --red-11: #ff9083;
352
- --red-12: #ffcdc4;
353
- --red-a1: #00000000;
354
- --red-a2: #ff5c521c;
355
- --red-a3: #ff040c40;
356
- --red-a4: #ff00005a;
357
- --red-a5: #ff00006f;
358
- --red-a6: #ff000684;
359
- --red-a7: #ff181fa0;
360
- --red-a8: #ff1a23cf;
361
- --red-a9: #ff1b23cf;
362
- --red-a10: #ff0008be;
363
- --red-a11: #ff9083;
364
- --red-a12: #ffcdc4;
196
+ --red-solid: #cf161c;
197
+ --red-solid-hover: #be0006;
365
198
  --red-contrast: #fff;
366
199
  --red-on-solid: #fff;
367
200
  --red-surface: var(--red-2);
368
201
 
369
- --green-1: #000;
370
- --green-2: #0b140e;
371
- --green-3: #0f291a;
372
- --green-4: #0a3a22;
373
- --green-5: #0f492b;
374
- --green-6: #155936;
375
- --green-7: #1a6a41;
376
- --green-8: #1b7e4d;
377
- --green-9: #147a49;
378
- --green-10: #196940;
379
- --green-11: #74ce97;
380
- --green-12: #aaf4c5;
381
- --green-a1: #00000000;
382
- --green-a2: #8dffb314;
383
- --green-a3: #5effa229;
384
- --green-a4: #2cff963a;
385
- --green-a5: #35ff9749;
386
- --green-a6: #3dff9b59;
387
- --green-a7: #3fff9d6a;
388
- --green-a8: #37ff9c7e;
389
- --green-a9: #2aff997a;
390
- --green-a10: #3dff9c69;
391
- --green-a11: #90ffbbce;
392
- --green-a12: #b2ffcef4;
202
+ --green-solid: #147a49;
203
+ --green-solid-hover: #196940;
393
204
  --green-contrast: #fff;
394
205
  --green-on-solid: #fff;
395
206
  --green-surface: var(--green-2);
396
207
 
397
- --orange-1: #000;
398
- --orange-2: #190e09;
399
- --orange-3: #391000;
400
- --orange-4: #530900;
401
- --orange-5: #651100;
402
- --orange-6: #771f00;
403
- --orange-7: #903000;
404
- --orange-8: #bb3f00;
405
- --orange-9: #c84c00;
406
- --orange-10: #b93d00;
407
- --orange-11: #ff9564;
408
- --orange-12: #ffd2be;
409
- --orange-a1: #00000000;
410
- --orange-a2: #ff8f5c19;
411
- --orange-a3: #ff480039;
412
- --orange-a4: #ff1c0053;
413
- --orange-a5: #ff2b0065;
414
- --orange-a6: #ff430077;
415
- --orange-a7: #ff550090;
416
- --orange-a8: #ff5600bb;
417
- --orange-a9: #ff6100c8;
418
- --orange-a10: #ff5400b9;
419
- --orange-a11: #ff9564;
420
- --orange-a12: #ffd2be;
208
+ --orange-solid: #c84c00;
209
+ --orange-solid-hover: #b93d00;
421
210
  --orange-contrast: #fff;
422
211
  --orange-on-solid: #fff;
423
212
  --orange-surface: var(--orange-2);
213
+ /* Re-assert Radix dark step 11 so light-mode AA ink on :root does not win. */
214
+ --red-11: #ff9592;
215
+ --red-a11: #ff9592;
216
+ --green-11: #3dd68c;
217
+ --green-a11: #46fea5d4;
218
+ --orange-11: #ffa057;
219
+ --orange-a11: #ffa057;
424
220
  /* Dark step 9 takes white on both metrics (WCAG 5.08-5.18, APCA 80.5-81.0);
425
221
  step 12 loses on both (4.38-4.46, 69.2-69.8). No trade-off here. */
426
222
  --slate-contrast: #fff;
@@ -492,82 +288,6 @@
492
288
  --spark-background: #000;
493
289
  --spark-indicator: oklch(48.6% 0.1556 254.2);
494
290
  --spark-track: oklch(48.6% 0.1556 254.2);
495
-
496
- /* Colour axis, wide-gamut twin (dark). */
497
- --red-1: oklch(0% 0.0193 27.27);
498
- --red-2: oklch(17.3% 0.0312 27.27);
499
- --red-3: oklch(23.5% 0.0933 27.27);
500
- --red-4: oklch(28.1% 0.1391 27.27);
501
- --red-5: oklch(32.7% 0.1546 27.27);
502
- --red-6: oklch(38% 0.1615 27.27);
503
- --red-7: oklch(44.9% 0.175 27.27);
504
- --red-8: oklch(54.3% 0.2125 27.27);
505
- --red-9: oklch(54.4% 0.2125 27.27);
506
- --red-10: oklch(49.8% 0.2125 27.27);
507
- --red-11: oklch(78.4% 0.2125 27.27);
508
- --red-12: oklch(90.2% 0.0766 27.27);
509
- --red-a1: color(display-p3 0 0 0 / 0);
510
- --red-a2: color(display-p3 1 0.4235 0.3882 / 0.102);
511
- --red-a3: color(display-p3 1 0.1216 0.1059 / 0.228);
512
- --red-a4: color(display-p3 1 0.1373 0.0745 / 0.322);
513
- --red-a5: color(display-p3 1 0.1608 0.0902 / 0.397);
514
- --red-a6: color(display-p3 1 0.1765 0.1255 / 0.475);
515
- --red-a7: color(display-p3 1 0.2314 0.2 / 0.577);
516
- --red-a8: color(display-p3 1 0.2471 0.2157 / 0.746);
517
- --red-a9: color(display-p3 1 0.2471 0.2157 / 0.746);
518
- --red-a10: color(display-p3 1 0.2 0.149 / 0.683);
519
- --red-a11: color(display-p3 1 0.6235 0.5608 / 0.942);
520
- --red-a12: color(display-p3 1 0.8392 0.8 / 0.969);
521
-
522
- --green-1: oklch(0% 0.0162 156);
523
- --green-2: oklch(18.1% 0.0185 156);
524
- --green-3: oklch(25.4% 0.0427 156);
525
- --green-4: oklch(31% 0.0671 156);
526
- --green-5: oklch(36.1% 0.0782 156);
527
- --green-6: oklch(41.2% 0.0884 156);
528
- --green-7: oklch(46.7% 0.1011 156);
529
- --green-8: oklch(52.5% 0.1175 156);
530
- --green-9: oklch(51.2% 0.1175 156);
531
- --green-10: oklch(46.3% 0.1011 156);
532
- --green-11: oklch(78% 0.1175 156);
533
- --green-12: oklch(90.7% 0.098 156);
534
- --green-a1: color(display-p3 0 0 0 / 0);
535
- --green-a2: color(display-p3 0.6471 0.9961 0.698 / 0.079);
536
- --green-a3: color(display-p3 0.5529 1 0.6745 / 0.157);
537
- --green-a4: color(display-p3 0.4392 1 0.6314 / 0.224);
538
- --green-a5: color(display-p3 0.4745 1 0.6392 / 0.283);
539
- --green-a6: color(display-p3 0.4902 1 0.6471 / 0.346);
540
- --green-a7: color(display-p3 0.502 1 0.6667 / 0.408);
541
- --green-a8: color(display-p3 0.4941 1 0.6549 / 0.487);
542
- --green-a9: color(display-p3 0.4784 1 0.6431 / 0.471);
543
- --green-a10: color(display-p3 0.498 1 0.6627 / 0.404);
544
- --green-a11: color(display-p3 0.6784 1 0.7608 / 0.8);
545
- --green-a12: color(display-p3 0.7686 1 0.8275 / 0.95);
546
-
547
- --orange-1: oklch(0% 0.0155 42.62);
548
- --orange-2: oklch(17.7% 0.0224 42.62);
549
- --orange-3: oklch(23.9% 0.0703 42.62);
550
- --orange-4: oklch(28.3% 0.114 42.62);
551
- --orange-5: oklch(32.7% 0.1271 42.62);
552
- --orange-6: oklch(37.9% 0.1304 42.62);
553
- --orange-7: oklch(44.7% 0.1406 42.62);
554
- --orange-8: oklch(53.8% 0.172 42.62);
555
- --orange-9: oklch(57.6% 0.172 42.62);
556
- --orange-10: oklch(53.2% 0.172 42.62);
557
- --orange-11: oklch(78.6% 0.172 42.62);
558
- --orange-12: oklch(90.2% 0.0625 42.62);
559
- --orange-a1: color(display-p3 0 0 0 / 0);
560
- --orange-a2: color(display-p3 0.9922 0.6039 0.4314 / 0.091);
561
- --orange-a3: color(display-p3 1 0.3686 0.0784 / 0.204);
562
- --orange-a4: color(display-p3 1 0.2235 0.0824 / 0.299);
563
- --orange-a5: color(display-p3 1 0.2745 0.098 / 0.361);
564
- --orange-a6: color(display-p3 1 0.349 0.1216 / 0.428);
565
- --orange-a7: color(display-p3 1 0.4157 0.1529 / 0.522);
566
- --orange-a8: color(display-p3 1 0.4157 0.1686 / 0.679);
567
- --orange-a9: color(display-p3 1 0.4549 0.1804 / 0.726);
568
- --orange-a10: color(display-p3 1 0.4118 0.1647 / 0.671);
569
- --orange-a11: color(display-p3 1 0.6392 0.4549 / 0.946);
570
- --orange-a12: color(display-p3 1 0.8549 0.7765 / 0.973);
571
291
  }
572
292
  }
573
293
  }
@@ -920,8 +640,8 @@
920
640
  accent, wrong contrast). A nested theme's own [data-style] still wins on specificity. */
921
641
  [data-style='solid'],
922
642
  :where([data-style='solid'] .spark-theme) {
923
- --spark-style-bg: var(--spark-9);
924
- --spark-style-bg-hover: var(--spark-10);
643
+ --spark-style-bg: var(--spark-solid, var(--spark-9));
644
+ --spark-style-bg-hover: var(--spark-solid-hover, var(--spark-10));
925
645
  /* fg intentionally has no *value* here — a solid foreground means different things
926
646
  per role, so each component should fall back to its own right contrast: Button
927
647
  *text* → --spark-contrast (AA-enforced 4.5:1), Checkbox *check glyph* →
@@ -1042,11 +762,16 @@
1042
762
  --spark-a10: var(--red-a10);
1043
763
  --spark-a11: var(--red-a11);
1044
764
  --spark-a12: var(--red-a12);
765
+ --spark-solid: var(--red-solid);
766
+ --spark-solid-hover: var(--red-solid-hover);
1045
767
  --spark-contrast: var(--red-contrast);
1046
768
  --spark-on-solid: var(--red-on-solid);
1047
769
  --spark-surface: var(--red-surface);
1048
770
  --spark-indicator: var(--red-9);
1049
771
  --spark-track: var(--red-9);
772
+ --spark-switch-track: var(--red-solid);
773
+ --spark-radio-ring: var(--red-solid);
774
+ --spark-radio-dot: var(--red-solid);
1050
775
  }
1051
776
 
1052
777
  [data-accent-color='green'],
@@ -1075,11 +800,16 @@
1075
800
  --spark-a10: var(--green-a10);
1076
801
  --spark-a11: var(--green-a11);
1077
802
  --spark-a12: var(--green-a12);
803
+ --spark-solid: var(--green-solid);
804
+ --spark-solid-hover: var(--green-solid-hover);
1078
805
  --spark-contrast: var(--green-contrast);
1079
806
  --spark-on-solid: var(--green-on-solid);
1080
807
  --spark-surface: var(--green-surface);
1081
808
  --spark-indicator: var(--green-9);
1082
809
  --spark-track: var(--green-9);
810
+ --spark-switch-track: var(--green-solid);
811
+ --spark-radio-ring: var(--green-solid);
812
+ --spark-radio-dot: var(--green-solid);
1083
813
  }
1084
814
 
1085
815
  [data-accent-color='orange'],
@@ -1108,11 +838,16 @@
1108
838
  --spark-a10: var(--orange-a10);
1109
839
  --spark-a11: var(--orange-a11);
1110
840
  --spark-a12: var(--orange-a12);
841
+ --spark-solid: var(--orange-solid);
842
+ --spark-solid-hover: var(--orange-solid-hover);
1111
843
  --spark-contrast: var(--orange-contrast);
1112
844
  --spark-on-solid: var(--orange-on-solid);
1113
845
  --spark-surface: var(--orange-surface);
1114
846
  --spark-indicator: var(--orange-9);
1115
847
  --spark-track: var(--orange-9);
848
+ --spark-switch-track: var(--orange-solid);
849
+ --spark-radio-ring: var(--orange-solid);
850
+ --spark-radio-dot: var(--orange-solid);
1116
851
  }
1117
852
 
1118
853
  /*
@@ -426,6 +426,43 @@
426
426
  --color-warning-hover: var(--orange-a11);
427
427
  --color-warning-focus: var(--orange-a11);
428
428
 
429
+ /*
430
+ * Frozen public roles (Phase C). Paint with these; ladder stays --spark-*.
431
+ * Bare error/success/warning above stay legacy ink (a12) until a follow-up
432
+ * flips them — solid status fills use *-foreground pairs + base-*-solid.
433
+ */
434
+ --color-primary: var(--spark-9);
435
+ --color-primary-foreground: var(--spark-contrast);
436
+ --color-primary-soft: var(--spark-a3);
437
+ --color-primary-soft-foreground: var(--spark-a11);
438
+ --color-primary-hover: var(--spark-10);
439
+ --color-primary-soft-hover: var(--spark-a4);
440
+
441
+ --color-destructive: var(--red-solid, var(--red-9));
442
+ --color-destructive-foreground: var(--red-contrast);
443
+ --color-destructive-soft: var(--red-a3);
444
+ --color-destructive-soft-foreground: var(--red-a11);
445
+ --color-destructive-hover: var(--red-solid-hover, var(--red-10));
446
+ --color-destructive-soft-hover: var(--red-a4);
447
+
448
+ --color-error-foreground: var(--red-contrast);
449
+ --color-error-soft: var(--red-a3);
450
+ --color-error-soft-foreground: var(--red-a11);
451
+ --color-error-hover: var(--red-solid-hover, var(--red-10));
452
+ --color-error-soft-hover: var(--red-a4);
453
+
454
+ --color-success-foreground: var(--green-contrast);
455
+ --color-success-soft: var(--green-a3);
456
+ --color-success-soft-foreground: var(--green-a11);
457
+ --color-success-hover: var(--green-solid-hover, var(--green-10));
458
+ --color-success-soft-hover: var(--green-a4);
459
+
460
+ --color-warning-foreground: var(--orange-contrast);
461
+ --color-warning-soft: var(--orange-a3);
462
+ --color-warning-soft-foreground: var(--orange-a11);
463
+ --color-warning-hover: var(--orange-solid-hover, var(--orange-10));
464
+ --color-warning-soft-hover: var(--orange-a4);
465
+
429
466
  /* Background-only semantic tokens */
430
467
  --color-base-gray-surface: var(--neutral-a2);
431
468
  --color-base-gray-soft: var(--neutral-a3);
@@ -435,18 +472,18 @@
435
472
  --color-base-accent-soft: var(--spark-a3);
436
473
  --color-base-accent-solid: var(--spark-9);
437
474
  --color-base-accent-skeleton: var(--spark-a5);
438
- --color-base-error-soft: var(--red-a3);
475
+ --color-base-error-soft: var(--color-error-soft);
439
476
  --color-base-error-surface: var(--spark-background);
440
- --color-base-error-solid: var(--red-9);
441
- --color-base-success-soft: var(--green-a3);
477
+ --color-base-error-solid: var(--red-solid, var(--red-9));
478
+ --color-base-success-soft: var(--color-success-soft);
442
479
  --color-base-success-surface: var(--spark-background);
443
- --color-base-success-solid: var(--green-9);
480
+ --color-base-success-solid: var(--green-solid, var(--green-9));
444
481
  --color-base-info-soft: var(--blue-a3);
445
482
  --color-base-info-surface: var(--spark-background);
446
483
  --color-base-info-solid: var(--blue-9);
447
- --color-base-warning-soft: var(--orange-a3);
484
+ --color-base-warning-soft: var(--color-warning-soft);
448
485
  --color-base-warning-surface: var(--spark-background);
449
- --color-base-warning-solid: var(--orange-9);
486
+ --color-base-warning-solid: var(--orange-solid, var(--orange-9));
450
487
 
451
488
  --color-input-base: var(--spark-a3);
452
489
  --color-input-base-hover: var(--spark-a4);
@@ -590,6 +627,7 @@
590
627
  * (3:1) for every accent in both appearances.
591
628
  */
592
629
  --color-focus-root: var(--spark-11);
630
+ --color-primary-focus: var(--spark-11);
593
631
  --color-selection-root: var(--spark-a5);
594
632
  --color-autofill-root: var(--spark-a3);
595
633
  }
@@ -619,6 +657,14 @@
619
657
  @source inline(
620
658
  'text-{error,warning}-{light,contrast,disabled,active,hover,focus}'
621
659
  );
660
+ @source inline(
661
+ '{text,bg,border}-{primary,destructive}-{foreground,soft,soft-foreground,hover,soft-hover}'
662
+ );
663
+ @source inline('{text,bg,border}-{primary,destructive}');
664
+ @source inline(
665
+ '{text,bg,border}-{error,success,warning}-{foreground,soft,soft-foreground,hover,soft-hover}'
666
+ );
667
+ @source inline('ring-{primary,destructive,error,success,warning}');
622
668
  @source inline('bg-base-{gray,accent}-{surface,soft,solid,skeleton}');
623
669
  @source inline('bg-base-{error,success,info,warning}-{surface,soft,solid}');
624
670
  @source inline(
@@ -23,17 +23,6 @@ const integerFormat = decimalsFormat(0);
23
23
  const oneDecimalFormat = decimalsFormat(1);
24
24
  const twoDecimalFormat = decimalsFormat(2);
25
25
  const formatThousands = (n) => integerFormat.format(n);
26
- const formatEnergy = (v) => {
27
- if (v >= 1e6) return `${twoDecimalFormat.format(v / 1e3)} MWh`;
28
- if (v >= 1e3) return `${integerFormat.format(v)} kWh`;
29
- if (v >= 10) return `${oneDecimalFormat.format(v)} kWh`;
30
- return `${twoDecimalFormat.format(v)} kWh`;
31
- };
32
- const formatPower = (value, { signed = false } = {}) => {
33
- if (value == null) return "—";
34
- const rounded = Math.round(value);
35
- return `${signed && rounded > 0 ? "+" : ""}${integerFormat.format(rounded)} W`;
36
- };
37
26
  const formatPercent = (value) => {
38
27
  if (value == null) return "—";
39
28
  return `${integerFormat.format(value)} %`;
@@ -44,9 +33,7 @@ const formatRatio = (value) => {
44
33
  };
45
34
  //#endregion
46
35
  exports.decimalsFormat = decimalsFormat;
47
- exports.formatEnergy = formatEnergy;
48
36
  exports.formatPercent = formatPercent;
49
- exports.formatPower = formatPower;
50
37
  exports.formatRatio = formatRatio;
51
38
  exports.formatThousands = formatThousands;
52
39
  exports.integerFormat = integerFormat;
@@ -1 +1 @@
1
- {"version":3,"file":"format.cjs","names":[],"sources":["../../src/utils/format.ts"],"sourcesContent":["import { EM_DASH, NARROW_NBSP } from './chars'\n\ninterface LocaleNumberFormat {\n format: (value: number) => string\n}\n\nfunction getDocumentLang(): string | undefined {\n return typeof document === 'undefined'\n ? undefined\n : document.documentElement.lang || undefined\n}\n\nconst localeNumberFormat = (\n options?: Intl.NumberFormatOptions,\n): LocaleNumberFormat => {\n const cache = new Map<string, Intl.NumberFormat>()\n return {\n format: (value) => {\n const locale = getDocumentLang()\n const key = locale ?? ''\n let formatter = cache.get(key)\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options)\n cache.set(key, formatter)\n }\n return formatter.format(value)\n },\n }\n}\n\nconst decimalsFormat = (decimals: number) =>\n localeNumberFormat({ maximumFractionDigits: decimals })\n\nconst integerFormat = decimalsFormat(0)\nconst oneDecimalFormat = decimalsFormat(1)\nconst twoDecimalFormat = decimalsFormat(2)\n\nconst formatThousands = (n: number) => integerFormat.format(n)\n\nconst formatEnergy = (v: number) => {\n if (v >= 1_000_000) {\n return `${twoDecimalFormat.format(v / 1000)}${NARROW_NBSP}MWh`\n }\n if (v >= 1_000) return `${integerFormat.format(v)}${NARROW_NBSP}kWh`\n if (v >= 10) return `${oneDecimalFormat.format(v)}${NARROW_NBSP}kWh`\n return `${twoDecimalFormat.format(v)}${NARROW_NBSP}kWh`\n}\n\nconst formatPower = (\n value: number | null,\n { signed = false }: { signed?: boolean } = {},\n): string => {\n if (value == null) return EM_DASH\n const rounded = Math.round(value)\n const sign = signed && rounded > 0 ? '+' : ''\n return `${sign}${integerFormat.format(rounded)}${NARROW_NBSP}W`\n}\n\nconst formatPercent = (value: number | null): string => {\n if (value == null) return EM_DASH\n return `${integerFormat.format(value)}${NARROW_NBSP}%`\n}\n\nconst formatRatio = (value: number | null): string => {\n if (value == null) return EM_DASH\n return `${integerFormat.format(value * 100)}${NARROW_NBSP}%`\n}\n\nexport {\n formatThousands,\n formatEnergy,\n formatPower,\n formatPercent,\n formatRatio,\n localeNumberFormat,\n decimalsFormat,\n integerFormat,\n oneDecimalFormat,\n twoDecimalFormat,\n}\n"],"mappings":";;;;AAMA,SAAS,kBAAsC;CAC7C,OAAO,OAAO,aAAa,cACvB,KAAA,IACA,SAAS,gBAAgB,QAAQ,KAAA;AACvC;AAEA,MAAM,sBACJ,YACuB;CACvB,MAAM,wBAAQ,IAAI,IAA+B;CACjD,OAAO,EACL,SAAS,UAAU;EACjB,MAAM,SAAS,gBAAgB;EAC/B,MAAM,MAAM,UAAU;EACtB,IAAI,YAAY,MAAM,IAAI,GAAG;EAC7B,IAAI,CAAC,WAAW;GACd,YAAY,IAAI,KAAK,aAAa,QAAQ,OAAO;GACjD,MAAM,IAAI,KAAK,SAAS;EAC1B;EACA,OAAO,UAAU,OAAO,KAAK;CAC/B,EACF;AACF;AAEA,MAAM,kBAAkB,aACtB,mBAAmB,EAAE,uBAAuB,SAAS,CAAC;AAExD,MAAM,gBAAgB,eAAe,CAAC;AACtC,MAAM,mBAAmB,eAAe,CAAC;AACzC,MAAM,mBAAmB,eAAe,CAAC;AAEzC,MAAM,mBAAmB,MAAc,cAAc,OAAO,CAAC;AAE7D,MAAM,gBAAgB,MAAc;CAClC,IAAI,KAAK,KACP,OAAO,GAAG,iBAAiB,OAAO,IAAI,GAAI;CAE5C,IAAI,KAAK,KAAO,OAAO,GAAG,cAAc,OAAO,CAAC;CAChD,IAAI,KAAK,IAAI,OAAO,GAAG,iBAAiB,OAAO,CAAC;CAChD,OAAO,GAAG,iBAAiB,OAAO,CAAC;AACrC;AAEA,MAAM,eACJ,OACA,EAAE,SAAS,UAAgC,CAAC,MACjC;CACX,IAAI,SAAS,MAAM,OAAA;CACnB,MAAM,UAAU,KAAK,MAAM,KAAK;CAEhC,OAAO,GADM,UAAU,UAAU,IAAI,MAAM,KAC1B,cAAc,OAAO,OAAO;AAC/C;AAEA,MAAM,iBAAiB,UAAiC;CACtD,IAAI,SAAS,MAAM,OAAA;CACnB,OAAO,GAAG,cAAc,OAAO,KAAK;AACtC;AAEA,MAAM,eAAe,UAAiC;CACpD,IAAI,SAAS,MAAM,OAAA;CACnB,OAAO,GAAG,cAAc,OAAO,QAAQ,GAAG;AAC5C"}
1
+ {"version":3,"file":"format.cjs","names":[],"sources":["../../src/utils/format.ts"],"sourcesContent":["import { EM_DASH, NARROW_NBSP } from './chars'\n\ninterface LocaleNumberFormat {\n format: (value: number) => string\n}\n\nfunction getDocumentLang(): string | undefined {\n return typeof document === 'undefined'\n ? undefined\n : document.documentElement.lang || undefined\n}\n\nconst localeNumberFormat = (\n options?: Intl.NumberFormatOptions,\n): LocaleNumberFormat => {\n const cache = new Map<string, Intl.NumberFormat>()\n return {\n format: (value) => {\n const locale = getDocumentLang()\n const key = locale ?? ''\n let formatter = cache.get(key)\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options)\n cache.set(key, formatter)\n }\n return formatter.format(value)\n },\n }\n}\n\nconst decimalsFormat = (decimals: number) =>\n localeNumberFormat({ maximumFractionDigits: decimals })\n\nconst integerFormat = decimalsFormat(0)\nconst oneDecimalFormat = decimalsFormat(1)\nconst twoDecimalFormat = decimalsFormat(2)\n\nconst formatThousands = (n: number) => integerFormat.format(n)\n\nconst formatPercent = (value: number | null): string => {\n if (value == null) return EM_DASH\n return `${integerFormat.format(value)}${NARROW_NBSP}%`\n}\n\nconst formatRatio = (value: number | null): string => {\n if (value == null) return EM_DASH\n return `${integerFormat.format(value * 100)}${NARROW_NBSP}%`\n}\n\nexport {\n formatThousands,\n formatPercent,\n formatRatio,\n localeNumberFormat,\n decimalsFormat,\n integerFormat,\n oneDecimalFormat,\n twoDecimalFormat,\n}\n"],"mappings":";;;;AAMA,SAAS,kBAAsC;CAC7C,OAAO,OAAO,aAAa,cACvB,KAAA,IACA,SAAS,gBAAgB,QAAQ,KAAA;AACvC;AAEA,MAAM,sBACJ,YACuB;CACvB,MAAM,wBAAQ,IAAI,IAA+B;CACjD,OAAO,EACL,SAAS,UAAU;EACjB,MAAM,SAAS,gBAAgB;EAC/B,MAAM,MAAM,UAAU;EACtB,IAAI,YAAY,MAAM,IAAI,GAAG;EAC7B,IAAI,CAAC,WAAW;GACd,YAAY,IAAI,KAAK,aAAa,QAAQ,OAAO;GACjD,MAAM,IAAI,KAAK,SAAS;EAC1B;EACA,OAAO,UAAU,OAAO,KAAK;CAC/B,EACF;AACF;AAEA,MAAM,kBAAkB,aACtB,mBAAmB,EAAE,uBAAuB,SAAS,CAAC;AAExD,MAAM,gBAAgB,eAAe,CAAC;AACtC,MAAM,mBAAmB,eAAe,CAAC;AACzC,MAAM,mBAAmB,eAAe,CAAC;AAEzC,MAAM,mBAAmB,MAAc,cAAc,OAAO,CAAC;AAE7D,MAAM,iBAAiB,UAAiC;CACtD,IAAI,SAAS,MAAM,OAAA;CACnB,OAAO,GAAG,cAAc,OAAO,KAAK;AACtC;AAEA,MAAM,eAAe,UAAiC;CACpD,IAAI,SAAS,MAAM,OAAA;CACnB,OAAO,GAAG,cAAc,OAAO,QAAQ,GAAG;AAC5C"}
@@ -10,14 +10,8 @@ declare const integerFormat: LocaleNumberFormat;
10
10
  declare const oneDecimalFormat: LocaleNumberFormat;
11
11
  declare const twoDecimalFormat: LocaleNumberFormat;
12
12
  declare const formatThousands: (n: number) => string;
13
- declare const formatEnergy: (v: number) => string;
14
- declare const formatPower: (value: number | null, {
15
- signed
16
- }?: {
17
- signed?: boolean;
18
- }) => string;
19
13
  declare const formatPercent: (value: number | null) => string;
20
14
  declare const formatRatio: (value: number | null) => string;
21
15
  //#endregion
22
- export { decimalsFormat, formatEnergy, formatPercent, formatPower, formatRatio, formatThousands, integerFormat, localeNumberFormat, oneDecimalFormat, twoDecimalFormat };
16
+ export { decimalsFormat, formatPercent, formatRatio, formatThousands, integerFormat, localeNumberFormat, oneDecimalFormat, twoDecimalFormat };
23
17
  //# sourceMappingURL=format.d.cts.map
@@ -10,14 +10,8 @@ declare const integerFormat: LocaleNumberFormat;
10
10
  declare const oneDecimalFormat: LocaleNumberFormat;
11
11
  declare const twoDecimalFormat: LocaleNumberFormat;
12
12
  declare const formatThousands: (n: number) => string;
13
- declare const formatEnergy: (v: number) => string;
14
- declare const formatPower: (value: number | null, {
15
- signed
16
- }?: {
17
- signed?: boolean;
18
- }) => string;
19
13
  declare const formatPercent: (value: number | null) => string;
20
14
  declare const formatRatio: (value: number | null) => string;
21
15
  //#endregion
22
- export { decimalsFormat, formatEnergy, formatPercent, formatPower, formatRatio, formatThousands, integerFormat, localeNumberFormat, oneDecimalFormat, twoDecimalFormat };
16
+ export { decimalsFormat, formatPercent, formatRatio, formatThousands, integerFormat, localeNumberFormat, oneDecimalFormat, twoDecimalFormat };
23
17
  //# sourceMappingURL=format.d.ts.map
@@ -22,17 +22,6 @@ const integerFormat = decimalsFormat(0);
22
22
  const oneDecimalFormat = decimalsFormat(1);
23
23
  const twoDecimalFormat = decimalsFormat(2);
24
24
  const formatThousands = (n) => integerFormat.format(n);
25
- const formatEnergy = (v) => {
26
- if (v >= 1e6) return `${twoDecimalFormat.format(v / 1e3)} MWh`;
27
- if (v >= 1e3) return `${integerFormat.format(v)} kWh`;
28
- if (v >= 10) return `${oneDecimalFormat.format(v)} kWh`;
29
- return `${twoDecimalFormat.format(v)} kWh`;
30
- };
31
- const formatPower = (value, { signed = false } = {}) => {
32
- if (value == null) return "—";
33
- const rounded = Math.round(value);
34
- return `${signed && rounded > 0 ? "+" : ""}${integerFormat.format(rounded)} W`;
35
- };
36
25
  const formatPercent = (value) => {
37
26
  if (value == null) return "—";
38
27
  return `${integerFormat.format(value)} %`;
@@ -42,6 +31,6 @@ const formatRatio = (value) => {
42
31
  return `${integerFormat.format(value * 100)} %`;
43
32
  };
44
33
  //#endregion
45
- export { decimalsFormat, formatEnergy, formatPercent, formatPower, formatRatio, formatThousands, integerFormat, localeNumberFormat, oneDecimalFormat, twoDecimalFormat };
34
+ export { decimalsFormat, formatPercent, formatRatio, formatThousands, integerFormat, localeNumberFormat, oneDecimalFormat, twoDecimalFormat };
46
35
 
47
36
  //# sourceMappingURL=format.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","names":[],"sources":["../../src/utils/format.ts"],"sourcesContent":["import { EM_DASH, NARROW_NBSP } from './chars'\n\ninterface LocaleNumberFormat {\n format: (value: number) => string\n}\n\nfunction getDocumentLang(): string | undefined {\n return typeof document === 'undefined'\n ? undefined\n : document.documentElement.lang || undefined\n}\n\nconst localeNumberFormat = (\n options?: Intl.NumberFormatOptions,\n): LocaleNumberFormat => {\n const cache = new Map<string, Intl.NumberFormat>()\n return {\n format: (value) => {\n const locale = getDocumentLang()\n const key = locale ?? ''\n let formatter = cache.get(key)\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options)\n cache.set(key, formatter)\n }\n return formatter.format(value)\n },\n }\n}\n\nconst decimalsFormat = (decimals: number) =>\n localeNumberFormat({ maximumFractionDigits: decimals })\n\nconst integerFormat = decimalsFormat(0)\nconst oneDecimalFormat = decimalsFormat(1)\nconst twoDecimalFormat = decimalsFormat(2)\n\nconst formatThousands = (n: number) => integerFormat.format(n)\n\nconst formatEnergy = (v: number) => {\n if (v >= 1_000_000) {\n return `${twoDecimalFormat.format(v / 1000)}${NARROW_NBSP}MWh`\n }\n if (v >= 1_000) return `${integerFormat.format(v)}${NARROW_NBSP}kWh`\n if (v >= 10) return `${oneDecimalFormat.format(v)}${NARROW_NBSP}kWh`\n return `${twoDecimalFormat.format(v)}${NARROW_NBSP}kWh`\n}\n\nconst formatPower = (\n value: number | null,\n { signed = false }: { signed?: boolean } = {},\n): string => {\n if (value == null) return EM_DASH\n const rounded = Math.round(value)\n const sign = signed && rounded > 0 ? '+' : ''\n return `${sign}${integerFormat.format(rounded)}${NARROW_NBSP}W`\n}\n\nconst formatPercent = (value: number | null): string => {\n if (value == null) return EM_DASH\n return `${integerFormat.format(value)}${NARROW_NBSP}%`\n}\n\nconst formatRatio = (value: number | null): string => {\n if (value == null) return EM_DASH\n return `${integerFormat.format(value * 100)}${NARROW_NBSP}%`\n}\n\nexport {\n formatThousands,\n formatEnergy,\n formatPower,\n formatPercent,\n formatRatio,\n localeNumberFormat,\n decimalsFormat,\n integerFormat,\n oneDecimalFormat,\n twoDecimalFormat,\n}\n"],"mappings":";;;AAMA,SAAS,kBAAsC;CAC7C,OAAO,OAAO,aAAa,cACvB,KAAA,IACA,SAAS,gBAAgB,QAAQ,KAAA;AACvC;AAEA,MAAM,sBACJ,YACuB;CACvB,MAAM,wBAAQ,IAAI,IAA+B;CACjD,OAAO,EACL,SAAS,UAAU;EACjB,MAAM,SAAS,gBAAgB;EAC/B,MAAM,MAAM,UAAU;EACtB,IAAI,YAAY,MAAM,IAAI,GAAG;EAC7B,IAAI,CAAC,WAAW;GACd,YAAY,IAAI,KAAK,aAAa,QAAQ,OAAO;GACjD,MAAM,IAAI,KAAK,SAAS;EAC1B;EACA,OAAO,UAAU,OAAO,KAAK;CAC/B,EACF;AACF;AAEA,MAAM,kBAAkB,aACtB,mBAAmB,EAAE,uBAAuB,SAAS,CAAC;AAExD,MAAM,gBAAgB,eAAe,CAAC;AACtC,MAAM,mBAAmB,eAAe,CAAC;AACzC,MAAM,mBAAmB,eAAe,CAAC;AAEzC,MAAM,mBAAmB,MAAc,cAAc,OAAO,CAAC;AAE7D,MAAM,gBAAgB,MAAc;CAClC,IAAI,KAAK,KACP,OAAO,GAAG,iBAAiB,OAAO,IAAI,GAAI;CAE5C,IAAI,KAAK,KAAO,OAAO,GAAG,cAAc,OAAO,CAAC;CAChD,IAAI,KAAK,IAAI,OAAO,GAAG,iBAAiB,OAAO,CAAC;CAChD,OAAO,GAAG,iBAAiB,OAAO,CAAC;AACrC;AAEA,MAAM,eACJ,OACA,EAAE,SAAS,UAAgC,CAAC,MACjC;CACX,IAAI,SAAS,MAAM,OAAA;CACnB,MAAM,UAAU,KAAK,MAAM,KAAK;CAEhC,OAAO,GADM,UAAU,UAAU,IAAI,MAAM,KAC1B,cAAc,OAAO,OAAO;AAC/C;AAEA,MAAM,iBAAiB,UAAiC;CACtD,IAAI,SAAS,MAAM,OAAA;CACnB,OAAO,GAAG,cAAc,OAAO,KAAK;AACtC;AAEA,MAAM,eAAe,UAAiC;CACpD,IAAI,SAAS,MAAM,OAAA;CACnB,OAAO,GAAG,cAAc,OAAO,QAAQ,GAAG;AAC5C"}
1
+ {"version":3,"file":"format.js","names":[],"sources":["../../src/utils/format.ts"],"sourcesContent":["import { EM_DASH, NARROW_NBSP } from './chars'\n\ninterface LocaleNumberFormat {\n format: (value: number) => string\n}\n\nfunction getDocumentLang(): string | undefined {\n return typeof document === 'undefined'\n ? undefined\n : document.documentElement.lang || undefined\n}\n\nconst localeNumberFormat = (\n options?: Intl.NumberFormatOptions,\n): LocaleNumberFormat => {\n const cache = new Map<string, Intl.NumberFormat>()\n return {\n format: (value) => {\n const locale = getDocumentLang()\n const key = locale ?? ''\n let formatter = cache.get(key)\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options)\n cache.set(key, formatter)\n }\n return formatter.format(value)\n },\n }\n}\n\nconst decimalsFormat = (decimals: number) =>\n localeNumberFormat({ maximumFractionDigits: decimals })\n\nconst integerFormat = decimalsFormat(0)\nconst oneDecimalFormat = decimalsFormat(1)\nconst twoDecimalFormat = decimalsFormat(2)\n\nconst formatThousands = (n: number) => integerFormat.format(n)\n\nconst formatPercent = (value: number | null): string => {\n if (value == null) return EM_DASH\n return `${integerFormat.format(value)}${NARROW_NBSP}%`\n}\n\nconst formatRatio = (value: number | null): string => {\n if (value == null) return EM_DASH\n return `${integerFormat.format(value * 100)}${NARROW_NBSP}%`\n}\n\nexport {\n formatThousands,\n formatPercent,\n formatRatio,\n localeNumberFormat,\n decimalsFormat,\n integerFormat,\n oneDecimalFormat,\n twoDecimalFormat,\n}\n"],"mappings":";;;AAMA,SAAS,kBAAsC;CAC7C,OAAO,OAAO,aAAa,cACvB,KAAA,IACA,SAAS,gBAAgB,QAAQ,KAAA;AACvC;AAEA,MAAM,sBACJ,YACuB;CACvB,MAAM,wBAAQ,IAAI,IAA+B;CACjD,OAAO,EACL,SAAS,UAAU;EACjB,MAAM,SAAS,gBAAgB;EAC/B,MAAM,MAAM,UAAU;EACtB,IAAI,YAAY,MAAM,IAAI,GAAG;EAC7B,IAAI,CAAC,WAAW;GACd,YAAY,IAAI,KAAK,aAAa,QAAQ,OAAO;GACjD,MAAM,IAAI,KAAK,SAAS;EAC1B;EACA,OAAO,UAAU,OAAO,KAAK;CAC/B,EACF;AACF;AAEA,MAAM,kBAAkB,aACtB,mBAAmB,EAAE,uBAAuB,SAAS,CAAC;AAExD,MAAM,gBAAgB,eAAe,CAAC;AACtC,MAAM,mBAAmB,eAAe,CAAC;AACzC,MAAM,mBAAmB,eAAe,CAAC;AAEzC,MAAM,mBAAmB,MAAc,cAAc,OAAO,CAAC;AAE7D,MAAM,iBAAiB,UAAiC;CACtD,IAAI,SAAS,MAAM,OAAA;CACnB,OAAO,GAAG,cAAc,OAAO,KAAK;AACtC;AAEA,MAAM,eAAe,UAAiC;CACpD,IAAI,SAAS,MAAM,OAAA;CACnB,OAAO,GAAG,cAAc,OAAO,QAAQ,GAAG;AAC5C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@epilot/spark-ui",
3
- "version": "0.19.0",
3
+ "version": "0.20.0",
4
4
  "description": "React UI component library from Spark SDK",
5
5
  "homepage": "https://spark-ui.epilot.io/docs/ui",
6
6
  "license": "Apache-2.0",