@lostgradient/cinder 0.1.1 → 0.2.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 (551) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/README.md +163 -0
  3. package/components.json +390 -3
  4. package/dist/_internal/chart/chart-focus-ring.d.ts +57 -0
  5. package/dist/_internal/chart/chart-utilities.d.ts +2 -0
  6. package/dist/_internal/chart/heatmap-utilities.d.ts +60 -0
  7. package/dist/components/accordion/index.js +14 -1
  8. package/dist/components/alert/alert.schema.js +3 -3
  9. package/dist/components/alert/alert.types.d.ts +3 -2
  10. package/dist/components/alert/index.js +3 -2
  11. package/dist/components/alert-dialog/index.js +11 -2
  12. package/dist/components/area-chart/area-chart.css +57 -7
  13. package/dist/components/area-chart/index.js +283 -40
  14. package/dist/components/avatar-group/avatar-group.css +2 -3
  15. package/dist/components/badge/badge.css +17 -0
  16. package/dist/components/badge/badge.schema.js +6 -1
  17. package/dist/components/badge/badge.types.d.ts +7 -0
  18. package/dist/components/badge/index.js +4 -2
  19. package/dist/components/bar-chart/bar-chart.css +57 -7
  20. package/dist/components/bar-chart/index.js +233 -45
  21. package/dist/components/button/button.css +5 -3
  22. package/dist/components/button/index.js +11 -2
  23. package/dist/components/capability-gate/capability-gate.css +131 -0
  24. package/dist/components/capability-gate/capability-gate.schema.d.ts +3 -0
  25. package/dist/components/capability-gate/capability-gate.schema.js +128 -0
  26. package/dist/components/capability-gate/capability-gate.svelte.d.ts +19 -0
  27. package/dist/components/capability-gate/capability-gate.types.d.ts +70 -0
  28. package/dist/components/capability-gate/capability-gate.variables.d.ts +2 -0
  29. package/dist/components/capability-gate/capability-gate.variables.js +61 -0
  30. package/dist/components/capability-gate/index.d.ts +5 -0
  31. package/dist/components/capability-gate/index.js +285 -0
  32. package/dist/components/card/card.css +4 -0
  33. package/dist/components/card/card.schema.js +5 -1
  34. package/dist/components/card/card.svelte.d.ts +1 -1
  35. package/dist/components/card/card.types.d.ts +4 -0
  36. package/dist/components/card/index.d.ts +1 -1
  37. package/dist/components/card/index.js +8 -4
  38. package/dist/components/chat/index.css +2 -2
  39. package/dist/components/chat/index.js +159 -81
  40. package/dist/components/choice-grid/choice-grid-context.d.ts +23 -0
  41. package/dist/components/choice-grid/choice-grid.css +27 -0
  42. package/dist/components/choice-grid/choice-grid.schema.d.ts +3 -0
  43. package/dist/components/choice-grid/choice-grid.schema.js +121 -0
  44. package/dist/components/choice-grid/choice-grid.svelte.d.ts +20 -0
  45. package/dist/components/choice-grid/choice-grid.types.d.ts +122 -0
  46. package/dist/components/choice-grid/choice-grid.variables.d.ts +2 -0
  47. package/dist/components/choice-grid/choice-grid.variables.js +61 -0
  48. package/dist/components/choice-grid/index.d.ts +13 -0
  49. package/dist/components/choice-grid/index.js +466 -0
  50. package/dist/components/choice-grid-item/choice-grid-item.css +139 -0
  51. package/dist/components/choice-grid-item/choice-grid-item.schema.d.ts +3 -0
  52. package/dist/components/choice-grid-item/choice-grid-item.schema.js +93 -0
  53. package/dist/components/choice-grid-item/choice-grid-item.svelte.d.ts +17 -0
  54. package/dist/components/choice-grid-item/choice-grid-item.types.d.ts +24 -0
  55. package/dist/components/choice-grid-item/choice-grid-item.variables.d.ts +2 -0
  56. package/dist/components/choice-grid-item/choice-grid-item.variables.js +61 -0
  57. package/dist/components/choice-grid-item/index.d.ts +5 -0
  58. package/dist/components/choice-grid-item/index.js +203 -0
  59. package/dist/components/color-field/color-field.css +6 -9
  60. package/dist/components/color-picker/color-picker.css +31 -24
  61. package/dist/components/color-swatch-picker/color-swatch-picker.css +6 -9
  62. package/dist/components/confirm-dialog/index.js +11 -2
  63. package/dist/components/context-menu/index.js +114 -43
  64. package/dist/components/context-menu-trigger/index.js +6 -4
  65. package/dist/components/data-table/data-table.css +30 -0
  66. package/dist/components/data-table/data-table.schema.d.ts +3 -0
  67. package/dist/components/data-table/data-table.schema.js +103 -0
  68. package/dist/components/data-table/data-table.svelte.d.ts +39 -0
  69. package/dist/components/data-table/data-table.types.d.ts +86 -0
  70. package/dist/components/data-table/data-table.variables.d.ts +2 -0
  71. package/dist/components/data-table/data-table.variables.js +61 -0
  72. package/dist/components/data-table/index.d.ts +5 -0
  73. package/dist/components/data-table/index.js +591 -0
  74. package/dist/components/diff-viewer/index.js +14 -3
  75. package/dist/components/dropdown/index.js +115 -46
  76. package/dist/components/dropdown-item/dropdown-item.schema.js +13 -1
  77. package/dist/components/dropdown-item/dropdown-item.svelte.d.ts +1 -1
  78. package/dist/components/dropdown-item/dropdown-item.types.d.ts +46 -2
  79. package/dist/components/dropdown-item/index.d.ts +1 -1
  80. package/dist/components/dropdown-item/index.js +97 -28
  81. package/dist/components/floating-action-button/floating-action-button.css +4 -2
  82. package/dist/components/json-schema-editor/index.js +29 -4
  83. package/dist/components/keyboard-shortcuts/index.d.ts +5 -0
  84. package/dist/components/keyboard-shortcuts/index.js +238 -0
  85. package/dist/components/keyboard-shortcuts/keyboard-shortcuts.css +84 -0
  86. package/dist/components/keyboard-shortcuts/keyboard-shortcuts.schema.d.ts +3 -0
  87. package/dist/components/keyboard-shortcuts/keyboard-shortcuts.schema.js +87 -0
  88. package/dist/components/keyboard-shortcuts/keyboard-shortcuts.svelte.d.ts +17 -0
  89. package/dist/components/keyboard-shortcuts/keyboard-shortcuts.types.d.ts +42 -0
  90. package/dist/components/keyboard-shortcuts/keyboard-shortcuts.variables.d.ts +2 -0
  91. package/dist/components/keyboard-shortcuts/keyboard-shortcuts.variables.js +61 -0
  92. package/dist/components/line-chart/index.js +283 -40
  93. package/dist/components/line-chart/line-chart.css +57 -8
  94. package/dist/components/markdown-editor/index.js +129 -51
  95. package/dist/components/matrix-chart/index.d.ts +5 -0
  96. package/dist/components/matrix-chart/index.js +1232 -0
  97. package/dist/components/matrix-chart/matrix-chart.css +50 -0
  98. package/dist/components/matrix-chart/matrix-chart.schema.d.ts +3 -0
  99. package/dist/components/matrix-chart/matrix-chart.schema.js +123 -0
  100. package/dist/components/matrix-chart/matrix-chart.svelte.d.ts +20 -0
  101. package/dist/components/matrix-chart/matrix-chart.types.d.ts +52 -0
  102. package/dist/components/matrix-chart/matrix-chart.variables.d.ts +2 -0
  103. package/dist/components/matrix-chart/matrix-chart.variables.js +61 -0
  104. package/dist/components/media-controls/index.d.ts +5 -0
  105. package/dist/components/media-controls/index.js +338 -0
  106. package/dist/components/media-controls/media-controls.css +112 -0
  107. package/dist/components/media-controls/media-controls.schema.d.ts +3 -0
  108. package/dist/components/media-controls/media-controls.schema.js +125 -0
  109. package/dist/components/media-controls/media-controls.svelte.d.ts +18 -0
  110. package/dist/components/media-controls/media-controls.types.d.ts +77 -0
  111. package/dist/components/media-controls/media-controls.variables.d.ts +2 -0
  112. package/dist/components/media-controls/media-controls.variables.js +61 -0
  113. package/dist/components/navigation-bar/navigation-bar.schema.js +5 -5
  114. package/dist/components/navigation-bar/navigation-bar.types.d.ts +2 -1
  115. package/dist/components/pricing-card/index.d.ts +5 -0
  116. package/dist/components/pricing-card/index.js +406 -0
  117. package/dist/components/pricing-card/pricing-card.css +173 -0
  118. package/dist/components/pricing-card/pricing-card.schema.d.ts +3 -0
  119. package/dist/components/pricing-card/pricing-card.schema.js +100 -0
  120. package/dist/components/pricing-card/pricing-card.svelte.d.ts +18 -0
  121. package/dist/components/pricing-card/pricing-card.types.d.ts +47 -0
  122. package/dist/components/pricing-card/pricing-card.variables.d.ts +2 -0
  123. package/dist/components/pricing-card/pricing-card.variables.js +61 -0
  124. package/dist/components/review-editor/index.js +212 -132
  125. package/dist/components/share-card/index.d.ts +5 -0
  126. package/dist/components/share-card/index.js +446 -0
  127. package/dist/components/share-card/share-card.css +115 -0
  128. package/dist/components/share-card/share-card.schema.d.ts +3 -0
  129. package/dist/components/share-card/share-card.schema.js +113 -0
  130. package/dist/components/share-card/share-card.svelte.d.ts +18 -0
  131. package/dist/components/share-card/share-card.types.d.ts +66 -0
  132. package/dist/components/share-card/share-card.variables.d.ts +2 -0
  133. package/dist/components/share-card/share-card.variables.js +61 -0
  134. package/dist/components/shortcut-hint/index.d.ts +5 -0
  135. package/dist/components/shortcut-hint/index.js +197 -0
  136. package/dist/components/shortcut-hint/shortcut-hint.css +26 -0
  137. package/dist/components/shortcut-hint/shortcut-hint.schema.d.ts +3 -0
  138. package/dist/components/shortcut-hint/shortcut-hint.schema.js +96 -0
  139. package/dist/components/shortcut-hint/shortcut-hint.svelte.d.ts +17 -0
  140. package/dist/components/shortcut-hint/shortcut-hint.types.d.ts +33 -0
  141. package/dist/components/shortcut-hint/shortcut-hint.variables.d.ts +2 -0
  142. package/dist/components/shortcut-hint/shortcut-hint.variables.js +61 -0
  143. package/dist/components/skip-link/index.d.ts +4 -0
  144. package/dist/components/skip-link/index.js +180 -0
  145. package/dist/components/skip-link/skip-link.schema.d.ts +3 -0
  146. package/dist/components/skip-link/skip-link.schema.js +76 -0
  147. package/dist/components/skip-link/skip-link.svelte.d.ts +19 -0
  148. package/dist/components/skip-link/skip-link.types.d.ts +38 -0
  149. package/dist/components/skip-link/skip-link.variables.d.ts +2 -0
  150. package/dist/components/skip-link/skip-link.variables.js +61 -0
  151. package/dist/components/spectrogram/index.d.ts +5 -0
  152. package/dist/components/spectrogram/index.js +1156 -0
  153. package/dist/components/spectrogram/spectrogram.css +43 -0
  154. package/dist/components/spectrogram/spectrogram.schema.d.ts +3 -0
  155. package/dist/components/spectrogram/spectrogram.schema.js +103 -0
  156. package/dist/components/spectrogram/spectrogram.svelte.d.ts +21 -0
  157. package/dist/components/spectrogram/spectrogram.types.d.ts +60 -0
  158. package/dist/components/spectrogram/spectrogram.variables.d.ts +2 -0
  159. package/dist/components/spectrogram/spectrogram.variables.js +61 -0
  160. package/dist/components/spectrum-chart/index.d.ts +5 -0
  161. package/dist/components/spectrum-chart/index.js +1056 -0
  162. package/dist/components/spectrum-chart/spectrum-chart.css +49 -0
  163. package/dist/components/spectrum-chart/spectrum-chart.schema.d.ts +3 -0
  164. package/dist/components/spectrum-chart/spectrum-chart.schema.js +97 -0
  165. package/dist/components/spectrum-chart/spectrum-chart.svelte.d.ts +21 -0
  166. package/dist/components/spectrum-chart/spectrum-chart.types.d.ts +41 -0
  167. package/dist/components/spectrum-chart/spectrum-chart.variables.d.ts +2 -0
  168. package/dist/components/spectrum-chart/spectrum-chart.variables.js +61 -0
  169. package/dist/components/status-dot/status-dot.css +8 -0
  170. package/dist/components/status-dot/status-dot.schema.js +3 -3
  171. package/dist/components/status-dot/status-dot.types.d.ts +5 -2
  172. package/dist/components/subscription-badge/index.d.ts +5 -0
  173. package/dist/components/subscription-badge/index.js +383 -0
  174. package/dist/components/subscription-badge/subscription-badge.css +18 -0
  175. package/dist/components/subscription-badge/subscription-badge.schema.d.ts +3 -0
  176. package/dist/components/subscription-badge/subscription-badge.schema.js +77 -0
  177. package/dist/components/subscription-badge/subscription-badge.svelte.d.ts +19 -0
  178. package/dist/components/subscription-badge/subscription-badge.types.d.ts +28 -0
  179. package/dist/components/subscription-badge/subscription-badge.variables.d.ts +2 -0
  180. package/dist/components/subscription-badge/subscription-badge.variables.js +61 -0
  181. package/dist/components/tab/index.js +14 -1
  182. package/dist/components/table/index.js +26 -17
  183. package/dist/components/table-cell/index.js +18 -9
  184. package/dist/components/table-cell/table-cell.schema.js +5 -1
  185. package/dist/components/table-cell/table-cell.types.d.ts +16 -1
  186. package/dist/components/tabs/index.js +14 -1
  187. package/dist/components/waveform/index.d.ts +5 -0
  188. package/dist/components/waveform/index.js +1075 -0
  189. package/dist/components/waveform/waveform.css +53 -0
  190. package/dist/components/waveform/waveform.schema.d.ts +3 -0
  191. package/dist/components/waveform/waveform.schema.js +98 -0
  192. package/dist/components/waveform/waveform.svelte.d.ts +20 -0
  193. package/dist/components/waveform/waveform.types.d.ts +42 -0
  194. package/dist/components/waveform/waveform.variables.d.ts +2 -0
  195. package/dist/components/waveform/waveform.variables.js +61 -0
  196. package/dist/index.d.ts +33 -2
  197. package/dist/index.js +144 -115
  198. package/dist/server/components/accordion/index.js +14 -1
  199. package/dist/server/components/alert/alert.schema.js +3 -3
  200. package/dist/server/components/alert/index.js +3 -2
  201. package/dist/server/components/alert-dialog/index.js +12 -3
  202. package/dist/server/components/area-chart/index.css +50 -3
  203. package/dist/server/components/area-chart/index.js +181 -2
  204. package/dist/server/components/avatar-group/index.css +1 -1
  205. package/dist/server/components/badge/badge.schema.js +6 -1
  206. package/dist/server/components/badge/index.css +4 -0
  207. package/dist/server/components/badge/index.js +3 -1
  208. package/dist/server/components/bar-chart/index.css +50 -3
  209. package/dist/server/components/bar-chart/index.js +166 -2
  210. package/dist/server/components/button/index.css +1 -1
  211. package/dist/server/components/button/index.js +12 -3
  212. package/dist/server/components/capability-gate/capability-gate.schema.js +110 -0
  213. package/dist/server/components/capability-gate/capability-gate.variables.js +43 -0
  214. package/dist/server/components/capability-gate/index.css +121 -0
  215. package/dist/server/components/capability-gate/index.js +168 -0
  216. package/dist/server/components/card/card.schema.js +5 -1
  217. package/dist/server/components/card/index.css +9 -1
  218. package/dist/server/components/card/index.js +3 -2
  219. package/dist/server/components/chat/index.css +2 -2
  220. package/dist/server/components/chat/index.js +78 -19
  221. package/dist/server/components/choice-grid/choice-grid.schema.js +103 -0
  222. package/dist/server/components/choice-grid/choice-grid.variables.js +43 -0
  223. package/dist/server/components/choice-grid/index.css +103 -0
  224. package/dist/server/components/choice-grid/index.js +383 -0
  225. package/dist/server/components/choice-grid-item/choice-grid-item.schema.js +75 -0
  226. package/dist/server/components/choice-grid-item/choice-grid-item.variables.js +43 -0
  227. package/dist/server/components/choice-grid-item/index.css +86 -0
  228. package/dist/server/components/choice-grid-item/index.js +139 -0
  229. package/dist/server/components/color-field/index.css +2 -4
  230. package/dist/server/components/color-picker/index.css +14 -10
  231. package/dist/server/components/color-swatch-picker/index.css +2 -4
  232. package/dist/server/components/confirm-dialog/index.js +12 -3
  233. package/dist/server/components/context-menu/index.js +72 -20
  234. package/dist/server/components/context-menu-trigger/index.js +6 -4
  235. package/dist/server/components/data-table/data-table.schema.js +85 -0
  236. package/dist/server/components/data-table/data-table.variables.js +43 -0
  237. package/dist/server/components/data-table/index.css +182 -0
  238. package/dist/server/components/data-table/index.js +469 -0
  239. package/dist/server/components/diff-viewer/index.js +14 -3
  240. package/dist/server/components/dropdown/index.js +67 -17
  241. package/dist/server/components/dropdown-item/dropdown-item.schema.js +13 -1
  242. package/dist/server/components/dropdown-item/index.js +67 -17
  243. package/dist/server/components/floating-action-button/index.css +1 -1
  244. package/dist/server/components/json-schema-editor/index.js +29 -4
  245. package/dist/server/components/keyboard-shortcuts/index.css +86 -0
  246. package/dist/server/components/keyboard-shortcuts/index.js +149 -0
  247. package/dist/server/components/keyboard-shortcuts/keyboard-shortcuts.schema.js +69 -0
  248. package/dist/server/components/keyboard-shortcuts/keyboard-shortcuts.variables.js +43 -0
  249. package/dist/server/components/line-chart/index.css +50 -3
  250. package/dist/server/components/line-chart/index.js +181 -2
  251. package/dist/server/components/markdown-editor/index.js +78 -19
  252. package/dist/server/components/matrix-chart/index.css +52 -0
  253. package/dist/server/components/matrix-chart/index.js +1026 -0
  254. package/dist/server/components/matrix-chart/matrix-chart.schema.js +105 -0
  255. package/dist/server/components/matrix-chart/matrix-chart.variables.js +43 -0
  256. package/dist/server/components/media-controls/index.css +109 -0
  257. package/dist/server/components/media-controls/index.js +192 -0
  258. package/dist/server/components/media-controls/media-controls.schema.js +107 -0
  259. package/dist/server/components/media-controls/media-controls.variables.js +43 -0
  260. package/dist/server/components/navigation-bar/navigation-bar.schema.js +5 -5
  261. package/dist/server/components/pricing-card/index.css +131 -0
  262. package/dist/server/components/pricing-card/index.js +258 -0
  263. package/dist/server/components/pricing-card/pricing-card.schema.js +82 -0
  264. package/dist/server/components/pricing-card/pricing-card.variables.js +43 -0
  265. package/dist/server/components/review-editor/index.css +2 -2
  266. package/dist/server/components/review-editor/index.js +80 -19
  267. package/dist/server/components/share-card/index.css +113 -0
  268. package/dist/server/components/share-card/index.js +270 -0
  269. package/dist/server/components/share-card/share-card.schema.js +95 -0
  270. package/dist/server/components/share-card/share-card.variables.js +43 -0
  271. package/dist/server/components/shortcut-hint/index.css +28 -0
  272. package/dist/server/components/shortcut-hint/index.js +134 -0
  273. package/dist/server/components/shortcut-hint/shortcut-hint.schema.js +78 -0
  274. package/dist/server/components/shortcut-hint/shortcut-hint.variables.js +43 -0
  275. package/dist/server/components/skip-link/index.js +141 -0
  276. package/dist/server/components/skip-link/skip-link.schema.js +58 -0
  277. package/dist/server/components/skip-link/skip-link.variables.js +43 -0
  278. package/dist/server/components/spectrogram/index.css +45 -0
  279. package/dist/server/components/spectrogram/index.js +970 -0
  280. package/dist/server/components/spectrogram/spectrogram.schema.js +85 -0
  281. package/dist/server/components/spectrogram/spectrogram.variables.js +43 -0
  282. package/dist/server/components/spectrum-chart/index.css +51 -0
  283. package/dist/server/components/spectrum-chart/index.js +871 -0
  284. package/dist/server/components/spectrum-chart/spectrum-chart.schema.js +79 -0
  285. package/dist/server/components/spectrum-chart/spectrum-chart.variables.js +43 -0
  286. package/dist/server/components/status-dot/index.css +8 -0
  287. package/dist/server/components/status-dot/status-dot.schema.js +3 -3
  288. package/dist/server/components/subscription-badge/index.css +2 -0
  289. package/dist/server/components/subscription-badge/index.js +339 -0
  290. package/dist/server/components/subscription-badge/subscription-badge.schema.js +59 -0
  291. package/dist/server/components/subscription-badge/subscription-badge.variables.js +43 -0
  292. package/dist/server/components/tab/index.js +14 -1
  293. package/dist/server/components/table/index.js +13 -8
  294. package/dist/server/components/table-cell/index.js +13 -8
  295. package/dist/server/components/table-cell/table-cell.schema.js +5 -1
  296. package/dist/server/components/tabs/index.js +14 -1
  297. package/dist/server/components/waveform/index.css +55 -0
  298. package/dist/server/components/waveform/index.js +907 -0
  299. package/dist/server/components/waveform/waveform.schema.js +80 -0
  300. package/dist/server/components/waveform/waveform.variables.js +43 -0
  301. package/dist/server/index.css +1137 -55
  302. package/dist/server/index.js +4225 -1750
  303. package/package.json +380 -2
  304. package/src/_internal/chart/chart-focus-ring.ts +209 -0
  305. package/src/_internal/chart/chart-utilities.ts +4 -0
  306. package/src/_internal/chart/heatmap-utilities.ts +159 -0
  307. package/src/components/accordion/accordion.examples.json +1 -0
  308. package/src/components/alert/README.md +5 -5
  309. package/src/components/alert/alert.schema.json +2 -2
  310. package/src/components/alert/alert.schema.ts +3 -2
  311. package/src/components/alert/alert.svelte +5 -1
  312. package/src/components/alert/alert.types.ts +3 -2
  313. package/src/components/area-chart/README.md +62 -0
  314. package/src/components/area-chart/area-chart.css +57 -7
  315. package/src/components/area-chart/area-chart.svelte +128 -10
  316. package/src/components/avatar-group/avatar-group.css +2 -3
  317. package/src/components/avatar-group/avatar-group.examples.json +1 -0
  318. package/src/components/backdrop/README.md +56 -0
  319. package/src/components/badge/README.md +6 -5
  320. package/src/components/badge/badge.css +17 -0
  321. package/src/components/badge/badge.schema.json +5 -0
  322. package/src/components/badge/badge.schema.ts +6 -0
  323. package/src/components/badge/badge.svelte +2 -0
  324. package/src/components/badge/badge.types.ts +7 -0
  325. package/src/components/bar-chart/README.md +65 -0
  326. package/src/components/bar-chart/bar-chart.css +57 -7
  327. package/src/components/bar-chart/bar-chart.svelte +94 -13
  328. package/src/components/button/button.css +5 -3
  329. package/src/components/button/button.examples.json +1 -0
  330. package/src/components/button/button.svelte +15 -0
  331. package/src/components/capability-gate/README.md +60 -0
  332. package/src/components/capability-gate/capability-gate.css +131 -0
  333. package/src/components/capability-gate/capability-gate.examples.json +19 -0
  334. package/src/components/capability-gate/capability-gate.schema.json +68 -0
  335. package/src/components/capability-gate/capability-gate.schema.ts +72 -0
  336. package/src/components/capability-gate/capability-gate.svelte +186 -0
  337. package/src/components/capability-gate/capability-gate.types.ts +83 -0
  338. package/src/components/capability-gate/capability-gate.variables.json +1 -0
  339. package/src/components/capability-gate/capability-gate.variables.ts +3 -0
  340. package/src/components/capability-gate/index.ts +10 -0
  341. package/src/components/card/README.md +1 -0
  342. package/src/components/card/card.css +4 -0
  343. package/src/components/card/card.examples.json +6 -0
  344. package/src/components/card/card.schema.json +4 -0
  345. package/src/components/card/card.schema.ts +5 -0
  346. package/src/components/card/card.svelte +9 -2
  347. package/src/components/card/card.types.ts +4 -0
  348. package/src/components/card/index.ts +1 -1
  349. package/src/components/chat/README.md +81 -0
  350. package/src/components/chat/container/chat-jump-controls.svelte +12 -9
  351. package/src/components/chat/input/chat-input.svelte +7 -8
  352. package/src/components/chat/message/chat-message.svelte +15 -20
  353. package/src/components/chat/message/tool-call-group.svelte +10 -4
  354. package/src/components/choice-grid/README.md +66 -0
  355. package/src/components/choice-grid/choice-grid-context.ts +30 -0
  356. package/src/components/choice-grid/choice-grid.css +27 -0
  357. package/src/components/choice-grid/choice-grid.examples.json +31 -0
  358. package/src/components/choice-grid/choice-grid.schema.json +61 -0
  359. package/src/components/choice-grid/choice-grid.schema.ts +70 -0
  360. package/src/components/choice-grid/choice-grid.svelte +272 -0
  361. package/src/components/choice-grid/choice-grid.types.ts +152 -0
  362. package/src/components/choice-grid/choice-grid.variables.json +1 -0
  363. package/src/components/choice-grid/choice-grid.variables.ts +3 -0
  364. package/src/components/choice-grid/index.ts +22 -0
  365. package/src/components/choice-grid-item/README.md +41 -0
  366. package/src/components/choice-grid-item/choice-grid-item.css +139 -0
  367. package/src/components/choice-grid-item/choice-grid-item.schema.json +32 -0
  368. package/src/components/choice-grid-item/choice-grid-item.schema.ts +38 -0
  369. package/src/components/choice-grid-item/choice-grid-item.svelte +139 -0
  370. package/src/components/choice-grid-item/choice-grid-item.types.ts +30 -0
  371. package/src/components/choice-grid-item/choice-grid-item.variables.json +1 -0
  372. package/src/components/choice-grid-item/choice-grid-item.variables.ts +3 -0
  373. package/src/components/choice-grid-item/index.ts +6 -0
  374. package/src/components/click-away-listener/README.md +50 -0
  375. package/src/components/color-field/color-field.css +6 -9
  376. package/src/components/color-picker/color-picker.css +31 -24
  377. package/src/components/color-swatch-picker/color-swatch-picker.css +6 -9
  378. package/src/components/command-menu/README.md +61 -0
  379. package/src/components/confirm-dialog/confirm-dialog.examples.json +6 -0
  380. package/src/components/context-menu/README.md +55 -0
  381. package/src/components/context-menu-trigger/README.md +50 -0
  382. package/src/components/context-menu-trigger/context-menu-trigger.svelte +5 -3
  383. package/src/components/data-table/README.md +67 -0
  384. package/src/components/data-table/data-table.css +30 -0
  385. package/src/components/data-table/data-table.examples.json +19 -0
  386. package/src/components/data-table/data-table.schema.json +43 -0
  387. package/src/components/data-table/data-table.schema.ts +50 -0
  388. package/src/components/data-table/data-table.svelte +106 -0
  389. package/src/components/data-table/data-table.types.ts +89 -0
  390. package/src/components/data-table/data-table.variables.json +1 -0
  391. package/src/components/data-table/data-table.variables.ts +3 -0
  392. package/src/components/data-table/index.ts +6 -0
  393. package/src/components/diff-viewer/README.md +59 -0
  394. package/src/components/diff-viewer/front-matter-header.svelte +20 -4
  395. package/src/components/dropdown-group/README.md +52 -0
  396. package/src/components/dropdown-item/README.md +10 -7
  397. package/src/components/dropdown-item/dropdown-item.schema.json +12 -0
  398. package/src/components/dropdown-item/dropdown-item.schema.ts +14 -0
  399. package/src/components/dropdown-item/dropdown-item.svelte +108 -25
  400. package/src/components/dropdown-item/dropdown-item.types.ts +58 -2
  401. package/src/components/dropdown-item/index.ts +6 -1
  402. package/src/components/floating-action-button/README.md +53 -0
  403. package/src/components/floating-action-button/floating-action-button.css +4 -2
  404. package/src/components/form-section/form-section.examples.json +6 -0
  405. package/src/components/hover-card/README.md +60 -0
  406. package/src/components/json-schema-editor/README.md +59 -0
  407. package/src/components/kanban-board/README.md +62 -0
  408. package/src/components/keyboard-shortcuts/README.md +51 -0
  409. package/src/components/keyboard-shortcuts/index.ts +10 -0
  410. package/src/components/keyboard-shortcuts/keyboard-shortcuts.css +84 -0
  411. package/src/components/keyboard-shortcuts/keyboard-shortcuts.examples.json +13 -0
  412. package/src/components/keyboard-shortcuts/keyboard-shortcuts.schema.json +27 -0
  413. package/src/components/keyboard-shortcuts/keyboard-shortcuts.schema.ts +31 -0
  414. package/src/components/keyboard-shortcuts/keyboard-shortcuts.svelte +91 -0
  415. package/src/components/keyboard-shortcuts/keyboard-shortcuts.types.ts +46 -0
  416. package/src/components/keyboard-shortcuts/keyboard-shortcuts.variables.json +1 -0
  417. package/src/components/keyboard-shortcuts/keyboard-shortcuts.variables.ts +3 -0
  418. package/src/components/line-chart/README.md +61 -0
  419. package/src/components/line-chart/line-chart.css +57 -8
  420. package/src/components/line-chart/line-chart.svelte +128 -10
  421. package/src/components/link/README.md +55 -0
  422. package/src/components/markdown-editor/README.md +70 -0
  423. package/src/components/markdown-editor/editor-toolbar/toolbar-button.svelte +9 -4
  424. package/src/components/markdown-editor/editor-toolbar/toolbar-dropdown.svelte +9 -4
  425. package/src/components/markdown-editor/prosemirror.css +4 -2
  426. package/src/components/matrix-chart/README.md +61 -0
  427. package/src/components/matrix-chart/index.ts +10 -0
  428. package/src/components/matrix-chart/matrix-chart.css +50 -0
  429. package/src/components/matrix-chart/matrix-chart.examples.json +19 -0
  430. package/src/components/matrix-chart/matrix-chart.schema.json +63 -0
  431. package/src/components/matrix-chart/matrix-chart.schema.ts +67 -0
  432. package/src/components/matrix-chart/matrix-chart.svelte +336 -0
  433. package/src/components/matrix-chart/matrix-chart.types.ts +56 -0
  434. package/src/components/matrix-chart/matrix-chart.variables.json +1 -0
  435. package/src/components/matrix-chart/matrix-chart.variables.ts +3 -0
  436. package/src/components/media-controls/README.md +60 -0
  437. package/src/components/media-controls/index.ts +6 -0
  438. package/src/components/media-controls/media-controls.css +112 -0
  439. package/src/components/media-controls/media-controls.examples.json +19 -0
  440. package/src/components/media-controls/media-controls.schema.json +65 -0
  441. package/src/components/media-controls/media-controls.schema.ts +69 -0
  442. package/src/components/media-controls/media-controls.svelte +238 -0
  443. package/src/components/media-controls/media-controls.types.ts +80 -0
  444. package/src/components/media-controls/media-controls.variables.json +1 -0
  445. package/src/components/media-controls/media-controls.variables.ts +3 -0
  446. package/src/components/menu-bar/README.md +53 -0
  447. package/src/components/navigation-bar/README.md +1 -1
  448. package/src/components/navigation-bar/navigation-bar.schema.json +4 -4
  449. package/src/components/navigation-bar/navigation-bar.schema.ts +4 -4
  450. package/src/components/navigation-bar/navigation-bar.types.ts +2 -1
  451. package/src/components/pricing-card/README.md +55 -0
  452. package/src/components/pricing-card/index.ts +6 -0
  453. package/src/components/pricing-card/pricing-card.css +173 -0
  454. package/src/components/pricing-card/pricing-card.examples.json +19 -0
  455. package/src/components/pricing-card/pricing-card.schema.json +40 -0
  456. package/src/components/pricing-card/pricing-card.schema.ts +44 -0
  457. package/src/components/pricing-card/pricing-card.svelte +70 -0
  458. package/src/components/pricing-card/pricing-card.types.ts +49 -0
  459. package/src/components/pricing-card/pricing-card.variables.json +1 -0
  460. package/src/components/pricing-card/pricing-card.variables.ts +3 -0
  461. package/src/components/review-editor/README.md +64 -0
  462. package/src/components/review-editor/comment-composer.svelte +8 -8
  463. package/src/components/review-editor/comment-list.svelte +10 -1
  464. package/src/components/search-field/search-field.examples.json +13 -0
  465. package/src/components/segment/README.md +55 -0
  466. package/src/components/share-card/README.md +58 -0
  467. package/src/components/share-card/index.ts +6 -0
  468. package/src/components/share-card/share-card.css +115 -0
  469. package/src/components/share-card/share-card.examples.json +19 -0
  470. package/src/components/share-card/share-card.schema.json +53 -0
  471. package/src/components/share-card/share-card.schema.ts +57 -0
  472. package/src/components/share-card/share-card.svelte +330 -0
  473. package/src/components/share-card/share-card.types.ts +69 -0
  474. package/src/components/share-card/share-card.variables.json +1 -0
  475. package/src/components/share-card/share-card.variables.ts +3 -0
  476. package/src/components/shortcut-hint/README.md +52 -0
  477. package/src/components/shortcut-hint/index.ts +6 -0
  478. package/src/components/shortcut-hint/shortcut-hint.css +26 -0
  479. package/src/components/shortcut-hint/shortcut-hint.examples.json +13 -0
  480. package/src/components/shortcut-hint/shortcut-hint.schema.json +36 -0
  481. package/src/components/shortcut-hint/shortcut-hint.schema.ts +40 -0
  482. package/src/components/shortcut-hint/shortcut-hint.svelte +62 -0
  483. package/src/components/shortcut-hint/shortcut-hint.types.ts +35 -0
  484. package/src/components/shortcut-hint/shortcut-hint.variables.json +1 -0
  485. package/src/components/shortcut-hint/shortcut-hint.variables.ts +3 -0
  486. package/src/components/side-navigation/side-navigation.examples.json +6 -0
  487. package/src/components/skip-link/README.md +50 -0
  488. package/src/components/skip-link/index.ts +5 -0
  489. package/src/components/skip-link/skip-link.examples.json +13 -0
  490. package/src/components/skip-link/skip-link.schema.json +16 -0
  491. package/src/components/skip-link/skip-link.schema.ts +20 -0
  492. package/src/components/skip-link/skip-link.svelte +86 -0
  493. package/src/components/skip-link/skip-link.types.ts +40 -0
  494. package/src/components/skip-link/skip-link.variables.json +1 -0
  495. package/src/components/skip-link/skip-link.variables.ts +3 -0
  496. package/src/components/spectrogram/README.md +58 -0
  497. package/src/components/spectrogram/index.ts +10 -0
  498. package/src/components/spectrogram/spectrogram.css +43 -0
  499. package/src/components/spectrogram/spectrogram.examples.json +13 -0
  500. package/src/components/spectrogram/spectrogram.schema.json +43 -0
  501. package/src/components/spectrogram/spectrogram.schema.ts +47 -0
  502. package/src/components/spectrogram/spectrogram.svelte +284 -0
  503. package/src/components/spectrogram/spectrogram.types.ts +63 -0
  504. package/src/components/spectrogram/spectrogram.variables.json +1 -0
  505. package/src/components/spectrogram/spectrogram.variables.ts +3 -0
  506. package/src/components/spectrum-chart/README.md +57 -0
  507. package/src/components/spectrum-chart/index.ts +10 -0
  508. package/src/components/spectrum-chart/spectrum-chart.css +49 -0
  509. package/src/components/spectrum-chart/spectrum-chart.examples.json +13 -0
  510. package/src/components/spectrum-chart/spectrum-chart.schema.json +37 -0
  511. package/src/components/spectrum-chart/spectrum-chart.schema.ts +41 -0
  512. package/src/components/spectrum-chart/spectrum-chart.svelte +247 -0
  513. package/src/components/spectrum-chart/spectrum-chart.types.ts +44 -0
  514. package/src/components/spectrum-chart/spectrum-chart.variables.json +1 -0
  515. package/src/components/spectrum-chart/spectrum-chart.variables.ts +3 -0
  516. package/src/components/status-dot/README.md +7 -7
  517. package/src/components/status-dot/status-dot.css +8 -0
  518. package/src/components/status-dot/status-dot.schema.json +2 -2
  519. package/src/components/status-dot/status-dot.schema.ts +3 -2
  520. package/src/components/status-dot/status-dot.types.ts +13 -2
  521. package/src/components/subscription-badge/README.md +50 -0
  522. package/src/components/subscription-badge/index.ts +6 -0
  523. package/src/components/subscription-badge/subscription-badge.css +18 -0
  524. package/src/components/subscription-badge/subscription-badge.examples.json +19 -0
  525. package/src/components/subscription-badge/subscription-badge.schema.json +16 -0
  526. package/src/components/subscription-badge/subscription-badge.schema.ts +21 -0
  527. package/src/components/subscription-badge/subscription-badge.svelte +69 -0
  528. package/src/components/subscription-badge/subscription-badge.types.ts +37 -0
  529. package/src/components/subscription-badge/subscription-badge.variables.json +1 -0
  530. package/src/components/subscription-badge/subscription-badge.variables.ts +3 -0
  531. package/src/components/table-cell/README.md +6 -5
  532. package/src/components/table-cell/table-cell.schema.json +4 -0
  533. package/src/components/table-cell/table-cell.schema.ts +5 -0
  534. package/src/components/table-cell/table-cell.svelte +9 -3
  535. package/src/components/table-cell/table-cell.types.ts +16 -1
  536. package/src/components/tag-input/README.md +75 -0
  537. package/src/components/typography/README.md +51 -0
  538. package/src/components/waveform/README.md +57 -0
  539. package/src/components/waveform/index.ts +6 -0
  540. package/src/components/waveform/waveform.css +53 -0
  541. package/src/components/waveform/waveform.examples.json +19 -0
  542. package/src/components/waveform/waveform.schema.json +38 -0
  543. package/src/components/waveform/waveform.schema.ts +42 -0
  544. package/src/components/waveform/waveform.svelte +286 -0
  545. package/src/components/waveform/waveform.types.ts +45 -0
  546. package/src/components/waveform/waveform.variables.json +1 -0
  547. package/src/components/waveform/waveform.variables.ts +3 -0
  548. package/src/index.ts +85 -2
  549. package/src/styles/components.css +13 -0
  550. package/src/styles/shell.css +3 -0
  551. package/src/styles/tokens-base.css +59 -22
@@ -0,0 +1,1156 @@
1
+ var __create = Object.create;
2
+ var __getProtoOf = Object.getPrototypeOf;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ function __accessProp(key) {
7
+ return this[key];
8
+ }
9
+ var __toESMCache_node;
10
+ var __toESMCache_esm;
11
+ var __toESM = (mod, isNodeMode, target) => {
12
+ var canCache = mod != null && typeof mod === "object";
13
+ if (canCache) {
14
+ var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
15
+ var cached = cache.get(mod);
16
+ if (cached)
17
+ return cached;
18
+ }
19
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
20
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
21
+ for (let key of __getOwnPropNames(mod))
22
+ if (!__hasOwnProp.call(to, key))
23
+ __defProp(to, key, {
24
+ get: __accessProp.bind(mod, key),
25
+ enumerable: true
26
+ });
27
+ if (canCache)
28
+ cache.set(mod, to);
29
+ return to;
30
+ };
31
+ var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
32
+ var __returnValue = (v) => v;
33
+ function __exportSetter(name, newValue) {
34
+ this[name] = __returnValue.bind(null, newValue);
35
+ }
36
+ var __export = (target, all) => {
37
+ for (var name in all)
38
+ __defProp(target, name, {
39
+ get: all[name],
40
+ enumerable: true,
41
+ configurable: true,
42
+ set: __exportSetter.bind(all, name)
43
+ });
44
+ };
45
+ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
46
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
47
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
48
+ }) : x)(function(x) {
49
+ if (typeof require !== "undefined")
50
+ return require.apply(this, arguments);
51
+ throw Error('Dynamic require of "' + x + '" is not supported');
52
+ });
53
+
54
+ // src/components/spectrogram/index.ts
55
+ import"@lostgradient/cinder/spectrogram/styles";
56
+
57
+ // src/components/spectrogram/spectrogram.svelte
58
+ import"svelte/internal/disclose-version";
59
+ import * as $ from "svelte/internal/client";
60
+
61
+ // src/_internal/chart/chart-utilities.ts
62
+ var chartPalette = [
63
+ "var(--cinder-chart-series-1)",
64
+ "var(--cinder-chart-series-2)",
65
+ "var(--cinder-chart-series-3)",
66
+ "var(--cinder-chart-series-4)",
67
+ "var(--cinder-chart-series-5)",
68
+ "var(--cinder-chart-series-6)",
69
+ "var(--cinder-chart-series-7)",
70
+ "var(--cinder-chart-series-8)"
71
+ ];
72
+ function chartPaletteColor(index) {
73
+ return chartPalette[index % chartPalette.length] ?? "var(--cinder-chart-series-1)";
74
+ }
75
+ function assertValidChartNumber(componentId, rule, value, label) {
76
+ if (!Number.isFinite(value) || value <= 0) {
77
+ throw new Error(`[cinder/${componentId}] rule=${rule} ${label}="${value}": expected a positive finite number.`);
78
+ }
79
+ }
80
+ function assertValidNonNegativeInteger(componentId, rule, value, label) {
81
+ if (!Number.isInteger(value) || value < 0) {
82
+ throw new Error(`[cinder/${componentId}] rule=${rule} ${label}="${value}": expected a non-negative integer.`);
83
+ }
84
+ }
85
+ function assertValidTickCount(componentId, axis) {
86
+ if (axis?.tickCount === undefined)
87
+ return;
88
+ if (!Number.isInteger(axis.tickCount) || axis.tickCount <= 0) {
89
+ throw new Error(`[cinder/${componentId}] rule=invalid-tick-count tickCount="${axis.tickCount}": expected a positive integer.`);
90
+ }
91
+ }
92
+ function dataTableClass(visibility) {
93
+ return visibility === "screen-reader-only" ? "cinder-sr-only" : undefined;
94
+ }
95
+ function formatXValue(value, axis, context) {
96
+ return axis?.format ? axis.format(value.raw, context) : value.label;
97
+ }
98
+ function formatNumericValue(value, axis, formatter, context) {
99
+ if (formatter)
100
+ return formatter(value, context);
101
+ if (axis?.format)
102
+ return axis.format(value, context);
103
+ return new Intl.NumberFormat(undefined, { maximumFractionDigits: 2 }).format(value);
104
+ }
105
+ function normalizeXValue(value) {
106
+ if (value instanceof Date) {
107
+ const comparable = value.getTime();
108
+ return {
109
+ raw: value,
110
+ key: `date:${comparable}`,
111
+ label: value.toISOString(),
112
+ comparable,
113
+ kind: "date"
114
+ };
115
+ }
116
+ if (typeof value === "number") {
117
+ return {
118
+ raw: value,
119
+ key: `number:${value}`,
120
+ label: String(value),
121
+ comparable: value,
122
+ kind: "number"
123
+ };
124
+ }
125
+ return { raw: value, key: `string:${value}`, label: value, comparable: value, kind: "string" };
126
+ }
127
+ function assertUniqueSeriesIds(componentId, series) {
128
+ const seen = new Set;
129
+ for (const item of series) {
130
+ if (seen.has(item.id)) {
131
+ throw new Error(`[cinder/${componentId}] rule=duplicate-series-id series="${item.id}": duplicate series ids are not supported.`);
132
+ }
133
+ seen.add(item.id);
134
+ }
135
+ }
136
+ function toggleSeriesId(hiddenSeriesIds, seriesId) {
137
+ return hiddenSeriesIds.includes(seriesId) ? hiddenSeriesIds.filter((id) => id !== seriesId) : [...hiddenSeriesIds, seriesId];
138
+ }
139
+ function createCartesianModel(options) {
140
+ const {
141
+ componentId,
142
+ series,
143
+ hiddenSeriesIds,
144
+ width,
145
+ height,
146
+ xAxis,
147
+ yAxis,
148
+ stackedArea = false
149
+ } = options;
150
+ assertUniqueSeriesIds(componentId, series);
151
+ assertValidChartNumber(componentId, "invalid-height", height, "height");
152
+ assertValidTickCount(componentId, xAxis);
153
+ assertValidTickCount(componentId, yAxis);
154
+ const geometry = createGeometry(width, height);
155
+ const allKinds = new Set;
156
+ const xValuesByKey = new Map;
157
+ const normalizedSeries = series.map((item, seriesIndex) => {
158
+ const seenX = new Set;
159
+ const color = item.color ?? chartPaletteColor(seriesIndex);
160
+ const points = item.data.map((point, pointIndex) => {
161
+ const x = normalizeXValue(point.x);
162
+ allKinds.add(x.kind);
163
+ if (seenX.has(x.key)) {
164
+ throw new Error(`[cinder/${componentId}] rule=duplicate-x series="${item.id}" x="${x.label}": duplicate x values are not supported.`);
165
+ }
166
+ seenX.add(x.key);
167
+ xValuesByKey.set(x.key, x);
168
+ const y = normalizeNumericValue(componentId, item.id, x.label, point.y);
169
+ return {
170
+ seriesId: item.id,
171
+ seriesLabel: item.label,
172
+ color,
173
+ x,
174
+ y,
175
+ originalY: point.y,
176
+ index: pointIndex
177
+ };
178
+ });
179
+ return { id: item.id, label: item.label, color, points };
180
+ });
181
+ if (allKinds.size > 1) {
182
+ throw new Error(`[cinder/${componentId}] rule=mixed-x-domain-kind: all x values must share one domain kind.`);
183
+ }
184
+ if (stackedArea) {
185
+ for (const item of normalizedSeries) {
186
+ for (const point of item.points) {
187
+ if ((point.y ?? 0) < 0) {
188
+ throw new Error(`[cinder/${componentId}] rule=negative-stacked-area series="${item.id}" x="${point.x.label}": stacked areas do not support negative values.`);
189
+ }
190
+ }
191
+ }
192
+ }
193
+ const sortedXValues = sortXValues([...xValuesByKey.values()]);
194
+ const orderByKey = new Map(sortedXValues.map((value, index) => [value.key, index]));
195
+ const visibleNumericValues = [];
196
+ for (const item of normalizedSeries) {
197
+ if (hiddenSeriesIds.includes(item.id))
198
+ continue;
199
+ for (const point of item.points) {
200
+ if (point.y !== null)
201
+ visibleNumericValues.push(point.y);
202
+ }
203
+ }
204
+ const stackedTotalsByKey = new Map(sortedXValues.map((value) => [value.key, 0]));
205
+ if (stackedArea) {
206
+ for (const item of normalizedSeries) {
207
+ if (hiddenSeriesIds.includes(item.id))
208
+ continue;
209
+ for (const point of item.points) {
210
+ if (point.y === null)
211
+ continue;
212
+ stackedTotalsByKey.set(point.x.key, (stackedTotalsByKey.get(point.x.key) ?? 0) + point.y);
213
+ }
214
+ }
215
+ }
216
+ const domainValues = stackedArea ? [0, ...stackedTotalsByKey.values()] : visibleNumericValues;
217
+ const [yMinimum, yMaximum] = createPaddedDomain(domainValues);
218
+ const xStringScale = sortedXValues[0]?.kind === "string" ? createPointScale(sortedXValues.map((value) => value.key), [0, geometry.plotWidth], 0.5) : undefined;
219
+ const xNumericScale = sortedXValues[0] && sortedXValues[0].kind !== "string" ? createLinearScale(createNumericDomain(sortedXValues), [0, geometry.plotWidth]) : undefined;
220
+ const yScale = createLinearScale([yMinimum, yMaximum], [geometry.plotHeight, 0]);
221
+ function scaleX(value) {
222
+ if (value.kind === "string")
223
+ return xStringScale?.(value.key) ?? 0;
224
+ return xNumericScale?.(Number(value.comparable)) ?? 0;
225
+ }
226
+ const tickCount = xAxis?.tickCount ?? sortedXValues.length;
227
+ const xTicks = buildXAxisTicks(sortedXValues, tickCount, xAxis, scaleX);
228
+ const targets = [];
229
+ const tableRows = [];
230
+ const stackedOffsetsByKey = new Map(sortedXValues.map((value) => [value.key, 0]));
231
+ const renderedSeries = normalizedSeries.map((item) => {
232
+ const hidden = hiddenSeriesIds.includes(item.id);
233
+ const points = item.points.filter((point) => point.y !== null).toSorted((a, b) => (orderByKey.get(a.x.key) ?? 0) - (orderByKey.get(b.x.key) ?? 0));
234
+ const placedPoints = points.map((point) => {
235
+ const lowerValue = stackedArea ? stackedOffsetsByKey.get(point.x.key) ?? 0 : 0;
236
+ const upperValue = lowerValue + (point.y ?? 0);
237
+ return {
238
+ ...point,
239
+ pixelX: scaleX(point.x),
240
+ pixelY: yScale(stackedArea ? upperValue : point.y ?? 0)
241
+ };
242
+ });
243
+ const coordinates = placedPoints.map((placed) => ({
244
+ x: placed.pixelX,
245
+ y: placed.pixelY,
246
+ y0: yScale(stackedArea ? stackedOffsetsByKey.get(placed.x.key) ?? 0 : 0)
247
+ }));
248
+ if (!hidden) {
249
+ for (const placed of placedPoints) {
250
+ const xLabel = formatXValue(placed.x, xAxis, {
251
+ seriesId: item.id,
252
+ seriesLabel: item.label,
253
+ index: placed.index
254
+ });
255
+ const valueLabel = formatNumericValue(placed.y ?? 0, yAxis, series.find((entry) => entry.id === item.id)?.valueFormatter, { seriesId: item.id, seriesLabel: item.label, index: placed.index });
256
+ targets.push({
257
+ id: `${item.id}-${placed.x.key}`,
258
+ seriesId: item.id,
259
+ seriesLabel: item.label,
260
+ xLabel,
261
+ valueLabel,
262
+ x: placed.pixelX,
263
+ y: placed.pixelY,
264
+ color: item.color
265
+ });
266
+ tableRows.push({
267
+ id: `${item.id}-${placed.x.key}`,
268
+ seriesLabel: item.label,
269
+ xLabel,
270
+ valueLabel
271
+ });
272
+ }
273
+ if (stackedArea) {
274
+ for (const placed of placedPoints) {
275
+ stackedOffsetsByKey.set(placed.x.key, (stackedOffsetsByKey.get(placed.x.key) ?? 0) + (placed.y ?? 0));
276
+ }
277
+ }
278
+ }
279
+ return {
280
+ ...item,
281
+ hidden,
282
+ points: hidden ? [] : placedPoints,
283
+ path: hidden ? "" : createLinePath(coordinates),
284
+ areaPath: hidden ? "" : createAreaPath(coordinates, stackedArea ? undefined : geometry.plotHeight)
285
+ };
286
+ });
287
+ targets.sort((a, b) => a.x - b.x);
288
+ return {
289
+ geometry,
290
+ xTicks,
291
+ yTicks: yScale.ticks(yAxis?.tickCount ?? 5),
292
+ normalizedSeries: renderedSeries,
293
+ tableRows,
294
+ targets,
295
+ empty: targets.length === 0,
296
+ yDomain: [yMinimum, yMaximum]
297
+ };
298
+ }
299
+ function buildXAxisTicks(sortedXValues, tickCount, xAxis, scaleX) {
300
+ if (sortedXValues.length === 0)
301
+ return [];
302
+ const safeTickCount = Math.max(1, Math.min(tickCount, sortedXValues.length));
303
+ if (safeTickCount >= sortedXValues.length) {
304
+ return sortedXValues.map((value, index) => ({
305
+ label: formatXValue(value, xAxis, { index }),
306
+ x: scaleX(value)
307
+ }));
308
+ }
309
+ if (safeTickCount === 1) {
310
+ const value = sortedXValues[0];
311
+ return value ? [{ label: formatXValue(value, xAxis, { index: 0 }), x: scaleX(value) }] : [];
312
+ }
313
+ const step = (sortedXValues.length - 1) / (safeTickCount - 1);
314
+ const ticks = [];
315
+ for (let i = 0;i < safeTickCount; i++) {
316
+ const sourceIndex = Math.round(i * step);
317
+ const value = sortedXValues[sourceIndex];
318
+ if (!value)
319
+ continue;
320
+ ticks.push({
321
+ label: formatXValue(value, xAxis, { index: i }),
322
+ x: scaleX(value)
323
+ });
324
+ }
325
+ return ticks;
326
+ }
327
+ function createBarModel(options) {
328
+ const {
329
+ data,
330
+ categoryKey,
331
+ series,
332
+ hiddenSeriesIds,
333
+ width,
334
+ height,
335
+ orientation,
336
+ mode,
337
+ xAxis,
338
+ yAxis
339
+ } = options;
340
+ assertUniqueSeriesIds("bar-chart", series);
341
+ assertValidChartNumber("bar-chart", "invalid-height", height, "height");
342
+ assertValidTickCount("bar-chart", xAxis);
343
+ assertValidTickCount("bar-chart", yAxis);
344
+ const geometry = createGeometry(width, height);
345
+ const categories = [];
346
+ const seenCategories = new Set;
347
+ const categoryKinds = new Set;
348
+ const visibleSeries = series.filter((item) => !hiddenSeriesIds.includes(item.id));
349
+ const visibleValues = [0];
350
+ const datumByKey = new Map;
351
+ for (const datum of data) {
352
+ if (!(categoryKey in datum)) {
353
+ throw new Error(`[cinder/bar-chart] rule=invalid-bar-category key="${categoryKey}": category key is missing.`);
354
+ }
355
+ const rawCategory = datum[categoryKey];
356
+ if (!(typeof rawCategory === "string" || typeof rawCategory === "number" || rawCategory instanceof Date)) {
357
+ throw new Error(`[cinder/bar-chart] rule=invalid-bar-category key="${categoryKey}": category must be string, number, or Date.`);
358
+ }
359
+ const category = normalizeXValue(rawCategory);
360
+ categoryKinds.add(category.kind);
361
+ if (seenCategories.has(category.key)) {
362
+ throw new Error(`[cinder/bar-chart] rule=duplicate-category key="${categoryKey}" category="${category.label}": duplicate categories are not supported.`);
363
+ }
364
+ seenCategories.add(category.key);
365
+ categories.push(category);
366
+ datumByKey.set(category.key, datum);
367
+ for (const item of series) {
368
+ if (!(item.valueKey in datum)) {
369
+ throw new Error(`[cinder/bar-chart] rule=missing-bar-value-key key="${item.valueKey}": value key is missing.`);
370
+ }
371
+ const value = datum[item.valueKey];
372
+ if (!(typeof value === "number" || value === null || value === undefined)) {
373
+ throw new Error(`[cinder/bar-chart] rule=invalid-bar-value key="${item.valueKey}" category="${category.label}": value must be number, null, or undefined.`);
374
+ }
375
+ const numericValue = normalizeNumericValue("bar-chart", item.id, category.label, value);
376
+ if (numericValue !== null && !hiddenSeriesIds.includes(item.id))
377
+ visibleValues.push(numericValue);
378
+ }
379
+ }
380
+ if (categoryKinds.size > 1) {
381
+ throw new Error(`[cinder/bar-chart] rule=mixed-bar-category-kind key="${categoryKey}": category values must share one domain kind.`);
382
+ }
383
+ const sortedCategories = sortXValues(categories);
384
+ const valueDomain = createPaddedDomain(mode === "stacked" ? createStackedBarDomainValues(datumByKey, sortedCategories, visibleSeries) : visibleValues);
385
+ const valueScale = createLinearScale(valueDomain, orientation === "vertical" ? [geometry.plotHeight, 0] : [0, geometry.plotWidth]);
386
+ const categoryScale = createBandScale(sortedCategories.map((category) => category.key), orientation === "vertical" ? [0, geometry.plotWidth] : [0, geometry.plotHeight], 0.18);
387
+ const groupScale = createBandScale(visibleSeries.map((item) => item.id), [0, categoryScale.bandwidth()], 0.12);
388
+ const categoryTicks = sortedCategories.map((category, index) => {
389
+ const categoryPosition = categoryScale(category.key) ?? 0;
390
+ return {
391
+ categoryKey: category.key,
392
+ label: formatXValue(category, orientation === "vertical" ? xAxis : yAxis, { index }),
393
+ x: orientation === "vertical" ? categoryPosition + categoryScale.bandwidth() / 2 : -8,
394
+ y: orientation === "vertical" ? geometry.plotHeight + 20 : categoryPosition + categoryScale.bandwidth() / 2
395
+ };
396
+ });
397
+ const bars = [];
398
+ const targets = [];
399
+ const tableRows = [];
400
+ for (const [categoryIndex, category] of sortedCategories.entries()) {
401
+ const datum = datumByKey.get(category.key);
402
+ if (!datum)
403
+ continue;
404
+ let positiveOffset = 0;
405
+ let negativeOffset = 0;
406
+ const rowValues = [];
407
+ visibleSeries.forEach((item) => {
408
+ const rawValue = datum[item.valueKey];
409
+ if (typeof rawValue !== "number")
410
+ return;
411
+ const value = rawValue;
412
+ const seriesColorIndex = Math.max(0, series.findIndex((entry) => entry.id === item.id));
413
+ const color = item.color ?? chartPaletteColor(seriesColorIndex);
414
+ const categoryPosition = categoryScale(category.key) ?? 0;
415
+ let x = 0;
416
+ let y = 0;
417
+ let barWidth = 0;
418
+ let barHeight = 0;
419
+ if (orientation === "vertical") {
420
+ const groupX = mode === "grouped" ? groupScale(item.id) ?? 0 : 0;
421
+ const start = mode === "stacked" ? value >= 0 ? positiveOffset : negativeOffset : 0;
422
+ const end = start + value;
423
+ if (mode === "stacked") {
424
+ if (value >= 0)
425
+ positiveOffset = end;
426
+ else
427
+ negativeOffset = end;
428
+ }
429
+ const y0 = valueScale(start);
430
+ const y1 = valueScale(end);
431
+ x = categoryPosition + groupX;
432
+ y = Math.min(y0, y1);
433
+ barWidth = mode === "grouped" ? groupScale.bandwidth() : categoryScale.bandwidth();
434
+ barHeight = Math.abs(y1 - y0);
435
+ } else {
436
+ const groupY = mode === "grouped" ? groupScale(item.id) ?? 0 : 0;
437
+ const start = mode === "stacked" ? value >= 0 ? positiveOffset : negativeOffset : 0;
438
+ const end = start + value;
439
+ if (mode === "stacked") {
440
+ if (value >= 0)
441
+ positiveOffset = end;
442
+ else
443
+ negativeOffset = end;
444
+ }
445
+ const x0 = valueScale(start);
446
+ const x1 = valueScale(end);
447
+ x = Math.min(x0, x1);
448
+ y = categoryPosition + groupY;
449
+ barWidth = Math.abs(x1 - x0);
450
+ barHeight = mode === "grouped" ? groupScale.bandwidth() : categoryScale.bandwidth();
451
+ }
452
+ const valueLabel = formatNumericValue(value, orientation === "vertical" ? yAxis : xAxis, item.valueFormatter, { seriesId: item.id, seriesLabel: item.label, index: categoryIndex });
453
+ const categoryLabel = formatXValue(category, orientation === "vertical" ? xAxis : yAxis, {
454
+ seriesId: item.id,
455
+ seriesLabel: item.label,
456
+ index: categoryIndex
457
+ });
458
+ rowValues.push({ seriesId: item.id, seriesLabel: item.label, valueLabel });
459
+ const bar = {
460
+ id: `${item.id}-${category.key}`,
461
+ seriesId: item.id,
462
+ seriesLabel: item.label,
463
+ categoryLabel,
464
+ valueLabel,
465
+ x,
466
+ y,
467
+ width: barWidth,
468
+ height: barHeight,
469
+ color,
470
+ hidden: false
471
+ };
472
+ bars.push(bar);
473
+ targets.push({ ...bar, x: x + barWidth / 2, y: y + barHeight / 2, xLabel: categoryLabel });
474
+ });
475
+ if (rowValues.length > 0) {
476
+ tableRows.push({
477
+ categoryKey: category.key,
478
+ categoryLabel: formatXValue(category, orientation === "vertical" ? xAxis : yAxis, {
479
+ index: tableRows.length
480
+ }),
481
+ values: rowValues
482
+ });
483
+ }
484
+ }
485
+ targets.sort((a, b) => orientation === "vertical" ? a.x - b.x : a.y - b.y);
486
+ return {
487
+ geometry,
488
+ categories: sortedCategories,
489
+ yTicks: valueScale.ticks((orientation === "vertical" ? yAxis : xAxis)?.tickCount ?? 5),
490
+ categoryTicks,
491
+ bars,
492
+ tableRows,
493
+ targets,
494
+ empty: targets.length === 0,
495
+ valueDomain
496
+ };
497
+ }
498
+ function nearestTarget(targets, x, y, axis = "x") {
499
+ if (targets.length === 0)
500
+ return;
501
+ if (targets.length === 1)
502
+ return targets[0];
503
+ const pointerKey = axis === "x" ? x : y;
504
+ let low = 0;
505
+ let high = targets.length - 1;
506
+ while (low < high) {
507
+ const mid = low + high >> 1;
508
+ const midKey = axis === "x" ? targets[mid]?.x ?? 0 : targets[mid]?.y ?? 0;
509
+ if (midKey < pointerKey)
510
+ low = mid + 1;
511
+ else
512
+ high = mid;
513
+ }
514
+ const candidates = [];
515
+ function addBucket(start) {
516
+ const target = targets[start];
517
+ if (!target)
518
+ return;
519
+ const bucketKey = axis === "x" ? target.x : target.y;
520
+ for (let index = start;index >= 0; index--) {
521
+ const candidate = targets[index];
522
+ if (!candidate)
523
+ continue;
524
+ const candidateKey = axis === "x" ? candidate.x : candidate.y;
525
+ if (candidateKey !== bucketKey)
526
+ break;
527
+ candidates.push(candidate);
528
+ }
529
+ for (let index = start + 1;index < targets.length; index++) {
530
+ const candidate = targets[index];
531
+ if (!candidate)
532
+ continue;
533
+ const candidateKey = axis === "x" ? candidate.x : candidate.y;
534
+ if (candidateKey !== bucketKey)
535
+ break;
536
+ candidates.push(candidate);
537
+ }
538
+ }
539
+ addBucket(low);
540
+ if (low > 0) {
541
+ let previous = low - 1;
542
+ const lowTarget = targets[low];
543
+ const lowKey = lowTarget ? axis === "x" ? lowTarget.x : lowTarget.y : undefined;
544
+ while (previous > 0) {
545
+ const previousTarget = targets[previous];
546
+ if (!previousTarget)
547
+ break;
548
+ const previousKey = axis === "x" ? previousTarget.x : previousTarget.y;
549
+ if (previousKey !== lowKey)
550
+ break;
551
+ previous--;
552
+ }
553
+ addBucket(previous);
554
+ }
555
+ return candidates.reduce((nearest, target) => {
556
+ if (!nearest)
557
+ return target;
558
+ const targetDistance = Math.hypot(target.x - x, target.y - y);
559
+ const nearestDistance = Math.hypot(nearest.x - x, nearest.y - y);
560
+ return targetDistance < nearestDistance ? target : nearest;
561
+ }, undefined);
562
+ }
563
+ function legendVisible(legendPosition, seriesCount) {
564
+ return legendPosition !== "none" && seriesCount > 0;
565
+ }
566
+ function createGeometry(width, height) {
567
+ const marginTop = 16;
568
+ const marginRight = 16;
569
+ const marginBottom = 36;
570
+ const marginLeft = 48;
571
+ return {
572
+ plotWidth: Math.max(1, width - marginLeft - marginRight),
573
+ plotHeight: Math.max(1, height - marginTop - marginBottom),
574
+ marginTop,
575
+ marginRight,
576
+ marginBottom,
577
+ marginLeft
578
+ };
579
+ }
580
+ function normalizeNumericValue(componentId, seriesId, xLabel, value) {
581
+ if (value === null || value === undefined)
582
+ return null;
583
+ if (!Number.isFinite(value)) {
584
+ throw new Error(`[cinder/${componentId}] rule=non-finite-y series="${seriesId}" x="${xLabel}": y values must be finite numbers.`);
585
+ }
586
+ return value;
587
+ }
588
+ function sortXValues(values) {
589
+ if (values[0]?.kind === "string")
590
+ return values;
591
+ return [...values].toSorted((a, b) => Number(a.comparable) - Number(b.comparable));
592
+ }
593
+ function createPaddedDomain(values) {
594
+ if (values.length === 0)
595
+ return [-1, 1];
596
+ let minimum = values[0];
597
+ let maximum = values[0];
598
+ for (let index = 1;index < values.length; index++) {
599
+ const value = values[index];
600
+ if (value < minimum)
601
+ minimum = value;
602
+ if (value > maximum)
603
+ maximum = value;
604
+ }
605
+ if (minimum === maximum)
606
+ return [minimum - 1, maximum + 1];
607
+ return [Math.min(0, minimum), Math.max(0, maximum)];
608
+ }
609
+ function createLinearScale(domain, range) {
610
+ const [domainMinimum, domainMaximum] = domain[0] === domain[1] ? [domain[0] - 1, domain[1] + 1] : domain;
611
+ const [rangeMinimum, rangeMaximum] = range;
612
+ const domainSpan = domainMaximum - domainMinimum;
613
+ const rangeSpan = rangeMaximum - rangeMinimum;
614
+ const scale = Object.assign((value) => rangeMinimum + (value - domainMinimum) / domainSpan * rangeSpan, {
615
+ ticks: (count) => createTicks([domainMinimum, domainMaximum], count)
616
+ });
617
+ return scale;
618
+ }
619
+ function createPointScale(domain, range, padding) {
620
+ const positions = new Map;
621
+ if (domain.length === 0)
622
+ return () => {
623
+ return;
624
+ };
625
+ const [rangeMinimum, rangeMaximum] = range;
626
+ if (domain.length === 1) {
627
+ positions.set(domain[0] ?? "", rangeMinimum + (rangeMaximum - rangeMinimum) / 2);
628
+ } else {
629
+ const step = (rangeMaximum - rangeMinimum) / Math.max(1, domain.length - 1 + padding * 2);
630
+ const start = rangeMinimum + step * padding;
631
+ domain.forEach((value, index) => positions.set(value, start + step * index));
632
+ }
633
+ return (value) => positions.get(value);
634
+ }
635
+ function createBandScale(domain, range, padding) {
636
+ const positions = new Map;
637
+ const [rangeMinimum, rangeMaximum] = range;
638
+ const availableSize = Math.max(0, rangeMaximum - rangeMinimum);
639
+ const step = domain.length === 0 ? 0 : availableSize / Math.max(1, domain.length + padding * (domain.length - 1));
640
+ const bandWidth = Math.max(0, step * (1 - padding));
641
+ domain.forEach((value, index) => positions.set(value, rangeMinimum + step * index));
642
+ const scale = Object.assign((value) => positions.get(value), {
643
+ bandwidth: () => bandWidth
644
+ });
645
+ return scale;
646
+ }
647
+ function createNumericDomain(values) {
648
+ if (values.length === 0)
649
+ return [0, 1];
650
+ let minimum = Number(values[0].comparable);
651
+ let maximum = minimum;
652
+ for (let index = 1;index < values.length; index++) {
653
+ const numeric = Number(values[index].comparable);
654
+ if (numeric < minimum)
655
+ minimum = numeric;
656
+ if (numeric > maximum)
657
+ maximum = numeric;
658
+ }
659
+ return minimum === maximum ? [minimum - 1, maximum + 1] : [minimum, maximum];
660
+ }
661
+ function createTicks(domain, count) {
662
+ const safeCount = Math.max(1, Math.floor(count));
663
+ if (safeCount === 1)
664
+ return [domain[0]];
665
+ const step = (domain[1] - domain[0]) / (safeCount - 1);
666
+ return Array.from({ length: safeCount }, (_, index) => domain[0] + step * index);
667
+ }
668
+ function createLinePath(points) {
669
+ if (points.length === 0)
670
+ return "";
671
+ const [firstPoint, ...remainingPoints] = points;
672
+ return [
673
+ `M${formatPathNumber(firstPoint?.x ?? 0)},${formatPathNumber(firstPoint?.y ?? 0)}`,
674
+ ...remainingPoints.map((point) => `L${formatPathNumber(point.x)},${formatPathNumber(point.y)}`)
675
+ ].join("");
676
+ }
677
+ function createAreaPath(points, baseline) {
678
+ if (points.length === 0)
679
+ return "";
680
+ const firstPoint = points[0];
681
+ const lastPoint = points.at(-1);
682
+ if (!firstPoint || !lastPoint)
683
+ return "";
684
+ const lowerPoints = points.toReversed().map((point) => `L${formatPathNumber(point.x)},${formatPathNumber(point.y0 ?? baseline ?? 0)}`);
685
+ return [
686
+ `M${formatPathNumber(firstPoint.x)},${formatPathNumber(firstPoint.y0 ?? baseline ?? 0)}`,
687
+ `L${formatPathNumber(firstPoint.x)},${formatPathNumber(firstPoint.y)}`,
688
+ ...points.slice(1).map((point) => `L${formatPathNumber(point.x)},${formatPathNumber(point.y)}`),
689
+ ...lowerPoints,
690
+ "Z"
691
+ ].join("");
692
+ }
693
+ function createStackedBarDomainValues(datumByKey, categories, series) {
694
+ const values = [0];
695
+ for (const category of categories) {
696
+ const datum = datumByKey.get(category.key);
697
+ if (!datum)
698
+ continue;
699
+ let positiveTotal = 0;
700
+ let negativeTotal = 0;
701
+ for (const item of series) {
702
+ const value = datum[item.valueKey];
703
+ if (typeof value !== "number")
704
+ continue;
705
+ if (value >= 0)
706
+ positiveTotal += value;
707
+ else
708
+ negativeTotal += value;
709
+ }
710
+ values.push(positiveTotal, negativeTotal);
711
+ }
712
+ return values;
713
+ }
714
+ function formatPathNumber(value) {
715
+ return Number(value.toFixed(3)).toString();
716
+ }
717
+
718
+ // src/_internal/chart/heatmap-utilities.ts
719
+ function toFiniteOrNull(value) {
720
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
721
+ }
722
+ function heatmapDomain(values) {
723
+ let min = Infinity;
724
+ let max = -Infinity;
725
+ let count = 0;
726
+ for (const value of values) {
727
+ if (typeof value === "number" && Number.isFinite(value)) {
728
+ if (value < min)
729
+ min = value;
730
+ if (value > max)
731
+ max = value;
732
+ count += 1;
733
+ }
734
+ }
735
+ if (count === 0)
736
+ return { min: 0, max: 1, isEmpty: true };
737
+ return { min, max, isEmpty: false };
738
+ }
739
+ function heatmapDomainOfRows(rows) {
740
+ let min = Infinity;
741
+ let max = -Infinity;
742
+ let count = 0;
743
+ for (const row of rows) {
744
+ for (const value of row) {
745
+ if (typeof value === "number" && Number.isFinite(value)) {
746
+ if (value < min)
747
+ min = value;
748
+ if (value > max)
749
+ max = value;
750
+ count += 1;
751
+ }
752
+ }
753
+ }
754
+ if (count === 0)
755
+ return { min: 0, max: 1, isEmpty: true };
756
+ return { min, max, isEmpty: false };
757
+ }
758
+ function normalizeHeatmapValue(value, domain, scale = "sequential") {
759
+ if (!Number.isFinite(value))
760
+ return 0.5;
761
+ if (scale === "diverging") {
762
+ const bound = Math.max(Math.abs(domain.min), Math.abs(domain.max));
763
+ if (bound === 0)
764
+ return 0.5;
765
+ return clamp01(0.5 + value / (2 * bound));
766
+ }
767
+ const range = domain.max - domain.min;
768
+ if (range === 0)
769
+ return 0.5;
770
+ return clamp01((value - domain.min) / range);
771
+ }
772
+ function clamp01(value) {
773
+ if (value < 0)
774
+ return 0;
775
+ if (value > 1)
776
+ return 1;
777
+ return value;
778
+ }
779
+ function heatmapCellFill(value, domain, scale = "sequential") {
780
+ if (value === null)
781
+ return "var(--cinder-surface-inset)";
782
+ const normalized = normalizeHeatmapValue(value, domain, scale);
783
+ if (scale === "diverging") {
784
+ if (normalized < 0.5) {
785
+ const ratio2 = (0.5 - normalized) * 2;
786
+ return `color-mix(in oklch, var(--cinder-chart-series-5) ${Math.round(ratio2 * 100)}%, var(--cinder-surface-inset))`;
787
+ }
788
+ const ratio = (normalized - 0.5) * 2;
789
+ return `color-mix(in oklch, var(--cinder-chart-series-3) ${Math.round(ratio * 100)}%, var(--cinder-surface-inset))`;
790
+ }
791
+ return `color-mix(in oklch, var(--cinder-chart-series-1) ${Math.round(normalized * 100)}%, var(--cinder-surface-inset))`;
792
+ }
793
+ function heatmapLabelFill(value, domain, scale = "sequential") {
794
+ if (value === null)
795
+ return "var(--cinder-text-muted)";
796
+ const intensity = scale === "diverging" ? Math.abs(normalizeHeatmapValue(value, domain, scale) - 0.5) * 2 : normalizeHeatmapValue(value, domain, scale);
797
+ return intensity > 0.5 ? "var(--cinder-surface)" : "var(--cinder-text)";
798
+ }
799
+
800
+ // src/utilities/class-names.ts
801
+ function classNames(...parts) {
802
+ return parts.filter((part) => typeof part === "string" && part.length > 0).join(" ");
803
+ }
804
+
805
+ // src/components/spectrogram/spectrogram.svelte
806
+ var root_1 = $.from_html(`<p class="cinder-spectrogram__description"> </p>`);
807
+ var root_2 = $.from_html(`<div class="cinder-spectrogram__state"><!></div>`);
808
+ var root_5 = $.from_html(`<div class="cinder-spectrogram__state"><!></div>`);
809
+ var root_8 = $.from_svg(`<title> </title>`);
810
+ var root_11 = $.from_svg(`<rect class="cinder-spectrogram__cell" aria-hidden="true"></rect>`);
811
+ var root_13 = $.from_svg(`<text class="cinder-spectrogram__tick-label" text-anchor="end" dominant-baseline="middle"> </text>`);
812
+ var root_15 = $.from_svg(`<text class="cinder-spectrogram__tick-label" text-anchor="middle" dominant-baseline="auto"> </text>`);
813
+ var root_9 = $.from_svg(`<g><!><!><!></g>`);
814
+ var root_17 = $.from_html(`<th scope="col"> </th>`);
815
+ var root_19 = $.from_html(`<td> </td>`);
816
+ var root_18 = $.from_html(`<tr><th scope="row"> </th><!></tr>`);
817
+ var root_16 = $.from_html(`<table><caption> </caption><thead><tr><th scope="col">Frequency bin</th><!></tr></thead><tbody></tbody></table>`);
818
+ var root = $.from_html(`<figure><!> <div class="cinder-spectrogram__viewport"><!> <svg role="img"><!><!></svg></div> <!></figure>`);
819
+ function Spectrogram($$anchor, $$props) {
820
+ const generatedId = $.props_id();
821
+ $.push($$props, true);
822
+ let height = $.prop($$props, "height", 3, 200), loading = $.prop($$props, "loading", 3, false), dataTableVisibility = $.prop($$props, "dataTableVisibility", 3, "screen-reader-only"), rest = $.rest_props($$props, [
823
+ "$$slots",
824
+ "$$events",
825
+ "$$legacy",
826
+ "label",
827
+ "description",
828
+ "frames",
829
+ "frequencyLabels",
830
+ "height",
831
+ "loading",
832
+ "dataTableVisibility",
833
+ "dataTableCaption",
834
+ "class",
835
+ "empty",
836
+ "loadingContent",
837
+ "id"
838
+ ]);
839
+ const rootId = $.derived(() => $$props.id ?? generatedId);
840
+ const descriptionId = $.derived(() => $$props.description ? `${$.get(rootId)}-description` : undefined);
841
+ const marginTop = 8;
842
+ const marginRight = 16;
843
+ const marginBottom = 32;
844
+ const marginLeft = 60;
845
+ let measuredWidth = $.state(400);
846
+ let rootElement = $.state(undefined);
847
+ $.user_effect(() => {
848
+ const element = $.get(rootElement);
849
+ if (!element)
850
+ return;
851
+ if (typeof ResizeObserver === "undefined") {
852
+ const rect = element.getBoundingClientRect();
853
+ if (rect.width > 0)
854
+ $.set(measuredWidth, rect.width, true);
855
+ return;
856
+ }
857
+ const observer = new ResizeObserver((entries) => {
858
+ const entry = entries[0];
859
+ if (entry && entry.contentRect.width > 0)
860
+ $.set(measuredWidth, entry.contentRect.width, true);
861
+ });
862
+ observer.observe(element);
863
+ return () => observer.disconnect();
864
+ });
865
+ const plotWidth = $.derived(() => Math.max(1, $.get(measuredWidth) - marginLeft - marginRight));
866
+ const plotHeight = $.derived(() => Math.max(1, height() - marginTop - marginBottom));
867
+ const binCount = $.derived(() => $$props.frames.reduce((max, frame) => Math.max(max, frame.bins.length), 0));
868
+ const binIndices = $.derived(() => Array.from({ length: $.get(binCount) }, (_, index2) => index2));
869
+ const isEmpty = $.derived(() => $$props.frames.length === 0 || $.get(binCount) === 0);
870
+ const cellWidth = $.derived(() => $$props.frames.length > 0 ? $.get(plotWidth) / $$props.frames.length : 0);
871
+ const cellHeight = $.derived(() => $.get(binCount) > 0 ? $.get(plotHeight) / $.get(binCount) : 0);
872
+ function binValueAt(frameIndex, binIndex) {
873
+ return toFiniteOrNull($$props.frames[frameIndex]?.bins[binIndex]);
874
+ }
875
+ const domain = $.derived(() => heatmapDomainOfRows($$props.frames.map((frame) => frame.bins)));
876
+ function cellFill(value) {
877
+ return heatmapCellFill(value, $.get(domain), "sequential");
878
+ }
879
+ function binY(binIndex) {
880
+ return $.get(plotHeight) - (binIndex + 1) * $.get(cellHeight);
881
+ }
882
+ const yLabels = $.derived(() => Array.from({ length: $.get(binCount) }, (_, index2) => $$props.frequencyLabels?.[index2] ?? String(index2)));
883
+ const maxYLabels = 8;
884
+ const yLabelStep = $.derived(() => Math.max(1, Math.ceil($.get(binCount) / maxYLabels)));
885
+ const maxXLabels = 10;
886
+ const xLabelStep = $.derived(() => Math.max(1, Math.ceil($$props.frames.length / maxXLabels)));
887
+ const hasDataTable = $.derived(() => dataTableVisibility() !== "hidden");
888
+ const maxTableFrames = 10;
889
+ const maxTableBins = 10;
890
+ const tableFrameStep = $.derived(() => Math.max(1, Math.ceil($$props.frames.length / maxTableFrames)));
891
+ const tableBinStep = $.derived(() => Math.max(1, Math.ceil($.get(binCount) / maxTableBins)));
892
+ const tableFrames = $.derived(() => $$props.frames.map((frame, frameIndex) => ({ frame, frameIndex })).filter((_, index2) => index2 % $.get(tableFrameStep) === 0).slice(0, maxTableFrames));
893
+ const tableBinIndices = $.derived(() => Array.from({ length: $.get(binCount) }, (_, index2) => index2).filter((index2) => index2 % $.get(tableBinStep) === 0).slice(0, maxTableBins).reverse());
894
+ const isTruncated = $.derived(() => $$props.frames.length > maxTableFrames || $.get(binCount) > maxTableBins);
895
+ const tableCaption = $.derived(() => $.get(isTruncated) ? `${$$props.dataTableCaption ?? $$props.label} (showing ${$.get(tableFrames).length} of ${$$props.frames.length} frames, ${$.get(tableBinIndices).length} of ${$.get(binCount)} bins)` : $$props.dataTableCaption ?? $$props.label);
896
+ function formatValue(value) {
897
+ if (value === null)
898
+ return "—";
899
+ return new Intl.NumberFormat(undefined, { maximumFractionDigits: 3 }).format(value);
900
+ }
901
+ var figure = root();
902
+ $.attribute_effect(figure, ($0) => ({
903
+ ...rest,
904
+ id: $.get(rootId),
905
+ class: $0,
906
+ "aria-label": $$props.label,
907
+ "aria-describedby": $.get(descriptionId)
908
+ }), [() => classNames("cinder-spectrogram", $$props.class)]);
909
+ var node = $.child(figure);
910
+ {
911
+ var consequent = ($$anchor2) => {
912
+ var p = root_1();
913
+ var text2 = $.child(p, true);
914
+ $.reset(p);
915
+ $.template_effect(() => {
916
+ $.set_attribute(p, "id", $.get(descriptionId));
917
+ $.set_text(text2, $$props.description);
918
+ });
919
+ $.append($$anchor2, p);
920
+ };
921
+ $.if(node, ($$render) => {
922
+ if ($$props.description)
923
+ $$render(consequent);
924
+ });
925
+ }
926
+ var div = $.sibling(node, 2);
927
+ let styles;
928
+ var node_1 = $.child(div);
929
+ {
930
+ var consequent_2 = ($$anchor2) => {
931
+ var div_1 = root_2();
932
+ var node_2 = $.child(div_1);
933
+ {
934
+ var consequent_1 = ($$anchor3) => {
935
+ var fragment = $.comment();
936
+ var node_3 = $.first_child(fragment);
937
+ $.snippet(node_3, () => $$props.loadingContent);
938
+ $.append($$anchor3, fragment);
939
+ };
940
+ var alternate = ($$anchor3) => {
941
+ var text_1 = $.text("Loading…");
942
+ $.append($$anchor3, text_1);
943
+ };
944
+ $.if(node_2, ($$render) => {
945
+ if ($$props.loadingContent)
946
+ $$render(consequent_1);
947
+ else
948
+ $$render(alternate, -1);
949
+ });
950
+ }
951
+ $.reset(div_1);
952
+ $.append($$anchor2, div_1);
953
+ };
954
+ var consequent_4 = ($$anchor2) => {
955
+ var div_2 = root_5();
956
+ var node_4 = $.child(div_2);
957
+ {
958
+ var consequent_3 = ($$anchor3) => {
959
+ var fragment_1 = $.comment();
960
+ var node_5 = $.first_child(fragment_1);
961
+ $.snippet(node_5, () => $$props.empty);
962
+ $.append($$anchor3, fragment_1);
963
+ };
964
+ var alternate_1 = ($$anchor3) => {
965
+ var text_2 = $.text("No spectrogram data");
966
+ $.append($$anchor3, text_2);
967
+ };
968
+ $.if(node_4, ($$render) => {
969
+ if ($$props.empty)
970
+ $$render(consequent_3);
971
+ else
972
+ $$render(alternate_1, -1);
973
+ });
974
+ }
975
+ $.reset(div_2);
976
+ $.append($$anchor2, div_2);
977
+ };
978
+ $.if(node_1, ($$render) => {
979
+ if (loading())
980
+ $$render(consequent_2);
981
+ else if ($.get(isEmpty))
982
+ $$render(consequent_4, 1);
983
+ });
984
+ }
985
+ var svg = $.sibling(node_1, 2);
986
+ var node_6 = $.child(svg);
987
+ {
988
+ var consequent_5 = ($$anchor2) => {
989
+ var title = root_8();
990
+ var text_3 = $.child(title, true);
991
+ $.reset(title);
992
+ $.template_effect(() => {
993
+ $.set_attribute(title, "id", `${$.get(rootId) ?? ""}-svg-title`);
994
+ $.set_text(text_3, $$props.label);
995
+ });
996
+ $.append($$anchor2, title);
997
+ };
998
+ $.if(node_6, ($$render) => {
999
+ if (!loading() && !$.get(isEmpty))
1000
+ $$render(consequent_5);
1001
+ });
1002
+ }
1003
+ var node_7 = $.sibling(node_6);
1004
+ {
1005
+ var consequent_8 = ($$anchor2) => {
1006
+ var g = root_9();
1007
+ $.set_attribute(g, "transform", `translate(${marginLeft}, ${marginTop})`);
1008
+ var node_8 = $.child(g);
1009
+ $.each(node_8, 17, () => $$props.frames, $.index, ($$anchor3, _frame, frameIndex) => {
1010
+ var fragment_2 = $.comment();
1011
+ var node_9 = $.first_child(fragment_2);
1012
+ $.each(node_9, 16, () => $.get(binIndices), (binIndex) => binIndex, ($$anchor4, binIndex) => {
1013
+ var rect_1 = root_11();
1014
+ $.template_effect(($0, $1) => {
1015
+ $.set_attribute(rect_1, "x", frameIndex * $.get(cellWidth));
1016
+ $.set_attribute(rect_1, "y", $0);
1017
+ $.set_attribute(rect_1, "width", $.get(cellWidth));
1018
+ $.set_attribute(rect_1, "height", $.get(cellHeight));
1019
+ $.set_attribute(rect_1, "fill", $1);
1020
+ }, [
1021
+ () => binY(binIndex),
1022
+ () => cellFill(binValueAt(frameIndex, binIndex))
1023
+ ]);
1024
+ $.append($$anchor4, rect_1);
1025
+ });
1026
+ $.append($$anchor3, fragment_2);
1027
+ });
1028
+ var node_10 = $.sibling(node_8);
1029
+ $.each(node_10, 17, () => $.get(yLabels), $.index, ($$anchor3, yLabel, index2) => {
1030
+ var fragment_3 = $.comment();
1031
+ var node_11 = $.first_child(fragment_3);
1032
+ {
1033
+ var consequent_6 = ($$anchor4) => {
1034
+ var text_4 = root_13();
1035
+ $.set_attribute(text_4, "x", -6);
1036
+ var text_5 = $.child(text_4, true);
1037
+ $.reset(text_4);
1038
+ $.template_effect(($0) => {
1039
+ $.set_attribute(text_4, "y", $0);
1040
+ $.set_text(text_5, $.get(yLabel));
1041
+ }, [() => binY(index2) + $.get(cellHeight) / 2]);
1042
+ $.append($$anchor4, text_4);
1043
+ };
1044
+ $.if(node_11, ($$render) => {
1045
+ if (index2 % $.get(yLabelStep) === 0)
1046
+ $$render(consequent_6);
1047
+ });
1048
+ }
1049
+ $.append($$anchor3, fragment_3);
1050
+ });
1051
+ var node_12 = $.sibling(node_10);
1052
+ $.each(node_12, 17, () => $$props.frames, $.index, ($$anchor3, frame, index2) => {
1053
+ var fragment_4 = $.comment();
1054
+ var node_13 = $.first_child(fragment_4);
1055
+ {
1056
+ var consequent_7 = ($$anchor4) => {
1057
+ var text_6 = root_15();
1058
+ var text_7 = $.child(text_6, true);
1059
+ $.reset(text_6);
1060
+ $.template_effect(() => {
1061
+ $.set_attribute(text_6, "x", index2 * $.get(cellWidth) + $.get(cellWidth) / 2);
1062
+ $.set_attribute(text_6, "y", $.get(plotHeight) + 16);
1063
+ $.set_text(text_7, $.get(frame).label);
1064
+ });
1065
+ $.append($$anchor4, text_6);
1066
+ };
1067
+ $.if(node_13, ($$render) => {
1068
+ if (index2 % $.get(xLabelStep) === 0)
1069
+ $$render(consequent_7);
1070
+ });
1071
+ }
1072
+ $.append($$anchor3, fragment_4);
1073
+ });
1074
+ $.reset(g);
1075
+ $.append($$anchor2, g);
1076
+ };
1077
+ $.if(node_7, ($$render) => {
1078
+ if (!loading() && !$.get(isEmpty))
1079
+ $$render(consequent_8);
1080
+ });
1081
+ }
1082
+ $.reset(svg);
1083
+ $.reset(div);
1084
+ var node_14 = $.sibling(div, 2);
1085
+ {
1086
+ var consequent_9 = ($$anchor2) => {
1087
+ var table = root_16();
1088
+ var caption = $.child(table);
1089
+ var text_8 = $.child(caption, true);
1090
+ $.reset(caption);
1091
+ var thead = $.sibling(caption);
1092
+ var tr = $.child(thead);
1093
+ var node_15 = $.sibling($.child(tr));
1094
+ $.each(node_15, 17, () => $.get(tableFrames), (entry) => entry.frameIndex, ($$anchor3, entry) => {
1095
+ var th = root_17();
1096
+ var text_9 = $.child(th, true);
1097
+ $.reset(th);
1098
+ $.template_effect(() => $.set_text(text_9, $.get(entry).frame.label));
1099
+ $.append($$anchor3, th);
1100
+ });
1101
+ $.reset(tr);
1102
+ $.reset(thead);
1103
+ var tbody = $.sibling(thead);
1104
+ $.each(tbody, 20, () => $.get(tableBinIndices), (binIndex) => binIndex, ($$anchor3, binIndex) => {
1105
+ var tr_1 = root_18();
1106
+ var th_1 = $.child(tr_1);
1107
+ var text_10 = $.child(th_1, true);
1108
+ $.reset(th_1);
1109
+ var node_16 = $.sibling(th_1);
1110
+ $.each(node_16, 17, () => $.get(tableFrames), (entry) => entry.frameIndex, ($$anchor4, entry) => {
1111
+ var td = root_19();
1112
+ var text_11 = $.child(td, true);
1113
+ $.reset(td);
1114
+ $.template_effect(($0) => $.set_text(text_11, $0), [
1115
+ () => formatValue(binValueAt($.get(entry).frameIndex, binIndex))
1116
+ ]);
1117
+ $.append($$anchor4, td);
1118
+ });
1119
+ $.reset(tr_1);
1120
+ $.template_effect(() => $.set_text(text_10, $.get(yLabels)[binIndex] ?? binIndex));
1121
+ $.append($$anchor3, tr_1);
1122
+ });
1123
+ $.reset(tbody);
1124
+ $.reset(table);
1125
+ $.template_effect(($0) => {
1126
+ $.set_class(table, 1, $0);
1127
+ $.set_text(text_8, $.get(tableCaption));
1128
+ }, [() => $.clsx(dataTableClass(dataTableVisibility()))]);
1129
+ $.append($$anchor2, table);
1130
+ };
1131
+ $.if(node_14, ($$render) => {
1132
+ if ($.get(hasDataTable))
1133
+ $$render(consequent_9);
1134
+ });
1135
+ }
1136
+ $.reset(figure);
1137
+ $.bind_this(figure, ($$value) => $.set(rootElement, $$value), () => $.get(rootElement));
1138
+ $.template_effect(() => {
1139
+ $.set_attribute(div, "data-cinder-loading", loading() || undefined);
1140
+ styles = $.set_style(div, "", styles, { height: `${height() ?? ""}px` });
1141
+ $.set_attribute(svg, "viewBox", `0 0 ${$.get(measuredWidth)} ${height()}`);
1142
+ $.set_attribute(svg, "aria-hidden", loading() || $.get(isEmpty) ? "true" : undefined);
1143
+ $.set_attribute(svg, "aria-labelledby", !loading() && !$.get(isEmpty) ? `${$.get(rootId)}-svg-title` : undefined);
1144
+ });
1145
+ $.append($$anchor, figure);
1146
+ $.pop();
1147
+ }
1148
+
1149
+ // src/components/spectrogram/index.ts
1150
+ var spectrogram_default = Spectrogram;
1151
+ export {
1152
+ spectrogram_default as default,
1153
+ Spectrogram
1154
+ };
1155
+
1156
+ //# debugId=1F2AF74D97A6B91064756E2164756E21