@lostgradient/cinder 0.3.0 → 0.4.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 (921) hide show
  1. package/CHANGELOG.md +146 -0
  2. package/README.md +2 -2
  3. package/components.json +138 -86
  4. package/dist/_internal/locale-context.d.ts +9 -0
  5. package/dist/_internal/text-direction.d.ts +4 -0
  6. package/dist/_internal/tree-context.d.ts +2 -0
  7. package/dist/api-contract.d.ts +1 -1
  8. package/dist/components/_internal/create-command-list-state.svelte.d.ts +43 -0
  9. package/dist/components/_internal/create-sliding-dialog-state.svelte.d.ts +26 -0
  10. package/dist/components/access-gate/index.js +379 -513
  11. package/dist/components/alert/alert.css +1 -1
  12. package/dist/components/alert/alert.schema.js +4 -4
  13. package/dist/components/alert/alert.types.d.ts +4 -4
  14. package/dist/components/alert/index.js +4 -4
  15. package/dist/components/alert-dialog/index.js +9 -3
  16. package/dist/components/approval-card/approval-card-state.d.ts +3 -0
  17. package/dist/components/approval-card/approval-card.css +239 -0
  18. package/dist/components/approval-card/approval-card.schema.js +236 -0
  19. package/dist/components/approval-card/approval-card.svelte.d.ts +21 -0
  20. package/dist/components/approval-card/approval-card.types.d.ts +155 -0
  21. package/dist/components/{subscription-badge/subscription-badge.variables.js → approval-card/approval-card.variables.js} +4 -4
  22. package/dist/components/approval-card/index.d.ts +5 -0
  23. package/dist/components/approval-card/index.js +3794 -0
  24. package/dist/components/autocomplete/autocomplete.css +12 -1
  25. package/dist/components/autocomplete/index.js +106 -81
  26. package/dist/components/avatar-group/index.js +3 -2
  27. package/dist/components/badge/badge.schema.js +6 -3
  28. package/dist/components/badge/badge.svelte.d.ts +4 -0
  29. package/dist/components/badge/badge.types.d.ts +18 -4
  30. package/dist/components/badge/index.d.ts +1 -1
  31. package/dist/components/badge/index.js +99 -3
  32. package/dist/components/banner/banner.schema.js +2 -2
  33. package/dist/components/banner/banner.types.d.ts +1 -1
  34. package/dist/components/banner/index.js +3 -3
  35. package/dist/components/button/button.css +1 -1
  36. package/dist/components/capability-gate/capability-gate.css +15 -2
  37. package/dist/components/capability-gate/capability-gate.schema.js +4 -4
  38. package/dist/components/capability-gate/capability-gate.types.d.ts +6 -6
  39. package/dist/components/capability-gate/index.js +7 -7
  40. package/dist/components/chat/chat.schema.js +11 -26
  41. package/dist/components/chat/chat.types.d.ts +30 -15
  42. package/dist/components/chat/container/chat-events.d.ts +2 -2
  43. package/dist/components/chat/container/chat-history-trigger.svelte.d.ts +1 -1
  44. package/dist/components/chat/container/chat.svelte.d.ts +1 -1
  45. package/dist/components/chat/container/use-chat-scroll-state.svelte.d.ts +4 -4
  46. package/dist/components/chat/container/use-chat-unread-state.svelte.d.ts +6 -6
  47. package/dist/components/chat/index.d.ts +1 -1
  48. package/dist/components/chat/index.js +2257 -1913
  49. package/dist/components/chat/input/chat-input.svelte.d.ts +3 -1
  50. package/dist/components/chat-conversation-header/index.js +261 -29
  51. package/dist/components/chat-conversation-list/chat-conversation-list.css +13 -0
  52. package/dist/components/checkbox/checkbox.css +3 -0
  53. package/dist/components/checkbox/checkbox.schema.js +6 -1
  54. package/dist/components/checkbox/checkbox.types.d.ts +2 -0
  55. package/dist/components/checkbox/index.js +78 -22
  56. package/dist/components/checkbox-group/checkbox-group.css +3 -0
  57. package/dist/components/checkbox-group/checkbox-group.schema.js +4 -4
  58. package/dist/components/checkbox-group/checkbox-group.types.d.ts +12 -7
  59. package/dist/components/checkbox-group/index.js +50 -21
  60. package/dist/components/choice-grid/index.js +2 -2
  61. package/dist/components/choice-grid-item/index.js +2 -2
  62. package/dist/components/click-away-listener/click-away-listener.schema.js +3 -3
  63. package/dist/components/click-away-listener/click-away-listener.types.d.ts +3 -3
  64. package/dist/components/click-away-listener/index.js +3 -3
  65. package/dist/components/code-block/code-block.css +4 -3
  66. package/dist/components/code-block/index.js +6 -5
  67. package/dist/components/collapsible/collapsible.schema.js +2 -2
  68. package/dist/components/collapsible/collapsible.types.d.ts +2 -2
  69. package/dist/components/collapsible/index.js +3 -3
  70. package/dist/components/color-field/color-field.schema.js +3 -3
  71. package/dist/components/color-field/color-field.types.d.ts +2 -2
  72. package/dist/components/color-field/index.js +133 -69
  73. package/dist/components/color-picker/index.js +29 -18
  74. package/dist/components/color-swatch-picker/index.js +29 -18
  75. package/dist/components/combobox/combobox.schema.js +6 -2
  76. package/dist/components/combobox/combobox.types.d.ts +7 -1
  77. package/dist/components/combobox/index.js +112 -60
  78. package/dist/components/command-item/command-item.css +10 -0
  79. package/dist/components/command-item/command-item.schema.js +9 -1
  80. package/dist/components/command-item/command-item.types.d.ts +4 -0
  81. package/dist/components/command-item/index.js +9 -1
  82. package/dist/components/command-menu/index.js +257 -161
  83. package/dist/components/command-palette/command-palette.schema.js +2 -3
  84. package/dist/components/command-palette/command-palette.types.d.ts +1 -2
  85. package/dist/components/command-palette/index.js +282 -192
  86. package/dist/components/confirm-dialog/index.js +9 -3
  87. package/dist/components/context-menu/context-menu.context.d.ts +2 -0
  88. package/dist/components/context-menu/index.js +300 -40
  89. package/dist/components/context-menu-trigger/index.js +11 -8
  90. package/dist/components/copy-button/index.js +6 -5
  91. package/dist/components/data-grid/_internal/column-model.svelte.d.ts +1 -0
  92. package/dist/components/data-grid/data-grid.css +25 -0
  93. package/dist/components/data-grid/data-grid.schema.js +3 -3
  94. package/dist/components/data-grid/data-grid.types.d.ts +8 -2
  95. package/dist/components/data-grid/index.js +11 -8
  96. package/dist/components/data-list/data-list.schema.js +7 -10
  97. package/dist/components/data-list/data-list.types.d.ts +5 -9
  98. package/dist/components/data-list/index.js +15 -39
  99. package/dist/components/data-table/data-table.css +13 -0
  100. package/dist/components/data-table/index.js +32 -19
  101. package/dist/components/date-range-field/date-range-field.schema.js +7 -3
  102. package/dist/components/date-range-field/date-range-field.svelte.d.ts +2 -2
  103. package/dist/components/date-range-field/date-range-field.types.d.ts +15 -10
  104. package/dist/components/date-range-field/index.d.ts +1 -1
  105. package/dist/components/date-range-field/index.js +160 -17
  106. package/dist/components/diff-viewer/diff-front-matter.svelte.d.ts +2 -2
  107. package/dist/components/diff-viewer/diff-line.svelte.d.ts +2 -2
  108. package/dist/components/diff-viewer/diff-toolbar.svelte.d.ts +2 -2
  109. package/dist/components/diff-viewer/diff-viewer.svelte.d.ts +1 -1
  110. package/dist/components/diff-viewer/diff-viewer.types.d.ts +3 -3
  111. package/dist/components/diff-viewer/index.d.ts +1 -1
  112. package/dist/components/diff-viewer/index.js +171 -67
  113. package/dist/components/drawer/index.js +353 -283
  114. package/dist/components/dropdown/dropdown.css +7 -1
  115. package/dist/components/dropdown/dropdown.types.d.ts +3 -0
  116. package/dist/components/dropdown/index.js +267 -35
  117. package/dist/components/dropdown-group/dropdown-group.schema.js +4 -4
  118. package/dist/components/dropdown-group/dropdown-group.types.d.ts +4 -4
  119. package/dist/components/dropdown-group/index.js +7 -7
  120. package/dist/components/dropdown-item/dropdown-item.schema.js +9 -1
  121. package/dist/components/dropdown-item/dropdown-item.types.d.ts +5 -0
  122. package/dist/components/dropdown-item/index.js +13 -8
  123. package/dist/components/dropdown-menu/index.js +236 -14
  124. package/dist/components/dropdown-trigger/index.js +11 -12
  125. package/dist/components/event-stream-viewer/event-stream-viewer-keys.d.ts +6 -0
  126. package/dist/components/event-stream-viewer/event-stream-viewer.css +46 -0
  127. package/dist/components/event-stream-viewer/event-stream-viewer.schema.js +83 -10
  128. package/dist/components/event-stream-viewer/event-stream-viewer.svelte.d.ts +3 -3
  129. package/dist/components/event-stream-viewer/event-stream-viewer.types.d.ts +124 -3
  130. package/dist/components/event-stream-viewer/index.d.ts +1 -1
  131. package/dist/components/event-stream-viewer/index.js +764 -409
  132. package/dist/components/faceted-filter-bar/faceted-filter-bar.css +9 -0
  133. package/dist/components/faceted-filter-bar/index.js +25 -6
  134. package/dist/components/file-upload/file-upload.css +5 -5
  135. package/dist/components/floating-action-button/floating-action-button.css +22 -22
  136. package/dist/components/floating-action-button/floating-action-button.schema.js +5 -5
  137. package/dist/components/floating-action-button/floating-action-button.svelte.d.ts +1 -1
  138. package/dist/components/floating-action-button/floating-action-button.types.d.ts +21 -21
  139. package/dist/components/floating-action-button/index.d.ts +1 -1
  140. package/dist/components/floating-action-button/index.js +8 -8
  141. package/dist/components/form-field/form-field.css +3 -13
  142. package/dist/components/form-field/index.js +2 -2
  143. package/dist/components/hover-card/index.js +3 -2
  144. package/dist/components/input/index.js +131 -67
  145. package/dist/components/input/input.schema.js +6 -1
  146. package/dist/components/input/input.types.d.ts +2 -0
  147. package/dist/components/invocation-rule-builder/index.d.ts +1 -1
  148. package/dist/components/invocation-rule-builder/index.js +184 -107
  149. package/dist/components/invocation-rule-builder/invocation-rule-builder.css +63 -6
  150. package/dist/components/invocation-rule-builder/invocation-rule-builder.schema.js +133 -35
  151. package/dist/components/invocation-rule-builder/invocation-rule-builder.svelte.d.ts +2 -2
  152. package/dist/components/invocation-rule-builder/invocation-rule-builder.types.d.ts +85 -8
  153. package/dist/components/json-schema-editor/form-view.svelte.d.ts +1 -0
  154. package/dist/components/json-schema-editor/index.js +677 -357
  155. package/dist/components/json-schema-editor/json-schema-editor.css +6 -1
  156. package/dist/components/json-schema-editor/json-schema-toolbar.svelte.d.ts +1 -0
  157. package/dist/components/json-schema-editor/property-editor.svelte.d.ts +2 -0
  158. package/dist/components/json-schema-editor/property-list-validation.d.ts +1 -0
  159. package/dist/components/json-schema-editor/property-list.svelte.d.ts +1 -0
  160. package/dist/components/json-viewer/_json-viewer-node.svelte.d.ts +3 -0
  161. package/dist/components/json-viewer/index.js +112 -26
  162. package/dist/components/json-viewer/json-viewer.css +11 -0
  163. package/dist/components/kanban-board/index.js +18 -13
  164. package/dist/components/kanban-board/kanban-board.css +56 -3
  165. package/dist/components/keyboard-shortcuts/index.js +2 -2
  166. package/dist/components/keyboard-shortcuts/keyboard-shortcuts.css +2 -2
  167. package/dist/components/label/index.js +2 -2
  168. package/dist/components/label/label.css +2 -9
  169. package/dist/components/load-more/index.js +4 -4
  170. package/dist/components/load-more/load-more.css +13 -5
  171. package/dist/components/load-more/load-more.schema.js +4 -4
  172. package/dist/components/load-more/load-more.types.d.ts +3 -3
  173. package/dist/components/locale-provider/index.d.ts +4 -0
  174. package/dist/components/locale-provider/index.js +76 -0
  175. package/dist/components/{connection-indicator/connection-indicator.schema.js → locale-provider/locale-provider.schema.js} +18 -14
  176. package/dist/components/locale-provider/locale-provider.svelte.d.ts +17 -0
  177. package/dist/components/locale-provider/locale-provider.types.d.ts +17 -0
  178. package/dist/components/{connection-indicator/connection-indicator.variables.js → locale-provider/locale-provider.variables.js} +4 -4
  179. package/dist/components/markdown-editor/editor-toolbar/editor-toolbar.svelte.d.ts +2 -0
  180. package/dist/components/markdown-editor/index.js +437 -128
  181. package/dist/components/markdown-editor/markdown-editor.schema.js +4 -4
  182. package/dist/components/markdown-editor/markdown-editor.types.d.ts +4 -4
  183. package/dist/components/masonry/masonry.schema.js +4 -3
  184. package/dist/components/masonry/masonry.types.d.ts +13 -2
  185. package/dist/components/matrix-chart/index.js +245 -224
  186. package/dist/components/media-controls/index.js +7 -7
  187. package/dist/components/media-controls/media-controls.css +15 -4
  188. package/dist/components/media-controls/media-controls.schema.js +4 -4
  189. package/dist/components/media-controls/media-controls.types.d.ts +7 -7
  190. package/dist/components/menu-bar/menu-bar.css +11 -0
  191. package/dist/components/menu-bar/menu-bar.svelte.d.ts +1 -0
  192. package/dist/components/modal/index.js +9 -3
  193. package/dist/components/navigation-bar/index.js +4 -4
  194. package/dist/components/navigation-bar/navigation-bar.schema.js +2 -2
  195. package/dist/components/navigation-bar/navigation-bar.types.d.ts +1 -1
  196. package/dist/components/number-input/index.js +88 -42
  197. package/dist/components/number-input/number-input.schema.js +4 -3
  198. package/dist/components/number-input/number-input.types.d.ts +16 -5
  199. package/dist/components/payload-inspector/index.d.ts +1 -1
  200. package/dist/components/payload-inspector/index.js +271 -64
  201. package/dist/components/payload-inspector/payload-inspector.css +6 -0
  202. package/dist/components/payload-inspector/payload-inspector.schema.js +27 -15
  203. package/dist/components/payload-inspector/payload-inspector.svelte.d.ts +2 -2
  204. package/dist/components/payload-inspector/payload-inspector.types.d.ts +52 -3
  205. package/dist/components/permission-matrix/permission-matrix.css +10 -0
  206. package/dist/components/phone-input/index.js +56 -33
  207. package/dist/components/phone-input/phone-input.schema.js +2 -2
  208. package/dist/components/phone-input/phone-input.types.d.ts +3 -2
  209. package/dist/components/pin-input/index.js +46 -41
  210. package/dist/components/pin-input/pin-input.schema.js +9 -2
  211. package/dist/components/pin-input/pin-input.types.d.ts +10 -1
  212. package/dist/components/popover/index.js +11 -4
  213. package/dist/components/portal/index.js +3 -2
  214. package/dist/components/pricing-card/index.js +22 -7
  215. package/dist/components/radio-group/index.js +51 -21
  216. package/dist/components/radio-group/radio-group.css +3 -0
  217. package/dist/components/radio-group/radio-group.schema.js +3 -3
  218. package/dist/components/radio-group/radio-group.types.d.ts +6 -2
  219. package/dist/components/rating/index.js +1 -6
  220. package/dist/components/rating/rating.schema.js +9 -2
  221. package/dist/components/rating/rating.types.d.ts +6 -0
  222. package/dist/components/review-editor/comment-list.svelte.d.ts +1 -1
  223. package/dist/components/review-editor/index.d.ts +1 -1
  224. package/dist/components/review-editor/index.js +789 -314
  225. package/dist/components/review-editor/review-editor-controls.svelte.d.ts +1 -1
  226. package/dist/components/review-editor/review-editor-impl.svelte.d.ts +4 -4
  227. package/dist/components/review-editor/review-editor-selection-types.d.ts +1 -1
  228. package/dist/components/review-editor/review-editor-state.svelte.d.ts +1 -1
  229. package/dist/components/review-editor/review-editor-threads.svelte.d.ts +2 -2
  230. package/dist/components/review-editor/review-editor.svelte.d.ts +2 -1
  231. package/dist/components/review-editor/review-editor.types.d.ts +77 -3
  232. package/dist/components/review-editor/thread-popover.svelte.d.ts +1 -1
  233. package/dist/components/run-step-timeline/index.d.ts +1 -1
  234. package/dist/components/run-step-timeline/index.js +747 -273
  235. package/dist/components/run-step-timeline/run-step-timeline.css +25 -5
  236. package/dist/components/run-step-timeline/run-step-timeline.schema.js +351 -21
  237. package/dist/components/run-step-timeline/run-step-timeline.svelte.d.ts +1 -1
  238. package/dist/components/run-step-timeline/run-step-timeline.types.d.ts +184 -3
  239. package/dist/components/schema-form/index.d.ts +1 -1
  240. package/dist/components/schema-form/index.js +1916 -474
  241. package/dist/components/schema-form/schema-form-async.fixture.d.ts +1 -0
  242. package/dist/components/schema-form/schema-form-body.svelte.d.ts +25 -0
  243. package/dist/components/schema-form/schema-form-model.d.ts +1 -4
  244. package/dist/components/schema-form/schema-form-validation.d.ts +1 -2
  245. package/dist/components/schema-form/schema-form.css +12 -74
  246. package/dist/components/schema-form/schema-form.schema.js +10 -3
  247. package/dist/components/schema-form/schema-form.svelte.d.ts +3 -3
  248. package/dist/components/schema-form/schema-form.types.d.ts +15 -8
  249. package/dist/components/scroll-area/index.js +3 -3
  250. package/dist/components/scroll-area/scroll-area.schema.js +2 -2
  251. package/dist/components/scroll-area/scroll-area.types.d.ts +1 -1
  252. package/dist/components/secret-value-field/index.js +10 -4
  253. package/dist/components/secret-value-field/secret-value-field.svelte.d.ts +1 -1
  254. package/dist/components/segmented-control/segmented-control.css +22 -1
  255. package/dist/components/select/index.js +37 -24
  256. package/dist/components/select/select.css +9 -2
  257. package/dist/components/selection-popover/index.js +11 -4
  258. package/dist/components/share-card/index.js +3 -4
  259. package/dist/components/share-card/share-card.css +15 -4
  260. package/dist/components/sheet/index.js +365 -300
  261. package/dist/components/shortcut-hint/index.js +3 -3
  262. package/dist/components/sidebar/index.js +423 -353
  263. package/dist/components/sidebar/sidebar.schema.js +2 -2
  264. package/dist/components/sidebar/sidebar.types.d.ts +1 -1
  265. package/dist/components/slider/index.js +211 -9
  266. package/dist/components/slider/slider.css +14 -9
  267. package/dist/components/sortable-list/sortable-list.css +1 -1
  268. package/dist/components/spectrogram/index.js +224 -203
  269. package/dist/components/spectrum-chart/index.js +208 -187
  270. package/dist/components/speed-dial/index.js +11 -11
  271. package/dist/components/speed-dial/speed-dial.css +3 -3
  272. package/dist/components/speed-dial-action/index.js +9 -9
  273. package/dist/components/stat/index.js +26 -4
  274. package/dist/components/stat/stat.schema.js +2 -2
  275. package/dist/components/stat/stat.types.d.ts +2 -2
  276. package/dist/components/stat-group/index.js +26 -4
  277. package/dist/components/stat-group/stat-group.css +1 -1
  278. package/dist/components/status-dot/index.d.ts +1 -1
  279. package/dist/components/status-dot/index.js +47 -8
  280. package/dist/components/status-dot/status-dot.css +45 -1
  281. package/dist/components/status-dot/status-dot.schema.js +12 -5
  282. package/dist/components/status-dot/status-dot.svelte.d.ts +5 -1
  283. package/dist/components/status-dot/status-dot.types.d.ts +16 -6
  284. package/dist/components/steps/steps.css +3 -3
  285. package/dist/components/table/index.js +23 -17
  286. package/dist/components/table/table.css +10 -0
  287. package/dist/components/table/table.types.d.ts +3 -3
  288. package/dist/components/table-header/index.js +5 -5
  289. package/dist/components/table-header/table-header.schema.js +3 -3
  290. package/dist/components/table-header/table-header.types.d.ts +2 -2
  291. package/dist/components/table-header-cell/index.js +11 -5
  292. package/dist/components/table-row/index.js +7 -7
  293. package/dist/components/table-row/table-row.schema.js +3 -3
  294. package/dist/components/table-row/table-row.types.d.ts +6 -6
  295. package/dist/components/tabs/index.js +17 -4
  296. package/dist/components/tabs/tabs.schema.js +6 -1
  297. package/dist/components/tabs/tabs.types.d.ts +2 -0
  298. package/dist/components/textarea/index.js +37 -24
  299. package/dist/components/textarea/textarea.css +16 -1
  300. package/dist/components/time-field/index.d.ts +5 -0
  301. package/dist/components/time-field/index.js +456 -0
  302. package/dist/components/time-field/time-field.css +60 -0
  303. package/dist/components/time-field/time-field.schema.d.ts +3 -0
  304. package/dist/components/time-field/time-field.schema.js +107 -0
  305. package/dist/components/time-field/time-field.svelte.d.ts +18 -0
  306. package/dist/components/time-field/time-field.types.d.ts +63 -0
  307. package/dist/components/time-field/time-field.variables.d.ts +2 -0
  308. package/dist/components/{experimental/connection-indicator/index.js → time-field/time-field.variables.js} +5 -14
  309. package/dist/components/toggle/index.js +39 -7
  310. package/dist/components/toggle/toggle.schema.js +11 -2
  311. package/dist/components/toggle/toggle.types.d.ts +2 -0
  312. package/dist/components/tooltip/index.js +3 -2
  313. package/dist/components/transfer-list/index.js +41 -11
  314. package/dist/components/transfer-list/transfer-list.css +22 -0
  315. package/dist/components/transfer-list/transfer-list.schema.js +2 -2
  316. package/dist/components/transfer-list/transfer-list.types.d.ts +2 -2
  317. package/dist/components/tree/index.js +238 -153
  318. package/dist/components/tree/tree.css +69 -0
  319. package/dist/components/tree/tree.schema.js +3 -3
  320. package/dist/components/tree/tree.types.d.ts +2 -2
  321. package/dist/components/tree-item/index.js +107 -68
  322. package/dist/components/tree-item/tree-item.schema.js +5 -5
  323. package/dist/components/tree-item/tree-item.types.d.ts +4 -4
  324. package/dist/components/virtual-list/index.js +98 -63
  325. package/dist/components/waveform/index.js +185 -164
  326. package/dist/editor/attach.d.ts +2 -2
  327. package/dist/editor/attach.js +10 -16
  328. package/dist/editor/editor.js +6 -6
  329. package/dist/editor/keymap-plugin.d.ts +2 -2
  330. package/dist/editor/keymap-plugin.js +4 -4
  331. package/dist/editor/types.d.ts +11 -11
  332. package/dist/index.d.ts +14 -12
  333. package/dist/index.js +106 -105
  334. package/dist/server/components/access-gate/index.js +176 -305
  335. package/dist/server/components/alert/alert.schema.js +4 -4
  336. package/dist/server/components/alert/index.css +1 -1
  337. package/dist/server/components/alert/index.js +4 -4
  338. package/dist/server/components/alert-dialog/index.js +9 -3
  339. package/dist/server/components/approval-card/approval-card.schema.js +217 -0
  340. package/dist/server/components/approval-card/approval-card.variables.js +12 -0
  341. package/dist/server/components/approval-card/index.css +1767 -0
  342. package/dist/server/components/approval-card/index.js +2499 -0
  343. package/dist/server/components/autocomplete/index.css +12 -1
  344. package/dist/server/components/autocomplete/index.js +34 -24
  345. package/dist/server/components/badge/badge.schema.js +6 -3
  346. package/dist/server/components/badge/index.js +71 -4
  347. package/dist/server/components/banner/banner.schema.js +2 -2
  348. package/dist/server/components/banner/index.js +3 -3
  349. package/dist/server/components/button/index.css +1 -1
  350. package/dist/server/components/capability-gate/capability-gate.schema.js +4 -4
  351. package/dist/server/components/capability-gate/index.css +10 -2
  352. package/dist/server/components/capability-gate/index.js +5 -5
  353. package/dist/server/components/chat/chat.schema.js +11 -26
  354. package/dist/server/components/chat/index.js +695 -438
  355. package/dist/server/components/chat-conversation-header/index.css +7 -1
  356. package/dist/server/components/chat-conversation-header/index.js +215 -17
  357. package/dist/server/components/chat-conversation-list/index.css +8 -0
  358. package/dist/server/components/checkbox/checkbox.schema.js +6 -1
  359. package/dist/server/components/checkbox/index.css +3 -0
  360. package/dist/server/components/checkbox/index.js +41 -4
  361. package/dist/server/components/checkbox-group/checkbox-group.schema.js +4 -4
  362. package/dist/server/components/checkbox-group/index.css +3 -0
  363. package/dist/server/components/checkbox-group/index.js +23 -4
  364. package/dist/server/components/choice-grid/index.js +2 -2
  365. package/dist/server/components/choice-grid-item/index.js +2 -2
  366. package/dist/server/components/click-away-listener/click-away-listener.schema.js +3 -3
  367. package/dist/server/components/click-away-listener/index.js +2 -2
  368. package/dist/server/components/code-block/index.css +4 -3
  369. package/dist/server/components/code-block/index.js +1 -6
  370. package/dist/server/components/collapsible/collapsible.schema.js +2 -2
  371. package/dist/server/components/collapsible/index.js +3 -3
  372. package/dist/server/components/color-field/color-field.schema.js +3 -3
  373. package/dist/server/components/color-field/index.js +61 -17
  374. package/dist/server/components/color-picker/index.js +29 -12
  375. package/dist/server/components/color-swatch-picker/index.js +29 -12
  376. package/dist/server/components/combobox/combobox.schema.js +6 -2
  377. package/dist/server/components/combobox/index.js +61 -12
  378. package/dist/server/components/command-item/command-item.schema.js +9 -1
  379. package/dist/server/components/command-item/index.css +1 -0
  380. package/dist/server/components/command-item/index.js +10 -2
  381. package/dist/server/components/command-menu/index.css +1 -0
  382. package/dist/server/components/command-menu/index.js +193 -102
  383. package/dist/server/components/command-palette/command-palette.schema.js +2 -3
  384. package/dist/server/components/command-palette/index.css +1 -0
  385. package/dist/server/components/command-palette/index.js +190 -106
  386. package/dist/server/components/confirm-dialog/index.js +9 -3
  387. package/dist/server/components/context-menu/index.css +7 -1
  388. package/dist/server/components/context-menu/index.js +244 -26
  389. package/dist/server/components/context-menu-trigger/index.js +7 -4
  390. package/dist/server/components/copy-button/index.js +1 -6
  391. package/dist/server/components/data-grid/data-grid.schema.js +3 -3
  392. package/dist/server/components/data-grid/index.css +23 -0
  393. package/dist/server/components/data-grid/index.js +9 -7
  394. package/dist/server/components/data-list/data-list.schema.js +7 -10
  395. package/dist/server/components/data-list/index.js +7 -21
  396. package/dist/server/components/data-table/index.css +20 -0
  397. package/dist/server/components/data-table/index.js +26 -16
  398. package/dist/server/components/date-range-field/date-range-field.schema.js +7 -3
  399. package/dist/server/components/date-range-field/index.js +146 -12
  400. package/dist/server/components/diff-viewer/index.js +79 -7
  401. package/dist/server/components/drawer/index.js +260 -193
  402. package/dist/server/components/dropdown/index.css +7 -1
  403. package/dist/server/components/dropdown/index.js +221 -23
  404. package/dist/server/components/dropdown-group/dropdown-group.schema.js +4 -4
  405. package/dist/server/components/dropdown-group/index.js +7 -7
  406. package/dist/server/components/dropdown-item/dropdown-item.schema.js +9 -1
  407. package/dist/server/components/dropdown-item/index.js +12 -7
  408. package/dist/server/components/dropdown-menu/index.js +197 -13
  409. package/dist/server/components/dropdown-trigger/index.js +5 -2
  410. package/dist/server/components/event-stream-viewer/event-stream-viewer.schema.js +83 -10
  411. package/dist/server/components/event-stream-viewer/index.css +323 -0
  412. package/dist/server/components/event-stream-viewer/index.js +406 -139
  413. package/dist/server/components/faceted-filter-bar/index.css +10 -1
  414. package/dist/server/components/faceted-filter-bar/index.js +24 -6
  415. package/dist/server/components/file-upload/index.css +3 -3
  416. package/dist/server/components/floating-action-button/floating-action-button.schema.js +5 -5
  417. package/dist/server/components/floating-action-button/index.css +16 -16
  418. package/dist/server/components/floating-action-button/index.js +5 -5
  419. package/dist/server/components/form-field/index.css +0 -10
  420. package/dist/server/components/form-field/index.js +2 -2
  421. package/dist/server/components/input/index.js +59 -15
  422. package/dist/server/components/input/input.schema.js +6 -1
  423. package/dist/server/components/invocation-rule-builder/index.css +51 -6
  424. package/dist/server/components/invocation-rule-builder/index.js +56 -17
  425. package/dist/server/components/invocation-rule-builder/invocation-rule-builder.schema.js +133 -35
  426. package/dist/server/components/json-schema-editor/index.css +4 -1
  427. package/dist/server/components/json-schema-editor/index.js +282 -52
  428. package/dist/server/components/json-viewer/index.css +7 -1
  429. package/dist/server/components/json-viewer/index.js +83 -11
  430. package/dist/server/components/kanban-board/index.css +42 -3
  431. package/dist/server/components/kanban-board/index.js +7 -6
  432. package/dist/server/components/keyboard-shortcuts/index.css +2 -2
  433. package/dist/server/components/keyboard-shortcuts/index.js +2 -2
  434. package/dist/server/components/label/index.css +0 -10
  435. package/dist/server/components/label/index.js +2 -2
  436. package/dist/server/components/load-more/index.css +12 -4
  437. package/dist/server/components/load-more/index.js +5 -5
  438. package/dist/server/components/load-more/load-more.schema.js +4 -4
  439. package/dist/server/components/locale-provider/index.js +55 -0
  440. package/dist/server/components/locale-provider/locale-provider.schema.js +35 -0
  441. package/dist/server/components/locale-provider/locale-provider.variables.js +12 -0
  442. package/dist/server/components/markdown-editor/index.js +297 -60
  443. package/dist/server/components/markdown-editor/markdown-editor.schema.js +4 -4
  444. package/dist/server/components/masonry/masonry.schema.js +4 -3
  445. package/dist/server/components/matrix-chart/index.js +62 -39
  446. package/dist/server/components/media-controls/index.css +11 -3
  447. package/dist/server/components/media-controls/index.js +7 -7
  448. package/dist/server/components/media-controls/media-controls.schema.js +4 -4
  449. package/dist/server/components/menu-bar/index.css +15 -1
  450. package/dist/server/components/modal/index.js +9 -3
  451. package/dist/server/components/navigation-bar/index.js +3 -3
  452. package/dist/server/components/navigation-bar/navigation-bar.schema.js +2 -2
  453. package/dist/server/components/number-input/index.js +56 -18
  454. package/dist/server/components/number-input/number-input.schema.js +4 -3
  455. package/dist/server/components/payload-inspector/index.css +616 -0
  456. package/dist/server/components/payload-inspector/index.js +181 -22
  457. package/dist/server/components/payload-inspector/payload-inspector.schema.js +27 -15
  458. package/dist/server/components/permission-matrix/index.css +8 -0
  459. package/dist/server/components/phone-input/index.js +21 -3
  460. package/dist/server/components/phone-input/phone-input.schema.js +2 -2
  461. package/dist/server/components/pin-input/index.js +12 -7
  462. package/dist/server/components/pin-input/pin-input.schema.js +9 -2
  463. package/dist/server/components/popover/index.js +9 -3
  464. package/dist/server/components/pricing-card/index.js +22 -7
  465. package/dist/server/components/radio-group/index.css +3 -0
  466. package/dist/server/components/radio-group/index.js +24 -3
  467. package/dist/server/components/radio-group/radio-group.schema.js +3 -3
  468. package/dist/server/components/rating/rating.schema.js +9 -2
  469. package/dist/server/components/review-editor/index.js +426 -80
  470. package/dist/server/components/run-step-timeline/index.css +503 -6
  471. package/dist/server/components/run-step-timeline/index.js +455 -109
  472. package/dist/server/components/run-step-timeline/run-step-timeline.schema.js +351 -21
  473. package/dist/server/components/schema-form/index.css +11 -69
  474. package/dist/server/components/schema-form/index.js +1291 -218
  475. package/dist/server/components/schema-form/schema-form.schema.js +10 -3
  476. package/dist/server/components/scroll-area/index.js +3 -3
  477. package/dist/server/components/scroll-area/scroll-area.schema.js +2 -2
  478. package/dist/server/components/secret-value-field/index.js +4 -4
  479. package/dist/server/components/segmented-control/index.css +15 -1
  480. package/dist/server/components/select/index.css +9 -2
  481. package/dist/server/components/select/index.js +9 -2
  482. package/dist/server/components/selection-popover/index.js +9 -3
  483. package/dist/server/components/share-card/index.css +11 -3
  484. package/dist/server/components/share-card/index.js +1 -5
  485. package/dist/server/components/sheet/index.js +265 -195
  486. package/dist/server/components/sidebar/index.js +274 -207
  487. package/dist/server/components/sidebar/sidebar.schema.js +2 -2
  488. package/dist/server/components/slider/index.css +13 -9
  489. package/dist/server/components/slider/index.js +173 -4
  490. package/dist/server/components/sortable-list/index.css +1 -1
  491. package/dist/server/components/spectrogram/index.js +68 -45
  492. package/dist/server/components/spectrum-chart/index.js +54 -31
  493. package/dist/server/components/speed-dial/index.css +3 -3
  494. package/dist/server/components/speed-dial/index.js +8 -8
  495. package/dist/server/components/speed-dial-action/index.js +6 -6
  496. package/dist/server/components/stat/index.js +26 -4
  497. package/dist/server/components/stat/stat.schema.js +2 -2
  498. package/dist/server/components/stat-group/index.css +1 -1
  499. package/dist/server/components/stat-group/index.js +26 -4
  500. package/dist/server/components/status-dot/index.css +45 -1
  501. package/dist/server/components/status-dot/index.js +35 -7
  502. package/dist/server/components/status-dot/status-dot.schema.js +12 -5
  503. package/dist/server/components/steps/index.css +3 -3
  504. package/dist/server/components/table/index.css +8 -0
  505. package/dist/server/components/table/index.js +22 -16
  506. package/dist/server/components/table-header/index.js +6 -6
  507. package/dist/server/components/table-header/table-header.schema.js +3 -3
  508. package/dist/server/components/table-header-cell/index.js +9 -3
  509. package/dist/server/components/table-row/index.js +7 -7
  510. package/dist/server/components/table-row/table-row.schema.js +3 -3
  511. package/dist/server/components/tabs/index.js +18 -4
  512. package/dist/server/components/tabs/tabs.schema.js +6 -1
  513. package/dist/server/components/textarea/index.css +16 -1
  514. package/dist/server/components/textarea/index.js +9 -2
  515. package/dist/server/components/time-field/index.css +58 -0
  516. package/dist/server/components/time-field/index.js +291 -0
  517. package/dist/server/components/time-field/time-field.schema.js +88 -0
  518. package/dist/server/components/time-field/time-field.variables.js +12 -0
  519. package/dist/server/components/toggle/index.js +40 -7
  520. package/dist/server/components/toggle/toggle.schema.js +11 -2
  521. package/dist/server/components/transfer-list/index.css +16 -0
  522. package/dist/server/components/transfer-list/index.js +37 -11
  523. package/dist/server/components/transfer-list/transfer-list.schema.js +2 -2
  524. package/dist/server/components/tree/index.css +68 -0
  525. package/dist/server/components/tree/index.js +67 -20
  526. package/dist/server/components/tree/tree.schema.js +3 -3
  527. package/dist/server/components/tree-item/index.js +34 -13
  528. package/dist/server/components/tree-item/tree-item.schema.js +5 -5
  529. package/dist/server/components/virtual-list/index.js +36 -13
  530. package/dist/server/components/waveform/index.js +51 -28
  531. package/dist/server/editor/attach.d.ts +2 -2
  532. package/dist/server/editor/attach.js +10 -16
  533. package/dist/server/editor/editor.js +6 -6
  534. package/dist/server/editor/keymap-plugin.d.ts +2 -2
  535. package/dist/server/editor/keymap-plugin.js +4 -4
  536. package/dist/server/editor/types.d.ts +11 -11
  537. package/dist/server/index.css +2033 -1463
  538. package/dist/server/index.js +7203 -5135
  539. package/dist/utilities/attachments.d.ts +6 -6
  540. package/dist/utilities/value-change.d.ts +2 -0
  541. package/package.json +96 -63
  542. package/src/_internal/locale-context.ts +21 -0
  543. package/src/_internal/text-direction.ts +213 -0
  544. package/src/_internal/tree-context.ts +2 -0
  545. package/src/components/_internal/create-command-list-state.svelte.ts +171 -0
  546. package/src/components/_internal/create-sliding-dialog-state.svelte.ts +170 -0
  547. package/src/components/_radio/README.md +1 -1
  548. package/src/components/access-gate/access-gate-inline.svelte +3 -1
  549. package/src/components/alert/README.md +8 -8
  550. package/src/components/alert/alert.css +1 -1
  551. package/src/components/alert/alert.examples.json +4 -4
  552. package/src/components/alert/alert.svelte +3 -5
  553. package/src/components/alert/alert.types.ts +4 -4
  554. package/src/components/approval-card/README.md +92 -0
  555. package/src/components/approval-card/approval-card-state.ts +24 -0
  556. package/src/components/approval-card/approval-card.css +239 -0
  557. package/src/components/approval-card/approval-card.examples.json +25 -0
  558. package/src/components/approval-card/approval-card.svelte +583 -0
  559. package/src/components/approval-card/approval-card.types.ts +180 -0
  560. package/src/components/approval-card/index.ts +16 -0
  561. package/src/components/autocomplete/autocomplete.css +12 -1
  562. package/src/components/autocomplete/autocomplete.svelte +53 -27
  563. package/src/components/badge/README.md +8 -7
  564. package/src/components/badge/badge.svelte +80 -3
  565. package/src/components/badge/badge.types.ts +36 -13
  566. package/src/components/badge/index.ts +1 -1
  567. package/src/components/banner/README.md +2 -2
  568. package/src/components/banner/banner.examples.json +19 -0
  569. package/src/components/banner/banner.svelte +2 -2
  570. package/src/components/banner/banner.types.ts +1 -1
  571. package/src/components/button/button.css +1 -1
  572. package/src/components/callout/callout.examples.json +19 -0
  573. package/src/components/capability-gate/README.md +3 -3
  574. package/src/components/capability-gate/capability-gate.css +15 -2
  575. package/src/components/capability-gate/capability-gate.examples.json +1 -1
  576. package/src/components/capability-gate/capability-gate.svelte +7 -7
  577. package/src/components/capability-gate/capability-gate.types.ts +6 -6
  578. package/src/components/chat/README.md +6 -10
  579. package/src/components/chat/chat.examples.json +8 -8
  580. package/src/components/chat/chat.types.ts +31 -15
  581. package/src/components/chat/container/chat-events.ts +2 -2
  582. package/src/components/chat/container/chat-history-trigger.svelte +9 -1
  583. package/src/components/chat/container/chat.svelte +47 -46
  584. package/src/components/chat/container/use-chat-scroll-state.svelte.ts +21 -18
  585. package/src/components/chat/container/use-chat-unread-state.svelte.ts +19 -19
  586. package/src/components/chat/index.ts +1 -1
  587. package/src/components/chat/input/chat-input.svelte +35 -13
  588. package/src/components/chat/message/image-lightbox.svelte +38 -15
  589. package/src/components/chat/message/message-attachments.svelte +1 -1
  590. package/src/components/chat/message/parts/reasoning-part.svelte +8 -0
  591. package/src/components/chat/message/parts/tool-approval-part.svelte +22 -9
  592. package/src/components/chat-conversation-list/chat-conversation-list.css +13 -0
  593. package/src/components/checkbox/README.md +1 -0
  594. package/src/components/checkbox/checkbox.css +3 -0
  595. package/src/components/checkbox/checkbox.svelte +44 -2
  596. package/src/components/checkbox/checkbox.types.ts +2 -0
  597. package/src/components/checkbox-group/README.md +2 -2
  598. package/src/components/checkbox-group/checkbox-group.css +3 -0
  599. package/src/components/checkbox-group/checkbox-group.examples.json +13 -0
  600. package/src/components/checkbox-group/checkbox-group.svelte +23 -2
  601. package/src/components/checkbox-group/checkbox-group.types.ts +12 -7
  602. package/src/components/choice-grid-item/choice-grid-item.svelte +1 -1
  603. package/src/components/click-away-listener/README.md +2 -2
  604. package/src/components/click-away-listener/click-away-listener.examples.json +1 -1
  605. package/src/components/click-away-listener/click-away-listener.svelte +2 -2
  606. package/src/components/click-away-listener/click-away-listener.types.ts +3 -3
  607. package/src/components/code-block/code-block.css +4 -3
  608. package/src/components/collapsible/README.md +2 -2
  609. package/src/components/collapsible/collapsible.svelte +2 -2
  610. package/src/components/collapsible/collapsible.types.ts +5 -2
  611. package/src/components/color-field/README.md +18 -18
  612. package/src/components/color-field/color-field.svelte +2 -2
  613. package/src/components/color-field/color-field.types.ts +2 -2
  614. package/src/components/color-swatch-picker/color-swatch-picker.examples.json +13 -0
  615. package/src/components/color-swatch-picker/color-swatch-picker.svelte +38 -24
  616. package/src/components/combobox/README.md +2 -1
  617. package/src/components/combobox/combobox.svelte +38 -17
  618. package/src/components/combobox/combobox.types.ts +7 -1
  619. package/src/components/command-item/README.md +13 -11
  620. package/src/components/command-item/command-item.css +10 -0
  621. package/src/components/command-item/command-item.svelte +11 -0
  622. package/src/components/command-item/command-item.types.ts +4 -0
  623. package/src/components/command-menu/command-menu.svelte +21 -102
  624. package/src/components/command-palette/README.md +12 -12
  625. package/src/components/command-palette/command-palette.examples.json +3 -3
  626. package/src/components/command-palette/command-palette.svelte +17 -134
  627. package/src/components/command-palette/command-palette.types.ts +1 -2
  628. package/src/components/context-menu/context-menu.context.ts +2 -0
  629. package/src/components/context-menu/context-menu.svelte +35 -9
  630. package/src/components/context-menu-trigger/context-menu-trigger.svelte +9 -6
  631. package/src/components/copy-button/copy-button.svelte +4 -3
  632. package/src/components/data-grid/README.md +3 -3
  633. package/src/components/data-grid/_internal/column-model.svelte.ts +2 -0
  634. package/src/components/data-grid/data-grid.css +25 -0
  635. package/src/components/data-grid/data-grid.svelte +7 -7
  636. package/src/components/data-grid/data-grid.types.ts +8 -2
  637. package/src/components/data-list/README.md +9 -9
  638. package/src/components/data-list/data-list.examples.json +1 -1
  639. package/src/components/data-list/data-list.svelte +3 -9
  640. package/src/components/data-list/data-list.types.ts +5 -9
  641. package/src/components/data-table/data-table.css +13 -0
  642. package/src/components/data-table/data-table.svelte +13 -3
  643. package/src/components/date-range-field/README.md +9 -8
  644. package/src/components/date-range-field/date-range-field.svelte +193 -19
  645. package/src/components/date-range-field/date-range-field.types.ts +16 -10
  646. package/src/components/date-range-field/index.ts +1 -0
  647. package/src/components/diff-viewer/diff-front-matter.svelte +2 -2
  648. package/src/components/diff-viewer/diff-line.svelte +32 -8
  649. package/src/components/diff-viewer/diff-toolbar.svelte +3 -3
  650. package/src/components/diff-viewer/diff-viewer.svelte +4 -4
  651. package/src/components/diff-viewer/diff-viewer.types.ts +3 -3
  652. package/src/components/diff-viewer/index.ts +1 -1
  653. package/src/components/drawer/drawer.svelte +26 -145
  654. package/src/components/dropdown/dropdown.css +7 -1
  655. package/src/components/dropdown/dropdown.types.ts +3 -0
  656. package/src/components/dropdown-group/README.md +6 -6
  657. package/src/components/dropdown-group/dropdown-group.svelte +8 -8
  658. package/src/components/dropdown-group/dropdown-group.types.ts +4 -4
  659. package/src/components/dropdown-item/README.md +2 -0
  660. package/src/components/dropdown-item/dropdown-item.svelte +14 -11
  661. package/src/components/dropdown-item/dropdown-item.types.ts +5 -0
  662. package/src/components/dropdown-menu/dropdown-menu.svelte +42 -9
  663. package/src/components/dropdown-trigger/dropdown-trigger.svelte +4 -6
  664. package/src/components/event-stream-viewer/README.md +38 -16
  665. package/src/components/event-stream-viewer/event-stream-viewer-keys.ts +74 -0
  666. package/src/components/event-stream-viewer/event-stream-viewer.css +46 -0
  667. package/src/components/event-stream-viewer/event-stream-viewer.examples.json +6 -0
  668. package/src/components/event-stream-viewer/event-stream-viewer.svelte +262 -69
  669. package/src/components/event-stream-viewer/event-stream-viewer.types.ts +130 -3
  670. package/src/components/event-stream-viewer/index.ts +6 -0
  671. package/src/components/faceted-filter-bar/faceted-filter-bar.css +9 -0
  672. package/src/components/faceted-filter-bar/faceted-filter-bar.svelte +31 -5
  673. package/src/components/file-upload/file-upload.css +5 -5
  674. package/src/components/file-upload/file-upload.examples.json +13 -0
  675. package/src/components/floating-action-button/README.md +9 -9
  676. package/src/components/floating-action-button/floating-action-button.css +22 -22
  677. package/src/components/floating-action-button/floating-action-button.examples.json +1 -1
  678. package/src/components/floating-action-button/floating-action-button.svelte +7 -7
  679. package/src/components/floating-action-button/floating-action-button.types.ts +21 -21
  680. package/src/components/floating-action-button/index.ts +1 -1
  681. package/src/components/form-field/form-field.css +3 -13
  682. package/src/components/form-field/form-field.svelte +4 -1
  683. package/src/components/image/image.examples.json +13 -0
  684. package/src/components/input/README.md +16 -15
  685. package/src/components/input/input.examples.json +1 -1
  686. package/src/components/input/input.svelte +65 -28
  687. package/src/components/input/input.types.ts +2 -0
  688. package/src/components/invocation-rule-builder/README.md +14 -14
  689. package/src/components/invocation-rule-builder/index.ts +1 -0
  690. package/src/components/invocation-rule-builder/invocation-rule-builder.css +63 -6
  691. package/src/components/invocation-rule-builder/invocation-rule-builder.svelte +73 -16
  692. package/src/components/invocation-rule-builder/invocation-rule-builder.types.ts +99 -8
  693. package/src/components/json-schema-editor/form-view.svelte +3 -1
  694. package/src/components/json-schema-editor/json-schema-editor-impl.svelte +30 -18
  695. package/src/components/json-schema-editor/json-schema-editor.css +6 -1
  696. package/src/components/json-schema-editor/json-schema-toolbar.svelte +6 -0
  697. package/src/components/json-schema-editor/json-view.svelte +1 -1
  698. package/src/components/json-schema-editor/property-editor.svelte +38 -2
  699. package/src/components/json-schema-editor/property-list-validation.ts +10 -0
  700. package/src/components/json-schema-editor/property-list.svelte +48 -3
  701. package/src/components/json-viewer/_json-viewer-node.svelte +55 -9
  702. package/src/components/json-viewer/json-viewer.css +11 -0
  703. package/src/components/json-viewer/json-viewer.svelte +63 -1
  704. package/src/components/kanban-board/kanban-board.css +56 -3
  705. package/src/components/kanban-board/kanban-board.svelte +10 -3
  706. package/src/components/keyboard-shortcuts/keyboard-shortcuts.css +2 -2
  707. package/src/components/keyboard-shortcuts/keyboard-shortcuts.svelte +1 -1
  708. package/src/components/label/README.md +1 -1
  709. package/src/components/label/label.css +2 -9
  710. package/src/components/label/label.svelte +4 -2
  711. package/src/components/load-more/README.md +4 -4
  712. package/src/components/load-more/load-more.css +13 -5
  713. package/src/components/load-more/load-more.examples.json +2 -2
  714. package/src/components/load-more/load-more.svelte +4 -4
  715. package/src/components/load-more/load-more.types.ts +3 -3
  716. package/src/components/locale-provider/README.md +43 -0
  717. package/src/components/locale-provider/index.ts +5 -0
  718. package/src/components/locale-provider/locale-provider.svelte +40 -0
  719. package/src/components/locale-provider/locale-provider.types.ts +21 -0
  720. package/src/components/markdown-editor/README.md +3 -3
  721. package/src/components/markdown-editor/editor-toolbar/editor-toolbar.svelte +5 -2
  722. package/src/components/markdown-editor/editor-toolbar/link-popover.svelte +13 -0
  723. package/src/components/markdown-editor/editor-toolbar/toolbar-dropdown.svelte +2 -0
  724. package/src/components/markdown-editor/markdown-editor.svelte +14 -12
  725. package/src/components/markdown-editor/markdown-editor.types.ts +4 -4
  726. package/src/components/masonry/README.md +7 -7
  727. package/src/components/masonry/masonry.types.ts +24 -2
  728. package/src/components/matrix-chart/matrix-chart.svelte +7 -21
  729. package/src/components/media-controls/README.md +3 -3
  730. package/src/components/media-controls/media-controls.css +15 -4
  731. package/src/components/media-controls/media-controls.examples.json +1 -1
  732. package/src/components/media-controls/media-controls.svelte +6 -6
  733. package/src/components/media-controls/media-controls.types.ts +10 -7
  734. package/src/components/menu-bar/menu-bar.css +11 -0
  735. package/src/components/menu-bar/menu-bar.svelte +81 -12
  736. package/src/components/navigation-bar/README.md +1 -1
  737. package/src/components/navigation-bar/navigation-bar.examples.json +1 -1
  738. package/src/components/navigation-bar/navigation-bar.svelte +2 -2
  739. package/src/components/navigation-bar/navigation-bar.types.ts +1 -1
  740. package/src/components/number-input/README.md +18 -18
  741. package/src/components/number-input/number-input.examples.json +13 -0
  742. package/src/components/number-input/number-input.svelte +77 -38
  743. package/src/components/number-input/number-input.types.ts +15 -5
  744. package/src/components/pagination/README.md +3 -1
  745. package/src/components/payload-inspector/README.md +11 -11
  746. package/src/components/payload-inspector/index.ts +2 -0
  747. package/src/components/payload-inspector/payload-inspector.css +6 -0
  748. package/src/components/payload-inspector/payload-inspector.svelte +22 -4
  749. package/src/components/payload-inspector/payload-inspector.types.ts +54 -3
  750. package/src/components/permission-matrix/permission-matrix.css +10 -0
  751. package/src/components/phone-input/README.md +1 -1
  752. package/src/components/phone-input/phone-input.svelte +7 -1
  753. package/src/components/phone-input/phone-input.types.ts +3 -2
  754. package/src/components/pin-input/README.md +19 -19
  755. package/src/components/pin-input/pin-input.svelte +16 -12
  756. package/src/components/pin-input/pin-input.types.ts +10 -1
  757. package/src/components/portal/portal.utilities.svelte.ts +4 -1
  758. package/src/components/pricing-card/pricing-card.svelte +26 -1
  759. package/src/components/radio-group/README.md +12 -12
  760. package/src/components/radio-group/radio-group.css +3 -0
  761. package/src/components/radio-group/radio-group.examples.json +3 -3
  762. package/src/components/radio-group/radio-group.svelte +22 -2
  763. package/src/components/radio-group/radio-group.types.ts +6 -2
  764. package/src/components/rating/README.md +18 -18
  765. package/src/components/rating/rating.svelte +0 -8
  766. package/src/components/rating/rating.types.ts +6 -0
  767. package/src/components/review-editor/comment-list.svelte +1 -1
  768. package/src/components/review-editor/index.ts +1 -1
  769. package/src/components/review-editor/review-editor-controls.svelte +8 -3
  770. package/src/components/review-editor/review-editor-impl.svelte +11 -7
  771. package/src/components/review-editor/review-editor-selection-types.ts +1 -1
  772. package/src/components/review-editor/review-editor-selection.svelte.ts +1 -1
  773. package/src/components/review-editor/review-editor-state.svelte.ts +1 -1
  774. package/src/components/review-editor/review-editor-threads.svelte.ts +2 -2
  775. package/src/components/review-editor/review-editor.types.ts +91 -3
  776. package/src/components/review-editor/thread-popover.svelte +1 -1
  777. package/src/components/run-step-timeline/README.md +53 -6
  778. package/src/components/run-step-timeline/index.ts +6 -0
  779. package/src/components/run-step-timeline/run-step-timeline.css +25 -5
  780. package/src/components/run-step-timeline/run-step-timeline.examples.json +3 -3
  781. package/src/components/run-step-timeline/run-step-timeline.svelte +314 -78
  782. package/src/components/run-step-timeline/run-step-timeline.types.ts +190 -3
  783. package/src/components/schema-form/README.md +9 -9
  784. package/src/components/schema-form/index.ts +0 -1
  785. package/src/components/schema-form/schema-form-async.fixture.ts +101 -0
  786. package/src/components/schema-form/schema-form-body.svelte +646 -0
  787. package/src/components/schema-form/schema-form-model.ts +4 -44
  788. package/src/components/schema-form/schema-form-validation.ts +83 -46
  789. package/src/components/schema-form/schema-form.css +12 -74
  790. package/src/components/schema-form/schema-form.examples.json +0 -6
  791. package/src/components/schema-form/schema-form.svelte +30 -598
  792. package/src/components/schema-form/schema-form.types.ts +16 -12
  793. package/src/components/scroll-area/README.md +1 -1
  794. package/src/components/scroll-area/scroll-area.examples.json +3 -3
  795. package/src/components/scroll-area/scroll-area.svelte +5 -5
  796. package/src/components/scroll-area/scroll-area.types.ts +1 -1
  797. package/src/components/secret-value-field/secret-value-field.svelte +10 -6
  798. package/src/components/segmented-control/segmented-control.css +22 -1
  799. package/src/components/segmented-control/segmented-control.examples.json +2 -2
  800. package/src/components/select/select.css +9 -2
  801. package/src/components/select/select.svelte +6 -1
  802. package/src/components/selection-popover/selection-popover.examples.json +1 -1
  803. package/src/components/share-card/share-card.css +15 -4
  804. package/src/components/share-card/share-card.svelte +2 -4
  805. package/src/components/sheet/sheet.svelte +30 -145
  806. package/src/components/shortcut-hint/shortcut-hint.svelte +1 -1
  807. package/src/components/side-navigation/side-navigation.examples.json +1 -1
  808. package/src/components/sidebar/README.md +6 -2
  809. package/src/components/sidebar/sidebar.examples.json +1 -1
  810. package/src/components/sidebar/sidebar.svelte +4 -4
  811. package/src/components/sidebar/sidebar.types.ts +1 -1
  812. package/src/components/slider/slider.css +14 -9
  813. package/src/components/slider/slider.svelte +33 -2
  814. package/src/components/sortable-list/README.md +18 -1
  815. package/src/components/sortable-list/sortable-list.css +1 -1
  816. package/src/components/sortable-list/sortable-list.examples.json +13 -0
  817. package/src/components/spectrogram/spectrogram.examples.json +1 -0
  818. package/src/components/spectrogram/spectrogram.svelte +7 -19
  819. package/src/components/spectrum-chart/spectrum-chart.svelte +8 -20
  820. package/src/components/speed-dial/speed-dial.css +3 -3
  821. package/src/components/speed-dial/speed-dial.examples.json +1 -1
  822. package/src/components/speed-dial/speed-dial.svelte +2 -2
  823. package/src/components/speed-dial-action/speed-dial-action.svelte +1 -1
  824. package/src/components/stacked-list-item/stacked-list-item.examples.json +1 -1
  825. package/src/components/stat/README.md +1 -1
  826. package/src/components/stat/stat.svelte +7 -2
  827. package/src/components/stat/stat.types.ts +2 -2
  828. package/src/components/stat-group/stat-group.css +1 -1
  829. package/src/components/status-dot/README.md +9 -7
  830. package/src/components/status-dot/index.ts +6 -1
  831. package/src/components/status-dot/status-dot.css +45 -1
  832. package/src/components/status-dot/status-dot.examples.json +1 -1
  833. package/src/components/status-dot/status-dot.svelte +57 -8
  834. package/src/components/status-dot/status-dot.types.ts +17 -6
  835. package/src/components/steps/steps.css +3 -3
  836. package/src/components/table/table.css +10 -0
  837. package/src/components/table/table.examples.json +1 -1
  838. package/src/components/table/table.svelte +2 -2
  839. package/src/components/table/table.types.ts +3 -3
  840. package/src/components/table-header/README.md +2 -2
  841. package/src/components/table-header/table-header.svelte +5 -5
  842. package/src/components/table-header/table-header.types.ts +2 -2
  843. package/src/components/table-header-cell/table-header-cell.svelte +13 -2
  844. package/src/components/table-row/README.md +2 -2
  845. package/src/components/table-row/table-row.svelte +6 -6
  846. package/src/components/table-row/table-row.types.ts +6 -6
  847. package/src/components/tabs/README.md +1 -0
  848. package/src/components/tabs/tabs.svelte +11 -3
  849. package/src/components/tabs/tabs.types.ts +2 -0
  850. package/src/components/textarea/textarea.css +16 -1
  851. package/src/components/textarea/textarea.svelte +6 -1
  852. package/src/components/time-field/README.md +60 -0
  853. package/src/components/time-field/index.ts +6 -0
  854. package/src/components/time-field/time-field.css +60 -0
  855. package/src/components/time-field/time-field.examples.json +13 -0
  856. package/src/components/time-field/time-field.svelte +277 -0
  857. package/src/components/time-field/time-field.types.ts +70 -0
  858. package/src/components/toggle/README.md +12 -11
  859. package/src/components/toggle/toggle.svelte +19 -6
  860. package/src/components/toggle/toggle.types.ts +2 -0
  861. package/src/components/transfer-list/README.md +1 -1
  862. package/src/components/transfer-list/transfer-list.css +22 -0
  863. package/src/components/transfer-list/transfer-list.svelte +44 -10
  864. package/src/components/transfer-list/transfer-list.types.ts +5 -2
  865. package/src/components/tree/README.md +2 -2
  866. package/src/components/tree/tree.css +69 -0
  867. package/src/components/tree/tree.examples.json +1 -1
  868. package/src/components/tree/tree.svelte +52 -9
  869. package/src/components/tree/tree.types.ts +2 -2
  870. package/src/components/tree-item/README.md +4 -4
  871. package/src/components/tree-item/tree-item.svelte +42 -12
  872. package/src/components/tree-item/tree-item.types.ts +4 -4
  873. package/src/components/virtual-list/virtual-list.svelte +5 -5
  874. package/src/components/waveform/waveform.svelte +7 -19
  875. package/src/index.ts +40 -16
  876. package/src/styles/components/_field-label.css +20 -0
  877. package/src/styles/components/_input-frame.css +2 -1
  878. package/src/styles/components.css +3 -2
  879. package/src/styles/index.css +1 -0
  880. package/src/styles/tokens-base.css +3 -0
  881. package/src/utilities/attachments.ts +15 -12
  882. package/src/utilities/value-change.ts +11 -0
  883. package/dist/components/connection-indicator/connection-indicator.css +0 -63
  884. package/dist/components/connection-indicator/connection-indicator.svelte.d.ts +0 -18
  885. package/dist/components/connection-indicator/connection-indicator.types.d.ts +0 -14
  886. package/dist/components/connection-indicator/index.d.ts +0 -5
  887. package/dist/components/connection-indicator/index.js +0 -75
  888. package/dist/components/experimental/connection-indicator/index.d.ts +0 -2
  889. package/dist/components/review-editor/review-editor-types.d.ts +0 -77
  890. package/dist/components/subscription-badge/index.d.ts +0 -5
  891. package/dist/components/subscription-badge/index.js +0 -353
  892. package/dist/components/subscription-badge/subscription-badge.css +0 -18
  893. package/dist/components/subscription-badge/subscription-badge.schema.js +0 -47
  894. package/dist/components/subscription-badge/subscription-badge.svelte.d.ts +0 -19
  895. package/dist/components/subscription-badge/subscription-badge.types.d.ts +0 -28
  896. package/dist/server/components/connection-indicator/connection-indicator.schema.js +0 -31
  897. package/dist/server/components/connection-indicator/connection-indicator.variables.js +0 -12
  898. package/dist/server/components/connection-indicator/index.css +0 -60
  899. package/dist/server/components/connection-indicator/index.js +0 -42
  900. package/dist/server/components/experimental/connection-indicator/index.js +0 -23
  901. package/dist/server/components/subscription-badge/index.css +0 -2
  902. package/dist/server/components/subscription-badge/index.js +0 -308
  903. package/dist/server/components/subscription-badge/subscription-badge.schema.js +0 -28
  904. package/dist/server/components/subscription-badge/subscription-badge.variables.js +0 -12
  905. package/src/components/connection-indicator/README.md +0 -41
  906. package/src/components/connection-indicator/connection-indicator.css +0 -63
  907. package/src/components/connection-indicator/connection-indicator.svelte +0 -44
  908. package/src/components/connection-indicator/connection-indicator.types.ts +0 -18
  909. package/src/components/connection-indicator/index.ts +0 -6
  910. package/src/components/experimental/connection-indicator/index.ts +0 -20
  911. package/src/components/review-editor/review-editor-types.ts +0 -92
  912. package/src/components/subscription-badge/README.md +0 -50
  913. package/src/components/subscription-badge/index.ts +0 -6
  914. package/src/components/subscription-badge/subscription-badge.css +0 -18
  915. package/src/components/subscription-badge/subscription-badge.examples.json +0 -19
  916. package/src/components/subscription-badge/subscription-badge.svelte +0 -69
  917. package/src/components/subscription-badge/subscription-badge.types.ts +0 -37
  918. /package/dist/components/{connection-indicator/connection-indicator.schema.d.ts → approval-card/approval-card.schema.d.ts} +0 -0
  919. /package/dist/components/{connection-indicator/connection-indicator.variables.d.ts → approval-card/approval-card.variables.d.ts} +0 -0
  920. /package/dist/components/{subscription-badge/subscription-badge.schema.d.ts → locale-provider/locale-provider.schema.d.ts} +0 -0
  921. /package/dist/components/{subscription-badge/subscription-badge.variables.d.ts → locale-provider/locale-provider.variables.d.ts} +0 -0
@@ -23,6 +23,7 @@
23
23
  </script>
24
24
 
25
25
  <script lang="ts">
26
+ import { tick } from 'svelte';
26
27
  import VisuallyHiddenLiveRegion from '../_visually-hidden-live-region.svelte';
27
28
  import SearchField from '../search-field/search-field.svelte';
28
29
  import Chip from '../chip/chip.svelte';
@@ -50,6 +51,7 @@
50
51
  }: FacetedFilterBarProps = $props();
51
52
 
52
53
  const searchId = $derived(`${generatedId}-search`);
54
+ let rootElement: HTMLDivElement | undefined = $state();
53
55
 
54
56
  // Internal uncontrolled search value when searchQuery is not provided.
55
57
  let internalSearchQuery = $state('');
@@ -68,13 +70,21 @@
68
70
  return appliedFilters.find((filter) => filter.key === key)?.value ?? '';
69
71
  }
70
72
 
73
+ function resolveFilterDisplayValue(key: string, value: string): string {
74
+ const facet = facets.find((candidate) => candidate.key === key);
75
+ if (facet?.type !== 'select') return value;
76
+ return facet.options.find((option) => option.value === value)?.label ?? value;
77
+ }
78
+
71
79
  const hasAppliedFilters = $derived(appliedFilters.length > 0 || currentSearchQuery.length > 0);
72
80
  const totalActiveCount = $derived(appliedFilters.length);
73
81
 
74
82
  // Live region summary message — always in DOM, content changes when filters change.
75
83
  const summaryMessage = $derived.by(() => {
76
84
  if (totalActiveCount === 0) return '';
77
- const parts = appliedFilters.map((filter) => `${filter.label}: ${filter.value}`);
85
+ const parts = appliedFilters.map(
86
+ (filter) => `${filter.label}: ${resolveFilterDisplayValue(filter.key, filter.value)}`,
87
+ );
78
88
  return `${totalActiveCount} active filter${totalActiveCount === 1 ? '' : 's'}: ${parts.join(', ')}`;
79
89
  });
80
90
 
@@ -85,8 +95,21 @@
85
95
  onsearchchange?.(value);
86
96
  }
87
97
 
88
- function handleFilterRemove(key: string): void {
98
+ async function handleFilterRemove(key: string): Promise<void> {
99
+ const filterIndex = appliedFilters.findIndex((filter) => filter.key === key);
100
+ const facetFallbackKey = appliedFilters[filterIndex]?.key;
89
101
  onfilterremove?.(key);
102
+ await tick();
103
+
104
+ const removeButtons = Array.from(
105
+ rootElement?.querySelectorAll<HTMLButtonElement>('.cinder-chip__remove') ?? [],
106
+ );
107
+ const nextRemoveButton = removeButtons[Math.min(filterIndex, removeButtons.length - 1)];
108
+ const facetSelect = facetFallbackKey
109
+ ? document.getElementById(`${generatedId}-facet-${facetFallbackKey}`)
110
+ : null;
111
+ const searchInput = document.getElementById(searchId);
112
+ (nextRemoveButton ?? facetSelect ?? searchInput)?.focus();
90
113
  }
91
114
 
92
115
  function handleClearAll(): void {
@@ -102,6 +125,7 @@
102
125
  </script>
103
126
 
104
127
  <div
128
+ bind:this={rootElement}
105
129
  {...rest}
106
130
  class={classNames('cinder-faceted-filter-bar', className)}
107
131
  role="search"
@@ -125,7 +149,7 @@
125
149
  {@const selectFacet = facet as SelectFacet}
126
150
  <div class="cinder-faceted-filter-bar__facet">
127
151
  <label
128
- class="cinder-faceted-filter-bar__facet-label cinder-sr-only"
152
+ class="cinder-faceted-filter-bar__facet-label"
129
153
  for={`${generatedId}-facet-${selectFacet.key}`}
130
154
  >
131
155
  {selectFacet.label}
@@ -165,10 +189,11 @@
165
189
  {#if hasAppliedFilters}
166
190
  <div class="cinder-faceted-filter-bar__chips" aria-label="Active filter controls">
167
191
  {#each appliedFilters as filter (filter.key)}
192
+ {@const displayValue = resolveFilterDisplayValue(filter.key, filter.value)}
168
193
  <Chip
169
194
  mode="removable"
170
- label={`${filter.label}: ${filter.value}`}
171
- removeAriaLabel={`Remove filter: ${filter.label}: ${filter.value}`}
195
+ label={`${filter.label}: ${displayValue}`}
196
+ removeAriaLabel={`Remove filter: ${filter.label}: ${displayValue}`}
172
197
  {disabled}
173
198
  onremove={() => handleFilterRemove(filter.key)}
174
199
  />
@@ -179,6 +204,7 @@
179
204
  size="sm"
180
205
  class="cinder-faceted-filter-bar__clear-all"
181
206
  {disabled}
207
+ aria-label="Clear all filters"
182
208
  onclick={handleClearAll}
183
209
  >
184
210
  Clear all
@@ -18,9 +18,9 @@
18
18
  background: var(--cinder-file-upload-background);
19
19
  padding: var(--cinder-space-4);
20
20
  transition:
21
- border-color 150ms ease,
22
- background-color 150ms ease,
23
- box-shadow 150ms ease;
21
+ border-color var(--cinder-duration-fast) var(--cinder-ease-standard),
22
+ background-color var(--cinder-duration-fast) var(--cinder-ease-standard),
23
+ box-shadow var(--cinder-duration-fast) var(--cinder-ease-standard);
24
24
  }
25
25
 
26
26
  .cinder-file-upload__dropzone[data-drag-active] {
@@ -35,7 +35,7 @@
35
35
  }
36
36
 
37
37
  .cinder-file-upload__dropzone:focus-within {
38
- outline: 2px solid transparent;
38
+ outline: var(--cinder-ring-width) solid transparent;
39
39
  box-shadow: var(--_cinder-focus-ring-shadow);
40
40
  }
41
41
 
@@ -169,7 +169,7 @@
169
169
  block-size: 100%;
170
170
  background: var(--cinder-file-upload-progress-fill);
171
171
  inline-size: calc(clamp(0, var(--cinder-file-upload-progress, 0), 100) * 1%);
172
- transition: inline-size 150ms ease;
172
+ transition: inline-size var(--cinder-duration-fast) var(--cinder-ease-standard);
173
173
  }
174
174
 
175
175
  .cinder-file-upload__error {
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "../../schemas/examples.schema.json",
3
+ "component": "file-upload",
4
+ "import": "@lostgradient/cinder/file-upload",
5
+ "examples": [
6
+ {
7
+ "id": "basic",
8
+ "title": "Basic file upload",
9
+ "description": "Drag-and-drop file picker with acceptance and rejection feedback.",
10
+ "code": "<script lang=\"ts\">\n import { FileUpload } from '@lostgradient/cinder/file-upload';\n import type { RejectedFile } from '@lostgradient/cinder/file-upload';\n import { FormField } from '@lostgradient/cinder/form-field';\n\n let acceptedNames = $state<string[]>([]);\n let rejectedMessages = $state<string[]>([]);\n\n // A single drop/pick can include both valid and invalid files — FileUpload\n // fires `onchange` (accepted) AND `onreject` (rejected) for the same batch.\n // Each handler updates only its own list so a mixed batch shows both results.\n function handleChange(files: File[]) {\n acceptedNames = files.map((file) => file.name);\n }\n\n function handleReject(rejected: RejectedFile[]) {\n rejectedMessages = rejected.map((entry) => entry.message);\n }\n</script>\n\n<!-- Compose with FormField so the file input has an associated <label>. -->\n<FormField id=\"attachment\" label=\"Attachment\" description=\"Images or PDF, up to 5 MB.\">\n <FileUpload\n id=\"attachment\"\n accept=\"image/*,.pdf\"\n multiple\n maxSize={5 * 1024 * 1024}\n onchange={handleChange}\n onreject={handleReject}\n />\n</FormField>\n\n{#if acceptedNames.length > 0}\n <p style=\"margin-top: 0.5rem; color: var(--cinder-color-success-fg);\">\n Accepted: {acceptedNames.join(', ')}\n </p>\n{/if}\n\n{#if rejectedMessages.length > 0}\n <p style=\"margin-top: 0.5rem; color: var(--cinder-color-danger-fg);\">\n {rejectedMessages.join('; ')}\n </p>\n{/if}\n"
11
+ }
12
+ ]
13
+ }
@@ -25,15 +25,15 @@ Circular button representing the single most important action on a screen.
25
25
 
26
26
  <!-- generated:props:start -->
27
27
 
28
- | Prop | Type | Required | Default | Description |
29
- | ---------- | ------------------------------------------- | -------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
30
- | `class` | `string` | no | — | Custom class merged with `.cinder-fab`. |
31
- | `color` | `"primary"` \| `"secondary"` \| `"surface"` | no | `"primary"` | Color palette. |
32
- | `disabled` | `boolean` | no | `false` | When true, disables the button and prevents interaction. |
33
- | `href` | `string` | no | | Render as an anchor `<a>` element with this href. |
34
- | `size` | `"sm"` \| `"md"` \| `"lg"` | no | `"md"` | Size of the FAB. |
35
- | `variant` | `"filled"` \| `"extended"` | no | `"filled"` | Visual variant. `filled` = circle, `extended` = pill. |
36
- | `children` | `(opaque)` | no | — | The icon (or icon + label for extended variant). Always provide `aria-label` when the FAB renders an icon without visible text — i.e. the `filled` variant. Not expressible in JSON Schema; see the component types for the signature. |
28
+ | Prop | Type | Required | Default | Description |
29
+ | ---------- | ------------------------------------------- | -------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
30
+ | `class` | `string` | no | — | Custom class merged with `.cinder-fab`. |
31
+ | `disabled` | `boolean` | no | `false` | When true, disables the button and prevents interaction. |
32
+ | `href` | `string` | no | | Render as an anchor `<a>` element with this href. |
33
+ | `shape` | `"filled"` \| `"extended"` | no | `"filled"` | Shape. `filled` = circle, `extended` = pill. |
34
+ | `size` | `"sm"` \| `"md"` \| `"lg"` | no | `"md"` | Size of the FAB. |
35
+ | `variant` | `"primary"` \| `"secondary"` \| `"surface"` | no | `"primary"` | Color palette. |
36
+ | `children` | `(opaque)` | no | — | The icon (or icon + label for extended shape). Always provide `aria-label` when the FAB renders an icon without visible text — i.e. the `filled` shape. Not expressible in JSON Schema; see the component types for the signature. |
37
37
 
38
38
  <!-- generated:props:end -->
39
39
 
@@ -80,11 +80,11 @@
80
80
  font-size: var(--cinder-text-xs);
81
81
  }
82
82
 
83
- .cinder-fab[data-cinder-size='sm'][data-cinder-variant='filled'] {
83
+ .cinder-fab[data-cinder-size='sm'][data-cinder-shape='filled'] {
84
84
  inline-size: var(--cinder-space-10);
85
85
  }
86
86
 
87
- .cinder-fab[data-cinder-size='sm'][data-cinder-variant='extended'] {
87
+ .cinder-fab[data-cinder-size='sm'][data-cinder-shape='extended'] {
88
88
  padding-inline: var(--cinder-space-4);
89
89
  }
90
90
 
@@ -93,11 +93,11 @@
93
93
  font-size: var(--cinder-text-sm);
94
94
  }
95
95
 
96
- .cinder-fab[data-cinder-size='md'][data-cinder-variant='filled'] {
96
+ .cinder-fab[data-cinder-size='md'][data-cinder-shape='filled'] {
97
97
  inline-size: var(--cinder-space-12);
98
98
  }
99
99
 
100
- .cinder-fab[data-cinder-size='md'][data-cinder-variant='extended'] {
100
+ .cinder-fab[data-cinder-size='md'][data-cinder-shape='extended'] {
101
101
  padding-inline: var(--cinder-space-6);
102
102
  }
103
103
 
@@ -106,51 +106,51 @@
106
106
  font-size: var(--cinder-text-lg);
107
107
  }
108
108
 
109
- .cinder-fab[data-cinder-size='lg'][data-cinder-variant='filled'] {
109
+ .cinder-fab[data-cinder-size='lg'][data-cinder-shape='filled'] {
110
110
  inline-size: var(--cinder-space-16);
111
111
  }
112
112
 
113
- .cinder-fab[data-cinder-size='lg'][data-cinder-variant='extended'] {
113
+ .cinder-fab[data-cinder-size='lg'][data-cinder-shape='extended'] {
114
114
  padding-inline: var(--cinder-space-8);
115
115
  }
116
116
 
117
117
  /* ----------------------------------------
118
- * Color variants
118
+ * Color variants (via variant prop)
119
119
  * ---------------------------------------- */
120
120
 
121
121
  /* primary — accent fill with contrast foreground */
122
- .cinder-fab[data-cinder-color='primary'] {
122
+ .cinder-fab[data-cinder-variant='primary'] {
123
123
  --_cinder-fab-ring: var(--cinder-ring-on-accent);
124
124
  background: var(--cinder-accent);
125
125
  color: var(--cinder-accent-contrast);
126
126
  }
127
127
 
128
- .cinder-fab[data-cinder-color='primary']:disabled,
129
- .cinder-fab[data-cinder-color='primary'][aria-disabled='true'] {
128
+ .cinder-fab[data-cinder-variant='primary']:disabled,
129
+ .cinder-fab[data-cinder-variant='primary'][aria-disabled='true'] {
130
130
  background: var(--cinder-surface-inset);
131
131
  color: var(--cinder-text-disabled);
132
132
  }
133
133
 
134
134
  /* secondary — surface-raised background with standard text */
135
- .cinder-fab[data-cinder-color='secondary'] {
135
+ .cinder-fab[data-cinder-variant='secondary'] {
136
136
  background: var(--cinder-surface-raised);
137
137
  color: var(--cinder-text);
138
138
  }
139
139
 
140
- .cinder-fab[data-cinder-color='secondary']:disabled,
141
- .cinder-fab[data-cinder-color='secondary'][aria-disabled='true'] {
140
+ .cinder-fab[data-cinder-variant='secondary']:disabled,
141
+ .cinder-fab[data-cinder-variant='secondary'][aria-disabled='true'] {
142
142
  background: var(--cinder-surface-inset);
143
143
  color: var(--cinder-text-disabled);
144
144
  }
145
145
 
146
146
  /* surface — neutral surface color, suited for floating above content */
147
- .cinder-fab[data-cinder-color='surface'] {
147
+ .cinder-fab[data-cinder-variant='surface'] {
148
148
  background: var(--cinder-surface);
149
149
  color: var(--cinder-text);
150
150
  }
151
151
 
152
- .cinder-fab[data-cinder-color='surface']:disabled,
153
- .cinder-fab[data-cinder-color='surface'][aria-disabled='true'] {
152
+ .cinder-fab[data-cinder-variant='surface']:disabled,
153
+ .cinder-fab[data-cinder-variant='surface'][aria-disabled='true'] {
154
154
  background: var(--cinder-surface-inset);
155
155
  color: var(--cinder-text-disabled);
156
156
  }
@@ -168,15 +168,15 @@
168
168
  --_cinder-fab-elevation: var(--cinder-shadow-lg);
169
169
  }
170
170
 
171
- .cinder-fab[data-cinder-color='primary']:hover:not(:disabled):not([aria-disabled='true']) {
171
+ .cinder-fab[data-cinder-variant='primary']:hover:not(:disabled):not([aria-disabled='true']) {
172
172
  background: var(--cinder-accent-hover);
173
173
  }
174
174
 
175
- .cinder-fab[data-cinder-color='secondary']:hover:not(:disabled):not([aria-disabled='true']) {
175
+ .cinder-fab[data-cinder-variant='secondary']:hover:not(:disabled):not([aria-disabled='true']) {
176
176
  background: var(--cinder-surface-hover);
177
177
  }
178
178
 
179
- .cinder-fab[data-cinder-color='surface']:hover:not(:disabled):not([aria-disabled='true']) {
179
+ .cinder-fab[data-cinder-variant='surface']:hover:not(:disabled):not([aria-disabled='true']) {
180
180
  background: var(--cinder-surface-hover);
181
181
  }
182
182
  }
@@ -184,15 +184,15 @@
184
184
  /* :active placed after hover media so press feedback fires on tap as well.
185
185
  Uses the gentler on-fill pressed token so the --cinder-accent-contrast label stays
186
186
  AA-legible on the pressed fill (see --cinder-accent-active-on-fill in tokens-base.css). */
187
- .cinder-fab[data-cinder-color='primary']:active:not(:disabled):not([aria-disabled='true']) {
187
+ .cinder-fab[data-cinder-variant='primary']:active:not(:disabled):not([aria-disabled='true']) {
188
188
  background: var(--cinder-accent-active-on-fill);
189
189
  }
190
190
 
191
- .cinder-fab[data-cinder-color='secondary']:active:not(:disabled):not([aria-disabled='true']) {
191
+ .cinder-fab[data-cinder-variant='secondary']:active:not(:disabled):not([aria-disabled='true']) {
192
192
  background: var(--cinder-surface-pressed);
193
193
  }
194
194
 
195
- .cinder-fab[data-cinder-color='surface']:active:not(:disabled):not([aria-disabled='true']) {
195
+ .cinder-fab[data-cinder-variant='surface']:active:not(:disabled):not([aria-disabled='true']) {
196
196
  background: var(--cinder-surface-pressed);
197
197
  }
198
198
 
@@ -7,7 +7,7 @@
7
7
  "id": "basic",
8
8
  "title": "Floating Action Button",
9
9
  "description": "A circular primary-action button. Always provide aria-label for icon-only (filled) usage. Wrap in a fixed/sticky container to position it on the page.",
10
- "code": "<script lang=\"ts\">\n import { FloatingActionButton } from '@lostgradient/cinder/floating-action-button';\n</script>\n\n<div style=\"display: flex; align-items: center; gap: 1.5rem; flex-wrap: wrap;\">\n <!-- Primary filled FAB (default) -->\n <FloatingActionButton aria-label=\"Add item\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n </FloatingActionButton>\n\n <!-- Secondary color -->\n <FloatingActionButton color=\"secondary\" aria-label=\"Edit\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\" />\n </svg>\n </FloatingActionButton>\n\n <!-- Surface color -->\n <FloatingActionButton color=\"surface\" aria-label=\"Share\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"18\" cy=\"5\" r=\"3\" />\n <circle cx=\"6\" cy=\"12\" r=\"3\" />\n <circle cx=\"18\" cy=\"19\" r=\"3\" />\n <line x1=\"8.59\" y1=\"13.51\" x2=\"15.42\" y2=\"17.49\" />\n <line x1=\"15.41\" y1=\"6.51\" x2=\"8.59\" y2=\"10.49\" />\n </svg>\n </FloatingActionButton>\n\n <!-- Extended variant with icon + label -->\n <FloatingActionButton variant=\"extended\" aria-label=\"Compose new message\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n Compose\n </FloatingActionButton>\n\n <!-- Small size -->\n <FloatingActionButton size=\"sm\" aria-label=\"Add small\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n </FloatingActionButton>\n\n <!-- Large size -->\n <FloatingActionButton size=\"lg\" aria-label=\"Add large\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n </FloatingActionButton>\n\n <!-- Link FAB -->\n <FloatingActionButton href=\"/new\" aria-label=\"Create new item\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n </FloatingActionButton>\n\n <!-- Disabled FAB -->\n <FloatingActionButton disabled aria-label=\"Add (unavailable)\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n </FloatingActionButton>\n</div>\n"
10
+ "code": "<script lang=\"ts\">\n import { FloatingActionButton } from '@lostgradient/cinder/floating-action-button';\n</script>\n\n<div style=\"display: flex; align-items: center; gap: 1.5rem; flex-wrap: wrap;\">\n <!-- Primary filled FAB (default) -->\n <FloatingActionButton aria-label=\"Add item\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n </FloatingActionButton>\n\n <!-- Secondary variant -->\n <FloatingActionButton variant=\"secondary\" aria-label=\"Edit\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\" />\n </svg>\n </FloatingActionButton>\n\n <!-- Surface variant -->\n <FloatingActionButton variant=\"surface\" aria-label=\"Share\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"18\" cy=\"5\" r=\"3\" />\n <circle cx=\"6\" cy=\"12\" r=\"3\" />\n <circle cx=\"18\" cy=\"19\" r=\"3\" />\n <line x1=\"8.59\" y1=\"13.51\" x2=\"15.42\" y2=\"17.49\" />\n <line x1=\"15.41\" y1=\"6.51\" x2=\"8.59\" y2=\"10.49\" />\n </svg>\n </FloatingActionButton>\n\n <!-- Extended shape with icon + label -->\n <FloatingActionButton shape=\"extended\" aria-label=\"Compose new message\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n Compose\n </FloatingActionButton>\n\n <!-- Small size -->\n <FloatingActionButton size=\"sm\" aria-label=\"Add small\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n </FloatingActionButton>\n\n <!-- Large size -->\n <FloatingActionButton size=\"lg\" aria-label=\"Add large\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n </FloatingActionButton>\n\n <!-- Link FAB -->\n <FloatingActionButton href=\"/new\" aria-label=\"Create new item\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n </FloatingActionButton>\n\n <!-- Disabled FAB -->\n <FloatingActionButton disabled aria-label=\"Add (unavailable)\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n </FloatingActionButton>\n</div>\n"
11
11
  }
12
12
  ]
13
13
  }
@@ -13,9 +13,9 @@
13
13
  */
14
14
  export type {
15
15
  FloatingActionButtonProps,
16
+ FloatingActionButtonShape,
16
17
  FloatingActionButtonSize,
17
18
  FloatingActionButtonVariant,
18
- FloatingActionButtonColor,
19
19
  } from './floating-action-button.types.ts';
20
20
  </script>
21
21
 
@@ -27,9 +27,9 @@
27
27
  import type { FloatingActionButtonProps } from './floating-action-button.types.ts';
28
28
 
29
29
  const {
30
- variant = 'filled',
30
+ shape = 'filled',
31
31
  size = 'md',
32
- color = 'primary',
32
+ variant = 'primary',
33
33
  disabled = false,
34
34
  children,
35
35
  class: customClassName,
@@ -52,9 +52,9 @@
52
52
  const mergedClassName = $derived(classNames('cinder-fab', customClassName));
53
53
 
54
54
  const dataAttributes = $derived({
55
- 'data-cinder-variant': variant,
55
+ 'data-cinder-shape': shape,
56
56
  'data-cinder-size': size,
57
- 'data-cinder-color': color,
57
+ 'data-cinder-variant': variant,
58
58
  });
59
59
 
60
60
  // Normalize ARIA label props: empty strings suppress accessible name fallback without
@@ -89,9 +89,9 @@
89
89
  const hasAriaLabelledBy = resolvedAriaLabelledBy !== undefined;
90
90
 
91
91
  // Filled FABs are icon-only by design — they require an accessible name.
92
- if (variant === 'filled' && !hasAriaLabel && !hasAriaLabelledBy) {
92
+ if (shape === 'filled' && !hasAriaLabel && !hasAriaLabelledBy) {
93
93
  devWarn(
94
- '[cinder/FloatingActionButton] filled variant requires aria-label or aria-labelledby — the icon alone does not provide an accessible name.',
94
+ '[cinder/FloatingActionButton] filled shape requires aria-label or aria-labelledby — the icon alone does not provide an accessible name.',
95
95
  );
96
96
  }
97
97
 
@@ -2,14 +2,15 @@ import type { Snippet } from 'svelte';
2
2
  import type { HTMLAnchorAttributes, HTMLButtonAttributes } from 'svelte/elements';
3
3
 
4
4
  /**
5
- * Visual variant of the FAB.
5
+ * Visual palette of the FAB.
6
6
  *
7
- * `filled` renders a circle with equal width and height the classic FAB shape.
8
- * `extended` renders a pill with auto-width that accommodates icon + label side by side.
7
+ * - `primary` uses the primary accent color (solid fill, contrast foreground).
8
+ * - `secondary` uses the surface-raised background with standard text color.
9
+ * - `surface` — uses the neutral surface color, suited for floating over content.
9
10
  *
10
- * @default `"filled"`
11
+ * @default `"primary"`
11
12
  */
12
- export type FloatingActionButtonVariant = 'filled' | 'extended';
13
+ export type FloatingActionButtonVariant = 'primary' | 'secondary' | 'surface';
13
14
 
14
15
  /**
15
16
  * Size of the FAB. Controls the diameter (`filled`) or height (`extended`).
@@ -19,30 +20,29 @@ export type FloatingActionButtonVariant = 'filled' | 'extended';
19
20
  export type FloatingActionButtonSize = 'sm' | 'md' | 'lg';
20
21
 
21
22
  /**
22
- * Color palette of the FAB.
23
+ * Shape of the FAB.
23
24
  *
24
- * - `primary` uses the primary accent color (solid fill, contrast foreground).
25
- * - `secondary` uses the surface-raised background with standard text color.
26
- * - `surface` — uses the neutral surface color, suited for floating over content.
25
+ * `filled` renders a circle with equal width and height the classic FAB shape.
26
+ * `extended` renders a pill with auto-width that accommodates icon + label side by side.
27
27
  *
28
- * @default `"primary"`
28
+ * @default `"filled"`
29
29
  */
30
- export type FloatingActionButtonColor = 'primary' | 'secondary' | 'surface';
30
+ export type FloatingActionButtonShape = 'filled' | 'extended';
31
31
 
32
32
  type SharedBase = {
33
- /** Visual variant. `filled` = circle, `extended` = pill with icon + label. */
34
- variant?: FloatingActionButtonVariant;
33
+ /** Shape. `filled` = circle, `extended` = pill with icon + label. */
34
+ shape?: FloatingActionButtonShape;
35
35
  /** Size — controls diameter for filled, height for extended. */
36
36
  size?: FloatingActionButtonSize;
37
- /** Color palette. */
38
- color?: FloatingActionButtonColor;
37
+ /** Color palette (primary, secondary, or surface). */
38
+ variant?: FloatingActionButtonVariant;
39
39
  /** When true, disables the button and prevents interaction. */
40
40
  disabled?: boolean;
41
41
  /** Custom class merged with `.cinder-fab`. */
42
42
  class?: string;
43
43
  /**
44
- * The icon (or icon + label for extended variant). Always provide `aria-label` when
45
- * the FAB renders an icon without visible text — i.e. the `filled` variant.
44
+ * The icon (or icon + label for extended shape). Always provide `aria-label` when
45
+ * the FAB renders an icon without visible text — i.e. the `filled` shape.
46
46
  */
47
47
  children?: Snippet;
48
48
  };
@@ -62,7 +62,7 @@ type FloatingActionButtonLink = SharedBase & Omit<HTMLAnchorAttributes, 'class'>
62
62
  /**
63
63
  * Props for the FloatingActionButton component.
64
64
  *
65
- * Icon-only usage (i.e. `variant="filled"`) requires an accessible name via
65
+ * Icon-only usage (i.e. `shape="filled"`) requires an accessible name via
66
66
  * `aria-label` or `aria-labelledby`. The component emits a dev-mode warning when
67
67
  * neither is present.
68
68
  */
@@ -74,10 +74,10 @@ export type FloatingActionButtonProps = FloatingActionButtonOnly | FloatingActio
74
74
  */
75
75
  export interface FloatingActionButtonSchemaProps {
76
76
  /**
77
- * Visual variant. `filled` = circle, `extended` = pill.
77
+ * Shape. `filled` = circle, `extended` = pill.
78
78
  * @default "filled"
79
79
  */
80
- variant?: FloatingActionButtonVariant;
80
+ shape?: FloatingActionButtonShape;
81
81
  /**
82
82
  * Size of the FAB.
83
83
  * @default "md"
@@ -87,7 +87,7 @@ export interface FloatingActionButtonSchemaProps {
87
87
  * Color palette.
88
88
  * @default "primary"
89
89
  */
90
- color?: FloatingActionButtonColor;
90
+ variant?: FloatingActionButtonVariant;
91
91
  /**
92
92
  * When true, disables the button and prevents interaction.
93
93
  * @default false
@@ -3,8 +3,8 @@ import FloatingActionButton from './floating-action-button.svelte';
3
3
 
4
4
  export default FloatingActionButton;
5
5
  export type {
6
- FloatingActionButtonColor,
7
6
  FloatingActionButtonProps,
7
+ FloatingActionButtonShape,
8
8
  FloatingActionButtonSize,
9
9
  FloatingActionButtonVariant,
10
10
  } from './floating-action-button.types.ts';
@@ -30,19 +30,9 @@
30
30
  cursor: not-allowed;
31
31
  }
32
32
 
33
- /* ----------------------------------------
34
- * Required marker
35
- * ---------------------------------------- */
36
-
37
- .cinder-form-field__required {
38
- display: inline-block;
39
- width: 6px;
40
- height: 6px;
41
- border-radius: 50%;
42
- background-color: var(--cinder-danger);
43
- flex-shrink: 0;
44
- align-self: center;
45
- }
33
+ /* The required marker is the shared `.cinder-_required-marker` partial
34
+ (styles/components/_field-label.css) so the asterisk can never drift
35
+ between FormField, Label, and the inline control labels. */
46
36
 
47
37
  /* ----------------------------------------
48
38
  * Supporting text
@@ -79,7 +79,10 @@
79
79
  >
80
80
  {label}
81
81
  {#if required}
82
- <span class="cinder-form-field__required" aria-hidden="true"></span>
82
+ <!-- Visible asterisk conveys "required" by shape, not color alone (WCAG
83
+ 1.4.1). aria-hidden so the accessible name stays clean — the field's
84
+ own `required`/`aria-required` attribute is the single AT signal. -->
85
+ <span class="cinder-_required-marker" aria-hidden="true">*</span>
83
86
  {/if}
84
87
  </label>
85
88
 
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "../../schemas/examples.schema.json",
3
+ "component": "image",
4
+ "import": "@lostgradient/cinder/image",
5
+ "examples": [
6
+ {
7
+ "id": "basic",
8
+ "title": "Basic image",
9
+ "description": "Responsive image with lazy loading and an explicit aspect ratio.",
10
+ "code": "<script lang=\"ts\">\n import { Image } from '@lostgradient/cinder/image';\n</script>\n\n<Image\n src=\"https://picsum.photos/seed/cinder/600/338\"\n alt=\"A randomly selected placeholder photograph\"\n ratio=\"16/9\"\n width={600}\n height={338}\n/>\n"
11
+ }
12
+ ]
13
+ }
@@ -16,21 +16,22 @@ Single-line text input with support for labels, addons, validation states, and h
16
16
 
17
17
  <!-- generated:props:start -->
18
18
 
19
- | Prop | Type | Required | Default | Description |
20
- | --------------------- | --------------------------------------------------------------------------------------------------- | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------- |
21
- | `description` | `string` | no | — | Helper text rendered below the input and associated via `aria-describedby`. |
22
- | `disabled` | `boolean` | no | — | When true, disables the input, matching the native `disabled` attribute. |
23
- | `error` | `string` | no | — | Error message rendered below the input; also sets `aria-invalid` on the input. |
24
- | `id` | `string` | yes | — | HTML `id` for the underlying input, used to associate the `<label>` and ARIA attributes. Required. |
25
- | `label` | `string` | no | — | Visible label text rendered above the input and linked via `for`/`id`. |
26
- | `leadingInteractive` | `boolean` | no | — | When true, the leading adornment is interactive and included in the accessibility tree. Default `false`. |
27
- | `required` | `boolean` | no | — | Marks the input as required for form validation, matching the native `required` attribute. |
28
- | `trailingInteractive` | `boolean` | no | — | When true, the trailing adornment is interactive and included in the accessibility tree. Default `false`. |
29
- | `type` | `"number"` \| `"date"` \| `"email"` \| `"password"` \| `"search"` \| `"tel"` \| `"text"` \| `"url"` | no | — | Input type controlling the browser's built-in validation and keyboard. Default `"text"`. |
30
- | `class` | `(opaque)` | no | — | A prop whose shape is not captured by the JSON schema; see the component types for the exact signature. |
31
- | `leading` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
32
- | `trailing` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
33
- | `value` | `(opaque)` | yes | — | Bindable current text value of the input. Not expressible in JSON Schema; see the component types for the signature. |
19
+ | Prop | Type | Required | Default | Description |
20
+ | --------------------- | --------------------------------------------------------------------------------------------------- | -------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
21
+ | `description` | `string` | no | — | Helper text rendered below the input and associated via `aria-describedby`. |
22
+ | `disabled` | `boolean` | no | — | When true, disables the input, matching the native `disabled` attribute. |
23
+ | `error` | `string` | no | — | Error message rendered below the input; also sets `aria-invalid` on the input. |
24
+ | `id` | `string` | yes | — | HTML `id` for the underlying input, used to associate the `<label>` and ARIA attributes. Required. |
25
+ | `label` | `string` | no | — | Visible label text rendered above the input and linked via `for`/`id`. |
26
+ | `leadingInteractive` | `boolean` | no | — | When true, the leading adornment is interactive and included in the accessibility tree. Default `false`. |
27
+ | `required` | `boolean` | no | — | Marks the input as required for form validation, matching the native `required` attribute. |
28
+ | `trailingInteractive` | `boolean` | no | — | When true, the trailing adornment is interactive and included in the accessibility tree. Default `false`. |
29
+ | `type` | `"number"` \| `"date"` \| `"email"` \| `"password"` \| `"search"` \| `"tel"` \| `"text"` \| `"url"` | no | — | Input type controlling the browser's built-in validation and keyboard. Default `"text"`. |
30
+ | `class` | `(opaque)` | no | — | A prop whose shape is not captured by the JSON schema; see the component types for the exact signature. |
31
+ | `leading` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
32
+ | `onValueChange` | `(opaque)` | no | — | Intercept a proposed value before the bindable value is written. Return a replacement value to transform it. Not expressible in JSON Schema; see the component types for the signature. |
33
+ | `trailing` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
34
+ | `value` | `(opaque)` | yes | — | Bindable current text value of the input. Not expressible in JSON Schema; see the component types for the signature. |
34
35
 
35
36
  <!-- generated:props:end -->
36
37
 
@@ -13,7 +13,7 @@
13
13
  "id": "sign-in",
14
14
  "title": "Sign-in composition",
15
15
  "description": "Composition of FormField + Input + Button with a top-of-form Alert auth-error region. Demonstrates the required autocomplete values and the assertive announcement pattern via role=\"alert\".",
16
- "code": "<script lang=\"ts\">\n import { Alert } from '@lostgradient/cinder/alert';\n import { Button } from '@lostgradient/cinder/button';\n import { FormField } from '@lostgradient/cinder/form-field';\n import { Input } from '@lostgradient/cinder/input';\n let email = $state('');\n let password = $state('');\n let authError = $state<string | undefined>(undefined);\n let submitting = $state(false);\n\n function handleSignIn() {\n if (submitting) return;\n // Clear any prior error so a re-submit re-announces by re-mounting the Alert\n // rather than mutating its text (assistive tech announces on mount of role=\"alert\").\n authError = undefined;\n submitting = true;\n\n // Static example: simulate an auth failure. A real implementation would\n // POST { email, password } and redirect on success.\n setTimeout(() => {\n authError = 'Email or password is incorrect.';\n submitting = false;\n }, 600);\n }\n</script>\n\n<form\n novalidate\n aria-labelledby=\"sign-in-heading\"\n style=\"display: flex; flex-direction: column; gap: 1rem;\"\n onsubmit={(event) => {\n event.preventDefault();\n handleSignIn();\n }}\n>\n <h2 id=\"sign-in-heading\">Sign in</h2>\n\n <!--\n Top-of-form auth-error region.\n Alert's role=\"alert\" implies aria-live=\"assertive\" and aria-atomic=\"true\".\n We intentionally do NOT add an explicit aria-live attribute (see alert.test.ts:\n \"has role=alert on root element and does not set an explicit aria-live\").\n Mounting the Alert in response to submit triggers the assertive announcement.\n -->\n {#if authError}\n <Alert variant=\"error\">\n {authError}\n </Alert>\n {/if}\n\n <FormField id=\"sign-in-email\" label=\"Email\" required>\n <!-- autocomplete=\"email\" — the identifier is an email address.\n Use \"username\" instead when the field collects an opaque handle. -->\n <Input\n id=\"sign-in-email\"\n type=\"email\"\n bind:value={email}\n autocomplete=\"email\"\n required\n placeholder=\"you@example.com\"\n />\n </FormField>\n\n <FormField id=\"sign-in-password\" label=\"Password\" required>\n <!-- autocomplete=\"current-password\" — required for password managers to\n recognize this as a sign-in form and offer saved credentials. -->\n <Input\n id=\"sign-in-password\"\n type=\"password\"\n bind:value={password}\n autocomplete=\"current-password\"\n required\n />\n </FormField>\n\n <Button type=\"submit\" variant=\"primary\" loading={submitting}>\n {submitting ? 'Signing in…' : 'Sign in'}\n </Button>\n</form>\n"
16
+ "code": "<script lang=\"ts\">\n import { Alert } from '@lostgradient/cinder/alert';\n import { Button } from '@lostgradient/cinder/button';\n import { FormField } from '@lostgradient/cinder/form-field';\n import { Input } from '@lostgradient/cinder/input';\n let email = $state('');\n let password = $state('');\n let authError = $state<string | undefined>(undefined);\n let submitting = $state(false);\n\n function handleSignIn() {\n if (submitting) return;\n // Clear any prior error so a re-submit re-announces by re-mounting the Alert\n // rather than mutating its text (assistive tech announces on mount of role=\"alert\").\n authError = undefined;\n submitting = true;\n\n // Static example: simulate an auth failure. A real implementation would\n // POST { email, password } and redirect on success.\n setTimeout(() => {\n authError = 'Email or password is incorrect.';\n submitting = false;\n }, 600);\n }\n</script>\n\n<form\n novalidate\n aria-labelledby=\"sign-in-heading\"\n style=\"display: flex; flex-direction: column; gap: 1rem;\"\n onsubmit={(event) => {\n event.preventDefault();\n handleSignIn();\n }}\n>\n <h2 id=\"sign-in-heading\">Sign in</h2>\n\n <!--\n Top-of-form auth-error region.\n Alert's role=\"alert\" implies aria-live=\"assertive\" and aria-atomic=\"true\".\n We intentionally do NOT add an explicit aria-live attribute (see alert.test.ts:\n \"has role=alert on root element and does not set an explicit aria-live\").\n Mounting the Alert in response to submit triggers the assertive announcement.\n -->\n {#if authError}\n <Alert variant=\"danger\">\n {authError}\n </Alert>\n {/if}\n\n <FormField id=\"sign-in-email\" label=\"Email\" required>\n <!-- autocomplete=\"email\" — the identifier is an email address.\n Use \"username\" instead when the field collects an opaque handle. -->\n <Input\n id=\"sign-in-email\"\n type=\"email\"\n bind:value={email}\n autocomplete=\"email\"\n required\n placeholder=\"you@example.com\"\n />\n </FormField>\n\n <FormField id=\"sign-in-password\" label=\"Password\" required>\n <!-- autocomplete=\"current-password\" — required for password managers to\n recognize this as a sign-in form and offer saved credentials. -->\n <Input\n id=\"sign-in-password\"\n type=\"password\"\n bind:value={password}\n autocomplete=\"current-password\"\n required\n />\n </FormField>\n\n <Button type=\"submit\" variant=\"primary\" loading={submitting}>\n {submitting ? 'Signing in…' : 'Sign in'}\n </Button>\n</form>\n"
17
17
  },
18
18
  {
19
19
  "id": "types",