@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,186 @@
1
+ <script lang="ts" module>
2
+ /**
3
+ * @cinder
4
+ * @category feedback
5
+ * @status alpha
6
+ * @purpose Present feature availability and next action for browser permission or support states, with accessible status text and focus management.
7
+ * @tag feedback
8
+ * @tag permission
9
+ * @tag notice
10
+ * @useWhen Surfacing that a feature requires a browser permission such as microphone or notifications.
11
+ * @useWhen Communicating that a feature is unsupported in the current browser with a clear fallback path.
12
+ * @avoidWhen Performing the actual feature detection or permission request — wire that in userland.
13
+ * @avoidWhen Storing permission state — CapabilityGate is a pure presentation component.
14
+ * @related alert, banner, callout, modal
15
+ */
16
+ export type {
17
+ CapabilityGateProps,
18
+ CapabilityGateState,
19
+ CapabilityGateVariant,
20
+ } from './capability-gate.types.ts';
21
+
22
+ /** Human-readable default status text per state. */
23
+ const DEFAULT_STATUS_TEXT: Record<string, string> = {
24
+ supported: 'Available',
25
+ unsupported: 'Not supported in this browser',
26
+ 'permission-needed': 'Permission required',
27
+ 'permission-denied': 'Permission was denied',
28
+ loading: 'Checking availability…',
29
+ unavailable: 'Not available',
30
+ };
31
+ </script>
32
+
33
+ <script lang="ts">
34
+ import { classNames } from '../../utilities/class-names.ts';
35
+ import { devWarn } from '../../utilities/dev-warn.ts';
36
+ import type { CapabilityGateProps } from './capability-gate.types.ts';
37
+
38
+ const KNOWN_STATES = [
39
+ 'supported',
40
+ 'unsupported',
41
+ 'permission-needed',
42
+ 'permission-denied',
43
+ 'loading',
44
+ 'unavailable',
45
+ ] as const;
46
+
47
+ let {
48
+ feature,
49
+ // Destructured off `state` to avoid svelte-check treating the bare identifier
50
+ // as the `$state` rune (the public prop name is still `state`).
51
+ state: stateProp,
52
+ variant = 'inline',
53
+ primaryAction,
54
+ onPrimaryAction,
55
+ fallbackAction,
56
+ fallbackHref,
57
+ onFallbackAction,
58
+ dismissAction,
59
+ onDismiss,
60
+ children,
61
+ class: customClassName,
62
+ ...rest
63
+ }: CapabilityGateProps = $props();
64
+
65
+ // Guard the runtime state: a plain-JS or malformed value falls back to
66
+ // `unavailable` (with a dev warning) rather than rendering an unknown
67
+ // data-cinder-state and the raw value as status text.
68
+ const availabilityState = $derived(
69
+ (KNOWN_STATES as readonly string[]).includes(stateProp) ? stateProp : 'unavailable',
70
+ );
71
+ $effect(() => {
72
+ if (!(KNOWN_STATES as readonly string[]).includes(stateProp)) {
73
+ devWarn(
74
+ `CapabilityGate: unknown state "${String(stateProp)}". Expected one of ${KNOWN_STATES.join(', ')}. Falling back to "unavailable".`,
75
+ );
76
+ }
77
+ });
78
+
79
+ let visible = $state(true);
80
+ let dismissButton: HTMLButtonElement | undefined = $state();
81
+
82
+ // Re-show the gate when the situation changes (e.g. permission-needed →
83
+ // permission-denied), so a previous dismissal doesn't permanently hide a new,
84
+ // possibly more urgent state. Reads feature + stateProp to track them.
85
+ $effect(() => {
86
+ void feature;
87
+ void stateProp;
88
+ visible = true;
89
+ });
90
+
91
+ const statusText = $derived(DEFAULT_STATUS_TEXT[availabilityState] ?? availabilityState);
92
+ const isLoading = $derived(availabilityState === 'loading');
93
+ const isError = $derived(
94
+ availabilityState === 'permission-denied' || availabilityState === 'unsupported',
95
+ );
96
+ const isWarning = $derived(availabilityState === 'permission-needed');
97
+ const isSuccess = $derived(availabilityState === 'supported');
98
+
99
+ const resolvedVariant = $derived(
100
+ isError ? 'error' : isWarning ? 'warning' : isSuccess ? 'success' : 'info',
101
+ );
102
+
103
+ function handleDismiss() {
104
+ // Blur the dismiss button before it unmounts so focus moves to <body>
105
+ // predictably rather than being stranded on a detached node. The consumer
106
+ // owns where focus should land next (e.g. a trigger to re-open the gate) and
107
+ // can set it in `onDismiss` — the component cannot know the right target.
108
+ dismissButton?.blur();
109
+ visible = false;
110
+ onDismiss?.();
111
+ }
112
+ </script>
113
+
114
+ {#if visible}
115
+ <div
116
+ {...rest}
117
+ class={classNames('cinder-capability-gate', customClassName)}
118
+ data-cinder-state={availabilityState}
119
+ data-cinder-variant={resolvedVariant}
120
+ data-cinder-presentation={variant}
121
+ >
122
+ <!-- Status text announced to assistive technology. aria-busy lives on the
123
+ live region so a loading→ready transition is announced consistently. -->
124
+ <div
125
+ class="cinder-capability-gate__status"
126
+ role="status"
127
+ aria-live="polite"
128
+ aria-busy={isLoading ? 'true' : undefined}
129
+ >
130
+ <span class="cinder-capability-gate__feature">{feature}</span>
131
+ <span class="cinder-capability-gate__state-text">{statusText}</span>
132
+ </div>
133
+
134
+ {#if children}
135
+ <div class="cinder-capability-gate__content">
136
+ {@render children()}
137
+ </div>
138
+ {/if}
139
+
140
+ {#if primaryAction || fallbackAction || fallbackHref || dismissAction}
141
+ <div class="cinder-capability-gate__actions">
142
+ {#if primaryAction}
143
+ <button
144
+ type="button"
145
+ class="cinder-capability-gate__primary"
146
+ onclick={onPrimaryAction}
147
+ aria-label="{primaryAction} for {feature}"
148
+ >
149
+ {primaryAction}
150
+ </button>
151
+ {/if}
152
+
153
+ {#if fallbackHref}
154
+ <a
155
+ href={fallbackHref}
156
+ class="cinder-capability-gate__fallback"
157
+ aria-label="{fallbackAction ?? 'Alternative option'} for {feature}"
158
+ >
159
+ {fallbackAction ?? 'Alternative option'}
160
+ </a>
161
+ {:else if fallbackAction}
162
+ <button
163
+ type="button"
164
+ class="cinder-capability-gate__fallback"
165
+ onclick={onFallbackAction}
166
+ aria-label="{fallbackAction} for {feature}"
167
+ >
168
+ {fallbackAction}
169
+ </button>
170
+ {/if}
171
+
172
+ {#if dismissAction}
173
+ <button
174
+ bind:this={dismissButton}
175
+ type="button"
176
+ class="cinder-capability-gate__dismiss"
177
+ onclick={handleDismiss}
178
+ aria-label={dismissAction}
179
+ >
180
+ {dismissAction}
181
+ </button>
182
+ {/if}
183
+ </div>
184
+ {/if}
185
+ </div>
186
+ {/if}
@@ -0,0 +1,83 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+
4
+ /** Availability state for a browser feature or permission. */
5
+ export type CapabilityGateState =
6
+ | 'supported'
7
+ | 'unsupported'
8
+ | 'permission-needed'
9
+ | 'permission-denied'
10
+ | 'loading'
11
+ | 'unavailable';
12
+
13
+ /** Presentation style for the gate. */
14
+ export type CapabilityGateVariant = 'inline' | 'banner' | 'callout';
15
+
16
+ /** Props for the CapabilityGate component. */
17
+ export type CapabilityGateProps = Omit<
18
+ HTMLAttributes<HTMLDivElement>,
19
+ 'class' | 'children' | 'role'
20
+ > & {
21
+ /** The feature being gated (used in accessible status text). */
22
+ feature: string;
23
+ /** Current availability state. */
24
+ state: CapabilityGateState;
25
+ /** Presentation variant. @default "inline" */
26
+ variant?: CapabilityGateVariant;
27
+ /** Label for the primary action button (e.g. "Allow access", "Enable notifications"). */
28
+ primaryAction?: string;
29
+ /** Called when the user clicks the primary action button. */
30
+ onPrimaryAction?: () => void;
31
+ /** Label for the fallback action (e.g. "Use a different method"). */
32
+ fallbackAction?: string;
33
+ /** Href for a fallback link (renders an anchor instead of a button). */
34
+ fallbackHref?: string;
35
+ /** Called when the user clicks the fallback action (only when no fallbackHref). */
36
+ onFallbackAction?: () => void;
37
+ /** Label for the dismiss action. When provided a dismiss button is rendered. */
38
+ dismissAction?: string;
39
+ /**
40
+ * Called when the user dismisses the gate. The gate unmounts itself on
41
+ * dismiss; move focus to a sensible target here (e.g. the control that
42
+ * re-opens the gate) — the component blurs the dismiss button first so focus
43
+ * is not stranded, but only the consumer knows the right next focus target.
44
+ */
45
+ onDismiss?: () => void;
46
+ /** Custom content rendered below the status text and before the actions. */
47
+ children?: Snippet;
48
+ /** Additional class names merged with `.cinder-capability-gate`. */
49
+ class?: string;
50
+ };
51
+
52
+ /**
53
+ * Cinder-specific props for CapabilityGate, used by the schema generator.
54
+ */
55
+ export interface CapabilityGateSchemaProps {
56
+ /** The feature being gated. */
57
+ feature: string;
58
+ /** Current availability state. */
59
+ state: CapabilityGateState;
60
+ /**
61
+ * Presentation variant.
62
+ * @default "inline"
63
+ */
64
+ variant?: CapabilityGateVariant;
65
+ /** Label for the primary action button. */
66
+ primaryAction?: string;
67
+ /** Label for the fallback action. */
68
+ fallbackAction?: string;
69
+ /** Href for a fallback link. */
70
+ fallbackHref?: string;
71
+ /** Label for the dismiss action. */
72
+ dismissAction?: string;
73
+ /** Additional class names merged with `.cinder-capability-gate`. */
74
+ class?: string;
75
+ /** Called when the primary action button is activated. */
76
+ onPrimaryAction?: () => void;
77
+ /** Called when the fallback action button is activated. */
78
+ onFallbackAction?: () => void;
79
+ /** Called when the gate is dismissed. */
80
+ onDismiss?: () => void;
81
+ /** Custom content rendered below the status text and before the actions. */
82
+ children?: Snippet;
83
+ }
@@ -0,0 +1,3 @@
1
+ const variables: readonly string[] = [];
2
+
3
+ export default variables;
@@ -0,0 +1,10 @@
1
+ import './capability-gate.css';
2
+ import CapabilityGate from './capability-gate.svelte';
3
+
4
+ export default CapabilityGate;
5
+ export type {
6
+ CapabilityGateProps,
7
+ CapabilityGateState,
8
+ CapabilityGateVariant,
9
+ } from './capability-gate.types.ts';
10
+ export { CapabilityGate };
@@ -23,6 +23,7 @@ Surface container for grouping related content and actions into a distinct visua
23
23
  | `edgeToEdgeOnMobile` | `boolean` | no | — | Remove side borders/radius and bleed to the viewport edge on narrow screens. |
24
24
  | `footerTone` | `"default"` \| `"muted"` | no | — | Footer surface treatment. `muted` renders a grey/inset footer region. |
25
25
  | `headingLevel` | `2` \| `3` \| `4` \| `5` \| `6` | no | — | Heading level for the generated title. Defaults to `3`. Set this so the card title nests correctly within the surrounding document outline. |
26
+ | `padding` | `"none"` \| `"default"` | no | — | Body padding. `none` removes all padding for flush or full-bleed content (e.g. an image). |
26
27
  | `title` | `string` | no | — | |
27
28
  | `variant` | `"card"` \| `"well"` | no | — | Visual container style. `card` is raised; `well` is flatter and inset. |
28
29
  | `children` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
@@ -60,6 +60,10 @@
60
60
  background: var(--cinder-surface-inset);
61
61
  }
62
62
 
63
+ .cinder-card__body[data-cinder-padding='none'] {
64
+ padding: 0;
65
+ }
66
+
63
67
  .cinder-card[data-cinder-variant='well'] .cinder-card__body {
64
68
  background: var(--cinder-surface-inset);
65
69
  }
@@ -15,6 +15,12 @@
15
15
  "description": "A card that bleeds to the viewport edge below the mobile breakpoint.",
16
16
  "code": "<script lang=\"ts\">\n import { Card } from '@lostgradient/cinder/card';\n</script>\n\n<Card edgeToEdgeOnMobile>\n <div\n style=\"min-block-size: 8rem; border: 1px dashed var(--cinder-border-muted); border-radius: var(--cinder-radius-sm); background: repeating-linear-gradient(-45deg, transparent, transparent 0.5rem, color-mix(in oklch, var(--cinder-border-muted), transparent 70%) 0.5rem, color-mix(in oklch, var(--cinder-border-muted), transparent 70%) 0.5625rem);\"\n ></div>\n</Card>\n"
17
17
  },
18
+ {
19
+ "id": "flush-body",
20
+ "title": "Flush body (padding=\"none\")",
21
+ "description": "Pass padding=\"none\" to remove the body padding for full-bleed content such as an image or a data table.",
22
+ "code": "<script lang=\"ts\">\n import { Card } from '@lostgradient/cinder/card';\n</script>\n\n<Card title=\"Full-bleed image card\" padding=\"none\">\n <div\n style=\"min-block-size: 8rem; background: var(--cinder-surface-inset); border-top: 1px solid var(--cinder-border-muted); display: flex; align-items: center; justify-content: center; color: var(--cinder-text-subtle); font-size: var(--cinder-text-sm);\"\n >\n full-bleed content area\n </div>\n</Card>\n"
23
+ },
18
24
  {
19
25
  "id": "well-edge-to-edge-mobile",
20
26
  "title": "Well, edge-to-edge on mobile",
@@ -21,6 +21,10 @@
21
21
  "type": "boolean",
22
22
  "description": "Remove side borders/radius and bleed to the viewport edge on narrow screens."
23
23
  },
24
+ "padding": {
25
+ "enum": ["none", "default"],
26
+ "description": "Body padding. `none` removes all padding for flush or full-bleed content (e.g. an image)."
27
+ },
24
28
  "headingLevel": {
25
29
  "enum": [2, 3, 4, 5, 6],
26
30
  "description": "Heading level for the generated title. Defaults to `3`. Set this so the\ncard title nests correctly within the surrounding document outline."
@@ -23,6 +23,11 @@ const schema = {
23
23
  type: 'boolean',
24
24
  description: 'Remove side borders/radius and bleed to the viewport edge on narrow screens.',
25
25
  },
26
+ padding: {
27
+ enum: ['none', 'default'],
28
+ description:
29
+ 'Body padding. `none` removes all padding for flush or full-bleed content (e.g. an image).',
30
+ },
26
31
  headingLevel: {
27
32
  enum: [2, 3, 4, 5, 6],
28
33
  description:
@@ -12,7 +12,13 @@
12
12
  * @avoidWhen Presenting a single key metric — use stat or stat-group instead.
13
13
  * @related surface, stat, stacked-list-item, section-heading
14
14
  */
15
- export type { CardHeadingLevel, CardProps, CardTone, CardVariant } from './card.types.ts';
15
+ export type {
16
+ CardHeadingLevel,
17
+ CardPadding,
18
+ CardProps,
19
+ CardTone,
20
+ CardVariant,
21
+ } from './card.types.ts';
16
22
  </script>
17
23
 
18
24
  <script lang="ts">
@@ -31,6 +37,7 @@
31
37
  bodyTone = 'default',
32
38
  footerTone = 'default',
33
39
  edgeToEdgeOnMobile = false,
40
+ padding = 'default',
34
41
  ...rest
35
42
  }: CardProps = $props();
36
43
 
@@ -64,7 +71,7 @@
64
71
  </div>
65
72
  {/if}
66
73
 
67
- <div class="cinder-card__body" data-cinder-tone={bodyTone}>
74
+ <div class="cinder-card__body" data-cinder-tone={bodyTone} data-cinder-padding={padding}>
68
75
  {@render children()}
69
76
  </div>
70
77
 
@@ -2,6 +2,8 @@ import type { Snippet } from 'svelte';
2
2
  import type { HTMLAttributes } from 'svelte/elements';
3
3
  export type CardVariant = 'card' | 'well';
4
4
  export type CardTone = 'default' | 'muted';
5
+ /** Controls body padding. `none` removes all padding for flush/full-bleed content. Future values like `compact` may be added. */
6
+ export type CardPadding = 'default' | 'none';
5
7
  /** Heading level for the generated card title, so the document outline stays correct. */
6
8
  export type CardHeadingLevel = 2 | 3 | 4 | 5 | 6;
7
9
  type CardBase = HTMLAttributes<HTMLDivElement> & {
@@ -14,6 +16,8 @@ type CardBase = HTMLAttributes<HTMLDivElement> & {
14
16
  footerTone?: CardTone;
15
17
  /** Remove side borders/radius and bleed to the viewport edge on narrow screens. */
16
18
  edgeToEdgeOnMobile?: boolean;
19
+ /** Body padding. `none` removes all padding for flush or full-bleed content (e.g. an image). */
20
+ padding?: CardPadding;
17
21
  };
18
22
  /** Basic card with no generated header. */
19
23
  type CardPlain = CardBase & {
@@ -2,5 +2,5 @@ import './card.css';
2
2
  import Card from './card.svelte';
3
3
 
4
4
  export default Card;
5
- export type { CardProps, CardTone, CardVariant } from './card.types.ts';
5
+ export type { CardPadding, CardProps, CardTone, CardVariant } from './card.types.ts';
6
6
  export { Card };
@@ -0,0 +1,81 @@
1
+ # Chat
2
+
3
+ Opinionated conversation surface bundling message list, composer, attachments, and scroll affordances for AI or support transcripts.
4
+
5
+ ## Usage
6
+
7
+ ```svelte
8
+ <script lang="ts">
9
+ import { Chat } from '@lostgradient/cinder/chat';
10
+ </script>
11
+ ```
12
+
13
+ ## Guidance
14
+
15
+ ### Use When
16
+
17
+ - Shipping a full chat surface with composer, scroll-anchor, unread indicator, and attachments bundled as one heavyweight drop-in.
18
+ - Building an AI assistant or support thread where conversation state is modeled as a transcript of role-tagged messages.
19
+
20
+ ### Avoid When
21
+
22
+ - Rendering a one-off message list — compose lighter primitives directly instead of pulling the full suite.
23
+ - The transcript is read-only and needs no composer — a simple list of message bubbles is a better fit.
24
+
25
+ ## Props
26
+
27
+ <!-- generated:props:start -->
28
+
29
+ | Prop | Type | Required | Default | Description |
30
+ | ------------------------- | ------------------------------ | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------- |
31
+ | `allowAttachments` | `boolean` | no | — | |
32
+ | `allowCopy` | `boolean` | no | — | |
33
+ | `allowEditing` | `boolean` | no | — | |
34
+ | `allowRetry` | `boolean` | no | — | |
35
+ | `allowSearch` | `boolean` | no | — | |
36
+ | `bottomThreshold` | `number` | no | — | |
37
+ | `class` | `string` | no | — | |
38
+ | `emptyPrompts` | `string`[] | no | — | |
39
+ | `hasNewMessageIndicator` | `boolean` | no | — | |
40
+ | `id` | `string` | yes | — | |
41
+ | `isAtBottom` | `boolean` | no | — | |
42
+ | `isStreaming` | `boolean` | no | — | |
43
+ | `jumpThreshold` | `number` | no | — | |
44
+ | `streamingStatus` | `string` | no | — | |
45
+ | `surfaceMode` | `"default"` \| `"transparent"` | no | — | |
46
+ | `unreadCount` | `number` | no | — | |
47
+ | `conversation` | `(opaque)` | no | — | A prop whose shape is not captured by the JSON schema; see the component types for the exact signature. |
48
+ | `empty` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
49
+ | `header` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
50
+ | `messageActions` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
51
+ | `messageStatus` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
52
+ | `onattachmentadd` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
53
+ | `onattachmentfailure` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
54
+ | `onattachmentremove` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
55
+ | `onedit` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
56
+ | `onexpandedchange` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
57
+ | `onjumptolatest` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
58
+ | `onretry` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
59
+ | `onscrollstatechange` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
60
+ | `onstopgenerating` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
61
+ | `onsubmit` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
62
+ | `onunreadindicatorchange` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
63
+ | `viewportAttachment` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
64
+
65
+ <!-- generated:props:end -->
66
+
67
+ ## CSS Variables
68
+
69
+ <!-- generated:variables:start -->
70
+
71
+ This component does not declare any local CSS variables.
72
+
73
+ <!-- generated:variables:end -->
74
+
75
+ ## Subcomponents
76
+
77
+ <!-- generated:subcomponents:start -->
78
+
79
+ None.
80
+
81
+ <!-- generated:subcomponents:end -->
@@ -121,10 +121,8 @@
121
121
  }
122
122
 
123
123
  .chat-jump-button:focus-visible {
124
- outline: 2px solid transparent;
125
- box-shadow:
126
- 0 0 0 var(--cinder-ring-offset) var(--cinder-ring-offset-color),
127
- 0 0 0 calc(var(--cinder-ring-offset) + var(--cinder-ring-width)) var(--cinder-ring-color);
124
+ outline: var(--cinder-ring-width) solid transparent;
125
+ box-shadow: var(--_cinder-focus-ring-shadow);
128
126
  }
129
127
 
130
128
  /* Unread Count Badge */
@@ -180,11 +178,16 @@
180
178
  }
181
179
 
182
180
  .chat-new-indicator:focus-visible {
183
- outline: 2px solid transparent;
184
- box-shadow:
185
- 0 0 0 var(--cinder-ring-offset) var(--cinder-ring-offset-color),
186
- 0 0 0 calc(var(--cinder-ring-offset) + var(--cinder-ring-width)) var(--cinder-ring-color),
187
- var(--cinder-shadow-lg);
181
+ outline: var(--cinder-ring-width) solid transparent;
182
+ box-shadow: var(--_cinder-focus-ring-shadow), var(--cinder-shadow-lg);
183
+ }
184
+
185
+ @media (forced-colors: active) {
186
+ .chat-jump-button:focus-visible,
187
+ .chat-new-indicator:focus-visible {
188
+ outline: var(--cinder-ring-width) solid ButtonText;
189
+ outline-offset: 3px;
190
+ }
188
191
  }
189
192
 
190
193
  @keyframes slide-up {
@@ -854,10 +854,8 @@
854
854
  }
855
855
 
856
856
  .chat-input-send:focus-visible {
857
- outline: 2px solid transparent;
858
- box-shadow:
859
- 0 0 0 var(--cinder-ring-offset) var(--cinder-ring-offset-color),
860
- 0 0 0 calc(var(--cinder-ring-offset) + var(--cinder-ring-width)) var(--cinder-accent);
857
+ outline: var(--cinder-ring-width) solid transparent;
858
+ box-shadow: var(--_cinder-focus-ring-shadow);
861
859
  }
862
860
 
863
861
  /* Stop button variant - danger-tinted to signal urgency during streaming */
@@ -874,10 +872,11 @@
874
872
  }
875
873
  }
876
874
 
877
- .chat-input-send[data-stop]:focus-visible {
878
- box-shadow:
879
- 0 0 0 var(--cinder-ring-offset) var(--cinder-ring-offset-color),
880
- 0 0 0 calc(var(--cinder-ring-offset) + var(--cinder-ring-width)) var(--cinder-danger);
875
+ @media (forced-colors: active) {
876
+ .chat-input-send:focus-visible {
877
+ outline: var(--cinder-ring-width) solid ButtonText;
878
+ outline-offset: 3px;
879
+ }
881
880
  }
882
881
 
883
882
  /* Spinner */
@@ -347,9 +347,7 @@
347
347
 
348
348
  .chat-message:focus-visible {
349
349
  outline: var(--cinder-ring-width) solid transparent;
350
- box-shadow:
351
- 0 0 0 var(--cinder-ring-offset) var(--cinder-ring-offset-color),
352
- 0 0 0 calc(var(--cinder-ring-offset) + var(--cinder-ring-width)) var(--cinder-ring-color);
350
+ box-shadow: var(--_cinder-focus-ring-shadow);
353
351
  }
354
352
 
355
353
  /* Search match highlight — subtle accent-tinted ring */
@@ -571,9 +569,7 @@
571
569
 
572
570
  .chat-message-expand:focus-visible {
573
571
  outline: var(--cinder-ring-width) solid transparent;
574
- box-shadow:
575
- 0 0 0 var(--cinder-ring-offset) var(--cinder-ring-offset-color),
576
- 0 0 0 calc(var(--cinder-ring-offset) + var(--cinder-ring-width)) var(--cinder-ring-color);
572
+ box-shadow: var(--_cinder-focus-ring-shadow);
577
573
  }
578
574
 
579
575
  /* Failed message styling */
@@ -622,9 +618,7 @@
622
618
 
623
619
  .chat-message-retry:focus-visible {
624
620
  outline: var(--cinder-ring-width) solid transparent;
625
- box-shadow:
626
- 0 0 0 var(--cinder-ring-offset) var(--cinder-ring-offset-color),
627
- 0 0 0 calc(var(--cinder-ring-offset) + var(--cinder-ring-width)) var(--cinder-ring-color);
621
+ box-shadow: var(--_cinder-focus-ring-shadow);
628
622
  }
629
623
 
630
624
  /* Footer — absolutely positioned outside the bubble's flow so revealing it on
@@ -757,9 +751,7 @@
757
751
 
758
752
  :global(.chat-message-action-button:focus-visible) {
759
753
  outline: var(--cinder-ring-width) solid transparent;
760
- box-shadow:
761
- 0 0 0 var(--cinder-ring-offset) var(--cinder-ring-offset-color),
762
- 0 0 0 calc(var(--cinder-ring-offset) + var(--cinder-ring-width)) var(--cinder-ring-color);
754
+ box-shadow: var(--_cinder-focus-ring-shadow);
763
755
  }
764
756
 
765
757
  /* Touch devices: without hover discoverability, bare icons read as
@@ -818,7 +810,9 @@
818
810
  }
819
811
 
820
812
  .chat-message-edit-textarea:focus {
821
- box-shadow: 0 0 0 2px color-mix(in oklch, var(--cinder-accent), transparent 75%);
813
+ outline: var(--cinder-ring-width) solid transparent;
814
+ outline-offset: var(--cinder-ring-offset);
815
+ box-shadow: var(--_cinder-focus-ring-shadow);
822
816
  }
823
817
 
824
818
  .chat-message-edit-actions {
@@ -848,9 +842,7 @@
848
842
 
849
843
  .chat-message-edit-save:focus-visible {
850
844
  outline: var(--cinder-ring-width) solid transparent;
851
- box-shadow:
852
- 0 0 0 var(--cinder-ring-offset) var(--cinder-ring-offset-color),
853
- 0 0 0 calc(var(--cinder-ring-offset) + var(--cinder-ring-width)) var(--cinder-ring-color);
845
+ box-shadow: var(--_cinder-focus-ring-shadow);
854
846
  }
855
847
 
856
848
  .chat-message-edit-cancel {
@@ -877,9 +869,7 @@
877
869
 
878
870
  .chat-message-edit-cancel:focus-visible {
879
871
  outline: var(--cinder-ring-width) solid transparent;
880
- box-shadow:
881
- 0 0 0 var(--cinder-ring-offset) var(--cinder-ring-offset-color),
882
- 0 0 0 calc(var(--cinder-ring-offset) + var(--cinder-ring-width)) var(--cinder-ring-color);
872
+ box-shadow: var(--_cinder-focus-ring-shadow);
883
873
  }
884
874
 
885
875
  /* Responsive sizing for narrow viewports */
@@ -896,9 +886,14 @@
896
886
 
897
887
  /* Forced-colors: box-shadow rings are suppressed in Windows High Contrast Mode,
898
888
  so repaint the reserved transparent outline channel with a system color.
899
- Every selector here is button-shaped or a clickable region → ButtonText.
889
+ Text-entry focus uses Highlight; pressable regions use ButtonText.
900
890
  Placed after the base rules per the focus-ring policy's cascade note. */
901
891
  @media (forced-colors: active) {
892
+ .chat-message-edit-textarea:focus {
893
+ outline: var(--cinder-ring-width) solid Highlight;
894
+ outline-offset: 1px;
895
+ }
896
+
902
897
  .chat-message:focus-visible,
903
898
  .chat-message-expand:focus-visible,
904
899
  .chat-message-retry:focus-visible,