@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
@@ -29,6 +29,8 @@
29
29
  <script lang="ts">
30
30
  import { tick } from 'svelte';
31
31
 
32
+ import { getLocaleContext } from '../../_internal/locale-context.ts';
33
+ import { observeTextDirection, resolveTextDirection } from '../../_internal/text-direction.ts';
32
34
  import { classNames } from '../../utilities/class-names.ts';
33
35
  import type { DropdownContext } from '../dropdown/dropdown.types.ts';
34
36
  import DropdownItem from '../dropdown-item/dropdown-item.svelte';
@@ -47,6 +49,7 @@
47
49
 
48
50
  type RestSafeProps = MenuBarProps & {
49
51
  role?: string;
52
+ dir?: 'ltr' | 'rtl' | 'auto';
50
53
  'aria-label'?: string;
51
54
  'aria-labelledby'?: string;
52
55
  'aria-orientation'?: string;
@@ -59,6 +62,7 @@
59
62
  labelledBy,
60
63
  class: customClassName,
61
64
  role: _role,
65
+ dir: providedDirection,
62
66
  'aria-label': _ariaLabel,
63
67
  'aria-labelledby': _ariaLabelledBy,
64
68
  'aria-orientation': _ariaOrientation,
@@ -74,8 +78,37 @@
74
78
  let openMenuIndex = $state<number | null>(null);
75
79
  let openSubmenuKey = $state<string | null>(null);
76
80
  let initialFocus = $state<'first' | 'last' | 'none' | undefined>(undefined);
81
+ let directionRevision = $state(0);
77
82
  let suppressSubmenuFocusOpen = false;
83
+ const localeContext = getLocaleContext();
78
84
  const menuElements = new Map<string, HTMLElement>();
85
+ const directionElement = $derived(
86
+ providedDirection === 'auto' ? rootElement : (rootElement?.parentElement ?? rootElement),
87
+ );
88
+ const resolvedDirection = $derived.by(() => {
89
+ directionRevision;
90
+ return providedDirection === 'rtl' || providedDirection === 'ltr'
91
+ ? providedDirection
92
+ : resolveTextDirection(directionElement, localeContext?.direction);
93
+ });
94
+ const rootDirection = $derived(providedDirection === 'auto' ? 'auto' : resolvedDirection);
95
+ const renderedRootDirection = $derived.by(() => {
96
+ if (
97
+ providedDirection === 'auto' ||
98
+ providedDirection === 'rtl' ||
99
+ providedDirection === 'ltr'
100
+ ) {
101
+ return rootDirection;
102
+ }
103
+ return localeContext?.direction ? resolvedDirection : null;
104
+ });
105
+
106
+ $effect(() => {
107
+ if (providedDirection === 'rtl' || providedDirection === 'ltr') return;
108
+ return observeTextDirection(directionElement, () => {
109
+ directionRevision += 1;
110
+ });
111
+ });
79
112
 
80
113
  const enabledIndexes = $derived(
81
114
  menus.map((menu, index) => ({ menu, index })).filter(({ menu }) => !menu.disabled),
@@ -153,6 +186,11 @@
153
186
  return indexes[(currentPosition + direction + indexes.length) % indexes.length] ?? -1;
154
187
  }
155
188
 
189
+ function horizontalArrowDirection(key: 'ArrowLeft' | 'ArrowRight'): -1 | 1 {
190
+ if (key === 'ArrowRight') return resolvedDirection === 'rtl' ? -1 : 1;
191
+ return resolvedDirection === 'rtl' ? 1 : -1;
192
+ }
193
+
156
194
  function firstEnabledMenuIndex(): number {
157
195
  return enabledIndexes[0]?.index ?? -1;
158
196
  }
@@ -209,7 +247,9 @@
209
247
  function makeContext(options: {
210
248
  menuId: string;
211
249
  anchorElement: () => HTMLElement | null;
212
- fallbackPlacement?: DropdownContext['fallbackPlacement'];
250
+ fallbackPlacement?:
251
+ | DropdownContext['fallbackPlacement']
252
+ | (() => DropdownContext['fallbackPlacement']);
213
253
  isOpen: () => boolean;
214
254
  close: () => void;
215
255
  focusTrigger: () => void;
@@ -228,7 +268,9 @@
228
268
  return options.anchorElement();
229
269
  },
230
270
  get fallbackPlacement() {
231
- return options.fallbackPlacement ?? 'bottom-start';
271
+ return typeof options.fallbackPlacement === 'function'
272
+ ? options.fallbackPlacement()
273
+ : (options.fallbackPlacement ?? 'bottom-start');
232
274
  },
233
275
  get widthMode() {
234
276
  return 'menu' as const;
@@ -241,6 +283,20 @@
241
283
  };
242
284
  }
243
285
 
286
+ function submenuDirection(submenuTriggerId: string): 'ltr' | 'rtl' | undefined {
287
+ return resolveTextDirection(findElementById(submenuTriggerId), resolvedDirection);
288
+ }
289
+
290
+ function submenuFallbackPlacement(
291
+ submenuTriggerId: string,
292
+ ): DropdownContext['fallbackPlacement'] {
293
+ return submenuDirection(submenuTriggerId) === 'rtl' ? 'left-start' : 'right-start';
294
+ }
295
+
296
+ function submenuOpenArrow(submenuTriggerId: string): 'ArrowLeft' | 'ArrowRight' {
297
+ return submenuDirection(submenuTriggerId) === 'rtl' ? 'ArrowLeft' : 'ArrowRight';
298
+ }
299
+
244
300
  function makeMenuRegister(menuId: string): (element: HTMLElement | null) => void {
245
301
  return (element) => {
246
302
  if (element) {
@@ -258,7 +314,7 @@
258
314
  function handleTriggerKeydown(event: KeyboardEvent, index: number): void {
259
315
  if (event.key === 'ArrowRight' || event.key === 'ArrowLeft') {
260
316
  event.preventDefault();
261
- const nextIndex = nextEnabledMenuIndex(index, event.key === 'ArrowRight' ? 1 : -1);
317
+ const nextIndex = nextEnabledMenuIndex(index, horizontalArrowDirection(event.key));
262
318
  if (nextIndex === -1) return;
263
319
  activeMenuIndex = nextIndex;
264
320
  focusTopLevelTrigger(nextIndex);
@@ -321,17 +377,27 @@
321
377
 
322
378
  if (openMenuIndex !== null && (event.key === 'ArrowRight' || event.key === 'ArrowLeft')) {
323
379
  const target = event.target instanceof HTMLElement ? event.target : null;
324
- if (target?.closest('.cinder-menu-bar__submenu-menu')) {
325
- if (event.key === 'ArrowLeft') {
326
- event.preventDefault();
327
- const triggerId = target
380
+ const submenuMenu = target?.closest<HTMLElement>('.cinder-menu-bar__submenu-menu');
381
+ if (submenuMenu) {
382
+ const triggerId =
383
+ submenuMenu.dataset['cinderMenuBarSubmenuTriggerId'] ??
384
+ submenuMenu
328
385
  .closest<HTMLElement>('.cinder-menu-bar__submenu')
329
386
  ?.querySelector<HTMLElement>('[data-cinder-menu-bar-submenu-trigger]')?.id;
387
+ const closeArrow =
388
+ resolveTextDirection(submenuMenu, resolvedDirection) === 'rtl'
389
+ ? 'ArrowRight'
390
+ : 'ArrowLeft';
391
+ if (event.key === closeArrow) {
392
+ event.preventDefault();
330
393
  openSubmenuKey = null;
331
- if (triggerId) void tick().then(() => focusElement(triggerId));
394
+ if (triggerId) focusSubmenuTriggerAfterClose(triggerId);
332
395
  } else {
333
396
  event.preventDefault();
334
- const nextIndex = nextEnabledMenuIndex(openMenuIndex, 1);
397
+ const nextIndex = nextEnabledMenuIndex(
398
+ openMenuIndex,
399
+ horizontalArrowDirection(event.key),
400
+ );
335
401
  if (nextIndex !== -1) openMenu(nextIndex, 'first');
336
402
  }
337
403
  return;
@@ -339,7 +405,7 @@
339
405
 
340
406
  if (target?.closest('[role="menu"]')) {
341
407
  event.preventDefault();
342
- const nextIndex = nextEnabledMenuIndex(openMenuIndex, event.key === 'ArrowRight' ? 1 : -1);
408
+ const nextIndex = nextEnabledMenuIndex(openMenuIndex, horizontalArrowDirection(event.key));
343
409
  if (nextIndex !== -1) openMenu(nextIndex, 'first');
344
410
  }
345
411
  }
@@ -376,6 +442,7 @@
376
442
 
377
443
  <div
378
444
  {...rest}
445
+ {...renderedRootDirection ? { dir: renderedRootDirection } : {}}
379
446
  bind:this={rootElement}
380
447
  id={rootId}
381
448
  class={classNames('cinder-menu-bar', customClassName)}
@@ -485,7 +552,7 @@
485
552
  onkeydown={(event) => {
486
553
  if (entry.disabled) return;
487
554
  if (
488
- event.key === 'ArrowRight' ||
555
+ event.key === submenuOpenArrow(submenuTrigger) ||
489
556
  event.key === 'Enter' ||
490
557
  event.key === ' '
491
558
  ) {
@@ -503,7 +570,7 @@
503
570
  context={makeContext({
504
571
  menuId: submenuKey,
505
572
  anchorElement: () => findElementById(submenuTrigger),
506
- fallbackPlacement: 'right-start',
573
+ fallbackPlacement: () => submenuFallbackPlacement(submenuTrigger),
507
574
  isOpen: () => openSubmenuKey === submenuKey,
508
575
  close: () => closeMenuAndFocusTrigger(menuIndex),
509
576
  focusTrigger: () => focusSubmenuTriggerAfterClose(submenuTrigger),
@@ -517,6 +584,8 @@
517
584
  >
518
585
  <DropdownMenu
519
586
  class="cinder-menu-bar__submenu-menu"
587
+ dir={submenuDirection(submenuTrigger)}
588
+ data-cinder-menu-bar-submenu-trigger-id={submenuTrigger}
520
589
  aria-labelledby={submenuTrigger}
521
590
  >
522
591
  {#each entry.items as submenuEntry, submenuEntryIndex (ancestryKey('submenu', submenuKey, submenuEntryIndex, submenuEntry.id))}
@@ -47,8 +47,8 @@ the app shell:
47
47
  | Prop | Type | Required | Default | Description |
48
48
  | ---------------- | ------------------------------------- | -------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
49
49
  | `class` | `string` | no | — | Custom class merged onto the root `<nav>` element. |
50
+ | `label` | `string` | no | — | Accessible name for the <nav> landmark. Wins over any aria-label passed via rest. Default 'Main navigation'. |
50
51
  | `mobileMenuOpen` | `boolean` | no | — | Two-way bindable open state of the mobile menu. |
51
- | `navAriaLabel` | `string` | no | — | Accessible name for the <nav> landmark. Wins over any aria-label passed via rest. Default 'Main navigation'. |
52
52
  | `placement` | `"top"` \| `"bottom"` | no | `"top"` | Visual placement mode. `bottom` renders a mobile tab-bar composition, but still does not fix or stick itself to the viewport. |
53
53
  | `showLabels` | `"always"` \| `"active"` \| `"never"` | no | `"always"` | Label visibility for mobile bottom-tab compositions. Hidden labels remain in the accessibility tree when wrapped in `[data-cinder-navigation-label]`. |
54
54
  | `actions` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
@@ -13,7 +13,7 @@
13
13
  "id": "bottom-tabs",
14
14
  "title": "Bottom mobile tabs",
15
15
  "description": "NavigationBar can render a bottom tab-bar composition while links keep aria-current semantics.",
16
- "code": "<script lang=\"ts\">\n import { NavigationBar } from '@lostgradient/cinder/navigation-bar';\n import { NavigationItem } from '@lostgradient/cinder/navigation-item';\n\n let active = $state('home');\n</script>\n\n<div style=\"max-width: 28rem; border: 1px solid var(--cinder-border-muted);\">\n <main style=\"min-height: 10rem; padding: var(--cinder-space-4);\">\n <strong>{active}</strong>\n </main>\n <NavigationBar placement=\"bottom\" showLabels=\"active\" navAriaLabel=\"Mobile primary navigation\">\n {#snippet items({ variant })}\n <NavigationItem {variant} onclick={() => (active = 'home')} active={active === 'home'}>\n <span aria-hidden=\"true\">H</span>\n <span data-cinder-navigation-label>Home</span>\n </NavigationItem>\n <NavigationItem {variant} onclick={() => (active = 'search')} active={active === 'search'}>\n <span aria-hidden=\"true\">S</span>\n <span data-cinder-navigation-label>Search</span>\n </NavigationItem>\n <NavigationItem\n {variant}\n onclick={() => (active = 'settings')}\n active={active === 'settings'}\n >\n <span aria-hidden=\"true\">G</span>\n <span data-cinder-navigation-label>Settings</span>\n </NavigationItem>\n {/snippet}\n </NavigationBar>\n</div>\n"
16
+ "code": "<script lang=\"ts\">\n import { NavigationBar } from '@lostgradient/cinder/navigation-bar';\n import { NavigationItem } from '@lostgradient/cinder/navigation-item';\n\n let active = $state('home');\n</script>\n\n<div style=\"max-width: 28rem; border: 1px solid var(--cinder-border-muted);\">\n <main style=\"min-height: 10rem; padding: var(--cinder-space-4);\">\n <strong>{active}</strong>\n </main>\n <NavigationBar placement=\"bottom\" showLabels=\"active\" label=\"Mobile primary navigation\">\n {#snippet items({ variant })}\n <NavigationItem {variant} onclick={() => (active = 'home')} active={active === 'home'}>\n <span aria-hidden=\"true\">H</span>\n <span data-cinder-navigation-label>Home</span>\n </NavigationItem>\n <NavigationItem {variant} onclick={() => (active = 'search')} active={active === 'search'}>\n <span aria-hidden=\"true\">S</span>\n <span data-cinder-navigation-label>Search</span>\n </NavigationItem>\n <NavigationItem\n {variant}\n onclick={() => (active = 'settings')}\n active={active === 'settings'}\n >\n <span aria-hidden=\"true\">G</span>\n <span data-cinder-navigation-label>Settings</span>\n </NavigationItem>\n {/snippet}\n </NavigationBar>\n</div>\n"
17
17
  }
18
18
  ]
19
19
  }
@@ -37,7 +37,7 @@
37
37
  actions,
38
38
  menuToggle,
39
39
  mobileMenuOpen = $bindable(false),
40
- navAriaLabel = 'Main navigation',
40
+ label = 'Main navigation',
41
41
  // Strip these from rest so they cannot collide with internal attributes.
42
42
  'aria-label': _ariaLabel,
43
43
  'data-collapsible': _dataCollapsible,
@@ -134,7 +134,7 @@
134
134
 
135
135
  <nav
136
136
  {...rest}
137
- aria-label={navAriaLabel}
137
+ aria-label={label}
138
138
  class={classNames('cinder-navigation-bar', className)}
139
139
  data-collapsible={isCollapsible ? 'true' : 'false'}
140
140
  data-cinder-placement={placement}
@@ -41,5 +41,5 @@ export type NavigationBarProps = Omit<HTMLAttributes<HTMLElement>, 'class'> & {
41
41
  /** Two-way bindable open state of the mobile menu. */
42
42
  mobileMenuOpen?: boolean;
43
43
  /** Accessible name for the <nav> landmark. Wins over any aria-label passed via rest. Default 'Main navigation'. */
44
- navAriaLabel?: string;
44
+ label?: string;
45
45
  };
@@ -16,24 +16,24 @@ Numeric text input with increment and decrement stepper controls.
16
16
 
17
17
  <!-- generated:props:start -->
18
18
 
19
- | Prop | Type | Required | Default | Description |
20
- | -------------- | ------------------ | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------- |
21
- | `defaultValue` | `number` \| `null` | no | — | Initial value used when the component is uncontrolled or when the form is reset. |
22
- | `description` | `string` | no | — | Helper text rendered below the input and associated via `aria-describedby`. |
23
- | `disabled` | `boolean` | no | — | When true, disables the input and stepper buttons, matching the native `disabled` attribute. |
24
- | `error` | `string` | no | — | Error message rendered below the input; also sets `aria-invalid` on the input. |
25
- | `id` | `string` | yes | — | HTML `id` for the underlying input, used to associate the `<label>` and ARIA attributes. Required. |
26
- | `label` | `string` | no | — | Visible label text rendered above the input and linked via `for`/`id`. |
27
- | `locale` | `string` | no | — | BCP 47 locale tag used for number formatting and parsing. Defaults to `navigator.language`. |
28
- | `max` | `number` | no | — | Maximum permitted value; the stepper increment button disables when this bound is reached. |
29
- | `min` | `number` | no | — | Minimum permitted value; the stepper decrement button disables when this bound is reached. |
30
- | `name` | `string` | no | — | Name used to identify this field's value in form data. |
31
- | `required` | `boolean` | no | — | Marks the input as required for form validation, matching the native `required` attribute. |
32
- | `step` | `number` | no | — | Amount added or subtracted per stepper click or arrow-key press. Default `1`. |
33
- | `value` | `number` \| `null` | no | — | Bindable current numeric value, or `null` when the field is empty. |
34
- | `class` | `(opaque)` | no | — | A prop whose shape is not captured by the JSON schema; see the component types for the exact signature. |
35
- | `format` | `(opaque)` | no | — | A prop whose shape is not captured by the JSON schema; see the component types for the exact signature. |
36
- | `onchange` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
19
+ | Prop | Type | Required | Default | Description |
20
+ | -------------- | ------------------ | -------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
21
+ | `defaultValue` | `number` \| `null` | no | — | Initial value used when the component is uncontrolled or when the form is reset. |
22
+ | `description` | `string` | no | — | Helper text rendered below the input and associated via `aria-describedby`. |
23
+ | `disabled` | `boolean` | no | — | When true, disables the input and stepper buttons, matching the native `disabled` attribute. |
24
+ | `error` | `string` | no | — | Error message rendered below the input; also sets `aria-invalid` on the input. |
25
+ | `id` | `string` | yes | — | HTML `id` for the underlying input, used to associate the `<label>` and ARIA attributes. Required. |
26
+ | `label` | `string` | no | — | Visible label text rendered above the input and linked via `for`/`id`. |
27
+ | `locale` | `string` | no | — | BCP 47 locale tag used for number formatting and parsing. Defaults to the nearest LocaleProvider locale, then `navigator.language` after mount and `en-US` during server rendering. |
28
+ | `max` | `number` | no | — | Maximum permitted value; the stepper increment button disables when this bound is reached. |
29
+ | `min` | `number` | no | — | Minimum permitted value; the stepper decrement button disables when this bound is reached. |
30
+ | `name` | `string` | no | — | Name used to identify this field's value in form data. |
31
+ | `required` | `boolean` | no | — | Marks the input as required for form validation, matching the native `required` attribute. |
32
+ | `step` | `number` | no | — | Amount added or subtracted per stepper click or arrow-key press. Default `1`. |
33
+ | `value` | `number` \| `null` | no | — | Bindable current numeric value, or `null` when the field is empty. |
34
+ | `class` | `(opaque)` | no | — | A prop whose shape is not captured by the JSON schema; see the component types for the exact signature. |
35
+ | `format` | `(opaque)` | no | — | Locale-aware formatting options passed to `Intl.NumberFormat`. Supports all `Intl.NumberFormatOptions` properties such as `style` (`'decimal'`, `'currency'`, `'percent'`, `'unit'`), `currency`, `minimumFractionDigits`, `maximumFractionDigits`, and `notation`. Defaults to locale-standard decimal formatting when omitted. Not expressible in JSON Schema; see the component types for the signature. |
36
+ | `onchange` | `(opaque)` | no | — | A function or snippet prop. Its shape is not captured by the JSON schema; see the component types for the exact signature. |
37
37
 
38
38
  <!-- generated:props:end -->
39
39
 
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "../../schemas/examples.schema.json",
3
+ "component": "number-input",
4
+ "import": "@lostgradient/cinder/number-input",
5
+ "examples": [
6
+ {
7
+ "id": "basic",
8
+ "title": "Basic number input",
9
+ "description": "Numeric field with label, bounds, and a committed-value display.",
10
+ "code": "<script lang=\"ts\">\n import { NumberInput } from '@lostgradient/cinder/number-input';\n\n let quantity = $state<number | null>(1);\n\n function handleChange(value: number | null) {\n quantity = value;\n }\n</script>\n\n<NumberInput\n id=\"quantity\"\n label=\"Quantity\"\n value={quantity}\n min={1}\n max={99}\n onchange={handleChange}\n/>\n<p style=\"margin-top: 0.5rem; color: var(--cinder-text-muted);\">\n Value: {quantity ?? 'empty'}\n</p>\n"
11
+ }
12
+ ]
13
+ }
@@ -17,15 +17,11 @@
17
17
 
18
18
  <script lang="ts">
19
19
  import type { NumberInputProps } from './number-input.types.ts';
20
- import { onMount, untrack } from 'svelte';
21
-
22
- import {
23
- ariaInvalid,
24
- composeDescribedBy,
25
- describeId,
26
- errorId as buildErrorId,
27
- } from '../../_internal/field-control.ts';
20
+ import { untrack } from 'svelte';
21
+
22
+ import { resolveFieldControl } from '../../_internal/field-control.ts';
28
23
  import { getFormFieldContext } from '../../_internal/form-field-context.ts';
24
+ import { getLocaleContext } from '../../_internal/locale-context.ts';
29
25
  import { classNames } from '../../utilities/class-names.ts';
30
26
  import { formatNumber } from '../../utilities/format-number.ts';
31
27
  import { parseLocaleNumber } from '../../utilities/parse-locale-number.ts';
@@ -47,16 +43,22 @@
47
43
  error,
48
44
  class: className,
49
45
  onchange,
46
+ onblur: consumerBlur,
50
47
  'aria-describedby': consumerDescribedBy,
51
48
  ...rest
52
49
  }: NumberInputProps = $props();
53
50
 
54
51
  const context = getFormFieldContext();
52
+ const localeContext = getLocaleContext();
55
53
 
56
54
  let editorBuffer = $state('');
57
55
  let isFocused = $state(false);
58
56
  let hasMounted = $state(false);
59
57
  let inputElement: HTMLInputElement | undefined = $state();
58
+
59
+ $effect(() => {
60
+ hasMounted = true;
61
+ });
60
62
  // Two-part internal-invalid surface: malformed (parse failure) and
61
63
  // required-empty (no value when the field demands one). Both drive
62
64
  // `aria-invalid` so screen readers stay aligned with native validity.
@@ -71,11 +73,9 @@
71
73
  }
72
74
  });
73
75
 
74
- onMount(() => {
75
- hasMounted = true;
76
- });
77
-
78
- const resolvedLocale = $derived(locale ?? (hasMounted ? navigator.language : 'en-US'));
76
+ const resolvedLocale = $derived(
77
+ locale ?? localeContext?.locale ?? (hasMounted ? navigator.language : 'en-US'),
78
+ );
79
79
 
80
80
  const resolvedMin = $derived(typeof min === 'number' && Number.isFinite(min) ? min : -Infinity);
81
81
  const resolvedMax = $derived(typeof max === 'number' && Number.isFinite(max) ? max : Infinity);
@@ -300,6 +300,36 @@
300
300
  return formatNumber(v, resolvedLocale, editFormat);
301
301
  }
302
302
 
303
+ function ariaValueNowFromText(text: string): number | undefined {
304
+ const result = parseLocaleNumber(text, resolvedLocale, format);
305
+ if (result.status !== 'valid') return undefined;
306
+ return Number.isFinite(result.value) ? result.value : undefined;
307
+ }
308
+
309
+ const resolvedAriaValueNow = $derived(
310
+ isFocused
311
+ ? ariaValueNowFromText(editorBuffer)
312
+ : value === null || value === undefined
313
+ ? undefined
314
+ : format?.style === 'percent'
315
+ ? roundToPrecision(value * 100, 12)
316
+ : value,
317
+ );
318
+ const resolvedAriaValueMin = $derived(
319
+ Number.isFinite(resolvedMin)
320
+ ? format?.style === 'percent'
321
+ ? roundToPrecision(resolvedMin * 100, 12)
322
+ : resolvedMin
323
+ : undefined,
324
+ );
325
+ const resolvedAriaValueMax = $derived(
326
+ Number.isFinite(resolvedMax)
327
+ ? format?.style === 'percent'
328
+ ? roundToPrecision(resolvedMax * 100, 12)
329
+ : resolvedMax
330
+ : undefined,
331
+ );
332
+
303
333
  function onFocus() {
304
334
  // Preserve the editor buffer when re-focusing after a malformed blur so
305
335
  // the user can correct their own text instead of having it disappear.
@@ -309,10 +339,11 @@
309
339
  isFocused = true;
310
340
  }
311
341
 
312
- function onBlur() {
342
+ function onBlur(event: FocusEvent & { currentTarget: EventTarget & HTMLInputElement }) {
313
343
  const buffered = editorBuffer;
314
344
  isFocused = false;
315
345
  commitFromText('typed', buffered);
346
+ consumerBlur?.(event);
316
347
  }
317
348
 
318
349
  function onInput(event: Event & { currentTarget: EventTarget & HTMLInputElement }) {
@@ -448,19 +479,6 @@
448
479
  };
449
480
  });
450
481
 
451
- const defaultDescriptionId = $derived(describeId(id, !!description));
452
- const defaultErrorId = $derived(buildErrorId(id, !!error));
453
- const ownDescriptionId = $derived(
454
- description && defaultDescriptionId === context?.descriptionId
455
- ? `${id}-number-input-description`
456
- : defaultDescriptionId,
457
- );
458
- const ownErrorId = $derived(
459
- error && defaultErrorId === context?.errorId ? `${id}-number-input-error` : defaultErrorId,
460
- );
461
- const resolvedDescriptionId = $derived(ownDescriptionId ?? context?.descriptionId);
462
- const resolvedErrorId = $derived(ownErrorId ?? context?.errorId);
463
-
464
482
  // Internal error region — rendered when the parse failed and the consumer
465
483
  // didn't supply their own `error` text. Without it, screen readers would
466
484
  // hear `aria-invalid="true"` with no associated message describing why.
@@ -473,19 +491,31 @@
473
491
  );
474
492
  const internalErrorId = $derived(internalErrorMessage ? `${id}-internal-error` : undefined);
475
493
 
476
- const describedBy = $derived(
477
- composeDescribedBy(
478
- resolvedDescriptionId,
479
- resolvedErrorId,
480
- internalErrorId,
494
+ // `hasError` is scoped to the consumer's `error` text (which drives the
495
+ // rendered error <p> and its id). The broader invalid surface — internal
496
+ // parse failure or required-empty — is fed through `consumerInvalid` so it
497
+ // sets aria-invalid without fabricating an error-element id that points at
498
+ // nothing. The internal message is wired into describedBy via its own id.
499
+ const internalInvalid = $derived(malformedError || requiredEmptyError ? 'true' : undefined);
500
+ const field = $derived(
501
+ resolveFieldControl({
502
+ id,
503
+ generatedId: id,
504
+ context,
505
+ hasDescription: !!description,
506
+ hasError: !!error,
507
+ localIdNamespace: 'number-input',
481
508
  consumerDescribedBy,
482
- ),
483
- );
484
- const resolvedAriaInvalid = $derived(
485
- error || malformedError || requiredEmptyError
486
- ? ariaInvalid(true)
487
- : (context?.invalid ?? rest['aria-invalid'] ?? ariaInvalid(false)),
509
+ consumerInvalid: internalInvalid ?? (rest['aria-invalid'] as 'true' | 'false' | undefined),
510
+ additionalDescribedBy: [internalErrorId],
511
+ required,
512
+ disabled,
513
+ }),
488
514
  );
515
+ const ownDescriptionId = $derived(field.ownDescriptionId);
516
+ const ownErrorId = $derived(field.ownErrorId);
517
+ const describedBy = $derived(field.describedBy);
518
+ const resolvedAriaInvalid = $derived(field.ariaInvalid);
489
519
 
490
520
  const incrementDisabled = $derived(
491
521
  resolvedDisabled || (value !== null && value !== undefined && value >= resolvedMax),
@@ -510,6 +540,9 @@
510
540
  {#if label}
511
541
  <label for={id} class="cinder-input-field__label" data-disabled={resolvedDisabled || undefined}>
512
542
  {label}
543
+ {#if resolvedRequired}
544
+ <span class="cinder-_required-marker" aria-hidden="true">*</span>
545
+ {/if}
513
546
  </label>
514
547
  {/if}
515
548
 
@@ -518,6 +551,7 @@
518
551
  bind:this={inputElement}
519
552
  {id}
520
553
  type="text"
554
+ role="spinbutton"
521
555
  inputmode="decimal"
522
556
  value={displayValue}
523
557
  disabled={resolvedDisabled}
@@ -526,6 +560,9 @@
526
560
  {...rest}
527
561
  aria-invalid={resolvedAriaInvalid}
528
562
  aria-describedby={describedBy}
563
+ aria-valuenow={resolvedAriaValueNow}
564
+ aria-valuemin={resolvedAriaValueMin}
565
+ aria-valuemax={resolvedAriaValueMax}
529
566
  oninput={onInput}
530
567
  onfocus={onFocus}
531
568
  onblur={onBlur}
@@ -536,6 +573,7 @@
536
573
  class="cinder-number-input__stepper cinder-number-input__stepper--increment"
537
574
  aria-label={`Increment${stepperLabelSuffix}`}
538
575
  disabled={incrementDisabled}
576
+ tabindex="-1"
539
577
  onclick={() => stepBy('increment')}
540
578
  >
541
579
  <span aria-hidden="true">+</span>
@@ -545,6 +583,7 @@
545
583
  class="cinder-number-input__stepper cinder-number-input__stepper--decrement"
546
584
  aria-label={`Decrement${stepperLabelSuffix}`}
547
585
  disabled={decrementDisabled}
586
+ tabindex="-1"
548
587
  onclick={() => stepBy('decrement')}
549
588
  >
550
589
  <span aria-hidden="true">&#x2212;</span>
@@ -11,7 +11,6 @@ export type NumberInputProps = Omit<
11
11
  | 'oninput'
12
12
  | 'onchange'
13
13
  | 'onfocus'
14
- | 'onblur'
15
14
  | 'onkeydown'
16
15
  > & {
17
16
  /** HTML `id` for the underlying input, used to associate the `<label>` and ARIA attributes. Required. */
@@ -21,13 +20,24 @@ export type NumberInputProps = Omit<
21
20
  /** Initial value used when the component is uncontrolled or when the form is reset. */
22
21
  defaultValue?: number | null;
23
22
  /** Minimum permitted value; the stepper decrement button disables when this bound is reached. */
24
- min?: number;
23
+ min?: number | undefined;
25
24
  /** Maximum permitted value; the stepper increment button disables when this bound is reached. */
26
- max?: number;
25
+ max?: number | undefined;
27
26
  /** Amount added or subtracted per stepper click or arrow-key press. Default `1`. */
28
- step?: number;
27
+ step?: number | undefined;
28
+ /**
29
+ * Locale-aware formatting options passed to `Intl.NumberFormat`.
30
+ * Supports all `Intl.NumberFormatOptions` properties such as `style`
31
+ * (`'decimal'`, `'currency'`, `'percent'`, `'unit'`), `currency`,
32
+ * `minimumFractionDigits`, `maximumFractionDigits`, and `notation`.
33
+ * Defaults to locale-standard decimal formatting when omitted.
34
+ */
29
35
  format?: Intl.NumberFormatOptions;
30
- /** BCP 47 locale tag used for number formatting and parsing. Defaults to `navigator.language`. */
36
+ /**
37
+ * BCP 47 locale tag used for number formatting and parsing. Defaults to the
38
+ * nearest LocaleProvider locale, then `navigator.language` after mount and
39
+ * `en-US` during server rendering.
40
+ */
31
41
  locale?: string;
32
42
  /** When true, disables the input and stepper buttons, matching the native `disabled` attribute. */
33
43
  disabled?: boolean;
@@ -7,9 +7,11 @@ Page-navigation control for stepping through multi-page result sets.
7
7
  ```svelte
8
8
  <script lang="ts">
9
9
  import Pagination from '@lostgradient/cinder/pagination';
10
+
11
+ let currentPage = $state(1);
10
12
  </script>
11
13
 
12
- <Pagination />
14
+ <Pagination bind:currentPage totalPages={10} />
13
15
  ```
14
16
 
15
17
  ## Props