@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,247 @@
1
+ <script lang="ts" module>
2
+ /**
3
+ * @cinder
4
+ * @category data-display
5
+ * @status alpha
6
+ * @purpose Responsive SVG frequency-bin bar chart for visualizing audio spectrum magnitude data.
7
+ * @tag chart
8
+ * @tag spectrum
9
+ * @tag signal
10
+ * @tag audio
11
+ * @useWhen Displaying pre-computed frequency-domain magnitude data from an FFT or spectrum analyzer.
12
+ * @useWhen Showing a static frequency response or spectrum snapshot with labelled frequency bins.
13
+ * @avoidWhen Real-time live audio spectrum is needed — feed live AnalyserNode data as props yourself.
14
+ * @avoidWhen A full time × frequency heatmap is needed — use spectrogram instead.
15
+ * @avoidWhen General categorical bar comparison — use bar-chart instead.
16
+ * @related waveform, spectrogram, bar-chart
17
+ */
18
+ export type { SpectrumChartProps, SpectrumChartSchemaProps } from './spectrum-chart.types.ts';
19
+ </script>
20
+
21
+ <script lang="ts">
22
+ import { dataTableClass, formatNumericValue } from '../../_internal/chart/chart-utilities.ts';
23
+ import { classNames } from '../../utilities/class-names.ts';
24
+ import type { SpectrumChartProps } from './spectrum-chart.types.ts';
25
+
26
+ let {
27
+ label,
28
+ description,
29
+ bins,
30
+ height = 160,
31
+ loading = false,
32
+ dataTableVisibility = 'screen-reader-only',
33
+ dataTableCaption,
34
+ class: customClassName,
35
+ empty,
36
+ loadingContent,
37
+ id,
38
+ ...rest
39
+ }: SpectrumChartProps = $props();
40
+
41
+ const generatedId = $props.id();
42
+ const rootId = $derived(id ?? generatedId);
43
+ const descriptionId = $derived(description ? `${rootId}-description` : undefined);
44
+
45
+ const marginTop = 8;
46
+ const marginRight = 8;
47
+ const marginBottom = 32;
48
+ const marginLeft = 40;
49
+
50
+ let measuredWidth = $state(400);
51
+ let rootElement = $state<HTMLElement>();
52
+
53
+ $effect(() => {
54
+ const element = rootElement;
55
+ if (!element) return;
56
+ // Guard for SSR / test environments without ResizeObserver.
57
+ if (typeof ResizeObserver === 'undefined') {
58
+ const rect = element.getBoundingClientRect();
59
+ if (rect.width > 0) measuredWidth = rect.width;
60
+ return;
61
+ }
62
+ const observer = new ResizeObserver((entries) => {
63
+ const entry = entries[0];
64
+ // Ignore zero-width measurements (hidden / display:none) so the last good
65
+ // width is kept rather than collapsing the geometry, matching the fallback.
66
+ if (entry && entry.contentRect.width > 0) measuredWidth = entry.contentRect.width;
67
+ });
68
+ observer.observe(element);
69
+ return () => observer.disconnect();
70
+ });
71
+
72
+ const plotWidth = $derived(Math.max(1, measuredWidth - marginLeft - marginRight));
73
+ const plotHeight = $derived(Math.max(1, height - marginTop - marginBottom));
74
+
75
+ const isEmpty = $derived(bins.length === 0);
76
+
77
+ // Spectrum magnitudes are linear non-negative. Coerce each bin's value to a
78
+ // finite, non-negative number so a stray NaN/Infinity/negative can't break the
79
+ // axis domain or invert bar geometry.
80
+ function sanitizeMagnitude(value: number): number {
81
+ return Number.isFinite(value) && value > 0 ? value : 0;
82
+ }
83
+
84
+ // Single-pass max over the sanitized magnitudes — NOT Math.max(...spread),
85
+ // which can overflow the argument limit on a very large bin array.
86
+ const maxValue = $derived.by(() => {
87
+ let max = 0;
88
+ for (const bin of bins) {
89
+ const magnitude = sanitizeMagnitude(bin.value);
90
+ if (magnitude > max) max = magnitude;
91
+ }
92
+ return max;
93
+ });
94
+
95
+ // Y-axis ticks (5 ticks from 0 to maxValue)
96
+ const tickCount = 5;
97
+ const yTicks = $derived.by(() => {
98
+ if (maxValue <= 0) return [0];
99
+ return Array.from({ length: tickCount }, (_, index) => (maxValue * index) / (tickCount - 1));
100
+ });
101
+
102
+ function scaleY(value: number): number {
103
+ if (maxValue <= 0) return plotHeight;
104
+ return plotHeight - (value / maxValue) * plotHeight;
105
+ }
106
+
107
+ const barWidth = $derived(bins.length > 0 ? plotWidth / bins.length : 0);
108
+
109
+ type SpectrumBar = {
110
+ x: number;
111
+ y: number;
112
+ barHeight: number;
113
+ barWidth: number;
114
+ label: string;
115
+ value: number;
116
+ };
117
+ const spectrumBars = $derived.by((): SpectrumBar[] => {
118
+ return bins.map((bin, index) => {
119
+ const magnitude = sanitizeMagnitude(bin.value);
120
+ // Scale against the real maxValue (with a zero guard) — NOT Math.max(maxValue, 1),
121
+ // which would prevent data whose max is < 1 from ever reaching the top tick.
122
+ const barHeight = maxValue > 0 ? (magnitude / maxValue) * plotHeight : 0;
123
+ return {
124
+ x: index * barWidth + 1,
125
+ y: plotHeight - barHeight,
126
+ barHeight,
127
+ barWidth: Math.max(1, barWidth - 2),
128
+ label: bin.label,
129
+ value: magnitude,
130
+ };
131
+ });
132
+ });
133
+
134
+ // Show only a subset of x-axis labels to avoid clutter
135
+ const maxXLabels = 8;
136
+ const xLabelStep = $derived(Math.max(1, Math.ceil(bins.length / maxXLabels)));
137
+
138
+ const hasDataTable = $derived(dataTableVisibility !== 'hidden');
139
+ </script>
140
+
141
+ <figure
142
+ {...rest}
143
+ bind:this={rootElement}
144
+ id={rootId}
145
+ class={classNames('cinder-spectrum-chart', customClassName)}
146
+ aria-label={label}
147
+ aria-describedby={descriptionId}
148
+ >
149
+ {#if description}
150
+ <p id={descriptionId} class="cinder-spectrum-chart__description">{description}</p>
151
+ {/if}
152
+ <div
153
+ class="cinder-spectrum-chart__viewport"
154
+ style:height="{height}px"
155
+ data-cinder-loading={loading || undefined}
156
+ >
157
+ {#if loading}
158
+ <div class="cinder-spectrum-chart__state">
159
+ {#if loadingContent}{@render loadingContent()}{:else}Loading…{/if}
160
+ </div>
161
+ {:else if isEmpty}
162
+ <div class="cinder-spectrum-chart__state">
163
+ {#if empty}{@render empty()}{:else}No spectrum data{/if}
164
+ </div>
165
+ {/if}
166
+ <svg
167
+ role="img"
168
+ viewBox={`0 0 ${measuredWidth} ${height}`}
169
+ aria-hidden={loading || isEmpty ? 'true' : undefined}
170
+ aria-labelledby={!loading && !isEmpty ? `${rootId}-svg-title` : undefined}
171
+ >
172
+ {#if !loading && !isEmpty}
173
+ <title id="{rootId}-svg-title">{label}</title>
174
+ {/if}
175
+ <!-- Plot geometry only renders with data — otherwise the loading/empty
176
+ overlay would have a stray baseline grid line and ticks drawn under it
177
+ (yTicks falls back to [0] when there is no data). -->
178
+ {#if !loading && !isEmpty}
179
+ <g transform={`translate(${marginLeft}, ${marginTop})`}>
180
+ <!-- Y-axis ticks -->
181
+ {#each yTicks as tick, index (index)}
182
+ <text
183
+ class="cinder-spectrum-chart__tick-label"
184
+ x={-6}
185
+ y={scaleY(tick)}
186
+ text-anchor="end"
187
+ dominant-baseline="middle"
188
+ >{formatNumericValue(tick, undefined, undefined, { index })}</text
189
+ >
190
+ <line
191
+ class="cinder-spectrum-chart__grid-line"
192
+ x1="0"
193
+ x2={plotWidth}
194
+ y1={scaleY(tick)}
195
+ y2={scaleY(tick)}
196
+ aria-hidden="true"
197
+ />
198
+ {/each}
199
+ <!-- Frequency bars -->
200
+ {#each spectrumBars as bar, index (index)}
201
+ <rect
202
+ class="cinder-spectrum-chart__bar"
203
+ x={bar.x}
204
+ y={bar.y}
205
+ width={bar.barWidth}
206
+ height={bar.barHeight}
207
+ aria-hidden="true"
208
+ data-cinder-bin={bar.label}
209
+ />
210
+ {/each}
211
+ <!-- X-axis frequency labels (sampled to avoid overlap) -->
212
+ {#each spectrumBars as bar, index (index)}
213
+ {#if index % xLabelStep === 0}
214
+ <text
215
+ class="cinder-spectrum-chart__tick-label"
216
+ x={bar.x + bar.barWidth / 2}
217
+ y={plotHeight + 16}
218
+ text-anchor="middle"
219
+ dominant-baseline="auto">{bar.label}</text
220
+ >
221
+ {/if}
222
+ {/each}
223
+ </g>
224
+ {/if}
225
+ </svg>
226
+ </div>
227
+ {#if hasDataTable}
228
+ <table class={dataTableClass(dataTableVisibility)}>
229
+ <caption>{dataTableCaption ?? label}</caption>
230
+ <thead>
231
+ <tr>
232
+ <th scope="col">Frequency</th>
233
+ <th scope="col">Magnitude</th>
234
+ </tr>
235
+ </thead>
236
+ <tbody>
237
+ <!-- Keyed by index, not label: frequency-bin labels are not guaranteed unique. -->
238
+ {#each spectrumBars as bar, index (index)}
239
+ <tr>
240
+ <td>{bar.label}</td>
241
+ <td>{formatNumericValue(bar.value, undefined, undefined, { index })}</td>
242
+ </tr>
243
+ {/each}
244
+ </tbody>
245
+ </table>
246
+ {/if}
247
+ </figure>
@@ -0,0 +1,44 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import type { ChartDataTableVisibility } from '../chart.types.ts';
4
+
5
+ export type SpectrumBin = {
6
+ /** Frequency label, e.g. '440 Hz' or '1 kHz'. */
7
+ label: string;
8
+ /** Magnitude or power for this bin. Non-negative. */
9
+ value: number;
10
+ };
11
+
12
+ export type SpectrumChartProps = Omit<HTMLAttributes<HTMLElement>, 'class'> & {
13
+ /** Accessible label for the chart. Required for screen readers. */
14
+ label: string;
15
+ /** Optional description rendered below the label. */
16
+ description?: string;
17
+ /** Frequency bins with label + magnitude value. */
18
+ bins: SpectrumBin[];
19
+ /** Pixel height of the chart. Default `160`. */
20
+ height?: number;
21
+ /** Whether the chart is in a loading state. */
22
+ loading?: boolean;
23
+ /** Controls data table visibility. Default `screen-reader-only`. */
24
+ dataTableVisibility?: ChartDataTableVisibility;
25
+ /** Custom data table caption; falls back to `label`. */
26
+ dataTableCaption?: string;
27
+ /** Custom class applied to the root element. */
28
+ class?: string;
29
+ /** Snippet rendered when there are no bins. */
30
+ empty?: Snippet;
31
+ /** Snippet rendered while loading. */
32
+ loadingContent?: Snippet;
33
+ };
34
+
35
+ export type SpectrumChartSchemaProps = {
36
+ label: string;
37
+ description?: string;
38
+ bins: SpectrumBin[];
39
+ height?: number;
40
+ loading?: boolean;
41
+ dataTableVisibility?: ChartDataTableVisibility;
42
+ dataTableCaption?: string;
43
+ class?: string;
44
+ };
@@ -0,0 +1,3 @@
1
+ const variables: readonly string[] = [];
2
+
3
+ export default variables;
@@ -16,13 +16,13 @@ A semantic status indicator that pairs a colored dot with an accessible label.
16
16
 
17
17
  <!-- generated:props:start -->
18
18
 
19
- | Prop | Type | Required | Default | Description |
20
- | ----------- | ----------------------------------------------------------------------------------- | -------- | ------- | -------------------------------------------------------------------------------------------------------- |
21
- | `class` | `string` | no | — | Extra classes appended to the root element. |
22
- | `label` | `string` | no | — | Optional human label. Rendered visibly when `showLabel` is true; used as the accessible name either way. |
23
- | `showLabel` | `boolean` | no | `true` | Whether to render the visible label. |
24
- | `size` | `"sm"` \| `"md"` | no | `"md"` | Dot size. |
25
- | `status` | `"online"` \| `"offline"` \| `"warning"` \| `"error"` \| `"pending"` \| `"neutral"` | yes | — | Required semantic status. Drives color via `data-cinder-status`. |
19
+ | Prop | Type | Required | Default | Description |
20
+ | ----------- | ---------------------------------------------------------------------------------------------------------------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
21
+ | `class` | `string` | no | — | Extra classes appended to the root element. |
22
+ | `label` | `string` | no | — | Optional human label. Rendered visibly when `showLabel` is true; used as the accessible name either way. |
23
+ | `showLabel` | `boolean` | no | `true` | Whether to render the visible label. |
24
+ | `size` | `"sm"` \| `"md"` | no | `"md"` | Dot size. |
25
+ | `status` | `"online"` \| `"offline"` \| `"warning"` \| `"error"` \| `"pending"` \| `"neutral"` \| `"success"` \| `"accent"` | yes | — | Required semantic status. Drives color via `data-cinder-status`. `success` maps to `--cinder-success`; `accent` maps to `--cinder-accent`. |
26
26
 
27
27
  <!-- generated:props:end -->
28
28
 
@@ -77,4 +77,12 @@
77
77
  .cinder-status-dot[data-cinder-status='neutral'] {
78
78
  --cinder-status-dot-color: var(--cinder-text-muted);
79
79
  }
80
+
81
+ .cinder-status-dot[data-cinder-status='success'] {
82
+ --cinder-status-dot-color: var(--cinder-success);
83
+ }
84
+
85
+ .cinder-status-dot[data-cinder-status='accent'] {
86
+ --cinder-status-dot-color: var(--cinder-accent);
87
+ }
80
88
  }
@@ -3,8 +3,8 @@
3
3
  "type": "object",
4
4
  "properties": {
5
5
  "status": {
6
- "enum": ["online", "offline", "warning", "error", "pending", "neutral"],
7
- "description": "Required semantic status. Drives color via `data-cinder-status`."
6
+ "enum": ["online", "offline", "warning", "error", "pending", "neutral", "success", "accent"],
7
+ "description": "Required semantic status. Drives color via `data-cinder-status`. `success` maps to `--cinder-success`; `accent` maps to `--cinder-accent`."
8
8
  },
9
9
  "label": {
10
10
  "type": "string",
@@ -5,8 +5,9 @@ const schema = {
5
5
  type: 'object',
6
6
  properties: {
7
7
  status: {
8
- enum: ['online', 'offline', 'warning', 'error', 'pending', 'neutral'],
9
- description: 'Required semantic status. Drives color via `data-cinder-status`.',
8
+ enum: ['online', 'offline', 'warning', 'error', 'pending', 'neutral', 'success', 'accent'],
9
+ description:
10
+ 'Required semantic status. Drives color via `data-cinder-status`. `success` maps to `--cinder-success`; `accent` maps to `--cinder-accent`.',
10
11
  },
11
12
  label: {
12
13
  type: 'string',
@@ -9,10 +9,21 @@ import type { HTMLAttributes } from 'svelte/elements';
9
9
  * `error` → `--cinder-danger`) lives in `status-dot.css` so consumers can
10
10
  * theme without forking the component.
11
11
  *
12
+ * - `success` maps to `--cinder-success` (same hue as `online`).
13
+ * - `accent` maps to `--cinder-accent`.
14
+ *
12
15
  * Exported so host components (e.g. `stacked-list-item.svelte`) can type
13
16
  * their own `status` prop against this union rather than restating it.
14
17
  */
15
- export type StatusDotStatus = 'online' | 'offline' | 'warning' | 'error' | 'pending' | 'neutral';
18
+ export type StatusDotStatus =
19
+ | 'online'
20
+ | 'offline'
21
+ | 'warning'
22
+ | 'error'
23
+ | 'pending'
24
+ | 'neutral'
25
+ | 'success'
26
+ | 'accent';
16
27
 
17
28
  export type StatusDotSize = 'sm' | 'md';
18
29
 
@@ -39,7 +50,7 @@ export type StatusDotProps = Omit<HTMLAttributes<HTMLSpanElement>, 'class'> & {
39
50
  };
40
51
 
41
52
  export interface StatusDotSchemaProps {
42
- /** Required semantic status. Drives color via `data-cinder-status`. */
53
+ /** Required semantic status. Drives color via `data-cinder-status`. `success` maps to `--cinder-success`; `accent` maps to `--cinder-accent`. */
43
54
  status: StatusDotStatus;
44
55
  /** Optional human label. Rendered visibly when `showLabel` is true; used as the accessible name either way. */
45
56
  label?: string;
@@ -0,0 +1,50 @@
1
+ # SubscriptionBadge
2
+
3
+ Opinionated Badge variant that communicates billing subscription states with a standardized tone, icon, and human-readable label — never relying on color alone.
4
+
5
+ ## Usage
6
+
7
+ ```svelte
8
+ <script lang="ts">
9
+ import { SubscriptionBadge } from '@lostgradient/cinder/subscription-badge';
10
+ </script>
11
+ ```
12
+
13
+ ## Guidance
14
+
15
+ ### Use When
16
+
17
+ - Displaying the billing state of a subscription in a dashboard, invoice list, or account settings page.
18
+ - Annotating a plan name, customer row, or invoice line with its current payment lifecycle state.
19
+
20
+ ### Avoid When
21
+
22
+ - The subscription state is not one of the six recognized values — use Badge directly with a custom label.
23
+ - You need an interactive control that changes the state — use a Button or Select.
24
+
25
+ ## Props
26
+
27
+ <!-- generated:props:start -->
28
+
29
+ | Prop | Type | Required | Default | Description |
30
+ | ------- | ----------------------------------------------------------------------------------------- | -------- | ------- | ------------------------------------------------------------------------------------------------- |
31
+ | `class` | `string` | no | — | Extra classes forwarded to the underlying Badge. |
32
+ | `state` | `"active"` \| `"trialing"` \| `"past-due"` \| `"canceled"` \| `"expired"` \| `"refunded"` | yes | — | The billing lifecycle state to display. Determines the badge tone, icon, and label automatically. |
33
+
34
+ <!-- generated:props:end -->
35
+
36
+ ## CSS Variables
37
+
38
+ <!-- generated:variables:start -->
39
+
40
+ This component does not declare any local CSS variables.
41
+
42
+ <!-- generated:variables:end -->
43
+
44
+ ## Subcomponents
45
+
46
+ <!-- generated:subcomponents:start -->
47
+
48
+ None.
49
+
50
+ <!-- generated:subcomponents:end -->
@@ -0,0 +1,6 @@
1
+ import './subscription-badge.css';
2
+ import SubscriptionBadge from './subscription-badge.svelte';
3
+
4
+ export default SubscriptionBadge;
5
+ export type { SubscriptionBadgeProps, SubscriptionState } from './subscription-badge.types.ts';
6
+ export { SubscriptionBadge };
@@ -0,0 +1,18 @@
1
+ @layer cinder.tokens, cinder.foundation, cinder.components, cinder.utilities;
2
+ @layer cinder.components {
3
+ /* ========================================
4
+ * SUBSCRIPTION BADGE
5
+ *
6
+ * Thin wrapper over .cinder-badge that identifies subscription-state
7
+ * badge instances in the DOM. All visual styling (tone, size, layout)
8
+ * is inherited from Badge — this rule exists only to give the component
9
+ * a stable CSS anchor for host-application overrides and for the
10
+ * component graph invariant check that every component has a CSS entry.
11
+ * ======================================== */
12
+
13
+ .cinder-subscription-badge {
14
+ /* No additional overrides needed — Badge tones cover all six states.
15
+ * Host applications can target .cinder-subscription-badge to further
16
+ * customize without touching the base Badge rules. */
17
+ }
18
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "$schema": "../../schemas/examples.schema.json",
3
+ "component": "subscription-badge",
4
+ "import": "@lostgradient/cinder/subscription-badge",
5
+ "examples": [
6
+ {
7
+ "id": "all-states",
8
+ "title": "Subscription badge states",
9
+ "description": "All six billing lifecycle states, each with a distinct icon, label, and tone.",
10
+ "code": "<script lang=\"ts\">\n import { SubscriptionBadge } from '@lostgradient/cinder/subscription-badge';\n</script>\n\n<div class=\"example-preview-row\">\n <SubscriptionBadge state=\"active\" />\n <SubscriptionBadge state=\"trialing\" />\n <SubscriptionBadge state=\"past-due\" />\n <SubscriptionBadge state=\"canceled\" />\n <SubscriptionBadge state=\"expired\" />\n <SubscriptionBadge state=\"refunded\" />\n</div>\n"
11
+ },
12
+ {
13
+ "id": "in-context",
14
+ "title": "Subscription badge in context",
15
+ "description": "SubscriptionBadge shown alongside plan details inside a Card, representing typical dashboard usage.",
16
+ "code": "<script lang=\"ts\">\n import { Card } from '@lostgradient/cinder/card';\n import { SubscriptionBadge } from '@lostgradient/cinder/subscription-badge';\n\n const plans = [\n { name: 'Pro — Monthly', state: 'active' },\n { name: 'Team — Annual', state: 'trialing' },\n { name: 'Starter — Monthly', state: 'past-due' },\n { name: 'Enterprise', state: 'canceled' },\n ] as const;\n</script>\n\n<div class=\"example-preview-column\">\n {#each plans as plan (plan.name)}\n <Card>\n <div style=\"display: flex; align-items: center; justify-content: space-between; gap: 1rem;\">\n <span style=\"font-size: var(--cinder-text-sm); color: var(--cinder-text);\">{plan.name}</span\n >\n <SubscriptionBadge state={plan.state} />\n </div>\n </Card>\n {/each}\n</div>\n"
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "state": {
6
+ "enum": ["active", "trialing", "past-due", "canceled", "expired", "refunded"],
7
+ "description": "The billing lifecycle state to display.\nDetermines the badge tone, icon, and label automatically."
8
+ },
9
+ "class": {
10
+ "type": "string",
11
+ "description": "Extra classes forwarded to the underlying Badge."
12
+ }
13
+ },
14
+ "additionalProperties": false,
15
+ "required": ["state"]
16
+ }
@@ -0,0 +1,21 @@
1
+ import type { ComponentSchema } from '../../schema-types';
2
+
3
+ const schema = {
4
+ $schema: 'https://json-schema.org/draft/2020-12/schema',
5
+ type: 'object',
6
+ properties: {
7
+ state: {
8
+ enum: ['active', 'trialing', 'past-due', 'canceled', 'expired', 'refunded'],
9
+ description:
10
+ 'The billing lifecycle state to display.\nDetermines the badge tone, icon, and label automatically.',
11
+ },
12
+ class: {
13
+ type: 'string',
14
+ description: 'Extra classes forwarded to the underlying Badge.',
15
+ },
16
+ },
17
+ additionalProperties: false,
18
+ required: ['state'],
19
+ } satisfies ComponentSchema;
20
+
21
+ export default schema as ComponentSchema;
@@ -0,0 +1,69 @@
1
+ <script lang="ts" module>
2
+ /**
3
+ * @cinder
4
+ * @category data-display
5
+ * @status alpha
6
+ * @purpose Opinionated Badge variant that communicates billing subscription states with a standardized tone, icon, and human-readable label.
7
+ * @tag billing
8
+ * @tag subscription
9
+ * @tag status
10
+ * @useWhen Displaying the billing state of a subscription in a dashboard, invoice list, or account settings page.
11
+ * @useWhen Annotating a plan name, customer row, or invoice line with its current payment lifecycle state.
12
+ * @avoidWhen The subscription state is not one of the six recognized values — use Badge directly with a custom label instead.
13
+ * @avoidWhen You need an interactive control that lets users change the state — use a Button or Select.
14
+ * @related badge, status-dot, chip
15
+ */
16
+ export type { SubscriptionBadgeProps, SubscriptionState } from './subscription-badge.types.ts';
17
+ </script>
18
+
19
+ <script lang="ts">
20
+ import CircleCheck from 'lucide-svelte/icons/circle-check';
21
+ import Clock from 'lucide-svelte/icons/clock';
22
+ import TriangleAlert from 'lucide-svelte/icons/triangle-alert';
23
+ import CircleX from 'lucide-svelte/icons/circle-x';
24
+ import CalendarX from 'lucide-svelte/icons/calendar-x';
25
+ import RotateCcw from 'lucide-svelte/icons/rotate-ccw';
26
+
27
+ import Badge from '../badge/badge.svelte';
28
+ import type { BadgeVariant } from '../badge/badge.types.ts';
29
+ import { classNames } from '../../utilities/class-names.ts';
30
+ import type { SubscriptionBadgeProps, SubscriptionState } from './subscription-badge.types.ts';
31
+
32
+ // lucide-svelte ships its icons as Svelte component classes. Every lucide icon
33
+ // shares one signature, so the config types its icon field as the type of a
34
+ // single concrete icon rather than the Svelte 5 `Component` functional type,
35
+ // which does not structurally match the class export under svelte-check.
36
+ type IconComponent = typeof CircleCheck;
37
+
38
+ interface StateConfig {
39
+ tone: BadgeVariant;
40
+ icon: IconComponent;
41
+ label: string;
42
+ }
43
+
44
+ const STATE_CONFIG: Record<SubscriptionState, StateConfig> = {
45
+ active: { tone: 'success', icon: CircleCheck, label: 'Active' },
46
+ trialing: { tone: 'info', icon: Clock, label: 'Trialing' },
47
+ 'past-due': { tone: 'warning', icon: TriangleAlert, label: 'Past due' },
48
+ canceled: { tone: 'neutral', icon: CircleX, label: 'Canceled' },
49
+ expired: { tone: 'danger', icon: CalendarX, label: 'Expired' },
50
+ refunded: { tone: 'info', icon: RotateCcw, label: 'Refunded' },
51
+ };
52
+
53
+ let { state, class: customClassName, ...rest }: SubscriptionBadgeProps = $props();
54
+
55
+ const config = $derived(STATE_CONFIG[state]);
56
+ const Icon = $derived(config.icon);
57
+ const label = $derived(config.label);
58
+ const tone = $derived(config.tone);
59
+ </script>
60
+
61
+ <Badge
62
+ variant={tone}
63
+ class={classNames('cinder-subscription-badge', customClassName)}
64
+ data-cinder-state={state}
65
+ {...rest}
66
+ >
67
+ <Icon class="icon-sm" aria-hidden="true" />
68
+ {label}
69
+ </Badge>
@@ -0,0 +1,37 @@
1
+ import type { HTMLAttributes } from 'svelte/elements';
2
+
3
+ /**
4
+ * Billing lifecycle states for a subscription.
5
+ *
6
+ * Each value is stamped onto the root element as `data-cinder-state` and
7
+ * maps to a Badge tone and an icon in `subscription-badge.svelte`. Color is
8
+ * NOT the only differentiator — every state also carries a visible text label
9
+ * and an icon so the state is conveyed even to users who cannot distinguish
10
+ * colors (WCAG 1.4.1).
11
+ */
12
+ export type SubscriptionState =
13
+ | 'active'
14
+ | 'trialing'
15
+ | 'past-due'
16
+ | 'canceled'
17
+ | 'expired'
18
+ | 'refunded';
19
+
20
+ /** Props for the SubscriptionBadge component. */
21
+ export type SubscriptionBadgeProps = Omit<HTMLAttributes<HTMLSpanElement>, 'children'> & {
22
+ /** The billing lifecycle state to display. */
23
+ state: SubscriptionState;
24
+ /** Extra classes forwarded to the underlying Badge. */
25
+ class?: string;
26
+ };
27
+
28
+ /** Cinder-specific props for the SubscriptionBadge component, used by the schema generator. */
29
+ export interface SubscriptionBadgeSchemaProps {
30
+ /**
31
+ * The billing lifecycle state to display.
32
+ * Determines the badge tone, icon, and label automatically.
33
+ */
34
+ state: SubscriptionState;
35
+ /** Extra classes forwarded to the underlying Badge. */
36
+ class?: string;
37
+ }
@@ -0,0 +1,3 @@
1
+ const variables: readonly string[] = [];
2
+
3
+ export default variables;