@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
@@ -26,7 +26,11 @@ import"@lostgradient/cinder/schema-form/styles";
26
26
 
27
27
  // src/components/schema-form/schema-form.svelte
28
28
  import"svelte/internal/disclose-version";
29
- import * as $ from "svelte/internal/client";
29
+ import * as $7 from "svelte/internal/client";
30
+
31
+ // src/components/schema-form/schema-form-body.svelte
32
+ import"svelte/internal/disclose-version";
33
+ import * as $6 from "svelte/internal/client";
30
34
  import { tick } from "svelte";
31
35
 
32
36
  // src/utilities/class-names.ts
@@ -34,41 +38,1424 @@ function classNames(...parts) {
34
38
  return parts.filter((part) => typeof part === "string" && part.length > 0).join(" ");
35
39
  }
36
40
 
37
- // src/components/schema-form/schema-form-model.ts
38
- function isRecord(value) {
39
- return value !== null && typeof value === "object" && !Array.isArray(value);
41
+ // src/components/checkbox/checkbox.svelte
42
+ import"svelte/internal/disclose-version";
43
+ import * as $ from "svelte/internal/client";
44
+
45
+ // src/_internal/field-control.ts
46
+ function describeId(fieldId, hasDescription) {
47
+ return hasDescription ? `${fieldId}-description` : undefined;
40
48
  }
41
- function isStandardSchema(value) {
42
- if (!isRecord(value))
43
- return false;
44
- const standard = value["~standard"];
45
- return isRecord(standard) && standard["version"] === 1;
49
+ function errorId(fieldId, hasError) {
50
+ return hasError ? `${fieldId}-error` : undefined;
46
51
  }
47
- function hasJsonSchemaConverter(value) {
48
- const standard = value["~standard"];
49
- return isRecord(standard.jsonSchema) && typeof standard.jsonSchema.input === "function";
52
+ function composeDescribedBy(...ids) {
53
+ const filtered = ids.flatMap((id) => typeof id === "string" ? id.trim().split(/\s+/).filter(Boolean) : []);
54
+ const unique = Array.from(new Set(filtered));
55
+ return unique.length > 0 ? unique.join(" ") : undefined;
50
56
  }
51
- function jsonSchemaFromStandardSchema(schema) {
52
- if (!hasJsonSchemaConverter(schema))
53
- return null;
54
- try {
55
- const generated = schema["~standard"].jsonSchema.input({ target: "draft-2020-12" });
56
- return isRecord(generated) ? generated : null;
57
- } catch {
58
- return null;
59
- }
57
+ function ariaInvalid(hasError) {
58
+ return hasError ? "true" : undefined;
60
59
  }
61
- function createSchemaFormModel(schema) {
62
- const sourceSchema = isStandardSchema(schema) ? jsonSchemaFromStandardSchema(schema) ?? fallbackRawJsonSchema() : schema;
60
+ function resolveFieldControl(input) {
61
+ const resolvedId = input.id ?? input.context?.controlId ?? input.generatedId;
62
+ const defaultDescriptionId = describeId(resolvedId, input.hasDescription ?? false);
63
+ const defaultErrorId = errorId(resolvedId, input.hasError ?? false);
64
+ const ownDescriptionId = defaultDescriptionId && defaultDescriptionId === input.context?.descriptionId && input.localIdNamespace ? `${resolvedId}-${input.localIdNamespace}-description` : defaultDescriptionId;
65
+ const ownErrorId = defaultErrorId && defaultErrorId === input.context?.errorId && input.localIdNamespace ? `${resolvedId}-${input.localIdNamespace}-error` : defaultErrorId;
66
+ const descriptionId = ownDescriptionId ?? input.context?.descriptionId;
67
+ const resolvedErrorId = ownErrorId ?? input.context?.errorId;
68
+ const explicitInvalid = ariaInvalid(input.hasError ?? false);
69
+ const consumerInvalid = input.consumerInvalid === true ? "true" : input.consumerInvalid === false ? undefined : input.consumerInvalid ?? undefined;
63
70
  return {
64
- field: fieldFromJsonSchema(sourceSchema, [], "value", true),
65
- sourceSchema
71
+ id: resolvedId,
72
+ ownDescriptionId,
73
+ ownErrorId,
74
+ descriptionId,
75
+ errorId: resolvedErrorId,
76
+ describedBy: composeDescribedBy(descriptionId, ...input.additionalDescribedBy ?? [], resolvedErrorId, input.context?.describedBy, input.consumerDescribedBy),
77
+ ariaInvalid: explicitInvalid ?? input.context?.invalid ?? consumerInvalid,
78
+ required: input.required ?? input.context?.required ?? false,
79
+ disabled: input.disabled ?? input.context?.disabled ?? false
66
80
  };
67
81
  }
68
- function fallbackRawJsonSchema() {
82
+
83
+ // src/_internal/form-field-context.ts
84
+ import { createContext } from "svelte";
85
+
86
+ // src/_internal/optional-context.ts
87
+ function optionalContext(getStrict) {
88
+ return () => {
89
+ try {
90
+ return getStrict();
91
+ } catch {
92
+ return;
93
+ }
94
+ };
95
+ }
96
+
97
+ // src/_internal/form-field-context.ts
98
+ var [getFormFieldContextStrict, setFormFieldContextRaw] = createContext();
99
+ function setFormFieldContext(context) {
100
+ setFormFieldContextRaw(context);
101
+ }
102
+ var getFormFieldContext = optionalContext(getFormFieldContextStrict);
103
+
104
+ // ../../node_modules/esm-env/true.js
105
+ var true_default = true;
106
+ // src/utilities/dev-warn.ts
107
+ function devWarn(message, ...args) {
108
+ if (!true_default)
109
+ return;
110
+ console.warn(message, ...args);
111
+ }
112
+
113
+ // src/utilities/value-change.ts
114
+ function commitValue(proposed, onValueChange, setValue) {
115
+ const committed = onValueChange?.(proposed) ?? proposed;
116
+ setValue(committed);
117
+ return committed;
118
+ }
119
+
120
+ // src/components/checkbox/checkbox.svelte
121
+ var root_2 = $.from_html(`<span class="cinder-_required-marker" aria-hidden="true">*</span>`);
122
+ var root_1 = $.from_html(`<label class="cinder-checkbox-field__label"> <!></label>`);
123
+ var root_3 = $.from_html(`<p class="cinder-checkbox-field__description"> </p>`);
124
+ var root_4 = $.from_html(`<p class="cinder-checkbox-field__error" aria-live="polite"> </p>`);
125
+ var root = $.from_html(`<div class="cinder-checkbox-field"><div class="cinder-checkbox-row"><span class="cinder-checkbox-field__control"><input/> <span class="cinder-checkbox-field__indicator" aria-hidden="true"></span></span> <!></div> <!> <!></div>`);
126
+ function Checkbox($$anchor, $$props) {
127
+ const generatedId = $.props_id();
128
+ $.push($$props, true);
129
+ let checked = $.prop($$props, "checked", 15, false), indeterminate = $.prop($$props, "indeterminate", 11, false), rest = $.rest_props($$props, [
130
+ "$$slots",
131
+ "$$events",
132
+ "$$legacy",
133
+ "id",
134
+ "checked",
135
+ "onValueChange",
136
+ "indeterminate",
137
+ "label",
138
+ "description",
139
+ "error",
140
+ "disabled",
141
+ "required",
142
+ "class",
143
+ "aria-describedby",
144
+ "aria-invalid",
145
+ "onchange"
146
+ ]);
147
+ const context = getFormFieldContext();
148
+ const field = $.derived(() => resolveFieldControl({
149
+ ...$$props.id !== undefined ? { id: $$props.id } : {},
150
+ generatedId,
151
+ context,
152
+ hasDescription: !!$$props.description,
153
+ hasError: !!$$props.error,
154
+ localIdNamespace: "checkbox",
155
+ consumerDescribedBy: $$props["aria-describedby"],
156
+ consumerInvalid: $$props["aria-invalid"],
157
+ disabled: $$props.disabled,
158
+ required: $$props.required ?? undefined
159
+ }));
160
+ $.user_effect(() => {
161
+ if (context && $$props.id && context.controlId !== $$props.id) {
162
+ devWarn(`[cinder/Checkbox] id mismatch: Checkbox id="${$$props.id}" but wrapping FormField expects controlId="${context.controlId}". Set the same id on both, or omit id on the Checkbox to inherit it.`);
163
+ }
164
+ });
165
+ let inputElement = $.state(undefined);
166
+ $.user_effect(() => {
167
+ if ($.get(inputElement)) {
168
+ $.get(inputElement).indeterminate = indeterminate() && !checked();
169
+ }
170
+ });
171
+ let resetSyncTimeout;
172
+ function syncCheckedAfterFormReset() {
173
+ if (resetSyncTimeout !== undefined)
174
+ clearTimeout(resetSyncTimeout);
175
+ resetSyncTimeout = setTimeout(() => {
176
+ resetSyncTimeout = undefined;
177
+ if (!$.get(inputElement))
178
+ return;
179
+ checked($.get(inputElement).checked);
180
+ $.get(inputElement).indeterminate = indeterminate() && !$.get(inputElement).checked;
181
+ }, 0);
182
+ }
183
+ $.user_effect(() => {
184
+ const form = $.get(inputElement)?.form;
185
+ if (!form)
186
+ return;
187
+ form.addEventListener("reset", syncCheckedAfterFormReset);
188
+ return () => {
189
+ form.removeEventListener("reset", syncCheckedAfterFormReset);
190
+ if (resetSyncTimeout !== undefined) {
191
+ clearTimeout(resetSyncTimeout);
192
+ resetSyncTimeout = undefined;
193
+ }
194
+ };
195
+ });
196
+ function handleChange(event) {
197
+ const target = event.currentTarget;
198
+ const committed = commitValue(target.checked, $$props.onValueChange, (next2) => {
199
+ checked(next2);
200
+ });
201
+ target.checked = committed;
202
+ target.indeterminate = indeterminate() && !committed;
203
+ $$props.onchange?.(event);
204
+ }
205
+ var div = root();
206
+ var div_1 = $.child(div);
207
+ var span = $.child(div_1);
208
+ var input = $.child(span);
209
+ $.attribute_effect(input, ($0) => ({
210
+ id: $.get(field).id,
211
+ type: "checkbox",
212
+ ...rest,
213
+ disabled: $.get(field).disabled,
214
+ required: $.get(field).required,
215
+ checked: checked(),
216
+ onchange: handleChange,
217
+ class: $0,
218
+ "aria-invalid": $.get(field).ariaInvalid,
219
+ "aria-describedby": $.get(field).describedBy
220
+ }), [() => classNames("cinder-checkbox", $$props.class)], undefined, undefined, undefined, true);
221
+ $.bind_this(input, ($$value) => $.set(inputElement, $$value), () => $.get(inputElement));
222
+ $.next(2);
223
+ $.reset(span);
224
+ var node = $.sibling(span, 2);
225
+ {
226
+ var consequent_1 = ($$anchor2) => {
227
+ var label_1 = root_1();
228
+ var text = $.child(label_1);
229
+ var node_1 = $.sibling(text);
230
+ {
231
+ var consequent = ($$anchor3) => {
232
+ var span_1 = root_2();
233
+ $.append($$anchor3, span_1);
234
+ };
235
+ $.if(node_1, ($$render) => {
236
+ if ($.get(field).required)
237
+ $$render(consequent);
238
+ });
239
+ }
240
+ $.reset(label_1);
241
+ $.template_effect(() => {
242
+ $.set_attribute(label_1, "for", $.get(field).id);
243
+ $.set_attribute(label_1, "data-disabled", $.get(field).disabled || undefined);
244
+ $.set_text(text, `${$$props.label ?? ""} `);
245
+ });
246
+ $.append($$anchor2, label_1);
247
+ };
248
+ $.if(node, ($$render) => {
249
+ if ($$props.label)
250
+ $$render(consequent_1);
251
+ });
252
+ }
253
+ $.reset(div_1);
254
+ var node_2 = $.sibling(div_1, 2);
255
+ {
256
+ var consequent_2 = ($$anchor2) => {
257
+ var p = root_3();
258
+ var text_1 = $.child(p, true);
259
+ $.reset(p);
260
+ $.template_effect(() => {
261
+ $.set_attribute(p, "id", $.get(field).ownDescriptionId);
262
+ $.set_text(text_1, $$props.description);
263
+ });
264
+ $.append($$anchor2, p);
265
+ };
266
+ $.if(node_2, ($$render) => {
267
+ if ($$props.description)
268
+ $$render(consequent_2);
269
+ });
270
+ }
271
+ var node_3 = $.sibling(node_2, 2);
272
+ {
273
+ var consequent_3 = ($$anchor2) => {
274
+ var p_1 = root_4();
275
+ var text_2 = $.child(p_1, true);
276
+ $.reset(p_1);
277
+ $.template_effect(() => {
278
+ $.set_attribute(p_1, "id", $.get(field).ownErrorId);
279
+ $.set_text(text_2, $$props.error);
280
+ });
281
+ $.append($$anchor2, p_1);
282
+ };
283
+ $.if(node_3, ($$render) => {
284
+ if ($$props.error)
285
+ $$render(consequent_3);
286
+ });
287
+ }
288
+ $.reset(div);
289
+ $.append($$anchor, div);
290
+ $.pop();
291
+ }
292
+
293
+ // src/components/input/input.svelte
294
+ import"svelte/internal/disclose-version";
295
+ import * as $2 from "svelte/internal/client";
296
+ var calendarIcon = ($$anchor) => {
297
+ var svg = root_12();
298
+ $2.append($$anchor, svg);
299
+ };
300
+ var root_12 = $2.from_svg(`<svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>`);
301
+ var root_22 = $2.from_html(`<input/>`);
302
+ var root_42 = $2.from_html(`<span class="cinder-_required-marker" aria-hidden="true">*</span>`);
303
+ var root_32 = $2.from_html(`<label class="cinder-input-field__label"> <!></label>`);
304
+ var root_6 = $2.from_html(`<span class="cinder-input-group__leading cinder-_truncate"><!></span>`);
305
+ var root_7 = $2.from_html(`<span class="cinder-input-group__trailing cinder-_truncate"><!></span>`);
306
+ var root_8 = $2.from_html(`<span class="cinder-input-group__trailing cinder-input-group__date-icon cinder-_truncate" aria-hidden="true"><!></span>`);
307
+ var root_5 = $2.from_html(`<div class="cinder-input-group"><!> <!> <!></div>`);
308
+ var root_10 = $2.from_html(`<p class="cinder-input-field__description"> </p>`);
309
+ var root_11 = $2.from_html(`<p class="cinder-input-field__error" aria-live="polite"> </p>`);
310
+ var root2 = $2.from_html(`<div class="cinder-input-field"><!> <!> <!> <!></div>`);
311
+ function Input($$anchor, $$props) {
312
+ $2.push($$props, true);
313
+ const inputElement = ($$anchor2) => {
314
+ var input = root_22();
315
+ $2.attribute_effect(input, ($0) => ({
316
+ id: $$props.id,
317
+ type: type(),
318
+ ...rest,
319
+ disabled: $2.get(resolvedDisabled),
320
+ required: $2.get(resolvedRequired),
321
+ value: value(),
322
+ oninput: handleInput,
323
+ class: $0,
324
+ "data-cinder-native-date": $2.get(rendersNativeDateIcon) ? "" : undefined,
325
+ "aria-invalid": $2.get(resolvedAriaInvalid),
326
+ "aria-describedby": $2.get(describedBy)
327
+ }), [() => classNames("cinder-input", $$props.class)], undefined, undefined, undefined, true);
328
+ $2.bind_this(input, ($$value) => $2.set(inputNode, $$value), () => $2.get(inputNode));
329
+ $2.append($$anchor2, input);
330
+ };
331
+ let value = $2.prop($$props, "value", 15, ""), type = $2.prop($$props, "type", 3, "text"), leadingInteractive = $2.prop($$props, "leadingInteractive", 3, false), trailingInteractive = $2.prop($$props, "trailingInteractive", 3, false), rest = $2.rest_props($$props, [
332
+ "$$slots",
333
+ "$$events",
334
+ "$$legacy",
335
+ "id",
336
+ "value",
337
+ "onValueChange",
338
+ "label",
339
+ "description",
340
+ "error",
341
+ "disabled",
342
+ "required",
343
+ "type",
344
+ "class",
345
+ "leading",
346
+ "trailing",
347
+ "leadingInteractive",
348
+ "trailingInteractive",
349
+ "aria-describedby",
350
+ "aria-invalid",
351
+ "oninput"
352
+ ]);
353
+ const context = getFormFieldContext();
354
+ $2.user_effect(() => {
355
+ if (context && context.controlId !== $$props.id) {
356
+ devWarn(`[cinder/Input] id mismatch: Input id="${$$props.id}" but wrapping FormField expects controlId="${context.controlId}". Set the same id on both.`);
357
+ }
358
+ });
359
+ const field = $2.derived(() => resolveFieldControl({
360
+ id: $$props.id,
361
+ generatedId: $$props.id,
362
+ context,
363
+ hasDescription: !!$$props.description,
364
+ hasError: !!$$props.error,
365
+ localIdNamespace: "input",
366
+ consumerDescribedBy: $$props["aria-describedby"],
367
+ consumerInvalid: $$props["aria-invalid"],
368
+ required: $$props.required,
369
+ disabled: $$props.disabled
370
+ }));
371
+ const ownDescriptionId = $2.derived(() => $2.get(field).ownDescriptionId);
372
+ const ownErrorId = $2.derived(() => $2.get(field).ownErrorId);
373
+ const describedBy = $2.derived(() => $2.get(field).describedBy);
374
+ const resolvedAriaInvalid = $2.derived(() => $2.get(field).ariaInvalid);
375
+ const resolvedRequired = $2.derived(() => $2.get(field).required);
376
+ const resolvedDisabled = $2.derived(() => $2.get(field).disabled);
377
+ const isNativeDateInput = $2.derived(() => type() === "date");
378
+ const rendersNativeDateIcon = $2.derived(() => $2.get(isNativeDateInput) && !$$props.trailing);
379
+ const hasTrailing = $2.derived(() => !!$$props.trailing || $2.get(isNativeDateInput));
380
+ const hasGroupWrapper = $2.derived(() => !!$$props.leading || $2.get(hasTrailing));
381
+ const isInvalid = $2.derived(() => $2.get(resolvedAriaInvalid) === "true");
382
+ let inputNode = $2.state(undefined);
383
+ let resetSyncTimeout;
384
+ function syncValueAfterFormReset() {
385
+ if (resetSyncTimeout !== undefined)
386
+ clearTimeout(resetSyncTimeout);
387
+ resetSyncTimeout = setTimeout(() => {
388
+ resetSyncTimeout = undefined;
389
+ if ($2.get(inputNode))
390
+ value($2.get(inputNode).value);
391
+ }, 0);
392
+ }
393
+ $2.user_effect(() => {
394
+ const form = $2.get(inputNode)?.form;
395
+ if (!form)
396
+ return;
397
+ form.addEventListener("reset", syncValueAfterFormReset);
398
+ return () => {
399
+ form.removeEventListener("reset", syncValueAfterFormReset);
400
+ if (resetSyncTimeout !== undefined) {
401
+ clearTimeout(resetSyncTimeout);
402
+ resetSyncTimeout = undefined;
403
+ }
404
+ };
405
+ });
406
+ function handleInput(event) {
407
+ const target = event.currentTarget;
408
+ const committed = commitValue(target.value, $$props.onValueChange, (next2) => {
409
+ value(next2);
410
+ });
411
+ target.value = committed;
412
+ $$props.oninput?.(event);
413
+ }
414
+ var div = root2();
415
+ var node = $2.child(div);
416
+ {
417
+ var consequent_1 = ($$anchor2) => {
418
+ var label_1 = root_32();
419
+ var text = $2.child(label_1);
420
+ var node_1 = $2.sibling(text);
421
+ {
422
+ var consequent = ($$anchor3) => {
423
+ var span = root_42();
424
+ $2.append($$anchor3, span);
425
+ };
426
+ $2.if(node_1, ($$render) => {
427
+ if ($2.get(resolvedRequired))
428
+ $$render(consequent);
429
+ });
430
+ }
431
+ $2.reset(label_1);
432
+ $2.template_effect(() => {
433
+ $2.set_attribute(label_1, "for", $$props.id);
434
+ $2.set_attribute(label_1, "data-disabled", $2.get(resolvedDisabled) || undefined);
435
+ $2.set_text(text, `${$$props.label ?? ""} `);
436
+ });
437
+ $2.append($$anchor2, label_1);
438
+ };
439
+ $2.if(node, ($$render) => {
440
+ if ($$props.label)
441
+ $$render(consequent_1);
442
+ });
443
+ }
444
+ var node_2 = $2.sibling(node, 2);
445
+ {
446
+ var consequent_5 = ($$anchor2) => {
447
+ var div_1 = root_5();
448
+ var node_3 = $2.child(div_1);
449
+ {
450
+ var consequent_2 = ($$anchor3) => {
451
+ var span_1 = root_6();
452
+ var node_4 = $2.child(span_1);
453
+ $2.snippet(node_4, () => $$props.leading);
454
+ $2.reset(span_1);
455
+ $2.template_effect(() => $2.set_attribute(span_1, "aria-hidden", leadingInteractive() ? undefined : "true"));
456
+ $2.append($$anchor3, span_1);
457
+ };
458
+ $2.if(node_3, ($$render) => {
459
+ if ($$props.leading)
460
+ $$render(consequent_2);
461
+ });
462
+ }
463
+ var node_5 = $2.sibling(node_3, 2);
464
+ inputElement(node_5);
465
+ var node_6 = $2.sibling(node_5, 2);
466
+ {
467
+ var consequent_3 = ($$anchor3) => {
468
+ var span_2 = root_7();
469
+ var node_7 = $2.child(span_2);
470
+ $2.snippet(node_7, () => $$props.trailing);
471
+ $2.reset(span_2);
472
+ $2.template_effect(() => $2.set_attribute(span_2, "aria-hidden", trailingInteractive() ? undefined : "true"));
473
+ $2.append($$anchor3, span_2);
474
+ };
475
+ var consequent_4 = ($$anchor3) => {
476
+ var span_3 = root_8();
477
+ var node_8 = $2.child(span_3);
478
+ calendarIcon(node_8);
479
+ $2.reset(span_3);
480
+ $2.append($$anchor3, span_3);
481
+ };
482
+ $2.if(node_6, ($$render) => {
483
+ if ($$props.trailing)
484
+ $$render(consequent_3);
485
+ else if ($2.get(rendersNativeDateIcon))
486
+ $$render(consequent_4, 1);
487
+ });
488
+ }
489
+ $2.reset(div_1);
490
+ $2.template_effect(() => {
491
+ $2.set_attribute(div_1, "data-leading", $$props.leading ? "" : undefined);
492
+ $2.set_attribute(div_1, "data-trailing", $2.get(hasTrailing) ? "" : undefined);
493
+ $2.set_attribute(div_1, "data-native-date", $2.get(rendersNativeDateIcon) ? "" : undefined);
494
+ $2.set_attribute(div_1, "data-disabled", $2.get(resolvedDisabled) ? "" : undefined);
495
+ $2.set_attribute(div_1, "data-invalid", $2.get(isInvalid) ? "" : undefined);
496
+ });
497
+ $2.append($$anchor2, div_1);
498
+ };
499
+ var alternate = ($$anchor2) => {
500
+ inputElement($$anchor2);
501
+ };
502
+ $2.if(node_2, ($$render) => {
503
+ if ($2.get(hasGroupWrapper))
504
+ $$render(consequent_5);
505
+ else
506
+ $$render(alternate, -1);
507
+ });
508
+ }
509
+ var node_9 = $2.sibling(node_2, 2);
510
+ {
511
+ var consequent_6 = ($$anchor2) => {
512
+ var p = root_10();
513
+ var text_1 = $2.child(p, true);
514
+ $2.reset(p);
515
+ $2.template_effect(() => {
516
+ $2.set_attribute(p, "id", $2.get(ownDescriptionId));
517
+ $2.set_text(text_1, $$props.description);
518
+ });
519
+ $2.append($$anchor2, p);
520
+ };
521
+ $2.if(node_9, ($$render) => {
522
+ if ($$props.description)
523
+ $$render(consequent_6);
524
+ });
525
+ }
526
+ var node_10 = $2.sibling(node_9, 2);
527
+ {
528
+ var consequent_7 = ($$anchor2) => {
529
+ var p_1 = root_11();
530
+ var text_2 = $2.child(p_1, true);
531
+ $2.reset(p_1);
532
+ $2.template_effect(() => {
533
+ $2.set_attribute(p_1, "id", $2.get(ownErrorId));
534
+ $2.set_text(text_2, $$props.error);
535
+ });
536
+ $2.append($$anchor2, p_1);
537
+ };
538
+ $2.if(node_10, ($$render) => {
539
+ if ($$props.error)
540
+ $$render(consequent_7);
541
+ });
542
+ }
543
+ $2.reset(div);
544
+ $2.append($$anchor, div);
545
+ $2.pop();
546
+ }
547
+
548
+ // src/components/number-input/number-input.svelte
549
+ import"svelte/internal/disclose-version";
550
+ import * as $3 from "svelte/internal/client";
551
+ import { untrack } from "svelte";
552
+
553
+ // src/_internal/locale-context.ts
554
+ import { createContext as createContext2 } from "svelte";
555
+ var [getLocaleContextStrict, setLocaleContextRaw] = createContext2();
556
+ function setLocaleContext(context) {
557
+ setLocaleContextRaw(context);
558
+ }
559
+ var getLocaleContext = optionalContext(getLocaleContextStrict);
560
+
561
+ // src/utilities/format-number.ts
562
+ function formatNumber(value, locale = "en-US", options) {
563
+ return new Intl.NumberFormat(locale, options).format(value);
564
+ }
565
+
566
+ // src/utilities/parse-locale-number.ts
567
+ function escapeRegex(s) {
568
+ return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
569
+ }
570
+ function parseLocaleNumber(text, locale, format) {
571
+ if (text.trim() === "")
572
+ return { value: null, status: "empty" };
573
+ let working = text;
574
+ const digitFormatter = new Intl.NumberFormat(locale, {
575
+ useGrouping: false,
576
+ maximumFractionDigits: 0
577
+ });
578
+ for (let d = 0;d <= 9; d++) {
579
+ const glyph = digitFormatter.format(d);
580
+ if (glyph !== String(d)) {
581
+ working = working.split(glyph).join(String(d));
582
+ }
583
+ }
584
+ const sepParts = new Intl.NumberFormat(locale, {
585
+ useGrouping: true,
586
+ minimumFractionDigits: 1,
587
+ maximumFractionDigits: 1
588
+ }).formatToParts(-12345.6);
589
+ const groupSep = sepParts.find((p) => p.type === "group")?.value ?? "";
590
+ const decimalSep = sepParts.find((p) => p.type === "decimal")?.value ?? ".";
591
+ working = working.replace(/[؜‎‏‪-‮⁦-⁩]/g, "");
592
+ const localeMinus = sepParts.find((p) => p.type === "minusSign")?.value ?? "-";
593
+ if (localeMinus !== "-") {
594
+ working = working.split(localeMinus).join("-");
595
+ }
596
+ let isNegativeByFormatAffix = false;
597
+ if (format) {
598
+ const positiveAffixValues = new Set(new Intl.NumberFormat(locale, format).formatToParts(0).filter((part) => part.type === "currency" || part.type === "percentSign" || part.type === "literal" || part.type === "unit" || part.type === "compact").map((part) => part.value));
599
+ const negativeParts = new Intl.NumberFormat(locale, format).formatToParts(-1);
600
+ const negativeOnlyAffixes = negativeParts.filter((part) => (part.type === "currency" || part.type === "percentSign" || part.type === "literal" || part.type === "unit" || part.type === "compact") && part.value.trim() !== "" && !positiveAffixValues.has(part.value)).map((part) => part.value);
601
+ isNegativeByFormatAffix = negativeOnlyAffixes.length > 0 && negativeOnlyAffixes.every((part) => working.includes(part));
602
+ const stripSamples = [0, -1];
603
+ for (const sample of stripSamples) {
604
+ const parts = new Intl.NumberFormat(locale, format).formatToParts(sample);
605
+ for (const part of parts) {
606
+ if (part.type === "currency" || part.type === "percentSign" || part.type === "literal" || part.type === "unit" || part.type === "compact") {
607
+ if (part.value)
608
+ working = working.split(part.value).join("");
609
+ }
610
+ }
611
+ }
612
+ }
613
+ if (isNegativeByFormatAffix && !/^[+-]/.test(working)) {
614
+ working = "-" + working;
615
+ }
616
+ working = working.split("%").join("");
617
+ working = working.replace(/^[\s ]+|[\s ]+$/g, "");
618
+ if (working === "")
619
+ return { value: null, status: "empty" };
620
+ const decimalSplit = working.split(decimalSep);
621
+ if (decimalSplit.length > 2)
622
+ return { value: null, status: "malformed" };
623
+ const integerPart = decimalSplit[0] ?? "";
624
+ const fractionPart = decimalSplit[1];
625
+ if (groupSep && integerPart.includes(groupSep)) {
626
+ const probeParts = new Intl.NumberFormat(locale, {
627
+ useGrouping: true
628
+ }).formatToParts(12345678);
629
+ const integerRuns = [];
630
+ for (const p of probeParts) {
631
+ if (p.type === "integer")
632
+ integerRuns.push(p.value);
633
+ }
634
+ const primary = integerRuns.length > 0 ? (integerRuns[integerRuns.length - 1] ?? "").length : 3;
635
+ const secondary = integerRuns.length > 1 ? (integerRuns[integerRuns.length - 2] ?? "").length : primary;
636
+ const groupEsc = escapeRegex(groupSep);
637
+ const grouped = new RegExp(`^[+-]?\\d{1,${secondary}}(${groupEsc}\\d{${secondary}})*${groupEsc}\\d{${primary}}$`);
638
+ if (!grouped.test(integerPart))
639
+ return { value: null, status: "malformed" };
640
+ }
641
+ let normalized = groupSep.length > 0 ? integerPart.split(groupSep).join("") : integerPart;
642
+ if (fractionPart !== undefined)
643
+ normalized += "." + fractionPart;
644
+ if (!/^[+-]?(\d+\.?\d*|\.\d+)$/.test(normalized)) {
645
+ return { value: null, status: "malformed" };
646
+ }
647
+ const parsed = parseFloat(normalized);
648
+ if (!Number.isFinite(parsed))
649
+ return { value: null, status: "malformed" };
650
+ return { value: parsed, status: "valid" };
651
+ }
652
+
653
+ // src/components/number-input/number-input.svelte
654
+ var root_23 = $3.from_html(`<span class="cinder-_required-marker" aria-hidden="true">*</span>`);
655
+ var root_13 = $3.from_html(`<label class="cinder-input-field__label"> <!></label>`);
656
+ var root_33 = $3.from_html(`<input type="hidden"/>`);
657
+ var root_43 = $3.from_html(`<p class="cinder-input-field__description"> </p>`);
658
+ var root_52 = $3.from_html(`<p class="cinder-input-field__error" aria-live="polite"> </p>`);
659
+ var root_62 = $3.from_html(`<p class="cinder-input-field__error" aria-live="polite"> </p>`);
660
+ var root3 = $3.from_html(`<div><!> <div class="cinder-number-input"><input/> <button type="button" class="cinder-number-input__stepper cinder-number-input__stepper--increment" tabindex="-1"><span aria-hidden="true">+</span></button> <button type="button" class="cinder-number-input__stepper cinder-number-input__stepper--decrement" tabindex="-1"><span aria-hidden="true">&#x2212;</span></button></div> <!> <!> <!></div>`);
661
+ function Number_input($$anchor, $$props) {
662
+ $3.push($$props, true);
663
+ let defaultValue = $3.prop($$props, "defaultValue", 3, null), value = $3.prop($$props, "value", 15, null), rest = $3.rest_props($$props, [
664
+ "$$slots",
665
+ "$$events",
666
+ "$$legacy",
667
+ "id",
668
+ "defaultValue",
669
+ "value",
670
+ "min",
671
+ "max",
672
+ "step",
673
+ "format",
674
+ "locale",
675
+ "disabled",
676
+ "required",
677
+ "name",
678
+ "label",
679
+ "description",
680
+ "error",
681
+ "class",
682
+ "onchange",
683
+ "onblur",
684
+ "aria-describedby"
685
+ ]);
686
+ const context = getFormFieldContext();
687
+ const localeContext = getLocaleContext();
688
+ let editorBuffer = $3.state("");
689
+ let isFocused = $3.state(false);
690
+ let hasMounted = $3.state(false);
691
+ let inputElement = $3.state(undefined);
692
+ $3.user_effect(() => {
693
+ $3.set(hasMounted, true);
694
+ });
695
+ let malformedError = $3.state(false);
696
+ let requiredEmptyError = $3.state(false);
697
+ untrack(() => {
698
+ if (value() === null && defaultValue() !== null) {
699
+ value(defaultValue());
700
+ }
701
+ });
702
+ const resolvedLocale = $3.derived(() => $$props.locale ?? localeContext?.locale ?? ($3.get(hasMounted) ? navigator.language : "en-US"));
703
+ const resolvedMin = $3.derived(() => typeof $$props.min === "number" && Number.isFinite($$props.min) ? $$props.min : -Infinity);
704
+ const resolvedMax = $3.derived(() => typeof $$props.max === "number" && Number.isFinite($$props.max) ? $$props.max : Infinity);
705
+ const isValidStep = (s) => typeof s === "number" && Number.isFinite(s) && s > 0;
706
+ const incrementStep = $3.derived(() => isValidStep($$props.step) ? $$props.step : 1);
707
+ const snapStep = $3.derived(() => isValidStep($$props.step) ? $$props.step : null);
708
+ const resolvedRequired = $3.derived(() => $$props.required ?? context?.required ?? false);
709
+ const resolvedDisabled = $3.derived(() => $$props.disabled ?? context?.disabled ?? false);
710
+ function roundToPrecision(n, digits) {
711
+ return Number(n.toFixed(Math.min(digits, 12)));
712
+ }
713
+ function fractionalDigits(n) {
714
+ if (!Number.isFinite(n))
715
+ return 0;
716
+ const s = String(n);
717
+ if (s.includes("e") || s.includes("E")) {
718
+ const parts = s.toLowerCase().split("e");
719
+ const mantissa = parts[0] ?? "";
720
+ const expStr = parts[1] ?? "0";
721
+ const exp = Number(expStr);
722
+ const fracOfMantissa = mantissa.split(".")[1]?.length ?? 0;
723
+ return Math.max(0, fracOfMantissa - exp);
724
+ }
725
+ return s.split(".")[1]?.length ?? 0;
726
+ }
727
+ function commit(next2, parseStatus, emitChange) {
728
+ const nextMalformed = !$3.get(resolvedDisabled) && parseStatus === "malformed";
729
+ const nextRequiredEmpty = !$3.get(resolvedDisabled) && !nextMalformed && $3.get(resolvedRequired) && next2 === null;
730
+ if ($3.get(inputElement)) {
731
+ if (nextMalformed) {
732
+ $3.get(inputElement).setCustomValidity("Please enter a valid number.");
733
+ } else if (nextRequiredEmpty) {
734
+ $3.get(inputElement).setCustomValidity("Please enter a number.");
735
+ } else {
736
+ $3.get(inputElement).setCustomValidity("");
737
+ }
738
+ }
739
+ $3.set(malformedError, nextMalformed, true);
740
+ $3.set(requiredEmptyError, nextRequiredEmpty, true);
741
+ if (!Object.is(next2, value())) {
742
+ $3.set(isInternalValueChange, true);
743
+ value(next2);
744
+ }
745
+ if (emitChange) {
746
+ $$props.onchange?.(next2);
747
+ }
748
+ return next2;
749
+ }
750
+ function commitFromNumber(source, raw, parseStatus = "valid") {
751
+ if (raw === null)
752
+ return commit(null, parseStatus, true);
753
+ if (!Number.isFinite(raw))
754
+ return commit(null, "malformed", true);
755
+ let result = raw;
756
+ if (source === "typed" && $3.get(snapStep) !== null) {
757
+ const origin = Number.isFinite($3.get(resolvedMin)) ? $3.get(resolvedMin) : 0;
758
+ result = origin + Math.round((raw - origin) / $3.get(snapStep)) * $3.get(snapStep);
759
+ result = roundToPrecision(result, fractionalDigits($3.get(snapStep)));
760
+ } else if (source === "delta" && $3.get(snapStep) !== null) {
761
+ const cleanRaw = roundToPrecision(raw, 12);
762
+ result = roundToPrecision(raw, Math.max(fractionalDigits($3.get(snapStep)), fractionalDigits(cleanRaw)));
763
+ }
764
+ const clamped = Math.min($3.get(resolvedMax), Math.max($3.get(resolvedMin), result));
765
+ return commit(clamped, parseStatus, true);
766
+ }
767
+ function commitFromText(source, text) {
768
+ const result = parseLocaleNumber(text, $3.get(resolvedLocale), $$props.format);
769
+ if (result.status !== "valid") {
770
+ return commit(null, result.status, true);
771
+ }
772
+ const canonical = $$props.format?.style === "percent" ? roundToPrecision(result.value / 100, Math.max(2, fractionalDigits(result.value) + 2)) : result.value;
773
+ return commitFromNumber(source, canonical, "valid");
774
+ }
775
+ let isInternalValueChange = $3.state(false);
776
+ let enterKeyFlushed = false;
777
+ const displayValue = $3.derived(() => $3.get(isFocused) ? $3.get(editorBuffer) : $3.get(malformedError) ? $3.get(editorBuffer) : value() === null || value() === undefined ? "" : formatNumber(value(), $3.get(resolvedLocale), $$props.format));
778
+ const parentValueSignature = $3.derived(() => `${value() ?? ""}|${$3.get(resolvedLocale)}|${JSON.stringify($$props.format ?? null)}`);
779
+ let lastSeenParentSignature = untrack(() => $3.get(parentValueSignature));
780
+ $3.user_effect(() => {
781
+ const signature = $3.get(parentValueSignature);
782
+ if (signature === lastSeenParentSignature)
783
+ return;
784
+ lastSeenParentSignature = signature;
785
+ if ($3.get(isInternalValueChange)) {
786
+ $3.set(isInternalValueChange, false);
787
+ return;
788
+ }
789
+ if (!$3.get(isFocused))
790
+ return;
791
+ $3.set(editorBuffer, value() === null || value() === undefined ? "" : buildEditDisplay(value()), true);
792
+ });
793
+ $3.user_effect(() => {
794
+ if (!$3.get(inputElement))
795
+ return;
796
+ if ($3.get(resolvedDisabled)) {
797
+ $3.get(inputElement).setCustomValidity("");
798
+ $3.set(malformedError, false);
799
+ $3.set(requiredEmptyError, false);
800
+ } else if (value() !== null && value() !== undefined && !$3.get(isInternalValueChange)) {
801
+ $3.set(malformedError, false);
802
+ $3.set(requiredEmptyError, false);
803
+ $3.get(inputElement).setCustomValidity("");
804
+ } else if ($3.get(malformedError)) {} else if (!$3.get(isFocused) && $3.get(resolvedRequired) && (value() === null || value() === undefined)) {
805
+ $3.get(inputElement).setCustomValidity("Please enter a number.");
806
+ $3.set(requiredEmptyError, true);
807
+ } else if ($3.get(isFocused) && $3.get(requiredEmptyError)) {
808
+ $3.get(inputElement).setCustomValidity("");
809
+ $3.set(requiredEmptyError, false);
810
+ } else if (value() !== null && value() !== undefined) {
811
+ $3.get(inputElement).setCustomValidity("");
812
+ $3.set(requiredEmptyError, false);
813
+ }
814
+ });
815
+ function buildEditDisplay(v) {
816
+ const editFormat = {
817
+ ...$$props.format,
818
+ style: "decimal",
819
+ useGrouping: false,
820
+ currency: undefined,
821
+ currencyDisplay: undefined,
822
+ notation: "standard",
823
+ compactDisplay: undefined
824
+ };
825
+ if ($$props.format?.style === "percent") {
826
+ const asPercent = roundToPrecision(v * 100, 12);
827
+ return formatNumber(asPercent, $3.get(resolvedLocale), editFormat);
828
+ }
829
+ return formatNumber(v, $3.get(resolvedLocale), editFormat);
830
+ }
831
+ function ariaValueNowFromText(text) {
832
+ const result = parseLocaleNumber(text, $3.get(resolvedLocale), $$props.format);
833
+ if (result.status !== "valid")
834
+ return;
835
+ return Number.isFinite(result.value) ? result.value : undefined;
836
+ }
837
+ const resolvedAriaValueNow = $3.derived(() => $3.get(isFocused) ? ariaValueNowFromText($3.get(editorBuffer)) : value() === null || value() === undefined ? undefined : $$props.format?.style === "percent" ? roundToPrecision(value() * 100, 12) : value());
838
+ const resolvedAriaValueMin = $3.derived(() => Number.isFinite($3.get(resolvedMin)) ? $$props.format?.style === "percent" ? roundToPrecision($3.get(resolvedMin) * 100, 12) : $3.get(resolvedMin) : undefined);
839
+ const resolvedAriaValueMax = $3.derived(() => Number.isFinite($3.get(resolvedMax)) ? $$props.format?.style === "percent" ? roundToPrecision($3.get(resolvedMax) * 100, 12) : $3.get(resolvedMax) : undefined);
840
+ function onFocus() {
841
+ if (!$3.get(malformedError)) {
842
+ $3.set(editorBuffer, value() === null || value() === undefined ? "" : buildEditDisplay(value()), true);
843
+ }
844
+ $3.set(isFocused, true);
845
+ }
846
+ function onBlur(event) {
847
+ const buffered = $3.get(editorBuffer);
848
+ $3.set(isFocused, false);
849
+ commitFromText("typed", buffered);
850
+ $$props.onblur?.(event);
851
+ }
852
+ function onInput(event) {
853
+ $3.set(editorBuffer, event.currentTarget.value, true);
854
+ if ($3.get(malformedError)) {
855
+ $3.set(malformedError, false);
856
+ $3.get(inputElement)?.setCustomValidity("");
857
+ }
858
+ }
859
+ function getBaseForStep(direction) {
860
+ const parsed = $3.get(isFocused) ? parseLocaleNumber($3.get(editorBuffer), $3.get(resolvedLocale), $$props.format) : null;
861
+ let baseFromDisplay = null;
862
+ if (parsed && parsed.status === "valid") {
863
+ baseFromDisplay = $$props.format?.style === "percent" ? roundToPrecision(parsed.value / 100, Math.max(2, fractionalDigits(parsed.value) + 2)) : parsed.value;
864
+ }
865
+ const defaultStart = direction === "increment" ? Number.isFinite($3.get(resolvedMin)) ? $3.get(resolvedMin) : 0 : Number.isFinite($3.get(resolvedMax)) ? $3.get(resolvedMax) : 0;
866
+ return baseFromDisplay ?? value() ?? defaultStart;
867
+ }
868
+ function stepBy(direction, multiplier = 1) {
869
+ const base = getBaseForStep(direction);
870
+ const delta = $3.get(incrementStep) * multiplier * (direction === "increment" ? 1 : -1);
871
+ const next2 = commitFromNumber("delta", base + delta);
872
+ if ($3.get(isFocused)) {
873
+ $3.set(editorBuffer, next2 === null ? "" : buildEditDisplay(next2), true);
874
+ }
875
+ $3.get(inputElement)?.focus();
876
+ }
877
+ function onKeyDown(event) {
878
+ if ($3.get(resolvedDisabled))
879
+ return;
880
+ switch (event.key) {
881
+ case "ArrowUp":
882
+ event.preventDefault();
883
+ stepBy("increment");
884
+ break;
885
+ case "ArrowDown":
886
+ event.preventDefault();
887
+ stepBy("decrement");
888
+ break;
889
+ case "PageUp":
890
+ event.preventDefault();
891
+ stepBy("increment", 10);
892
+ break;
893
+ case "PageDown":
894
+ event.preventDefault();
895
+ stepBy("decrement", 10);
896
+ break;
897
+ case "Home":
898
+ if (Number.isFinite($3.get(resolvedMin))) {
899
+ event.preventDefault();
900
+ const homeNext = commitFromNumber("delta", $3.get(resolvedMin));
901
+ if ($3.get(isFocused))
902
+ $3.set(editorBuffer, homeNext === null ? "" : buildEditDisplay(homeNext), true);
903
+ }
904
+ break;
905
+ case "End":
906
+ if (Number.isFinite($3.get(resolvedMax))) {
907
+ event.preventDefault();
908
+ const endNext = commitFromNumber("delta", $3.get(resolvedMax));
909
+ if ($3.get(isFocused))
910
+ $3.set(editorBuffer, endNext === null ? "" : buildEditDisplay(endNext), true);
911
+ }
912
+ break;
913
+ case "Enter": {
914
+ event.preventDefault();
915
+ commitFromText("typed", $3.get(isFocused) ? $3.get(editorBuffer) : "");
916
+ const form = $3.get(inputElement)?.closest("form");
917
+ if (form) {
918
+ if (form.checkValidity()) {
919
+ enterKeyFlushed = true;
920
+ form.requestSubmit();
921
+ } else {
922
+ form.reportValidity();
923
+ }
924
+ }
925
+ break;
926
+ }
927
+ }
928
+ }
929
+ $3.user_effect(() => {
930
+ if (!$3.get(inputElement))
931
+ return;
932
+ const form = $3.get(inputElement).closest("form");
933
+ if (!form)
934
+ return;
935
+ const onSubmit = () => {
936
+ if ($3.get(resolvedDisabled))
937
+ return;
938
+ if (enterKeyFlushed) {
939
+ enterKeyFlushed = false;
940
+ return;
941
+ }
942
+ if ($3.get(isFocused))
943
+ commitFromText("typed", $3.get(editorBuffer));
944
+ };
945
+ const onReset = () => {
946
+ if ($3.get(resolvedDisabled))
947
+ return;
948
+ commitFromNumber("reset", defaultValue() ?? null, defaultValue() === null ? "empty" : "valid");
949
+ };
950
+ form.addEventListener("submit", onSubmit, true);
951
+ form.addEventListener("reset", onReset);
952
+ return () => {
953
+ form.removeEventListener("submit", onSubmit, true);
954
+ form.removeEventListener("reset", onReset);
955
+ };
956
+ });
957
+ const internalErrorMessage = $3.derived(() => !$$props.error && $3.get(malformedError) ? "Please enter a valid number." : !$$props.error && $3.get(requiredEmptyError) ? "Please enter a number." : null);
958
+ const internalErrorId = $3.derived(() => $3.get(internalErrorMessage) ? `${$$props.id}-internal-error` : undefined);
959
+ const internalInvalid = $3.derived(() => $3.get(malformedError) || $3.get(requiredEmptyError) ? "true" : undefined);
960
+ const field = $3.derived(() => resolveFieldControl({
961
+ id: $$props.id,
962
+ generatedId: $$props.id,
963
+ context,
964
+ hasDescription: !!$$props.description,
965
+ hasError: !!$$props.error,
966
+ localIdNamespace: "number-input",
967
+ consumerDescribedBy: $$props["aria-describedby"],
968
+ consumerInvalid: $3.get(internalInvalid) ?? rest["aria-invalid"],
969
+ additionalDescribedBy: [$3.get(internalErrorId)],
970
+ required: $$props.required,
971
+ disabled: $$props.disabled
972
+ }));
973
+ const ownDescriptionId = $3.derived(() => $3.get(field).ownDescriptionId);
974
+ const ownErrorId = $3.derived(() => $3.get(field).ownErrorId);
975
+ const describedBy = $3.derived(() => $3.get(field).describedBy);
976
+ const resolvedAriaInvalid = $3.derived(() => $3.get(field).ariaInvalid);
977
+ const incrementDisabled = $3.derived(() => $3.get(resolvedDisabled) || value() !== null && value() !== undefined && value() >= $3.get(resolvedMax));
978
+ const decrementDisabled = $3.derived(() => $3.get(resolvedDisabled) || value() !== null && value() !== undefined && value() <= $3.get(resolvedMin));
979
+ const showHiddenInput = $3.derived(() => typeof $$props.name === "string" && $$props.name.length > 0 && !$3.get(resolvedDisabled));
980
+ const stepperLabelSuffix = $3.derived(() => $$props.label ? ` ${$$props.label} by ${$3.get(incrementStep)}` : ` by ${$3.get(incrementStep)}`);
981
+ var div = root3();
982
+ var node = $3.child(div);
983
+ {
984
+ var consequent_1 = ($$anchor2) => {
985
+ var label_1 = root_13();
986
+ var text_1 = $3.child(label_1);
987
+ var node_1 = $3.sibling(text_1);
988
+ {
989
+ var consequent = ($$anchor3) => {
990
+ var span = root_23();
991
+ $3.append($$anchor3, span);
992
+ };
993
+ $3.if(node_1, ($$render) => {
994
+ if ($3.get(resolvedRequired))
995
+ $$render(consequent);
996
+ });
997
+ }
998
+ $3.reset(label_1);
999
+ $3.template_effect(() => {
1000
+ $3.set_attribute(label_1, "for", $$props.id);
1001
+ $3.set_attribute(label_1, "data-disabled", $3.get(resolvedDisabled) || undefined);
1002
+ $3.set_text(text_1, `${$$props.label ?? ""} `);
1003
+ });
1004
+ $3.append($$anchor2, label_1);
1005
+ };
1006
+ $3.if(node, ($$render) => {
1007
+ if ($$props.label)
1008
+ $$render(consequent_1);
1009
+ });
1010
+ }
1011
+ var div_1 = $3.sibling(node, 2);
1012
+ var input = $3.child(div_1);
1013
+ $3.attribute_effect(input, () => ({
1014
+ id: $$props.id,
1015
+ type: "text",
1016
+ role: "spinbutton",
1017
+ inputmode: "decimal",
1018
+ value: $3.get(displayValue),
1019
+ disabled: $3.get(resolvedDisabled),
1020
+ required: $3.get(resolvedRequired),
1021
+ class: "cinder-input cinder-number-input__input",
1022
+ ...rest,
1023
+ "aria-invalid": $3.get(resolvedAriaInvalid),
1024
+ "aria-describedby": $3.get(describedBy),
1025
+ "aria-valuenow": $3.get(resolvedAriaValueNow),
1026
+ "aria-valuemin": $3.get(resolvedAriaValueMin),
1027
+ "aria-valuemax": $3.get(resolvedAriaValueMax),
1028
+ oninput: onInput,
1029
+ onfocus: onFocus,
1030
+ onblur: onBlur,
1031
+ onkeydown: onKeyDown
1032
+ }), undefined, undefined, undefined, undefined, true);
1033
+ $3.bind_this(input, ($$value) => $3.set(inputElement, $$value), () => $3.get(inputElement));
1034
+ var button = $3.sibling(input, 2);
1035
+ var button_1 = $3.sibling(button, 2);
1036
+ $3.reset(div_1);
1037
+ var node_2 = $3.sibling(div_1, 2);
1038
+ {
1039
+ var consequent_2 = ($$anchor2) => {
1040
+ var input_1 = root_33();
1041
+ $3.remove_input_defaults(input_1);
1042
+ $3.template_effect(($0) => {
1043
+ $3.set_attribute(input_1, "name", $$props.name);
1044
+ $3.set_value(input_1, $0);
1045
+ }, [
1046
+ () => value() === null || value() === undefined ? "" : String(value())
1047
+ ]);
1048
+ $3.append($$anchor2, input_1);
1049
+ };
1050
+ $3.if(node_2, ($$render) => {
1051
+ if ($3.get(showHiddenInput))
1052
+ $$render(consequent_2);
1053
+ });
1054
+ }
1055
+ var node_3 = $3.sibling(node_2, 2);
1056
+ {
1057
+ var consequent_3 = ($$anchor2) => {
1058
+ var p = root_43();
1059
+ var text_2 = $3.child(p, true);
1060
+ $3.reset(p);
1061
+ $3.template_effect(() => {
1062
+ $3.set_attribute(p, "id", $3.get(ownDescriptionId));
1063
+ $3.set_text(text_2, $$props.description);
1064
+ });
1065
+ $3.append($$anchor2, p);
1066
+ };
1067
+ $3.if(node_3, ($$render) => {
1068
+ if ($$props.description)
1069
+ $$render(consequent_3);
1070
+ });
1071
+ }
1072
+ var node_4 = $3.sibling(node_3, 2);
1073
+ {
1074
+ var consequent_4 = ($$anchor2) => {
1075
+ var p_1 = root_52();
1076
+ var text_3 = $3.child(p_1, true);
1077
+ $3.reset(p_1);
1078
+ $3.template_effect(() => {
1079
+ $3.set_attribute(p_1, "id", $3.get(ownErrorId));
1080
+ $3.set_text(text_3, $$props.error);
1081
+ });
1082
+ $3.append($$anchor2, p_1);
1083
+ };
1084
+ var consequent_5 = ($$anchor2) => {
1085
+ var p_2 = root_62();
1086
+ var text_4 = $3.child(p_2, true);
1087
+ $3.reset(p_2);
1088
+ $3.template_effect(() => {
1089
+ $3.set_attribute(p_2, "id", $3.get(internalErrorId));
1090
+ $3.set_text(text_4, $3.get(internalErrorMessage));
1091
+ });
1092
+ $3.append($$anchor2, p_2);
1093
+ };
1094
+ $3.if(node_4, ($$render) => {
1095
+ if ($$props.error)
1096
+ $$render(consequent_4);
1097
+ else if ($3.get(internalErrorMessage))
1098
+ $$render(consequent_5, 1);
1099
+ });
1100
+ }
1101
+ $3.reset(div);
1102
+ $3.template_effect(($0) => {
1103
+ $3.set_class(div, 1, $0);
1104
+ $3.set_attribute(div_1, "data-disabled", $3.get(resolvedDisabled) ? "" : undefined);
1105
+ $3.set_attribute(button, "aria-label", `Increment${$3.get(stepperLabelSuffix)}`);
1106
+ button.disabled = $3.get(incrementDisabled);
1107
+ $3.set_attribute(button_1, "aria-label", `Decrement${$3.get(stepperLabelSuffix)}`);
1108
+ button_1.disabled = $3.get(decrementDisabled);
1109
+ }, [
1110
+ () => $3.clsx(classNames("cinder-input-field", $$props.class))
1111
+ ]);
1112
+ $3.delegated("click", button, () => stepBy("increment"));
1113
+ $3.delegated("click", button_1, () => stepBy("decrement"));
1114
+ $3.append($$anchor, div);
1115
+ $3.pop();
1116
+ }
1117
+ $3.delegate(["click"]);
1118
+
1119
+ // src/components/select/select.svelte
1120
+ import"svelte/internal/disclose-version";
1121
+ import * as $4 from "svelte/internal/client";
1122
+ var root_24 = $4.from_html(`<span class="cinder-_required-marker" aria-hidden="true">*</span>`);
1123
+ var root_14 = $4.from_html(`<label class="cinder-select-field__label"> <!></label>`);
1124
+ var root_34 = $4.from_html(`<select></select>`);
1125
+ var root_53 = $4.from_html(`<option> </option>`);
1126
+ var root_44 = $4.from_html(`<select></select>`);
1127
+ var root_63 = $4.from_html(`<p class="cinder-select-field__description"> </p>`);
1128
+ var root4 = $4.from_html(`<div><!> <span class="cinder-select-field__control"><!> <span class="cinder-select-field__chevron" aria-hidden="true"></span></span> <!> <p class="cinder-select-field__error" aria-live="polite"> </p></div>`);
1129
+ function Select($$anchor, $$props) {
1130
+ $4.push($$props, true);
1131
+ let value = $4.prop($$props, "value", 15), rest = $4.rest_props($$props, [
1132
+ "$$slots",
1133
+ "$$events",
1134
+ "$$legacy",
1135
+ "id",
1136
+ "value",
1137
+ "options",
1138
+ "label",
1139
+ "description",
1140
+ "error",
1141
+ "required",
1142
+ "disabled",
1143
+ "class",
1144
+ "aria-describedby",
1145
+ "aria-invalid"
1146
+ ]);
1147
+ const context = getFormFieldContext();
1148
+ const field = $4.derived(() => resolveFieldControl({
1149
+ id: $$props.id,
1150
+ generatedId: $$props.id,
1151
+ context,
1152
+ hasDescription: !!$$props.description,
1153
+ hasError: !!$$props.error,
1154
+ localIdNamespace: "select",
1155
+ consumerDescribedBy: $$props["aria-describedby"],
1156
+ consumerInvalid: $$props["aria-invalid"],
1157
+ required: $$props.required,
1158
+ disabled: $$props.disabled
1159
+ }));
1160
+ const stableLocalErrorId = $4.derived(() => context?.errorId === `${$4.get(field).id}-error` ? `${$4.get(field).id}-select-error` : `${$4.get(field).id}-error`);
1161
+ $4.user_effect(() => {
1162
+ if ($$props.options.length === 0) {
1163
+ devWarn("[cinder/Select] options is empty — pass at least one option, or ignore during async load.");
1164
+ }
1165
+ });
1166
+ var div = root4();
1167
+ var node = $4.child(div);
1168
+ {
1169
+ var consequent_1 = ($$anchor2) => {
1170
+ var label_1 = root_14();
1171
+ var text = $4.child(label_1);
1172
+ var node_1 = $4.sibling(text);
1173
+ {
1174
+ var consequent = ($$anchor3) => {
1175
+ var span = root_24();
1176
+ $4.append($$anchor3, span);
1177
+ };
1178
+ $4.if(node_1, ($$render) => {
1179
+ if ($4.get(field).required)
1180
+ $$render(consequent);
1181
+ });
1182
+ }
1183
+ $4.reset(label_1);
1184
+ $4.template_effect(() => {
1185
+ $4.set_attribute(label_1, "for", $$props.id);
1186
+ $4.set_attribute(label_1, "data-disabled", $4.get(field).disabled || undefined);
1187
+ $4.set_text(text, `${$$props.label ?? ""} `);
1188
+ });
1189
+ $4.append($$anchor2, label_1);
1190
+ };
1191
+ $4.if(node, ($$render) => {
1192
+ if ($$props.label)
1193
+ $$render(consequent_1);
1194
+ });
1195
+ }
1196
+ var span_1 = $4.sibling(node, 2);
1197
+ var node_2 = $4.child(span_1);
1198
+ {
1199
+ var consequent_2 = ($$anchor2) => {
1200
+ var select = root_34();
1201
+ $4.attribute_effect(select, () => ({
1202
+ id: $$props.id,
1203
+ class: "cinder-_input-frame cinder-select",
1204
+ disabled: $4.get(field).disabled,
1205
+ required: $4.get(field).required,
1206
+ "data-cinder-empty": "true",
1207
+ ...rest,
1208
+ "aria-describedby": $4.get(field).describedBy,
1209
+ "aria-invalid": $4.get(field).ariaInvalid
1210
+ }));
1211
+ $4.append($$anchor2, select);
1212
+ };
1213
+ var alternate = ($$anchor2) => {
1214
+ var select_1 = root_44();
1215
+ $4.attribute_effect(select_1, () => ({
1216
+ id: $$props.id,
1217
+ class: "cinder-_input-frame cinder-select",
1218
+ disabled: $4.get(field).disabled,
1219
+ required: $4.get(field).required,
1220
+ ...rest,
1221
+ "aria-describedby": $4.get(field).describedBy,
1222
+ "aria-invalid": $4.get(field).ariaInvalid
1223
+ }));
1224
+ $4.each(select_1, 21, () => $$props.options, (option) => option.value, ($$anchor3, option) => {
1225
+ var option_1 = root_53();
1226
+ var text_1 = $4.child(option_1, true);
1227
+ $4.reset(option_1);
1228
+ var option_1_value = {};
1229
+ $4.template_effect(() => {
1230
+ option_1.disabled = $4.get(option).disabled;
1231
+ $4.set_text(text_1, $4.get(option).label);
1232
+ if (option_1_value !== (option_1_value = $4.get(option).value)) {
1233
+ option_1.value = (option_1.__value = $4.get(option).value) ?? "";
1234
+ }
1235
+ });
1236
+ $4.append($$anchor3, option_1);
1237
+ });
1238
+ $4.reset(select_1);
1239
+ $4.bind_select_value(select_1, value);
1240
+ $4.append($$anchor2, select_1);
1241
+ };
1242
+ $4.if(node_2, ($$render) => {
1243
+ if ($$props.options.length === 0)
1244
+ $$render(consequent_2);
1245
+ else
1246
+ $$render(alternate, -1);
1247
+ });
1248
+ }
1249
+ $4.next(2);
1250
+ $4.reset(span_1);
1251
+ var node_3 = $4.sibling(span_1, 2);
1252
+ {
1253
+ var consequent_3 = ($$anchor2) => {
1254
+ var p = root_63();
1255
+ var text_2 = $4.child(p, true);
1256
+ $4.reset(p);
1257
+ $4.template_effect(() => {
1258
+ $4.set_attribute(p, "id", $4.get(field).ownDescriptionId);
1259
+ $4.set_text(text_2, $$props.description);
1260
+ });
1261
+ $4.append($$anchor2, p);
1262
+ };
1263
+ $4.if(node_3, ($$render) => {
1264
+ if ($$props.description)
1265
+ $$render(consequent_3);
1266
+ });
1267
+ }
1268
+ var p_1 = $4.sibling(node_3, 2);
1269
+ var text_3 = $4.child(p_1, true);
1270
+ $4.reset(p_1);
1271
+ $4.reset(div);
1272
+ $4.template_effect(($0) => {
1273
+ $4.set_class(div, 1, $0);
1274
+ $4.set_attribute(p_1, "id", $4.get(field).ownErrorId ?? $4.get(stableLocalErrorId));
1275
+ $4.set_attribute(p_1, "data-cinder-error", !!$$props.error || undefined);
1276
+ $4.set_text(text_3, $$props.error ?? "");
1277
+ }, [
1278
+ () => $4.clsx(classNames("cinder-select-field", $$props.class))
1279
+ ]);
1280
+ $4.append($$anchor, div);
1281
+ $4.pop();
1282
+ }
1283
+
1284
+ // src/components/textarea/textarea.svelte
1285
+ import"svelte/internal/disclose-version";
1286
+ import * as $5 from "svelte/internal/client";
1287
+
1288
+ // src/components/textarea-count.ts
1289
+ function resolveMaximumLength(value) {
1290
+ if (typeof value === "number") {
1291
+ return Number.isSafeInteger(value) && value >= 0 ? value : undefined;
1292
+ }
1293
+ if (typeof value === "string") {
1294
+ const trimmed = value.trim();
1295
+ if (!/^\d+$/.test(trimmed))
1296
+ return;
1297
+ const parsed = Number(trimmed);
1298
+ return parsed >= 0 && Number.isSafeInteger(parsed) ? parsed : undefined;
1299
+ }
1300
+ return;
1301
+ }
1302
+
1303
+ // src/components/textarea/textarea.svelte
1304
+ var root_25 = $5.from_html(`<span class="cinder-_required-marker" aria-hidden="true">*</span>`);
1305
+ var root_15 = $5.from_html(`<label class="cinder-textarea-label"> <!></label>`);
1306
+ var root_35 = $5.from_html(`<p class="cinder-textarea-description"> </p>`);
1307
+ var root_45 = $5.from_html(`<output class="cinder-textarea-count" aria-live="polite" aria-atomic="true"> </output>`);
1308
+ var root_54 = $5.from_html(`<p class="cinder-textarea-error" aria-live="polite"> </p>`);
1309
+ var root5 = $5.from_html(`<div class="cinder-textarea-field"><!> <textarea></textarea> <!> <!> <!></div>`);
1310
+ function Textarea($$anchor, $$props) {
1311
+ $5.push($$props, true);
1312
+ let value = $5.prop($$props, "value", 15, ""), rows = $5.prop($$props, "rows", 3, 4), showCount = $5.prop($$props, "showCount", 3, false), rest = $5.rest_props($$props, [
1313
+ "$$slots",
1314
+ "$$events",
1315
+ "$$legacy",
1316
+ "id",
1317
+ "value",
1318
+ "label",
1319
+ "description",
1320
+ "error",
1321
+ "rows",
1322
+ "disabled",
1323
+ "required",
1324
+ "class",
1325
+ "maxlength",
1326
+ "showCount",
1327
+ "aria-describedby",
1328
+ "aria-invalid"
1329
+ ]);
1330
+ const context = getFormFieldContext();
1331
+ const maximumLength = $5.derived(() => resolveMaximumLength($$props.maxlength));
1332
+ const countId = $5.derived(() => showCount() && $5.get(maximumLength) !== undefined ? `${$$props.id}-count` : undefined);
1333
+ const currentCount = $5.derived(() => value()?.length ?? 0);
1334
+ const ownRequired = $5.derived(() => $$props.required ?? undefined);
1335
+ const field = $5.derived(() => resolveFieldControl({
1336
+ id: $$props.id,
1337
+ generatedId: $$props.id,
1338
+ context,
1339
+ hasDescription: !!$$props.description,
1340
+ hasError: !!$$props.error,
1341
+ localIdNamespace: "textarea",
1342
+ consumerDescribedBy: $$props["aria-describedby"],
1343
+ consumerInvalid: $$props["aria-invalid"],
1344
+ additionalDescribedBy: [$5.get(countId)],
1345
+ required: $5.get(ownRequired),
1346
+ disabled: $$props.disabled
1347
+ }));
1348
+ var div = root5();
1349
+ var node = $5.child(div);
1350
+ {
1351
+ var consequent_1 = ($$anchor2) => {
1352
+ var label_1 = root_15();
1353
+ var text = $5.child(label_1);
1354
+ var node_1 = $5.sibling(text);
1355
+ {
1356
+ var consequent = ($$anchor3) => {
1357
+ var span = root_25();
1358
+ $5.append($$anchor3, span);
1359
+ };
1360
+ $5.if(node_1, ($$render) => {
1361
+ if ($5.get(field).required)
1362
+ $$render(consequent);
1363
+ });
1364
+ }
1365
+ $5.reset(label_1);
1366
+ $5.template_effect(() => {
1367
+ $5.set_attribute(label_1, "for", $$props.id);
1368
+ $5.set_attribute(label_1, "data-disabled", $5.get(field).disabled || undefined);
1369
+ $5.set_text(text, `${$$props.label ?? ""} `);
1370
+ });
1371
+ $5.append($$anchor2, label_1);
1372
+ };
1373
+ $5.if(node, ($$render) => {
1374
+ if ($$props.label)
1375
+ $$render(consequent_1);
1376
+ });
1377
+ }
1378
+ var textarea = $5.sibling(node, 2);
1379
+ $5.remove_textarea_child(textarea);
1380
+ $5.attribute_effect(textarea, ($0) => ({
1381
+ id: $$props.id,
1382
+ rows: rows(),
1383
+ disabled: $5.get(field).disabled,
1384
+ required: $5.get(field).required,
1385
+ maxlength: $$props.maxlength,
1386
+ class: $0,
1387
+ "aria-invalid": $5.get(field).ariaInvalid,
1388
+ "aria-describedby": $5.get(field).describedBy,
1389
+ ...rest
1390
+ }), [
1391
+ () => classNames("cinder-_input-frame", "cinder-textarea", $$props.class)
1392
+ ]);
1393
+ var node_2 = $5.sibling(textarea, 2);
1394
+ {
1395
+ var consequent_2 = ($$anchor2) => {
1396
+ var p = root_35();
1397
+ var text_1 = $5.child(p, true);
1398
+ $5.reset(p);
1399
+ $5.template_effect(() => {
1400
+ $5.set_attribute(p, "id", $5.get(field).ownDescriptionId);
1401
+ $5.set_text(text_1, $$props.description);
1402
+ });
1403
+ $5.append($$anchor2, p);
1404
+ };
1405
+ $5.if(node_2, ($$render) => {
1406
+ if ($$props.description)
1407
+ $$render(consequent_2);
1408
+ });
1409
+ }
1410
+ var node_3 = $5.sibling(node_2, 2);
1411
+ {
1412
+ var consequent_3 = ($$anchor2) => {
1413
+ var output = root_45();
1414
+ var text_2 = $5.child(output);
1415
+ $5.reset(output);
1416
+ $5.template_effect(() => {
1417
+ $5.set_attribute(output, "id", $5.get(countId));
1418
+ $5.set_attribute(output, "for", $$props.id);
1419
+ $5.set_text(text_2, `${$5.get(currentCount) ?? ""}/${$5.get(maximumLength) ?? ""}`);
1420
+ });
1421
+ $5.append($$anchor2, output);
1422
+ };
1423
+ $5.if(node_3, ($$render) => {
1424
+ if ($5.get(countId))
1425
+ $$render(consequent_3);
1426
+ });
1427
+ }
1428
+ var node_4 = $5.sibling(node_3, 2);
1429
+ {
1430
+ var consequent_4 = ($$anchor2) => {
1431
+ var p_1 = root_54();
1432
+ var text_3 = $5.child(p_1, true);
1433
+ $5.reset(p_1);
1434
+ $5.template_effect(() => {
1435
+ $5.set_attribute(p_1, "id", $5.get(field).ownErrorId);
1436
+ $5.set_text(text_3, $$props.error);
1437
+ });
1438
+ $5.append($$anchor2, p_1);
1439
+ };
1440
+ $5.if(node_4, ($$render) => {
1441
+ if ($$props.error)
1442
+ $$render(consequent_4);
1443
+ });
1444
+ }
1445
+ $5.reset(div);
1446
+ $5.bind_value(textarea, value);
1447
+ $5.append($$anchor, div);
1448
+ $5.pop();
1449
+ }
1450
+
1451
+ // src/components/schema-form/schema-form-model.ts
1452
+ function isRecord(value) {
1453
+ return value !== null && typeof value === "object" && !Array.isArray(value);
1454
+ }
1455
+ function createSchemaFormModel(schema) {
69
1456
  return {
70
- title: "Value",
71
- description: "This schema cannot be inspected, so the value is edited as JSON."
1457
+ field: fieldFromJsonSchema(schema, [], "value", true),
1458
+ sourceSchema: schema
72
1459
  };
73
1460
  }
74
1461
  function fieldFromJsonSchema(schema, path, key, required) {
@@ -182,8 +1569,8 @@ function defaultValueForField(field) {
182
1569
  return cloneJsonCompatible(field.schema["default"]);
183
1570
  if (field.kind === "object") {
184
1571
  const value = {};
185
- for (const child of field.fields) {
186
- value[child.key] = defaultValueForField(child);
1572
+ for (const child6 of field.fields) {
1573
+ value[child6.key] = defaultValueForField(child6);
187
1574
  }
188
1575
  return value;
189
1576
  }
@@ -212,10 +1599,10 @@ function mergeInitialValueWithFieldDefaults(field, value) {
212
1599
  const defaultValue = defaultValueForField(field);
213
1600
  const defaultRecord = isRecord(defaultValue) ? defaultValue : {};
214
1601
  const result = { ...defaultRecord };
215
- const fieldKeys = new Set(field.fields.map((child) => child.key));
216
- for (const child of field.fields) {
217
- const seededValue = Object.hasOwn(value, child.key) ? value[child.key] : defaultRecord[child.key];
218
- result[child.key] = seededValue === undefined ? defaultValueForField(child) : mergeInitialValueWithFieldDefaults(child, seededValue);
1602
+ const fieldKeys = new Set(field.fields.map((child6) => child6.key));
1603
+ for (const child6 of field.fields) {
1604
+ const seededValue = Object.hasOwn(value, child6.key) ? value[child6.key] : defaultRecord[child6.key];
1605
+ result[child6.key] = seededValue === undefined ? defaultValueForField(child6) : mergeInitialValueWithFieldDefaults(child6, seededValue);
219
1606
  }
220
1607
  for (const [key, extraValue] of Object.entries(value)) {
221
1608
  if (!fieldKeys.has(key))
@@ -281,22 +1668,22 @@ function getValueAtPath(value, path) {
281
1668
  }
282
1669
  return current;
283
1670
  }
284
- function setValueAtPath(value, path, next) {
1671
+ function setValueAtPath(value, path, next3) {
285
1672
  if (path.length === 0)
286
- return next;
1673
+ return next3;
287
1674
  const [head, ...tail] = path;
288
1675
  if (head === undefined)
289
- return next;
1676
+ return next3;
290
1677
  if (Array.isArray(value)) {
291
1678
  const copy2 = [...value];
292
1679
  const index = Number(head);
293
1680
  if (!Number.isInteger(index) || index < 0)
294
1681
  return copy2;
295
- copy2[index] = setValueAtPath(copy2[index], tail, next);
1682
+ copy2[index] = setValueAtPath(copy2[index], tail, next3);
296
1683
  return copy2;
297
1684
  }
298
1685
  const copy = isRecord(value) ? { ...value } : {};
299
- copy[head] = setValueAtPath(copy[head], tail, next);
1686
+ copy[head] = setValueAtPath(copy[head], tail, next3);
300
1687
  return copy;
301
1688
  }
302
1689
  function pruneUndefined(value) {
@@ -305,9 +1692,9 @@ function pruneUndefined(value) {
305
1692
  if (!isRecord(value))
306
1693
  return value;
307
1694
  const output = {};
308
- for (const [key, child] of Object.entries(value)) {
309
- if (child !== undefined)
310
- output[key] = pruneUndefined(child);
1695
+ for (const [key, child6] of Object.entries(value)) {
1696
+ if (child6 !== undefined)
1697
+ output[key] = pruneUndefined(child6);
311
1698
  }
312
1699
  return output;
313
1700
  }
@@ -332,39 +1719,74 @@ function rebaseFieldPath(field, path) {
332
1719
  // src/components/schema-form/schema-form-validation.ts
333
1720
  var validatorCache = new WeakMap;
334
1721
  async function validateSchemaValue(schema, value) {
335
- if (isStandardSchema(schema))
336
- return validateStandardSchemaValue(schema, value);
1722
+ if (!isRecord(schema)) {
1723
+ return validationFailure(value, "SchemaForm only accepts JSON Schema objects.");
1724
+ }
1725
+ if (isLegacyStandardSchema(schema)) {
1726
+ return validationFailure(value, "SchemaForm only accepts JSON Schema objects.");
1727
+ }
337
1728
  return validateJsonSchemaValue(schema, value);
338
1729
  }
339
- async function validateStandardSchemaValue(schema, value) {
340
- const result = await schema["~standard"].validate(value);
341
- if (!result.issues)
342
- return { valid: true, value: result.value, issues: [] };
1730
+ async function validateJsonSchemaValue(schema, value) {
1731
+ let validate;
1732
+ try {
1733
+ validate = await validatorForSchema(schema);
1734
+ } catch (error) {
1735
+ return validationFailure(value, readableSchemaError(error));
1736
+ }
1737
+ let valid;
1738
+ try {
1739
+ const result = validate(value);
1740
+ valid = isPromiseLike(result) ? (await result, true) : result;
1741
+ } catch (error) {
1742
+ if (isAjvValidationError(error)) {
1743
+ return {
1744
+ valid: false,
1745
+ value,
1746
+ issues: ajvIssues(error.errors)
1747
+ };
1748
+ }
1749
+ return validationFailure(value, readableSchemaError(error));
1750
+ }
1751
+ if (valid)
1752
+ return { valid: true, value, issues: [] };
343
1753
  return {
344
1754
  valid: false,
345
1755
  value,
346
- issues: result.issues.map((issue) => ({
347
- path: standardIssuePath(issue.path),
348
- message: issue.message
349
- }))
1756
+ issues: ajvIssues(validate.errors ?? [])
350
1757
  };
351
1758
  }
352
- async function validateJsonSchemaValue(schema, value) {
353
- const validate = await validatorForSchema(schema);
354
- const valid = validate(value);
355
- if (valid)
356
- return { valid: true, value, issues: [] };
1759
+ function validationFailure(value, message) {
357
1760
  return {
358
1761
  valid: false,
359
1762
  value,
360
- issues: ajvIssues(validate.errors ?? [])
1763
+ issues: [{ path: [], message }]
361
1764
  };
362
1765
  }
1766
+ function isLegacyStandardSchema(schema) {
1767
+ const standard = schema["~standard"];
1768
+ return isRecord(standard) && standard["version"] === 1;
1769
+ }
1770
+ function readableSchemaError(error) {
1771
+ const message = error instanceof Error ? error.message : typeof error === "string" ? error : "";
1772
+ if (message.startsWith("Invalid JSON Schema"))
1773
+ return message;
1774
+ return message === "" ? "Invalid JSON Schema." : `Invalid JSON Schema: ${message}`;
1775
+ }
1776
+ function isPromiseLike(value) {
1777
+ return isRecord(value) && typeof value["then"] === "function";
1778
+ }
1779
+ function isAjvValidationError(error) {
1780
+ return isRecord(error) && Array.isArray(error["errors"]);
1781
+ }
363
1782
  function validatorForSchema(schema) {
364
1783
  const cached = validatorCache.get(schema);
365
1784
  if (cached)
366
1785
  return cached;
367
- const promise = createValidator(schema);
1786
+ const promise = createValidator(schema).catch((error) => {
1787
+ validatorCache.delete(schema);
1788
+ throw error;
1789
+ });
368
1790
  validatorCache.set(schema, promise);
369
1791
  return promise;
370
1792
  }
@@ -391,37 +1813,32 @@ function jsonSchemaDraft(schema) {
391
1813
  return "2019-09";
392
1814
  return "2020-12";
393
1815
  }
394
- function standardIssuePath(path) {
395
- if (!path)
396
- return [];
397
- return path.map((segment) => {
398
- if (isRecord(segment) && "key" in segment)
399
- return propertyKeyPathSegment(segment.key);
400
- return propertyKeyPathSegment(segment);
401
- });
402
- }
403
- function propertyKeyPathSegment(value) {
404
- if (typeof value === "string")
405
- return value;
406
- if (typeof value === "number" || typeof value === "boolean" || typeof value === "bigint") {
407
- return String(value);
408
- }
409
- if (typeof value === "symbol")
410
- return value.description ?? value.toString();
411
- if (value === null || value === undefined)
412
- return "";
413
- try {
414
- return JSON.stringify(value) ?? "";
415
- } catch {
416
- return "";
417
- }
418
- }
419
1816
  function ajvIssues(errors) {
420
1817
  return errors.map((error) => ({
421
1818
  path: ajvErrorPath(error),
422
- message: error.message ?? "Invalid value"
1819
+ message: readableAjvMessage(error)
423
1820
  }));
424
1821
  }
1822
+ function readableAjvMessage(error) {
1823
+ const fieldName = ajvErrorPath(error).at(-1) ?? "Value";
1824
+ const label = humanizeFieldName(fieldName);
1825
+ if (error.keyword === "required")
1826
+ return `${label} is required.`;
1827
+ if (error.keyword === "minLength")
1828
+ return `${label} is too short.`;
1829
+ if (error.keyword === "maxLength")
1830
+ return `${label} is too long.`;
1831
+ if (error.keyword === "minimum")
1832
+ return `${label} must be at least ${error.params?.["limit"]}.`;
1833
+ if (error.keyword === "maximum")
1834
+ return `${label} must be at most ${error.params?.["limit"]}.`;
1835
+ if (error.keyword === "type")
1836
+ return `${label} must be ${error.params?.["type"]}.`;
1837
+ return error.message ?? "Invalid value";
1838
+ }
1839
+ function humanizeFieldName(name) {
1840
+ return name.replace(/[_-]+/g, " ").replace(/([a-z])([A-Z])/g, "$1 $2").replace(/^./, (character) => character.toUpperCase());
1841
+ }
425
1842
  function ajvErrorPath(error) {
426
1843
  const parentPath = jsonPointerToPath(error.instancePath);
427
1844
  if (error.keyword !== "required" || !isRecord(error.params))
@@ -492,293 +1909,293 @@ function readSchemaFormData(formData, name = "value") {
492
1909
  }
493
1910
  }
494
1911
 
495
- // src/components/schema-form/schema-form.svelte
496
- var fieldLabel2 = ($$anchor, field = $.noop) => {
497
- var fragment = root_1();
498
- var span = $.first_child(fragment);
499
- var text = $.child(span, true);
500
- $.reset(span);
501
- var node = $.sibling(span, 2);
502
- {
503
- var consequent = ($$anchor2) => {
504
- var span_1 = root_2();
505
- $.append($$anchor2, span_1);
506
- };
507
- $.if(node, ($$render) => {
508
- if (field().required)
509
- $$render(consequent);
510
- });
511
- }
512
- $.template_effect(() => $.set_text(text, field().label));
513
- $.append($$anchor, fragment);
514
- };
515
- var root_2 = $.from_html(`<span class="cinder-schema-form__required" aria-hidden="true">*</span>`);
516
- var root_1 = $.from_html(`<span> </span> <!>`, 1);
517
- var root_4 = $.from_html(`<p class="cinder-schema-form__description"> </p>`);
518
- var root_5 = $.from_html(`<p class="cinder-schema-form__error" aria-live="polite" tabindex="-1"> </p>`);
519
- var root_3 = $.from_html(`<!> <!>`, 1);
520
- var root_7 = $.from_html(`<fieldset class="cinder-schema-form__fieldset"><legend class="cinder-schema-form__legend"><!></legend> <!> <div class="cinder-schema-form__fields"></div></fieldset>`);
521
- var root_10 = $.from_html(`<div class="cinder-schema-form__array-item"><!> <button type="button" class="cinder-schema-form__secondary-button">Remove</button></div>`);
522
- var root_9 = $.from_html(`<fieldset class="cinder-schema-form__fieldset"><legend class="cinder-schema-form__legend"><!></legend> <!> <div class="cinder-schema-form__array"></div> <button type="button" class="cinder-schema-form__secondary-button"> </button></fieldset>`);
523
- var root_12 = $.from_html(`<div class="cinder-schema-form__field"><button type="button" role="switch" class="cinder-schema-form__switch"><span class="cinder-schema-form__switch-thumb" aria-hidden="true"></span> <span class="cinder-schema-form__switch-label"><!></span></button> <!></div>`);
524
- var root_14 = $.from_html(`<input class="cinder-_input-frame cinder-schema-form__control"/>`);
525
- var root_15 = $.from_html(`<input class="cinder-_input-frame cinder-schema-form__control" type="number"/>`);
526
- var root_17 = $.from_html(`<option> </option>`);
527
- var root_16 = $.from_html(`<select class="cinder-_input-frame cinder-schema-form__control"></select>`);
528
- var root_18 = $.from_html(`<textarea class="cinder-_input-frame cinder-schema-form__control cinder-schema-form__json-control" rows="6" spellcheck="false"></textarea>`);
529
- var root_13 = $.from_html(`<div class="cinder-schema-form__field"><label class="cinder-schema-form__label"><!></label> <!> <!></div>`);
530
- var root_19 = $.from_html(`<p class="cinder-schema-form__error" aria-live="polite" tabindex="-1"> </p>`);
531
- var root = $.from_html(`<form><!> <div class="cinder-schema-form__fields"></div> <input type="hidden"/> <button type="submit" class="cinder-schema-form__submit"> </button></form>`);
532
- function Schema_form($$anchor, $$props) {
533
- const generatedId = $.props_id();
534
- $.push($$props, true);
535
- const fieldMessages = ($$anchor2, field = $.noop) => {
536
- var fragment_1 = root_3();
537
- var node_1 = $.first_child(fragment_1);
1912
+ // src/components/schema-form/schema-form-body.svelte
1913
+ var root_26 = $6.from_html(`<span class="cinder-_required-marker" aria-hidden="true">*</span>`);
1914
+ var root_36 = $6.from_html(`<p class="cinder-schema-form__description"> </p>`);
1915
+ var root_46 = $6.from_html(`<p class="cinder-schema-form__error" aria-live="polite" tabindex="-1"> </p>`);
1916
+ var root_16 = $6.from_html(`<legend class="cinder-schema-form__legend"> <!></legend> <!> <!>`, 1);
1917
+ var root_64 = $6.from_html(`<fieldset class="cinder-schema-form__fieldset"><!> <div class="cinder-schema-form__fields"></div></fieldset>`);
1918
+ var root_9 = $6.from_html(`<div class="cinder-schema-form__array-item"><!> <button type="button" class="cinder-schema-form__secondary-button">Remove</button></div>`);
1919
+ var root_82 = $6.from_html(`<fieldset class="cinder-schema-form__fieldset"><!> <div class="cinder-schema-form__array"></div> <button type="button" class="cinder-schema-form__secondary-button"> </button></fieldset>`);
1920
+ var root_112 = $6.from_html(`<div class="cinder-schema-form__field"><!></div>`);
1921
+ var root_17 = $6.from_html(`<p class="cinder-schema-form__error" role="alert" aria-live="polite" tabindex="-1"> </p>`);
1922
+ var root6 = $6.from_html(`<form><!> <div class="cinder-schema-form__fields"></div> <input type="hidden"/> <button type="submit" class="cinder-schema-form__submit"> </button></form>`);
1923
+ function Schema_form_body($$anchor, $$props) {
1924
+ const generatedId = $6.props_id();
1925
+ $6.push($$props, true);
1926
+ const groupLegend = ($$anchor2, field = $6.noop) => {
1927
+ var fragment = root_16();
1928
+ var legend = $6.first_child(fragment);
1929
+ var text = $6.child(legend);
1930
+ var node = $6.sibling(text);
1931
+ {
1932
+ var consequent = ($$anchor3) => {
1933
+ var span = root_26();
1934
+ $6.append($$anchor3, span);
1935
+ };
1936
+ $6.if(node, ($$render) => {
1937
+ if (field().required)
1938
+ $$render(consequent);
1939
+ });
1940
+ }
1941
+ $6.reset(legend);
1942
+ var node_1 = $6.sibling(legend, 2);
538
1943
  {
539
1944
  var consequent_1 = ($$anchor3) => {
540
- var p = root_4();
541
- var text_1 = $.child(p, true);
542
- $.reset(p);
543
- $.template_effect(($0) => {
544
- $.set_attribute(p, "id", `${$0 ?? ""}-description`);
545
- $.set_text(text_1, field().description);
1945
+ var p = root_36();
1946
+ var text_1 = $6.child(p, true);
1947
+ $6.reset(p);
1948
+ $6.template_effect(($0) => {
1949
+ $6.set_attribute(p, "id", `${$0 ?? ""}-description`);
1950
+ $6.set_text(text_1, field().description);
546
1951
  }, [() => fieldDomId(field())]);
547
- $.append($$anchor3, p);
1952
+ $6.append($$anchor3, p);
548
1953
  };
549
- $.if(node_1, ($$render) => {
1954
+ $6.if(node_1, ($$render) => {
550
1955
  if (field().description)
551
1956
  $$render(consequent_1);
552
1957
  });
553
1958
  }
554
- var node_2 = $.sibling(node_1, 2);
1959
+ var node_2 = $6.sibling(node_1, 2);
555
1960
  {
556
1961
  var consequent_2 = ($$anchor3) => {
557
- var p_1 = root_5();
558
- var text_2 = $.child(p_1, true);
559
- $.reset(p_1);
560
- $.template_effect(($0, $1) => {
561
- $.set_attribute(p_1, "id", `${$0 ?? ""}-error`);
562
- $.set_text(text_2, $1);
1962
+ var p_1 = root_46();
1963
+ var text_2 = $6.child(p_1, true);
1964
+ $6.reset(p_1);
1965
+ $6.template_effect(($0, $1) => {
1966
+ $6.set_attribute(p_1, "id", `${$0 ?? ""}-error`);
1967
+ $6.set_text(text_2, $1);
563
1968
  }, [() => fieldDomId(field()), () => fieldError(field())]);
564
- $.append($$anchor3, p_1);
1969
+ $6.append($$anchor3, p_1);
565
1970
  };
566
- var d = $.derived(() => fieldError(field()));
567
- $.if(node_2, ($$render) => {
568
- if ($.get(d))
1971
+ var d = $6.derived(() => fieldError(field()));
1972
+ $6.if(node_2, ($$render) => {
1973
+ if ($6.get(d))
569
1974
  $$render(consequent_2);
570
1975
  });
571
1976
  }
572
- $.append($$anchor2, fragment_1);
1977
+ $6.template_effect(() => $6.set_text(text, `${field().label ?? ""} `));
1978
+ $6.append($$anchor2, fragment);
573
1979
  };
574
- const renderField = ($$anchor2, field = $.noop) => {
575
- const id = $.derived(() => fieldDomId(field()));
576
- const error = $.derived(() => fieldError(field()));
577
- const ariaDescribedBy = $.derived(() => describedBy(field()));
578
- var fragment_2 = $.comment();
579
- var node_3 = $.first_child(fragment_2);
1980
+ const renderField = ($$anchor2, field = $6.noop) => {
1981
+ const id = $6.derived(() => fieldDomId(field()));
1982
+ const error = $6.derived(() => fieldError(field()));
1983
+ const labelledProps = $6.derived(() => ({
1984
+ label: field().label,
1985
+ ...field().description !== undefined ? { description: field().description } : {},
1986
+ ...$6.get(error) !== undefined ? { error: $6.get(error) } : {}
1987
+ }));
1988
+ var fragment_1 = $6.comment();
1989
+ var node_3 = $6.first_child(fragment_1);
580
1990
  {
581
1991
  var consequent_3 = ($$anchor3) => {
582
- var fieldset = root_7();
583
- var legend = $.child(fieldset);
584
- var node_4 = $.child(legend);
585
- fieldLabel2(node_4, field);
586
- $.reset(legend);
587
- var node_5 = $.sibling(legend, 2);
588
- fieldMessages(node_5, field);
589
- var div = $.sibling(node_5, 2);
590
- $.each(div, 21, () => field().fields, (child2) => pathKey(child2.path), ($$anchor4, child2) => {
591
- renderField($$anchor4, () => $.get(child2));
1992
+ var fieldset = root_64();
1993
+ var node_4 = $6.child(fieldset);
1994
+ groupLegend(node_4, field);
1995
+ var div = $6.sibling(node_4, 2);
1996
+ $6.each(div, 21, () => field().fields, (child7) => pathKey(child7.path), ($$anchor4, child7) => {
1997
+ renderField($$anchor4, () => $6.get(child7));
592
1998
  });
593
- $.reset(div);
594
- $.reset(fieldset);
595
- $.append($$anchor3, fieldset);
1999
+ $6.reset(div);
2000
+ $6.reset(fieldset);
2001
+ $6.append($$anchor3, fieldset);
596
2002
  };
597
2003
  var consequent_5 = ($$anchor3) => {
598
- var fieldset_1 = root_9();
599
- var legend_1 = $.child(fieldset_1);
600
- var node_6 = $.child(legend_1);
601
- fieldLabel2(node_6, field);
602
- $.reset(legend_1);
603
- var node_7 = $.sibling(legend_1, 2);
604
- fieldMessages(node_7, field);
605
- var div_1 = $.sibling(node_7, 2);
606
- $.each(div_1, 21, () => arrayRows(field()), (row) => row.key, ($$anchor4, row) => {
607
- const itemField = $.derived(() => field().item ? rebaseFieldPath(field().item, [...field().path, String($.get(row).index)]) : undefined);
608
- var div_2 = root_10();
609
- var node_8 = $.child(div_2);
2004
+ var fieldset_1 = root_82();
2005
+ var node_5 = $6.child(fieldset_1);
2006
+ groupLegend(node_5, field);
2007
+ var div_1 = $6.sibling(node_5, 2);
2008
+ $6.each(div_1, 21, () => arrayRows(field()), (row) => row.key, ($$anchor4, row) => {
2009
+ const itemField = $6.derived(() => field().item ? rebaseFieldPath(field().item, [...field().path, String($6.get(row).index)]) : undefined);
2010
+ var div_2 = root_9();
2011
+ var node_6 = $6.child(div_2);
610
2012
  {
611
2013
  var consequent_4 = ($$anchor5) => {
612
- renderField($$anchor5, () => $.get(itemField));
2014
+ renderField($$anchor5, () => $6.get(itemField));
613
2015
  };
614
- $.if(node_8, ($$render) => {
615
- if ($.get(itemField))
2016
+ $6.if(node_6, ($$render) => {
2017
+ if ($6.get(itemField))
616
2018
  $$render(consequent_4);
617
2019
  });
618
2020
  }
619
- var button = $.sibling(node_8, 2);
620
- $.reset(div_2);
621
- $.template_effect(() => {
622
- $.set_attribute(button, "aria-label", `Remove ${field().label} item ${$.get(row).index + 1}`);
623
- button.disabled = $.get(submitting);
2021
+ var button = $6.sibling(node_6, 2);
2022
+ $6.reset(div_2);
2023
+ $6.template_effect(() => {
2024
+ $6.set_attribute(button, "aria-label", `Remove ${field().label} item ${$6.get(row).index + 1}`);
2025
+ button.disabled = $6.get(submitting);
624
2026
  });
625
- $.delegated("click", button, () => removeArrayItem(field(), $.get(row).index));
626
- $.append($$anchor4, div_2);
2027
+ $6.delegated("click", button, () => removeArrayItem(field(), $6.get(row).index));
2028
+ $6.append($$anchor4, div_2);
627
2029
  });
628
- $.reset(div_1);
629
- var button_1 = $.sibling(div_1, 2);
630
- var text_3 = $.child(button_1);
631
- $.reset(button_1);
632
- $.reset(fieldset_1);
633
- $.template_effect(($0) => {
634
- $.set_attribute(div_1, "data-cinder-empty", $0);
635
- button_1.disabled = $.get(submitting);
636
- $.set_text(text_3, `Add ${field().label ?? ""}`);
2030
+ $6.reset(div_1);
2031
+ var button_1 = $6.sibling(div_1, 2);
2032
+ var text_3 = $6.child(button_1);
2033
+ $6.reset(button_1);
2034
+ $6.reset(fieldset_1);
2035
+ $6.template_effect(($0) => {
2036
+ $6.set_attribute(div_1, "data-cinder-empty", $0);
2037
+ button_1.disabled = $6.get(submitting);
2038
+ $6.set_text(text_3, `Add ${field().label ?? ""}`);
637
2039
  }, [() => arrayRows(field()).length === 0 || undefined]);
638
- $.delegated("click", button_1, () => addArrayItem(field()));
639
- $.append($$anchor3, fieldset_1);
640
- };
641
- var consequent_6 = ($$anchor3) => {
642
- var div_3 = root_12();
643
- var button_2 = $.child(div_3);
644
- var span_2 = $.sibling($.child(button_2), 2);
645
- var node_9 = $.child(span_2);
646
- fieldLabel2(node_9, field);
647
- $.reset(span_2);
648
- $.reset(button_2);
649
- var node_10 = $.sibling(button_2, 2);
650
- fieldMessages(node_10, field);
651
- $.reset(div_3);
652
- $.template_effect(($0, $1) => {
653
- $.set_attribute(button_2, "id", $.get(id));
654
- $.set_attribute(button_2, "aria-checked", $0);
655
- $.set_attribute(button_2, "aria-required", field().required ? "true" : undefined);
656
- $.set_attribute(button_2, "aria-describedby", $.get(ariaDescribedBy));
657
- $.set_attribute(button_2, "aria-invalid", $.get(error) ? "true" : undefined);
658
- $.set_attribute(button_2, "data-cinder-checked", $1);
659
- $.set_attribute(button_2, "data-cinder-invalid", $.get(error) ? "true" : undefined);
660
- button_2.disabled = $.get(submitting);
661
- }, [
662
- () => booleanValue(field()),
663
- () => booleanValue(field()) || undefined
664
- ]);
665
- $.delegated("click", button_2, () => toggleSwitch(field()));
666
- $.delegated("keydown", button_2, (event) => handleSwitchKeydown(field(), event));
667
- $.append($$anchor3, div_3);
2040
+ $6.delegated("click", button_1, () => addArrayItem(field()));
2041
+ $6.append($$anchor3, fieldset_1);
668
2042
  };
669
2043
  var alternate_1 = ($$anchor3) => {
670
- var div_4 = root_13();
671
- var label = $.child(div_4);
672
- var node_11 = $.child(label);
673
- fieldLabel2(node_11, field);
674
- $.reset(label);
675
- var node_12 = $.sibling(label, 2);
2044
+ var div_3 = root_112();
2045
+ var node_7 = $6.child(div_3);
676
2046
  {
2047
+ var consequent_6 = ($$anchor4) => {
2048
+ var bind_get = () => stringValue(field());
2049
+ var bind_set = (next3) => updateValue(field().path, next3);
2050
+ Input($$anchor4, $6.spread_props({
2051
+ get id() {
2052
+ return $6.get(id);
2053
+ }
2054
+ }, () => $6.get(labelledProps), {
2055
+ get required() {
2056
+ return field().required;
2057
+ },
2058
+ get disabled() {
2059
+ return $6.get(submitting);
2060
+ },
2061
+ onblur: () => validateTouchedField(field()),
2062
+ get value() {
2063
+ return bind_get();
2064
+ },
2065
+ set value($$value) {
2066
+ bind_set($$value);
2067
+ }
2068
+ }));
2069
+ };
677
2070
  var consequent_7 = ($$anchor4) => {
678
- var input_1 = root_14();
679
- $.remove_input_defaults(input_1);
680
- $.template_effect(($0) => {
681
- $.set_attribute(input_1, "id", $.get(id));
682
- $.set_value(input_1, $0);
683
- input_1.required = field().required;
684
- input_1.disabled = $.get(submitting);
685
- $.set_attribute(input_1, "aria-describedby", $.get(ariaDescribedBy));
686
- $.set_attribute(input_1, "aria-invalid", $.get(error) ? "true" : undefined);
687
- }, [() => stringValue(field())]);
688
- $.delegated("input", input_1, (event) => updateString(field(), event));
689
- $.append($$anchor4, input_1);
2071
+ var bind_get_1 = () => numberFieldValue(field());
2072
+ var bind_set_1 = (next3) => updateValue(field().path, next3 ?? undefined);
2073
+ {
2074
+ let $0 = $6.derived(() => field().kind === "integer" ? 1 : undefined);
2075
+ Number_input($$anchor4, $6.spread_props({
2076
+ get id() {
2077
+ return $6.get(id);
2078
+ }
2079
+ }, () => $6.get(labelledProps), {
2080
+ get required() {
2081
+ return field().required;
2082
+ },
2083
+ get disabled() {
2084
+ return $6.get(submitting);
2085
+ },
2086
+ get step() {
2087
+ return $6.get($0);
2088
+ },
2089
+ onblur: () => validateTouchedField(field()),
2090
+ get value() {
2091
+ return bind_get_1();
2092
+ },
2093
+ set value($$value) {
2094
+ bind_set_1($$value);
2095
+ }
2096
+ }));
2097
+ }
690
2098
  };
691
2099
  var consequent_8 = ($$anchor4) => {
692
- var input_2 = root_15();
693
- $.remove_input_defaults(input_2);
694
- $.template_effect(($0) => {
695
- $.set_attribute(input_2, "id", $.get(id));
696
- $.set_attribute(input_2, "step", field().kind === "integer" ? "1" : "any");
697
- $.set_value(input_2, $0);
698
- input_2.required = field().required;
699
- input_2.disabled = $.get(submitting);
700
- $.set_attribute(input_2, "aria-describedby", $.get(ariaDescribedBy));
701
- $.set_attribute(input_2, "aria-invalid", $.get(error) ? "true" : undefined);
702
- }, [() => numberInputValue(field())]);
703
- $.delegated("input", input_2, (event) => updateNumber(field(), event));
704
- $.append($$anchor4, input_2);
2100
+ {
2101
+ let $0 = $6.derived(() => selectOptions(field()));
2102
+ let $1 = $6.derived(() => enumValue(field()));
2103
+ Select($$anchor4, $6.spread_props({
2104
+ get id() {
2105
+ return $6.get(id);
2106
+ }
2107
+ }, () => $6.get(labelledProps), {
2108
+ get required() {
2109
+ return field().required;
2110
+ },
2111
+ get disabled() {
2112
+ return $6.get(submitting);
2113
+ },
2114
+ get options() {
2115
+ return $6.get($0);
2116
+ },
2117
+ get value() {
2118
+ return $6.get($1);
2119
+ },
2120
+ onchange: (event) => updateEnum(field(), event),
2121
+ onblur: () => validateTouchedField(field())
2122
+ }));
2123
+ }
705
2124
  };
706
2125
  var consequent_9 = ($$anchor4) => {
707
- var select_1 = root_16();
708
- $.each(select_1, 21, () => field().options, (option) => option.encodedValue, ($$anchor5, option) => {
709
- var option_1 = root_17();
710
- var text_4 = $.child(option_1, true);
711
- $.reset(option_1);
712
- var option_1_value = {};
713
- $.template_effect(() => {
714
- $.set_text(text_4, $.get(option).label);
715
- if (option_1_value !== (option_1_value = $.get(option).encodedValue)) {
716
- option_1.value = (option_1.__value = $.get(option).encodedValue) ?? "";
717
- }
718
- });
719
- $.append($$anchor5, option_1);
720
- });
721
- $.reset(select_1);
722
- var select_1_value;
723
- $.init_select(select_1);
724
- $.template_effect(($0) => {
725
- $.set_attribute(select_1, "id", $.get(id));
726
- select_1.required = field().required;
727
- select_1.disabled = $.get(submitting);
728
- $.set_attribute(select_1, "aria-describedby", $.get(ariaDescribedBy));
729
- $.set_attribute(select_1, "aria-invalid", $.get(error) ? "true" : undefined);
730
- if (select_1_value !== (select_1_value = $0)) {
731
- select_1.value = (select_1.__value = $0) ?? "", $.select_option(select_1, $0);
2126
+ var bind_get_2 = () => booleanValue(field());
2127
+ var bind_set_2 = (next3) => updateValue(field().path, next3);
2128
+ Checkbox($$anchor4, $6.spread_props({
2129
+ get id() {
2130
+ return $6.get(id);
2131
+ }
2132
+ }, () => $6.get(labelledProps), {
2133
+ get disabled() {
2134
+ return $6.get(submitting);
2135
+ },
2136
+ get checked() {
2137
+ return bind_get_2();
2138
+ },
2139
+ set checked($$value) {
2140
+ bind_set_2($$value);
732
2141
  }
733
- }, [() => enumValue(field())]);
734
- $.delegated("change", select_1, (event) => updateEnum(field(), event));
735
- $.append($$anchor4, select_1);
2142
+ }));
736
2143
  };
737
2144
  var alternate = ($$anchor4) => {
738
- var textarea_1 = root_18();
739
- $.remove_textarea_child(textarea_1);
740
- $.template_effect(($0) => {
741
- $.set_attribute(textarea_1, "id", $.get(id));
742
- $.set_value(textarea_1, $0);
743
- textarea_1.required = field().required;
744
- textarea_1.disabled = $.get(submitting);
745
- $.set_attribute(textarea_1, "aria-describedby", $.get(ariaDescribedBy));
746
- $.set_attribute(textarea_1, "aria-invalid", $.get(error) ? "true" : undefined);
747
- }, [() => rawJsonValue(field())]);
748
- $.delegated("input", textarea_1, (event) => updateRawJson(field(), event));
749
- $.append($$anchor4, textarea_1);
2145
+ var bind_get_3 = () => rawJsonValue(field());
2146
+ var bind_set_3 = (next3) => updateRawJsonValue(field(), next3);
2147
+ Textarea($$anchor4, $6.spread_props({
2148
+ get id() {
2149
+ return $6.get(id);
2150
+ }
2151
+ }, () => $6.get(labelledProps), {
2152
+ get required() {
2153
+ return field().required;
2154
+ },
2155
+ get disabled() {
2156
+ return $6.get(submitting);
2157
+ },
2158
+ rows: 6,
2159
+ spellcheck: false,
2160
+ class: "cinder-schema-form__json-control",
2161
+ onblur: () => validateTouchedField(field()),
2162
+ get value() {
2163
+ return bind_get_3();
2164
+ },
2165
+ set value($$value) {
2166
+ bind_set_3($$value);
2167
+ }
2168
+ }));
750
2169
  };
751
- $.if(node_12, ($$render) => {
2170
+ $6.if(node_7, ($$render) => {
752
2171
  if (field().kind === "string")
753
- $$render(consequent_7);
2172
+ $$render(consequent_6);
754
2173
  else if (field().kind === "number" || field().kind === "integer")
755
- $$render(consequent_8, 1);
2174
+ $$render(consequent_7, 1);
756
2175
  else if (field().kind === "enum")
757
- $$render(consequent_9, 2);
2176
+ $$render(consequent_8, 2);
2177
+ else if (field().kind === "boolean")
2178
+ $$render(consequent_9, 3);
758
2179
  else
759
2180
  $$render(alternate, -1);
760
2181
  });
761
2182
  }
762
- var node_13 = $.sibling(node_12, 2);
763
- fieldMessages(node_13, field);
764
- $.reset(div_4);
765
- $.template_effect(() => $.set_attribute(label, "for", $.get(id)));
766
- $.append($$anchor3, div_4);
2183
+ $6.reset(div_3);
2184
+ $6.delegated("input", div_3, () => bumpTouchedValidationSequence(field().path));
2185
+ $6.append($$anchor3, div_3);
767
2186
  };
768
- $.if(node_3, ($$render) => {
2187
+ $6.if(node_3, ($$render) => {
769
2188
  if (field().kind === "object")
770
2189
  $$render(consequent_3);
771
2190
  else if (field().kind === "array")
772
2191
  $$render(consequent_5, 1);
773
- else if (field().kind === "boolean")
774
- $$render(consequent_6, 2);
775
2192
  else
776
2193
  $$render(alternate_1, -1);
777
2194
  });
778
2195
  }
779
- $.append($$anchor2, fragment_2);
2196
+ $6.append($$anchor2, fragment_1);
780
2197
  };
781
- let name = $.prop($$props, "name", 3, "value"), submitLabel = $.prop($$props, "submitLabel", 3, "Submit"), rest = $.rest_props($$props, [
2198
+ let name = $6.prop($$props, "name", 3, "value"), submitLabel = $6.prop($$props, "submitLabel", 3, "Submit"), rest = $6.rest_props($$props, [
782
2199
  "$$slots",
783
2200
  "$$events",
784
2201
  "$$legacy",
@@ -790,196 +2207,206 @@ function Schema_form($$anchor, $$props) {
790
2207
  "onsubmit",
791
2208
  "novalidate"
792
2209
  ]);
793
- const model = $.derived(() => createSchemaFormModel($$props.schema));
794
- let formElement = $.state(undefined);
795
- let serializedInputElement = $.state(undefined);
796
- let formValue = $.state(undefined);
797
- let errors = $.state($.proxy({}));
798
- let rawDrafts = $.state($.proxy({}));
799
- let serializedValue = $.state("");
800
- let submitting = $.state(false);
2210
+ const initialModel = createSchemaFormModel($$props.schema);
2211
+ const initialFormValue = initialValueForField(initialModel.field, $$props.value);
2212
+ const model = $6.derived(() => createSchemaFormModel($$props.schema));
2213
+ let formElement = $6.state(undefined);
2214
+ let serializedInputElement = $6.state(undefined);
2215
+ let formValue = $6.state($6.proxy(initialFormValue));
2216
+ let errors = $6.state($6.proxy({}));
2217
+ let rawDrafts = $6.state($6.proxy(seedRawDrafts(initialModel.field, initialFormValue)));
2218
+ let touchedValidationSequences = $6.state($6.proxy({}));
2219
+ let serializedValue = $6.state("");
2220
+ let submitting = $6.state(false);
801
2221
  let allowNativeSubmit = false;
802
2222
  let activeSubmitId = 0;
803
2223
  let arrayKeyCounter = 0;
804
- let arrayKeys = $.state($.proxy({}));
805
- const formId = $.derived(() => $$props.id ?? `${generatedId}-form`);
806
- const rootFields = $.derived(() => $.get(model).field.kind === "object" ? $.get(model).field.fields : [$.get(model).field]);
807
- const rootError = $.derived(() => $.get(model).field.kind === "object" ? $.get(errors)[pathKey([])] : undefined);
808
- const rootErrorId = $.derived(() => `${$.get(formId)}-${pathId([])}-error`);
809
- $.user_effect(() => {
810
- const nextValue = initialValueForField($.get(model).field, $$props.value);
811
- $.set(formValue, nextValue, true);
812
- $.set(errors, {}, true);
813
- setSerializedValue("");
814
- $.set(rawDrafts, seedRawDrafts($.get(model).field, nextValue), true);
815
- $.set(arrayKeys, seedArrayKeys($.get(model).field, nextValue), true);
816
- });
2224
+ let arrayKeys = $6.state($6.proxy(seedArrayKeys(initialModel.field, initialFormValue)));
2225
+ const formId = $6.derived(() => $$props.id ?? `${generatedId}-form`);
2226
+ const rootFields = $6.derived(() => $6.get(model).field.kind === "object" ? $6.get(model).field.fields : [$6.get(model).field]);
2227
+ const rootError = $6.derived(() => $6.get(model).field.kind === "object" ? $6.get(errors)[pathKey([])] : undefined);
2228
+ const rootErrorId = $6.derived(() => `${$6.get(formId)}-${pathId([])}-error`);
817
2229
  function fieldDomId(field) {
818
- return `${$.get(formId)}-${pathId(field.path)}`;
2230
+ return `${$6.get(formId)}-${pathId(field.path)}`;
819
2231
  }
820
2232
  function fieldError(field) {
821
- return $.get(errors)[pathKey(field.path)];
822
- }
823
- function describedBy(field) {
824
- const ids = [];
825
- if (field.description)
826
- ids.push(`${fieldDomId(field)}-description`);
827
- if (fieldError(field))
828
- ids.push(`${fieldDomId(field)}-error`);
829
- return ids.length > 0 ? ids.join(" ") : undefined;
2233
+ return $6.get(errors)[pathKey(field.path)];
830
2234
  }
831
2235
  function stringValue(field) {
832
- const current = getValueAtPath($.get(formValue), field.path);
2236
+ const current = getValueAtPath($6.get(formValue), field.path);
833
2237
  return current === undefined || current === null ? "" : String(current);
834
2238
  }
835
2239
  function numberValue(field) {
836
- const current = getValueAtPath($.get(formValue), field.path);
2240
+ const current = getValueAtPath($6.get(formValue), field.path);
837
2241
  return typeof current === "number" ? current : undefined;
838
2242
  }
839
- function numberInputValue(field) {
840
- const current = numberValue(field);
841
- return current === undefined ? "" : String(current);
842
- }
843
2243
  function booleanValue(field) {
844
- return getValueAtPath($.get(formValue), field.path) === true;
2244
+ return getValueAtPath($6.get(formValue), field.path) === true;
845
2245
  }
846
2246
  function enumValue(field) {
847
- const current = getValueAtPath($.get(formValue), field.path);
2247
+ const current = getValueAtPath($6.get(formValue), field.path);
848
2248
  const option = field.options.find((candidate) => Object.is(candidate.value, current));
849
2249
  return option?.encodedValue ?? field.options[0]?.encodedValue ?? "";
850
2250
  }
2251
+ function selectOptions(field) {
2252
+ return field.options.map((option) => ({ value: option.encodedValue, label: option.label }));
2253
+ }
2254
+ function numberFieldValue(field) {
2255
+ return numberValue(field) ?? null;
2256
+ }
851
2257
  function rawJsonValue(field) {
852
2258
  const key = pathKey(field.path);
853
- if ($.get(rawDrafts)[key] !== undefined)
854
- return $.get(rawDrafts)[key];
855
- return JSON.stringify(getValueAtPath($.get(formValue), field.path) ?? null, null, 2);
2259
+ if ($6.get(rawDrafts)[key] !== undefined)
2260
+ return $6.get(rawDrafts)[key];
2261
+ return JSON.stringify(getValueAtPath($6.get(formValue), field.path) ?? null, null, 2);
2262
+ }
2263
+ function bumpTouchedValidationSequence(path) {
2264
+ const key = pathKey(path);
2265
+ $6.set(touchedValidationSequences, {
2266
+ ...$6.get(touchedValidationSequences),
2267
+ [key]: ($6.get(touchedValidationSequences)[key] ?? 0) + 1
2268
+ }, true);
856
2269
  }
857
- function updateValue(path, next) {
858
- if ($.get(submitting))
2270
+ function updateValue(path, next3) {
2271
+ if ($6.get(submitting))
859
2272
  return;
860
- $.set(formValue, setValueAtPath($.get(formValue), path, next), true);
2273
+ $6.set(formValue, setValueAtPath($6.get(formValue), path, next3), true);
861
2274
  const key = pathKey(path);
862
- if ($.get(errors)[key]) {
863
- const { [key]: _removed, ...remaining } = $.get(errors);
864
- $.set(errors, remaining, true);
2275
+ bumpTouchedValidationSequence(path);
2276
+ if ($6.get(errors)[key]) {
2277
+ const { [key]: _removed, ...remaining } = $6.get(errors);
2278
+ $6.set(errors, remaining, true);
865
2279
  }
866
2280
  setSerializedValue("");
867
2281
  }
868
- function setSerializedValue(next) {
869
- $.set(serializedValue, next, true);
870
- if ($.get(serializedInputElement))
871
- $.get(serializedInputElement).value = next;
872
- }
873
- function updateString(field, event) {
874
- const input = event.currentTarget;
875
- if ($.get(submitting)) {
876
- input.value = stringValue(field);
2282
+ async function validateTouchedField(field) {
2283
+ if ($6.get(submitting))
2284
+ return;
2285
+ const fieldKey = pathKey(field.path);
2286
+ const sequence = ($6.get(touchedValidationSequences)[fieldKey] ?? 0) + 1;
2287
+ $6.set(touchedValidationSequences, { ...$6.get(touchedValidationSequences), [fieldKey]: sequence }, true);
2288
+ const raw = rawJsonIssues();
2289
+ const rawIssue = raw.issues.find((candidateIssue) => {
2290
+ const candidateKey = pathKey(candidateIssue.path);
2291
+ return candidateKey === fieldKey || candidateKey.startsWith(`${fieldKey}/`);
2292
+ });
2293
+ if (rawIssue) {
2294
+ $6.set(errors, { ...$6.get(errors), [fieldKey]: rawIssue.message }, true);
877
2295
  return;
878
2296
  }
879
- updateValue(field.path, input.value);
880
- }
881
- function updateNumber(field, event) {
882
- const input = event.currentTarget;
883
- if ($.get(submitting)) {
884
- input.value = numberInputValue(field);
2297
+ const candidate = pruneUndefined(raw.value);
2298
+ const result = await validateSchemaValue($$props.schema, candidate);
2299
+ if ($6.get(touchedValidationSequences)[fieldKey] !== sequence)
2300
+ return;
2301
+ const issue = (result.valid ? [] : result.issues).find((candidateIssue) => {
2302
+ const candidateKey = pathKey(candidateIssue.path);
2303
+ return candidateKey === fieldKey || candidateKey.startsWith(`${fieldKey}/`);
2304
+ });
2305
+ if (issue) {
2306
+ $6.set(errors, { ...$6.get(errors), [fieldKey]: issue.message }, true);
885
2307
  return;
886
2308
  }
887
- const raw = input.value;
888
- updateValue(field.path, raw === "" ? undefined : Number(raw));
2309
+ if ($6.get(errors)[fieldKey]) {
2310
+ const { [fieldKey]: _removed, ...remaining } = $6.get(errors);
2311
+ $6.set(errors, remaining, true);
2312
+ }
889
2313
  }
890
- function updateBoolean(field, checked) {
891
- updateValue(field.path, checked);
2314
+ function setSerializedValue(next3) {
2315
+ $6.set(serializedValue, next3, true);
2316
+ if ($6.get(serializedInputElement))
2317
+ $6.get(serializedInputElement).value = next3;
892
2318
  }
893
2319
  function updateEnum(field, event) {
894
- const select = event.currentTarget;
895
- if ($.get(submitting)) {
896
- select.value = enumValue(field);
2320
+ if ($6.get(submitting))
897
2321
  return;
898
- }
2322
+ const select = event.currentTarget;
899
2323
  updateValue(field.path, decodeEnumValue(select.value));
900
2324
  }
901
- function updateRawJson(field, event) {
902
- const textarea = event.currentTarget;
903
- if ($.get(submitting)) {
904
- textarea.value = rawJsonValue(field);
2325
+ function updateRawJsonValue(field, next3) {
2326
+ if ($6.get(submitting))
905
2327
  return;
906
- }
907
2328
  const key = pathKey(field.path);
908
- $.set(rawDrafts, { ...$.get(rawDrafts), [key]: textarea.value }, true);
2329
+ $6.set(rawDrafts, { ...$6.get(rawDrafts), [key]: next3 }, true);
2330
+ bumpTouchedValidationSequence(field.path);
2331
+ if ($6.get(errors)[key]) {
2332
+ const { [key]: _removed, ...remaining } = $6.get(errors);
2333
+ $6.set(errors, remaining, true);
2334
+ }
909
2335
  setSerializedValue("");
910
2336
  }
911
- function toggleSwitch(field) {
912
- updateBoolean(field, !booleanValue(field));
913
- }
914
- function handleSwitchKeydown(field, event) {
915
- if (event.key !== " " && event.key !== "Enter")
916
- return;
917
- event.preventDefault();
918
- toggleSwitch(field);
919
- }
920
2337
  function arrayRows(field) {
921
- const values = arrayValueAtPath($.get(formValue), field.path);
922
- const keys = $.get(arrayKeys)[pathKey(field.path)] ?? [];
2338
+ const values = arrayValueAtPath($6.get(formValue), field.path);
2339
+ const keys = $6.get(arrayKeys)[pathKey(field.path)] ?? [];
923
2340
  return values.map((_, index) => ({ key: keys[index] ?? `${pathKey(field.path)}-${index}`, index }));
924
2341
  }
925
2342
  function addArrayItem(field) {
926
- if ($.get(submitting))
2343
+ if ($6.get(submitting))
927
2344
  return;
928
- const values = arrayValueAtPath($.get(formValue), field.path);
2345
+ const values = arrayValueAtPath($6.get(formValue), field.path);
929
2346
  const nextValue = field.item ? defaultValueForField(field.item) : null;
930
2347
  updateValue(field.path, [...values, nextValue]);
931
2348
  const key = pathKey(field.path);
932
- $.set(arrayKeys, {
933
- ...$.get(arrayKeys),
2349
+ $6.set(arrayKeys, {
2350
+ ...$6.get(arrayKeys),
934
2351
  [key]: [
935
- ...$.get(arrayKeys)[key] ?? [],
2352
+ ...$6.get(arrayKeys)[key] ?? [],
936
2353
  `${key}-${arrayKeyCounter++}`
937
2354
  ]
938
2355
  }, true);
939
2356
  }
940
2357
  function removeArrayItem(field, index) {
941
- if ($.get(submitting))
2358
+ if ($6.get(submitting))
942
2359
  return;
943
- const values = arrayValueAtPath($.get(formValue), field.path);
2360
+ const values = arrayValueAtPath($6.get(formValue), field.path);
944
2361
  updateValue(field.path, values.filter((_, candidateIndex) => candidateIndex !== index));
945
- $.set(rawDrafts, reindexArrayPathState($.get(rawDrafts), field.path, index), true);
946
- $.set(errors, reindexArrayPathState($.get(errors), field.path, index), true);
2362
+ $6.set(rawDrafts, reindexArrayPathState($6.get(rawDrafts), field.path, index), true);
2363
+ $6.set(errors, reindexArrayPathState($6.get(errors), field.path, index), true);
2364
+ $6.set(touchedValidationSequences, bumpPathValidationSequences(reindexArrayPathState($6.get(touchedValidationSequences), field.path, index), field.path), true);
947
2365
  const key = pathKey(field.path);
948
- $.set(arrayKeys, {
949
- ...$.get(arrayKeys),
950
- [key]: ($.get(arrayKeys)[key] ?? []).filter((_, candidateIndex) => candidateIndex !== index)
2366
+ $6.set(arrayKeys, {
2367
+ ...$6.get(arrayKeys),
2368
+ [key]: ($6.get(arrayKeys)[key] ?? []).filter((_, candidateIndex) => candidateIndex !== index)
951
2369
  }, true);
952
2370
  }
953
- function reindexArrayPathState(state2, arrayPath, removedIndex) {
2371
+ function reindexArrayPathState(state5, arrayPath, removedIndex) {
954
2372
  const prefix = pathKey(arrayPath);
955
2373
  const pathPrefix = prefix === "" ? "" : `${prefix}/`;
956
- const next = {};
957
- for (const [key, stateValue] of Object.entries(state2)) {
2374
+ const next3 = {};
2375
+ for (const [key, stateValue] of Object.entries(state5)) {
958
2376
  if (!key.startsWith(pathPrefix)) {
959
- next[key] = stateValue;
2377
+ next3[key] = stateValue;
960
2378
  continue;
961
2379
  }
962
2380
  const relativeKey = key.slice(pathPrefix.length);
963
2381
  if (relativeKey === "") {
964
- next[key] = stateValue;
2382
+ next3[key] = stateValue;
965
2383
  continue;
966
2384
  }
967
2385
  const [indexSegment = "", ...remainingSegments] = relativeKey.split("/");
968
2386
  const index = Number(indexSegment);
969
2387
  if (!Number.isInteger(index) || index < 0) {
970
- next[key] = stateValue;
2388
+ next3[key] = stateValue;
971
2389
  continue;
972
2390
  }
973
2391
  if (index < removedIndex) {
974
- next[key] = stateValue;
2392
+ next3[key] = stateValue;
975
2393
  continue;
976
2394
  }
977
2395
  if (index === removedIndex)
978
2396
  continue;
979
2397
  const shiftedKey = [String(index - 1), ...remainingSegments].join("/");
980
- next[`${pathPrefix}${shiftedKey}`] = stateValue;
2398
+ next3[`${pathPrefix}${shiftedKey}`] = stateValue;
2399
+ }
2400
+ return next3;
2401
+ }
2402
+ function bumpPathValidationSequences(state5, path) {
2403
+ const prefix = pathKey(path);
2404
+ const pathPrefix = prefix === "" ? "" : `${prefix}/`;
2405
+ const next3 = {};
2406
+ for (const [key, sequence] of Object.entries(state5)) {
2407
+ next3[key] = key === prefix || key.startsWith(pathPrefix) ? sequence + 1 : sequence;
981
2408
  }
982
- return next;
2409
+ return next3;
983
2410
  }
984
2411
  function seedRawDrafts(field, currentValue) {
985
2412
  const drafts = {};
@@ -993,8 +2420,8 @@ function Schema_form($$anchor, $$props) {
993
2420
  function visit(candidate) {
994
2421
  if (candidate.kind === "json")
995
2422
  fields.push(candidate);
996
- for (const child2 of candidate.fields)
997
- visit(child2);
2423
+ for (const child7 of candidate.fields)
2424
+ visit(child7);
998
2425
  if (candidate.kind === "array" && candidate.item) {
999
2426
  for (const [index] of arrayValueAtPath(currentValue, candidate.path).entries()) {
1000
2427
  visit(rebaseFieldPath(candidate.item, [...candidate.path, String(index)]));
@@ -1011,8 +2438,8 @@ function Schema_form($$anchor, $$props) {
1011
2438
  const key = pathKey(candidate.path);
1012
2439
  keys[key] = arrayValueAtPath(currentValue, candidate.path).map(() => `${key}-${arrayKeyCounter++}`);
1013
2440
  }
1014
- for (const child2 of candidate.fields)
1015
- visit(child2);
2441
+ for (const child7 of candidate.fields)
2442
+ visit(child7);
1016
2443
  if (candidate.item)
1017
2444
  visit(candidate.item);
1018
2445
  }
@@ -1020,10 +2447,10 @@ function Schema_form($$anchor, $$props) {
1020
2447
  return keys;
1021
2448
  }
1022
2449
  function rawJsonIssues() {
1023
- let nextValue = $.get(formValue);
2450
+ let nextValue = $6.get(formValue);
1024
2451
  const issues = [];
1025
- for (const field of currentJsonFields($.get(model).field, $.get(formValue))) {
1026
- const draft = $.get(rawDrafts)[pathKey(field.path)];
2452
+ for (const field of currentJsonFields($6.get(model).field, $6.get(formValue))) {
2453
+ const draft = $6.get(rawDrafts)[pathKey(field.path)];
1027
2454
  if (draft === undefined)
1028
2455
  continue;
1029
2456
  const parsed = parseJsonDraft(field.path, draft);
@@ -1038,26 +2465,26 @@ function Schema_form($$anchor, $$props) {
1038
2465
  async function reportSubmitIssues(issues, submitId) {
1039
2466
  if (activeSubmitId !== submitId)
1040
2467
  return;
1041
- $.set(errors, issuesByPath(issues), true);
2468
+ $6.set(errors, issuesByPath(issues), true);
1042
2469
  setSerializedValue("");
1043
- $.set(submitting, false);
2470
+ $6.set(submitting, false);
1044
2471
  await focusFirstError(submitId);
1045
2472
  }
1046
2473
  async function focusFirstError(submitId) {
1047
2474
  await tick();
1048
2475
  if (activeSubmitId !== submitId)
1049
2476
  return;
1050
- $.get(formElement)?.querySelector('[aria-invalid="true"], [data-cinder-invalid="true"], .cinder-schema-form__error')?.focus();
2477
+ $6.get(formElement)?.querySelector('[aria-invalid="true"], [data-cinder-invalid="true"], .cinder-schema-form__error')?.focus();
1051
2478
  }
1052
2479
  function shouldResumeNativeSubmit() {
1053
2480
  return $$props.onsubmit === undefined && ($$props.action !== undefined || $$props.method !== undefined);
1054
2481
  }
1055
2482
  function nativeSubmitter(event) {
1056
2483
  const submitter = event.submitter;
1057
- if (submitter instanceof HTMLButtonElement && submitter.type === "submit" && submitter.form === $.get(formElement)) {
2484
+ if (submitter instanceof HTMLButtonElement && submitter.type === "submit" && submitter.form === $6.get(formElement)) {
1058
2485
  return submitter;
1059
2486
  }
1060
- if (submitter instanceof HTMLInputElement && (submitter.type === "submit" || submitter.type === "image") && submitter.form === $.get(formElement)) {
2487
+ if (submitter instanceof HTMLInputElement && (submitter.type === "submit" || submitter.type === "image") && submitter.form === $6.get(formElement)) {
1061
2488
  return submitter;
1062
2489
  }
1063
2490
  return;
@@ -1068,11 +2495,11 @@ function Schema_form($$anchor, $$props) {
1068
2495
  return;
1069
2496
  }
1070
2497
  event.preventDefault();
1071
- if ($.get(submitting))
2498
+ if ($6.get(submitting))
1072
2499
  return;
1073
2500
  const submitId = activeSubmitId + 1;
1074
2501
  activeSubmitId = submitId;
1075
- $.set(submitting, true);
2502
+ $6.set(submitting, true);
1076
2503
  try {
1077
2504
  const raw = rawJsonIssues();
1078
2505
  if (raw.issues.length > 0) {
@@ -1090,68 +2517,83 @@ function Schema_form($$anchor, $$props) {
1090
2517
  await reportSubmitIssues([serialized.issue], submitId);
1091
2518
  return;
1092
2519
  }
1093
- $.set(formValue, result.value, true);
1094
- $.set(errors, {}, true);
2520
+ $6.set(formValue, result.value, true);
2521
+ $6.set(errors, {}, true);
1095
2522
  setSerializedValue(serialized.value);
1096
2523
  await $$props.onsubmit?.(result.value, event);
1097
2524
  if (shouldResumeNativeSubmit()) {
1098
2525
  allowNativeSubmit = true;
1099
2526
  await tick();
1100
- $.get(formElement)?.requestSubmit(nativeSubmitter(event));
2527
+ $6.get(formElement)?.requestSubmit(nativeSubmitter(event));
1101
2528
  }
1102
2529
  } finally {
1103
2530
  if (activeSubmitId === submitId)
1104
- $.set(submitting, false);
2531
+ $6.set(submitting, false);
1105
2532
  }
1106
2533
  }
1107
- var form = root();
1108
- $.attribute_effect(form, ($0) => ({
2534
+ var form = root6();
2535
+ $6.attribute_effect(form, ($0) => ({
1109
2536
  ...rest,
1110
- id: $.get(formId),
2537
+ id: $6.get(formId),
1111
2538
  class: $0,
1112
2539
  novalidate: $$props.novalidate ?? true,
1113
2540
  onsubmit: handleSubmit
1114
2541
  }), [() => classNames("cinder-schema-form", $$props.class)]);
1115
- var node_14 = $.child(form);
2542
+ var node_8 = $6.child(form);
1116
2543
  {
1117
2544
  var consequent_10 = ($$anchor2) => {
1118
- var p_2 = root_19();
1119
- var text_5 = $.child(p_2, true);
1120
- $.reset(p_2);
1121
- $.template_effect(() => {
1122
- $.set_attribute(p_2, "id", $.get(rootErrorId));
1123
- $.set_text(text_5, $.get(rootError));
2545
+ var p_2 = root_17();
2546
+ var text_4 = $6.child(p_2, true);
2547
+ $6.reset(p_2);
2548
+ $6.template_effect(() => {
2549
+ $6.set_attribute(p_2, "id", $6.get(rootErrorId));
2550
+ $6.set_text(text_4, $6.get(rootError));
1124
2551
  });
1125
- $.append($$anchor2, p_2);
2552
+ $6.append($$anchor2, p_2);
1126
2553
  };
1127
- $.if(node_14, ($$render) => {
1128
- if ($.get(rootError))
2554
+ $6.if(node_8, ($$render) => {
2555
+ if ($6.get(rootError))
1129
2556
  $$render(consequent_10);
1130
2557
  });
1131
2558
  }
1132
- var div_5 = $.sibling(node_14, 2);
1133
- $.each(div_5, 21, () => $.get(rootFields), (field) => pathKey(field.path), ($$anchor2, field) => {
1134
- renderField($$anchor2, () => $.get(field));
2559
+ var div_4 = $6.sibling(node_8, 2);
2560
+ $6.each(div_4, 21, () => $6.get(rootFields), (field) => pathKey(field.path), ($$anchor2, field) => {
2561
+ renderField($$anchor2, () => $6.get(field));
1135
2562
  });
1136
- $.reset(div_5);
1137
- var input_3 = $.sibling(div_5, 2);
1138
- $.remove_input_defaults(input_3);
1139
- $.bind_this(input_3, ($$value) => $.set(serializedInputElement, $$value), () => $.get(serializedInputElement));
1140
- var button_3 = $.sibling(input_3, 2);
1141
- var text_6 = $.child(button_3, true);
1142
- $.reset(button_3);
1143
- $.reset(form);
1144
- $.bind_this(form, ($$value) => $.set(formElement, $$value), () => $.get(formElement));
1145
- $.template_effect(() => {
1146
- $.set_attribute(input_3, "name", name());
1147
- $.set_value(input_3, $.get(serializedValue));
1148
- button_3.disabled = $.get(submitting);
1149
- $.set_text(text_6, $.get(submitting) ? "Validating..." : submitLabel());
2563
+ $6.reset(div_4);
2564
+ var input = $6.sibling(div_4, 2);
2565
+ $6.remove_input_defaults(input);
2566
+ $6.bind_this(input, ($$value) => $6.set(serializedInputElement, $$value), () => $6.get(serializedInputElement));
2567
+ var button_2 = $6.sibling(input, 2);
2568
+ var text_5 = $6.child(button_2, true);
2569
+ $6.reset(button_2);
2570
+ $6.reset(form);
2571
+ $6.bind_this(form, ($$value) => $6.set(formElement, $$value), () => $6.get(formElement));
2572
+ $6.template_effect(() => {
2573
+ $6.set_attribute(input, "name", name());
2574
+ $6.set_value(input, $6.get(serializedValue));
2575
+ button_2.disabled = $6.get(submitting);
2576
+ $6.set_text(text_5, $6.get(submitting) ? "Validating..." : submitLabel());
1150
2577
  });
1151
- $.append($$anchor, form);
1152
- $.pop();
2578
+ $6.append($$anchor, form);
2579
+ $6.pop();
2580
+ }
2581
+ $6.delegate(["click", "input"]);
2582
+
2583
+ // src/components/schema-form/schema-form.svelte
2584
+ function Schema_form($$anchor, $$props) {
2585
+ let rest = $7.rest_props($$props, ["$$slots", "$$events", "$$legacy", "schema"]);
2586
+ var fragment = $7.comment();
2587
+ var node = $7.first_child(fragment);
2588
+ $7.key(node, () => $$props.schema, ($$anchor2) => {
2589
+ Schema_form_body($$anchor2, $7.spread_props({
2590
+ get schema() {
2591
+ return $$props.schema;
2592
+ }
2593
+ }, () => rest));
2594
+ });
2595
+ $7.append($$anchor, fragment);
1153
2596
  }
1154
- $.delegate(["click", "keydown", "input", "change"]);
1155
2597
 
1156
2598
  // src/components/schema-form/index.ts
1157
2599
  var schema_form_default = Schema_form;
@@ -1161,4 +2603,4 @@ export {
1161
2603
  Schema_form as SchemaForm
1162
2604
  };
1163
2605
 
1164
- //# debugId=5C92F10738CBE8D064756E2164756E21
2606
+ //# debugId=CA64B4C5545EA64F64756E2164756E21