@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,3 @@
1
+ const variables: readonly string[] = [];
2
+
3
+ export default variables;
@@ -0,0 +1,60 @@
1
+ # MediaControls
2
+
3
+ Accessible playback controls for play, pause, and replay actions with optional progress display.
4
+
5
+ ## Usage
6
+
7
+ ```svelte
8
+ <script lang="ts">
9
+ import { MediaControls } from '@lostgradient/cinder/media-controls';
10
+ </script>
11
+ ```
12
+
13
+ ## Guidance
14
+
15
+ ### Use When
16
+
17
+ - Embedding play/pause/replay controls for audio or video content.
18
+ - Rendering media controls inside a toolbar or standalone on a card.
19
+
20
+ ### Avoid When
21
+
22
+ - You need waveform visualization or Web Audio integration — wire that separately.
23
+ - You need a full media player UI with seek scrubbing — use a dedicated player component.
24
+
25
+ ## Props
26
+
27
+ <!-- generated:props:start -->
28
+
29
+ | Prop | Type | Required | Default | Description |
30
+ | --------------- | --------------------------- | -------- | ----------- | -------------------------------------------------------------------------------------------------------------------------- |
31
+ | `class` | `string` | no | — | Additional class names merged with `.cinder-media-controls`. |
32
+ | `disabled` | `boolean` | no | `false` | Disable all controls. |
33
+ | `layout` | `"compact"` \| `"expanded"` | no | `"compact"` | Layout mode. |
34
+ | `loading` | `boolean` | no | `false` | Show loading state while media is buffering. |
35
+ | `playing` | `boolean` | no | `false` | Whether playback is active. |
36
+ | `progress` | `number` | no | — | Progress value between 0 and 1. Omit to hide the progress bar. |
37
+ | `progressLabel` | `string` | no | — | Accessible label for the progress bar. |
38
+ | `replay` | `boolean` | no | `false` | Show a replay action when the track has ended. |
39
+ | `unavailable` | `boolean` | no | `false` | Controls are unavailable. |
40
+ | `onPause` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
41
+ | `onPlay` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
42
+ | `onReplay` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
43
+
44
+ <!-- generated:props:end -->
45
+
46
+ ## CSS Variables
47
+
48
+ <!-- generated:variables:start -->
49
+
50
+ This component does not declare any local CSS variables.
51
+
52
+ <!-- generated:variables:end -->
53
+
54
+ ## Subcomponents
55
+
56
+ <!-- generated:subcomponents:start -->
57
+
58
+ None.
59
+
60
+ <!-- generated:subcomponents:end -->
@@ -0,0 +1,6 @@
1
+ import './media-controls.css';
2
+ import MediaControls from './media-controls.svelte';
3
+
4
+ export default MediaControls;
5
+ export type { MediaControlsLayout, MediaControlsProps } from './media-controls.types.ts';
6
+ export { MediaControls };
@@ -0,0 +1,112 @@
1
+ @layer cinder.tokens, cinder.foundation, cinder.components, cinder.utilities;
2
+ @layer cinder.components {
3
+ .cinder-media-controls {
4
+ display: inline-flex;
5
+ align-items: center;
6
+ gap: var(--cinder-space-2);
7
+ }
8
+
9
+ .cinder-media-controls__button {
10
+ display: inline-flex;
11
+ align-items: center;
12
+ justify-content: center;
13
+ gap: var(--cinder-space-1);
14
+ padding: var(--cinder-space-1) var(--cinder-space-2);
15
+ border: 1px solid var(--cinder-border);
16
+ border-radius: var(--cinder-radius-md);
17
+ background-color: var(--cinder-surface);
18
+ color: var(--cinder-text);
19
+ cursor: pointer;
20
+ font-size: var(--cinder-text-sm);
21
+ font-weight: 500;
22
+ line-height: 1;
23
+ transition:
24
+ background-color 0.15s ease,
25
+ border-color 0.15s ease;
26
+ min-width: 2rem;
27
+ min-height: 2rem;
28
+ }
29
+
30
+ @media (hover: hover) {
31
+ .cinder-media-controls__button:hover:not(:disabled) {
32
+ background-color: var(--cinder-surface-raised);
33
+ border-color: var(--cinder-border-strong);
34
+ }
35
+ }
36
+
37
+ .cinder-media-controls__button:focus-visible {
38
+ outline: var(--cinder-ring-width) solid transparent;
39
+ box-shadow:
40
+ 0 0 0 var(--cinder-ring-offset) var(--cinder-ring-offset-color),
41
+ 0 0 0 calc(var(--cinder-ring-offset) + var(--cinder-ring-width)) var(--cinder-ring-color);
42
+ }
43
+
44
+ .cinder-media-controls__button:disabled {
45
+ cursor: not-allowed;
46
+ opacity: 0.5;
47
+ }
48
+
49
+ .cinder-media-controls__button[data-cinder-state='playing'] {
50
+ background-color: var(--cinder-surface-raised);
51
+ }
52
+
53
+ .cinder-media-controls__icon {
54
+ display: inline-flex;
55
+ align-items: center;
56
+ justify-content: center;
57
+ flex-shrink: 0;
58
+ }
59
+
60
+ .cinder-media-controls__svg {
61
+ width: 1em;
62
+ height: 1em;
63
+ }
64
+
65
+ .cinder-media-controls__svg--loading {
66
+ animation: cinder-media-controls-spin 1s linear infinite;
67
+ }
68
+
69
+ @keyframes cinder-media-controls-spin {
70
+ from {
71
+ transform: rotate(0deg);
72
+ }
73
+ to {
74
+ transform: rotate(360deg);
75
+ }
76
+ }
77
+
78
+ @media (prefers-reduced-motion: reduce) {
79
+ .cinder-media-controls__svg--loading {
80
+ animation: none;
81
+ }
82
+ }
83
+
84
+ .cinder-media-controls__label {
85
+ white-space: nowrap;
86
+ }
87
+
88
+ /* Compact (icon-only) layout */
89
+ .cinder-media-controls[data-cinder-layout='compact'] .cinder-media-controls__button {
90
+ padding: var(--cinder-space-1);
91
+ }
92
+
93
+ /* Progress bar */
94
+ .cinder-media-controls__progress {
95
+ flex: 1;
96
+ min-width: 4rem;
97
+ }
98
+
99
+ .cinder-media-controls__progress-track {
100
+ height: 0.25rem;
101
+ border-radius: var(--cinder-radius-full, 9999px);
102
+ background-color: var(--cinder-border);
103
+ overflow: hidden;
104
+ }
105
+
106
+ .cinder-media-controls__progress-fill {
107
+ height: 100%;
108
+ border-radius: var(--cinder-radius-full, 9999px);
109
+ background-color: var(--cinder-accent);
110
+ transition: width 0.1s ease;
111
+ }
112
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "$schema": "../../schemas/examples.schema.json",
3
+ "component": "media-controls",
4
+ "import": "@lostgradient/cinder/media-controls",
5
+ "examples": [
6
+ {
7
+ "id": "desktop",
8
+ "title": "Desktop media controls",
9
+ "description": "Play, pause, and replay actions with optional progress. Compact icon-only layout suitable for a toolbar.",
10
+ "code": "<script lang=\"ts\">\n import { onDestroy } from 'svelte';\n\n import { MediaControls } from '@lostgradient/cinder/media-controls';\n\n let playing = $state(false);\n let progress = $state<number | undefined>(undefined);\n\n const isReplay = $derived(progress !== undefined && !playing && progress >= 1);\n\n // The progress timer is hoisted so pause/replay can stop it. Keeping it local\n // to handlePlay would leak the interval on pause and stack a new one on every\n // Play click.\n let interval: ReturnType<typeof setInterval> | undefined;\n let replayTimer: ReturnType<typeof setTimeout> | undefined;\n\n function stopTimer() {\n if (interval !== undefined) {\n clearInterval(interval);\n interval = undefined;\n }\n }\n\n function handlePlay() {\n playing = true;\n progress = 0;\n // Simulate progress. Clear any prior interval first so repeated Play clicks\n // don't stack timers.\n stopTimer();\n interval = setInterval(() => {\n progress = (progress ?? 0) + 0.05;\n if ((progress ?? 0) >= 1) {\n stopTimer();\n playing = false;\n progress = 1;\n }\n }, 200);\n }\n\n function handlePause() {\n playing = false;\n stopTimer();\n }\n\n function handleReplay() {\n stopTimer();\n playing = false;\n progress = 0;\n if (replayTimer !== undefined) clearTimeout(replayTimer);\n replayTimer = setTimeout(() => handlePlay(), 100);\n }\n\n onDestroy(() => {\n stopTimer();\n if (replayTimer !== undefined) clearTimeout(replayTimer);\n });\n</script>\n\n<div style=\"display: flex; flex-direction: column; gap: 1rem;\">\n {#if progress !== undefined}\n <MediaControls\n {playing}\n replay={isReplay}\n {progress}\n onPlay={handlePlay}\n onPause={handlePause}\n onReplay={handleReplay}\n />\n <MediaControls\n {playing}\n replay={isReplay}\n {progress}\n layout=\"expanded\"\n onPlay={handlePlay}\n onPause={handlePause}\n onReplay={handleReplay}\n />\n {:else}\n <MediaControls\n {playing}\n replay={isReplay}\n onPlay={handlePlay}\n onPause={handlePause}\n onReplay={handleReplay}\n />\n <MediaControls\n {playing}\n replay={isReplay}\n layout=\"expanded\"\n onPlay={handlePlay}\n onPause={handlePause}\n onReplay={handleReplay}\n />\n {/if}\n</div>\n"
11
+ },
12
+ {
13
+ "id": "states",
14
+ "title": "Media control states",
15
+ "description": "All states: paused, playing, loading, disabled, and unavailable.",
16
+ "code": "<script lang=\"ts\">\n import { MediaControls } from '@lostgradient/cinder/media-controls';\n</script>\n\n<div style=\"display: flex; flex-wrap: wrap; gap: 1rem; align-items: center;\">\n <MediaControls layout=\"expanded\" />\n <MediaControls layout=\"expanded\" playing />\n <MediaControls layout=\"expanded\" replay />\n <MediaControls layout=\"expanded\" loading />\n <MediaControls layout=\"expanded\" disabled />\n <MediaControls layout=\"expanded\" unavailable />\n</div>\n"
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,65 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "playing": {
6
+ "type": "boolean",
7
+ "description": "Whether playback is active.",
8
+ "default": false
9
+ },
10
+ "replay": {
11
+ "type": "boolean",
12
+ "description": "Show a replay action when the track has ended.",
13
+ "default": false
14
+ },
15
+ "disabled": {
16
+ "type": "boolean",
17
+ "description": "Disable all controls.",
18
+ "default": false
19
+ },
20
+ "loading": {
21
+ "type": "boolean",
22
+ "description": "Show loading state while media is buffering.",
23
+ "default": false
24
+ },
25
+ "unavailable": {
26
+ "type": "boolean",
27
+ "description": "Controls are unavailable.",
28
+ "default": false
29
+ },
30
+ "progress": {
31
+ "type": "number",
32
+ "description": "Progress value between 0 and 1. Omit to hide the progress bar."
33
+ },
34
+ "progressLabel": {
35
+ "type": "string",
36
+ "description": "Accessible label for the progress bar."
37
+ },
38
+ "layout": {
39
+ "enum": ["compact", "expanded"],
40
+ "description": "Layout mode.",
41
+ "default": "compact"
42
+ },
43
+ "class": {
44
+ "type": "string",
45
+ "description": "Additional class names merged with `.cinder-media-controls`."
46
+ }
47
+ },
48
+ "additionalProperties": false,
49
+ "metadata": {
50
+ "unsupportedProps": [
51
+ {
52
+ "name": "onPause",
53
+ "reason": "function-or-snippet"
54
+ },
55
+ {
56
+ "name": "onPlay",
57
+ "reason": "function-or-snippet"
58
+ },
59
+ {
60
+ "name": "onReplay",
61
+ "reason": "function-or-snippet"
62
+ }
63
+ ]
64
+ }
65
+ }
@@ -0,0 +1,69 @@
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
+ playing: {
8
+ type: 'boolean',
9
+ description: 'Whether playback is active.',
10
+ default: false,
11
+ },
12
+ replay: {
13
+ type: 'boolean',
14
+ description: 'Show a replay action when the track has ended.',
15
+ default: false,
16
+ },
17
+ disabled: {
18
+ type: 'boolean',
19
+ description: 'Disable all controls.',
20
+ default: false,
21
+ },
22
+ loading: {
23
+ type: 'boolean',
24
+ description: 'Show loading state while media is buffering.',
25
+ default: false,
26
+ },
27
+ unavailable: {
28
+ type: 'boolean',
29
+ description: 'Controls are unavailable.',
30
+ default: false,
31
+ },
32
+ progress: {
33
+ type: 'number',
34
+ description: 'Progress value between 0 and 1. Omit to hide the progress bar.',
35
+ },
36
+ progressLabel: {
37
+ type: 'string',
38
+ description: 'Accessible label for the progress bar.',
39
+ },
40
+ layout: {
41
+ enum: ['compact', 'expanded'],
42
+ description: 'Layout mode.',
43
+ default: 'compact',
44
+ },
45
+ class: {
46
+ type: 'string',
47
+ description: 'Additional class names merged with `.cinder-media-controls`.',
48
+ },
49
+ },
50
+ additionalProperties: false,
51
+ metadata: {
52
+ unsupportedProps: [
53
+ {
54
+ name: 'onPause',
55
+ reason: 'function-or-snippet',
56
+ },
57
+ {
58
+ name: 'onPlay',
59
+ reason: 'function-or-snippet',
60
+ },
61
+ {
62
+ name: 'onReplay',
63
+ reason: 'function-or-snippet',
64
+ },
65
+ ],
66
+ },
67
+ } satisfies ComponentSchema;
68
+
69
+ export default schema as ComponentSchema;
@@ -0,0 +1,238 @@
1
+ <script lang="ts" module>
2
+ /**
3
+ * @cinder
4
+ * @category action
5
+ * @status alpha
6
+ * @purpose Accessible playback controls for play, pause, and replay actions with optional progress display.
7
+ * @tag action
8
+ * @tag media
9
+ * @useWhen Embedding play/pause/replay controls for audio or video content.
10
+ * @useWhen Rendering media controls inside a toolbar or standalone on a card.
11
+ * @avoidWhen You need waveform visualization or Web Audio integration — wire that separately.
12
+ * @avoidWhen You need a full media player UI with seek scrubbing — use a dedicated player component.
13
+ * @related button, toolbar, progress, tooltip
14
+ */
15
+ export type { MediaControlsLayout, MediaControlsProps } from './media-controls.types.ts';
16
+ </script>
17
+
18
+ <script lang="ts">
19
+ import { classNames } from '../../utilities/class-names.ts';
20
+ import VisuallyHiddenLiveRegion from '../_visually-hidden-live-region.svelte';
21
+ import type { MediaControlsProps } from './media-controls.types.ts';
22
+
23
+ let {
24
+ playing = false,
25
+ replay = false,
26
+ disabled = false,
27
+ loading = false,
28
+ unavailable = false,
29
+ progress,
30
+ progressLabel = 'Playback progress',
31
+ layout = 'compact',
32
+ onPlay,
33
+ onPause,
34
+ onReplay,
35
+ class: customClassName,
36
+ ...rest
37
+ }: MediaControlsProps = $props();
38
+
39
+ const isDisabled = $derived(disabled || loading || unavailable);
40
+ const iconOnly = $derived(layout === 'compact');
41
+ // A non-finite progress (NaN/Infinity) is treated as "no progress" rather than
42
+ // rendering a progressbar with NaN aria values — `typeof NaN === 'number'` is
43
+ // true, so the finite check is what actually guards the bar.
44
+ const hasProgress = $derived(Number.isFinite(progress));
45
+ const clampedProgress = $derived(
46
+ Number.isFinite(progress) ? Math.max(0, Math.min(1, progress as number)) : 0,
47
+ );
48
+ const progressPercent = $derived(Math.round(clampedProgress * 100));
49
+
50
+ let announcement = $state('');
51
+
52
+ function handlePlay() {
53
+ if (isDisabled) return;
54
+ announcement = 'Playing';
55
+ onPlay?.();
56
+ }
57
+
58
+ function handlePause() {
59
+ if (isDisabled) return;
60
+ announcement = 'Paused';
61
+ onPause?.();
62
+ }
63
+
64
+ function handleReplay() {
65
+ if (isDisabled) return;
66
+ announcement = 'Replaying';
67
+ onReplay?.();
68
+ }
69
+
70
+ function handlePrimaryAction() {
71
+ if (replay) {
72
+ handleReplay();
73
+ } else if (playing) {
74
+ handlePause();
75
+ } else {
76
+ handlePlay();
77
+ }
78
+ }
79
+
80
+ // The play/pause control is a TOGGLE button, so it keeps a STABLE label and
81
+ // communicates on/off via aria-pressed — never both a changing label AND
82
+ // aria-pressed (which makes AT announce confusing output like "Pause,
83
+ // pressed"). Replay is a momentary action (changing label, no pressed state).
84
+ // Loading / unavailable take precedence so the spoken name matches the visual.
85
+ const isToggle = $derived(!loading && !unavailable && !replay);
86
+ const primaryLabel = $derived(
87
+ loading
88
+ ? 'Loading playback controls'
89
+ : unavailable
90
+ ? 'Playback unavailable'
91
+ : replay
92
+ ? 'Replay'
93
+ : 'Play or pause',
94
+ );
95
+
96
+ // aria-pressed applies only to the play/pause toggle (true while playing).
97
+ const primaryPressed = $derived(isToggle ? (playing ? 'true' : 'false') : undefined);
98
+ </script>
99
+
100
+ <div
101
+ {...rest}
102
+ class={classNames('cinder-media-controls', customClassName)}
103
+ data-cinder-layout={layout}
104
+ data-cinder-playing={playing ? '' : undefined}
105
+ data-cinder-loading={loading ? '' : undefined}
106
+ data-cinder-unavailable={unavailable ? '' : undefined}
107
+ >
108
+ <button
109
+ type="button"
110
+ class="cinder-media-controls__button"
111
+ aria-label={primaryLabel}
112
+ aria-pressed={primaryPressed}
113
+ aria-disabled={isDisabled ? 'true' : undefined}
114
+ aria-busy={loading ? 'true' : undefined}
115
+ disabled={isDisabled}
116
+ onclick={handlePrimaryAction}
117
+ data-cinder-state={loading
118
+ ? 'loading'
119
+ : unavailable
120
+ ? 'unavailable'
121
+ : replay
122
+ ? 'replay'
123
+ : playing
124
+ ? 'playing'
125
+ : 'paused'}
126
+ >
127
+ {#if loading}
128
+ <!-- Loading state: spinner-like indicator -->
129
+ <span class="cinder-media-controls__icon" aria-hidden="true">
130
+ <svg
131
+ xmlns="http://www.w3.org/2000/svg"
132
+ viewBox="0 0 24 24"
133
+ fill="none"
134
+ stroke="currentColor"
135
+ stroke-width="2"
136
+ stroke-linecap="round"
137
+ stroke-linejoin="round"
138
+ class="cinder-media-controls__svg cinder-media-controls__svg--loading"
139
+ >
140
+ <path d="M21 12a9 9 0 1 1-6.219-8.56" />
141
+ </svg>
142
+ </span>
143
+ {#if !iconOnly}
144
+ <span class="cinder-media-controls__label">Loading</span>
145
+ {/if}
146
+ {:else if unavailable}
147
+ <!-- Unavailable state -->
148
+ <span class="cinder-media-controls__icon" aria-hidden="true">
149
+ <svg
150
+ xmlns="http://www.w3.org/2000/svg"
151
+ viewBox="0 0 24 24"
152
+ fill="none"
153
+ stroke="currentColor"
154
+ stroke-width="2"
155
+ stroke-linecap="round"
156
+ stroke-linejoin="round"
157
+ class="cinder-media-controls__svg"
158
+ >
159
+ <circle cx="12" cy="12" r="10" />
160
+ <line x1="4.93" y1="4.93" x2="19.07" y2="19.07" />
161
+ </svg>
162
+ </span>
163
+ {#if !iconOnly}
164
+ <span class="cinder-media-controls__label">Unavailable</span>
165
+ {/if}
166
+ {:else if replay}
167
+ <!-- Replay icon -->
168
+ <span class="cinder-media-controls__icon" aria-hidden="true">
169
+ <svg
170
+ xmlns="http://www.w3.org/2000/svg"
171
+ viewBox="0 0 24 24"
172
+ fill="none"
173
+ stroke="currentColor"
174
+ stroke-width="2"
175
+ stroke-linecap="round"
176
+ stroke-linejoin="round"
177
+ class="cinder-media-controls__svg"
178
+ >
179
+ <path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" />
180
+ <path d="M3 3v5h5" />
181
+ </svg>
182
+ </span>
183
+ {#if !iconOnly}
184
+ <span class="cinder-media-controls__label">Replay</span>
185
+ {/if}
186
+ {:else if playing}
187
+ <!-- Pause icon -->
188
+ <span class="cinder-media-controls__icon" aria-hidden="true">
189
+ <svg
190
+ xmlns="http://www.w3.org/2000/svg"
191
+ viewBox="0 0 24 24"
192
+ fill="currentColor"
193
+ class="cinder-media-controls__svg"
194
+ >
195
+ <rect x="6" y="4" width="4" height="16" rx="1" />
196
+ <rect x="14" y="4" width="4" height="16" rx="1" />
197
+ </svg>
198
+ </span>
199
+ {#if !iconOnly}
200
+ <span class="cinder-media-controls__label">Pause</span>
201
+ {/if}
202
+ {:else}
203
+ <!-- Play icon -->
204
+ <span class="cinder-media-controls__icon" aria-hidden="true">
205
+ <svg
206
+ xmlns="http://www.w3.org/2000/svg"
207
+ viewBox="0 0 24 24"
208
+ fill="currentColor"
209
+ class="cinder-media-controls__svg"
210
+ >
211
+ <polygon points="5,3 19,12 5,21" />
212
+ </svg>
213
+ </span>
214
+ {#if !iconOnly}
215
+ <span class="cinder-media-controls__label">Play</span>
216
+ {/if}
217
+ {/if}
218
+ </button>
219
+
220
+ {#if hasProgress}
221
+ <div
222
+ class="cinder-media-controls__progress"
223
+ role="progressbar"
224
+ aria-label={progressLabel}
225
+ aria-valuemin={0}
226
+ aria-valuemax={100}
227
+ aria-valuenow={progressPercent}
228
+ aria-valuetext="{progressPercent}%"
229
+ >
230
+ <div class="cinder-media-controls__progress-track">
231
+ <div class="cinder-media-controls__progress-fill" style:width="{progressPercent}%"></div>
232
+ </div>
233
+ </div>
234
+ {/if}
235
+ </div>
236
+
237
+ <!-- Announce state changes to assistive technology via a polite live region. -->
238
+ <VisuallyHiddenLiveRegion message={announcement} />
@@ -0,0 +1,80 @@
1
+ import type { HTMLAttributes } from 'svelte/elements';
2
+
3
+ /** Layout mode: compact icon-only or expanded icon+label. */
4
+ export type MediaControlsLayout = 'compact' | 'expanded';
5
+
6
+ /** Props for the MediaControls component. */
7
+ export type MediaControlsProps = Omit<HTMLAttributes<HTMLDivElement>, 'class' | 'children'> & {
8
+ /** Current playback state. @default "paused" */
9
+ playing?: boolean;
10
+ /** Show a replay action instead of play/pause when the track has ended. @default false */
11
+ replay?: boolean;
12
+ /** Disable all controls. @default false */
13
+ disabled?: boolean;
14
+ /** Show a loading spinner and prevent interaction while media is buffering. @default false */
15
+ loading?: boolean;
16
+ /** Controls are unavailable (e.g. media source missing). @default false */
17
+ unavailable?: boolean;
18
+ /** Progress value between 0 and 1. Omit to hide the progress bar. */
19
+ progress?: number;
20
+ /** Human-readable accessible label for the progress bar. @default "Playback progress" */
21
+ progressLabel?: string;
22
+ /** Layout mode: `compact` renders icon-only, `expanded` renders icon+label. @default "compact" */
23
+ layout?: MediaControlsLayout;
24
+ /** Called when the user triggers playback. */
25
+ onPlay?: () => void;
26
+ /** Called when the user pauses playback. */
27
+ onPause?: () => void;
28
+ /** Called when the user triggers replay. */
29
+ onReplay?: () => void;
30
+ /** Additional class names merged with `.cinder-media-controls`. */
31
+ class?: string;
32
+ };
33
+
34
+ /**
35
+ * Cinder-specific props for MediaControls, used by the schema generator.
36
+ */
37
+ export interface MediaControlsSchemaProps {
38
+ /**
39
+ * Whether playback is active.
40
+ * @default false
41
+ */
42
+ playing?: boolean;
43
+ /**
44
+ * Show a replay action when the track has ended.
45
+ * @default false
46
+ */
47
+ replay?: boolean;
48
+ /**
49
+ * Disable all controls.
50
+ * @default false
51
+ */
52
+ disabled?: boolean;
53
+ /**
54
+ * Show loading state while media is buffering.
55
+ * @default false
56
+ */
57
+ loading?: boolean;
58
+ /**
59
+ * Controls are unavailable.
60
+ * @default false
61
+ */
62
+ unavailable?: boolean;
63
+ /** Progress value between 0 and 1. Omit to hide the progress bar. */
64
+ progress?: number;
65
+ /** Accessible label for the progress bar. */
66
+ progressLabel?: string;
67
+ /**
68
+ * Layout mode.
69
+ * @default "compact"
70
+ */
71
+ layout?: MediaControlsLayout;
72
+ /** Additional class names merged with `.cinder-media-controls`. */
73
+ class?: string;
74
+ /** Called when the play action is triggered. */
75
+ onPlay?: () => void;
76
+ /** Called when the pause action is triggered. */
77
+ onPause?: () => void;
78
+ /** Called when the replay action is triggered. */
79
+ onReplay?: () => void;
80
+ }
@@ -0,0 +1,3 @@
1
+ const variables: readonly string[] = [];
2
+
3
+ export default variables;