@flanksource/clicky-ui 0.3.10 → 0.3.11

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 (1162) hide show
  1. package/NOTICE.md +85 -0
  2. package/README.md +33 -2
  3. package/dist/ai.cjs +71 -5
  4. package/dist/ai.cjs.map +1 -1
  5. package/dist/ai.js +71 -5
  6. package/dist/ai.js.map +1 -1
  7. package/dist/chat.cjs +17 -13
  8. package/dist/chat.cjs.map +1 -1
  9. package/dist/chat.js +8 -4
  10. package/dist/clicky.d.ts +1 -1
  11. package/dist/clicky.d.ts.map +1 -1
  12. package/dist/comments/CommentCard.cjs +84 -38
  13. package/dist/comments/CommentCard.cjs.map +1 -1
  14. package/dist/comments/CommentCard.d.ts +1 -1
  15. package/dist/comments/CommentCard.d.ts.map +1 -1
  16. package/dist/comments/CommentCard.js +85 -39
  17. package/dist/comments/CommentCard.js.map +1 -1
  18. package/dist/comments/CommentComposer.cjs +21 -11
  19. package/dist/comments/CommentComposer.cjs.map +1 -1
  20. package/dist/comments/CommentComposer.d.ts.map +1 -1
  21. package/dist/comments/CommentComposer.js +21 -11
  22. package/dist/comments/CommentComposer.js.map +1 -1
  23. package/dist/comments/CommentProvider.cjs +84 -12
  24. package/dist/comments/CommentProvider.cjs.map +1 -1
  25. package/dist/comments/CommentProvider.d.ts +4 -2
  26. package/dist/comments/CommentProvider.d.ts.map +1 -1
  27. package/dist/comments/CommentProvider.js +86 -14
  28. package/dist/comments/CommentProvider.js.map +1 -1
  29. package/dist/comments/CommentSidePanel.cjs +116 -38
  30. package/dist/comments/CommentSidePanel.cjs.map +1 -1
  31. package/dist/comments/CommentSidePanel.d.ts +2 -0
  32. package/dist/comments/CommentSidePanel.d.ts.map +1 -1
  33. package/dist/comments/CommentSidePanel.js +117 -39
  34. package/dist/comments/CommentSidePanel.js.map +1 -1
  35. package/dist/comments/CommentThread.cjs +4 -0
  36. package/dist/comments/CommentThread.cjs.map +1 -1
  37. package/dist/comments/CommentThread.d.ts +5 -1
  38. package/dist/comments/CommentThread.d.ts.map +1 -1
  39. package/dist/comments/CommentThread.js +4 -0
  40. package/dist/comments/CommentThread.js.map +1 -1
  41. package/dist/comments/CommentThreadList.cjs +17 -5
  42. package/dist/comments/CommentThreadList.cjs.map +1 -1
  43. package/dist/comments/CommentThreadList.d.ts +3 -1
  44. package/dist/comments/CommentThreadList.d.ts.map +1 -1
  45. package/dist/comments/CommentThreadList.js +18 -6
  46. package/dist/comments/CommentThreadList.js.map +1 -1
  47. package/dist/comments/comment-context.cjs +88 -0
  48. package/dist/comments/comment-context.cjs.map +1 -1
  49. package/dist/comments/comment-context.d.ts +26 -0
  50. package/dist/comments/comment-context.d.ts.map +1 -1
  51. package/dist/comments/comment-context.js +89 -1
  52. package/dist/comments/comment-context.js.map +1 -1
  53. package/dist/comments.cjs +3 -0
  54. package/dist/comments.cjs.map +1 -1
  55. package/dist/comments.d.ts +1 -1
  56. package/dist/comments.d.ts.map +1 -1
  57. package/dist/comments.js +4 -1
  58. package/dist/components/Combobox.cjs +145 -34
  59. package/dist/components/Combobox.cjs.map +1 -1
  60. package/dist/components/Combobox.d.ts +24 -1
  61. package/dist/components/Combobox.d.ts.map +1 -1
  62. package/dist/components/Combobox.js +147 -36
  63. package/dist/components/Combobox.js.map +1 -1
  64. package/dist/components/DatePicker.cjs +1 -1
  65. package/dist/components/DatePicker.cjs.map +1 -1
  66. package/dist/components/DatePicker.js +1 -1
  67. package/dist/components/DatePicker.js.map +1 -1
  68. package/dist/components/DateTimePicker.cjs +1 -1
  69. package/dist/components/DateTimePicker.cjs.map +1 -1
  70. package/dist/components/DateTimePicker.js +1 -1
  71. package/dist/components/DateTimePicker.js.map +1 -1
  72. package/dist/components/FilterBar.cjs +41 -459
  73. package/dist/components/FilterBar.cjs.map +1 -1
  74. package/dist/components/FilterBar.d.ts +4 -62
  75. package/dist/components/FilterBar.d.ts.map +1 -1
  76. package/dist/components/FilterBar.js +13 -430
  77. package/dist/components/FilterBar.js.map +1 -1
  78. package/dist/components/InputField.cjs +97 -0
  79. package/dist/components/InputField.cjs.map +1 -0
  80. package/dist/components/InputField.d.ts +42 -0
  81. package/dist/components/InputField.d.ts.map +1 -0
  82. package/dist/components/InputField.js +97 -0
  83. package/dist/components/InputField.js.map +1 -0
  84. package/dist/components/JsonSchemaForm.cjs +90 -15
  85. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  86. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  87. package/dist/components/JsonSchemaForm.js +92 -17
  88. package/dist/components/JsonSchemaForm.js.map +1 -1
  89. package/dist/components/MdxEditorField.cjs.map +1 -1
  90. package/dist/components/MdxEditorField.d.ts +1 -1
  91. package/dist/components/MdxEditorField.d.ts.map +1 -1
  92. package/dist/components/MdxEditorField.js.map +1 -1
  93. package/dist/components/MdxEditorToolbar.cjs +6 -1
  94. package/dist/components/MdxEditorToolbar.cjs.map +1 -1
  95. package/dist/components/MdxEditorToolbar.d.ts.map +1 -1
  96. package/dist/components/MdxEditorToolbar.js +6 -1
  97. package/dist/components/MdxEditorToolbar.js.map +1 -1
  98. package/dist/components/MultiSelect.cjs +0 -1
  99. package/dist/components/MultiSelect.cjs.map +1 -1
  100. package/dist/components/MultiSelect.d.ts.map +1 -1
  101. package/dist/components/MultiSelect.js +0 -1
  102. package/dist/components/MultiSelect.js.map +1 -1
  103. package/dist/components/SearchInput.cjs +14 -43
  104. package/dist/components/SearchInput.cjs.map +1 -1
  105. package/dist/components/SearchInput.d.ts +6 -5
  106. package/dist/components/SearchInput.d.ts.map +1 -1
  107. package/dist/components/SearchInput.js +15 -44
  108. package/dist/components/SearchInput.js.map +1 -1
  109. package/dist/components/SecretKeySelector.cjs +155 -67
  110. package/dist/components/SecretKeySelector.cjs.map +1 -1
  111. package/dist/components/SecretKeySelector.d.ts +34 -16
  112. package/dist/components/SecretKeySelector.d.ts.map +1 -1
  113. package/dist/components/SecretKeySelector.js +158 -70
  114. package/dist/components/SecretKeySelector.js.map +1 -1
  115. package/dist/components/SecretKeySelector.model.cjs +32 -0
  116. package/dist/components/SecretKeySelector.model.cjs.map +1 -0
  117. package/dist/components/SecretKeySelector.model.d.ts +4 -0
  118. package/dist/components/SecretKeySelector.model.d.ts.map +1 -0
  119. package/dist/components/SecretKeySelector.model.js +32 -0
  120. package/dist/components/SecretKeySelector.model.js.map +1 -0
  121. package/dist/components/SegmentedControl.cjs +41 -6
  122. package/dist/components/SegmentedControl.cjs.map +1 -1
  123. package/dist/components/SegmentedControl.d.ts +7 -3
  124. package/dist/components/SegmentedControl.d.ts.map +1 -1
  125. package/dist/components/SegmentedControl.js +41 -6
  126. package/dist/components/SegmentedControl.js.map +1 -1
  127. package/dist/components/filter-bar-context.cjs +10 -0
  128. package/dist/components/filter-bar-context.cjs.map +1 -0
  129. package/dist/components/filter-bar-context.d.ts +5 -0
  130. package/dist/components/filter-bar-context.d.ts.map +1 -0
  131. package/dist/components/filter-bar-context.js +10 -0
  132. package/dist/components/filter-bar-context.js.map +1 -0
  133. package/dist/components/filter-bar-field-utils.cjs +119 -0
  134. package/dist/components/filter-bar-field-utils.cjs.map +1 -0
  135. package/dist/components/filter-bar-field-utils.d.ts +21 -0
  136. package/dist/components/filter-bar-field-utils.d.ts.map +1 -0
  137. package/dist/components/filter-bar-field-utils.js +119 -0
  138. package/dist/components/filter-bar-field-utils.js.map +1 -0
  139. package/dist/components/filter-bar-multi.cjs +193 -0
  140. package/dist/components/filter-bar-multi.cjs.map +1 -0
  141. package/dist/components/filter-bar-multi.d.ts +74 -0
  142. package/dist/components/filter-bar-multi.d.ts.map +1 -0
  143. package/dist/components/filter-bar-multi.js +193 -0
  144. package/dist/components/filter-bar-multi.js.map +1 -0
  145. package/dist/components/json-schema-form-array.cjs +81 -10
  146. package/dist/components/json-schema-form-array.cjs.map +1 -1
  147. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  148. package/dist/components/json-schema-form-array.js +82 -11
  149. package/dist/components/json-schema-form-array.js.map +1 -1
  150. package/dist/components/json-schema-form-fields.cjs +156 -24
  151. package/dist/components/json-schema-form-fields.cjs.map +1 -1
  152. package/dist/components/json-schema-form-fields.d.ts +9 -1
  153. package/dist/components/json-schema-form-fields.d.ts.map +1 -1
  154. package/dist/components/json-schema-form-fields.js +156 -24
  155. package/dist/components/json-schema-form-fields.js.map +1 -1
  156. package/dist/components/json-schema-form-object.cjs +35 -12
  157. package/dist/components/json-schema-form-object.cjs.map +1 -1
  158. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  159. package/dist/components/json-schema-form-object.js +37 -14
  160. package/dist/components/json-schema-form-object.js.map +1 -1
  161. package/dist/components/json-schema-form-render.cjs +21 -3
  162. package/dist/components/json-schema-form-render.cjs.map +1 -1
  163. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  164. package/dist/components/json-schema-form-render.js +22 -4
  165. package/dist/components/json-schema-form-render.js.map +1 -1
  166. package/dist/components/json-schema-form-resolve.cjs +123 -13
  167. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  168. package/dist/components/json-schema-form-resolve.d.ts +1 -0
  169. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  170. package/dist/components/json-schema-form-resolve.js +123 -13
  171. package/dist/components/json-schema-form-resolve.js.map +1 -1
  172. package/dist/components/json-schema-form-types.d.ts +30 -1
  173. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  174. package/dist/components/json-schema-form-utils.cjs +19 -0
  175. package/dist/components/json-schema-form-utils.cjs.map +1 -1
  176. package/dist/components/json-schema-form-utils.d.ts +3 -0
  177. package/dist/components/json-schema-form-utils.d.ts.map +1 -1
  178. package/dist/components/json-schema-form-utils.js +19 -0
  179. package/dist/components/json-schema-form-utils.js.map +1 -1
  180. package/dist/components/loading.cjs +17 -0
  181. package/dist/components/loading.cjs.map +1 -1
  182. package/dist/components/loading.d.ts +9 -0
  183. package/dist/components/loading.d.ts.map +1 -1
  184. package/dist/components/loading.js +17 -0
  185. package/dist/components/loading.js.map +1 -1
  186. package/dist/components/mdx-editor-field-plugins.cjs +28 -4
  187. package/dist/components/mdx-editor-field-plugins.cjs.map +1 -1
  188. package/dist/components/mdx-editor-field-plugins.d.ts.map +1 -1
  189. package/dist/components/mdx-editor-field-plugins.js +28 -4
  190. package/dist/components/mdx-editor-field-plugins.js.map +1 -1
  191. package/dist/components/mdx-editor-options.d.ts +23 -1
  192. package/dist/components/mdx-editor-options.d.ts.map +1 -1
  193. package/dist/components.cjs +13 -1
  194. package/dist/components.cjs.map +1 -1
  195. package/dist/components.d.ts +20 -16
  196. package/dist/components.d.ts.map +1 -1
  197. package/dist/components.js +14 -2
  198. package/dist/components.js.map +1 -1
  199. package/dist/data/Clicky.cjs +301 -51
  200. package/dist/data/Clicky.cjs.map +1 -1
  201. package/dist/data/Clicky.d.ts +21 -3
  202. package/dist/data/Clicky.d.ts.map +1 -1
  203. package/dist/data/Clicky.js +301 -51
  204. package/dist/data/Clicky.js.map +1 -1
  205. package/dist/data/CodeBlock.cjs +100 -20
  206. package/dist/data/CodeBlock.cjs.map +1 -1
  207. package/dist/data/CodeBlock.d.ts +18 -1
  208. package/dist/data/CodeBlock.d.ts.map +1 -1
  209. package/dist/data/CodeBlock.js +101 -21
  210. package/dist/data/CodeBlock.js.map +1 -1
  211. package/dist/data/CodeDiff.cjs +221 -0
  212. package/dist/data/CodeDiff.cjs.map +1 -0
  213. package/dist/data/CodeDiff.d.ts +24 -0
  214. package/dist/data/CodeDiff.d.ts.map +1 -0
  215. package/dist/data/CodeDiff.js +221 -0
  216. package/dist/data/CodeDiff.js.map +1 -0
  217. package/dist/data/DataTable.cjs +359 -219
  218. package/dist/data/DataTable.cjs.map +1 -1
  219. package/dist/data/DataTable.d.ts +12 -0
  220. package/dist/data/DataTable.d.ts.map +1 -1
  221. package/dist/data/DataTable.js +353 -213
  222. package/dist/data/DataTable.js.map +1 -1
  223. package/dist/data/FilterPill.cjs +43 -35
  224. package/dist/data/FilterPill.cjs.map +1 -1
  225. package/dist/data/FilterPill.d.ts +9 -1
  226. package/dist/data/FilterPill.d.ts.map +1 -1
  227. package/dist/data/FilterPill.js +43 -35
  228. package/dist/data/FilterPill.js.map +1 -1
  229. package/dist/data/FixtureEditor/FenceForm.cjs +123 -0
  230. package/dist/data/FixtureEditor/FenceForm.cjs.map +1 -0
  231. package/dist/data/FixtureEditor/FenceForm.d.ts +14 -0
  232. package/dist/data/FixtureEditor/FenceForm.d.ts.map +1 -0
  233. package/dist/data/FixtureEditor/FenceForm.js +123 -0
  234. package/dist/data/FixtureEditor/FenceForm.js.map +1 -0
  235. package/dist/data/FixtureEditor/FixtureEditor.cjs +236 -0
  236. package/dist/data/FixtureEditor/FixtureEditor.cjs.map +1 -0
  237. package/dist/data/FixtureEditor/FixtureEditor.d.ts +3 -0
  238. package/dist/data/FixtureEditor/FixtureEditor.d.ts.map +1 -0
  239. package/dist/data/FixtureEditor/FixtureEditor.js +236 -0
  240. package/dist/data/FixtureEditor/FixtureEditor.js.map +1 -0
  241. package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.cjs +128 -0
  242. package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.cjs.map +1 -0
  243. package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.d.ts +8 -0
  244. package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.d.ts.map +1 -0
  245. package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.js +128 -0
  246. package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.js.map +1 -0
  247. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.cjs +148 -0
  248. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.cjs.map +1 -0
  249. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.d.ts +11 -0
  250. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.d.ts.map +1 -0
  251. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.js +148 -0
  252. package/dist/data/FixtureEditor/FixtureFrontmatterDialog.js.map +1 -0
  253. package/dist/data/FixtureEditor/RawFenceEditor.cjs +35 -0
  254. package/dist/data/FixtureEditor/RawFenceEditor.cjs.map +1 -0
  255. package/dist/data/FixtureEditor/RawFenceEditor.d.ts +11 -0
  256. package/dist/data/FixtureEditor/RawFenceEditor.d.ts.map +1 -0
  257. package/dist/data/FixtureEditor/RawFenceEditor.js +35 -0
  258. package/dist/data/FixtureEditor/RawFenceEditor.js.map +1 -0
  259. package/dist/data/FixtureEditor/fixture-blocks.cjs +130 -0
  260. package/dist/data/FixtureEditor/fixture-blocks.cjs.map +1 -0
  261. package/dist/data/FixtureEditor/fixture-blocks.d.ts +26 -0
  262. package/dist/data/FixtureEditor/fixture-blocks.d.ts.map +1 -0
  263. package/dist/data/FixtureEditor/fixture-blocks.js +130 -0
  264. package/dist/data/FixtureEditor/fixture-blocks.js.map +1 -0
  265. package/dist/data/FixtureEditor/fixture-code-block-model.cjs +17 -0
  266. package/dist/data/FixtureEditor/fixture-code-block-model.cjs.map +1 -0
  267. package/dist/data/FixtureEditor/fixture-code-block-model.d.ts +3 -0
  268. package/dist/data/FixtureEditor/fixture-code-block-model.d.ts.map +1 -0
  269. package/dist/data/FixtureEditor/fixture-code-block-model.js +17 -0
  270. package/dist/data/FixtureEditor/fixture-code-block-model.js.map +1 -0
  271. package/dist/data/FixtureEditor/fixture-frontmatter.cjs +300 -0
  272. package/dist/data/FixtureEditor/fixture-frontmatter.cjs.map +1 -0
  273. package/dist/data/FixtureEditor/fixture-frontmatter.d.ts +32 -0
  274. package/dist/data/FixtureEditor/fixture-frontmatter.d.ts.map +1 -0
  275. package/dist/data/FixtureEditor/fixture-frontmatter.js +300 -0
  276. package/dist/data/FixtureEditor/fixture-frontmatter.js.map +1 -0
  277. package/dist/data/FixtureEditor/index.d.ts +5 -0
  278. package/dist/data/FixtureEditor/index.d.ts.map +1 -0
  279. package/dist/data/FixtureEditor/types.d.ts +44 -0
  280. package/dist/data/FixtureEditor/types.d.ts.map +1 -0
  281. package/dist/data/LogDetails.cjs +4 -4
  282. package/dist/data/LogDetails.cjs.map +1 -1
  283. package/dist/data/LogDetails.js +4 -4
  284. package/dist/data/LogDetails.js.map +1 -1
  285. package/dist/data/Markdown.cjs +29 -1
  286. package/dist/data/Markdown.cjs.map +1 -1
  287. package/dist/data/Markdown.d.ts +3 -2
  288. package/dist/data/Markdown.d.ts.map +1 -1
  289. package/dist/data/Markdown.js +30 -2
  290. package/dist/data/Markdown.js.map +1 -1
  291. package/dist/data/Properties.cjs +160 -40
  292. package/dist/data/Properties.cjs.map +1 -1
  293. package/dist/data/Properties.d.ts +8 -2
  294. package/dist/data/Properties.d.ts.map +1 -1
  295. package/dist/data/Properties.js +160 -40
  296. package/dist/data/Properties.js.map +1 -1
  297. package/dist/data/SchemaViewer.cjs +1 -1
  298. package/dist/data/SchemaViewer.cjs.map +1 -1
  299. package/dist/data/SchemaViewer.js +2 -2
  300. package/dist/data/SchemaViewer.js.map +1 -1
  301. package/dist/data/ai/ChatWindow.cjs +336 -18
  302. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  303. package/dist/data/ai/ChatWindow.d.ts +13 -4
  304. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  305. package/dist/data/ai/ChatWindow.js +336 -18
  306. package/dist/data/ai/ChatWindow.js.map +1 -1
  307. package/dist/data/ai/ChatWindow.test-utils.d.ts +12 -0
  308. package/dist/data/ai/ChatWindow.test-utils.d.ts.map +1 -0
  309. package/dist/data/ai/PolicyTree.cjs +265 -0
  310. package/dist/data/ai/PolicyTree.cjs.map +1 -0
  311. package/dist/data/ai/PolicyTree.d.ts +33 -0
  312. package/dist/data/ai/PolicyTree.d.ts.map +1 -0
  313. package/dist/data/ai/PolicyTree.js +265 -0
  314. package/dist/data/ai/PolicyTree.js.map +1 -0
  315. package/dist/data/ai/PromptPicker/PromptPicker.cjs +251 -0
  316. package/dist/data/ai/PromptPicker/PromptPicker.cjs.map +1 -0
  317. package/dist/data/ai/PromptPicker/PromptPicker.d.ts +31 -0
  318. package/dist/data/ai/PromptPicker/PromptPicker.d.ts.map +1 -0
  319. package/dist/data/ai/PromptPicker/PromptPicker.js +251 -0
  320. package/dist/data/ai/PromptPicker/PromptPicker.js.map +1 -0
  321. package/dist/data/ai/PromptPicker/index.d.ts +4 -0
  322. package/dist/data/ai/PromptPicker/index.d.ts.map +1 -0
  323. package/dist/data/ai/PromptPicker/prompt-runtime.cjs +39 -0
  324. package/dist/data/ai/PromptPicker/prompt-runtime.cjs.map +1 -0
  325. package/dist/data/ai/PromptPicker/prompt-runtime.d.ts +9 -0
  326. package/dist/data/ai/PromptPicker/prompt-runtime.d.ts.map +1 -0
  327. package/dist/data/ai/PromptPicker/prompt-runtime.js +39 -0
  328. package/dist/data/ai/PromptPicker/prompt-runtime.js.map +1 -0
  329. package/dist/data/ai/PromptPicker/types.d.ts +25 -0
  330. package/dist/data/ai/PromptPicker/types.d.ts.map +1 -0
  331. package/dist/data/ai/PromptRunEditor/index.cjs +242 -0
  332. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -0
  333. package/dist/data/ai/PromptRunEditor/index.d.ts +42 -0
  334. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -0
  335. package/dist/data/ai/PromptRunEditor/index.js +242 -0
  336. package/dist/data/ai/PromptRunEditor/index.js.map +1 -0
  337. package/dist/data/ai/RuntimeModePicker.cjs +61 -0
  338. package/dist/data/ai/RuntimeModePicker.cjs.map +1 -0
  339. package/dist/data/ai/RuntimeModePicker.d.ts +12 -0
  340. package/dist/data/ai/RuntimeModePicker.d.ts.map +1 -0
  341. package/dist/data/ai/RuntimeModePicker.js +61 -0
  342. package/dist/data/ai/RuntimeModePicker.js.map +1 -0
  343. package/dist/data/ai/SessionInspector.cjs +432 -0
  344. package/dist/data/ai/SessionInspector.cjs.map +1 -0
  345. package/dist/data/ai/SessionInspector.d.ts +11 -0
  346. package/dist/data/ai/SessionInspector.d.ts.map +1 -0
  347. package/dist/data/ai/SessionInspector.js +432 -0
  348. package/dist/data/ai/SessionInspector.js.map +1 -0
  349. package/dist/data/ai/SessionViewer.cjs +208 -196
  350. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  351. package/dist/data/ai/SessionViewer.d.ts +39 -3
  352. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  353. package/dist/data/ai/SessionViewer.fixtures.d.ts.map +1 -1
  354. package/dist/data/ai/SessionViewer.grouping.cjs +44 -0
  355. package/dist/data/ai/SessionViewer.grouping.cjs.map +1 -0
  356. package/dist/data/ai/SessionViewer.grouping.d.ts +17 -0
  357. package/dist/data/ai/SessionViewer.grouping.d.ts.map +1 -0
  358. package/dist/data/ai/SessionViewer.grouping.js +44 -0
  359. package/dist/data/ai/SessionViewer.grouping.js.map +1 -0
  360. package/dist/data/ai/SessionViewer.input.cjs +219 -0
  361. package/dist/data/ai/SessionViewer.input.cjs.map +1 -0
  362. package/dist/data/ai/SessionViewer.input.d.ts +44 -0
  363. package/dist/data/ai/SessionViewer.input.d.ts.map +1 -0
  364. package/dist/data/ai/SessionViewer.input.js +219 -0
  365. package/dist/data/ai/SessionViewer.input.js.map +1 -0
  366. package/dist/data/ai/SessionViewer.js +209 -197
  367. package/dist/data/ai/SessionViewer.js.map +1 -1
  368. package/dist/data/ai/SessionViewer.model.cjs +203 -105
  369. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  370. package/dist/data/ai/SessionViewer.model.d.ts +45 -7
  371. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  372. package/dist/data/ai/SessionViewer.model.js +203 -105
  373. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  374. package/dist/data/ai/SessionViewer.rows.cjs +751 -0
  375. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -0
  376. package/dist/data/ai/SessionViewer.rows.d.ts +20 -0
  377. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -0
  378. package/dist/data/ai/SessionViewer.rows.js +751 -0
  379. package/dist/data/ai/SessionViewer.rows.js.map +1 -0
  380. package/dist/data/ai/SessionViewer.unified.d.ts +193 -0
  381. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -0
  382. package/dist/data/ai/SessionViewerMenu.cjs +57 -68
  383. package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
  384. package/dist/data/ai/SessionViewerMenu.d.ts +3 -3
  385. package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
  386. package/dist/data/ai/SessionViewerMenu.js +58 -69
  387. package/dist/data/ai/SessionViewerMenu.js.map +1 -1
  388. package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.cjs +25 -0
  389. package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.cjs.map +1 -0
  390. package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.d.ts +12 -0
  391. package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.d.ts.map +1 -0
  392. package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.js +25 -0
  393. package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.js.map +1 -0
  394. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs +44 -0
  395. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs.map +1 -0
  396. package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts +6 -0
  397. package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts.map +1 -0
  398. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js +44 -0
  399. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js.map +1 -0
  400. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.cjs +137 -0
  401. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.cjs.map +1 -0
  402. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.d.ts +12 -0
  403. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.d.ts.map +1 -0
  404. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.js +137 -0
  405. package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.js.map +1 -0
  406. package/dist/data/ai/SpecRuntimeEditor/Footer.cjs +29 -0
  407. package/dist/data/ai/SpecRuntimeEditor/Footer.cjs.map +1 -0
  408. package/dist/data/ai/SpecRuntimeEditor/Footer.d.ts +8 -0
  409. package/dist/data/ai/SpecRuntimeEditor/Footer.d.ts.map +1 -0
  410. package/dist/data/ai/SpecRuntimeEditor/Footer.js +29 -0
  411. package/dist/data/ai/SpecRuntimeEditor/Footer.js.map +1 -0
  412. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +481 -0
  413. package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -0
  414. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts +16 -0
  415. package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -0
  416. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +481 -0
  417. package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -0
  418. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.cjs +421 -0
  419. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.cjs.map +1 -0
  420. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.d.ts +17 -0
  421. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.d.ts.map +1 -0
  422. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.js +421 -0
  423. package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.js.map +1 -0
  424. package/dist/data/ai/SpecRuntimeEditor/PresetCards.d.ts +8 -0
  425. package/dist/data/ai/SpecRuntimeEditor/PresetCards.d.ts.map +1 -0
  426. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs +98 -0
  427. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs.map +1 -0
  428. package/dist/data/ai/SpecRuntimeEditor/PromptSection.d.ts +10 -0
  429. package/dist/data/ai/SpecRuntimeEditor/PromptSection.d.ts.map +1 -0
  430. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js +98 -0
  431. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js.map +1 -0
  432. package/dist/data/ai/SpecRuntimeEditor/Rail.cjs +23 -0
  433. package/dist/data/ai/SpecRuntimeEditor/Rail.cjs.map +1 -0
  434. package/dist/data/ai/SpecRuntimeEditor/Rail.d.ts +7 -0
  435. package/dist/data/ai/SpecRuntimeEditor/Rail.d.ts.map +1 -0
  436. package/dist/data/ai/SpecRuntimeEditor/Rail.js +23 -0
  437. package/dist/data/ai/SpecRuntimeEditor/Rail.js.map +1 -0
  438. package/dist/data/ai/SpecRuntimeEditor/SectionCard.cjs +77 -0
  439. package/dist/data/ai/SpecRuntimeEditor/SectionCard.cjs.map +1 -0
  440. package/dist/data/ai/SpecRuntimeEditor/SectionCard.d.ts +14 -0
  441. package/dist/data/ai/SpecRuntimeEditor/SectionCard.d.ts.map +1 -0
  442. package/dist/data/ai/SpecRuntimeEditor/SectionCard.js +77 -0
  443. package/dist/data/ai/SpecRuntimeEditor/SectionCard.js.map +1 -0
  444. package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs +65 -0
  445. package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs.map +1 -0
  446. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts +12 -0
  447. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts.map +1 -0
  448. package/dist/data/ai/SpecRuntimeEditor/VerifySection.js +65 -0
  449. package/dist/data/ai/SpecRuntimeEditor/VerifySection.js.map +1 -0
  450. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs +227 -0
  451. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs.map +1 -0
  452. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.d.ts +8 -0
  453. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.d.ts.map +1 -0
  454. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js +227 -0
  455. package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js.map +1 -0
  456. package/dist/data/ai/SpecRuntimeEditor/env-model.cjs +45 -0
  457. package/dist/data/ai/SpecRuntimeEditor/env-model.cjs.map +1 -0
  458. package/dist/data/ai/SpecRuntimeEditor/env-model.d.ts +7 -0
  459. package/dist/data/ai/SpecRuntimeEditor/env-model.d.ts.map +1 -0
  460. package/dist/data/ai/SpecRuntimeEditor/env-model.js +45 -0
  461. package/dist/data/ai/SpecRuntimeEditor/env-model.js.map +1 -0
  462. package/dist/data/ai/SpecRuntimeEditor/fields.cjs +287 -0
  463. package/dist/data/ai/SpecRuntimeEditor/fields.cjs.map +1 -0
  464. package/dist/data/ai/SpecRuntimeEditor/fields.d.ts +79 -0
  465. package/dist/data/ai/SpecRuntimeEditor/fields.d.ts.map +1 -0
  466. package/dist/data/ai/SpecRuntimeEditor/fields.js +287 -0
  467. package/dist/data/ai/SpecRuntimeEditor/fields.js.map +1 -0
  468. package/dist/data/ai/SpecRuntimeEditor/index.cjs +213 -0
  469. package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -0
  470. package/dist/data/ai/SpecRuntimeEditor/index.d.ts +41 -0
  471. package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -0
  472. package/dist/data/ai/SpecRuntimeEditor/index.js +213 -0
  473. package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -0
  474. package/dist/data/ai/SpecRuntimeEditor/permissions-model.cjs +252 -0
  475. package/dist/data/ai/SpecRuntimeEditor/permissions-model.cjs.map +1 -0
  476. package/dist/data/ai/SpecRuntimeEditor/permissions-model.d.ts +36 -0
  477. package/dist/data/ai/SpecRuntimeEditor/permissions-model.d.ts.map +1 -0
  478. package/dist/data/ai/SpecRuntimeEditor/permissions-model.js +252 -0
  479. package/dist/data/ai/SpecRuntimeEditor/permissions-model.js.map +1 -0
  480. package/dist/data/ai/SpecRuntimeEditor/presets.cjs +214 -0
  481. package/dist/data/ai/SpecRuntimeEditor/presets.cjs.map +1 -0
  482. package/dist/data/ai/SpecRuntimeEditor/presets.d.ts +35 -0
  483. package/dist/data/ai/SpecRuntimeEditor/presets.d.ts.map +1 -0
  484. package/dist/data/ai/SpecRuntimeEditor/presets.js +214 -0
  485. package/dist/data/ai/SpecRuntimeEditor/presets.js.map +1 -0
  486. package/dist/data/ai/SpecRuntimeEditor/summaries.cjs +15 -0
  487. package/dist/data/ai/SpecRuntimeEditor/summaries.cjs.map +1 -0
  488. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts +13 -0
  489. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts.map +1 -0
  490. package/dist/data/ai/SpecRuntimeEditor/summaries.js +15 -0
  491. package/dist/data/ai/SpecRuntimeEditor/summaries.js.map +1 -0
  492. package/dist/data/ai/SpecRuntimeEditor/types.cjs +74 -0
  493. package/dist/data/ai/SpecRuntimeEditor/types.cjs.map +1 -0
  494. package/dist/data/ai/SpecRuntimeEditor/types.d.ts +19 -0
  495. package/dist/data/ai/SpecRuntimeEditor/types.d.ts.map +1 -0
  496. package/dist/data/ai/SpecRuntimeEditor/types.js +74 -0
  497. package/dist/data/ai/SpecRuntimeEditor/types.js.map +1 -0
  498. package/dist/data/ai/SpecRuntimeEditor/update.cjs +144 -0
  499. package/dist/data/ai/SpecRuntimeEditor/update.cjs.map +1 -0
  500. package/dist/data/ai/SpecRuntimeEditor/update.d.ts +28 -0
  501. package/dist/data/ai/SpecRuntimeEditor/update.d.ts.map +1 -0
  502. package/dist/data/ai/SpecRuntimeEditor/update.js +144 -0
  503. package/dist/data/ai/SpecRuntimeEditor/update.js.map +1 -0
  504. package/dist/data/ai/SpecRuntimeEditor/use-scrollspy.cjs +55 -0
  505. package/dist/data/ai/SpecRuntimeEditor/use-scrollspy.cjs.map +1 -0
  506. package/dist/data/ai/SpecRuntimeEditor/use-scrollspy.d.ts +9 -0
  507. package/dist/data/ai/SpecRuntimeEditor/use-scrollspy.d.ts.map +1 -0
  508. package/dist/data/ai/SpecRuntimeEditor/use-scrollspy.js +55 -0
  509. package/dist/data/ai/SpecRuntimeEditor/use-scrollspy.js.map +1 -0
  510. package/dist/data/ai/SpecRuntimeEditor.model.cjs +398 -0
  511. package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -0
  512. package/dist/data/ai/SpecRuntimeEditor.model.d.ts +169 -0
  513. package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -0
  514. package/dist/data/ai/SpecRuntimeEditor.model.js +398 -0
  515. package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -0
  516. package/dist/data/ai/ToolPreferences.cjs +705 -165
  517. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  518. package/dist/data/ai/ToolPreferences.d.ts +29 -5
  519. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  520. package/dist/data/ai/ToolPreferences.js +707 -167
  521. package/dist/data/ai/ToolPreferences.js.map +1 -1
  522. package/dist/data/ai/ToolSchemaBrowser.cjs +549 -0
  523. package/dist/data/ai/ToolSchemaBrowser.cjs.map +1 -0
  524. package/dist/data/ai/ToolSchemaBrowser.d.ts +7 -0
  525. package/dist/data/ai/ToolSchemaBrowser.d.ts.map +1 -0
  526. package/dist/data/ai/ToolSchemaBrowser.js +549 -0
  527. package/dist/data/ai/ToolSchemaBrowser.js.map +1 -0
  528. package/dist/data/ai/agent-action-icons.cjs +78 -0
  529. package/dist/data/ai/agent-action-icons.cjs.map +1 -0
  530. package/dist/data/ai/agent-action-icons.d.ts +22 -0
  531. package/dist/data/ai/agent-action-icons.d.ts.map +1 -0
  532. package/dist/data/ai/agent-action-icons.js +78 -0
  533. package/dist/data/ai/agent-action-icons.js.map +1 -0
  534. package/dist/data/ai/index.d.ts +21 -6
  535. package/dist/data/ai/index.d.ts.map +1 -1
  536. package/dist/data/ai/model-capabilities.cjs +23 -0
  537. package/dist/data/ai/model-capabilities.cjs.map +1 -0
  538. package/dist/data/ai/model-capabilities.d.ts +9 -0
  539. package/dist/data/ai/model-capabilities.d.ts.map +1 -0
  540. package/dist/data/ai/model-capabilities.js +23 -0
  541. package/dist/data/ai/model-capabilities.js.map +1 -0
  542. package/dist/data/ai/runtime-mode.cjs +133 -0
  543. package/dist/data/ai/runtime-mode.cjs.map +1 -0
  544. package/dist/data/ai/runtime-mode.d.ts +31 -0
  545. package/dist/data/ai/runtime-mode.d.ts.map +1 -0
  546. package/dist/data/ai/runtime-mode.js +133 -0
  547. package/dist/data/ai/runtime-mode.js.map +1 -0
  548. package/dist/data/ai/session-categories.cjs +34 -0
  549. package/dist/data/ai/session-categories.cjs.map +1 -1
  550. package/dist/data/ai/session-categories.d.ts +2 -0
  551. package/dist/data/ai/session-categories.d.ts.map +1 -1
  552. package/dist/data/ai/session-categories.js +34 -0
  553. package/dist/data/ai/session-categories.js.map +1 -1
  554. package/dist/data/ai/session-cost.cjs +13 -0
  555. package/dist/data/ai/session-cost.cjs.map +1 -0
  556. package/dist/data/ai/session-cost.d.ts +8 -0
  557. package/dist/data/ai/session-cost.d.ts.map +1 -0
  558. package/dist/data/ai/session-cost.js +13 -0
  559. package/dist/data/ai/session-cost.js.map +1 -0
  560. package/dist/data/ai/tool-name.d.ts +10 -0
  561. package/dist/data/ai/tool-name.d.ts.map +1 -0
  562. package/dist/data/ai/use-session-scroll.cjs +96 -0
  563. package/dist/data/ai/use-session-scroll.cjs.map +1 -0
  564. package/dist/data/ai/use-session-scroll.d.ts +43 -0
  565. package/dist/data/ai/use-session-scroll.d.ts.map +1 -0
  566. package/dist/data/ai/use-session-scroll.js +96 -0
  567. package/dist/data/ai/use-session-scroll.js.map +1 -0
  568. package/dist/data/cells/TagList.cjs +4 -2
  569. package/dist/data/cells/TagList.cjs.map +1 -1
  570. package/dist/data/cells/TagList.d.ts +2 -1
  571. package/dist/data/cells/TagList.d.ts.map +1 -1
  572. package/dist/data/cells/TagList.js +4 -2
  573. package/dist/data/cells/TagList.js.map +1 -1
  574. package/dist/data/chat/Chat.cjs +49 -15
  575. package/dist/data/chat/Chat.cjs.map +1 -1
  576. package/dist/data/chat/Chat.d.ts +16 -2
  577. package/dist/data/chat/Chat.d.ts.map +1 -1
  578. package/dist/data/chat/Chat.js +49 -15
  579. package/dist/data/chat/Chat.js.map +1 -1
  580. package/dist/data/chat/ContextMeter.cjs +164 -0
  581. package/dist/data/chat/ContextMeter.cjs.map +1 -0
  582. package/dist/data/chat/ContextMeter.d.ts +50 -0
  583. package/dist/data/chat/ContextMeter.d.ts.map +1 -0
  584. package/dist/data/chat/ContextMeter.js +164 -0
  585. package/dist/data/chat/ContextMeter.js.map +1 -0
  586. package/dist/data/chat/ModelSelector.cjs +139 -10
  587. package/dist/data/chat/ModelSelector.cjs.map +1 -1
  588. package/dist/data/chat/ModelSelector.d.ts +44 -3
  589. package/dist/data/chat/ModelSelector.d.ts.map +1 -1
  590. package/dist/data/chat/ModelSelector.js +141 -12
  591. package/dist/data/chat/ModelSelector.js.map +1 -1
  592. package/dist/data/chat/clickyOperationsToTools.cjs +83 -69
  593. package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -1
  594. package/dist/data/chat/clickyOperationsToTools.d.ts +3 -3
  595. package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -1
  596. package/dist/data/chat/clickyOperationsToTools.js +83 -69
  597. package/dist/data/chat/clickyOperationsToTools.js.map +1 -1
  598. package/dist/data/chat/effort-icons.cjs +43 -0
  599. package/dist/data/chat/effort-icons.cjs.map +1 -0
  600. package/dist/data/chat/effort-icons.d.ts +10 -0
  601. package/dist/data/chat/effort-icons.d.ts.map +1 -0
  602. package/dist/data/chat/effort-icons.js +43 -0
  603. package/dist/data/chat/effort-icons.js.map +1 -0
  604. package/dist/data/chat/index.d.ts +3 -3
  605. package/dist/data/chat/index.d.ts.map +1 -1
  606. package/dist/data/chat/provider-icons.cjs +25 -6
  607. package/dist/data/chat/provider-icons.cjs.map +1 -1
  608. package/dist/data/chat/provider-icons.d.ts +3 -5
  609. package/dist/data/chat/provider-icons.d.ts.map +1 -1
  610. package/dist/data/chat/provider-icons.js +25 -6
  611. package/dist/data/chat/provider-icons.js.map +1 -1
  612. package/dist/data/chat/types.cjs +42 -0
  613. package/dist/data/chat/types.cjs.map +1 -1
  614. package/dist/data/chat/types.d.ts +83 -19
  615. package/dist/data/chat/types.d.ts.map +1 -1
  616. package/dist/data/chat/types.js +42 -0
  617. package/dist/data/chat/types.js.map +1 -1
  618. package/dist/data/code-block-actions.cjs +101 -0
  619. package/dist/data/code-block-actions.cjs.map +1 -0
  620. package/dist/data/code-block-actions.d.ts +20 -0
  621. package/dist/data/code-block-actions.d.ts.map +1 -0
  622. package/dist/data/code-block-actions.js +101 -0
  623. package/dist/data/code-block-actions.js.map +1 -0
  624. package/dist/data/code-diff.cjs +106 -0
  625. package/dist/data/code-diff.cjs.map +1 -0
  626. package/dist/data/code-diff.d.ts +20 -0
  627. package/dist/data/code-diff.d.ts.map +1 -0
  628. package/dist/data/code-diff.js +106 -0
  629. package/dist/data/code-diff.js.map +1 -0
  630. package/dist/data/code-highlight.cjs +30 -0
  631. package/dist/data/code-highlight.cjs.map +1 -1
  632. package/dist/data/code-highlight.d.ts +8 -0
  633. package/dist/data/code-highlight.d.ts.map +1 -1
  634. package/dist/data/code-highlight.js +30 -0
  635. package/dist/data/code-highlight.js.map +1 -1
  636. package/dist/data/git/GitChangeList.cjs +410 -0
  637. package/dist/data/git/GitChangeList.cjs.map +1 -0
  638. package/dist/data/git/GitChangeList.d.ts +69 -0
  639. package/dist/data/git/GitChangeList.d.ts.map +1 -0
  640. package/dist/data/git/GitChangeList.js +410 -0
  641. package/dist/data/git/GitChangeList.js.map +1 -0
  642. package/dist/data/git/git-dates.cjs +37 -0
  643. package/dist/data/git/git-dates.cjs.map +1 -0
  644. package/dist/data/git/git-dates.d.ts +4 -0
  645. package/dist/data/git/git-dates.d.ts.map +1 -0
  646. package/dist/data/git/git-dates.js +37 -0
  647. package/dist/data/git/git-dates.js.map +1 -0
  648. package/dist/data/git/index.d.ts +3 -0
  649. package/dist/data/git/index.d.ts.map +1 -0
  650. package/dist/data/query-browser/QueryBrowser.cjs +323 -0
  651. package/dist/data/query-browser/QueryBrowser.cjs.map +1 -0
  652. package/dist/data/query-browser/QueryBrowser.completion.cjs +99 -0
  653. package/dist/data/query-browser/QueryBrowser.completion.cjs.map +1 -0
  654. package/dist/data/query-browser/QueryBrowser.completion.d.ts +34 -0
  655. package/dist/data/query-browser/QueryBrowser.completion.d.ts.map +1 -0
  656. package/dist/data/query-browser/QueryBrowser.completion.js +99 -0
  657. package/dist/data/query-browser/QueryBrowser.completion.js.map +1 -0
  658. package/dist/data/query-browser/QueryBrowser.d.ts +42 -0
  659. package/dist/data/query-browser/QueryBrowser.d.ts.map +1 -0
  660. package/dist/data/query-browser/QueryBrowser.js +323 -0
  661. package/dist/data/query-browser/QueryBrowser.js.map +1 -0
  662. package/dist/data/query-browser/index.d.ts +3 -0
  663. package/dist/data/query-browser/index.d.ts.map +1 -0
  664. package/dist/data/version-info.cjs +3 -3
  665. package/dist/data/version-info.cjs.map +1 -1
  666. package/dist/data/version-info.js +3 -3
  667. package/dist/data/version-info.js.map +1 -1
  668. package/dist/data.cjs +164 -0
  669. package/dist/data.cjs.map +1 -1
  670. package/dist/data.d.ts +7 -2
  671. package/dist/data.d.ts.map +1 -1
  672. package/dist/data.js +166 -2
  673. package/dist/data.js.map +1 -1
  674. package/dist/icons/components/UiArrowFatUp.cjs +15 -0
  675. package/dist/icons/components/UiArrowFatUp.cjs.map +1 -0
  676. package/dist/icons/components/UiArrowFatUp.d.ts +15 -0
  677. package/dist/icons/components/UiArrowFatUp.d.ts.map +1 -0
  678. package/dist/icons/components/UiArrowFatUp.js +15 -0
  679. package/dist/icons/components/UiArrowFatUp.js.map +1 -0
  680. package/dist/icons/components/UiAsterisk.cjs +15 -0
  681. package/dist/icons/components/UiAsterisk.cjs.map +1 -0
  682. package/dist/icons/components/UiAsterisk.d.ts +15 -0
  683. package/dist/icons/components/UiAsterisk.d.ts.map +1 -0
  684. package/dist/icons/components/UiAsterisk.js +15 -0
  685. package/dist/icons/components/UiAsterisk.js.map +1 -0
  686. package/dist/icons/components/UiAtom.cjs +15 -0
  687. package/dist/icons/components/UiAtom.cjs.map +1 -0
  688. package/dist/icons/components/UiAtom.d.ts +15 -0
  689. package/dist/icons/components/UiAtom.d.ts.map +1 -0
  690. package/dist/icons/components/UiAtom.js +15 -0
  691. package/dist/icons/components/UiAtom.js.map +1 -0
  692. package/dist/icons/components/UiBatteryChargingVertical.cjs +15 -0
  693. package/dist/icons/components/UiBatteryChargingVertical.cjs.map +1 -0
  694. package/dist/icons/components/UiBatteryChargingVertical.d.ts +15 -0
  695. package/dist/icons/components/UiBatteryChargingVertical.d.ts.map +1 -0
  696. package/dist/icons/components/UiBatteryChargingVertical.js +15 -0
  697. package/dist/icons/components/UiBatteryChargingVertical.js.map +1 -0
  698. package/dist/icons/components/UiBatteryVerticalEmpty.cjs +15 -0
  699. package/dist/icons/components/UiBatteryVerticalEmpty.cjs.map +1 -0
  700. package/dist/icons/components/UiBatteryVerticalEmpty.d.ts +15 -0
  701. package/dist/icons/components/UiBatteryVerticalEmpty.d.ts.map +1 -0
  702. package/dist/icons/components/UiBatteryVerticalEmpty.js +15 -0
  703. package/dist/icons/components/UiBatteryVerticalEmpty.js.map +1 -0
  704. package/dist/icons/components/UiBatteryVerticalFull.cjs +15 -0
  705. package/dist/icons/components/UiBatteryVerticalFull.cjs.map +1 -0
  706. package/dist/icons/components/UiBatteryVerticalFull.d.ts +15 -0
  707. package/dist/icons/components/UiBatteryVerticalFull.d.ts.map +1 -0
  708. package/dist/icons/components/UiBatteryVerticalFull.js +15 -0
  709. package/dist/icons/components/UiBatteryVerticalFull.js.map +1 -0
  710. package/dist/icons/components/UiBatteryVerticalHigh.cjs +15 -0
  711. package/dist/icons/components/UiBatteryVerticalHigh.cjs.map +1 -0
  712. package/dist/icons/components/UiBatteryVerticalHigh.d.ts +15 -0
  713. package/dist/icons/components/UiBatteryVerticalHigh.d.ts.map +1 -0
  714. package/dist/icons/components/UiBatteryVerticalHigh.js +15 -0
  715. package/dist/icons/components/UiBatteryVerticalHigh.js.map +1 -0
  716. package/dist/icons/components/UiBatteryVerticalLow.cjs +15 -0
  717. package/dist/icons/components/UiBatteryVerticalLow.cjs.map +1 -0
  718. package/dist/icons/components/UiBatteryVerticalLow.d.ts +15 -0
  719. package/dist/icons/components/UiBatteryVerticalLow.d.ts.map +1 -0
  720. package/dist/icons/components/UiBatteryVerticalLow.js +15 -0
  721. package/dist/icons/components/UiBatteryVerticalLow.js.map +1 -0
  722. package/dist/icons/components/UiBatteryVerticalMedium.cjs +15 -0
  723. package/dist/icons/components/UiBatteryVerticalMedium.cjs.map +1 -0
  724. package/dist/icons/components/UiBatteryVerticalMedium.d.ts +15 -0
  725. package/dist/icons/components/UiBatteryVerticalMedium.d.ts.map +1 -0
  726. package/dist/icons/components/UiBatteryVerticalMedium.js +15 -0
  727. package/dist/icons/components/UiBatteryVerticalMedium.js.map +1 -0
  728. package/dist/icons/components/UiChatDots.cjs +15 -0
  729. package/dist/icons/components/UiChatDots.cjs.map +1 -0
  730. package/dist/icons/components/UiChatDots.d.ts +15 -0
  731. package/dist/icons/components/UiChatDots.d.ts.map +1 -0
  732. package/dist/icons/components/UiChatDots.js +15 -0
  733. package/dist/icons/components/UiChatDots.js.map +1 -0
  734. package/dist/icons/components/UiCoins.cjs +15 -0
  735. package/dist/icons/components/UiCoins.cjs.map +1 -0
  736. package/dist/icons/components/UiCoins.d.ts +15 -0
  737. package/dist/icons/components/UiCoins.d.ts.map +1 -0
  738. package/dist/icons/components/UiCoins.js +15 -0
  739. package/dist/icons/components/UiCoins.js.map +1 -0
  740. package/dist/icons/components/UiCompass.cjs +15 -0
  741. package/dist/icons/components/UiCompass.cjs.map +1 -0
  742. package/dist/icons/components/UiCompass.d.ts +15 -0
  743. package/dist/icons/components/UiCompass.d.ts.map +1 -0
  744. package/dist/icons/components/UiCompass.js +15 -0
  745. package/dist/icons/components/UiCompass.js.map +1 -0
  746. package/dist/icons/components/UiCurrencyDollar.cjs +15 -0
  747. package/dist/icons/components/UiCurrencyDollar.cjs.map +1 -0
  748. package/dist/icons/components/UiCurrencyDollar.d.ts +15 -0
  749. package/dist/icons/components/UiCurrencyDollar.d.ts.map +1 -0
  750. package/dist/icons/components/UiCurrencyDollar.js +15 -0
  751. package/dist/icons/components/UiCurrencyDollar.js.map +1 -0
  752. package/dist/icons/components/UiCursorClick.cjs +15 -0
  753. package/dist/icons/components/UiCursorClick.cjs.map +1 -0
  754. package/dist/icons/components/UiCursorClick.d.ts +15 -0
  755. package/dist/icons/components/UiCursorClick.d.ts.map +1 -0
  756. package/dist/icons/components/UiCursorClick.js +15 -0
  757. package/dist/icons/components/UiCursorClick.js.map +1 -0
  758. package/dist/icons/components/UiCursorText.cjs +15 -0
  759. package/dist/icons/components/UiCursorText.cjs.map +1 -0
  760. package/dist/icons/components/UiCursorText.d.ts +15 -0
  761. package/dist/icons/components/UiCursorText.d.ts.map +1 -0
  762. package/dist/icons/components/UiCursorText.js +15 -0
  763. package/dist/icons/components/UiCursorText.js.map +1 -0
  764. package/dist/icons/components/UiEllipsisBold.cjs +10 -0
  765. package/dist/icons/components/UiEllipsisBold.cjs.map +1 -0
  766. package/dist/icons/components/UiEllipsisBold.d.ts +9 -0
  767. package/dist/icons/components/UiEllipsisBold.d.ts.map +1 -0
  768. package/dist/icons/components/UiEllipsisBold.js +10 -0
  769. package/dist/icons/components/UiEllipsisBold.js.map +1 -0
  770. package/dist/icons/components/UiFastForwardCircle.cjs +15 -0
  771. package/dist/icons/components/UiFastForwardCircle.cjs.map +1 -0
  772. package/dist/icons/components/UiFastForwardCircle.d.ts +15 -0
  773. package/dist/icons/components/UiFastForwardCircle.d.ts.map +1 -0
  774. package/dist/icons/components/UiFastForwardCircle.js +15 -0
  775. package/dist/icons/components/UiFastForwardCircle.js.map +1 -0
  776. package/dist/icons/components/UiFilePlus.cjs +15 -0
  777. package/dist/icons/components/UiFilePlus.cjs.map +1 -0
  778. package/dist/icons/components/UiFilePlus.d.ts +15 -0
  779. package/dist/icons/components/UiFilePlus.d.ts.map +1 -0
  780. package/dist/icons/components/UiFilePlus.js +15 -0
  781. package/dist/icons/components/UiFilePlus.js.map +1 -0
  782. package/dist/icons/components/UiGavel.cjs +15 -0
  783. package/dist/icons/components/UiGavel.cjs.map +1 -0
  784. package/dist/icons/components/UiGavel.d.ts +15 -0
  785. package/dist/icons/components/UiGavel.d.ts.map +1 -0
  786. package/dist/icons/components/UiGavel.js +15 -0
  787. package/dist/icons/components/UiGavel.js.map +1 -0
  788. package/dist/icons/components/UiGearSix.cjs +15 -0
  789. package/dist/icons/components/UiGearSix.cjs.map +1 -0
  790. package/dist/icons/components/UiGearSix.d.ts +15 -0
  791. package/dist/icons/components/UiGearSix.d.ts.map +1 -0
  792. package/dist/icons/components/UiGearSix.js +15 -0
  793. package/dist/icons/components/UiGearSix.js.map +1 -0
  794. package/dist/icons/components/UiGitCommit.cjs +15 -0
  795. package/dist/icons/components/UiGitCommit.cjs.map +1 -0
  796. package/dist/icons/components/UiGitCommit.d.ts +15 -0
  797. package/dist/icons/components/UiGitCommit.d.ts.map +1 -0
  798. package/dist/icons/components/UiGitCommit.js +15 -0
  799. package/dist/icons/components/UiGitCommit.js.map +1 -0
  800. package/dist/icons/components/UiHandPalm.cjs +15 -0
  801. package/dist/icons/components/UiHandPalm.cjs.map +1 -0
  802. package/dist/icons/components/UiHandPalm.d.ts +15 -0
  803. package/dist/icons/components/UiHandPalm.d.ts.map +1 -0
  804. package/dist/icons/components/UiHandPalm.js +15 -0
  805. package/dist/icons/components/UiHandPalm.js.map +1 -0
  806. package/dist/icons/components/UiKeyboard.cjs +15 -0
  807. package/dist/icons/components/UiKeyboard.cjs.map +1 -0
  808. package/dist/icons/components/UiKeyboard.d.ts +15 -0
  809. package/dist/icons/components/UiKeyboard.d.ts.map +1 -0
  810. package/dist/icons/components/UiKeyboard.js +15 -0
  811. package/dist/icons/components/UiKeyboard.js.map +1 -0
  812. package/dist/icons/components/UiListChecks.cjs +15 -0
  813. package/dist/icons/components/UiListChecks.cjs.map +1 -0
  814. package/dist/icons/components/UiListChecks.d.ts +15 -0
  815. package/dist/icons/components/UiListChecks.d.ts.map +1 -0
  816. package/dist/icons/components/UiListChecks.js +15 -0
  817. package/dist/icons/components/UiListChecks.js.map +1 -0
  818. package/dist/icons/components/UiLogoAnthropic.cjs +10 -0
  819. package/dist/icons/components/UiLogoAnthropic.cjs.map +1 -0
  820. package/dist/icons/components/UiLogoAnthropic.d.ts +9 -0
  821. package/dist/icons/components/UiLogoAnthropic.d.ts.map +1 -0
  822. package/dist/icons/components/UiLogoAnthropic.js +10 -0
  823. package/dist/icons/components/UiLogoAnthropic.js.map +1 -0
  824. package/dist/icons/components/UiLogoClaude.cjs +10 -0
  825. package/dist/icons/components/UiLogoClaude.cjs.map +1 -0
  826. package/dist/icons/components/UiLogoClaude.d.ts +9 -0
  827. package/dist/icons/components/UiLogoClaude.d.ts.map +1 -0
  828. package/dist/icons/components/UiLogoClaude.js +10 -0
  829. package/dist/icons/components/UiLogoClaude.js.map +1 -0
  830. package/dist/icons/components/UiLogoDeepseek.cjs +10 -0
  831. package/dist/icons/components/UiLogoDeepseek.cjs.map +1 -0
  832. package/dist/icons/components/UiLogoDeepseek.d.ts +9 -0
  833. package/dist/icons/components/UiLogoDeepseek.d.ts.map +1 -0
  834. package/dist/icons/components/UiLogoDeepseek.js +10 -0
  835. package/dist/icons/components/UiLogoDeepseek.js.map +1 -0
  836. package/dist/icons/components/UiLogoGemini.cjs +10 -0
  837. package/dist/icons/components/UiLogoGemini.cjs.map +1 -0
  838. package/dist/icons/components/UiLogoGemini.d.ts +9 -0
  839. package/dist/icons/components/UiLogoGemini.d.ts.map +1 -0
  840. package/dist/icons/components/UiLogoGemini.js +10 -0
  841. package/dist/icons/components/UiLogoGemini.js.map +1 -0
  842. package/dist/icons/components/UiLogoGoogle.cjs +10 -0
  843. package/dist/icons/components/UiLogoGoogle.cjs.map +1 -0
  844. package/dist/icons/components/UiLogoGoogle.d.ts +9 -0
  845. package/dist/icons/components/UiLogoGoogle.d.ts.map +1 -0
  846. package/dist/icons/components/UiLogoGoogle.js +10 -0
  847. package/dist/icons/components/UiLogoGoogle.js.map +1 -0
  848. package/dist/icons/components/UiLogoHuggingface.cjs +10 -0
  849. package/dist/icons/components/UiLogoHuggingface.cjs.map +1 -0
  850. package/dist/icons/components/UiLogoHuggingface.d.ts +9 -0
  851. package/dist/icons/components/UiLogoHuggingface.d.ts.map +1 -0
  852. package/dist/icons/components/UiLogoHuggingface.js +10 -0
  853. package/dist/icons/components/UiLogoHuggingface.js.map +1 -0
  854. package/dist/icons/components/UiLogoMeta.cjs +10 -0
  855. package/dist/icons/components/UiLogoMeta.cjs.map +1 -0
  856. package/dist/icons/components/UiLogoMeta.d.ts +9 -0
  857. package/dist/icons/components/UiLogoMeta.d.ts.map +1 -0
  858. package/dist/icons/components/UiLogoMeta.js +10 -0
  859. package/dist/icons/components/UiLogoMeta.js.map +1 -0
  860. package/dist/icons/components/UiLogoMistral.cjs +10 -0
  861. package/dist/icons/components/UiLogoMistral.cjs.map +1 -0
  862. package/dist/icons/components/UiLogoMistral.d.ts +9 -0
  863. package/dist/icons/components/UiLogoMistral.d.ts.map +1 -0
  864. package/dist/icons/components/UiLogoMistral.js +10 -0
  865. package/dist/icons/components/UiLogoMistral.js.map +1 -0
  866. package/dist/icons/components/UiLogoOllama.cjs +10 -0
  867. package/dist/icons/components/UiLogoOllama.cjs.map +1 -0
  868. package/dist/icons/components/UiLogoOllama.d.ts +9 -0
  869. package/dist/icons/components/UiLogoOllama.d.ts.map +1 -0
  870. package/dist/icons/components/UiLogoOllama.js +10 -0
  871. package/dist/icons/components/UiLogoOllama.js.map +1 -0
  872. package/dist/icons/components/UiLogoOpenai.cjs +10 -0
  873. package/dist/icons/components/UiLogoOpenai.cjs.map +1 -0
  874. package/dist/icons/components/UiLogoOpenai.d.ts +9 -0
  875. package/dist/icons/components/UiLogoOpenai.d.ts.map +1 -0
  876. package/dist/icons/components/UiLogoOpenai.js +10 -0
  877. package/dist/icons/components/UiLogoOpenai.js.map +1 -0
  878. package/dist/icons/components/UiLogoPerplexity.cjs +10 -0
  879. package/dist/icons/components/UiLogoPerplexity.cjs.map +1 -0
  880. package/dist/icons/components/UiLogoPerplexity.d.ts +9 -0
  881. package/dist/icons/components/UiLogoPerplexity.d.ts.map +1 -0
  882. package/dist/icons/components/UiLogoPerplexity.js +10 -0
  883. package/dist/icons/components/UiLogoPerplexity.js.map +1 -0
  884. package/dist/icons/components/UiPalette.cjs +15 -0
  885. package/dist/icons/components/UiPalette.cjs.map +1 -0
  886. package/dist/icons/components/UiPalette.d.ts +15 -0
  887. package/dist/icons/components/UiPalette.d.ts.map +1 -0
  888. package/dist/icons/components/UiPalette.js +15 -0
  889. package/dist/icons/components/UiPalette.js.map +1 -0
  890. package/dist/icons/components/UiPauseCircle.cjs +15 -0
  891. package/dist/icons/components/UiPauseCircle.cjs.map +1 -0
  892. package/dist/icons/components/UiPauseCircle.d.ts +15 -0
  893. package/dist/icons/components/UiPauseCircle.d.ts.map +1 -0
  894. package/dist/icons/components/UiPauseCircle.js +15 -0
  895. package/dist/icons/components/UiPauseCircle.js.map +1 -0
  896. package/dist/icons/components/UiPencilSimpleLine.cjs +15 -0
  897. package/dist/icons/components/UiPencilSimpleLine.cjs.map +1 -0
  898. package/dist/icons/components/UiPencilSimpleLine.d.ts +15 -0
  899. package/dist/icons/components/UiPencilSimpleLine.d.ts.map +1 -0
  900. package/dist/icons/components/UiPencilSimpleLine.js +15 -0
  901. package/dist/icons/components/UiPencilSimpleLine.js.map +1 -0
  902. package/dist/icons/components/UiPlugsConnected.cjs +15 -0
  903. package/dist/icons/components/UiPlugsConnected.cjs.map +1 -0
  904. package/dist/icons/components/UiPlugsConnected.d.ts +15 -0
  905. package/dist/icons/components/UiPlugsConnected.d.ts.map +1 -0
  906. package/dist/icons/components/UiPlugsConnected.js +15 -0
  907. package/dist/icons/components/UiPlugsConnected.js.map +1 -0
  908. package/dist/icons/components/UiProhibit.cjs +15 -0
  909. package/dist/icons/components/UiProhibit.cjs.map +1 -0
  910. package/dist/icons/components/UiProhibit.d.ts +15 -0
  911. package/dist/icons/components/UiProhibit.d.ts.map +1 -0
  912. package/dist/icons/components/UiProhibit.js +15 -0
  913. package/dist/icons/components/UiProhibit.js.map +1 -0
  914. package/dist/icons/components/UiRepeat.cjs +15 -0
  915. package/dist/icons/components/UiRepeat.cjs.map +1 -0
  916. package/dist/icons/components/UiRepeat.d.ts +15 -0
  917. package/dist/icons/components/UiRepeat.d.ts.map +1 -0
  918. package/dist/icons/components/UiRepeat.js +15 -0
  919. package/dist/icons/components/UiRepeat.js.map +1 -0
  920. package/dist/icons/components/UiScan.cjs +15 -0
  921. package/dist/icons/components/UiScan.cjs.map +1 -0
  922. package/dist/icons/components/UiScan.d.ts +15 -0
  923. package/dist/icons/components/UiScan.d.ts.map +1 -0
  924. package/dist/icons/components/UiScan.js +15 -0
  925. package/dist/icons/components/UiScan.js.map +1 -0
  926. package/dist/icons/components/UiScroll.cjs +15 -0
  927. package/dist/icons/components/UiScroll.cjs.map +1 -0
  928. package/dist/icons/components/UiScroll.d.ts +15 -0
  929. package/dist/icons/components/UiScroll.d.ts.map +1 -0
  930. package/dist/icons/components/UiScroll.js +15 -0
  931. package/dist/icons/components/UiScroll.js.map +1 -0
  932. package/dist/icons/components/UiShieldSlash.cjs +15 -0
  933. package/dist/icons/components/UiShieldSlash.cjs.map +1 -0
  934. package/dist/icons/components/UiShieldSlash.d.ts +15 -0
  935. package/dist/icons/components/UiShieldSlash.d.ts.map +1 -0
  936. package/dist/icons/components/UiShieldSlash.js +15 -0
  937. package/dist/icons/components/UiShieldSlash.js.map +1 -0
  938. package/dist/icons/components/UiStack.cjs +19 -0
  939. package/dist/icons/components/UiStack.cjs.map +1 -0
  940. package/dist/icons/components/UiStack.d.ts +15 -0
  941. package/dist/icons/components/UiStack.d.ts.map +1 -0
  942. package/dist/icons/components/UiStack.js +19 -0
  943. package/dist/icons/components/UiStack.js.map +1 -0
  944. package/dist/icons/components/UiStrategy.cjs +15 -0
  945. package/dist/icons/components/UiStrategy.cjs.map +1 -0
  946. package/dist/icons/components/UiStrategy.d.ts +15 -0
  947. package/dist/icons/components/UiStrategy.d.ts.map +1 -0
  948. package/dist/icons/components/UiStrategy.js +15 -0
  949. package/dist/icons/components/UiStrategy.js.map +1 -0
  950. package/dist/icons/components/UiThermometer.cjs +15 -0
  951. package/dist/icons/components/UiThermometer.cjs.map +1 -0
  952. package/dist/icons/components/UiThermometer.d.ts +15 -0
  953. package/dist/icons/components/UiThermometer.d.ts.map +1 -0
  954. package/dist/icons/components/UiThermometer.js +15 -0
  955. package/dist/icons/components/UiThermometer.js.map +1 -0
  956. package/dist/icons/components/UiTimer.cjs +15 -0
  957. package/dist/icons/components/UiTimer.cjs.map +1 -0
  958. package/dist/icons/components/UiTimer.d.ts +15 -0
  959. package/dist/icons/components/UiTimer.d.ts.map +1 -0
  960. package/dist/icons/components/UiTimer.js +15 -0
  961. package/dist/icons/components/UiTimer.js.map +1 -0
  962. package/dist/icons/index.d.ts +84 -0
  963. package/dist/icons/index.d.ts.map +1 -1
  964. package/dist/icons.cjs +132 -0
  965. package/dist/icons.cjs.map +1 -1
  966. package/dist/icons.js +132 -0
  967. package/dist/icons.js.map +1 -1
  968. package/dist/index.cjs +186 -1
  969. package/dist/index.cjs.map +1 -1
  970. package/dist/index.js +190 -5
  971. package/dist/index.js.map +1 -1
  972. package/dist/layout/Workspace.cjs +191 -0
  973. package/dist/layout/Workspace.cjs.map +1 -0
  974. package/dist/layout/Workspace.d.ts +17 -0
  975. package/dist/layout/Workspace.d.ts.map +1 -0
  976. package/dist/layout/Workspace.js +191 -0
  977. package/dist/layout/Workspace.js.map +1 -0
  978. package/dist/layout/Workspace.model.cjs +142 -0
  979. package/dist/layout/Workspace.model.cjs.map +1 -0
  980. package/dist/layout/Workspace.model.d.ts +43 -0
  981. package/dist/layout/Workspace.model.d.ts.map +1 -0
  982. package/dist/layout/Workspace.model.js +142 -0
  983. package/dist/layout/Workspace.model.js.map +1 -0
  984. package/dist/layout/Workspace.regions.cjs +305 -0
  985. package/dist/layout/Workspace.regions.cjs.map +1 -0
  986. package/dist/layout/Workspace.regions.d.ts +17 -0
  987. package/dist/layout/Workspace.regions.d.ts.map +1 -0
  988. package/dist/layout/Workspace.regions.js +305 -0
  989. package/dist/layout/Workspace.regions.js.map +1 -0
  990. package/dist/lib/tokens.cjs +14 -0
  991. package/dist/lib/tokens.cjs.map +1 -0
  992. package/dist/lib/tokens.d.ts +5 -0
  993. package/dist/lib/tokens.d.ts.map +1 -0
  994. package/dist/lib/tokens.js +14 -0
  995. package/dist/lib/tokens.js.map +1 -0
  996. package/dist/monaco/MonacoEditor.cjs +69 -0
  997. package/dist/monaco/MonacoEditor.cjs.map +1 -0
  998. package/dist/monaco/MonacoEditor.d.ts +5 -0
  999. package/dist/monaco/MonacoEditor.d.ts.map +1 -0
  1000. package/dist/monaco/MonacoEditor.js +52 -0
  1001. package/dist/monaco/MonacoEditor.js.map +1 -0
  1002. package/dist/monaco/MonacoProvider.cjs +22 -0
  1003. package/dist/monaco/MonacoProvider.cjs.map +1 -0
  1004. package/dist/monaco/MonacoProvider.d.ts +3 -0
  1005. package/dist/monaco/MonacoProvider.d.ts.map +1 -0
  1006. package/dist/monaco/MonacoProvider.js +22 -0
  1007. package/dist/monaco/MonacoProvider.js.map +1 -0
  1008. package/dist/monaco/MonacoSchemaEditor.cjs +108 -0
  1009. package/dist/monaco/MonacoSchemaEditor.cjs.map +1 -0
  1010. package/dist/monaco/MonacoSchemaEditor.d.ts +4 -0
  1011. package/dist/monaco/MonacoSchemaEditor.d.ts.map +1 -0
  1012. package/dist/monaco/MonacoSchemaEditor.js +108 -0
  1013. package/dist/monaco/MonacoSchemaEditor.js.map +1 -0
  1014. package/dist/monaco/schema-normalizer.cjs +38 -0
  1015. package/dist/monaco/schema-normalizer.cjs.map +1 -0
  1016. package/dist/monaco/schema-normalizer.d.ts +7 -0
  1017. package/dist/monaco/schema-normalizer.d.ts.map +1 -0
  1018. package/dist/monaco/schema-normalizer.js +38 -0
  1019. package/dist/monaco/schema-normalizer.js.map +1 -0
  1020. package/dist/monaco/schema-registry.cjs +67 -0
  1021. package/dist/monaco/schema-registry.cjs.map +1 -0
  1022. package/dist/monaco/schema-registry.d.ts +3 -0
  1023. package/dist/monaco/schema-registry.d.ts.map +1 -0
  1024. package/dist/monaco/schema-registry.js +67 -0
  1025. package/dist/monaco/schema-registry.js.map +1 -0
  1026. package/dist/monaco/types.d.ts +31 -0
  1027. package/dist/monaco/types.d.ts.map +1 -0
  1028. package/dist/monaco/use-monaco-worker.cjs +10 -0
  1029. package/dist/monaco/use-monaco-worker.cjs.map +1 -0
  1030. package/dist/monaco/use-monaco-worker.d.ts +4 -0
  1031. package/dist/monaco/use-monaco-worker.d.ts.map +1 -0
  1032. package/dist/monaco/use-monaco-worker.js +10 -0
  1033. package/dist/monaco/use-monaco-worker.js.map +1 -0
  1034. package/dist/monaco-schema.cjs +5 -0
  1035. package/dist/monaco-schema.cjs.map +1 -0
  1036. package/dist/monaco-schema.d.ts +3 -0
  1037. package/dist/monaco-schema.d.ts.map +1 -0
  1038. package/dist/monaco-schema.js +5 -0
  1039. package/dist/monaco-schema.js.map +1 -0
  1040. package/dist/monaco.cjs +11 -0
  1041. package/dist/monaco.cjs.map +1 -0
  1042. package/dist/monaco.d.ts +6 -0
  1043. package/dist/monaco.d.ts.map +1 -0
  1044. package/dist/monaco.js +11 -0
  1045. package/dist/monaco.js.map +1 -0
  1046. package/dist/overlay/CellActions.cjs +183 -0
  1047. package/dist/overlay/CellActions.cjs.map +1 -0
  1048. package/dist/overlay/CellActions.d.ts +18 -0
  1049. package/dist/overlay/CellActions.d.ts.map +1 -0
  1050. package/dist/overlay/CellActions.js +183 -0
  1051. package/dist/overlay/CellActions.js.map +1 -0
  1052. package/dist/overlay/DropdownMenu.cjs +50 -59
  1053. package/dist/overlay/DropdownMenu.cjs.map +1 -1
  1054. package/dist/overlay/DropdownMenu.d.ts +21 -2
  1055. package/dist/overlay/DropdownMenu.d.ts.map +1 -1
  1056. package/dist/overlay/DropdownMenu.js +38 -47
  1057. package/dist/overlay/DropdownMenu.js.map +1 -1
  1058. package/dist/overlay/DropdownMenuSubmenu.cjs +210 -0
  1059. package/dist/overlay/DropdownMenuSubmenu.cjs.map +1 -0
  1060. package/dist/overlay/DropdownMenuSubmenu.d.ts +12 -0
  1061. package/dist/overlay/DropdownMenuSubmenu.d.ts.map +1 -0
  1062. package/dist/overlay/DropdownMenuSubmenu.js +210 -0
  1063. package/dist/overlay/DropdownMenuSubmenu.js.map +1 -0
  1064. package/dist/overlay/Modal.cjs +14 -2
  1065. package/dist/overlay/Modal.cjs.map +1 -1
  1066. package/dist/overlay/Modal.d.ts +9 -2
  1067. package/dist/overlay/Modal.d.ts.map +1 -1
  1068. package/dist/overlay/Modal.js +14 -2
  1069. package/dist/overlay/Modal.js.map +1 -1
  1070. package/dist/overlay/dropdownMenuContext.cjs +16 -0
  1071. package/dist/overlay/dropdownMenuContext.cjs.map +1 -0
  1072. package/dist/overlay/dropdownMenuContext.d.ts +16 -0
  1073. package/dist/overlay/dropdownMenuContext.d.ts.map +1 -0
  1074. package/dist/overlay/dropdownMenuContext.js +16 -0
  1075. package/dist/overlay/dropdownMenuContext.js.map +1 -0
  1076. package/dist/rpc/CommandOutput.cjs +28 -9
  1077. package/dist/rpc/CommandOutput.cjs.map +1 -1
  1078. package/dist/rpc/CommandOutput.d.ts +4 -2
  1079. package/dist/rpc/CommandOutput.d.ts.map +1 -1
  1080. package/dist/rpc/CommandOutput.js +28 -9
  1081. package/dist/rpc/CommandOutput.js.map +1 -1
  1082. package/dist/rpc/EntityExplorerApp.cjs +8 -1
  1083. package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
  1084. package/dist/rpc/EntityExplorerApp.d.ts +9 -1
  1085. package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
  1086. package/dist/rpc/EntityExplorerApp.js +8 -1
  1087. package/dist/rpc/EntityExplorerApp.js.map +1 -1
  1088. package/dist/rpc/OperationActionBar.cjs +63 -41
  1089. package/dist/rpc/OperationActionBar.cjs.map +1 -1
  1090. package/dist/rpc/OperationActionBar.d.ts +2 -1
  1091. package/dist/rpc/OperationActionBar.d.ts.map +1 -1
  1092. package/dist/rpc/OperationActionBar.js +63 -41
  1093. package/dist/rpc/OperationActionBar.js.map +1 -1
  1094. package/dist/rpc/OperationCatalog.cjs +111 -80
  1095. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  1096. package/dist/rpc/OperationCatalog.d.ts +2 -1
  1097. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  1098. package/dist/rpc/OperationCatalog.js +112 -81
  1099. package/dist/rpc/OperationCatalog.js.map +1 -1
  1100. package/dist/rpc/OperationCommandPage.cjs +2 -0
  1101. package/dist/rpc/OperationCommandPage.cjs.map +1 -1
  1102. package/dist/rpc/OperationCommandPage.d.ts +3 -2
  1103. package/dist/rpc/OperationCommandPage.d.ts.map +1 -1
  1104. package/dist/rpc/OperationCommandPage.js +2 -0
  1105. package/dist/rpc/OperationCommandPage.js.map +1 -1
  1106. package/dist/rpc/OperationEntityContextPicker.cjs +448 -0
  1107. package/dist/rpc/OperationEntityContextPicker.cjs.map +1 -0
  1108. package/dist/rpc/OperationEntityContextPicker.d.ts +28 -0
  1109. package/dist/rpc/OperationEntityContextPicker.d.ts.map +1 -0
  1110. package/dist/rpc/OperationEntityContextPicker.js +448 -0
  1111. package/dist/rpc/OperationEntityContextPicker.js.map +1 -0
  1112. package/dist/rpc/OperationEntityContextPicker.model.cjs +60 -0
  1113. package/dist/rpc/OperationEntityContextPicker.model.cjs.map +1 -0
  1114. package/dist/rpc/OperationEntityContextPicker.model.d.ts +7 -0
  1115. package/dist/rpc/OperationEntityContextPicker.model.d.ts.map +1 -0
  1116. package/dist/rpc/OperationEntityContextPicker.model.js +60 -0
  1117. package/dist/rpc/OperationEntityContextPicker.model.js.map +1 -0
  1118. package/dist/rpc/OperationEntityPage.cjs +47 -22
  1119. package/dist/rpc/OperationEntityPage.cjs.map +1 -1
  1120. package/dist/rpc/OperationEntityPage.d.ts +32 -2
  1121. package/dist/rpc/OperationEntityPage.d.ts.map +1 -1
  1122. package/dist/rpc/OperationEntityPage.js +47 -22
  1123. package/dist/rpc/OperationEntityPage.js.map +1 -1
  1124. package/dist/rpc/OperationResultView.cjs +4 -2
  1125. package/dist/rpc/OperationResultView.cjs.map +1 -1
  1126. package/dist/rpc/OperationResultView.d.ts +3 -2
  1127. package/dist/rpc/OperationResultView.d.ts.map +1 -1
  1128. package/dist/rpc/OperationResultView.js +4 -2
  1129. package/dist/rpc/OperationResultView.js.map +1 -1
  1130. package/dist/rpc/SchemaActionForm.cjs +151 -17
  1131. package/dist/rpc/SchemaActionForm.cjs.map +1 -1
  1132. package/dist/rpc/SchemaActionForm.d.ts +7 -1
  1133. package/dist/rpc/SchemaActionForm.d.ts.map +1 -1
  1134. package/dist/rpc/SchemaActionForm.js +152 -18
  1135. package/dist/rpc/SchemaActionForm.js.map +1 -1
  1136. package/dist/rpc/types.cjs.map +1 -1
  1137. package/dist/rpc/types.d.ts +24 -0
  1138. package/dist/rpc/types.d.ts.map +1 -1
  1139. package/dist/rpc/types.js.map +1 -1
  1140. package/dist/rpc.cjs +6 -0
  1141. package/dist/rpc.cjs.map +1 -1
  1142. package/dist/rpc.d.ts +5 -3
  1143. package/dist/rpc.d.ts.map +1 -1
  1144. package/dist/rpc.js +6 -0
  1145. package/dist/rpc.js.map +1 -1
  1146. package/dist/styles.css +1 -1
  1147. package/dist/tailwind-preset.cjs +8 -0
  1148. package/dist/tailwind-preset.cjs.map +1 -1
  1149. package/dist/tailwind-preset.d.ts.map +1 -1
  1150. package/dist/tailwind-preset.js +8 -0
  1151. package/dist/tailwind-preset.js.map +1 -1
  1152. package/oxlint-plugins/README.md +82 -19
  1153. package/oxlint-plugins/clicky-ui-no-adhoc-overlay.js +5 -50
  1154. package/oxlint-plugins/clicky-ui-no-direct-z-index.js +134 -0
  1155. package/oxlint-plugins/clicky-ui.js +3 -0
  1156. package/package.json +26 -3
  1157. package/dist/data/chat/ContextUsage.cjs +0 -99
  1158. package/dist/data/chat/ContextUsage.cjs.map +0 -1
  1159. package/dist/data/chat/ContextUsage.d.ts +0 -19
  1160. package/dist/data/chat/ContextUsage.d.ts.map +0 -1
  1161. package/dist/data/chat/ContextUsage.js +0 -99
  1162. package/dist/data/chat/ContextUsage.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"json-schema-form-resolve.js","sources":["../../src/components/json-schema-form-resolve.ts"],"sourcesContent":["import type {\n EnumDisplay,\n FieldControl,\n FieldOption,\n JsonSchemaObject,\n JsonSchemaProperty,\n LookupDescriptor,\n} from \"./json-schema-form-types\";\nimport { isPlainObject } from \"./json-schema-form-utils\";\n\n// isOpenStringMap reports whether a property is an object whose entries are\n// described by a sub-schema in `additionalProperties` (a typed key/value map) or\n// by `patternProperties` (a per-key-pattern value map). Either makes it an\n// editable key/value control rather than a fixed-property sub-form.\nexport function isOpenStringMap(prop: JsonSchemaProperty): boolean {\n if (!schemaHasType(prop, \"object\")) return false;\n if (typeof prop.additionalProperties === \"object\" && prop.additionalProperties !== null) {\n return true;\n }\n return !!prop.patternProperties && Object.keys(prop.patternProperties).length > 0;\n}\n\n// patternSchemasOf compiles a schema's `patternProperties` into the ordered\n// {pattern, schema} list the string-map control matches keys against.\nfunction patternSchemasOf(prop: JsonSchemaProperty): { pattern: string; schema: JsonSchemaProperty }[] | undefined {\n const pp = prop.patternProperties;\n if (!pp || Object.keys(pp).length === 0) return undefined;\n return Object.entries(pp).map(([pattern, schema]) => ({ pattern, schema }));\n}\n\nfunction schemaHasType(prop: JsonSchemaProperty, type: string): boolean {\n if (Array.isArray(prop.type)) return prop.type.includes(type as never);\n return prop.type === type;\n}\n\nfunction enumOptions(prop: JsonSchemaProperty): FieldOption[] {\n const labels = prop[\"x-enum-labels\"];\n const icons = prop[\"x-enum-icons\"];\n return (prop.enum ?? []).map((v) => {\n const value = String(v);\n const desc = labels?.[value];\n const icon = icons?.[value];\n return {\n value,\n label: typeof desc === \"string\" && desc && desc !== value ? `${desc} (${value})` : value,\n ...(typeof icon === \"string\" && icon ? { icon } : {}),\n };\n });\n}\n\n// enumDisplay resolves how an enum should render: an explicit `x-enum-display`\n// wins; otherwise an enum carrying `x-enum-icons` defaults to the icon grid.\n// Returns undefined to keep the combobox default.\nfunction enumDisplay(prop: JsonSchemaProperty): EnumDisplay | undefined {\n const d = prop[\"x-enum-display\"];\n if (d === \"combobox\" || d === \"radio\" || d === \"grid\") return d;\n const icons = prop[\"x-enum-icons\"];\n if (icons && Object.keys(icons).length > 0) return \"grid\";\n return undefined;\n}\n\n// enumBranch returns the first anyOf/oneOf member carrying a non-empty `enum`,\n// for a union of \"an enum value OR a free-form string\" (e.g. a value-or-token\n// field). It lets such a union render as a dropdown. Returns undefined when no\n// branch enumerates values.\nexport function enumBranch(prop: JsonSchemaProperty): JsonSchemaProperty | undefined {\n for (const branch of [...(prop.anyOf ?? []), ...(prop.oneOf ?? [])]) {\n if (Array.isArray(branch.enum) && branch.enum.length > 0) return branch;\n }\n return undefined;\n}\n\n// lookupDescriptor reads the `x-clicky-lookup` extension into a LookupDescriptor,\n// returning undefined when the keyword is absent or lacks its required url/filter.\nfunction lookupDescriptor(prop: JsonSchemaProperty): LookupDescriptor | undefined {\n const raw = prop[\"x-clicky-lookup\"];\n if (!raw || typeof raw !== \"object\") return undefined;\n const d = raw as Record<string, unknown>;\n if (typeof d.url !== \"string\" || typeof d.filter !== \"string\") return undefined;\n return raw as LookupDescriptor;\n}\n\nexport interface ResolveControlArgs {\n key: string;\n prop: JsonSchemaProperty;\n required: boolean;\n value: unknown;\n onChange: (next: unknown) => void;\n}\n\n// resolveControl infers a base, render-ready FieldControl from a property\n// schema. It keys off schema keywords only — never the field name: ascode/token\n// heuristics are layered on by consumer pre-extensions. The one exception is the\n// standard `format: date`/`date-time` keyword, which is a schema-declared signal\n// (not a name guess) and so drives a date control directly. First match wins.\nexport function resolveControl(args: ResolveControlArgs): FieldControl {\n const { key, prop, required, value, onChange } = args;\n const labelIcon = prop[\"x-icon\"];\n const xLayout = prop[\"x-layout\"];\n const layout =\n xLayout === \"inline\" || xLayout === \"stack\" || xLayout === \"table\" ? xLayout : undefined;\n const keyOptions = keyOptionsFor(prop);\n const base: FieldControl = {\n key,\n kind: \"string\",\n label: typeof prop.title === \"string\" && prop.title ? prop.title : key,\n required,\n schema: prop,\n value,\n onChange,\n ...(prop.readOnly === true ? { readOnly: true } : {}),\n ...(typeof prop.description === \"string\" ? { description: prop.description } : {}),\n ...(labelIcon != null && labelIcon !== \"\" ? { labelIcon: labelIcon as FieldControl[\"labelIcon\"] } : {}),\n };\n\n // An `x-clicky-lookup` field is an async entity-reference picker: options load\n // lazily from another entity's list endpoint. Single-select also allows\n // free-form entry so a typed value outside the option set still commits.\n const lookup = lookupDescriptor(prop);\n if (lookup) {\n return { ...base, kind: \"lookup\", lookup, options: [], allowCustomValue: lookup.multi !== true };\n }\n if (Array.isArray(prop.enum) && prop.enum.length > 0) {\n const display = enumDisplay(prop);\n return { ...base, kind: \"enum\", options: enumOptions(prop), ...(display ? { display } : {}) };\n }\n // A value-or-template union: the enum lives in an anyOf/oneOf branch alongside\n // free-form branches. Render it as a dropdown using that branch's enum; the\n // free-form branches are honoured via a consumer's allowCustomValue pre-ext.\n const branch = enumBranch(prop);\n if (branch) {\n return { ...base, kind: \"enum\", options: enumOptions(branch) };\n }\n // A schema-declared date/date-time string renders as a date control.\n if (prop.format === \"date\" || prop.format === \"date-time\") {\n return { ...base, kind: \"date\", dateFormat: prop.format };\n }\n // A long-form string declares `format: textarea` to render a multi-line box.\n if (prop.format === \"textarea\" && schemaHasType(prop, \"string\")) {\n return { ...base, kind: \"textarea\" };\n }\n // A markdown string declares `format: md` to render the MDXEditor-backed\n // editor. Plugin toggles live under `x-md-editor` so schema authors can keep\n // the format signal standard-sized and the editor behavior explicit.\n if (prop.format === \"md\" && schemaHasType(prop, \"string\")) {\n const markdownOptions = prop[\"x-md-editor\"];\n return {\n ...base,\n kind: \"markdown\",\n ...(isPlainObject(markdownOptions) ? { markdownOptions } : {}),\n };\n }\n if (schemaHasType(prop, \"boolean\")) {\n return { ...base, kind: \"boolean\" };\n }\n if (schemaHasType(prop, \"integer\") || schemaHasType(prop, \"number\")) {\n return {\n ...base,\n kind: \"number\",\n coerceNumber: true,\n // A percent number carries a static \"%\" unit shown inside the input.\n ...(prop.format === \"percent\" ? { unit: \"%\" } : {}),\n ...(typeof prop.minimum === \"number\" ? { minimum: prop.minimum } : {}),\n };\n }\n if (schemaHasType(prop, \"array\")) {\n return {\n ...base,\n kind: \"array\",\n ...(prop.items ? { itemSchema: prop.items } : {}),\n ...(layout ? { layout } : {}),\n };\n }\n // An open map: object whose entries are described by an additionalProperties\n // sub-schema and/or per-key patternProperties. Renders as editable key/value\n // rows (+ any known properties), with the value form resolved per key.\n if (isOpenStringMap(prop)) {\n const addl =\n typeof prop.additionalProperties === \"object\" && prop.additionalProperties !== null\n ? (prop.additionalProperties as JsonSchemaProperty)\n : undefined;\n const patterns = patternSchemasOf(prop);\n // A constrained picker (propertyNames enum) or patternProperties still lets\n // the author ADD keys — the additions are limited to the allowed set, not\n // free-form — so `additionalProperties: false` doesn't disable \"Add field\"\n // in that case. It only closes a plain open map with no key constraints.\n const allowExtraKeys = keyOptions || patterns ? true : prop.additionalProperties !== false;\n return {\n ...base,\n kind: \"string-map\",\n ...(addl ? { valueSchema: addl } : {}),\n ...(patterns ? { valuePatternSchemas: patterns } : {}),\n ...(prop.properties ? { knownProperties: prop.properties } : {}),\n allowExtraKeys,\n ...(keyOptions ? { keyOptions } : {}),\n ...(layout ? { layout } : {}),\n };\n }\n // A structured object: fixed `properties`, not an open map. Renders as a\n // nested sub-form (labels, required, if/then) — recursed into by the renderer.\n if (schemaHasType(prop, \"object\") && prop.properties) {\n return {\n ...base,\n kind: \"object\",\n objectProperties: prop.properties,\n ...(prop.required ? { objectRequired: prop.required } : {}),\n ...(layout ? { layout } : {}),\n };\n }\n // A bare object with neither properties nor an additionalProperties schema:\n // treat as an open string map unless explicitly closed.\n if (schemaHasType(prop, \"object\")) {\n return {\n ...base,\n kind: \"string-map\",\n allowExtraKeys: prop.additionalProperties !== false,\n ...(keyOptions ? { keyOptions } : {}),\n ...(layout ? { layout } : {}),\n };\n }\n return base;\n}\n\n// keyOptionsFor resolves the strict map-key picker options from a map schema's\n// `propertyNames.enum` (e.g. an AsCode-constrained key set). Returns undefined\n// when the keys are unconstrained, so the key stays free-text.\nfunction keyOptionsFor(prop: JsonSchemaProperty): FieldOption[] | undefined {\n const pn = prop.propertyNames as JsonSchemaProperty | undefined;\n if (!pn || !Array.isArray(pn.enum) || pn.enum.length === 0) return undefined;\n return enumOptions(pn);\n}\n\n// isScalarStringItems reports whether an array's item schema is a plain string\n// with no richer shape — the case the array control renders as compact tags.\n// Anything with an enum/const/properties/items/additionalProperties/allOf needs\n// a real per-item control instead.\nexport function isScalarStringItems(items: JsonSchemaProperty | undefined): boolean {\n if (!items) return true; // untyped items default to string tags\n if (items.type !== undefined && !schemaHasType(items, \"string\")) return false;\n return (\n items.enum === undefined &&\n items.const === undefined &&\n items.properties === undefined &&\n items.items === undefined &&\n items.additionalProperties === undefined &&\n items.allOf === undefined\n );\n}\n\n// matchesIf reports whether the `if` sub-schema holds for the current value:\n// every `if.required` key is present AND every `if.properties[k].const` equals\n// value[k].\nexport function matchesIf(\n ifSchema: JsonSchemaProperty | undefined,\n value: Record<string, unknown>,\n): boolean {\n if (!ifSchema) return false;\n for (const k of ifSchema.required ?? []) {\n if (!(k in value)) return false;\n }\n for (const [k, sub] of Object.entries(ifSchema.properties ?? {})) {\n if (\"const\" in sub && value[k] !== sub.const) return false;\n }\n return true;\n}\n\nexport interface EffectiveProperties {\n properties: Record<string, JsonSchemaProperty>;\n required: string[];\n}\n\n// effectiveProperties merges the schema's base `properties` with each `allOf`\n// member's contribution. An `if`/`then` member contributes `then.properties`\n// only when its `if` matches the current value; an unconditional member (e.g.\n// an inlined `$ref` composition, which carries its own `properties` and no\n// `if`) always contributes. Later members win on key collision; required is the\n// union. Pure and idempotent.\nexport function effectiveProperties(\n schema: JsonSchemaObject,\n value: Record<string, unknown>,\n): EffectiveProperties {\n const properties: Record<string, JsonSchemaProperty> = { ...schema.properties };\n const required = new Set(schema.required ?? []);\n for (const clause of schema.allOf ?? []) {\n // Unconditional composition member: merge its own properties/required.\n if (clause.if === undefined && clause.then === undefined) {\n for (const [k, sub] of Object.entries(clause.properties ?? {})) {\n properties[k] = sub;\n }\n for (const k of clause.required ?? []) required.add(k);\n continue;\n }\n if (!matchesIf(clause.if, value)) continue;\n const then = clause.then ?? {};\n for (const [k, sub] of Object.entries(then.properties ?? {})) {\n properties[k] = sub;\n }\n for (const k of then.required ?? []) required.add(k);\n }\n return { properties, required: [...required] };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"json-schema-form-resolve.js","sources":["../../src/components/json-schema-form-resolve.ts"],"sourcesContent":["import { createElement, type ReactNode } from \"react\";\nimport type {\n ArrayDisplay,\n EnumDisplay,\n FieldControl,\n FieldOption,\n JsonSchemaObject,\n JsonSchemaProperty,\n LookupDescriptor,\n} from \"./json-schema-form-types\";\nimport { LabelIcon } from \"../data/Icon\";\nimport { isPlainObject } from \"./json-schema-form-utils\";\n\n// isOpenStringMap reports whether a property is an object whose entries are\n// described by a sub-schema in `additionalProperties` (a typed key/value map) or\n// by `patternProperties` (a per-key-pattern value map). Either makes it an\n// editable key/value control rather than a fixed-property sub-form.\nexport function isOpenStringMap(prop: JsonSchemaProperty): boolean {\n if (!schemaHasType(prop, \"object\")) return false;\n if (typeof prop.additionalProperties === \"object\" && prop.additionalProperties !== null) {\n return true;\n }\n return !!prop.patternProperties && Object.keys(prop.patternProperties).length > 0;\n}\n\n// patternSchemasOf compiles a schema's `patternProperties` into the ordered\n// {pattern, schema} list the string-map control matches keys against.\nfunction patternSchemasOf(prop: JsonSchemaProperty): { pattern: string; schema: JsonSchemaProperty }[] | undefined {\n const pp = prop.patternProperties;\n if (!pp || Object.keys(pp).length === 0) return undefined;\n return Object.entries(pp).map(([pattern, schema]) => ({ pattern, schema }));\n}\n\nfunction schemaHasType(prop: JsonSchemaProperty, type: string): boolean {\n if (Array.isArray(prop.type)) return prop.type.includes(type as never);\n return prop.type === type;\n}\n\nfunction enumOptions(prop: JsonSchemaProperty): FieldOption[] {\n const labels = prop[\"x-enum-labels\"];\n const icons = prop[\"x-enum-icons\"];\n const descriptions = prop[\"x-enum-descriptions\"];\n return (prop.enum ?? []).map((v) => {\n const value = String(v);\n const desc = labels?.[value];\n const icon = icons?.[value];\n const description = descriptions?.[value];\n return {\n value,\n label: typeof desc === \"string\" && desc && desc !== value ? `${desc} (${value})` : value,\n ...(typeof icon === \"string\" && icon ? { icon } : {}),\n ...(typeof description === \"string\" && description ? { description } : {}),\n };\n });\n}\n\n// enumDisplay resolves how an enum should render: an explicit `x-enum-display`\n// wins; otherwise an enum carrying `x-enum-icons` defaults to the icon grid.\n// Returns undefined to keep the combobox default.\nfunction enumDisplay(prop: JsonSchemaProperty): EnumDisplay | undefined {\n const d = prop[\"x-enum-display\"];\n if (d === \"combobox\" || d === \"radio\" || d === \"grid\" || d === \"segmented\") return d;\n const icons = prop[\"x-enum-icons\"];\n if (icons && Object.keys(icons).length > 0) return \"grid\";\n return undefined;\n}\n\nfunction arrayDisplay(prop: JsonSchemaProperty): ArrayDisplay | undefined {\n return prop[\"x-array-display\"] === \"filter-pills\" ? \"filter-pills\" : undefined;\n}\n\nfunction schemaHelper(prop: JsonSchemaProperty): string | undefined {\n const description = typeof prop.description === \"string\" ? prop.description.trim() : \"\";\n const help = prop[\"x-help\"];\n const helpBody =\n isPlainObject(help) && typeof help.body === \"string\" ? help.body.trim() : \"\";\n\n if (description && helpBody && helpBody !== description) {\n return `${description} ${helpBody}`;\n }\n return description || helpBody || undefined;\n}\n\n// adornmentNode builds a prefix/suffix node from the x-input-*[-icon] extensions:\n// a runtime icon name wins, else static text. Returns undefined when neither set.\nfunction adornmentNode(iconName: unknown, text: unknown): ReactNode {\n if (typeof iconName === \"string\" && iconName) {\n // Match the library's InputField field-icon convention (16px, muted/70) so a\n // schema-driven field lines up with a hand-built one.\n return createElement(LabelIcon, { icon: iconName, className: \"size-4 text-muted-foreground/70\" });\n }\n if (typeof text === \"string\" && text) {\n return createElement(\"span\", { className: \"text-sm text-muted-foreground\" }, text);\n }\n return undefined;\n}\n\n// enumBranch returns the first anyOf/oneOf member carrying a non-empty `enum`,\n// for a union of \"an enum value OR a free-form string\" (e.g. a value-or-token\n// field). It lets such a union render as a dropdown. Returns undefined when no\n// branch enumerates values.\nexport function enumBranch(prop: JsonSchemaProperty): JsonSchemaProperty | undefined {\n for (const branch of [...(prop.anyOf ?? []), ...(prop.oneOf ?? [])]) {\n if (Array.isArray(branch.enum) && branch.enum.length > 0) return branch;\n }\n return undefined;\n}\n\n// lookupDescriptor reads the `x-clicky-lookup` extension into a LookupDescriptor,\n// returning undefined when the keyword is absent or lacks its required url/filter.\nfunction lookupDescriptor(prop: JsonSchemaProperty): LookupDescriptor | undefined {\n const raw = prop[\"x-clicky-lookup\"];\n if (!raw || typeof raw !== \"object\") return undefined;\n const d = raw as Record<string, unknown>;\n if (typeof d.url !== \"string\" || typeof d.filter !== \"string\") return undefined;\n return raw as LookupDescriptor;\n}\n\nexport interface ResolveControlArgs {\n key: string;\n prop: JsonSchemaProperty;\n required: boolean;\n value: unknown;\n onChange: (next: unknown) => void;\n}\n\n// resolveControl infers a base, render-ready FieldControl from a property\n// schema. It keys off schema keywords only — never the field name: ascode/token\n// heuristics are layered on by consumer pre-extensions. The one exception is the\n// standard `format: date`/`date-time` keyword, which is a schema-declared signal\n// (not a name guess) and so drives a date control directly. First match wins.\nexport function resolveControl(args: ResolveControlArgs): FieldControl {\n const { key, prop, required, value, onChange } = args;\n const labelIcon = prop[\"x-icon\"];\n const xLayout = prop[\"x-layout\"];\n const explicitLayout =\n xLayout === \"inline\" || xLayout === \"stack\" || xLayout === \"table\" ? xLayout : undefined;\n // `x-label-position` is a friendlier alias over the same per-field layout knob:\n // \"top\" stacks the label above the value; \"left\" forces inline. `x-layout` wins.\n const labelPosition = prop[\"x-label-position\"];\n const layout =\n explicitLayout ??\n (labelPosition === \"top\" ? \"stack\" : labelPosition === \"left\" ? \"inline\" : undefined);\n const prefix = adornmentNode(prop[\"x-input-prefix-icon\"], prop[\"x-input-prefix\"]);\n const suffix = adornmentNode(prop[\"x-input-suffix-icon\"], prop[\"x-input-suffix\"]);\n const labelClassName =\n typeof prop[\"x-label-classes\"] === \"string\" ? prop[\"x-label-classes\"] : undefined;\n const inputClassName =\n typeof prop[\"x-input-classes\"] === \"string\" ? prop[\"x-input-classes\"] : undefined;\n const colSpan =\n typeof prop[\"x-col-span\"] === \"number\" && Number.isFinite(prop[\"x-col-span\"])\n ? prop[\"x-col-span\"]\n : undefined;\n const keyOptions = keyOptionsFor(prop);\n const helper = schemaHelper(prop);\n const base: FieldControl = {\n key,\n kind: \"string\",\n label: typeof prop.title === \"string\" && prop.title ? prop.title : key,\n required,\n schema: prop,\n value,\n onChange,\n ...(prop.readOnly === true ? { readOnly: true } : {}),\n ...(typeof prop.description === \"string\" ? { description: prop.description } : {}),\n ...(helper ? { helper } : {}),\n ...(labelIcon != null && labelIcon !== \"\" ? { labelIcon: labelIcon as FieldControl[\"labelIcon\"] } : {}),\n ...(layout ? { layout } : {}),\n ...(prefix ? { prefix } : {}),\n ...(suffix ? { suffix } : {}),\n ...(labelClassName ? { labelClassName } : {}),\n ...(inputClassName ? { inputClassName } : {}),\n ...(colSpan != null ? { colSpan } : {}),\n };\n\n // An `x-clicky-lookup` field is an async entity-reference picker: options load\n // lazily from another entity's list endpoint. Single-select also allows\n // free-form entry so a typed value outside the option set still commits.\n const lookup = lookupDescriptor(prop);\n if (lookup) {\n return { ...base, kind: \"lookup\", lookup, options: [], allowCustomValue: lookup.multi !== true };\n }\n if (Array.isArray(prop.enum) && prop.enum.length > 0) {\n const display = enumDisplay(prop);\n return { ...base, kind: \"enum\", options: enumOptions(prop), ...(display ? { display } : {}) };\n }\n // A value-or-template union: the enum lives in an anyOf/oneOf branch alongside\n // free-form branches. Render it as a dropdown using that branch's enum; the\n // free-form branches are honoured via a consumer's allowCustomValue pre-ext.\n const branch = enumBranch(prop);\n if (branch) {\n return { ...base, kind: \"enum\", options: enumOptions(branch) };\n }\n // A schema-declared date/date-time string renders as a date control.\n if (prop.format === \"date\" || prop.format === \"date-time\") {\n return { ...base, kind: \"date\", dateFormat: prop.format };\n }\n // A long-form string declares `format: textarea` to render a multi-line box.\n if (prop.format === \"textarea\" && schemaHasType(prop, \"string\")) {\n return { ...base, kind: \"textarea\" };\n }\n // A markdown string declares `format: md` to render the MDXEditor-backed\n // editor. Plugin toggles live under `x-md-editor` so schema authors can keep\n // the format signal standard-sized and the editor behavior explicit.\n if (prop.format === \"md\" && schemaHasType(prop, \"string\")) {\n const markdownOptions = prop[\"x-md-editor\"];\n return {\n ...base,\n kind: \"markdown\",\n ...(isPlainObject(markdownOptions) ? { markdownOptions } : {}),\n };\n }\n if (schemaHasType(prop, \"boolean\")) {\n return { ...base, kind: \"boolean\" };\n }\n if (schemaHasType(prop, \"integer\") || schemaHasType(prop, \"number\")) {\n return {\n ...base,\n kind: \"number\",\n coerceNumber: true,\n // A percent number carries a static \"%\" unit shown inside the input.\n ...(prop.format === \"percent\" ? { unit: \"%\" } : {}),\n ...(typeof prop.minimum === \"number\" ? { minimum: prop.minimum } : {}),\n };\n }\n if (schemaHasType(prop, \"array\")) {\n const display = arrayDisplay(prop);\n const itemSchema = prop.items;\n return {\n ...base,\n kind: \"array\",\n ...(itemSchema ? { itemSchema } : {}),\n ...(display ? { arrayDisplay: display } : {}),\n ...(display && itemSchema && Array.isArray(itemSchema.enum)\n ? { options: enumOptions(itemSchema) }\n : {}),\n ...(layout ? { layout } : {}),\n };\n }\n // An open map: object whose entries are described by an additionalProperties\n // sub-schema and/or per-key patternProperties. Renders as editable key/value\n // rows (+ any known properties), with the value form resolved per key.\n if (isOpenStringMap(prop)) {\n const addl =\n typeof prop.additionalProperties === \"object\" && prop.additionalProperties !== null\n ? (prop.additionalProperties as JsonSchemaProperty)\n : undefined;\n const patterns = patternSchemasOf(prop);\n // A constrained picker (propertyNames enum) or patternProperties still lets\n // the author ADD keys — the additions are limited to the allowed set, not\n // free-form — so `additionalProperties: false` doesn't disable \"Add field\"\n // in that case. It only closes a plain open map with no key constraints.\n const allowExtraKeys = keyOptions || patterns ? true : prop.additionalProperties !== false;\n return {\n ...base,\n kind: \"string-map\",\n ...(addl ? { valueSchema: addl } : {}),\n ...(patterns ? { valuePatternSchemas: patterns } : {}),\n ...(prop.properties ? { knownProperties: prop.properties } : {}),\n allowExtraKeys,\n ...(keyOptions ? { keyOptions } : {}),\n ...(layout ? { layout } : {}),\n };\n }\n // A structured object: fixed `properties`, not an open map. Renders as a\n // nested sub-form (labels, required, if/then) — recursed into by the renderer.\n if (schemaHasType(prop, \"object\")) {\n const valueObject = isPlainObject(value) ? value : {};\n const objectFields = effectiveProperties(prop as JsonSchemaObject, valueObject);\n if (Object.keys(objectFields.properties).length > 0 || prop.properties) {\n return {\n ...base,\n kind: \"object\",\n objectProperties: objectFields.properties,\n ...(objectFields.required.length > 0 ? { objectRequired: objectFields.required } : {}),\n ...(layout ? { layout } : {}),\n };\n }\n }\n // A bare object with neither properties nor an additionalProperties schema:\n // treat as an open string map unless explicitly closed.\n if (schemaHasType(prop, \"object\")) {\n return {\n ...base,\n kind: \"string-map\",\n allowExtraKeys: prop.additionalProperties !== false,\n ...(keyOptions ? { keyOptions } : {}),\n ...(layout ? { layout } : {}),\n };\n }\n return base;\n}\n\n// keyOptionsFor resolves the strict map-key picker options from a map schema's\n// `propertyNames.enum` (e.g. an AsCode-constrained key set). Returns undefined\n// when the keys are unconstrained, so the key stays free-text.\nfunction keyOptionsFor(prop: JsonSchemaProperty): FieldOption[] | undefined {\n const pn = prop.propertyNames as JsonSchemaProperty | undefined;\n if (!pn || !Array.isArray(pn.enum) || pn.enum.length === 0) return undefined;\n return enumOptions(pn);\n}\n\n// isScalarStringItems reports whether an array's item schema is a plain string\n// with no richer shape — the case the array control renders as compact tags.\n// Anything with an enum/const/properties/items/additionalProperties/allOf needs\n// a real per-item control instead.\nexport function isScalarStringItems(items: JsonSchemaProperty | undefined): boolean {\n if (!items) return true; // untyped items default to string tags\n if (items.type !== undefined && !schemaHasType(items, \"string\")) return false;\n return (\n items.enum === undefined &&\n items.const === undefined &&\n items.properties === undefined &&\n items.items === undefined &&\n items.additionalProperties === undefined &&\n items.allOf === undefined\n );\n}\n\n// matchesIf reports whether the `if` sub-schema holds for the current value:\n// every `if.required` key is present AND every `if.properties[k].const` equals\n// value[k].\nexport function matchesIf(\n ifSchema: JsonSchemaProperty | undefined,\n value: Record<string, unknown>,\n): boolean {\n if (!ifSchema) return false;\n for (const k of ifSchema.required ?? []) {\n if (!(k in value)) return false;\n }\n for (const [k, sub] of Object.entries(ifSchema.properties ?? {})) {\n if (\"const\" in sub && value[k] !== sub.const) return false;\n }\n return true;\n}\n\nexport interface EffectiveProperties {\n properties: Record<string, JsonSchemaProperty>;\n required: string[];\n}\n\n// applySchemaDefaults fills missing values from JSON Schema `default` keywords.\n// It walks fixed object properties recursively and re-evaluates `if`/`then`\n// branches after each pass, so a defaulted discriminator can activate defaults\n// in its selected branch. Existing values, including null and empty strings, are\n// never replaced. The original value is returned when no defaults apply.\nexport function applySchemaDefaults(\n schema: JsonSchemaObject,\n value: Record<string, unknown>,\n): Record<string, unknown> {\n return applyObjectDefaults(schema, value, new Set());\n}\n\nfunction applyObjectDefaults(\n schema: JsonSchemaObject,\n value: Record<string, unknown>,\n ancestors: Set<JsonSchemaObject>,\n): Record<string, unknown> {\n // Recursive schemas may point back to an ancestor after refs are hydrated.\n if (ancestors.has(schema)) return value;\n const nextAncestors = new Set(ancestors).add(schema);\n let next = value;\n\n // A default can select another conditional branch, so allow enough passes for\n // a chain of discriminator defaults while keeping malformed schemas bounded.\n const maxPasses = Math.min(\n 100,\n Object.keys(schema.properties ?? {}).length + (schema.allOf?.length ?? 0) + 2,\n );\n for (let pass = 0; pass < maxPasses; pass += 1) {\n const { properties } = effectiveProperties(schema, next);\n let passChanged = false;\n let passValue = next;\n\n for (const [key, propertySchema] of Object.entries(properties)) {\n const existing = passValue[key];\n let fieldValue = existing;\n let fieldChanged = false;\n\n if (existing === undefined && propertySchema.default !== undefined) {\n fieldValue = cloneSchemaDefault(propertySchema.default);\n fieldChanged = true;\n }\n\n const structuredObject =\n schemaHasType(propertySchema, \"object\") ||\n propertySchema.properties !== undefined ||\n propertySchema.allOf !== undefined;\n if (structuredObject && !isOpenStringMap(propertySchema)) {\n const objectValue = isPlainObject(fieldValue)\n ? (fieldValue as Record<string, unknown>)\n : {};\n const defaultedObject = applyObjectDefaults(\n propertySchema as JsonSchemaObject,\n objectValue,\n nextAncestors,\n );\n if (defaultedObject !== objectValue) {\n fieldValue = defaultedObject;\n fieldChanged = true;\n }\n }\n\n if (fieldChanged) {\n if (!passChanged) passValue = { ...next };\n passValue[key] = fieldValue;\n passChanged = true;\n }\n }\n\n if (!passChanged) break;\n next = passValue;\n }\n return next;\n}\n\nfunction cloneSchemaDefault(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(cloneSchemaDefault);\n if (isPlainObject(value)) {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>).map(([key, entry]) => [\n key,\n cloneSchemaDefault(entry),\n ]),\n );\n }\n return value;\n}\n\n// effectiveProperties merges the schema's base `properties` with each `allOf`\n// member's contribution. An `if`/`then` member contributes `then.properties`\n// only when its `if` matches the current value; an unconditional member (e.g.\n// an inlined `$ref` composition, which carries its own `properties` and no\n// `if`) always contributes. Later members win on key collision; required is the\n// union. Pure and idempotent.\nexport function effectiveProperties(\n schema: JsonSchemaObject,\n value: Record<string, unknown>,\n): EffectiveProperties {\n const properties: Record<string, JsonSchemaProperty> = { ...schema.properties };\n const required = new Set(schema.required ?? []);\n for (const clause of schema.allOf ?? []) {\n // Unconditional composition member: merge its own properties/required.\n if (clause.if === undefined && clause.then === undefined) {\n for (const [k, sub] of Object.entries(clause.properties ?? {})) {\n properties[k] = sub;\n }\n for (const k of clause.required ?? []) required.add(k);\n continue;\n }\n if (!matchesIf(clause.if, value)) continue;\n const then = clause.then ?? {};\n for (const [k, sub] of Object.entries(then.properties ?? {})) {\n properties[k] = sub;\n }\n for (const k of then.required ?? []) required.add(k);\n }\n return { properties, required: [...required] };\n}\n"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@ export interface JsonSchemaProperty {
14
14
  readOnly?: boolean;
15
15
  minimum?: number;
16
16
  maximum?: number;
17
+ multipleOf?: number;
17
18
  items?: JsonSchemaProperty;
18
19
  properties?: Record<string, JsonSchemaProperty>;
19
20
  required?: string[];
@@ -28,9 +29,23 @@ export interface JsonSchemaProperty {
28
29
  "x-order"?: string[];
29
30
  "x-enum-labels"?: Record<string, string>;
30
31
  "x-enum-icons"?: Record<string, string>;
32
+ "x-enum-descriptions"?: Record<string, string>;
31
33
  "x-enum-display"?: EnumDisplay;
34
+ "x-array-display"?: ArrayDisplay;
35
+ "x-number-display"?: "slider";
32
36
  "x-clicky-order"?: number;
33
37
  "x-md-editor"?: MdxEditorPluginOptions;
38
+ "x-help"?: JsonSchemaHelpBlock;
39
+ "x-label-classes"?: string;
40
+ "x-input-classes"?: string;
41
+ "x-input-prefix"?: string;
42
+ "x-input-suffix"?: string;
43
+ "x-input-prefix-icon"?: string;
44
+ "x-input-suffix-icon"?: string;
45
+ "x-label-position"?: "top" | "left";
46
+ "x-col-span"?: number;
47
+ "x-columns"?: number;
48
+ "x-classes"?: string;
34
49
  [key: string]: unknown;
35
50
  }
36
51
  export type JsonSchemaType = "object" | "array" | "string" | "integer" | "number" | "boolean" | "null";
@@ -52,7 +67,13 @@ export interface JsonSchemaObject extends JsonSchemaProperty {
52
67
  }
53
68
  export type FieldControlKind = "string" | "number" | "boolean" | "enum" | "lookup" | "date" | "string-map" | "array" | "object" | "textarea" | "markdown" | "display" | "link";
54
69
  export type DisplayVariant = "heading" | "text" | "divider" | "spacer";
55
- export type EnumDisplay = "combobox" | "radio" | "grid";
70
+ export type EnumDisplay = "combobox" | "radio" | "grid" | "segmented";
71
+ export type ArrayDisplay = "filter-pills";
72
+ export interface JsonSchemaHelpBlock {
73
+ source?: string;
74
+ section?: string;
75
+ body?: string;
76
+ }
56
77
  export interface FieldControl {
57
78
  key: string;
58
79
  kind: FieldControlKind;
@@ -64,6 +85,9 @@ export interface FieldControl {
64
85
  onChange: (next: unknown) => void;
65
86
  readOnly?: boolean;
66
87
  labelIcon?: LabelIconSpec;
88
+ labelClassName?: string;
89
+ inputClassName?: string;
90
+ colSpan?: number;
67
91
  options?: FieldOption[];
68
92
  allowCustomValue?: boolean;
69
93
  lookup?: LookupDescriptor;
@@ -90,6 +114,7 @@ export interface FieldControl {
90
114
  keyOptions?: FieldOption[];
91
115
  layout?: "inline" | "stack" | "table";
92
116
  itemSchema?: JsonSchemaProperty;
117
+ arrayDisplay?: ArrayDisplay;
93
118
  objectProperties?: Record<string, JsonSchemaProperty>;
94
119
  objectRequired?: string[];
95
120
  }
@@ -97,6 +122,7 @@ export interface FieldOption {
97
122
  value: string;
98
123
  label: string;
99
124
  icon?: LabelIconSpec;
125
+ description?: string;
100
126
  }
101
127
  export interface LookupDescriptor {
102
128
  url: string;
@@ -127,6 +153,7 @@ export type PostExtension = (field: FieldControl, nodes: {
127
153
  value: ReactNode;
128
154
  }, ctx?: {
129
155
  rootValue?: Record<string, unknown>;
156
+ onRootChange?: (next: Record<string, unknown>) => void;
130
157
  }) => {
131
158
  label: ReactNode;
132
159
  value: ReactNode;
@@ -157,9 +184,11 @@ export interface RenderContext {
157
184
  size: FormSize;
158
185
  idPrefix?: string;
159
186
  sortMode: SortMode;
187
+ fieldFilter?: string;
160
188
  pre: PreExtension[];
161
189
  post: PostExtension[];
162
190
  rootValue?: Record<string, unknown>;
191
+ onRootChange?: (next: Record<string, unknown>) => void;
163
192
  depth: number;
164
193
  render: RenderApi;
165
194
  }
@@ -1 +1 @@
1
- {"version":3,"file":"json-schema-form-types.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"json-schema-form-types.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-types.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,16 @@ function toText(value) {
22
22
  function isPlainObject(value) {
23
23
  return typeof value === "object" && value !== null && !Array.isArray(value);
24
24
  }
25
+ function normalizeColumns(value) {
26
+ const n = typeof value === "number" ? value : Number(value);
27
+ if (!Number.isFinite(n) || n < 1) return 1;
28
+ return Math.min(Math.trunc(n), 12);
29
+ }
30
+ function normalizeColSpan(value, columns) {
31
+ const n = typeof value === "number" ? value : Number(value);
32
+ if (!Number.isFinite(n) || n < 1) return 1;
33
+ return Math.min(Math.trunc(n), columns);
34
+ }
25
35
  function withSyntheticValue(options, value) {
26
36
  if (!value || options.some((o) => o.value === value)) return options;
27
37
  return [{ value, label: value }, ...options];
@@ -30,6 +40,12 @@ function keyPickerOptions(options, usedKeys, currentKey) {
30
40
  const taken = new Set(usedKeys.filter((k) => k !== currentKey));
31
41
  return options.filter((o) => !taken.has(o.value));
32
42
  }
43
+ function matchesFieldFilter(key, prop, filter) {
44
+ const query = filter.trim().toLowerCase();
45
+ if (!query) return true;
46
+ const label = typeof prop.title === "string" && prop.title ? prop.title : key;
47
+ return key.toLowerCase().includes(query) || label.toLowerCase().includes(query);
48
+ }
33
49
  function orderByXOrder(entries, order) {
34
50
  if (!Array.isArray(order) || order.length === 0) return entries;
35
51
  const rank = new Map(
@@ -103,7 +119,10 @@ exports.inputClass = inputClass;
103
119
  exports.isEmptyValue = isEmptyValue;
104
120
  exports.isPlainObject = isPlainObject;
105
121
  exports.keyPickerOptions = keyPickerOptions;
122
+ exports.matchesFieldFilter = matchesFieldFilter;
106
123
  exports.moveItem = moveItem;
124
+ exports.normalizeColSpan = normalizeColSpan;
125
+ exports.normalizeColumns = normalizeColumns;
107
126
  exports.orderByClickyOrder = orderByClickyOrder;
108
127
  exports.orderByPriority = orderByPriority;
109
128
  exports.orderByXOrder = orderByXOrder;
@@ -1 +1 @@
1
- {"version":3,"file":"json-schema-form-utils.cjs","sources":["../../src/components/json-schema-form-utils.ts"],"sourcesContent":["import { cn } from \"../lib/utils\";\nimport { inputSizeClass, type FormSize } from \"./json-schema-form-size\";\nimport type { FieldControl, FieldOption, JsonSchemaProperty } from \"./json-schema-form-types\";\n\n// Non-size styling shared by every text-like input box; the size token supplies\n// height, horizontal padding, and text size (see inputSizeClass).\nconst INPUT_BASE =\n \"w-full min-w-0 rounded-md border border-input bg-background text-foreground outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:bg-muted/40 focus-visible:ring-2 focus-visible:ring-ring\";\n\nexport function inputClass(size: FormSize): string {\n return cn(INPUT_BASE, inputSizeClass[size]);\n}\n\nexport function fieldInputId(key: string, prefix?: string): string {\n const safe = key.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n return prefix ? `jsf-${prefix}-${safe}` : `jsf-${safe}`;\n}\n\nexport function defaultPlaceholder(schema: JsonSchemaProperty): string {\n if (schema.default != null && typeof schema.default !== \"object\") return String(schema.default);\n return \"\";\n}\n\nexport function toText(value: unknown): string {\n if (value === undefined || value === null) return \"\";\n if (typeof value === \"object\") return \"\";\n return String(value);\n}\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n// withSyntheticValue prepends the current value as an option when it is not in\n// the enum, so an out-of-enum value (e.g. a template token) still displays.\nexport function withSyntheticValue(options: FieldOption[], value: string): FieldOption[] {\n if (!value || options.some((o) => o.value === value)) return options;\n return [{ value, label: value }, ...options];\n}\n\n// keyPickerOptions narrows the map-key enum to keys not already used by another\n// entry, while always keeping this row's current key so it stays selectable.\nexport function keyPickerOptions(\n options: FieldOption[],\n usedKeys: string[],\n currentKey: string,\n): FieldOption[] {\n const taken = new Set(usedKeys.filter((k) => k !== currentKey));\n return options.filter((o) => !taken.has(o.value));\n}\n\n// orderByXOrder reorders property entries by the schema's `x-order` hint: keys\n// named there render first (in that order), the rest keep document order. A\n// missing/empty hint is a no-op, so document order remains the default.\nexport function orderByXOrder<T>(entries: [string, T][], order: unknown): [string, T][] {\n if (!Array.isArray(order) || order.length === 0) return entries;\n const rank = new Map(\n order.filter((k): k is string => typeof k === \"string\").map((k, i) => [k, i]),\n );\n const listed = entries\n .filter(([key]) => rank.has(key))\n .sort((a, b) => rank.get(a[0])! - rank.get(b[0])!);\n const rest = entries.filter(([key]) => !rank.has(key));\n return [...listed, ...rest];\n}\n\n// orderByClickyOrder stably sorts property entries by each property's numeric\n// `x-clicky-order` (lower first); entries without it keep their incoming order\n// after the ordered ones. An explicit index tie-break keeps it stable regardless\n// of the engine's sort stability. Unlike the object-level `x-order` array, this\n// composes across merged if/then branches because each property carries its own\n// order — the right tool when fields come from different (embedded) sources.\nexport function orderByClickyOrder(\n entries: [string, JsonSchemaProperty][],\n): [string, JsonSchemaProperty][] {\n const rank = (prop: JsonSchemaProperty): number => {\n const o = prop[\"x-clicky-order\"];\n return typeof o === \"number\" ? o : Number.POSITIVE_INFINITY;\n };\n return entries\n .map((entry, index) => ({ entry, index, rank: rank(entry[1]) }))\n .sort((a, b) => a.rank - b.rank || a.index - b.index)\n .map((ranked) => ranked.entry);\n}\n\n// orderRequiredFirst stably partitions property entries so the keys named in\n// `required` come first (in their original order), then the rest (in theirs).\n// A stable two-pass partition, so it never reshuffles within either group.\nexport function orderRequiredFirst<T>(\n entries: [string, T][],\n required: string[],\n): [string, T][] {\n const isRequired = new Set(required);\n const head = entries.filter(([key]) => isRequired.has(key));\n const tail = entries.filter(([key]) => !isRequired.has(key));\n return [...head, ...tail];\n}\n\n// isEmptyValue reports whether a field's value carries no data, so priority\n// sorting can sink unfilled fields. Empty = undefined/null/\"\" plus empty arrays\n// and empty plain objects; `false` and `0` count as filled (they are choices).\nexport function isEmptyValue(value: unknown): boolean {\n if (value === undefined || value === null || value === \"\") return true;\n if (Array.isArray(value)) return value.length === 0;\n if (typeof value === \"object\") return Object.keys(value).length === 0;\n return false;\n}\n\n// orderByPriority sorts property entries so the fields that matter most surface\n// first, ranking each by a score: +2 if required, +1 if its value is non-empty.\n// Required-and-filled lead, then required-and-empty, then optional-and-filled,\n// then optional-and-empty. Ties keep their incoming order (explicit index\n// tie-break, so it does not depend on the engine's sort stability).\nexport function orderByPriority<T>(\n entries: [string, T][],\n required: string[],\n values: Record<string, unknown>,\n): [string, T][] {\n const isRequired = new Set(required);\n const score = (key: string): number =>\n (isRequired.has(key) ? 2 : 0) + (isEmptyValue(values[key]) ? 0 : 1);\n return entries\n .map((entry, index) => ({ entry, index, score: score(entry[0]) }))\n .sort((a, b) => b.score - a.score || a.index - b.index)\n .map((ranked) => ranked.entry);\n}\n\n// softError computes a display-only validation hint. It never blocks onChange.\n// Consumers suppress the unknown-enum hint by setting allowCustomValue.\nexport function softError(field: FieldControl): string | undefined {\n const v = field.value;\n const isEmpty = v === undefined || v === null || v === \"\";\n if (field.required && isEmpty) return \"Required\";\n\n if (field.kind === \"number\" && typeof field.minimum === \"number\" && typeof v === \"number\") {\n if (v < field.minimum) return `Must be ≥ ${field.minimum}`;\n }\n\n if (field.kind === \"enum\" && !field.allowCustomValue && !isEmpty) {\n const known = (field.options ?? []).some((o) => o.value === String(v));\n if (!known) return \"Unknown value (allowed)\";\n }\n return undefined;\n}\n\n// Immutable array helpers used by the array control.\nexport function setIndex<T>(arr: T[], i: number, v: T): T[] {\n return arr.map((x, idx) => (idx === i ? v : x));\n}\n\nexport function removeIndex<T>(arr: T[], i: number): T[] {\n return arr.filter((_, idx) => idx !== i);\n}\n\nexport function moveItem<T>(arr: T[], from: number, to: number): T[] {\n if (to < 0 || to >= arr.length) return arr;\n const next = [...arr];\n const [moved] = next.splice(from, 1);\n next.splice(to, 0, moved as T);\n return next;\n}\n\n// seedFromSchema produces the initial value for a freshly-added array item or\n// object field, honouring an explicit default.\nexport function seedFromSchema(schema: JsonSchemaProperty): unknown {\n if (schema.default !== undefined) return schema.default;\n const type = Array.isArray(schema.type) ? schema.type[0] : schema.type;\n if (type === \"array\") return [];\n if (type === \"object\") return {};\n if (type === \"boolean\") return false;\n // Numbers seed as \"\" so the soft Required hint can show without coercion\n // surprises; the number control coerces on first real input.\n return \"\";\n}\n"],"names":["cn","inputSizeClass"],"mappings":"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"}
1
+ {"version":3,"file":"json-schema-form-utils.cjs","sources":["../../src/components/json-schema-form-utils.ts"],"sourcesContent":["import { cn } from \"../lib/utils\";\nimport { inputSizeClass, type FormSize } from \"./json-schema-form-size\";\nimport type { FieldControl, FieldOption, JsonSchemaProperty } from \"./json-schema-form-types\";\n\n// Non-size styling shared by every text-like input box; the size token supplies\n// height, horizontal padding, and text size (see inputSizeClass).\nconst INPUT_BASE =\n \"w-full min-w-0 rounded-md border border-input bg-background text-foreground outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:bg-muted/40 focus-visible:ring-2 focus-visible:ring-ring\";\n\nexport function inputClass(size: FormSize): string {\n return cn(INPUT_BASE, inputSizeClass[size]);\n}\n\nexport function fieldInputId(key: string, prefix?: string): string {\n const safe = key.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n return prefix ? `jsf-${prefix}-${safe}` : `jsf-${safe}`;\n}\n\nexport function defaultPlaceholder(schema: JsonSchemaProperty): string {\n if (schema.default != null && typeof schema.default !== \"object\") return String(schema.default);\n return \"\";\n}\n\nexport function toText(value: unknown): string {\n if (value === undefined || value === null) return \"\";\n if (typeof value === \"object\") return \"\";\n return String(value);\n}\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n// Object-level `x-columns`: how many equal columns to split a stacked object\n// into. Clamped to [1, 12] (a standard 12-track grid, so a 3-across row of\n// span-4 fields and a 4-across row of span-3 fields share one object); anything\n// invalid falls back to a single column.\nexport function normalizeColumns(value: unknown): number {\n const n = typeof value === \"number\" ? value : Number(value);\n if (!Number.isFinite(n) || n < 1) return 1;\n return Math.min(Math.trunc(n), 12);\n}\n\n// Per-field `x-col-span`: how many of the object's columns a field occupies.\n// Clamped to [1, columns]; invalid falls back to 1.\nexport function normalizeColSpan(value: unknown, columns: number): number {\n const n = typeof value === \"number\" ? value : Number(value);\n if (!Number.isFinite(n) || n < 1) return 1;\n return Math.min(Math.trunc(n), columns);\n}\n\n// withSyntheticValue prepends the current value as an option when it is not in\n// the enum, so an out-of-enum value (e.g. a template token) still displays.\nexport function withSyntheticValue(options: FieldOption[], value: string): FieldOption[] {\n if (!value || options.some((o) => o.value === value)) return options;\n return [{ value, label: value }, ...options];\n}\n\n// keyPickerOptions narrows the map-key enum to keys not already used by another\n// entry, while always keeping this row's current key so it stays selectable.\nexport function keyPickerOptions(\n options: FieldOption[],\n usedKeys: string[],\n currentKey: string,\n): FieldOption[] {\n const taken = new Set(usedKeys.filter((k) => k !== currentKey));\n return options.filter((o) => !taken.has(o.value));\n}\n\n// matchesFieldFilter reports whether a property should stay visible under the\n// display-options field filter: a case-insensitive substring match against the\n// field's key and its display label (`title` when set, otherwise the key). A\n// blank filter matches everything, so an empty box never hides fields.\nexport function matchesFieldFilter(\n key: string,\n prop: JsonSchemaProperty,\n filter: string,\n): boolean {\n const query = filter.trim().toLowerCase();\n if (!query) return true;\n const label = typeof prop.title === \"string\" && prop.title ? prop.title : key;\n return key.toLowerCase().includes(query) || label.toLowerCase().includes(query);\n}\n\n// orderByXOrder reorders property entries by the schema's `x-order` hint: keys\n// named there render first (in that order), the rest keep document order. A\n// missing/empty hint is a no-op, so document order remains the default.\nexport function orderByXOrder<T>(entries: [string, T][], order: unknown): [string, T][] {\n if (!Array.isArray(order) || order.length === 0) return entries;\n const rank = new Map(\n order.filter((k): k is string => typeof k === \"string\").map((k, i) => [k, i]),\n );\n const listed = entries\n .filter(([key]) => rank.has(key))\n .sort((a, b) => rank.get(a[0])! - rank.get(b[0])!);\n const rest = entries.filter(([key]) => !rank.has(key));\n return [...listed, ...rest];\n}\n\n// orderByClickyOrder stably sorts property entries by each property's numeric\n// `x-clicky-order` (lower first); entries without it keep their incoming order\n// after the ordered ones. An explicit index tie-break keeps it stable regardless\n// of the engine's sort stability. Unlike the object-level `x-order` array, this\n// composes across merged if/then branches because each property carries its own\n// order — the right tool when fields come from different (embedded) sources.\nexport function orderByClickyOrder(\n entries: [string, JsonSchemaProperty][],\n): [string, JsonSchemaProperty][] {\n const rank = (prop: JsonSchemaProperty): number => {\n const o = prop[\"x-clicky-order\"];\n return typeof o === \"number\" ? o : Number.POSITIVE_INFINITY;\n };\n return entries\n .map((entry, index) => ({ entry, index, rank: rank(entry[1]) }))\n .sort((a, b) => a.rank - b.rank || a.index - b.index)\n .map((ranked) => ranked.entry);\n}\n\n// orderRequiredFirst stably partitions property entries so the keys named in\n// `required` come first (in their original order), then the rest (in theirs).\n// A stable two-pass partition, so it never reshuffles within either group.\nexport function orderRequiredFirst<T>(\n entries: [string, T][],\n required: string[],\n): [string, T][] {\n const isRequired = new Set(required);\n const head = entries.filter(([key]) => isRequired.has(key));\n const tail = entries.filter(([key]) => !isRequired.has(key));\n return [...head, ...tail];\n}\n\n// isEmptyValue reports whether a field's value carries no data, so priority\n// sorting can sink unfilled fields. Empty = undefined/null/\"\" plus empty arrays\n// and empty plain objects; `false` and `0` count as filled (they are choices).\nexport function isEmptyValue(value: unknown): boolean {\n if (value === undefined || value === null || value === \"\") return true;\n if (Array.isArray(value)) return value.length === 0;\n if (typeof value === \"object\") return Object.keys(value).length === 0;\n return false;\n}\n\n// orderByPriority sorts property entries so the fields that matter most surface\n// first, ranking each by a score: +2 if required, +1 if its value is non-empty.\n// Required-and-filled lead, then required-and-empty, then optional-and-filled,\n// then optional-and-empty. Ties keep their incoming order (explicit index\n// tie-break, so it does not depend on the engine's sort stability).\nexport function orderByPriority<T>(\n entries: [string, T][],\n required: string[],\n values: Record<string, unknown>,\n): [string, T][] {\n const isRequired = new Set(required);\n const score = (key: string): number =>\n (isRequired.has(key) ? 2 : 0) + (isEmptyValue(values[key]) ? 0 : 1);\n return entries\n .map((entry, index) => ({ entry, index, score: score(entry[0]) }))\n .sort((a, b) => b.score - a.score || a.index - b.index)\n .map((ranked) => ranked.entry);\n}\n\n// softError computes a display-only validation hint. It never blocks onChange.\n// Consumers suppress the unknown-enum hint by setting allowCustomValue.\nexport function softError(field: FieldControl): string | undefined {\n const v = field.value;\n const isEmpty = v === undefined || v === null || v === \"\";\n if (field.required && isEmpty) return \"Required\";\n\n if (field.kind === \"number\" && typeof field.minimum === \"number\" && typeof v === \"number\") {\n if (v < field.minimum) return `Must be ≥ ${field.minimum}`;\n }\n\n if (field.kind === \"enum\" && !field.allowCustomValue && !isEmpty) {\n const known = (field.options ?? []).some((o) => o.value === String(v));\n if (!known) return \"Unknown value (allowed)\";\n }\n return undefined;\n}\n\n// Immutable array helpers used by the array control.\nexport function setIndex<T>(arr: T[], i: number, v: T): T[] {\n return arr.map((x, idx) => (idx === i ? v : x));\n}\n\nexport function removeIndex<T>(arr: T[], i: number): T[] {\n return arr.filter((_, idx) => idx !== i);\n}\n\nexport function moveItem<T>(arr: T[], from: number, to: number): T[] {\n if (to < 0 || to >= arr.length) return arr;\n const next = [...arr];\n const [moved] = next.splice(from, 1);\n next.splice(to, 0, moved as T);\n return next;\n}\n\n// seedFromSchema produces the initial value for a freshly-added array item or\n// object field, honouring an explicit default.\nexport function seedFromSchema(schema: JsonSchemaProperty): unknown {\n if (schema.default !== undefined) return schema.default;\n const type = Array.isArray(schema.type) ? schema.type[0] : schema.type;\n if (type === \"array\") return [];\n if (type === \"object\") return {};\n if (type === \"boolean\") return false;\n // Numbers seed as \"\" so the soft Required hint can show without coercion\n // surprises; the number control coerces on first real input.\n return \"\";\n}\n"],"names":["cn","inputSizeClass"],"mappings":"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"}
@@ -5,8 +5,11 @@ export declare function fieldInputId(key: string, prefix?: string): string;
5
5
  export declare function defaultPlaceholder(schema: JsonSchemaProperty): string;
6
6
  export declare function toText(value: unknown): string;
7
7
  export declare function isPlainObject(value: unknown): value is Record<string, unknown>;
8
+ export declare function normalizeColumns(value: unknown): number;
9
+ export declare function normalizeColSpan(value: unknown, columns: number): number;
8
10
  export declare function withSyntheticValue(options: FieldOption[], value: string): FieldOption[];
9
11
  export declare function keyPickerOptions(options: FieldOption[], usedKeys: string[], currentKey: string): FieldOption[];
12
+ export declare function matchesFieldFilter(key: string, prop: JsonSchemaProperty, filter: string): boolean;
10
13
  export declare function orderByXOrder<T>(entries: [string, T][], order: unknown): [string, T][];
11
14
  export declare function orderByClickyOrder(entries: [string, JsonSchemaProperty][]): [string, JsonSchemaProperty][];
12
15
  export declare function orderRequiredFirst<T>(entries: [string, T][], required: string[]): [string, T][];
@@ -1 +1 @@
1
- {"version":3,"file":"json-schema-form-utils.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAO9F,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAEjD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAGjE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAGrE;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAI7C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE9E;AAID,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAGvF;AAID,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,WAAW,EAAE,EACtB,QAAQ,EAAE,MAAM,EAAE,EAClB,UAAU,EAAE,MAAM,GACjB,WAAW,EAAE,CAGf;AAKD,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAUtF;AAQD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAAE,GACtC,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAAE,CAShC;AAKD,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EACtB,QAAQ,EAAE,MAAM,EAAE,GACjB,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAKf;AAKD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAKpD;AAOD,wBAAgB,eAAe,CAAC,CAAC,EAC/B,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EACtB,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAQf;AAID,wBAAgB,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAcjE;AAGD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAE1D;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAEvD;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,EAAE,CAMnE;AAID,wBAAgB,cAAc,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CASlE"}
1
+ {"version":3,"file":"json-schema-form-utils.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAO9F,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAEjD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAGjE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAGrE;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAI7C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE9E;AAMD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIvD;AAID,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAIxE;AAID,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAGvF;AAID,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,WAAW,EAAE,EACtB,QAAQ,EAAE,MAAM,EAAE,EAClB,UAAU,EAAE,MAAM,GACjB,WAAW,EAAE,CAGf;AAMD,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,MAAM,GACb,OAAO,CAKT;AAKD,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAUtF;AAQD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAAE,GACtC,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAAE,CAShC;AAKD,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EACtB,QAAQ,EAAE,MAAM,EAAE,GACjB,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAKf;AAKD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAKpD;AAOD,wBAAgB,eAAe,CAAC,CAAC,EAC/B,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EACtB,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAQf;AAID,wBAAgB,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAcjE;AAGD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAE1D;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAEvD;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,EAAE,CAMnE;AAID,wBAAgB,cAAc,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CASlE"}
@@ -20,6 +20,16 @@ function toText(value) {
20
20
  function isPlainObject(value) {
21
21
  return typeof value === "object" && value !== null && !Array.isArray(value);
22
22
  }
23
+ function normalizeColumns(value) {
24
+ const n = typeof value === "number" ? value : Number(value);
25
+ if (!Number.isFinite(n) || n < 1) return 1;
26
+ return Math.min(Math.trunc(n), 12);
27
+ }
28
+ function normalizeColSpan(value, columns) {
29
+ const n = typeof value === "number" ? value : Number(value);
30
+ if (!Number.isFinite(n) || n < 1) return 1;
31
+ return Math.min(Math.trunc(n), columns);
32
+ }
23
33
  function withSyntheticValue(options, value) {
24
34
  if (!value || options.some((o) => o.value === value)) return options;
25
35
  return [{ value, label: value }, ...options];
@@ -28,6 +38,12 @@ function keyPickerOptions(options, usedKeys, currentKey) {
28
38
  const taken = new Set(usedKeys.filter((k) => k !== currentKey));
29
39
  return options.filter((o) => !taken.has(o.value));
30
40
  }
41
+ function matchesFieldFilter(key, prop, filter) {
42
+ const query = filter.trim().toLowerCase();
43
+ if (!query) return true;
44
+ const label = typeof prop.title === "string" && prop.title ? prop.title : key;
45
+ return key.toLowerCase().includes(query) || label.toLowerCase().includes(query);
46
+ }
31
47
  function orderByXOrder(entries, order) {
32
48
  if (!Array.isArray(order) || order.length === 0) return entries;
33
49
  const rank = new Map(
@@ -102,7 +118,10 @@ export {
102
118
  isEmptyValue,
103
119
  isPlainObject,
104
120
  keyPickerOptions,
121
+ matchesFieldFilter,
105
122
  moveItem,
123
+ normalizeColSpan,
124
+ normalizeColumns,
106
125
  orderByClickyOrder,
107
126
  orderByPriority,
108
127
  orderByXOrder,
@@ -1 +1 @@
1
- {"version":3,"file":"json-schema-form-utils.js","sources":["../../src/components/json-schema-form-utils.ts"],"sourcesContent":["import { cn } from \"../lib/utils\";\nimport { inputSizeClass, type FormSize } from \"./json-schema-form-size\";\nimport type { FieldControl, FieldOption, JsonSchemaProperty } from \"./json-schema-form-types\";\n\n// Non-size styling shared by every text-like input box; the size token supplies\n// height, horizontal padding, and text size (see inputSizeClass).\nconst INPUT_BASE =\n \"w-full min-w-0 rounded-md border border-input bg-background text-foreground outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:bg-muted/40 focus-visible:ring-2 focus-visible:ring-ring\";\n\nexport function inputClass(size: FormSize): string {\n return cn(INPUT_BASE, inputSizeClass[size]);\n}\n\nexport function fieldInputId(key: string, prefix?: string): string {\n const safe = key.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n return prefix ? `jsf-${prefix}-${safe}` : `jsf-${safe}`;\n}\n\nexport function defaultPlaceholder(schema: JsonSchemaProperty): string {\n if (schema.default != null && typeof schema.default !== \"object\") return String(schema.default);\n return \"\";\n}\n\nexport function toText(value: unknown): string {\n if (value === undefined || value === null) return \"\";\n if (typeof value === \"object\") return \"\";\n return String(value);\n}\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n// withSyntheticValue prepends the current value as an option when it is not in\n// the enum, so an out-of-enum value (e.g. a template token) still displays.\nexport function withSyntheticValue(options: FieldOption[], value: string): FieldOption[] {\n if (!value || options.some((o) => o.value === value)) return options;\n return [{ value, label: value }, ...options];\n}\n\n// keyPickerOptions narrows the map-key enum to keys not already used by another\n// entry, while always keeping this row's current key so it stays selectable.\nexport function keyPickerOptions(\n options: FieldOption[],\n usedKeys: string[],\n currentKey: string,\n): FieldOption[] {\n const taken = new Set(usedKeys.filter((k) => k !== currentKey));\n return options.filter((o) => !taken.has(o.value));\n}\n\n// orderByXOrder reorders property entries by the schema's `x-order` hint: keys\n// named there render first (in that order), the rest keep document order. A\n// missing/empty hint is a no-op, so document order remains the default.\nexport function orderByXOrder<T>(entries: [string, T][], order: unknown): [string, T][] {\n if (!Array.isArray(order) || order.length === 0) return entries;\n const rank = new Map(\n order.filter((k): k is string => typeof k === \"string\").map((k, i) => [k, i]),\n );\n const listed = entries\n .filter(([key]) => rank.has(key))\n .sort((a, b) => rank.get(a[0])! - rank.get(b[0])!);\n const rest = entries.filter(([key]) => !rank.has(key));\n return [...listed, ...rest];\n}\n\n// orderByClickyOrder stably sorts property entries by each property's numeric\n// `x-clicky-order` (lower first); entries without it keep their incoming order\n// after the ordered ones. An explicit index tie-break keeps it stable regardless\n// of the engine's sort stability. Unlike the object-level `x-order` array, this\n// composes across merged if/then branches because each property carries its own\n// order — the right tool when fields come from different (embedded) sources.\nexport function orderByClickyOrder(\n entries: [string, JsonSchemaProperty][],\n): [string, JsonSchemaProperty][] {\n const rank = (prop: JsonSchemaProperty): number => {\n const o = prop[\"x-clicky-order\"];\n return typeof o === \"number\" ? o : Number.POSITIVE_INFINITY;\n };\n return entries\n .map((entry, index) => ({ entry, index, rank: rank(entry[1]) }))\n .sort((a, b) => a.rank - b.rank || a.index - b.index)\n .map((ranked) => ranked.entry);\n}\n\n// orderRequiredFirst stably partitions property entries so the keys named in\n// `required` come first (in their original order), then the rest (in theirs).\n// A stable two-pass partition, so it never reshuffles within either group.\nexport function orderRequiredFirst<T>(\n entries: [string, T][],\n required: string[],\n): [string, T][] {\n const isRequired = new Set(required);\n const head = entries.filter(([key]) => isRequired.has(key));\n const tail = entries.filter(([key]) => !isRequired.has(key));\n return [...head, ...tail];\n}\n\n// isEmptyValue reports whether a field's value carries no data, so priority\n// sorting can sink unfilled fields. Empty = undefined/null/\"\" plus empty arrays\n// and empty plain objects; `false` and `0` count as filled (they are choices).\nexport function isEmptyValue(value: unknown): boolean {\n if (value === undefined || value === null || value === \"\") return true;\n if (Array.isArray(value)) return value.length === 0;\n if (typeof value === \"object\") return Object.keys(value).length === 0;\n return false;\n}\n\n// orderByPriority sorts property entries so the fields that matter most surface\n// first, ranking each by a score: +2 if required, +1 if its value is non-empty.\n// Required-and-filled lead, then required-and-empty, then optional-and-filled,\n// then optional-and-empty. Ties keep their incoming order (explicit index\n// tie-break, so it does not depend on the engine's sort stability).\nexport function orderByPriority<T>(\n entries: [string, T][],\n required: string[],\n values: Record<string, unknown>,\n): [string, T][] {\n const isRequired = new Set(required);\n const score = (key: string): number =>\n (isRequired.has(key) ? 2 : 0) + (isEmptyValue(values[key]) ? 0 : 1);\n return entries\n .map((entry, index) => ({ entry, index, score: score(entry[0]) }))\n .sort((a, b) => b.score - a.score || a.index - b.index)\n .map((ranked) => ranked.entry);\n}\n\n// softError computes a display-only validation hint. It never blocks onChange.\n// Consumers suppress the unknown-enum hint by setting allowCustomValue.\nexport function softError(field: FieldControl): string | undefined {\n const v = field.value;\n const isEmpty = v === undefined || v === null || v === \"\";\n if (field.required && isEmpty) return \"Required\";\n\n if (field.kind === \"number\" && typeof field.minimum === \"number\" && typeof v === \"number\") {\n if (v < field.minimum) return `Must be ≥ ${field.minimum}`;\n }\n\n if (field.kind === \"enum\" && !field.allowCustomValue && !isEmpty) {\n const known = (field.options ?? []).some((o) => o.value === String(v));\n if (!known) return \"Unknown value (allowed)\";\n }\n return undefined;\n}\n\n// Immutable array helpers used by the array control.\nexport function setIndex<T>(arr: T[], i: number, v: T): T[] {\n return arr.map((x, idx) => (idx === i ? v : x));\n}\n\nexport function removeIndex<T>(arr: T[], i: number): T[] {\n return arr.filter((_, idx) => idx !== i);\n}\n\nexport function moveItem<T>(arr: T[], from: number, to: number): T[] {\n if (to < 0 || to >= arr.length) return arr;\n const next = [...arr];\n const [moved] = next.splice(from, 1);\n next.splice(to, 0, moved as T);\n return next;\n}\n\n// seedFromSchema produces the initial value for a freshly-added array item or\n// object field, honouring an explicit default.\nexport function seedFromSchema(schema: JsonSchemaProperty): unknown {\n if (schema.default !== undefined) return schema.default;\n const type = Array.isArray(schema.type) ? schema.type[0] : schema.type;\n if (type === \"array\") return [];\n if (type === \"object\") return {};\n if (type === \"boolean\") return false;\n // Numbers seed as \"\" so the soft Required hint can show without coercion\n // surprises; the number control coerces on first real input.\n return \"\";\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"json-schema-form-utils.js","sources":["../../src/components/json-schema-form-utils.ts"],"sourcesContent":["import { cn } from \"../lib/utils\";\nimport { inputSizeClass, type FormSize } from \"./json-schema-form-size\";\nimport type { FieldControl, FieldOption, JsonSchemaProperty } from \"./json-schema-form-types\";\n\n// Non-size styling shared by every text-like input box; the size token supplies\n// height, horizontal padding, and text size (see inputSizeClass).\nconst INPUT_BASE =\n \"w-full min-w-0 rounded-md border border-input bg-background text-foreground outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:bg-muted/40 focus-visible:ring-2 focus-visible:ring-ring\";\n\nexport function inputClass(size: FormSize): string {\n return cn(INPUT_BASE, inputSizeClass[size]);\n}\n\nexport function fieldInputId(key: string, prefix?: string): string {\n const safe = key.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n return prefix ? `jsf-${prefix}-${safe}` : `jsf-${safe}`;\n}\n\nexport function defaultPlaceholder(schema: JsonSchemaProperty): string {\n if (schema.default != null && typeof schema.default !== \"object\") return String(schema.default);\n return \"\";\n}\n\nexport function toText(value: unknown): string {\n if (value === undefined || value === null) return \"\";\n if (typeof value === \"object\") return \"\";\n return String(value);\n}\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n// Object-level `x-columns`: how many equal columns to split a stacked object\n// into. Clamped to [1, 12] (a standard 12-track grid, so a 3-across row of\n// span-4 fields and a 4-across row of span-3 fields share one object); anything\n// invalid falls back to a single column.\nexport function normalizeColumns(value: unknown): number {\n const n = typeof value === \"number\" ? value : Number(value);\n if (!Number.isFinite(n) || n < 1) return 1;\n return Math.min(Math.trunc(n), 12);\n}\n\n// Per-field `x-col-span`: how many of the object's columns a field occupies.\n// Clamped to [1, columns]; invalid falls back to 1.\nexport function normalizeColSpan(value: unknown, columns: number): number {\n const n = typeof value === \"number\" ? value : Number(value);\n if (!Number.isFinite(n) || n < 1) return 1;\n return Math.min(Math.trunc(n), columns);\n}\n\n// withSyntheticValue prepends the current value as an option when it is not in\n// the enum, so an out-of-enum value (e.g. a template token) still displays.\nexport function withSyntheticValue(options: FieldOption[], value: string): FieldOption[] {\n if (!value || options.some((o) => o.value === value)) return options;\n return [{ value, label: value }, ...options];\n}\n\n// keyPickerOptions narrows the map-key enum to keys not already used by another\n// entry, while always keeping this row's current key so it stays selectable.\nexport function keyPickerOptions(\n options: FieldOption[],\n usedKeys: string[],\n currentKey: string,\n): FieldOption[] {\n const taken = new Set(usedKeys.filter((k) => k !== currentKey));\n return options.filter((o) => !taken.has(o.value));\n}\n\n// matchesFieldFilter reports whether a property should stay visible under the\n// display-options field filter: a case-insensitive substring match against the\n// field's key and its display label (`title` when set, otherwise the key). A\n// blank filter matches everything, so an empty box never hides fields.\nexport function matchesFieldFilter(\n key: string,\n prop: JsonSchemaProperty,\n filter: string,\n): boolean {\n const query = filter.trim().toLowerCase();\n if (!query) return true;\n const label = typeof prop.title === \"string\" && prop.title ? prop.title : key;\n return key.toLowerCase().includes(query) || label.toLowerCase().includes(query);\n}\n\n// orderByXOrder reorders property entries by the schema's `x-order` hint: keys\n// named there render first (in that order), the rest keep document order. A\n// missing/empty hint is a no-op, so document order remains the default.\nexport function orderByXOrder<T>(entries: [string, T][], order: unknown): [string, T][] {\n if (!Array.isArray(order) || order.length === 0) return entries;\n const rank = new Map(\n order.filter((k): k is string => typeof k === \"string\").map((k, i) => [k, i]),\n );\n const listed = entries\n .filter(([key]) => rank.has(key))\n .sort((a, b) => rank.get(a[0])! - rank.get(b[0])!);\n const rest = entries.filter(([key]) => !rank.has(key));\n return [...listed, ...rest];\n}\n\n// orderByClickyOrder stably sorts property entries by each property's numeric\n// `x-clicky-order` (lower first); entries without it keep their incoming order\n// after the ordered ones. An explicit index tie-break keeps it stable regardless\n// of the engine's sort stability. Unlike the object-level `x-order` array, this\n// composes across merged if/then branches because each property carries its own\n// order — the right tool when fields come from different (embedded) sources.\nexport function orderByClickyOrder(\n entries: [string, JsonSchemaProperty][],\n): [string, JsonSchemaProperty][] {\n const rank = (prop: JsonSchemaProperty): number => {\n const o = prop[\"x-clicky-order\"];\n return typeof o === \"number\" ? o : Number.POSITIVE_INFINITY;\n };\n return entries\n .map((entry, index) => ({ entry, index, rank: rank(entry[1]) }))\n .sort((a, b) => a.rank - b.rank || a.index - b.index)\n .map((ranked) => ranked.entry);\n}\n\n// orderRequiredFirst stably partitions property entries so the keys named in\n// `required` come first (in their original order), then the rest (in theirs).\n// A stable two-pass partition, so it never reshuffles within either group.\nexport function orderRequiredFirst<T>(\n entries: [string, T][],\n required: string[],\n): [string, T][] {\n const isRequired = new Set(required);\n const head = entries.filter(([key]) => isRequired.has(key));\n const tail = entries.filter(([key]) => !isRequired.has(key));\n return [...head, ...tail];\n}\n\n// isEmptyValue reports whether a field's value carries no data, so priority\n// sorting can sink unfilled fields. Empty = undefined/null/\"\" plus empty arrays\n// and empty plain objects; `false` and `0` count as filled (they are choices).\nexport function isEmptyValue(value: unknown): boolean {\n if (value === undefined || value === null || value === \"\") return true;\n if (Array.isArray(value)) return value.length === 0;\n if (typeof value === \"object\") return Object.keys(value).length === 0;\n return false;\n}\n\n// orderByPriority sorts property entries so the fields that matter most surface\n// first, ranking each by a score: +2 if required, +1 if its value is non-empty.\n// Required-and-filled lead, then required-and-empty, then optional-and-filled,\n// then optional-and-empty. Ties keep their incoming order (explicit index\n// tie-break, so it does not depend on the engine's sort stability).\nexport function orderByPriority<T>(\n entries: [string, T][],\n required: string[],\n values: Record<string, unknown>,\n): [string, T][] {\n const isRequired = new Set(required);\n const score = (key: string): number =>\n (isRequired.has(key) ? 2 : 0) + (isEmptyValue(values[key]) ? 0 : 1);\n return entries\n .map((entry, index) => ({ entry, index, score: score(entry[0]) }))\n .sort((a, b) => b.score - a.score || a.index - b.index)\n .map((ranked) => ranked.entry);\n}\n\n// softError computes a display-only validation hint. It never blocks onChange.\n// Consumers suppress the unknown-enum hint by setting allowCustomValue.\nexport function softError(field: FieldControl): string | undefined {\n const v = field.value;\n const isEmpty = v === undefined || v === null || v === \"\";\n if (field.required && isEmpty) return \"Required\";\n\n if (field.kind === \"number\" && typeof field.minimum === \"number\" && typeof v === \"number\") {\n if (v < field.minimum) return `Must be ≥ ${field.minimum}`;\n }\n\n if (field.kind === \"enum\" && !field.allowCustomValue && !isEmpty) {\n const known = (field.options ?? []).some((o) => o.value === String(v));\n if (!known) return \"Unknown value (allowed)\";\n }\n return undefined;\n}\n\n// Immutable array helpers used by the array control.\nexport function setIndex<T>(arr: T[], i: number, v: T): T[] {\n return arr.map((x, idx) => (idx === i ? v : x));\n}\n\nexport function removeIndex<T>(arr: T[], i: number): T[] {\n return arr.filter((_, idx) => idx !== i);\n}\n\nexport function moveItem<T>(arr: T[], from: number, to: number): T[] {\n if (to < 0 || to >= arr.length) return arr;\n const next = [...arr];\n const [moved] = next.splice(from, 1);\n next.splice(to, 0, moved as T);\n return next;\n}\n\n// seedFromSchema produces the initial value for a freshly-added array item or\n// object field, honouring an explicit default.\nexport function seedFromSchema(schema: JsonSchemaProperty): unknown {\n if (schema.default !== undefined) return schema.default;\n const type = Array.isArray(schema.type) ? schema.type[0] : schema.type;\n if (type === \"array\") return [];\n if (type === \"object\") return {};\n if (type === \"boolean\") return false;\n // Numbers seed as \"\" so the soft Required hint can show without coercion\n // surprises; the number control coerces on first real input.\n return \"\";\n}\n"],"names":[],"mappings":"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"}
@@ -64,6 +64,22 @@ const LoadingDots = react.forwardRef(
64
64
  )
65
65
  );
66
66
  LoadingDots.displayName = "LoadingDots";
67
+ const LoadingBar = react.forwardRef(
68
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
69
+ "div",
70
+ {
71
+ ref,
72
+ "aria-hidden": true,
73
+ className: utils.cn(
74
+ "pointer-events-none absolute inset-x-0 top-0 z-20 h-0.5 overflow-hidden bg-primary/20",
75
+ className
76
+ ),
77
+ ...props,
78
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-full w-1/2 animate-pulse rounded-full bg-primary" })
79
+ }
80
+ )
81
+ );
82
+ LoadingBar.displayName = "LoadingBar";
67
83
  const Loading = react.forwardRef(
68
84
  ({ size = "responsive", variant = "inline", label, className, ...props }, ref) => {
69
85
  const effectiveSize = variant === "inline" && size === "responsive" ? "sm" : size;
@@ -118,5 +134,6 @@ const Loading = react.forwardRef(
118
134
  );
119
135
  Loading.displayName = "Loading";
120
136
  exports.Loading = Loading;
137
+ exports.LoadingBar = LoadingBar;
121
138
  exports.LoadingDots = LoadingDots;
122
139
  //# sourceMappingURL=loading.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"loading.cjs","sources":["../../src/components/loading.tsx"],"sourcesContent":["import {\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n type SVGProps,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport type LoadingSize = \"sm\" | \"md\" | \"lg\" | \"responsive\";\nexport type LoadingVariant = \"inline\" | \"centered\";\n\nexport interface LoadingProps extends HTMLAttributes<HTMLDivElement> {\n /** Fixed size, or `responsive` (default) to scale with the container. */\n size?: LoadingSize;\n /** `inline` for a small in-flow loader, `centered` for a section/page loader. */\n variant?: LoadingVariant;\n /** Optional caption rendered beside (inline) or beneath (centered) the dots. */\n label?: ReactNode;\n}\n\nconst FIXED_DOT_SIZE: Record<Exclude<LoadingSize, \"responsive\">, string> = {\n sm: \"size-4\",\n md: \"size-6\",\n lg: \"size-10\",\n};\n\n// Scales with the SMALLER of the container's two dimensions (`cqmin`, enabled by\n// `container-type: size` on the centered wrapper). Using `cqmin` rather than the\n// width alone means a wide-but-short panel reads as small — only a genuinely\n// large area (a full-page load) grows the dots. Floors at 1.25rem (20px) in\n// tight panels, climbs to 2.5rem (40px) on big loads. Pure CSS — no\n// ResizeObserver, SSR-safe.\n//\n// These are inline styles, NOT Tailwind arbitrary classes (`size-[clamp(…)]`):\n// a dynamic arbitrary class only ships if the consumer's Tailwind happens to\n// scan a file containing that exact literal. The moment the served component\n// and the scanned `dist` diverge (e.g. a linked local checkout vs a stale\n// node_modules) the class is never generated, the SVG loses its width/height,\n// and `h-full` balloons it to fill the page. Inline styles resolve natively in\n// every consumer regardless of their content-scan config.\nconst RESPONSIVE_DOT_STYLE = {\n width: \"clamp(1.25rem, 18cqmin, 2.5rem)\",\n height: \"clamp(1.25rem, 18cqmin, 2.5rem)\",\n} as const;\nconst RESPONSIVE_LABEL_STYLE = {\n fontSize: \"clamp(0.72rem, 4.5cqmin, 0.9rem)\",\n} as const;\n\n/**\n * Three bouncing dots. `fill=\"currentColor\"` so the dots inherit the surrounding\n * theme text color (works in light and dark). Size is driven entirely by the\n * className (width + height); the viewBox keeps the 1:1 aspect.\n */\nexport const LoadingDots = forwardRef<SVGSVGElement, SVGProps<SVGSVGElement>>(\n ({ className, ...props }, ref) => (\n <svg\n ref={ref}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n className={cn(\"shrink-0\", className)}\n {...props}\n >\n <circle cx=\"4\" cy=\"12\" r=\"3\">\n <animate\n id=\"clickyLoadDotA\"\n fill=\"freeze\"\n attributeName=\"opacity\"\n begin=\"0;clickyLoadDotC.end-0.25s\"\n dur=\"0.75s\"\n values=\"1;0.2\"\n />\n </circle>\n <circle cx=\"12\" cy=\"12\" r=\"3\" opacity=\"0.4\">\n <animate\n fill=\"freeze\"\n attributeName=\"opacity\"\n begin=\"clickyLoadDotA.begin+0.15s\"\n dur=\"0.75s\"\n values=\"1;0.2\"\n />\n </circle>\n <circle cx=\"20\" cy=\"12\" r=\"3\" opacity=\"0.3\">\n <animate\n id=\"clickyLoadDotC\"\n fill=\"freeze\"\n attributeName=\"opacity\"\n begin=\"clickyLoadDotA.begin+0.3s\"\n dur=\"0.75s\"\n values=\"1;0.2\"\n />\n </circle>\n </svg>\n ),\n);\nLoadingDots.displayName = \"LoadingDots\";\n\n/**\n * Loading indicator built on the shared 3-dot animation.\n *\n * `centered` fills the space it is given (`h-full` within a `min-h-32` floor) and\n * establishes a size container (`container-type: size`) so the default\n * `responsive` size scales the dots to that space via `cqmin` — small inside a\n * narrow/short panel, large on a full-page route shell that stretches it tall.\n * The `inline` variant is not a container, so a `responsive` request there\n * renders at `sm`.\n */\nexport const Loading = forwardRef<HTMLDivElement, LoadingProps>(\n ({ size = \"responsive\", variant = \"inline\", label, className, ...props }, ref) => {\n const effectiveSize =\n variant === \"inline\" && size === \"responsive\" ? \"sm\" : size;\n const isResponsive = effectiveSize === \"responsive\";\n const dotClass = isResponsive ? \"\" : FIXED_DOT_SIZE[effectiveSize];\n const dotStyle = isResponsive ? RESPONSIVE_DOT_STYLE : undefined;\n\n if (variant === \"centered\") {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\n \"flex h-full min-h-32 w-full flex-col items-center justify-center gap-3 text-muted-foreground\",\n \"[container-type:size]\",\n className,\n )}\n {...props}\n >\n <LoadingDots className={dotClass} style={dotStyle} />\n {label != null && (\n <span\n className={isResponsive ? undefined : \"text-sm\"}\n style={isResponsive ? RESPONSIVE_LABEL_STYLE : undefined}\n >\n {label}\n </span>\n )}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\n \"inline-flex items-center gap-2 text-muted-foreground\",\n className,\n )}\n {...props}\n >\n <LoadingDots className={dotClass} style={dotStyle} />\n {label != null && <span className=\"text-sm\">{label}</span>}\n </div>\n );\n },\n);\nLoading.displayName = \"Loading\";\n"],"names":["forwardRef","jsxs","cn","jsx"],"mappings":"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"}
1
+ {"version":3,"file":"loading.cjs","sources":["../../src/components/loading.tsx"],"sourcesContent":["import {\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n type SVGProps,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport type LoadingSize = \"sm\" | \"md\" | \"lg\" | \"responsive\";\nexport type LoadingVariant = \"inline\" | \"centered\";\n\nexport interface LoadingProps extends HTMLAttributes<HTMLDivElement> {\n /** Fixed size, or `responsive` (default) to scale with the container. */\n size?: LoadingSize;\n /** `inline` for a small in-flow loader, `centered` for a section/page loader. */\n variant?: LoadingVariant;\n /** Optional caption rendered beside (inline) or beneath (centered) the dots. */\n label?: ReactNode;\n}\n\nconst FIXED_DOT_SIZE: Record<Exclude<LoadingSize, \"responsive\">, string> = {\n sm: \"size-4\",\n md: \"size-6\",\n lg: \"size-10\",\n};\n\n// Scales with the SMALLER of the container's two dimensions (`cqmin`, enabled by\n// `container-type: size` on the centered wrapper). Using `cqmin` rather than the\n// width alone means a wide-but-short panel reads as small — only a genuinely\n// large area (a full-page load) grows the dots. Floors at 1.25rem (20px) in\n// tight panels, climbs to 2.5rem (40px) on big loads. Pure CSS — no\n// ResizeObserver, SSR-safe.\n//\n// These are inline styles, NOT Tailwind arbitrary classes (`size-[clamp(…)]`):\n// a dynamic arbitrary class only ships if the consumer's Tailwind happens to\n// scan a file containing that exact literal. The moment the served component\n// and the scanned `dist` diverge (e.g. a linked local checkout vs a stale\n// node_modules) the class is never generated, the SVG loses its width/height,\n// and `h-full` balloons it to fill the page. Inline styles resolve natively in\n// every consumer regardless of their content-scan config.\nconst RESPONSIVE_DOT_STYLE = {\n width: \"clamp(1.25rem, 18cqmin, 2.5rem)\",\n height: \"clamp(1.25rem, 18cqmin, 2.5rem)\",\n} as const;\nconst RESPONSIVE_LABEL_STYLE = {\n fontSize: \"clamp(0.72rem, 4.5cqmin, 0.9rem)\",\n} as const;\n\n/**\n * Three bouncing dots. `fill=\"currentColor\"` so the dots inherit the surrounding\n * theme text color (works in light and dark). Size is driven entirely by the\n * className (width + height); the viewBox keeps the 1:1 aspect.\n */\nexport const LoadingDots = forwardRef<SVGSVGElement, SVGProps<SVGSVGElement>>(\n ({ className, ...props }, ref) => (\n <svg\n ref={ref}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n className={cn(\"shrink-0\", className)}\n {...props}\n >\n <circle cx=\"4\" cy=\"12\" r=\"3\">\n <animate\n id=\"clickyLoadDotA\"\n fill=\"freeze\"\n attributeName=\"opacity\"\n begin=\"0;clickyLoadDotC.end-0.25s\"\n dur=\"0.75s\"\n values=\"1;0.2\"\n />\n </circle>\n <circle cx=\"12\" cy=\"12\" r=\"3\" opacity=\"0.4\">\n <animate\n fill=\"freeze\"\n attributeName=\"opacity\"\n begin=\"clickyLoadDotA.begin+0.15s\"\n dur=\"0.75s\"\n values=\"1;0.2\"\n />\n </circle>\n <circle cx=\"20\" cy=\"12\" r=\"3\" opacity=\"0.3\">\n <animate\n id=\"clickyLoadDotC\"\n fill=\"freeze\"\n attributeName=\"opacity\"\n begin=\"clickyLoadDotA.begin+0.3s\"\n dur=\"0.75s\"\n values=\"1;0.2\"\n />\n </circle>\n </svg>\n ),\n);\nLoadingDots.displayName = \"LoadingDots\";\n\n/**\n * Loading indicator built on the shared 3-dot animation.\n *\n * `centered` fills the space it is given (`h-full` within a `min-h-32` floor) and\n * establishes a size container (`container-type: size`) so the default\n * `responsive` size scales the dots to that space via `cqmin` — small inside a\n * narrow/short panel, large on a full-page route shell that stretches it tall.\n * The `inline` variant is not a container, so a `responsive` request there\n * renders at `sm`.\n */\n/**\n * A thin indeterminate loading bar meant to ride the top edge of a `relative`\n * container (it positions itself `absolute inset-x-0 top-0`). Non-blocking: it\n * overlays the container's top border so existing content stays visible while a\n * refetch or navigation is in flight, instead of a spinner that hides the view.\n * Pass `className` to tune corners/offset (e.g. `rounded-t-md` inside a rounded\n * card). Purely decorative — announce busy state with `aria-busy` on the host.\n */\nexport const LoadingBar = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n aria-hidden\n className={cn(\n \"pointer-events-none absolute inset-x-0 top-0 z-20 h-0.5 overflow-hidden bg-primary/20\",\n className,\n )}\n {...props}\n >\n <div className=\"h-full w-1/2 animate-pulse rounded-full bg-primary\" />\n </div>\n ),\n);\nLoadingBar.displayName = \"LoadingBar\";\n\nexport const Loading = forwardRef<HTMLDivElement, LoadingProps>(\n ({ size = \"responsive\", variant = \"inline\", label, className, ...props }, ref) => {\n const effectiveSize =\n variant === \"inline\" && size === \"responsive\" ? \"sm\" : size;\n const isResponsive = effectiveSize === \"responsive\";\n const dotClass = isResponsive ? \"\" : FIXED_DOT_SIZE[effectiveSize];\n const dotStyle = isResponsive ? RESPONSIVE_DOT_STYLE : undefined;\n\n if (variant === \"centered\") {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\n \"flex h-full min-h-32 w-full flex-col items-center justify-center gap-3 text-muted-foreground\",\n \"[container-type:size]\",\n className,\n )}\n {...props}\n >\n <LoadingDots className={dotClass} style={dotStyle} />\n {label != null && (\n <span\n className={isResponsive ? undefined : \"text-sm\"}\n style={isResponsive ? RESPONSIVE_LABEL_STYLE : undefined}\n >\n {label}\n </span>\n )}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\n \"inline-flex items-center gap-2 text-muted-foreground\",\n className,\n )}\n {...props}\n >\n <LoadingDots className={dotClass} style={dotStyle} />\n {label != null && <span className=\"text-sm\">{label}</span>}\n </div>\n );\n },\n);\nLoading.displayName = \"Loading\";\n"],"names":["forwardRef","jsxs","cn","jsx"],"mappings":"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"}
@@ -25,5 +25,14 @@ export declare const LoadingDots: import('react').ForwardRefExoticComponent<Omit
25
25
  * The `inline` variant is not a container, so a `responsive` request there
26
26
  * renders at `sm`.
27
27
  */
28
+ /**
29
+ * A thin indeterminate loading bar meant to ride the top edge of a `relative`
30
+ * container (it positions itself `absolute inset-x-0 top-0`). Non-blocking: it
31
+ * overlays the container's top border so existing content stays visible while a
32
+ * refetch or navigation is in flight, instead of a spinner that hides the view.
33
+ * Pass `className` to tune corners/offset (e.g. `rounded-t-md` inside a rounded
34
+ * card). Purely decorative — announce busy state with `aria-busy` on the host.
35
+ */
36
+ export declare const LoadingBar: import('react').ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & import('react').RefAttributes<HTMLDivElement>>;
28
37
  export declare const Loading: import('react').ForwardRefExoticComponent<LoadingProps & import('react').RefAttributes<HTMLDivElement>>;
29
38
  //# sourceMappingURL=loading.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loading.d.ts","sourceRoot":"","sources":["../../src/components/loading.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,QAAQ,EACd,MAAM,OAAO,CAAC;AAGf,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,YAAY,CAAC;AAC5D,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEnD,MAAM,WAAW,YAAa,SAAQ,cAAc,CAAC,cAAc,CAAC;IAClE,yEAAyE;IACzE,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,iFAAiF;IACjF,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,gFAAgF;IAChF,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AA8BD;;;;GAIG;AACH,eAAO,MAAM,WAAW,gIA0CvB,CAAC;AAGF;;;;;;;;;GASG;AACH,eAAO,MAAM,OAAO,yGAkDnB,CAAC"}
1
+ {"version":3,"file":"loading.d.ts","sourceRoot":"","sources":["../../src/components/loading.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,QAAQ,EACd,MAAM,OAAO,CAAC;AAGf,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,YAAY,CAAC;AAC5D,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEnD,MAAM,WAAW,YAAa,SAAQ,cAAc,CAAC,cAAc,CAAC;IAClE,yEAAyE;IACzE,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,iFAAiF;IACjF,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,gFAAgF;IAChF,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AA8BD;;;;GAIG;AACH,eAAO,MAAM,WAAW,gIA0CvB,CAAC;AAGF;;;;;;;;;GASG;AACH;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,2HActB,CAAC;AAGF,eAAO,MAAM,OAAO,yGAkDnB,CAAC"}