@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
@@ -18,10 +18,10 @@ Bounded scrolling container that constrains overflowing content within a max hei
18
18
 
19
19
  | Prop | Type | Required | Default | Description |
20
20
  | ----------- | ------------------------------------------------------------------------------------------------------------------ | -------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
21
- | `ariaLabel` | `string` | no | — | Accessible name for the scroll region. When provided on neutral containers, the container also gets `role="region"` so assistive technology treats it as a landmark. Semantic tags keep their native roles. Provide this when the scroll area represents a meaningful section (a chat transcript, a code panel) — omit it for purely decorative scrolling chrome. This is the single source of truth for the accessible name; pass it through this prop rather than the raw `aria-label` HTML attribute so the landmark role and label stay coupled. |
22
21
  | `as` | `"article"` \| `"aside"` \| `"div"` \| `"li"` \| `"main"` \| `"nav"` \| `"ol"` \| `"pre"` \| `"section"` \| `"ul"` | no | — | Element tag to render. Defaults to `'div'`. |
23
22
  | `class` | `string` | no | — | Additional classes merged onto the scroll viewport. |
24
23
  | `direction` | `"vertical"` \| `"horizontal"` \| `"both"` | no | — | Axis to allow scrolling on. Defaults to `'vertical'`. |
24
+ | `label` | `string` | no | — | Accessible name for the scroll region. When provided on neutral containers, the container also gets `role="region"` so assistive technology treats it as a landmark. Semantic tags keep their native roles. Provide this when the scroll area represents a meaningful section (a chat transcript, a code panel) — omit it for purely decorative scrolling chrome. This is the single source of truth for the accessible name; pass it through this prop rather than the raw `aria-label` HTML attribute so the landmark role and label stay coupled. |
25
25
  | `maxHeight` | `string` | no | — | Maximum block size of the scroll viewport (any valid CSS length). |
26
26
  | `maxWidth` | `string` | no | — | Maximum inline size of the scroll viewport (any valid CSS length). |
27
27
  | `tabindex` | `number` | no | — | Override the default focus behavior. The component sets `tabindex="0"` by default so keyboard users can reach the viewport for arrow-key scrolling. Pass `tabindex={-1}` when the viewport should be programmatically focusable without entering the tab order. |
@@ -13,19 +13,19 @@
13
13
  "id": "horizontal-code-snippet",
14
14
  "title": "Horizontal code snippet",
15
15
  "description": "Horizontal scrolling for a long single-line code sample, rendered as a <pre> via the `as` prop so the region role is preserved alongside the semantic tag.",
16
- "code": "<script lang=\"ts\">\n import { ScrollArea } from '@lostgradient/cinder/scroll-area';\n\n const command =\n '$ bun run --filter @cinder/components build && bun run --filter @cinder/components test --coverage --reporter=verbose --bail';\n</script>\n\n<ScrollArea as=\"pre\" direction=\"horizontal\" maxWidth=\"32rem\" ariaLabel=\"Example command\"\n ><code>{command}</code></ScrollArea\n>\n"
16
+ "code": "<script lang=\"ts\">\n import { ScrollArea } from '@lostgradient/cinder/scroll-area';\n\n const command =\n '$ bun run --filter @cinder/components build && bun run --filter @cinder/components test --coverage --reporter=verbose --bail';\n</script>\n\n<ScrollArea as=\"pre\" direction=\"horizontal\" maxWidth=\"32rem\" label=\"Example command\"\n ><code>{command}</code></ScrollArea\n>\n"
17
17
  },
18
18
  {
19
19
  "id": "themed-scrollbar",
20
20
  "title": "Themed scrollbar tokens",
21
21
  "description": "Overrides --cinder-scrollbar-thumb and --cinder-scrollbar-thumb-hover on a wrapping surface so the native scrollbar picks up brand colors without replacing it.",
22
- "code": "<script lang=\"ts\">\n import { ScrollArea } from '@lostgradient/cinder/scroll-area';\n</script>\n\n<div\n style=\"--cinder-scrollbar-thumb: oklch(62% 0.18 264 / 0.7); --cinder-scrollbar-thumb-hover: oklch(62% 0.18 264 / 0.95);\"\n>\n <ScrollArea ariaLabel=\"Release notes\" maxHeight=\"14rem\">\n <h3>0.42.0</h3>\n <p>Adds scroll-area, themed via design tokens.</p>\n <h3>0.41.0</h3>\n <p>Combobox gains rich option rows with description and avatar.</p>\n <h3>0.40.0</h3>\n <p>Form-field contract lands on input, textarea, and select.</p>\n <h3>0.39.0</h3>\n <p>Changesets adopted; provenance-enabled publishing wired up.</p>\n <h3>0.38.0</h3>\n <p>Package exports unified under cinder/* with Shiki adapter.</p>\n </ScrollArea>\n</div>\n"
22
+ "code": "<script lang=\"ts\">\n import { ScrollArea } from '@lostgradient/cinder/scroll-area';\n</script>\n\n<div\n style=\"--cinder-scrollbar-thumb: oklch(62% 0.18 264 / 0.7); --cinder-scrollbar-thumb-hover: oklch(62% 0.18 264 / 0.95);\"\n>\n <ScrollArea label=\"Release notes\" maxHeight=\"14rem\">\n <h3>0.42.0</h3>\n <p>Adds scroll-area, themed via design tokens.</p>\n <h3>0.41.0</h3>\n <p>Combobox gains rich option rows with description and avatar.</p>\n <h3>0.40.0</h3>\n <p>Form-field contract lands on input, textarea, and select.</p>\n <h3>0.39.0</h3>\n <p>Changesets adopted; provenance-enabled publishing wired up.</p>\n <h3>0.38.0</h3>\n <p>Package exports unified under cinder/* with Shiki adapter.</p>\n </ScrollArea>\n</div>\n"
23
23
  },
24
24
  {
25
25
  "id": "vertical-chat-list",
26
26
  "title": "Vertical chat transcript",
27
27
  "description": "A vertical scroll region with a meaningful accessible name, so assistive technology treats it as a landmark via the derived role=\"region\".",
28
- "code": "<script lang=\"ts\">\n import { ScrollArea } from '@lostgradient/cinder/scroll-area';\n</script>\n\n<ScrollArea ariaLabel=\"Chat transcript\" maxHeight=\"16rem\">\n <p>Avery: morning! ready to pair on the migration?</p>\n <p>Jordan: yep — pulling the branch now.</p>\n <p>Avery: heads up, the seed script changed.</p>\n <p>Jordan: noticed. running it locally first.</p>\n <p>Avery: thanks. ping me when you hit the auth step.</p>\n <p>Jordan: will do. tests are green on my end.</p>\n <p>Avery: nice. I'll start drafting the changelog.</p>\n <p>Jordan: cool — should I cherry-pick the hotfix in?</p>\n <p>Avery: yes please, then squash before review.</p>\n <p>Jordan: pushed. take a look when you can.</p>\n</ScrollArea>\n"
28
+ "code": "<script lang=\"ts\">\n import { ScrollArea } from '@lostgradient/cinder/scroll-area';\n</script>\n\n<ScrollArea label=\"Chat transcript\" maxHeight=\"16rem\">\n <p>Avery: morning! ready to pair on the migration?</p>\n <p>Jordan: yep — pulling the branch now.</p>\n <p>Avery: heads up, the seed script changed.</p>\n <p>Jordan: noticed. running it locally first.</p>\n <p>Avery: thanks. ping me when you hit the auth step.</p>\n <p>Jordan: will do. tests are green on my end.</p>\n <p>Avery: nice. I'll start drafting the changelog.</p>\n <p>Jordan: cool — should I cherry-pick the hotfix in?</p>\n <p>Avery: yes please, then squash before review.</p>\n <p>Jordan: pushed. take a look when you can.</p>\n</ScrollArea>\n"
29
29
  }
30
30
  ]
31
31
  }
@@ -31,7 +31,7 @@
31
31
  direction = 'vertical',
32
32
  maxHeight,
33
33
  maxWidth,
34
- ariaLabel,
34
+ label,
35
35
  tabindex = 0,
36
36
  as = 'div',
37
37
  class: className,
@@ -40,13 +40,13 @@
40
40
  }: ScrollAreaProps = $props();
41
41
 
42
42
  const normalizedAriaLabel = $derived(
43
- typeof ariaLabel === 'string' && ariaLabel.trim().length > 0 ? ariaLabel.trim() : undefined,
43
+ typeof label === 'string' && label.trim().length > 0 ? label.trim() : undefined,
44
44
  );
45
45
  // `aria-labelledby` reaches the element through `...rest`. Treat it the same as
46
- // `ariaLabel` for landmark purposes: a neutral element (`div`/`pre`) with an
47
- // accessible name — whether from `ariaLabel` or `aria-labelledby` — becomes a
46
+ // the `label` prop for landmark purposes: a neutral element (`div`/`pre`) with an
47
+ // accessible name — whether from `label` or `aria-labelledby` — becomes a
48
48
  // region landmark. Without this, `<ScrollArea as="div" aria-labelledby="…">`
49
- // would be a named, focusable, but landmark-less container while the `ariaLabel`
49
+ // would be a named, focusable, but landmark-less container while the `label`
50
50
  // form would not — an asymmetry invisible to the consumer.
51
51
  const ariaLabelledby = $derived((rest as { 'aria-labelledby'?: string })['aria-labelledby']);
52
52
  const hasAccessibleName = $derived(
@@ -40,7 +40,7 @@ export type ScrollAreaProps = Omit<
40
40
  * name; pass it through this prop rather than the raw `aria-label` HTML
41
41
  * attribute so the landmark role and label stay coupled.
42
42
  */
43
- ariaLabel?: string;
43
+ label?: string;
44
44
  /**
45
45
  * Override the default focus behavior. The component sets `tabindex="0"`
46
46
  * by default so keyboard users can reach the viewport for arrow-key
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * @cinder
4
4
  * @category data-display
5
- * @status beta
5
+ * @status stable
6
6
  * @purpose Displays a masked secret (API key, token, webhook secret) with copy action and optional reveal toggle.
7
7
  * @tag clipboard
8
8
  * @tag security
@@ -16,7 +16,7 @@
16
16
  </script>
17
17
 
18
18
  <script lang="ts">
19
- import { onDestroy } from 'svelte';
19
+ import { onDestroy, untrack } from 'svelte';
20
20
 
21
21
  import type { SecretValueFieldProps } from './secret-value-field.types.ts';
22
22
  import { copyToClipboard } from '../../utilities/clipboard.ts';
@@ -39,10 +39,8 @@
39
39
 
40
40
  const fieldId = $props.id();
41
41
 
42
- // initiallyRevealed overrides the hidden default so newly-created secrets are readable on first render.
43
- // The seed const makes the initial-only capture explicit and silences state_referenced_locally.
44
- const initiallyRevealedSeed = initiallyRevealed;
45
- let revealed = $state(initiallyRevealedSeed);
42
+ let revealed = $state(untrack(() => initiallyRevealed));
43
+ let previousValue = $state(untrack(() => value));
46
44
 
47
45
  let copied = $state(false);
48
46
  let resetTimer: ReturnType<typeof setTimeout> | undefined;
@@ -67,6 +65,12 @@
67
65
  revealed = !revealed;
68
66
  }
69
67
 
68
+ $effect(() => {
69
+ if (value === previousValue) return;
70
+ previousValue = value;
71
+ revealed = initiallyRevealed;
72
+ });
73
+
70
74
  onDestroy(() => {
71
75
  if (resetTimer) clearTimeout(resetTimer);
72
76
  });
@@ -227,7 +227,7 @@
227
227
  /* ── Focus ──────────────────────────────────────────────────────────────── */
228
228
 
229
229
  .cinder-segmented-control-option:focus-visible {
230
- outline: 2px solid transparent;
230
+ outline: var(--cinder-ring-width) solid transparent;
231
231
  box-shadow:
232
232
  0 0 0 var(--cinder-ring-offset) var(--cinder-ring-offset-color),
233
233
  0 0 0 calc(var(--cinder-ring-offset) + var(--cinder-ring-width)) var(--cinder-ring-color);
@@ -278,6 +278,19 @@
278
278
  z-index: 1;
279
279
  }
280
280
 
281
+ /* Forced-colors: selected/pressed segments also need outline fallback. Selection
282
+ * semantics apply (the segment represents a chosen option) → Highlight. */
283
+ @media (forced-colors: active) {
284
+ .cinder-segmented-control:not([data-cinder-variant='tablist'])
285
+ .cinder-segmented-control-option[data-cinder-selected]:focus-visible,
286
+ .cinder-segmented-control:not([data-cinder-variant='tablist'])
287
+ .cinder-segmented-control-option[data-cinder-pressed]:focus-visible {
288
+ outline: var(--cinder-ring-width) solid Highlight;
289
+ outline-offset: 1px;
290
+ box-shadow: none;
291
+ }
292
+ }
293
+
281
294
  /* ── Tablist variant (single mode only) ─────────────────────────────────────
282
295
  * See docs/decisions/segmented-control-tablist-variant.md. The tablist variant
283
296
  * carries tab semantics for externally owned panels, so it must read as a
@@ -350,6 +363,14 @@
350
363
  outline: var(--cinder-ring-width) solid Highlight;
351
364
  outline-offset: 1px;
352
365
  }
366
+
367
+ /* Forced-colors: selected+focused tab in tablist → selection semantics → Highlight. */
368
+ .cinder-segmented-control[data-cinder-selection-mode='single'][data-cinder-variant='tablist']
369
+ .cinder-segmented-control-option[data-cinder-selected]:focus-visible {
370
+ outline: var(--cinder-ring-width) solid Highlight;
371
+ outline-offset: 1px;
372
+ box-shadow: none;
373
+ }
353
374
  }
354
375
 
355
376
  /* Selected hover must not restore the filled pill — keep the selected tab's
@@ -12,8 +12,8 @@
12
12
  {
13
13
  "id": "multiple",
14
14
  "title": "Multi-select segmented control",
15
- "description": "Multiple options can be toggled independently. Bind a SvelteSet to track selection.",
16
- "code": "<script lang=\"ts\">\n import { SvelteSet } from 'svelte/reactivity';\n import { Segment } from '@lostgradient/cinder/segment';\n import { SegmentedControl } from '@lostgradient/cinder/segmented-control';\n\n let formats = new SvelteSet<string>();\n\n const selected = $derived([...formats].join(', ') || 'none');\n</script>\n\n<div style=\"display: grid; gap: 0.75rem; justify-items: start;\">\n <SegmentedControl\n id=\"playground-format\"\n selectionMode=\"multiple\"\n bind:value={formats}\n label=\"Text formatting\"\n >\n <Segment value=\"bold\">Bold</Segment>\n <Segment value=\"italic\">Italic</Segment>\n <Segment value=\"underline\">Underline</Segment>\n <Segment value=\"strikethrough\">Strike</Segment>\n </SegmentedControl>\n <p style=\"margin: 0; color: var(--cinder-text-muted);\">Active formats: {selected}</p>\n</div>\n"
15
+ "description": "Multiple options can be toggled independently. Pass a SvelteSet to track selection.",
16
+ "code": "<script lang=\"ts\">\n import { SvelteSet } from 'svelte/reactivity';\n import { Segment } from '@lostgradient/cinder/segment';\n import { SegmentedControl } from '@lostgradient/cinder/segmented-control';\n\n let formats = new SvelteSet<string>();\n\n const selected = $derived([...formats].join(', ') || 'none');\n</script>\n\n<div style=\"display: grid; gap: 0.75rem; justify-items: start;\">\n <SegmentedControl\n id=\"playground-format\"\n selectionMode=\"multiple\"\n value={formats}\n label=\"Text formatting\"\n >\n <Segment value=\"bold\">Bold</Segment>\n <Segment value=\"italic\">Italic</Segment>\n <Segment value=\"underline\">Underline</Segment>\n <Segment value=\"strikethrough\">Strike</Segment>\n </SegmentedControl>\n <p style=\"margin: 0; color: var(--cinder-text-muted);\">Active formats: {selected}</p>\n</div>\n"
17
17
  },
18
18
  {
19
19
  "id": "sizing",
@@ -14,14 +14,21 @@
14
14
  * Label
15
15
  * ---------------------------------------- */
16
16
 
17
- .cinder-select-field > label {
18
- display: inline-block;
17
+ .cinder-select-field__label {
18
+ display: inline-flex;
19
+ align-items: center;
20
+ gap: var(--cinder-space-1);
19
21
  font-size: var(--cinder-text-xs);
20
22
  font-weight: var(--cinder-font-medium);
21
23
  line-height: 1;
22
24
  color: var(--cinder-text);
23
25
  }
24
26
 
27
+ .cinder-select-field__label[data-disabled] {
28
+ color: var(--cinder-text-disabled);
29
+ cursor: not-allowed;
30
+ }
31
+
25
32
  /* ----------------------------------------
26
33
  * Select control
27
34
  * ---------------------------------------- */
@@ -73,7 +73,12 @@
73
73
 
74
74
  <div class={classNames('cinder-select-field', className)}>
75
75
  {#if label}
76
- <label for={id}>{label}</label>
76
+ <label for={id} class="cinder-select-field__label" data-disabled={field.disabled || undefined}>
77
+ {label}
78
+ {#if field.required}
79
+ <span class="cinder-_required-marker" aria-hidden="true">*</span>
80
+ {/if}
81
+ </label>
77
82
  {/if}
78
83
  <span class="cinder-select-field__control">
79
84
  {#if options.length === 0}
@@ -25,7 +25,7 @@
25
25
  "id": "null-position",
26
26
  "title": "Null position clears the popover",
27
27
  "description": "Setting position to null hides the popover even while open is true — the consumer can clear an active selection without changing the open flag.",
28
- "code": "<script lang=\"ts\">\n import type { SelectionPopoverPosition } from '@lostgradient/cinder/selection-popover';\n import { Button } from '@lostgradient/cinder/button';\n import { SelectionPopover } from '@lostgradient/cinder/selection-popover';\n\n const popoverId = 'null-position-selection-popover';\n\n /**\n * A fixed anchor used to demonstrate the null-clear behavior without requiring\n * a real text selection in this example. The coordinates are viewport-relative,\n * consistent with how a real selection anchor would be computed.\n */\n const demonstrationPosition: SelectionPopoverPosition = { x: 220, y: 220 };\n\n let isOpen = $state(false);\n let position = $state<SelectionPopoverPosition | null>(null);\n\n function showPopover(): void {\n position = demonstrationPosition;\n isOpen = true;\n }\n\n function clearPosition(): void {\n position = null;\n // open stays true — the component should hide because position is null.\n }\n\n function restorePosition(): void {\n position = demonstrationPosition;\n }\n</script>\n\n<div style=\"max-width: 36rem;\">\n <p style=\"margin: 0 0 0.75rem; line-height: 1.5;\">\n Demonstrates that setting <code>position</code> to <code>null</code> hides the popover even when\n <code>open</code>\n remains <code>true</code>. Click <em>Show popover</em> to open it, then use\n <em>Clear position</em>\n to set <code>position=null</code> while leaving\n <code>open=true</code> — the popover disappears because the component has no anchor point to\n position against. Use <em>Restore position</em> to bring it back without changing\n <code>open</code>.\n </p>\n\n <div style=\"display: flex; gap: 0.5rem; flex-wrap: wrap; margin-bottom: 0.75rem;\">\n <Button label=\"Show popover\" onclick={showPopover} />\n <Button label=\"Clear position (set null)\" onclick={clearPosition} disabled={!isOpen} />\n <Button label=\"Restore position\" onclick={restorePosition} disabled={!isOpen} />\n </div>\n\n <p style=\"margin: 0; font-size: var(--cinder-text-sm); color: var(--cinder-text-muted);\">\n Status: open={isOpen}, position={position ? `{x:${position.x},y:${position.y}}` : 'null'}\n </p>\n</div>\n\n<SelectionPopover id={popoverId} open={isOpen} {position} />\n"
28
+ "code": "<script lang=\"ts\">\n import type { SelectionPopoverPosition } from '@lostgradient/cinder/selection-popover';\n import { Button } from '@lostgradient/cinder/button';\n import { SelectionPopover } from '@lostgradient/cinder/selection-popover';\n\n const popoverId = 'null-position-selection-popover';\n\n let isOpen = $state(false);\n let position = $state<SelectionPopoverPosition | null>(null);\n let anchorElement = $state<HTMLElement | null>(null);\n\n function showPopover(): void {\n if (!anchorElement) return;\n\n const rect = anchorElement.getBoundingClientRect();\n position = {\n x: rect.left + rect.width / 2,\n y: rect.top,\n height: rect.height,\n };\n isOpen = true;\n }\n\n function clearPosition(): void {\n position = null;\n // open stays true — the component should hide because position is null.\n }\n\n function restorePosition(): void {\n showPopover();\n }\n</script>\n\n<div style=\"max-width: 36rem;\">\n <p style=\"margin: 0 0 0.75rem; line-height: 1.5;\">\n Demonstrates that setting <code>position</code> to <code>null</code> hides the popover even when\n <code>open</code>\n remains <code>true</code>. Click <em>Show popover</em> to open it, then use\n <em>Clear position</em>\n to set <code>position=null</code> while leaving\n <code>open=true</code> — the popover disappears because the component has no anchor point to\n position against. Use <em>Restore position</em> to bring it back without changing\n <code>open</code>.\n </p>\n\n <div style=\"display: flex; gap: 0.5rem; flex-wrap: wrap; margin-bottom: 0.75rem;\">\n <span bind:this={anchorElement} style=\"display: inline-flex;\">\n <Button label=\"Show popover\" onclick={showPopover} />\n </span>\n <Button label=\"Clear position (set null)\" onclick={clearPosition} disabled={!isOpen} />\n <Button label=\"Restore position\" onclick={restorePosition} disabled={!isOpen} />\n </div>\n\n <p style=\"margin: 0; font-size: var(--cinder-text-sm); color: var(--cinder-text-muted);\">\n Status: open={isOpen}, position={position ? `{x:${position.x},y:${position.y}}` : 'null'}\n </p>\n</div>\n\n<SelectionPopover id={popoverId} open={isOpen} {position} />\n"
29
29
  },
30
30
  {
31
31
  "id": "toggled",
@@ -24,7 +24,7 @@
24
24
  }
25
25
 
26
26
  .cinder-share-card__title {
27
- font-weight: 600;
27
+ font-weight: var(--cinder-font-semibold);
28
28
  font-size: var(--cinder-text-sm);
29
29
  margin: 0;
30
30
  color: var(--cinder-text);
@@ -76,10 +76,10 @@
76
76
  color: var(--cinder-text);
77
77
  cursor: pointer;
78
78
  font-size: var(--cinder-text-sm);
79
- font-weight: 500;
79
+ font-weight: var(--cinder-font-medium);
80
80
  transition:
81
- background-color 0.15s ease,
82
- border-color 0.15s ease;
81
+ background-color var(--cinder-duration-fast) var(--cinder-ease-standard),
82
+ border-color var(--cinder-duration-fast) var(--cinder-ease-standard);
83
83
  white-space: nowrap;
84
84
  }
85
85
 
@@ -97,6 +97,17 @@
97
97
  0 0 0 calc(var(--cinder-ring-offset) + var(--cinder-ring-width)) var(--cinder-ring-color);
98
98
  }
99
99
 
100
+ @media (forced-colors: active) {
101
+ .cinder-share-card__action:focus-visible {
102
+ outline: var(--cinder-ring-width) solid ButtonText;
103
+ /* 3px separates the outline from ButtonBorder (which renders in forced-colors
104
+ on all bordered controls and shares the ButtonText color family in HCM);
105
+ at 2px the ring and border can visually merge. */
106
+ outline-offset: 3px;
107
+ box-shadow: none;
108
+ }
109
+ }
110
+
100
111
  .cinder-share-card__action[data-cinder-copied] {
101
112
  color: var(--cinder-color-success-fg);
102
113
  border-color: var(--cinder-color-success-border);
@@ -16,8 +16,6 @@
16
16
  </script>
17
17
 
18
18
  <script lang="ts">
19
- import { onDestroy } from 'svelte';
20
-
21
19
  import { classNames } from '../../utilities/class-names.ts';
22
20
  import { copyToClipboard } from '../../utilities/clipboard.ts';
23
21
  import VisuallyHiddenLiveRegion from '../_visually-hidden-live-region.svelte';
@@ -161,9 +159,9 @@
161
159
  // the value actually looks like a URL, otherwise "Text to share".
162
160
  const valueRegionLabel = $derived(looksLikeUrl(value) ? 'Link to share' : 'Text to share');
163
161
 
164
- onDestroy(() => {
162
+ $effect(() => {
165
163
  // clearTimer() clears BOTH resetTimer and announceTimer.
166
- clearTimer();
164
+ return () => clearTimer();
167
165
  });
168
166
 
169
167
  // The action list: explicit `actions` verbatim, else the copy-link default.
@@ -19,13 +19,11 @@
19
19
  import type { SheetProps } from './sheet.types.ts';
20
20
  import { onDestroy, tick } from 'svelte';
21
21
 
22
- import { captureFocus, lockBodyScroll, pushEscapeHandler } from '../../_internal/overlay.ts';
23
- import { waitForTransitionCompletion } from '../../_internal/transition-completion.ts';
24
22
  import { overflowFade } from '../../utilities/attachments.ts';
25
23
  import { createFocusTrap } from '../focus-trap/index.ts';
26
24
  import { classNames } from '../../utilities/class-names.ts';
27
- import { restoreFocusTo } from '../../utilities/focus.ts';
28
25
  import { useReducedMotion } from '../../utilities/use-reduced-motion.svelte.ts';
26
+ import { createSlidingDialogState } from '../_internal/create-sliding-dialog-state.svelte.ts';
29
27
 
30
28
  let {
31
29
  open = $bindable(false),
@@ -45,66 +43,33 @@
45
43
  let dialogElement: HTMLDialogElement | undefined = $state();
46
44
  let bodyElement: HTMLDivElement | undefined = $state();
47
45
  let panelElement: HTMLDivElement | undefined = $state();
48
- let hydrated = $state(false);
49
- let renderPanel = $state(open);
50
- let isClosing = $state(false);
51
- let closeGeneration = $state(0);
52
46
  let pendingOpenFocus = $state(false);
53
47
 
54
- let capturedFocus: HTMLElement | null = null;
55
- let releaseScrollLock: (() => void) | null = null;
56
- let releaseEscape: (() => void) | null = null;
57
- let cancelPendingClose: (() => void) | null = null;
58
-
59
48
  const reducedMotion = useReducedMotion();
60
49
  const bodyOverflowFade = overflowFade();
61
-
62
- function acquireScrollLock(): void {
63
- if (releaseScrollLock) return;
64
- releaseScrollLock = lockBodyScroll();
65
- }
66
-
67
- function acquireEscapeMarker(): void {
68
- if (releaseEscape) return;
69
- // No-op handler: presence marker so stacked non-dialog overlays
70
- // route ESC to themselves. Native <dialog> owns the actual ESC close.
71
- releaseEscape = pushEscapeHandler(() => {});
72
- }
50
+ const dialogState = createSlidingDialogState({
51
+ getOpen: () => open,
52
+ setOpen: (nextOpen) => {
53
+ open = nextOpen;
54
+ },
55
+ getDialogElement: () => dialogElement,
56
+ getPanelElement: () => panelElement,
57
+ getReducedMotion: () => reducedMotion.current,
58
+ getTriggerRef: () => triggerRef,
59
+ onOpen: () => {
60
+ pendingOpenFocus = true;
61
+ },
62
+ onClosed: () => {
63
+ pendingOpenFocus = false;
64
+ },
65
+ });
73
66
 
74
67
  $effect(() => {
75
- hydrated = true;
68
+ dialogState.markHydrated();
76
69
  });
77
70
 
78
71
  $effect(() => {
79
- if (!dialogElement) return;
80
- if (open) {
81
- if (isClosing) {
82
- closeGeneration += 1;
83
- cancelPendingClose?.();
84
- cancelPendingClose = null;
85
- isClosing = false;
86
- }
87
-
88
- if (!renderPanel) {
89
- renderPanel = true;
90
- }
91
-
92
- if (!dialogElement.open) {
93
- capturedFocus = captureFocus();
94
- pendingOpenFocus = true;
95
- dialogElement.showModal();
96
- acquireScrollLock();
97
- acquireEscapeMarker();
98
- }
99
- return;
100
- }
101
-
102
- if (dialogElement.open) {
103
- beginClosing();
104
- } else {
105
- renderPanel = false;
106
- pendingOpenFocus = false;
107
- }
72
+ dialogState.syncOpenState();
108
73
  });
109
74
 
110
75
  $effect(() => {
@@ -123,109 +88,29 @@
123
88
  });
124
89
  });
125
90
 
126
- function beginClosing(): void {
127
- if (!dialogElement?.open || isClosing) return;
128
- if (!panelElement) {
129
- finishClosing(closeGeneration);
130
- return;
131
- }
132
-
133
- isClosing = true;
134
- const generation = ++closeGeneration;
135
- cancelPendingClose?.();
136
- cancelPendingClose = waitForTransitionCompletion({
137
- element: panelElement,
138
- reducedMotion: reducedMotion.current,
139
- onComplete: () => finishClosing(generation),
140
- });
141
- }
142
-
143
- function finishClosing(generation: number): void {
144
- if (generation !== closeGeneration) return;
145
- cancelPendingClose?.();
146
- cancelPendingClose = null;
147
- isClosing = false;
148
- renderPanel = false;
149
- pendingOpenFocus = false;
150
- if (dialogElement?.open) {
151
- dialogElement.close();
152
- }
153
- }
154
-
155
- function handleClose() {
156
- if (releaseScrollLock) {
157
- releaseScrollLock();
158
- releaseScrollLock = null;
159
- }
160
- if (releaseEscape) {
161
- releaseEscape();
162
- releaseEscape = null;
163
- }
164
- open = false;
165
- const candidates: Array<HTMLElement | null> = [triggerRef, capturedFocus];
166
- capturedFocus = null;
167
- for (const candidate of candidates) {
168
- if (restoreFocusTo(candidate)) break;
169
- }
170
- }
171
-
172
- function requestClose(): void {
173
- if (!open && (isClosing || !dialogElement?.open)) return;
174
- open = false;
175
- beginClosing();
176
- }
177
-
178
- function handleBackdropClick(event: MouseEvent) {
179
- if (event.target === dialogElement) {
180
- requestClose();
181
- }
182
- }
183
-
184
- function handleNativeCancel(event: Event) {
185
- event.preventDefault();
186
- requestClose();
187
- }
188
-
189
91
  onDestroy(() => {
190
- cancelPendingClose?.();
191
- cancelPendingClose = null;
192
- const wasOpen = releaseScrollLock !== null || releaseEscape !== null;
193
- if (releaseScrollLock) {
194
- releaseScrollLock();
195
- releaseScrollLock = null;
196
- }
197
- if (releaseEscape) {
198
- releaseEscape();
199
- releaseEscape = null;
200
- }
201
- if (wasOpen) {
202
- const candidates: Array<HTMLElement | null> = [triggerRef, capturedFocus];
203
- capturedFocus = null;
204
- for (const candidate of candidates) {
205
- if (restoreFocusTo(candidate)) break;
206
- }
207
- }
92
+ dialogState.destroy();
208
93
  });
209
94
  </script>
210
95
 
211
- {#if hydrated}
96
+ {#if dialogState.hydrated}
212
97
  <dialog
213
98
  {...rest}
214
99
  bind:this={dialogElement}
215
100
  class={classNames('cinder-sheet', className)}
216
101
  aria-modal="true"
217
102
  aria-labelledby={ariaLabelledBy ?? titleId}
218
- data-cinder-closing={isClosing ? '' : undefined}
219
- onclose={handleClose}
220
- oncancel={handleNativeCancel}
221
- onclick={handleBackdropClick}
103
+ data-cinder-closing={dialogState.isClosing ? '' : undefined}
104
+ onclose={() => dialogState.handleClose()}
105
+ oncancel={(event) => dialogState.handleNativeCancel(event)}
106
+ onclick={(event) => dialogState.handleBackdropClick(event)}
222
107
  >
223
108
  {#snippet closeButton()}
224
109
  <button
225
110
  type="button"
226
111
  class="cinder-sheet__close"
227
112
  aria-label="Close sheet"
228
- onclick={requestClose}
113
+ onclick={() => dialogState.requestClose()}
229
114
  >
230
115
  <svg
231
116
  class="cinder-sheet__close-icon"
@@ -241,14 +126,14 @@
241
126
  </button>
242
127
  {/snippet}
243
128
 
244
- {#if renderPanel}
129
+ {#if dialogState.renderPanel}
245
130
  <div
246
131
  bind:this={panelElement}
247
132
  class="cinder-sheet__panel"
248
- data-cinder-closing={isClosing ? '' : undefined}
249
- inert={isClosing}
133
+ data-cinder-closing={dialogState.isClosing ? '' : undefined}
134
+ inert={dialogState.isClosing}
250
135
  {@attach createFocusTrap({
251
- active: () => open && !isClosing,
136
+ active: () => open && !dialogState.isClosing,
252
137
  restoreFocus: false,
253
138
  manageInitialFocus: false,
254
139
  })}
@@ -47,7 +47,7 @@
47
47
  {/if}
48
48
 
49
49
  <span class="cinder-shortcut-hint__keys" aria-hidden="true">
50
- {#each keys as key, index (key + index)}
50
+ {#each keys as key, index (index)}
51
51
  <Kbd label={key} size="sm" />
52
52
  {#if index < keys.length - 1}
53
53
  <span class="cinder-shortcut-hint__separator">+</span>
@@ -13,7 +13,7 @@
13
13
  "id": "docs-sidebar",
14
14
  "title": "Docs sidebar",
15
15
  "description": "Documentation sidebar with grouped navigation sections. The active item receives aria-current=\"page\".",
16
- "code": "<script lang=\"ts\" module>\n export const title = 'Docs sidebar';\n export const description =\n 'Documentation sidebar with grouped navigation sections. The active item receives aria-current=\"page\".' +\n ' Composed inside Sidebar so the column collapses to a drawer below the ~767px viewport breakpoint —' +\n ' resize your browser window to see the mobile drawer behavior.';\n</script>\n\n<script lang=\"ts\">\n import { Button } from '@lostgradient/cinder/button';\n import { SideNavigation } from '@lostgradient/cinder/side-navigation';\n import { Sidebar } from '@lostgradient/cinder/sidebar';\n\n let collapsed = $state(false);\n</script>\n\n<div style=\"display: flex; flex-direction: column; gap: 1rem;\">\n <div>\n <Button\n label={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n onclick={() => (collapsed = !collapsed)}\n />\n </div>\n\n <div\n style=\"display: flex; min-height: 28rem; border: 1px solid var(--cinder-border); border-radius: 0.5rem; overflow: hidden;\"\n >\n <Sidebar bind:collapsed ariaLabel=\"Documentation\">\n {#snippet brand()}\n <strong style=\"font-size: 0.875rem;\">Cinder Docs</strong>\n {/snippet}\n\n {#snippet navigation()}\n <SideNavigation ariaLabel=\"Documentation sections\">\n <SideNavigation.Group label=\"Getting Started\">\n <SideNavigation.Item href=\"#introduction\" active>Introduction</SideNavigation.Item>\n <SideNavigation.Item href=\"#installation\">Installation</SideNavigation.Item>\n <SideNavigation.Item href=\"#quick-start\">Quick start</SideNavigation.Item>\n </SideNavigation.Group>\n <SideNavigation.Group label=\"Components\">\n <SideNavigation.Item href=\"#button\">Button</SideNavigation.Item>\n <SideNavigation.Item href=\"#form-section\">FormSection</SideNavigation.Item>\n <SideNavigation.Item href=\"#side-navigation\">SideNavigation</SideNavigation.Item>\n </SideNavigation.Group>\n <SideNavigation.Group label=\"API Reference\">\n <SideNavigation.Item href=\"#props\">Props</SideNavigation.Item>\n <SideNavigation.Item href=\"#types\">Types</SideNavigation.Item>\n <SideNavigation.Item href=\"#css-variables\">CSS variables</SideNavigation.Item>\n </SideNavigation.Group>\n </SideNavigation>\n {/snippet}\n </Sidebar>\n\n <main style=\"flex: 1; padding: 1.5rem;\">\n <p style=\"margin: 0; color: var(--cinder-text-muted); font-size: var(--cinder-text-sm);\">\n Main content area. Resize the browser viewport below ~767px to see the navigation collapse\n into a mobile drawer.\n </p>\n </main>\n </div>\n</div>\n"
16
+ "code": "<script lang=\"ts\" module>\n export const title = 'Docs sidebar';\n export const description =\n 'Documentation sidebar with grouped navigation sections. The active item receives aria-current=\"page\".' +\n ' Composed inside Sidebar so the column collapses to a drawer below the ~767px viewport breakpoint —' +\n ' resize your browser window to see the mobile drawer behavior.';\n</script>\n\n<script lang=\"ts\">\n import { Button } from '@lostgradient/cinder/button';\n import { SideNavigation } from '@lostgradient/cinder/side-navigation';\n import { Sidebar } from '@lostgradient/cinder/sidebar';\n\n let collapsed = $state(false);\n</script>\n\n<div style=\"display: flex; flex-direction: column; gap: 1rem;\">\n <div>\n <Button\n label={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n onclick={() => (collapsed = !collapsed)}\n />\n </div>\n\n <div\n style=\"display: flex; min-height: 28rem; border: 1px solid var(--cinder-border); border-radius: 0.5rem; overflow: hidden;\"\n >\n <Sidebar bind:collapsed label=\"Documentation\">\n {#snippet brand()}\n <strong style=\"font-size: 0.875rem;\">Cinder Docs</strong>\n {/snippet}\n\n {#snippet navigation()}\n <SideNavigation ariaLabel=\"Documentation sections\">\n <SideNavigation.Group label=\"Getting Started\">\n <SideNavigation.Item href=\"#introduction\" active>Introduction</SideNavigation.Item>\n <SideNavigation.Item href=\"#installation\">Installation</SideNavigation.Item>\n <SideNavigation.Item href=\"#quick-start\">Quick start</SideNavigation.Item>\n </SideNavigation.Group>\n <SideNavigation.Group label=\"Components\">\n <SideNavigation.Item href=\"#button\">Button</SideNavigation.Item>\n <SideNavigation.Item href=\"#form-section\">FormSection</SideNavigation.Item>\n <SideNavigation.Item href=\"#side-navigation\">SideNavigation</SideNavigation.Item>\n </SideNavigation.Group>\n <SideNavigation.Group label=\"API Reference\">\n <SideNavigation.Item href=\"#props\">Props</SideNavigation.Item>\n <SideNavigation.Item href=\"#types\">Types</SideNavigation.Item>\n <SideNavigation.Item href=\"#css-variables\">CSS variables</SideNavigation.Item>\n </SideNavigation.Group>\n </SideNavigation>\n {/snippet}\n </Sidebar>\n\n <main style=\"flex: 1; padding: 1.5rem;\">\n <p style=\"margin: 0; color: var(--cinder-text-muted); font-size: var(--cinder-text-sm);\">\n Main content area. Resize the browser viewport below ~767px to see the navigation collapse\n into a mobile drawer.\n </p>\n </main>\n </div>\n</div>\n"
17
17
  }
18
18
  ]
19
19
  }
@@ -9,7 +9,11 @@ Persistent side panel that houses navigation, filters, or supplementary page con
9
9
  import Sidebar from '@lostgradient/cinder/sidebar';
10
10
  </script>
11
11
 
12
- <Sidebar />
12
+ <Sidebar label="App sidebar">
13
+ {#snippet navigation()}
14
+ <nav><!-- navigation items --></nav>
15
+ {/snippet}
16
+ </Sidebar>
13
17
  ```
14
18
 
15
19
  ## Props
@@ -18,9 +22,9 @@ Persistent side panel that houses navigation, filters, or supplementary page con
18
22
 
19
23
  | Prop | Type | Required | Default | Description |
20
24
  | ------------ | ---------- | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
21
- | `ariaLabel` | `string` | no | — | Accessible name for the outer landmark and the mobile drawer. Required — defaults to `'Sidebar'` for convenience but must be unique per page. The inner `<nav>` landmark derives its own accessible name from this value by appending `' navigation'` so screen readers can distinguish the outer complementary region from the inner navigation region. |
22
25
  | `class` | `string` | no | — | Additional CSS class merged with `.cinder-sidebar`. |
23
26
  | `collapsed` | `boolean` | no | — | Whether the sidebar is collapsed. Bindable via `bind:collapsed`. Default `false`. On desktop (>= md breakpoint) `collapsed=true` switches the sidebar to icon-only mode. Below the md breakpoint the sidebar renders inside a `<Drawer>` and `collapsed=true` means the drawer is closed. |
27
+ | `label` | `string` | no | — | Accessible name for the outer landmark and the mobile drawer. Required — defaults to `'Sidebar'` for convenience but must be unique per page. The inner `<nav>` landmark derives its own accessible name from this value by appending `' navigation'` so screen readers can distinguish the outer complementary region from the inner navigation region. |
24
28
  | `brand` | `(opaque)` | no | — | Optional branding region rendered above the navigation. Not expressible in JSON Schema; see the component types for the signature. |
25
29
  | `footer` | `(opaque)` | no | — | Optional footer region (e.g. user account, sign-out). Not expressible in JSON Schema; see the component types for the signature. |
26
30
  | `navigation` | `(opaque)` | no | — | Navigation region. Typically a `<SideNavigation>` subtree. Optional — when omitted, no `<nav>` landmark is rendered (so the sidebar can serve as app chrome without a navigation list, and an empty `<nav>` isn't announced to screen readers). Not expressible in JSON Schema; see the component types for the signature. |
@@ -7,7 +7,7 @@
7
7
  "id": "basic",
8
8
  "title": "Basic sidebar",
9
9
  "description": "Layout-level sidebar with brand, navigation, and footer regions. Collapse toggles icon-only mode on desktop and closes the drawer on mobile.",
10
- "code": "<script lang=\"ts\">\n import { Button } from '@lostgradient/cinder/button';\n import { NavigationItem } from '@lostgradient/cinder/navigation-item';\n import { SideNavigation } from '@lostgradient/cinder/side-navigation';\n import { SideNavigationGroup } from '@lostgradient/cinder/side-navigation-group';\n import { SideNavigationItem } from '@lostgradient/cinder/side-navigation-item';\n import { Sidebar } from '@lostgradient/cinder/sidebar';\n let collapsed = $state(false);\n</script>\n\n<div style=\"display: flex; flex-direction: column; gap: 1rem;\">\n <div>\n <Button\n label={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n onclick={() => (collapsed = !collapsed)}\n />\n </div>\n\n <div\n style=\"display: flex; min-height: 24rem; border: 1px solid #e5e7eb; border-radius: 0.5rem; overflow: hidden;\"\n >\n <Sidebar bind:collapsed ariaLabel=\"Workspace\">\n {#snippet brand()}\n <strong style=\"font-size: 0.875rem;\">Cinder</strong>\n {/snippet}\n\n {#snippet navigation()}\n <SideNavigation ariaLabel=\"Workspace sections\">\n {#snippet children()}\n <SideNavigationItem href=\"#dashboard\">\n {#snippet children()}Dashboard{/snippet}\n </SideNavigationItem>\n <SideNavigationItem href=\"#projects\" active>\n {#snippet children()}Projects{/snippet}\n </SideNavigationItem>\n <SideNavigationGroup label=\"Settings\">\n {#snippet children()}\n <SideNavigationItem href=\"#general\">\n {#snippet children()}General{/snippet}\n </SideNavigationItem>\n <SideNavigationItem href=\"#billing\">\n {#snippet children()}Billing{/snippet}\n </SideNavigationItem>\n {/snippet}\n </SideNavigationGroup>\n {/snippet}\n </SideNavigation>\n {/snippet}\n\n {#snippet footer()}\n <NavigationItem variant=\"vertical\" href=\"#account\">\n {#snippet children()}Account{/snippet}\n </NavigationItem>\n {/snippet}\n </Sidebar>\n\n <main style=\"flex: 1; padding: 1rem;\">\n <p>Main content area.</p>\n <p>Resize the viewport below ~767px to see the mobile drawer behavior.</p>\n </main>\n </div>\n</div>\n"
10
+ "code": "<script lang=\"ts\">\n import { Button } from '@lostgradient/cinder/button';\n import { NavigationItem } from '@lostgradient/cinder/navigation-item';\n import { SideNavigation } from '@lostgradient/cinder/side-navigation';\n import { SideNavigationGroup } from '@lostgradient/cinder/side-navigation-group';\n import { SideNavigationItem } from '@lostgradient/cinder/side-navigation-item';\n import { Sidebar } from '@lostgradient/cinder/sidebar';\n let collapsed = $state(false);\n</script>\n\n<div style=\"display: flex; flex-direction: column; gap: 1rem;\">\n <div>\n <Button\n label={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n onclick={() => (collapsed = !collapsed)}\n />\n </div>\n\n <div\n style=\"display: flex; min-height: 24rem; border: 1px solid #e5e7eb; border-radius: 0.5rem; overflow: hidden;\"\n >\n <Sidebar bind:collapsed label=\"Workspace\">\n {#snippet brand()}\n <strong style=\"font-size: 0.875rem;\">Cinder</strong>\n {/snippet}\n\n {#snippet navigation()}\n <SideNavigation ariaLabel=\"Workspace sections\">\n {#snippet children()}\n <SideNavigationItem href=\"#dashboard\">\n {#snippet children()}Dashboard{/snippet}\n </SideNavigationItem>\n <SideNavigationItem href=\"#projects\" active>\n {#snippet children()}Projects{/snippet}\n </SideNavigationItem>\n <SideNavigationGroup label=\"Settings\">\n {#snippet children()}\n <SideNavigationItem href=\"#general\">\n {#snippet children()}General{/snippet}\n </SideNavigationItem>\n <SideNavigationItem href=\"#billing\">\n {#snippet children()}Billing{/snippet}\n </SideNavigationItem>\n {/snippet}\n </SideNavigationGroup>\n {/snippet}\n </SideNavigation>\n {/snippet}\n\n {#snippet footer()}\n <NavigationItem variant=\"vertical\" href=\"#account\">\n {#snippet children()}Account{/snippet}\n </NavigationItem>\n {/snippet}\n </Sidebar>\n\n <main style=\"flex: 1; padding: 1rem;\">\n <p>Main content area.</p>\n <p>Resize the viewport below ~767px to see the mobile drawer behavior.</p>\n </main>\n </div>\n</div>\n"
11
11
  }
12
12
  ]
13
13
  }