@flanksource/clicky-ui 0.3.34 → 0.3.36

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 (733) hide show
  1. package/README.md +4 -0
  2. package/dist/ai.cjs +4 -0
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +4 -0
  5. package/dist/ai.js.map +1 -1
  6. package/dist/comments/CommentCard.d.ts +1 -1
  7. package/dist/comments/CommentProvider.d.ts +1 -1
  8. package/dist/comments/CommentThread.d.ts +1 -1
  9. package/dist/comments/CommentThreadList.d.ts +1 -1
  10. package/dist/comments/MentionTextarea.d.ts +1 -1
  11. package/dist/comments/comment-context.d.ts +4 -4
  12. package/dist/comments/comment-fixtures.d.ts +1 -1
  13. package/dist/comments/comment-types.d.ts +1 -1
  14. package/dist/components/AccordionList.d.ts +1 -1
  15. package/dist/components/ComboboxControl.d.ts +1 -1
  16. package/dist/components/ComboboxMenu.d.ts +2 -2
  17. package/dist/components/ComboboxTags.cjs +41 -11
  18. package/dist/components/ComboboxTags.cjs.map +1 -1
  19. package/dist/components/ComboboxTags.d.ts +6 -0
  20. package/dist/components/ComboboxTags.d.ts.map +1 -1
  21. package/dist/components/ComboboxTags.js +41 -11
  22. package/dist/components/ComboboxTags.js.map +1 -1
  23. package/dist/components/DateField.d.ts +3 -3
  24. package/dist/components/DatePicker.d.ts +3 -3
  25. package/dist/components/DateTimePicker.d.ts +3 -3
  26. package/dist/components/ErrorWrapper.d.ts +2 -2
  27. package/dist/components/Field.d.ts +1 -1
  28. package/dist/components/FilterBar.d.ts +1 -1
  29. package/dist/components/FormLookupProvider.d.ts +1 -1
  30. package/dist/components/FormatOptionsDropdown.d.ts +1 -1
  31. package/dist/components/IconButton.d.ts +3 -3
  32. package/dist/components/InputField.d.ts +2 -2
  33. package/dist/components/ItemActions.d.ts +1 -1
  34. package/dist/components/JsonSchemaForm.cjs +17 -36
  35. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  36. package/dist/components/JsonSchemaForm.d.ts +1 -1
  37. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  38. package/dist/components/JsonSchemaForm.js +17 -36
  39. package/dist/components/JsonSchemaForm.js.map +1 -1
  40. package/dist/components/ListMenu.d.ts +1 -1
  41. package/dist/components/MultiSelect.d.ts +1 -1
  42. package/dist/components/SearchInput.d.ts +1 -1
  43. package/dist/components/SegmentedControl.d.ts +1 -1
  44. package/dist/components/SplitButton.d.ts +1 -1
  45. package/dist/components/Switch.d.ts +1 -1
  46. package/dist/components/TreePickerField.cjs +11 -2
  47. package/dist/components/TreePickerField.cjs.map +1 -1
  48. package/dist/components/TreePickerField.d.ts +13 -4
  49. package/dist/components/TreePickerField.d.ts.map +1 -1
  50. package/dist/components/TreePickerField.js +11 -2
  51. package/dist/components/TreePickerField.js.map +1 -1
  52. package/dist/components/UnitStepControls.d.ts +1 -1
  53. package/dist/components/button.d.ts +3 -3
  54. package/dist/components/combobox-types.d.ts +1 -1
  55. package/dist/components/density-switcher.d.ts +1 -1
  56. package/dist/components/filter-bar-context.d.ts +1 -1
  57. package/dist/components/filter-bar-field-utils.d.ts +2 -2
  58. package/dist/components/form-lookup-context.d.ts +1 -1
  59. package/dist/components/icon-menu-picker.d.ts +1 -1
  60. package/dist/components/json-schema-form-accordion-array.cjs +44 -21
  61. package/dist/components/json-schema-form-accordion-array.cjs.map +1 -1
  62. package/dist/components/json-schema-form-accordion-array.d.ts.map +1 -1
  63. package/dist/components/json-schema-form-accordion-array.js +47 -24
  64. package/dist/components/json-schema-form-accordion-array.js.map +1 -1
  65. package/dist/components/json-schema-form-array.cjs +53 -30
  66. package/dist/components/json-schema-form-array.cjs.map +1 -1
  67. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  68. package/dist/components/json-schema-form-array.js +54 -31
  69. package/dist/components/json-schema-form-array.js.map +1 -1
  70. package/dist/components/json-schema-form-cards-array.cjs +32 -22
  71. package/dist/components/json-schema-form-cards-array.cjs.map +1 -1
  72. package/dist/components/json-schema-form-cards-array.d.ts.map +1 -1
  73. package/dist/components/json-schema-form-cards-array.js +33 -23
  74. package/dist/components/json-schema-form-cards-array.js.map +1 -1
  75. package/dist/components/json-schema-form-collection-layouts.fixtures.d.ts +44 -0
  76. package/dist/components/json-schema-form-collection-layouts.fixtures.d.ts.map +1 -0
  77. package/dist/components/json-schema-form-discriminator.d.ts +1 -1
  78. package/dist/components/json-schema-form-errors.cjs +5 -1
  79. package/dist/components/json-schema-form-errors.cjs.map +1 -1
  80. package/dist/components/json-schema-form-errors.d.ts +2 -1
  81. package/dist/components/json-schema-form-errors.d.ts.map +1 -1
  82. package/dist/components/json-schema-form-errors.js +6 -2
  83. package/dist/components/json-schema-form-errors.js.map +1 -1
  84. package/dist/components/json-schema-form-extensions.d.ts +1 -1
  85. package/dist/components/json-schema-form-filter-input.cjs +50 -0
  86. package/dist/components/json-schema-form-filter-input.cjs.map +1 -0
  87. package/dist/components/json-schema-form-filter-input.d.ts +5 -0
  88. package/dist/components/json-schema-form-filter-input.d.ts.map +1 -0
  89. package/dist/components/json-schema-form-filter-input.js +50 -0
  90. package/dist/components/json-schema-form-filter-input.js.map +1 -0
  91. package/dist/components/json-schema-form-filter.cjs +49 -0
  92. package/dist/components/json-schema-form-filter.cjs.map +1 -0
  93. package/dist/components/json-schema-form-filter.d.ts +8 -0
  94. package/dist/components/json-schema-form-filter.d.ts.map +1 -0
  95. package/dist/components/json-schema-form-filter.js +49 -0
  96. package/dist/components/json-schema-form-filter.js.map +1 -0
  97. package/dist/components/json-schema-form-layout.cjs +84 -17
  98. package/dist/components/json-schema-form-layout.cjs.map +1 -1
  99. package/dist/components/json-schema-form-layout.d.ts +1 -1
  100. package/dist/components/json-schema-form-layout.d.ts.map +1 -1
  101. package/dist/components/json-schema-form-layout.js +84 -17
  102. package/dist/components/json-schema-form-layout.js.map +1 -1
  103. package/dist/components/json-schema-form-list-array.cjs +16 -5
  104. package/dist/components/json-schema-form-list-array.cjs.map +1 -1
  105. package/dist/components/json-schema-form-list-array.d.ts +2 -1
  106. package/dist/components/json-schema-form-list-array.d.ts.map +1 -1
  107. package/dist/components/json-schema-form-list-array.js +16 -5
  108. package/dist/components/json-schema-form-list-array.js.map +1 -1
  109. package/dist/components/json-schema-form-object.cjs +239 -85
  110. package/dist/components/json-schema-form-object.cjs.map +1 -1
  111. package/dist/components/json-schema-form-object.d.ts +2 -2
  112. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  113. package/dist/components/json-schema-form-object.js +241 -87
  114. package/dist/components/json-schema-form-object.js.map +1 -1
  115. package/dist/components/json-schema-form-preferences.cjs +1 -1
  116. package/dist/components/json-schema-form-preferences.cjs.map +1 -1
  117. package/dist/components/json-schema-form-preferences.d.ts +1 -1
  118. package/dist/components/json-schema-form-preferences.d.ts.map +1 -1
  119. package/dist/components/json-schema-form-preferences.js +1 -1
  120. package/dist/components/json-schema-form-preferences.js.map +1 -1
  121. package/dist/components/json-schema-form-properties-errors.fixtures.d.ts +14 -0
  122. package/dist/components/json-schema-form-properties-errors.fixtures.d.ts.map +1 -0
  123. package/dist/components/json-schema-form-properties-size.cjs +19 -0
  124. package/dist/components/json-schema-form-properties-size.cjs.map +1 -0
  125. package/dist/components/json-schema-form-properties-size.d.ts +4 -0
  126. package/dist/components/json-schema-form-properties-size.d.ts.map +1 -0
  127. package/dist/components/json-schema-form-properties-size.js +19 -0
  128. package/dist/components/json-schema-form-properties-size.js.map +1 -0
  129. package/dist/components/json-schema-form-properties.cjs +305 -0
  130. package/dist/components/json-schema-form-properties.cjs.map +1 -0
  131. package/dist/components/json-schema-form-properties.d.ts +20 -0
  132. package/dist/components/json-schema-form-properties.d.ts.map +1 -0
  133. package/dist/components/json-schema-form-properties.fixtures.d.ts +157 -0
  134. package/dist/components/json-schema-form-properties.fixtures.d.ts.map +1 -0
  135. package/dist/components/json-schema-form-properties.js +305 -0
  136. package/dist/components/json-schema-form-properties.js.map +1 -0
  137. package/dist/components/json-schema-form-property-actions-context.cjs +6 -0
  138. package/dist/components/json-schema-form-property-actions-context.cjs.map +1 -0
  139. package/dist/components/json-schema-form-property-actions-context.d.ts +2 -0
  140. package/dist/components/json-schema-form-property-actions-context.d.ts.map +1 -0
  141. package/dist/components/json-schema-form-property-actions-context.js +6 -0
  142. package/dist/components/json-schema-form-property-actions-context.js.map +1 -0
  143. package/dist/components/json-schema-form-property-collection.cjs +31 -0
  144. package/dist/components/json-schema-form-property-collection.cjs.map +1 -0
  145. package/dist/components/json-schema-form-property-collection.d.ts +6 -0
  146. package/dist/components/json-schema-form-property-collection.d.ts.map +1 -0
  147. package/dist/components/json-schema-form-property-collection.js +31 -0
  148. package/dist/components/json-schema-form-property-collection.js.map +1 -0
  149. package/dist/components/json-schema-form-property-draft.cjs +45 -0
  150. package/dist/components/json-schema-form-property-draft.cjs.map +1 -0
  151. package/dist/components/json-schema-form-property-draft.d.ts +8 -0
  152. package/dist/components/json-schema-form-property-draft.d.ts.map +1 -0
  153. package/dist/components/json-schema-form-property-draft.js +45 -0
  154. package/dist/components/json-schema-form-property-draft.js.map +1 -0
  155. package/dist/components/json-schema-form-property-preview.cjs +68 -0
  156. package/dist/components/json-schema-form-property-preview.cjs.map +1 -0
  157. package/dist/components/json-schema-form-property-preview.d.ts +7 -0
  158. package/dist/components/json-schema-form-property-preview.d.ts.map +1 -0
  159. package/dist/components/json-schema-form-property-preview.js +68 -0
  160. package/dist/components/json-schema-form-property-preview.js.map +1 -0
  161. package/dist/components/json-schema-form-property-selection.cjs +89 -0
  162. package/dist/components/json-schema-form-property-selection.cjs.map +1 -0
  163. package/dist/components/json-schema-form-property-selection.d.ts +6 -0
  164. package/dist/components/json-schema-form-property-selection.d.ts.map +1 -0
  165. package/dist/components/json-schema-form-property-selection.js +89 -0
  166. package/dist/components/json-schema-form-property-selection.js.map +1 -0
  167. package/dist/components/json-schema-form-render.cjs +41 -4
  168. package/dist/components/json-schema-form-render.cjs.map +1 -1
  169. package/dist/components/json-schema-form-render.d.ts +1 -1
  170. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  171. package/dist/components/json-schema-form-render.js +42 -5
  172. package/dist/components/json-schema-form-render.js.map +1 -1
  173. package/dist/components/json-schema-form-resolve.cjs +2 -0
  174. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  175. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  176. package/dist/components/json-schema-form-resolve.js +2 -0
  177. package/dist/components/json-schema-form-resolve.js.map +1 -1
  178. package/dist/components/json-schema-form-runtime-types.d.ts +222 -0
  179. package/dist/components/json-schema-form-runtime-types.d.ts.map +1 -0
  180. package/dist/components/json-schema-form-table-array.cjs +82 -51
  181. package/dist/components/json-schema-form-table-array.cjs.map +1 -1
  182. package/dist/components/json-schema-form-table-array.d.ts.map +1 -1
  183. package/dist/components/json-schema-form-table-array.js +84 -53
  184. package/dist/components/json-schema-form-table-array.js.map +1 -1
  185. package/dist/components/json-schema-form-template-menu.d.ts +1 -1
  186. package/dist/components/json-schema-form-template.d.ts +1 -1
  187. package/dist/components/json-schema-form-types.d.ts +7 -179
  188. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  189. package/dist/components/json-schema-form-utils.cjs +10 -9
  190. package/dist/components/json-schema-form-utils.cjs.map +1 -1
  191. package/dist/components/json-schema-form-utils.d.ts +11 -1
  192. package/dist/components/json-schema-form-utils.d.ts.map +1 -1
  193. package/dist/components/json-schema-form-utils.js +10 -9
  194. package/dist/components/json-schema-form-utils.js.map +1 -1
  195. package/dist/components/loading.d.ts +4 -4
  196. package/dist/components/mdx-editor-callout.d.ts +1 -1
  197. package/dist/components/mdx-editor-options.d.ts +1 -1
  198. package/dist/components/select.d.ts +3 -3
  199. package/dist/components/theme-switcher.d.ts +1 -1
  200. package/dist/components/use-list-menu-selection.d.ts +1 -1
  201. package/dist/components/useComboboxLayout.d.ts +1 -1
  202. package/dist/components/workload-picker-utils.d.ts +1 -1
  203. package/dist/data/Avatar.d.ts +1 -1
  204. package/dist/data/AvatarBadge.d.ts +1 -1
  205. package/dist/data/Badge.d.ts +1 -1
  206. package/dist/data/Callout.d.ts +1 -1
  207. package/dist/data/DataTable.cjs +575 -435
  208. package/dist/data/DataTable.cjs.map +1 -1
  209. package/dist/data/DataTable.d.ts +21 -13
  210. package/dist/data/DataTable.d.ts.map +1 -1
  211. package/dist/data/DataTable.grouping.d.ts +1 -1
  212. package/dist/data/DataTable.js +575 -435
  213. package/dist/data/DataTable.js.map +1 -1
  214. package/dist/data/ExecutionTree.d.ts +1 -1
  215. package/dist/data/FilterPill.d.ts +1 -1
  216. package/dist/data/FixtureEditor/RawFenceEditor.d.ts +1 -1
  217. package/dist/data/FixtureEditor/types.d.ts +1 -1
  218. package/dist/data/Gauge.d.ts +1 -1
  219. package/dist/data/GaugeHoverCard.d.ts +1 -1
  220. package/dist/data/Icon.d.ts +1 -1
  221. package/dist/data/KeyValueList.d.ts +1 -1
  222. package/dist/data/MarkdownEditor.d.ts +1 -1
  223. package/dist/data/MatrixTable.d.ts +1 -1
  224. package/dist/data/ObjectGraph.d.ts +1 -1
  225. package/dist/data/ProgressBars.d.ts +1 -1
  226. package/dist/data/Properties.cjs +86 -35
  227. package/dist/data/Properties.cjs.map +1 -1
  228. package/dist/data/Properties.d.ts +2 -2
  229. package/dist/data/Properties.d.ts.map +1 -1
  230. package/dist/data/Properties.js +87 -36
  231. package/dist/data/Properties.js.map +1 -1
  232. package/dist/data/RadialGauge.d.ts +1 -1
  233. package/dist/data/SchemaViewer.d.ts +1 -1
  234. package/dist/data/SortableHeader.d.ts +1 -1
  235. package/dist/data/StatStrip.d.ts +1 -1
  236. package/dist/data/StatusBreakdown.d.ts +1 -1
  237. package/dist/data/TabButton.d.ts +1 -1
  238. package/dist/data/TaskHeaderExtras.cjs +35 -0
  239. package/dist/data/TaskHeaderExtras.cjs.map +1 -0
  240. package/dist/data/TaskHeaderExtras.d.ts +27 -0
  241. package/dist/data/TaskHeaderExtras.d.ts.map +1 -0
  242. package/dist/data/TaskHeaderExtras.js +35 -0
  243. package/dist/data/TaskHeaderExtras.js.map +1 -0
  244. package/dist/data/TaskManager.cjs +27 -23
  245. package/dist/data/TaskManager.cjs.map +1 -1
  246. package/dist/data/TaskManager.d.ts +13 -1
  247. package/dist/data/TaskManager.d.ts.map +1 -1
  248. package/dist/data/TaskManager.js +27 -23
  249. package/dist/data/TaskManager.js.map +1 -1
  250. package/dist/data/TaskManagerButton.cjs +17 -34
  251. package/dist/data/TaskManagerButton.cjs.map +1 -1
  252. package/dist/data/TaskManagerButton.d.ts.map +1 -1
  253. package/dist/data/TaskManagerButton.js +18 -35
  254. package/dist/data/TaskManagerButton.js.map +1 -1
  255. package/dist/data/TaskProcessDetails.cjs +7 -25
  256. package/dist/data/TaskProcessDetails.cjs.map +1 -1
  257. package/dist/data/TaskProcessDetails.d.ts +2 -1
  258. package/dist/data/TaskProcessDetails.d.ts.map +1 -1
  259. package/dist/data/TaskProcessDetails.js +7 -25
  260. package/dist/data/TaskProcessDetails.js.map +1 -1
  261. package/dist/data/TaskProcessMetadata.cjs +50 -0
  262. package/dist/data/TaskProcessMetadata.cjs.map +1 -0
  263. package/dist/data/TaskProcessMetadata.d.ts +20 -0
  264. package/dist/data/TaskProcessMetadata.d.ts.map +1 -0
  265. package/dist/data/TaskProcessMetadata.js +50 -0
  266. package/dist/data/TaskProcessMetadata.js.map +1 -0
  267. package/dist/data/TaskProgress.cjs +41 -41
  268. package/dist/data/TaskProgress.cjs.map +1 -1
  269. package/dist/data/TaskProgress.d.ts +15 -1
  270. package/dist/data/TaskProgress.d.ts.map +1 -1
  271. package/dist/data/TaskProgress.js +41 -41
  272. package/dist/data/TaskProgress.js.map +1 -1
  273. package/dist/data/TaskResourceReadings.cjs +42 -0
  274. package/dist/data/TaskResourceReadings.cjs.map +1 -0
  275. package/dist/data/TaskResourceReadings.d.ts +6 -0
  276. package/dist/data/TaskResourceReadings.d.ts.map +1 -0
  277. package/dist/data/TaskResourceReadings.js +42 -0
  278. package/dist/data/TaskResourceReadings.js.map +1 -0
  279. package/dist/data/TaskSnapshot.cjs.map +1 -1
  280. package/dist/data/TaskSnapshot.d.ts +36 -1
  281. package/dist/data/TaskSnapshot.d.ts.map +1 -1
  282. package/dist/data/TaskSnapshot.js.map +1 -1
  283. package/dist/data/TaskStreamTabs.cjs +78 -0
  284. package/dist/data/TaskStreamTabs.cjs.map +1 -0
  285. package/dist/data/TaskStreamTabs.d.ts +35 -0
  286. package/dist/data/TaskStreamTabs.d.ts.map +1 -0
  287. package/dist/data/TaskStreamTabs.js +78 -0
  288. package/dist/data/TaskStreamTabs.js.map +1 -0
  289. package/dist/data/Timeline.d.ts +1 -1
  290. package/dist/data/Tree.d.ts +1 -1
  291. package/dist/data/TreeGroupHeader.d.ts +1 -1
  292. package/dist/data/TreeNode.d.ts +1 -1
  293. package/dist/data/Version.d.ts +3 -3
  294. package/dist/data/ai/ChatWindow.cjs +22 -12
  295. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  296. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  297. package/dist/data/ai/ChatWindow.js +22 -12
  298. package/dist/data/ai/ChatWindow.js.map +1 -1
  299. package/dist/data/ai/ChatWindow.test-utils.d.ts +4 -2
  300. package/dist/data/ai/ChatWindow.test-utils.d.ts.map +1 -1
  301. package/dist/data/ai/ChatWindow.types.d.ts +1 -1
  302. package/dist/data/ai/ChatWindowManager.cjs +2 -0
  303. package/dist/data/ai/ChatWindowManager.cjs.map +1 -1
  304. package/dist/data/ai/ChatWindowManager.d.ts +1 -1
  305. package/dist/data/ai/ChatWindowManager.d.ts.map +1 -1
  306. package/dist/data/ai/ChatWindowManager.js +2 -0
  307. package/dist/data/ai/ChatWindowManager.js.map +1 -1
  308. package/dist/data/ai/PolicyTree.d.ts +1 -1
  309. package/dist/data/ai/PromptCatalog/PromptPageHeader.d.ts +1 -1
  310. package/dist/data/ai/PromptCatalog/types.d.ts +1 -1
  311. package/dist/data/ai/PromptRunEditor/index.cjs +4 -0
  312. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  313. package/dist/data/ai/PromptRunEditor/index.d.ts +5 -2
  314. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
  315. package/dist/data/ai/PromptRunEditor/index.js +4 -0
  316. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  317. package/dist/data/ai/SessionChatComposer.d.ts +1 -1
  318. package/dist/data/ai/SessionInspector.approvals-model.cjs +9 -0
  319. package/dist/data/ai/SessionInspector.approvals-model.cjs.map +1 -0
  320. package/dist/data/ai/SessionInspector.approvals-model.d.ts +17 -0
  321. package/dist/data/ai/SessionInspector.approvals-model.d.ts.map +1 -0
  322. package/dist/data/ai/SessionInspector.approvals-model.js +9 -0
  323. package/dist/data/ai/SessionInspector.approvals-model.js.map +1 -0
  324. package/dist/data/ai/SessionInspector.approvals.cjs +143 -0
  325. package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -0
  326. package/dist/data/ai/SessionInspector.approvals.d.ts +13 -0
  327. package/dist/data/ai/SessionInspector.approvals.d.ts.map +1 -0
  328. package/dist/data/ai/SessionInspector.approvals.js +143 -0
  329. package/dist/data/ai/SessionInspector.approvals.js.map +1 -0
  330. package/dist/data/ai/SessionInspector.cjs +21 -8
  331. package/dist/data/ai/SessionInspector.cjs.map +1 -1
  332. package/dist/data/ai/SessionInspector.d.ts +6 -2
  333. package/dist/data/ai/SessionInspector.d.ts.map +1 -1
  334. package/dist/data/ai/SessionInspector.hierarchy.d.ts +1 -1
  335. package/dist/data/ai/SessionInspector.js +21 -8
  336. package/dist/data/ai/SessionInspector.js.map +1 -1
  337. package/dist/data/ai/SessionInspector.panel-parts.cjs +34 -0
  338. package/dist/data/ai/SessionInspector.panel-parts.cjs.map +1 -0
  339. package/dist/data/ai/SessionInspector.panel-parts.d.ts +19 -0
  340. package/dist/data/ai/SessionInspector.panel-parts.d.ts.map +1 -0
  341. package/dist/data/ai/SessionInspector.panel-parts.js +34 -0
  342. package/dist/data/ai/SessionInspector.panel-parts.js.map +1 -0
  343. package/dist/data/ai/SessionInspector.panel-values.cjs +18 -0
  344. package/dist/data/ai/SessionInspector.panel-values.cjs.map +1 -0
  345. package/dist/data/ai/SessionInspector.panel-values.d.ts +13 -0
  346. package/dist/data/ai/SessionInspector.panel-values.d.ts.map +1 -0
  347. package/dist/data/ai/SessionInspector.panel-values.js +18 -0
  348. package/dist/data/ai/SessionInspector.panel-values.js.map +1 -0
  349. package/dist/data/ai/SessionInspector.panels.cjs +41 -99
  350. package/dist/data/ai/SessionInspector.panels.cjs.map +1 -1
  351. package/dist/data/ai/SessionInspector.panels.d.ts +3 -1
  352. package/dist/data/ai/SessionInspector.panels.d.ts.map +1 -1
  353. package/dist/data/ai/SessionInspector.panels.js +13 -71
  354. package/dist/data/ai/SessionInspector.panels.js.map +1 -1
  355. package/dist/data/ai/SessionViewer.d.ts +1 -1
  356. package/dist/data/ai/SessionViewer.rows.d.ts +1 -1
  357. package/dist/data/ai/SessionViewer.tool-details.d.ts +1 -1
  358. package/dist/data/ai/SessionViewer.unified.d.ts +23 -0
  359. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  360. package/dist/data/ai/SpecRuntimeEditor/Footer.d.ts +1 -1
  361. package/dist/data/ai/SpecRuntimeEditor/Rail.d.ts +1 -1
  362. package/dist/data/ai/SpecRuntimeEditor/SectionCard.d.ts +1 -1
  363. package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs +3 -1
  364. package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs.map +1 -1
  365. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts +3 -1
  366. package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts.map +1 -1
  367. package/dist/data/ai/SpecRuntimeEditor/VerifySection.js +3 -1
  368. package/dist/data/ai/SpecRuntimeEditor/VerifySection.js.map +1 -1
  369. package/dist/data/ai/SpecRuntimeEditor/fields.d.ts +1 -1
  370. package/dist/data/ai/SpecRuntimeEditor/index.cjs +3 -1
  371. package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
  372. package/dist/data/ai/SpecRuntimeEditor/index.d.ts +5 -2
  373. package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
  374. package/dist/data/ai/SpecRuntimeEditor/index.js +3 -1
  375. package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
  376. package/dist/data/ai/chat-window-context.cjs +1 -0
  377. package/dist/data/ai/chat-window-context.cjs.map +1 -1
  378. package/dist/data/ai/chat-window-context.d.ts +13 -5
  379. package/dist/data/ai/chat-window-context.d.ts.map +1 -1
  380. package/dist/data/ai/chat-window-context.js +1 -0
  381. package/dist/data/ai/chat-window-context.js.map +1 -1
  382. package/dist/data/ai/index.d.ts +3 -1
  383. package/dist/data/ai/index.d.ts.map +1 -1
  384. package/dist/data/ai/use-session-scroll.d.ts +1 -1
  385. package/dist/data/cache-browser/adapter.d.ts +1 -1
  386. package/dist/data/cells/CellFilterActions.d.ts +1 -1
  387. package/dist/data/cells/EntityCell.d.ts +1 -1
  388. package/dist/data/cells/tag-utils.d.ts +1 -1
  389. package/dist/data/chat/Chat.cjs +42 -46
  390. package/dist/data/chat/Chat.cjs.map +1 -1
  391. package/dist/data/chat/Chat.d.ts +16 -5
  392. package/dist/data/chat/Chat.d.ts.map +1 -1
  393. package/dist/data/chat/Chat.js +43 -47
  394. package/dist/data/chat/Chat.js.map +1 -1
  395. package/dist/data/chat/ModelSelector.d.ts +1 -1
  396. package/dist/data/chat/PromptInput.cjs +13 -0
  397. package/dist/data/chat/PromptInput.cjs.map +1 -1
  398. package/dist/data/chat/PromptInput.d.ts +8 -2
  399. package/dist/data/chat/PromptInput.d.ts.map +1 -1
  400. package/dist/data/chat/PromptInput.js +14 -1
  401. package/dist/data/chat/PromptInput.js.map +1 -1
  402. package/dist/data/chat/tool-render/ToolArgs.d.ts +1 -1
  403. package/dist/data/chat/tool-render/ToolParams.d.ts +1 -1
  404. package/dist/data/chat/tool-render/ToolValue.d.ts +1 -1
  405. package/dist/data/chat/tool-render/adapter.d.ts +1 -1
  406. package/dist/data/chat/tool-render/context.d.ts +1 -1
  407. package/dist/data/chat/tool-render/defaults.d.ts +1 -1
  408. package/dist/data/chat/tool-render/known-tool-views.d.ts +1 -1
  409. package/dist/data/chat/tool-render/summary.d.ts +1 -1
  410. package/dist/data/chat/types.d.ts +1 -1
  411. package/dist/data/clicky-export/useClickyExport.d.ts +1 -1
  412. package/dist/data/data-table-server-filters.d.ts +1 -1
  413. package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts +1 -1
  414. package/dist/data/diagnostics/ErrorDetails.d.ts +1 -1
  415. package/dist/data/diagnostics/StackFrameRow.d.ts +1 -1
  416. package/dist/data/git/GitChangeList.d.ts +1 -1
  417. package/dist/data/icon-fallback.d.ts +1 -1
  418. package/dist/data/properties-context.cjs +6 -0
  419. package/dist/data/properties-context.cjs.map +1 -0
  420. package/dist/data/properties-context.d.ts +7 -0
  421. package/dist/data/properties-context.d.ts.map +1 -0
  422. package/dist/data/properties-context.js +6 -0
  423. package/dist/data/properties-context.js.map +1 -0
  424. package/dist/data/query-browser/QueryBrowser.types.d.ts +1 -1
  425. package/dist/data/runtime/RuntimeBar.cjs +7 -3
  426. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  427. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  428. package/dist/data/runtime/RuntimeBar.js +7 -3
  429. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  430. package/dist/data/task-copy.cjs +1 -1
  431. package/dist/data/task-copy.cjs.map +1 -1
  432. package/dist/data/task-copy.js +1 -1
  433. package/dist/data/task-copy.js.map +1 -1
  434. package/dist/data/task-metadata.cjs +36 -0
  435. package/dist/data/task-metadata.cjs.map +1 -0
  436. package/dist/data/task-metadata.d.ts +39 -0
  437. package/dist/data/task-metadata.d.ts.map +1 -0
  438. package/dist/data/task-metadata.js +36 -0
  439. package/dist/data/task-metadata.js.map +1 -0
  440. package/dist/data/task-resource-summary.cjs +30 -0
  441. package/dist/data/task-resource-summary.cjs.map +1 -0
  442. package/dist/data/task-resource-summary.d.ts +15 -0
  443. package/dist/data/task-resource-summary.d.ts.map +1 -0
  444. package/dist/data/task-resource-summary.js +30 -0
  445. package/dist/data/task-resource-summary.js.map +1 -0
  446. package/dist/data/task-status.cjs +8 -2
  447. package/dist/data/task-status.cjs.map +1 -1
  448. package/dist/data/task-status.d.ts +3 -0
  449. package/dist/data/task-status.d.ts.map +1 -1
  450. package/dist/data/task-status.js +8 -2
  451. package/dist/data/task-status.js.map +1 -1
  452. package/dist/data/task-streams.cjs +39 -0
  453. package/dist/data/task-streams.cjs.map +1 -0
  454. package/dist/data/task-streams.d.ts +60 -0
  455. package/dist/data/task-streams.d.ts.map +1 -0
  456. package/dist/data/task-streams.js +39 -0
  457. package/dist/data/task-streams.js.map +1 -0
  458. package/dist/data/task-work-progress.cjs +24 -0
  459. package/dist/data/task-work-progress.cjs.map +1 -0
  460. package/dist/data/task-work-progress.d.ts +21 -0
  461. package/dist/data/task-work-progress.d.ts.map +1 -0
  462. package/dist/data/task-work-progress.js +24 -0
  463. package/dist/data/task-work-progress.js.map +1 -0
  464. package/dist/data/test-runner/TestRunner.d.ts +1 -1
  465. package/dist/data/test-runner/adapter.d.ts +1 -1
  466. package/dist/data/test-runner/context.d.ts +1 -1
  467. package/dist/data/use-data-table-virtual.cjs +73 -0
  468. package/dist/data/use-data-table-virtual.cjs.map +1 -0
  469. package/dist/data/use-data-table-virtual.d.ts +40 -0
  470. package/dist/data/use-data-table-virtual.d.ts.map +1 -0
  471. package/dist/data/use-data-table-virtual.js +73 -0
  472. package/dist/data/use-data-table-virtual.js.map +1 -0
  473. package/dist/data/verification/VerificationResults.d.ts +1 -1
  474. package/dist/data/version-info.cjs +3 -3
  475. package/dist/data/version-info.js +3 -3
  476. package/dist/data.cjs +14 -0
  477. package/dist/data.cjs.map +1 -1
  478. package/dist/data.d.ts +6 -1
  479. package/dist/data.d.ts.map +1 -1
  480. package/dist/data.js +14 -0
  481. package/dist/data.js.map +1 -1
  482. package/dist/expressions/lang/attributes.cjs +56 -0
  483. package/dist/expressions/lang/attributes.cjs.map +1 -0
  484. package/dist/expressions/lang/attributes.d.ts +22 -0
  485. package/dist/expressions/lang/attributes.d.ts.map +1 -0
  486. package/dist/expressions/lang/attributes.js +56 -0
  487. package/dist/expressions/lang/attributes.js.map +1 -0
  488. package/dist/expressions/lang/completion.cjs +164 -0
  489. package/dist/expressions/lang/completion.cjs.map +1 -0
  490. package/dist/expressions/lang/completion.d.ts +29 -0
  491. package/dist/expressions/lang/completion.d.ts.map +1 -0
  492. package/dist/expressions/lang/completion.js +164 -0
  493. package/dist/expressions/lang/completion.js.map +1 -0
  494. package/dist/expressions/lang/environment.cjs +115 -0
  495. package/dist/expressions/lang/environment.cjs.map +1 -0
  496. package/dist/expressions/lang/environment.d.ts +54 -0
  497. package/dist/expressions/lang/environment.d.ts.map +1 -0
  498. package/dist/expressions/lang/environment.js +115 -0
  499. package/dist/expressions/lang/environment.js.map +1 -0
  500. package/dist/expressions/lang/generated/conformance.json.d.ts +4962 -0
  501. package/dist/expressions/lang/generated/index.cjs +18 -0
  502. package/dist/expressions/lang/generated/index.cjs.map +1 -0
  503. package/dist/expressions/lang/generated/index.d.ts +9 -0
  504. package/dist/expressions/lang/generated/index.d.ts.map +1 -0
  505. package/dist/expressions/lang/generated/index.js +18 -0
  506. package/dist/expressions/lang/generated/index.js.map +1 -0
  507. package/dist/expressions/lang/generated/languages.json.cjs +18 -0
  508. package/dist/expressions/lang/generated/languages.json.cjs.map +1 -0
  509. package/dist/expressions/lang/generated/languages.json.d.ts +2305 -0
  510. package/dist/expressions/lang/generated/languages.json.js +18 -0
  511. package/dist/expressions/lang/generated/languages.json.js.map +1 -0
  512. package/dist/expressions/lang/generated/spec.json.cjs +12 -0
  513. package/dist/expressions/lang/generated/spec.json.cjs.map +1 -0
  514. package/dist/expressions/lang/generated/spec.json.d.ts +6260 -0
  515. package/dist/expressions/lang/generated/spec.json.js +12 -0
  516. package/dist/expressions/lang/generated/spec.json.js.map +1 -0
  517. package/dist/expressions/lang/hover.cjs +106 -0
  518. package/dist/expressions/lang/hover.cjs.map +1 -0
  519. package/dist/expressions/lang/hover.d.ts +54 -0
  520. package/dist/expressions/lang/hover.d.ts.map +1 -0
  521. package/dist/expressions/lang/hover.js +106 -0
  522. package/dist/expressions/lang/hover.js.map +1 -0
  523. package/dist/expressions/lang/index.cjs +87 -0
  524. package/dist/expressions/lang/index.cjs.map +1 -0
  525. package/dist/expressions/lang/index.d.ts +65 -0
  526. package/dist/expressions/lang/index.d.ts.map +1 -0
  527. package/dist/expressions/lang/index.js +90 -0
  528. package/dist/expressions/lang/index.js.map +1 -0
  529. package/dist/expressions/lang/merge.cjs +52 -0
  530. package/dist/expressions/lang/merge.cjs.map +1 -0
  531. package/dist/expressions/lang/merge.d.ts +12 -0
  532. package/dist/expressions/lang/merge.d.ts.map +1 -0
  533. package/dist/expressions/lang/merge.js +52 -0
  534. package/dist/expressions/lang/merge.js.map +1 -0
  535. package/dist/expressions/lang/prefix.cjs +91 -0
  536. package/dist/expressions/lang/prefix.cjs.map +1 -0
  537. package/dist/expressions/lang/prefix.d.ts +36 -0
  538. package/dist/expressions/lang/prefix.d.ts.map +1 -0
  539. package/dist/expressions/lang/prefix.js +91 -0
  540. package/dist/expressions/lang/prefix.js.map +1 -0
  541. package/dist/expressions/lang/spec.d.ts +13 -0
  542. package/dist/expressions/lang/spec.d.ts.map +1 -0
  543. package/dist/expressions/lang/theme.cjs +97 -0
  544. package/dist/expressions/lang/theme.cjs.map +1 -0
  545. package/dist/expressions/lang/theme.d.ts +6 -0
  546. package/dist/expressions/lang/theme.d.ts.map +1 -0
  547. package/dist/expressions/lang/theme.js +97 -0
  548. package/dist/expressions/lang/theme.js.map +1 -0
  549. package/dist/expressions/lang/types.d.ts +81 -0
  550. package/dist/expressions/lang/types.d.ts.map +1 -0
  551. package/dist/expressions/playground/ExpressionPlayground.cjs +308 -0
  552. package/dist/expressions/playground/ExpressionPlayground.cjs.map +1 -0
  553. package/dist/expressions/playground/ExpressionPlayground.d.ts +42 -0
  554. package/dist/expressions/playground/ExpressionPlayground.d.ts.map +1 -0
  555. package/dist/expressions/playground/ExpressionPlayground.js +291 -0
  556. package/dist/expressions/playground/ExpressionPlayground.js.map +1 -0
  557. package/dist/expressions/playground/RunControls.cjs +51 -0
  558. package/dist/expressions/playground/RunControls.cjs.map +1 -0
  559. package/dist/expressions/playground/RunControls.d.ts +7 -0
  560. package/dist/expressions/playground/RunControls.d.ts.map +1 -0
  561. package/dist/expressions/playground/RunControls.js +51 -0
  562. package/dist/expressions/playground/RunControls.js.map +1 -0
  563. package/dist/expressions/playground/VerticalSplit.cjs +109 -0
  564. package/dist/expressions/playground/VerticalSplit.cjs.map +1 -0
  565. package/dist/expressions/playground/VerticalSplit.d.ts +23 -0
  566. package/dist/expressions/playground/VerticalSplit.d.ts.map +1 -0
  567. package/dist/expressions/playground/VerticalSplit.js +109 -0
  568. package/dist/expressions/playground/VerticalSplit.js.map +1 -0
  569. package/dist/expressions/playground/api.cjs +49 -0
  570. package/dist/expressions/playground/api.cjs.map +1 -0
  571. package/dist/expressions/playground/api.d.ts +53 -0
  572. package/dist/expressions/playground/api.d.ts.map +1 -0
  573. package/dist/expressions/playground/api.js +49 -0
  574. package/dist/expressions/playground/api.js.map +1 -0
  575. package/dist/expressions/playground/languages.cjs +88 -0
  576. package/dist/expressions/playground/languages.cjs.map +1 -0
  577. package/dist/expressions/playground/languages.d.ts +43 -0
  578. package/dist/expressions/playground/languages.d.ts.map +1 -0
  579. package/dist/expressions/playground/languages.js +88 -0
  580. package/dist/expressions/playground/languages.js.map +1 -0
  581. package/dist/expressions/playground/panels/GraphPanel.cjs +72 -0
  582. package/dist/expressions/playground/panels/GraphPanel.cjs.map +1 -0
  583. package/dist/expressions/playground/panels/GraphPanel.d.ts +19 -0
  584. package/dist/expressions/playground/panels/GraphPanel.d.ts.map +1 -0
  585. package/dist/expressions/playground/panels/GraphPanel.js +72 -0
  586. package/dist/expressions/playground/panels/GraphPanel.js.map +1 -0
  587. package/dist/expressions/playground/panels/ResultPanel.cjs +82 -0
  588. package/dist/expressions/playground/panels/ResultPanel.cjs.map +1 -0
  589. package/dist/expressions/playground/panels/ResultPanel.d.ts +11 -0
  590. package/dist/expressions/playground/panels/ResultPanel.d.ts.map +1 -0
  591. package/dist/expressions/playground/panels/ResultPanel.js +82 -0
  592. package/dist/expressions/playground/panels/ResultPanel.js.map +1 -0
  593. package/dist/expressions/playground/panels/SpecPanel.cjs +76 -0
  594. package/dist/expressions/playground/panels/SpecPanel.cjs.map +1 -0
  595. package/dist/expressions/playground/panels/SpecPanel.d.ts +18 -0
  596. package/dist/expressions/playground/panels/SpecPanel.d.ts.map +1 -0
  597. package/dist/expressions/playground/panels/SpecPanel.js +76 -0
  598. package/dist/expressions/playground/panels/SpecPanel.js.map +1 -0
  599. package/dist/expressions/playground/panels/TokensPanel.cjs +89 -0
  600. package/dist/expressions/playground/panels/TokensPanel.cjs.map +1 -0
  601. package/dist/expressions/playground/panels/TokensPanel.d.ts +15 -0
  602. package/dist/expressions/playground/panels/TokensPanel.d.ts.map +1 -0
  603. package/dist/expressions/playground/panels/TokensPanel.js +72 -0
  604. package/dist/expressions/playground/panels/TokensPanel.js.map +1 -0
  605. package/dist/expressions/playground/panels/graphNodes.cjs +35 -0
  606. package/dist/expressions/playground/panels/graphNodes.cjs.map +1 -0
  607. package/dist/expressions/playground/panels/graphNodes.d.ts +19 -0
  608. package/dist/expressions/playground/panels/graphNodes.d.ts.map +1 -0
  609. package/dist/expressions/playground/panels/graphNodes.js +35 -0
  610. package/dist/expressions/playground/panels/graphNodes.js.map +1 -0
  611. package/dist/expressions/playground/runAction.cjs +12 -0
  612. package/dist/expressions/playground/runAction.cjs.map +1 -0
  613. package/dist/expressions/playground/runAction.d.ts +15 -0
  614. package/dist/expressions/playground/runAction.d.ts.map +1 -0
  615. package/dist/expressions/playground/runAction.js +12 -0
  616. package/dist/expressions/playground/runAction.js.map +1 -0
  617. package/dist/expressions/playground/runShortcut.cjs +9 -0
  618. package/dist/expressions/playground/runShortcut.cjs.map +1 -0
  619. package/dist/expressions/playground/runShortcut.d.ts +2 -0
  620. package/dist/expressions/playground/runShortcut.d.ts.map +1 -0
  621. package/dist/expressions/playground/runShortcut.js +9 -0
  622. package/dist/expressions/playground/runShortcut.js.map +1 -0
  623. package/dist/expressions/playground/useEditorTheme.cjs +40 -0
  624. package/dist/expressions/playground/useEditorTheme.cjs.map +1 -0
  625. package/dist/expressions/playground/useEditorTheme.d.ts +16 -0
  626. package/dist/expressions/playground/useEditorTheme.d.ts.map +1 -0
  627. package/dist/expressions/playground/useEditorTheme.js +23 -0
  628. package/dist/expressions/playground/useEditorTheme.js.map +1 -0
  629. package/dist/expressions/playground/useEvaluator.cjs +72 -0
  630. package/dist/expressions/playground/useEvaluator.cjs.map +1 -0
  631. package/dist/expressions/playground/useEvaluator.d.ts +25 -0
  632. package/dist/expressions/playground/useEvaluator.d.ts.map +1 -0
  633. package/dist/expressions/playground/useEvaluator.js +72 -0
  634. package/dist/expressions/playground/useEvaluator.js.map +1 -0
  635. package/dist/expressions/playground/useParsedInput.cjs +22 -0
  636. package/dist/expressions/playground/useParsedInput.cjs.map +1 -0
  637. package/dist/expressions/playground/useParsedInput.d.ts +20 -0
  638. package/dist/expressions/playground/useParsedInput.d.ts.map +1 -0
  639. package/dist/expressions/playground/useParsedInput.js +22 -0
  640. package/dist/expressions/playground/useParsedInput.js.map +1 -0
  641. package/dist/expressions/playground/verticalSplitModel.cjs +11 -0
  642. package/dist/expressions/playground/verticalSplitModel.cjs.map +1 -0
  643. package/dist/expressions/playground/verticalSplitModel.d.ts +3 -0
  644. package/dist/expressions/playground/verticalSplitModel.d.ts.map +1 -0
  645. package/dist/expressions/playground/verticalSplitModel.js +11 -0
  646. package/dist/expressions/playground/verticalSplitModel.js.map +1 -0
  647. package/dist/expressions/playground.cjs +18 -0
  648. package/dist/expressions/playground.cjs.map +1 -0
  649. package/dist/expressions/playground.d.ts +18 -0
  650. package/dist/expressions/playground.d.ts.map +1 -0
  651. package/dist/expressions/playground.js +18 -0
  652. package/dist/expressions/playground.js.map +1 -0
  653. package/dist/expressions.cjs +28 -0
  654. package/dist/expressions.cjs.map +1 -0
  655. package/dist/expressions.d.ts +10 -0
  656. package/dist/expressions.d.ts.map +1 -0
  657. package/dist/expressions.js +28 -0
  658. package/dist/expressions.js.map +1 -0
  659. package/dist/hooks/density-provider.d.ts +1 -1
  660. package/dist/hooks/theme-provider.d.ts +1 -1
  661. package/dist/hooks/use-density.d.ts +1 -1
  662. package/dist/hooks/use-resource-clock.cjs +14 -0
  663. package/dist/hooks/use-resource-clock.cjs.map +1 -0
  664. package/dist/hooks/use-resource-clock.d.ts +2 -0
  665. package/dist/hooks/use-resource-clock.d.ts.map +1 -0
  666. package/dist/hooks/use-resource-clock.js +14 -0
  667. package/dist/hooks/use-resource-clock.js.map +1 -0
  668. package/dist/hooks/use-task-run.cjs +25 -18
  669. package/dist/hooks/use-task-run.cjs.map +1 -1
  670. package/dist/hooks/use-task-run.d.ts.map +1 -1
  671. package/dist/hooks/use-task-run.js +26 -19
  672. package/dist/hooks/use-task-run.js.map +1 -1
  673. package/dist/hooks/use-theme.d.ts +1 -1
  674. package/dist/icons/registry.d.ts +1 -1
  675. package/dist/icons/types.d.ts +1 -1
  676. package/dist/index.cjs +14 -0
  677. package/dist/index.cjs.map +1 -1
  678. package/dist/index.js +14 -0
  679. package/dist/index.js.map +1 -1
  680. package/dist/layout/AppShell.d.ts +1 -1
  681. package/dist/layout/AppShell.nav.drag.d.ts +1 -1
  682. package/dist/layout/AppSidebar.d.ts +1 -1
  683. package/dist/layout/Panel.d.ts +1 -1
  684. package/dist/layout/PanelFrame.d.ts +1 -1
  685. package/dist/layout/Section.d.ts +1 -1
  686. package/dist/layout/SplitPane.d.ts +1 -1
  687. package/dist/layout/Tabs.d.ts +1 -1
  688. package/dist/layout/Workspace.d.ts +1 -1
  689. package/dist/layout/Workspace.model.d.ts +1 -1
  690. package/dist/lib/combobox-values.d.ts +1 -1
  691. package/dist/monaco/MonacoEditor.cjs +3 -3
  692. package/dist/monaco/MonacoEditor.cjs.map +1 -1
  693. package/dist/monaco/MonacoEditor.js +2 -2
  694. package/dist/monaco/MonacoEditor.js.map +1 -1
  695. package/dist/monaco/types.d.ts +1 -1
  696. package/dist/monaco/use-monaco-worker.d.ts +1 -1
  697. package/dist/overlay/CellActions.d.ts +1 -1
  698. package/dist/overlay/CommandPalette.d.ts +2 -2
  699. package/dist/overlay/CommandPalette.model.d.ts +1 -1
  700. package/dist/overlay/CommandPaletteList.d.ts +1 -1
  701. package/dist/overlay/DropdownMenu.d.ts +1 -1
  702. package/dist/overlay/HoverCard.d.ts +1 -1
  703. package/dist/overlay/Modal.d.ts +2 -2
  704. package/dist/overlay/Toast.d.ts +1 -1
  705. package/dist/overlay/TourCard.d.ts +1 -1
  706. package/dist/overlay/TourProvider.d.ts +1 -1
  707. package/dist/overlay/dropdownMenuContext.d.ts +1 -1
  708. package/dist/overlay/toast-context.d.ts +2 -2
  709. package/dist/overlay/tour-context.d.ts +1 -1
  710. package/dist/overlay/tour-types.d.ts +1 -1
  711. package/dist/profiles/connections/connectionBrowserModel.d.ts +1 -1
  712. package/dist/profiles/connections/connectionQueryWorkspace.d.ts +1 -1
  713. package/dist/profiles/editor/profileBuilder.d.ts +1 -1
  714. package/dist/profiles/elasticsearch/esParamOperandExtension.d.ts +1 -1
  715. package/dist/profiles/fields/profileFieldControls.d.ts +1 -1
  716. package/dist/profiles/fields/profileFieldIcons.d.ts +1 -1
  717. package/dist/profiles/fields/profileFieldState.d.ts +1 -1
  718. package/dist/profiles/query/jsonPathSample.d.ts +1 -1
  719. package/dist/profiles/query/jsonPathSampleRow.d.ts +1 -1
  720. package/dist/profiles/query/prometheusResults.d.ts +2 -2
  721. package/dist/rpc/EndpointList.d.ts +1 -1
  722. package/dist/rpc/EntityExplorerApp.d.ts +1 -1
  723. package/dist/rpc/OperationCatalog.d.ts +1 -1
  724. package/dist/rpc/OperationEntityContextPicker.d.ts +1 -1
  725. package/dist/rpc/OperationEntityPage.d.ts +1 -1
  726. package/dist/rpc/OperationResultView.d.ts +1 -1
  727. package/dist/rpc/RouterProvider.d.ts +1 -1
  728. package/dist/rpc/SchemaActionForm.d.ts +1 -1
  729. package/dist/rpc/formMetadata.d.ts +1 -1
  730. package/dist/rpc/router.d.ts +1 -1
  731. package/dist/rpc/rpc-story.fixtures.d.ts +1 -1
  732. package/dist/styles.css +1 -1
  733. package/package.json +21 -2
@@ -9,7 +9,7 @@ import { resolveItemSpec, emptyItemsCopy, itemSummaryFor, itemActionsAllow, addI
9
9
  import { ItemBadge, RequiredMark } from "./json-schema-form-item-row.js";
10
10
  import { inputSizeClass } from "./json-schema-form-size.js";
11
11
  import { TONE_EDGE_CLASS } from "./json-schema-form-tone.js";
12
- import { seedFromSchema } from "./json-schema-form-utils.js";
12
+ import { canRemoveItem, canAddItem, seedFromSchema } from "./json-schema-form-utils.js";
13
13
  import { UiAdd } from "../icons/components/UiAdd.js";
14
14
  function CardsArray({
15
15
  field,
@@ -37,30 +37,40 @@ function CardsArray({
37
37
  "article",
38
38
  {
39
39
  className: cn(
40
- "group rounded-lg border border-l-4 border-border shadow-sm",
40
+ "group rounded-lg border-l-4 border-border",
41
+ ctx.presentation ? "bg-muted/20" : "border shadow-sm",
41
42
  summary.glyph ? TONE_EDGE_CLASS[summary.glyph.tone] : void 0
42
43
  ),
43
44
  children: [
44
- /* @__PURE__ */ jsxs("header", { className: "flex items-center gap-2 rounded-tr-md border-b border-border bg-muted/40 px-3 py-2", children: [
45
- /* @__PURE__ */ jsx("span", { className: "w-5 shrink-0 text-center font-mono text-xs text-muted-foreground", children: i + 1 }),
46
- /* @__PURE__ */ jsx("span", { className: "shrink-0 text-sm font-semibold", children: summary.title }),
47
- /* @__PURE__ */ jsx(ItemBadge, { badge: summary.badge }),
48
- summary.flagged && /* @__PURE__ */ jsx(RequiredMark, {}),
49
- summary.summary && /* @__PURE__ */ jsx("code", { className: "truncate font-mono text-xs text-muted-foreground", children: summary.summary }),
50
- !readOnly && /* @__PURE__ */ jsx(
51
- ItemActions,
52
- {
53
- label: summary.title,
54
- index: i,
55
- count: items.length,
56
- size: ctx.size,
57
- ...itemActionsAllow(spec, "reorder") ? { onMove: (to) => commit(moveItem(items, i, to)) } : {},
58
- ...itemActionsAllow(spec, "duplicate") ? { onDuplicate: () => commit(duplicateIndex(items, i)) } : {},
59
- ...itemActionsAllow(spec, "remove") ? { onRemove: () => commit(removeIndex(items, i)) } : {}
60
- }
61
- )
62
- ] }),
63
- /* @__PURE__ */ jsx("div", { className: "p-3", children: ((_b = ctx.render.renderFieldNodes(
45
+ /* @__PURE__ */ jsxs(
46
+ "header",
47
+ {
48
+ className: cn(
49
+ "flex flex-wrap items-center gap-2 rounded-tr-md border-b border-border bg-muted/40",
50
+ ctx.presentation ? "px-2 py-1" : "px-3 py-2"
51
+ ),
52
+ children: [
53
+ /* @__PURE__ */ jsx("span", { className: "w-5 shrink-0 text-center font-mono text-xs text-muted-foreground", children: i + 1 }),
54
+ /* @__PURE__ */ jsx("span", { className: "shrink-0 text-sm font-semibold", children: summary.title }),
55
+ /* @__PURE__ */ jsx(ItemBadge, { badge: summary.badge }),
56
+ summary.flagged && /* @__PURE__ */ jsx(RequiredMark, {}),
57
+ summary.summary && /* @__PURE__ */ jsx("code", { className: "truncate font-mono text-xs text-muted-foreground", children: summary.summary }),
58
+ !readOnly && /* @__PURE__ */ jsx(
59
+ ItemActions,
60
+ {
61
+ label: summary.title,
62
+ index: i,
63
+ count: items.length,
64
+ size: ctx.size,
65
+ ...itemActionsAllow(spec, "reorder") ? { onMove: (to) => commit(moveItem(items, i, to)) } : {},
66
+ ...itemActionsAllow(spec, "duplicate") ? { onDuplicate: () => commit(duplicateIndex(items, i)) } : {},
67
+ ...itemActionsAllow(spec, "remove") && canRemoveItem(field, items.length) ? { onRemove: () => commit(removeIndex(items, i)) } : {}
68
+ }
69
+ )
70
+ ]
71
+ }
72
+ ),
73
+ /* @__PURE__ */ jsx("div", { className: ctx.presentation ? "p-2" : "p-3", children: ((_b = ctx.render.renderFieldNodes(
64
74
  {
65
75
  key: `${field.key}[${i}]`,
66
76
  prop: itemSchema,
@@ -77,7 +87,7 @@ function CardsArray({
77
87
  );
78
88
  }),
79
89
  items.length === 0 && emptyCopy && /* @__PURE__ */ jsx("p", { className: "text-xs leading-snug text-muted-foreground", children: emptyCopy }),
80
- !readOnly && /* @__PURE__ */ jsxs(
90
+ !readOnly && canAddItem(field, items.length) && /* @__PURE__ */ jsxs(
81
91
  Button,
82
92
  {
83
93
  type: "button",
@@ -1 +1 @@
1
- {"version":3,"file":"json-schema-form-cards-array.js","sources":["../../src/components/json-schema-form-cards-array.tsx"],"sourcesContent":["import { duplicateIndex, moveItem, removeIndex, setIndex } from \"../lib/collections\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"../data/Icon\";\nimport { UiAdd } from \"../icons\";\nimport { Button } from \"./button\";\nimport { ItemActions } from \"./ItemActions\";\nimport { appendInstancePath } from \"./json-schema-form-errors\";\nimport {\n addItemLabel,\n emptyItemsCopy,\n itemActionsAllow,\n itemSummaryFor,\n resolveItemSpec,\n} from \"./json-schema-form-item-summary\";\nimport { ItemBadge, RequiredMark } from \"./json-schema-form-item-row\";\nimport { inputSizeClass } from \"./json-schema-form-size\";\nimport { TONE_EDGE_CLASS } from \"./json-schema-form-tone\";\nimport { seedFromSchema } from \"./json-schema-form-utils\";\nimport type { FieldControl, RenderContext } from \"./json-schema-form-types\";\n\n// CardsArray renders an object-item array as a stack of titled cards: every\n// item stays open, but each one is headed by what it actually is rather than\n// \"Item 3\", and carries the item type's hue on its left edge so a long stack is\n// scannable at a glance.\n//\n// It is the everything-visible counterpart to AccordionArray. Both read the\n// same `x-item` summary, so a consumer switches between them by changing\n// `x-array-display` alone — no second vocabulary to learn.\nexport function CardsArray({\n field,\n ctx,\n readOnly,\n}: {\n field: FieldControl;\n ctx: RenderContext;\n readOnly: boolean;\n}) {\n const items = Array.isArray(field.value) ? field.value : [];\n const itemSchema = field.itemSchema ?? { type: \"object\" };\n const spec = field.itemSpec ?? resolveItemSpec(field.schema, itemSchema);\n const emptyCopy = emptyItemsCopy(spec, field.schema);\n // The array's help mode governs its whole subtree, exactly as it does for the\n // accordion: a card whose fields each carry a permanent two-line paragraph is\n // back to the height the card layout exists to reclaim.\n const childCtx: RenderContext = {\n ...ctx,\n readOnly,\n depth: ctx.depth + 1,\n ...(field.helpDisplay ? { layout: { ...ctx.layout, help: field.helpDisplay } } : {}),\n };\n\n function commit(next: unknown[]) {\n field.onChange(next);\n }\n\n return (\n <div className=\"flex flex-col gap-2\">\n {items.map((item, i) => {\n const summary =\n field.itemSummary?.({ item, index: i }) ??\n itemSummaryFor({ item, index: i, spec, itemSchema });\n return (\n <article\n key={i}\n className={cn(\n \"group rounded-lg border border-l-4 border-border shadow-sm\",\n summary.glyph ? TONE_EDGE_CLASS[summary.glyph.tone] : undefined,\n )}\n >\n <header className=\"flex items-center gap-2 rounded-tr-md border-b border-border bg-muted/40 px-3 py-2\">\n <span className=\"w-5 shrink-0 text-center font-mono text-xs text-muted-foreground\">\n {i + 1}\n </span>\n <span className=\"shrink-0 text-sm font-semibold\">{summary.title}</span>\n <ItemBadge badge={summary.badge} />\n {summary.flagged && <RequiredMark />}\n {summary.summary && (\n <code className=\"truncate font-mono text-xs text-muted-foreground\">\n {summary.summary}\n </code>\n )}\n {!readOnly && (\n <ItemActions\n label={summary.title}\n index={i}\n count={items.length}\n size={ctx.size}\n {...(itemActionsAllow(spec, \"reorder\")\n ? { onMove: (to: number) => commit(moveItem(items, i, to)) }\n : {})}\n {...(itemActionsAllow(spec, \"duplicate\")\n ? { onDuplicate: () => commit(duplicateIndex(items, i)) }\n : {})}\n {...(itemActionsAllow(spec, \"remove\")\n ? { onRemove: () => commit(removeIndex(items, i)) }\n : {})}\n />\n )}\n </header>\n <div className=\"p-3\">\n {/* Recurse through the shared pipeline so consumer pre/post\n extensions still apply to the item and its properties — and so\n the item's own x-columns reaches its ObjectControl. */}\n {ctx.render.renderFieldNodes(\n {\n key: `${field.key}[${i}]`,\n prop: itemSchema,\n required: false,\n value: item,\n onChange: (next) => commit(setIndex(items, i, next)),\n instancePath: appendInstancePath(ctx.instancePath, i),\n },\n childCtx,\n )?.value ?? null}\n </div>\n </article>\n );\n })}\n {items.length === 0 && emptyCopy && (\n <p className=\"text-xs leading-snug text-muted-foreground\">{emptyCopy}</p>\n )}\n {!readOnly && (\n <Button\n type=\"button\"\n variant=\"outline\"\n className={cn(\"gap-1.5 self-start\", inputSizeClass[ctx.size])}\n onClick={() => commit([...items, seedFromSchema(itemSchema)])}\n >\n <Icon icon={UiAdd} className=\"text-sm\" />\n {addItemLabel(spec)}\n </Button>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"json-schema-form-cards-array.js","sources":["../../src/components/json-schema-form-cards-array.tsx"],"sourcesContent":["import {\n duplicateIndex,\n moveItem,\n removeIndex,\n setIndex,\n} from \"../lib/collections\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"../data/Icon\";\nimport { UiAdd } from \"../icons\";\nimport { Button } from \"./button\";\nimport { ItemActions } from \"./ItemActions\";\nimport { appendInstancePath } from \"./json-schema-form-errors\";\nimport {\n addItemLabel,\n emptyItemsCopy,\n itemActionsAllow,\n itemSummaryFor,\n resolveItemSpec,\n} from \"./json-schema-form-item-summary\";\nimport { ItemBadge, RequiredMark } from \"./json-schema-form-item-row\";\nimport { inputSizeClass } from \"./json-schema-form-size\";\nimport { TONE_EDGE_CLASS } from \"./json-schema-form-tone\";\nimport {\n canAddItem,\n canRemoveItem,\n seedFromSchema,\n} from \"./json-schema-form-utils\";\nimport type { FieldControl, RenderContext } from \"./json-schema-form-types\";\n\n// CardsArray renders an object-item array as a stack of titled cards: every\n// item stays open, but each one is headed by what it actually is rather than\n// \"Item 3\", and carries the item type's hue on its left edge so a long stack is\n// scannable at a glance.\n//\n// It is the everything-visible counterpart to AccordionArray. Both read the\n// same `x-item` summary, so a consumer switches between them by changing\n// `x-array-display` alone — no second vocabulary to learn.\nexport function CardsArray({\n field,\n ctx,\n readOnly,\n}: {\n field: FieldControl;\n ctx: RenderContext;\n readOnly: boolean;\n}) {\n const items = Array.isArray(field.value) ? field.value : [];\n const itemSchema = field.itemSchema ?? { type: \"object\" };\n const spec = field.itemSpec ?? resolveItemSpec(field.schema, itemSchema);\n const emptyCopy = emptyItemsCopy(spec, field.schema);\n // The array's help mode governs its whole subtree, exactly as it does for the\n // accordion: a card whose fields each carry a permanent two-line paragraph is\n // back to the height the card layout exists to reclaim.\n const childCtx: RenderContext = {\n ...ctx,\n readOnly,\n depth: ctx.depth + 1,\n ...(field.helpDisplay\n ? { layout: { ...ctx.layout, help: field.helpDisplay } }\n : {}),\n };\n\n function commit(next: unknown[]) {\n field.onChange(next);\n }\n\n return (\n <div className=\"flex flex-col gap-2\">\n {items.map((item, i) => {\n const summary =\n field.itemSummary?.({ item, index: i }) ??\n itemSummaryFor({ item, index: i, spec, itemSchema });\n return (\n <article\n key={i}\n className={cn(\n \"group rounded-lg border-l-4 border-border\",\n ctx.presentation ? \"bg-muted/20\" : \"border shadow-sm\",\n summary.glyph ? TONE_EDGE_CLASS[summary.glyph.tone] : undefined,\n )}\n >\n <header\n className={cn(\n \"flex flex-wrap items-center gap-2 rounded-tr-md border-b border-border bg-muted/40\",\n ctx.presentation ? \"px-2 py-1\" : \"px-3 py-2\",\n )}\n >\n <span className=\"w-5 shrink-0 text-center font-mono text-xs text-muted-foreground\">\n {i + 1}\n </span>\n <span className=\"shrink-0 text-sm font-semibold\">\n {summary.title}\n </span>\n <ItemBadge badge={summary.badge} />\n {summary.flagged && <RequiredMark />}\n {summary.summary && (\n <code className=\"truncate font-mono text-xs text-muted-foreground\">\n {summary.summary}\n </code>\n )}\n {!readOnly && (\n <ItemActions\n label={summary.title}\n index={i}\n count={items.length}\n size={ctx.size}\n {...(itemActionsAllow(spec, \"reorder\")\n ? { onMove: (to: number) => commit(moveItem(items, i, to)) }\n : {})}\n {...(itemActionsAllow(spec, \"duplicate\")\n ? { onDuplicate: () => commit(duplicateIndex(items, i)) }\n : {})}\n {...(itemActionsAllow(spec, \"remove\") &&\n canRemoveItem(field, items.length)\n ? { onRemove: () => commit(removeIndex(items, i)) }\n : {})}\n />\n )}\n </header>\n <div className={ctx.presentation ? \"p-2\" : \"p-3\"}>\n {/* Recurse through the shared pipeline so consumer pre/post\n extensions still apply to the item and its properties — and so\n the item's own x-columns reaches its ObjectControl. */}\n {ctx.render.renderFieldNodes(\n {\n key: `${field.key}[${i}]`,\n prop: itemSchema,\n required: false,\n value: item,\n onChange: (next) => commit(setIndex(items, i, next)),\n instancePath: appendInstancePath(ctx.instancePath, i),\n },\n childCtx,\n )?.value ?? null}\n </div>\n </article>\n );\n })}\n {items.length === 0 && emptyCopy && (\n <p className=\"text-xs leading-snug text-muted-foreground\">\n {emptyCopy}\n </p>\n )}\n {!readOnly && canAddItem(field, items.length) && (\n <Button\n type=\"button\"\n variant=\"outline\"\n className={cn(\"gap-1.5 self-start\", inputSizeClass[ctx.size])}\n onClick={() => commit([...items, seedFromSchema(itemSchema)])}\n >\n <Icon icon={UiAdd} className=\"text-sm\" />\n {addItemLabel(spec)}\n </Button>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { JsonSchemaObject } from './json-schema-form-types';
2
+ export declare const collectionLayoutsSchema: JsonSchemaObject;
3
+ export declare const collectionLayoutsValue: {
4
+ table: {
5
+ name: string;
6
+ environment: string;
7
+ endpoint: string;
8
+ tags: string[];
9
+ }[];
10
+ accordion: {
11
+ name: string;
12
+ environment: string;
13
+ endpoint: string;
14
+ tags: string[];
15
+ }[];
16
+ cards: {
17
+ name: string;
18
+ environment: string;
19
+ endpoint: string;
20
+ tags: string[];
21
+ }[];
22
+ stacked: {
23
+ name: string;
24
+ environment: string;
25
+ endpoint: string;
26
+ tags: string[];
27
+ }[];
28
+ list: string[];
29
+ map: {
30
+ owner: string;
31
+ region: string;
32
+ };
33
+ endpoints: {
34
+ primary: {
35
+ host: string;
36
+ port: number;
37
+ };
38
+ secondary: {
39
+ host: string;
40
+ port: number;
41
+ };
42
+ };
43
+ };
44
+ //# sourceMappingURL=json-schema-form-collection-layouts.fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema-form-collection-layouts.fixtures.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-collection-layouts.fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAEjB,MAAM,0BAA0B,CAAC;AA8BlC,eAAO,MAAM,uBAAuB,EAAE,gBA+CrC,CAAC;AAiBF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWlC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { ReactNode } from '../../../../node_modules/@types/react/index.d.ts';
1
+ import { ReactNode } from 'react';
2
2
  import { JsonSchemaObject, RenderContext } from './json-schema-form-types';
3
3
  export declare function DiscriminatedForm({ schema, value, onChange, ctx, discKey, }: {
4
4
  schema: JsonSchemaObject;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsonSchemaFormResolve = require("./json-schema-form-resolve.cjs");
4
4
  const collections = require("../lib/collections.cjs");
5
5
  const jsonSchemaFormUtils = require("./json-schema-form-utils.cjs");
6
+ const jsonSchemaFormFilter = require("./json-schema-form-filter.cjs");
6
7
  function appendInstancePath(base, token) {
7
8
  const escaped = String(token).replaceAll("~", "~0").replaceAll("/", "~1");
8
9
  return `${base}/${escaped}`;
@@ -21,6 +22,7 @@ function unmatchedFormErrors({
21
22
  errors,
22
23
  hiddenKeys,
23
24
  hideReadOnlyFields,
25
+ hideEmpty,
24
26
  fieldFilter,
25
27
  pre
26
28
  }) {
@@ -28,6 +30,7 @@ function unmatchedFormErrors({
28
30
  collectObjectPaths(schema, value, "", rendered, {
29
31
  hiddenKeys: new Set(hiddenKeys ?? []),
30
32
  hideReadOnlyFields,
33
+ hideEmpty,
31
34
  pre,
32
35
  rootValue: value,
33
36
  root: true,
@@ -41,7 +44,7 @@ function collectObjectPaths(schema, value, basePath, paths, options) {
41
44
  const pickerPhase = discriminator != null && (value[discriminator] == null || value[discriminator] === "");
42
45
  for (const [key, prop] of Object.entries(properties)) {
43
46
  if (options.root && options.hiddenKeys.has(key)) continue;
44
- if (options.root && options.fieldFilter && !jsonSchemaFormUtils.matchesFieldFilter(key, prop, options.fieldFilter)) {
47
+ if (options.root && options.fieldFilter && !jsonSchemaFormFilter.matchesFieldFilter({ key, prop, filter: options.fieldFilter, value: value[key] })) {
45
48
  continue;
46
49
  }
47
50
  if (discriminator && (pickerPhase ? key !== discriminator : key === discriminator)) {
@@ -62,6 +65,7 @@ function collectObjectPaths(schema, value, basePath, paths, options) {
62
65
  options.pre
63
66
  );
64
67
  if (!field || options.hideReadOnlyFields && field.readOnly) continue;
68
+ if (options.hideEmpty && jsonSchemaFormUtils.isEmptyValue(field.value)) continue;
65
69
  const path = appendInstancePath(basePath, key);
66
70
  paths.add(path);
67
71
  collectControlPaths(field, path, paths, { ...options, root: false });
@@ -1 +1 @@
1
- {"version":3,"file":"json-schema-form-errors.cjs","sources":["../../src/components/json-schema-form-errors.ts"],"sourcesContent":["import {\n effectiveProperties,\n resolveControl,\n scalarItemsType,\n} from \"./json-schema-form-resolve\";\nimport { isPlainObject } from \"../lib/collections\";\nimport { matchesFieldFilter } from \"./json-schema-form-utils\";\nimport type { JsonSchemaFormError } from \"./json-schema-form-error-types\";\nimport type {\n FieldControl,\n JsonSchemaObject,\n JsonSchemaProperty,\n PreExtension,\n} from \"./json-schema-form-types\";\n\nexport function appendInstancePath(\n base: string,\n token: string | number\n): string {\n const escaped = String(token).replaceAll(\"~\", \"~0\").replaceAll(\"/\", \"~1\");\n return `${base}/${escaped}`;\n}\n\n// How many errors sit at or below a subtree. A collapsed container (an\n// accordion row) renders none of the controls that would show them, so it\n// reports the count on its own header instead.\nexport function errorCountUnderInstancePath(\n errors: JsonSchemaFormError[],\n instancePath: string\n): number {\n return errors.filter(\n (error) =>\n error.instancePath === instancePath ||\n error.instancePath.startsWith(`${instancePath}/`)\n ).length;\n}\n\nexport function errorsAtInstancePath(\n errors: JsonSchemaFormError[],\n instancePath: string\n): JsonSchemaFormError[] {\n return errors.filter((error) => error.instancePath === instancePath);\n}\n\nexport function unmatchedFormErrors({\n schema,\n value,\n errors,\n hiddenKeys,\n hideReadOnlyFields,\n fieldFilter,\n pre,\n}: {\n schema: JsonSchemaObject;\n value: Record<string, unknown>;\n errors: JsonSchemaFormError[];\n hiddenKeys?: string[];\n hideReadOnlyFields: boolean;\n fieldFilter?: string;\n pre: PreExtension[];\n}): JsonSchemaFormError[] {\n const rendered = new Set<string>();\n collectObjectPaths(schema, value, \"\", rendered, {\n hiddenKeys: new Set(hiddenKeys ?? []),\n hideReadOnlyFields,\n pre,\n rootValue: value,\n root: true,\n ...(fieldFilter ? { fieldFilter } : {}),\n });\n return errors.filter((error) => !rendered.has(error.instancePath));\n}\n\ninterface CollectOptions {\n hiddenKeys: Set<string>;\n hideReadOnlyFields: boolean;\n fieldFilter?: string;\n pre: PreExtension[];\n rootValue: Record<string, unknown>;\n root: boolean;\n}\n\nfunction collectObjectPaths(\n schema: JsonSchemaObject,\n value: Record<string, unknown>,\n basePath: string,\n paths: Set<string>,\n options: CollectOptions\n) {\n const { properties, required } = effectiveProperties(schema, value);\n const discriminator =\n options.root && typeof schema[\"x-discriminator\"] === \"string\"\n ? schema[\"x-discriminator\"]\n : undefined;\n const pickerPhase =\n discriminator != null &&\n (value[discriminator] == null || value[discriminator] === \"\");\n\n for (const [key, prop] of Object.entries(properties)) {\n if (options.root && options.hiddenKeys.has(key)) continue;\n if (\n options.root &&\n options.fieldFilter &&\n !matchesFieldFilter(key, prop, options.fieldFilter)\n ) {\n continue;\n }\n if (\n discriminator &&\n (pickerPhase ? key !== discriminator : key === discriminator)\n ) {\n continue;\n }\n\n const field = applyPreExtensions(\n resolveControl({\n key,\n prop,\n required: required.includes(key),\n value: value[key],\n onChange: () => {},\n }),\n prop,\n value[key],\n options.rootValue,\n options.pre\n );\n if (!field || (options.hideReadOnlyFields && field.readOnly)) continue;\n\n const path = appendInstancePath(basePath, key);\n paths.add(path);\n collectControlPaths(field, path, paths, { ...options, root: false });\n }\n}\n\nfunction applyPreExtensions(\n initial: FieldControl,\n prop: JsonSchemaProperty,\n value: unknown,\n rootValue: Record<string, unknown>,\n extensions: PreExtension[]\n): FieldControl | null {\n let field: FieldControl | null = initial;\n for (const extension of extensions) {\n if (!field) return null;\n field = extension(field, {\n key: field.key,\n prop,\n value,\n rootValue,\n });\n }\n return field;\n}\n\nfunction collectControlPaths(\n field: FieldControl,\n instancePath: string,\n paths: Set<string>,\n options: CollectOptions\n) {\n if (field.kind === \"object\") {\n collectObjectPaths(\n field.schema as JsonSchemaObject,\n isPlainObject(field.value) ? field.value : {},\n instancePath,\n paths,\n options\n );\n return;\n }\n if (field.kind === \"array\") {\n collectArrayPaths(field, instancePath, paths, options);\n return;\n }\n if (field.kind === \"string-map\") {\n collectMapPaths(field, instancePath, paths, options);\n }\n}\n\nfunction collectArrayPaths(\n field: FieldControl,\n instancePath: string,\n paths: Set<string>,\n options: CollectOptions\n) {\n // Mirrors ArrayControl's branch order: a flat list of values (pills, choices\n // or scalars) is ONE control, with no per-item field to hang a message on, so\n // its item paths stay unmatched and the error surfaces in the form summary\n // instead of pointing at nothing.\n if (field.arrayDisplay === \"filter-pills\") return;\n if (\n field.arrayDisplay !== \"stacked\" &&\n (hasEnumItems(field) || scalarItemsType(field.itemSchema))\n ) {\n return;\n }\n\n const itemSchema = field.itemSchema ?? { type: \"string\" };\n const table =\n field.layout === \"table\" &&\n itemSchema.properties != null &&\n Object.keys(itemSchema.properties).length > 0;\n for (const [index, item] of (Array.isArray(field.value)\n ? field.value\n : []\n ).entries()) {\n const itemPath = appendInstancePath(instancePath, index);\n if (table) {\n collectObjectPaths(\n itemSchema as JsonSchemaObject,\n isPlainObject(item) ? item : {},\n itemPath,\n paths,\n options\n );\n continue;\n }\n paths.add(itemPath);\n collectControlPaths(\n resolveControl({\n key: `${field.key}[${index}]`,\n prop: itemSchema,\n required: false,\n value: item,\n onChange: () => {},\n }),\n itemPath,\n paths,\n options\n );\n }\n}\n\n// Mirrors ArrayControl's tags branch: resolved options win over the raw item\n// enum, since a pre-extension may have supplied them.\nfunction hasEnumItems(field: FieldControl): boolean {\n if (field.options && field.options.length > 0) return true;\n return Array.isArray(field.itemSchema?.enum) && field.itemSchema.enum.length > 0;\n}\n\nfunction collectMapPaths(\n field: FieldControl,\n instancePath: string,\n paths: Set<string>,\n options: CollectOptions\n) {\n const value = isPlainObject(field.value) ? field.value : {};\n const known = field.knownProperties ?? {};\n const keys = [\n ...Object.keys(known),\n ...Object.keys(value).filter((key) => !(key in known)),\n ];\n for (const key of keys) {\n const schema = known[key] ?? mapValueSchema(field, key);\n const path = appendInstancePath(instancePath, key);\n paths.add(path);\n collectControlPaths(\n resolveControl({\n key,\n prop: schema,\n required: false,\n value: value[key],\n onChange: () => {},\n }),\n path,\n paths,\n options\n );\n }\n}\n\nfunction mapValueSchema(field: FieldControl, key: string): JsonSchemaProperty {\n for (const entry of field.valuePatternSchemas ?? []) {\n try {\n if (new RegExp(entry.pattern).test(key)) return entry.schema;\n } catch {\n continue;\n }\n }\n return field.valueSchema ?? { type: \"string\" };\n}\n"],"names":["effectiveProperties","matchesFieldFilter","resolveControl","isPlainObject","scalarItemsType"],"mappings":"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"}
1
+ {"version":3,"file":"json-schema-form-errors.cjs","sources":["../../src/components/json-schema-form-errors.ts"],"sourcesContent":["import {\n effectiveProperties,\n resolveControl,\n scalarItemsType,\n} from \"./json-schema-form-resolve\";\nimport { isPlainObject } from \"../lib/collections\";\nimport { isEmptyValue } from \"./json-schema-form-utils\";\nimport { matchesFieldFilter } from \"./json-schema-form-filter\";\nimport type { JsonSchemaFormError } from \"./json-schema-form-error-types\";\nimport type {\n FieldControl,\n JsonSchemaObject,\n JsonSchemaProperty,\n PreExtension,\n} from \"./json-schema-form-types\";\n\nexport function appendInstancePath(\n base: string,\n token: string | number\n): string {\n const escaped = String(token).replaceAll(\"~\", \"~0\").replaceAll(\"/\", \"~1\");\n return `${base}/${escaped}`;\n}\n\n// How many errors sit at or below a subtree. A collapsed container (an\n// accordion row) renders none of the controls that would show them, so it\n// reports the count on its own header instead.\nexport function errorCountUnderInstancePath(\n errors: JsonSchemaFormError[],\n instancePath: string\n): number {\n return errors.filter(\n (error) =>\n error.instancePath === instancePath ||\n error.instancePath.startsWith(`${instancePath}/`)\n ).length;\n}\n\nexport function errorsAtInstancePath(\n errors: JsonSchemaFormError[],\n instancePath: string\n): JsonSchemaFormError[] {\n return errors.filter((error) => error.instancePath === instancePath);\n}\n\nexport function unmatchedFormErrors({\n schema,\n value,\n errors,\n hiddenKeys,\n hideReadOnlyFields,\n hideEmpty,\n fieldFilter,\n pre,\n}: {\n schema: JsonSchemaObject;\n value: Record<string, unknown>;\n errors: JsonSchemaFormError[];\n hiddenKeys?: string[];\n hideReadOnlyFields: boolean;\n hideEmpty: boolean;\n fieldFilter?: string;\n pre: PreExtension[];\n}): JsonSchemaFormError[] {\n const rendered = new Set<string>();\n collectObjectPaths(schema, value, \"\", rendered, {\n hiddenKeys: new Set(hiddenKeys ?? []),\n hideReadOnlyFields,\n hideEmpty,\n pre,\n rootValue: value,\n root: true,\n ...(fieldFilter ? { fieldFilter } : {}),\n });\n return errors.filter((error) => !rendered.has(error.instancePath));\n}\n\ninterface CollectOptions {\n hiddenKeys: Set<string>;\n hideReadOnlyFields: boolean;\n hideEmpty: boolean;\n fieldFilter?: string;\n pre: PreExtension[];\n rootValue: Record<string, unknown>;\n root: boolean;\n}\n\nfunction collectObjectPaths(\n schema: JsonSchemaObject,\n value: Record<string, unknown>,\n basePath: string,\n paths: Set<string>,\n options: CollectOptions\n) {\n const { properties, required } = effectiveProperties(schema, value);\n const discriminator =\n options.root && typeof schema[\"x-discriminator\"] === \"string\"\n ? schema[\"x-discriminator\"]\n : undefined;\n const pickerPhase =\n discriminator != null &&\n (value[discriminator] == null || value[discriminator] === \"\");\n\n for (const [key, prop] of Object.entries(properties)) {\n if (options.root && options.hiddenKeys.has(key)) continue;\n if (\n options.root &&\n options.fieldFilter &&\n !matchesFieldFilter({ key, prop, filter: options.fieldFilter, value: value[key] })\n ) {\n continue;\n }\n if (\n discriminator &&\n (pickerPhase ? key !== discriminator : key === discriminator)\n ) {\n continue;\n }\n\n const field = applyPreExtensions(\n resolveControl({\n key,\n prop,\n required: required.includes(key),\n value: value[key],\n onChange: () => {},\n }),\n prop,\n value[key],\n options.rootValue,\n options.pre\n );\n if (!field || (options.hideReadOnlyFields && field.readOnly)) continue;\n // A field the form drops is not a place an error can be shown, so its error\n // has to surface as unmatched rather than vanish with the field.\n if (options.hideEmpty && isEmptyValue(field.value)) continue;\n\n const path = appendInstancePath(basePath, key);\n paths.add(path);\n collectControlPaths(field, path, paths, { ...options, root: false });\n }\n}\n\nfunction applyPreExtensions(\n initial: FieldControl,\n prop: JsonSchemaProperty,\n value: unknown,\n rootValue: Record<string, unknown>,\n extensions: PreExtension[]\n): FieldControl | null {\n let field: FieldControl | null = initial;\n for (const extension of extensions) {\n if (!field) return null;\n field = extension(field, {\n key: field.key,\n prop,\n value,\n rootValue,\n });\n }\n return field;\n}\n\nfunction collectControlPaths(\n field: FieldControl,\n instancePath: string,\n paths: Set<string>,\n options: CollectOptions\n) {\n if (field.kind === \"object\") {\n collectObjectPaths(\n field.schema as JsonSchemaObject,\n isPlainObject(field.value) ? field.value : {},\n instancePath,\n paths,\n options\n );\n return;\n }\n if (field.kind === \"array\") {\n collectArrayPaths(field, instancePath, paths, options);\n return;\n }\n if (field.kind === \"string-map\") {\n collectMapPaths(field, instancePath, paths, options);\n }\n}\n\nfunction collectArrayPaths(\n field: FieldControl,\n instancePath: string,\n paths: Set<string>,\n options: CollectOptions\n) {\n // Mirrors ArrayControl's branch order: a flat list of values (pills, choices\n // or scalars) is ONE control, with no per-item field to hang a message on, so\n // its item paths stay unmatched and the error surfaces in the form summary\n // instead of pointing at nothing.\n if (field.arrayDisplay === \"filter-pills\") return;\n if (\n field.arrayDisplay !== \"stacked\" &&\n (hasEnumItems(field) || scalarItemsType(field.itemSchema))\n ) {\n return;\n }\n\n const itemSchema = field.itemSchema ?? { type: \"string\" };\n const table =\n field.layout === \"table\" &&\n itemSchema.properties != null &&\n Object.keys(itemSchema.properties).length > 0;\n for (const [index, item] of (Array.isArray(field.value)\n ? field.value\n : []\n ).entries()) {\n const itemPath = appendInstancePath(instancePath, index);\n if (table) {\n collectObjectPaths(\n itemSchema as JsonSchemaObject,\n isPlainObject(item) ? item : {},\n itemPath,\n paths,\n options\n );\n continue;\n }\n paths.add(itemPath);\n collectControlPaths(\n resolveControl({\n key: `${field.key}[${index}]`,\n prop: itemSchema,\n required: false,\n value: item,\n onChange: () => {},\n }),\n itemPath,\n paths,\n options\n );\n }\n}\n\n// Mirrors ArrayControl's tags branch: resolved options win over the raw item\n// enum, since a pre-extension may have supplied them.\nfunction hasEnumItems(field: FieldControl): boolean {\n if (field.options && field.options.length > 0) return true;\n return Array.isArray(field.itemSchema?.enum) && field.itemSchema.enum.length > 0;\n}\n\nfunction collectMapPaths(\n field: FieldControl,\n instancePath: string,\n paths: Set<string>,\n options: CollectOptions\n) {\n const value = isPlainObject(field.value) ? field.value : {};\n const known = field.knownProperties ?? {};\n const keys = [\n ...Object.keys(known),\n ...Object.keys(value).filter((key) => !(key in known)),\n ];\n for (const key of keys) {\n const schema = known[key] ?? mapValueSchema(field, key);\n const path = appendInstancePath(instancePath, key);\n paths.add(path);\n collectControlPaths(\n resolveControl({\n key,\n prop: schema,\n required: false,\n value: value[key],\n onChange: () => {},\n }),\n path,\n paths,\n options\n );\n }\n}\n\nfunction mapValueSchema(field: FieldControl, key: string): JsonSchemaProperty {\n for (const entry of field.valuePatternSchemas ?? []) {\n try {\n if (new RegExp(entry.pattern).test(key)) return entry.schema;\n } catch {\n continue;\n }\n }\n return field.valueSchema ?? { type: \"string\" };\n}\n"],"names":["effectiveProperties","matchesFieldFilter","resolveControl","isEmptyValue","isPlainObject","scalarItemsType"],"mappings":"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"}
@@ -3,12 +3,13 @@ import { JsonSchemaObject, PreExtension } from './json-schema-form-types';
3
3
  export declare function appendInstancePath(base: string, token: string | number): string;
4
4
  export declare function errorCountUnderInstancePath(errors: JsonSchemaFormError[], instancePath: string): number;
5
5
  export declare function errorsAtInstancePath(errors: JsonSchemaFormError[], instancePath: string): JsonSchemaFormError[];
6
- export declare function unmatchedFormErrors({ schema, value, errors, hiddenKeys, hideReadOnlyFields, fieldFilter, pre, }: {
6
+ export declare function unmatchedFormErrors({ schema, value, errors, hiddenKeys, hideReadOnlyFields, hideEmpty, fieldFilter, pre, }: {
7
7
  schema: JsonSchemaObject;
8
8
  value: Record<string, unknown>;
9
9
  errors: JsonSchemaFormError[];
10
10
  hiddenKeys?: string[];
11
11
  hideReadOnlyFields: boolean;
12
+ hideEmpty: boolean;
12
13
  fieldFilter?: string;
13
14
  pre: PreExtension[];
14
15
  }): JsonSchemaFormError[];
@@ -1 +1 @@
1
- {"version":3,"file":"json-schema-form-errors.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-errors.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,KAAK,EAEV,gBAAgB,EAEhB,YAAY,EACb,MAAM,0BAA0B,CAAC;AAElC,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,MAAM,GACrB,MAAM,CAGR;AAKD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,mBAAmB,EAAE,EAC7B,YAAY,EAAE,MAAM,GACnB,MAAM,CAMR;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,mBAAmB,EAAE,EAC7B,YAAY,EAAE,MAAM,GACnB,mBAAmB,EAAE,CAEvB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,KAAK,EACL,MAAM,EACN,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,GAAG,GACJ,EAAE;IACD,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,YAAY,EAAE,CAAC;CACrB,GAAG,mBAAmB,EAAE,CAWxB"}
1
+ {"version":3,"file":"json-schema-form-errors.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-errors.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,KAAK,EAEV,gBAAgB,EAEhB,YAAY,EACb,MAAM,0BAA0B,CAAC;AAElC,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,MAAM,GACrB,MAAM,CAGR;AAKD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,mBAAmB,EAAE,EAC7B,YAAY,EAAE,MAAM,GACnB,MAAM,CAMR;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,mBAAmB,EAAE,EAC7B,YAAY,EAAE,MAAM,GACnB,mBAAmB,EAAE,CAEvB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,KAAK,EACL,MAAM,EACN,UAAU,EACV,kBAAkB,EAClB,SAAS,EACT,WAAW,EACX,GAAG,GACJ,EAAE;IACD,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,YAAY,EAAE,CAAC;CACrB,GAAG,mBAAmB,EAAE,CAYxB"}
@@ -1,6 +1,7 @@
1
1
  import { effectiveProperties, resolveControl, scalarItemsType } from "./json-schema-form-resolve.js";
2
2
  import { isPlainObject } from "../lib/collections.js";
3
- import { matchesFieldFilter } from "./json-schema-form-utils.js";
3
+ import { isEmptyValue } from "./json-schema-form-utils.js";
4
+ import { matchesFieldFilter } from "./json-schema-form-filter.js";
4
5
  function appendInstancePath(base, token) {
5
6
  const escaped = String(token).replaceAll("~", "~0").replaceAll("/", "~1");
6
7
  return `${base}/${escaped}`;
@@ -19,6 +20,7 @@ function unmatchedFormErrors({
19
20
  errors,
20
21
  hiddenKeys,
21
22
  hideReadOnlyFields,
23
+ hideEmpty,
22
24
  fieldFilter,
23
25
  pre
24
26
  }) {
@@ -26,6 +28,7 @@ function unmatchedFormErrors({
26
28
  collectObjectPaths(schema, value, "", rendered, {
27
29
  hiddenKeys: new Set(hiddenKeys ?? []),
28
30
  hideReadOnlyFields,
31
+ hideEmpty,
29
32
  pre,
30
33
  rootValue: value,
31
34
  root: true,
@@ -39,7 +42,7 @@ function collectObjectPaths(schema, value, basePath, paths, options) {
39
42
  const pickerPhase = discriminator != null && (value[discriminator] == null || value[discriminator] === "");
40
43
  for (const [key, prop] of Object.entries(properties)) {
41
44
  if (options.root && options.hiddenKeys.has(key)) continue;
42
- if (options.root && options.fieldFilter && !matchesFieldFilter(key, prop, options.fieldFilter)) {
45
+ if (options.root && options.fieldFilter && !matchesFieldFilter({ key, prop, filter: options.fieldFilter, value: value[key] })) {
43
46
  continue;
44
47
  }
45
48
  if (discriminator && (pickerPhase ? key !== discriminator : key === discriminator)) {
@@ -60,6 +63,7 @@ function collectObjectPaths(schema, value, basePath, paths, options) {
60
63
  options.pre
61
64
  );
62
65
  if (!field || options.hideReadOnlyFields && field.readOnly) continue;
66
+ if (options.hideEmpty && isEmptyValue(field.value)) continue;
63
67
  const path = appendInstancePath(basePath, key);
64
68
  paths.add(path);
65
69
  collectControlPaths(field, path, paths, { ...options, root: false });
@@ -1 +1 @@
1
- {"version":3,"file":"json-schema-form-errors.js","sources":["../../src/components/json-schema-form-errors.ts"],"sourcesContent":["import {\n effectiveProperties,\n resolveControl,\n scalarItemsType,\n} from \"./json-schema-form-resolve\";\nimport { isPlainObject } from \"../lib/collections\";\nimport { matchesFieldFilter } from \"./json-schema-form-utils\";\nimport type { JsonSchemaFormError } from \"./json-schema-form-error-types\";\nimport type {\n FieldControl,\n JsonSchemaObject,\n JsonSchemaProperty,\n PreExtension,\n} from \"./json-schema-form-types\";\n\nexport function appendInstancePath(\n base: string,\n token: string | number\n): string {\n const escaped = String(token).replaceAll(\"~\", \"~0\").replaceAll(\"/\", \"~1\");\n return `${base}/${escaped}`;\n}\n\n// How many errors sit at or below a subtree. A collapsed container (an\n// accordion row) renders none of the controls that would show them, so it\n// reports the count on its own header instead.\nexport function errorCountUnderInstancePath(\n errors: JsonSchemaFormError[],\n instancePath: string\n): number {\n return errors.filter(\n (error) =>\n error.instancePath === instancePath ||\n error.instancePath.startsWith(`${instancePath}/`)\n ).length;\n}\n\nexport function errorsAtInstancePath(\n errors: JsonSchemaFormError[],\n instancePath: string\n): JsonSchemaFormError[] {\n return errors.filter((error) => error.instancePath === instancePath);\n}\n\nexport function unmatchedFormErrors({\n schema,\n value,\n errors,\n hiddenKeys,\n hideReadOnlyFields,\n fieldFilter,\n pre,\n}: {\n schema: JsonSchemaObject;\n value: Record<string, unknown>;\n errors: JsonSchemaFormError[];\n hiddenKeys?: string[];\n hideReadOnlyFields: boolean;\n fieldFilter?: string;\n pre: PreExtension[];\n}): JsonSchemaFormError[] {\n const rendered = new Set<string>();\n collectObjectPaths(schema, value, \"\", rendered, {\n hiddenKeys: new Set(hiddenKeys ?? []),\n hideReadOnlyFields,\n pre,\n rootValue: value,\n root: true,\n ...(fieldFilter ? { fieldFilter } : {}),\n });\n return errors.filter((error) => !rendered.has(error.instancePath));\n}\n\ninterface CollectOptions {\n hiddenKeys: Set<string>;\n hideReadOnlyFields: boolean;\n fieldFilter?: string;\n pre: PreExtension[];\n rootValue: Record<string, unknown>;\n root: boolean;\n}\n\nfunction collectObjectPaths(\n schema: JsonSchemaObject,\n value: Record<string, unknown>,\n basePath: string,\n paths: Set<string>,\n options: CollectOptions\n) {\n const { properties, required } = effectiveProperties(schema, value);\n const discriminator =\n options.root && typeof schema[\"x-discriminator\"] === \"string\"\n ? schema[\"x-discriminator\"]\n : undefined;\n const pickerPhase =\n discriminator != null &&\n (value[discriminator] == null || value[discriminator] === \"\");\n\n for (const [key, prop] of Object.entries(properties)) {\n if (options.root && options.hiddenKeys.has(key)) continue;\n if (\n options.root &&\n options.fieldFilter &&\n !matchesFieldFilter(key, prop, options.fieldFilter)\n ) {\n continue;\n }\n if (\n discriminator &&\n (pickerPhase ? key !== discriminator : key === discriminator)\n ) {\n continue;\n }\n\n const field = applyPreExtensions(\n resolveControl({\n key,\n prop,\n required: required.includes(key),\n value: value[key],\n onChange: () => {},\n }),\n prop,\n value[key],\n options.rootValue,\n options.pre\n );\n if (!field || (options.hideReadOnlyFields && field.readOnly)) continue;\n\n const path = appendInstancePath(basePath, key);\n paths.add(path);\n collectControlPaths(field, path, paths, { ...options, root: false });\n }\n}\n\nfunction applyPreExtensions(\n initial: FieldControl,\n prop: JsonSchemaProperty,\n value: unknown,\n rootValue: Record<string, unknown>,\n extensions: PreExtension[]\n): FieldControl | null {\n let field: FieldControl | null = initial;\n for (const extension of extensions) {\n if (!field) return null;\n field = extension(field, {\n key: field.key,\n prop,\n value,\n rootValue,\n });\n }\n return field;\n}\n\nfunction collectControlPaths(\n field: FieldControl,\n instancePath: string,\n paths: Set<string>,\n options: CollectOptions\n) {\n if (field.kind === \"object\") {\n collectObjectPaths(\n field.schema as JsonSchemaObject,\n isPlainObject(field.value) ? field.value : {},\n instancePath,\n paths,\n options\n );\n return;\n }\n if (field.kind === \"array\") {\n collectArrayPaths(field, instancePath, paths, options);\n return;\n }\n if (field.kind === \"string-map\") {\n collectMapPaths(field, instancePath, paths, options);\n }\n}\n\nfunction collectArrayPaths(\n field: FieldControl,\n instancePath: string,\n paths: Set<string>,\n options: CollectOptions\n) {\n // Mirrors ArrayControl's branch order: a flat list of values (pills, choices\n // or scalars) is ONE control, with no per-item field to hang a message on, so\n // its item paths stay unmatched and the error surfaces in the form summary\n // instead of pointing at nothing.\n if (field.arrayDisplay === \"filter-pills\") return;\n if (\n field.arrayDisplay !== \"stacked\" &&\n (hasEnumItems(field) || scalarItemsType(field.itemSchema))\n ) {\n return;\n }\n\n const itemSchema = field.itemSchema ?? { type: \"string\" };\n const table =\n field.layout === \"table\" &&\n itemSchema.properties != null &&\n Object.keys(itemSchema.properties).length > 0;\n for (const [index, item] of (Array.isArray(field.value)\n ? field.value\n : []\n ).entries()) {\n const itemPath = appendInstancePath(instancePath, index);\n if (table) {\n collectObjectPaths(\n itemSchema as JsonSchemaObject,\n isPlainObject(item) ? item : {},\n itemPath,\n paths,\n options\n );\n continue;\n }\n paths.add(itemPath);\n collectControlPaths(\n resolveControl({\n key: `${field.key}[${index}]`,\n prop: itemSchema,\n required: false,\n value: item,\n onChange: () => {},\n }),\n itemPath,\n paths,\n options\n );\n }\n}\n\n// Mirrors ArrayControl's tags branch: resolved options win over the raw item\n// enum, since a pre-extension may have supplied them.\nfunction hasEnumItems(field: FieldControl): boolean {\n if (field.options && field.options.length > 0) return true;\n return Array.isArray(field.itemSchema?.enum) && field.itemSchema.enum.length > 0;\n}\n\nfunction collectMapPaths(\n field: FieldControl,\n instancePath: string,\n paths: Set<string>,\n options: CollectOptions\n) {\n const value = isPlainObject(field.value) ? field.value : {};\n const known = field.knownProperties ?? {};\n const keys = [\n ...Object.keys(known),\n ...Object.keys(value).filter((key) => !(key in known)),\n ];\n for (const key of keys) {\n const schema = known[key] ?? mapValueSchema(field, key);\n const path = appendInstancePath(instancePath, key);\n paths.add(path);\n collectControlPaths(\n resolveControl({\n key,\n prop: schema,\n required: false,\n value: value[key],\n onChange: () => {},\n }),\n path,\n paths,\n options\n );\n }\n}\n\nfunction mapValueSchema(field: FieldControl, key: string): JsonSchemaProperty {\n for (const entry of field.valuePatternSchemas ?? []) {\n try {\n if (new RegExp(entry.pattern).test(key)) return entry.schema;\n } catch {\n continue;\n }\n }\n return field.valueSchema ?? { type: \"string\" };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"json-schema-form-errors.js","sources":["../../src/components/json-schema-form-errors.ts"],"sourcesContent":["import {\n effectiveProperties,\n resolveControl,\n scalarItemsType,\n} from \"./json-schema-form-resolve\";\nimport { isPlainObject } from \"../lib/collections\";\nimport { isEmptyValue } from \"./json-schema-form-utils\";\nimport { matchesFieldFilter } from \"./json-schema-form-filter\";\nimport type { JsonSchemaFormError } from \"./json-schema-form-error-types\";\nimport type {\n FieldControl,\n JsonSchemaObject,\n JsonSchemaProperty,\n PreExtension,\n} from \"./json-schema-form-types\";\n\nexport function appendInstancePath(\n base: string,\n token: string | number\n): string {\n const escaped = String(token).replaceAll(\"~\", \"~0\").replaceAll(\"/\", \"~1\");\n return `${base}/${escaped}`;\n}\n\n// How many errors sit at or below a subtree. A collapsed container (an\n// accordion row) renders none of the controls that would show them, so it\n// reports the count on its own header instead.\nexport function errorCountUnderInstancePath(\n errors: JsonSchemaFormError[],\n instancePath: string\n): number {\n return errors.filter(\n (error) =>\n error.instancePath === instancePath ||\n error.instancePath.startsWith(`${instancePath}/`)\n ).length;\n}\n\nexport function errorsAtInstancePath(\n errors: JsonSchemaFormError[],\n instancePath: string\n): JsonSchemaFormError[] {\n return errors.filter((error) => error.instancePath === instancePath);\n}\n\nexport function unmatchedFormErrors({\n schema,\n value,\n errors,\n hiddenKeys,\n hideReadOnlyFields,\n hideEmpty,\n fieldFilter,\n pre,\n}: {\n schema: JsonSchemaObject;\n value: Record<string, unknown>;\n errors: JsonSchemaFormError[];\n hiddenKeys?: string[];\n hideReadOnlyFields: boolean;\n hideEmpty: boolean;\n fieldFilter?: string;\n pre: PreExtension[];\n}): JsonSchemaFormError[] {\n const rendered = new Set<string>();\n collectObjectPaths(schema, value, \"\", rendered, {\n hiddenKeys: new Set(hiddenKeys ?? []),\n hideReadOnlyFields,\n hideEmpty,\n pre,\n rootValue: value,\n root: true,\n ...(fieldFilter ? { fieldFilter } : {}),\n });\n return errors.filter((error) => !rendered.has(error.instancePath));\n}\n\ninterface CollectOptions {\n hiddenKeys: Set<string>;\n hideReadOnlyFields: boolean;\n hideEmpty: boolean;\n fieldFilter?: string;\n pre: PreExtension[];\n rootValue: Record<string, unknown>;\n root: boolean;\n}\n\nfunction collectObjectPaths(\n schema: JsonSchemaObject,\n value: Record<string, unknown>,\n basePath: string,\n paths: Set<string>,\n options: CollectOptions\n) {\n const { properties, required } = effectiveProperties(schema, value);\n const discriminator =\n options.root && typeof schema[\"x-discriminator\"] === \"string\"\n ? schema[\"x-discriminator\"]\n : undefined;\n const pickerPhase =\n discriminator != null &&\n (value[discriminator] == null || value[discriminator] === \"\");\n\n for (const [key, prop] of Object.entries(properties)) {\n if (options.root && options.hiddenKeys.has(key)) continue;\n if (\n options.root &&\n options.fieldFilter &&\n !matchesFieldFilter({ key, prop, filter: options.fieldFilter, value: value[key] })\n ) {\n continue;\n }\n if (\n discriminator &&\n (pickerPhase ? key !== discriminator : key === discriminator)\n ) {\n continue;\n }\n\n const field = applyPreExtensions(\n resolveControl({\n key,\n prop,\n required: required.includes(key),\n value: value[key],\n onChange: () => {},\n }),\n prop,\n value[key],\n options.rootValue,\n options.pre\n );\n if (!field || (options.hideReadOnlyFields && field.readOnly)) continue;\n // A field the form drops is not a place an error can be shown, so its error\n // has to surface as unmatched rather than vanish with the field.\n if (options.hideEmpty && isEmptyValue(field.value)) continue;\n\n const path = appendInstancePath(basePath, key);\n paths.add(path);\n collectControlPaths(field, path, paths, { ...options, root: false });\n }\n}\n\nfunction applyPreExtensions(\n initial: FieldControl,\n prop: JsonSchemaProperty,\n value: unknown,\n rootValue: Record<string, unknown>,\n extensions: PreExtension[]\n): FieldControl | null {\n let field: FieldControl | null = initial;\n for (const extension of extensions) {\n if (!field) return null;\n field = extension(field, {\n key: field.key,\n prop,\n value,\n rootValue,\n });\n }\n return field;\n}\n\nfunction collectControlPaths(\n field: FieldControl,\n instancePath: string,\n paths: Set<string>,\n options: CollectOptions\n) {\n if (field.kind === \"object\") {\n collectObjectPaths(\n field.schema as JsonSchemaObject,\n isPlainObject(field.value) ? field.value : {},\n instancePath,\n paths,\n options\n );\n return;\n }\n if (field.kind === \"array\") {\n collectArrayPaths(field, instancePath, paths, options);\n return;\n }\n if (field.kind === \"string-map\") {\n collectMapPaths(field, instancePath, paths, options);\n }\n}\n\nfunction collectArrayPaths(\n field: FieldControl,\n instancePath: string,\n paths: Set<string>,\n options: CollectOptions\n) {\n // Mirrors ArrayControl's branch order: a flat list of values (pills, choices\n // or scalars) is ONE control, with no per-item field to hang a message on, so\n // its item paths stay unmatched and the error surfaces in the form summary\n // instead of pointing at nothing.\n if (field.arrayDisplay === \"filter-pills\") return;\n if (\n field.arrayDisplay !== \"stacked\" &&\n (hasEnumItems(field) || scalarItemsType(field.itemSchema))\n ) {\n return;\n }\n\n const itemSchema = field.itemSchema ?? { type: \"string\" };\n const table =\n field.layout === \"table\" &&\n itemSchema.properties != null &&\n Object.keys(itemSchema.properties).length > 0;\n for (const [index, item] of (Array.isArray(field.value)\n ? field.value\n : []\n ).entries()) {\n const itemPath = appendInstancePath(instancePath, index);\n if (table) {\n collectObjectPaths(\n itemSchema as JsonSchemaObject,\n isPlainObject(item) ? item : {},\n itemPath,\n paths,\n options\n );\n continue;\n }\n paths.add(itemPath);\n collectControlPaths(\n resolveControl({\n key: `${field.key}[${index}]`,\n prop: itemSchema,\n required: false,\n value: item,\n onChange: () => {},\n }),\n itemPath,\n paths,\n options\n );\n }\n}\n\n// Mirrors ArrayControl's tags branch: resolved options win over the raw item\n// enum, since a pre-extension may have supplied them.\nfunction hasEnumItems(field: FieldControl): boolean {\n if (field.options && field.options.length > 0) return true;\n return Array.isArray(field.itemSchema?.enum) && field.itemSchema.enum.length > 0;\n}\n\nfunction collectMapPaths(\n field: FieldControl,\n instancePath: string,\n paths: Set<string>,\n options: CollectOptions\n) {\n const value = isPlainObject(field.value) ? field.value : {};\n const known = field.knownProperties ?? {};\n const keys = [\n ...Object.keys(known),\n ...Object.keys(value).filter((key) => !(key in known)),\n ];\n for (const key of keys) {\n const schema = known[key] ?? mapValueSchema(field, key);\n const path = appendInstancePath(instancePath, key);\n paths.add(path);\n collectControlPaths(\n resolveControl({\n key,\n prop: schema,\n required: false,\n value: value[key],\n onChange: () => {},\n }),\n path,\n paths,\n options\n );\n }\n}\n\nfunction mapValueSchema(field: FieldControl, key: string): JsonSchemaProperty {\n for (const entry of field.valuePatternSchemas ?? []) {\n try {\n if (new RegExp(entry.pattern).test(key)) return entry.schema;\n } catch {\n continue;\n }\n }\n return field.valueSchema ?? { type: \"string\" };\n}\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { ReactNode } from '../../../../node_modules/@types/react/index.d.ts';
1
+ import { ReactNode } from 'react';
2
2
  import { FieldControl, PostExtension, PostExtensionContext } from './json-schema-form-types';
3
3
  export type FieldNodes = {
4
4
  label: ReactNode;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const react = require("react");
5
+ const Icon = require("../data/Icon.cjs");
6
+ const UiSearch = require("../icons/components/UiSearch.cjs");
7
+ const UiClose = require("../icons/components/UiClose.cjs");
8
+ function FormFieldFilter({
9
+ value,
10
+ onChange
11
+ }) {
12
+ const id = react.useId();
13
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-col gap-1", children: [
14
+ /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: id, className: "text-xs text-muted-foreground", children: "Filter fields and values" }),
15
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
16
+ /* @__PURE__ */ jsxRuntime.jsx(
17
+ Icon.Icon,
18
+ {
19
+ icon: UiSearch.UiSearch,
20
+ className: "pointer-events-none absolute left-2 top-1/2 -translate-y-1/2 text-xs text-muted-foreground"
21
+ }
22
+ ),
23
+ /* @__PURE__ */ jsxRuntime.jsx(
24
+ "input",
25
+ {
26
+ id,
27
+ type: "text",
28
+ "aria-label": "Filter fields",
29
+ placeholder: "Search names, values, or tags…",
30
+ value,
31
+ onChange: (event) => onChange(event.target.value),
32
+ onKeyDown: (event) => event.stopPropagation(),
33
+ className: "h-7 w-full rounded-md border border-input bg-background pl-7 pr-7 text-xs text-foreground outline-none placeholder:text-placeholder focus-visible:ring-2 focus-visible:ring-ring"
34
+ }
35
+ ),
36
+ value !== "" && /* @__PURE__ */ jsxRuntime.jsx(
37
+ "button",
38
+ {
39
+ type: "button",
40
+ "aria-label": "Clear filter",
41
+ onClick: () => onChange(""),
42
+ className: "absolute right-1.5 top-1/2 inline-flex -translate-y-1/2 items-center justify-center text-muted-foreground hover:text-foreground",
43
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiClose.UiClose, className: "text-xs" })
44
+ }
45
+ )
46
+ ] })
47
+ ] });
48
+ }
49
+ exports.FormFieldFilter = FormFieldFilter;
50
+ //# sourceMappingURL=json-schema-form-filter-input.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema-form-filter-input.cjs","sources":["../../src/components/json-schema-form-filter-input.tsx"],"sourcesContent":["import { useId } from \"react\";\nimport { Icon } from \"../data/Icon\";\nimport { UiClose, UiSearch } from \"../icons\";\n\nexport function FormFieldFilter({\n value,\n onChange,\n}: {\n value: string;\n onChange: (value: string) => void;\n}) {\n const id = useId();\n return (\n <div className=\"flex min-w-0 flex-col gap-1\">\n <label htmlFor={id} className=\"text-xs text-muted-foreground\">\n Filter fields and values\n </label>\n <div className=\"relative\">\n <Icon\n icon={UiSearch}\n className=\"pointer-events-none absolute left-2 top-1/2 -translate-y-1/2 text-xs text-muted-foreground\"\n />\n <input\n id={id}\n type=\"text\"\n aria-label=\"Filter fields\"\n placeholder=\"Search names, values, or tags…\"\n value={value}\n onChange={(event) => onChange(event.target.value)}\n onKeyDown={(event) => event.stopPropagation()}\n className=\"h-7 w-full rounded-md border border-input bg-background pl-7 pr-7 text-xs text-foreground outline-none placeholder:text-placeholder focus-visible:ring-2 focus-visible:ring-ring\"\n />\n {value !== \"\" && (\n <button\n type=\"button\"\n aria-label=\"Clear filter\"\n onClick={() => onChange(\"\")}\n className=\"absolute right-1.5 top-1/2 inline-flex -translate-y-1/2 items-center justify-center text-muted-foreground hover:text-foreground\"\n >\n <Icon icon={UiClose} className=\"text-xs\" />\n </button>\n )}\n </div>\n </div>\n );\n}\n"],"names":["useId","jsxs","jsx","Icon","UiSearch","UiClose"],"mappings":";;;;;;;AAIO,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AACF,GAGG;AACD,QAAM,KAAKA,MAAAA,MAAA;AACX,SACEC,2BAAAA,KAAC,OAAA,EAAI,WAAU,+BACb,UAAA;AAAA,IAAAC,+BAAC,SAAA,EAAM,SAAS,IAAI,WAAU,iCAAgC,UAAA,4BAE9D;AAAA,IACAD,2BAAAA,KAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,MAAAC,2BAAAA;AAAAA,QAACC,KAAAA;AAAAA,QAAA;AAAA,UACC,MAAMC,SAAAA;AAAAA,UACN,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAEZF,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA,MAAK;AAAA,UACL,cAAW;AAAA,UACX,aAAY;AAAA,UACZ;AAAA,UACA,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,KAAK;AAAA,UAChD,WAAW,CAAC,UAAU,MAAM,gBAAA;AAAA,UAC5B,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAEX,UAAU,MACTA,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,cAAW;AAAA,UACX,SAAS,MAAM,SAAS,EAAE;AAAA,UAC1B,WAAU;AAAA,UAEV,UAAAA,2BAAAA,IAACC,WAAA,EAAK,MAAME,QAAAA,SAAS,WAAU,UAAA,CAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IAC3C,EAAA,CAEJ;AAAA,EAAA,GACF;AAEJ;;"}
@@ -0,0 +1,5 @@
1
+ export declare function FormFieldFilter({ value, onChange, }: {
2
+ value: string;
3
+ onChange: (value: string) => void;
4
+ }): import("react").JSX.Element;
5
+ //# sourceMappingURL=json-schema-form-filter-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema-form-filter-input.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-filter-input.tsx"],"names":[],"mappings":"AAIA,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,+BAmCA"}
@@ -0,0 +1,50 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useId } from "react";
3
+ import { Icon } from "../data/Icon.js";
4
+ import { UiSearch } from "../icons/components/UiSearch.js";
5
+ import { UiClose } from "../icons/components/UiClose.js";
6
+ function FormFieldFilter({
7
+ value,
8
+ onChange
9
+ }) {
10
+ const id = useId();
11
+ return /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col gap-1", children: [
12
+ /* @__PURE__ */ jsx("label", { htmlFor: id, className: "text-xs text-muted-foreground", children: "Filter fields and values" }),
13
+ /* @__PURE__ */ jsxs("div", { className: "relative", children: [
14
+ /* @__PURE__ */ jsx(
15
+ Icon,
16
+ {
17
+ icon: UiSearch,
18
+ className: "pointer-events-none absolute left-2 top-1/2 -translate-y-1/2 text-xs text-muted-foreground"
19
+ }
20
+ ),
21
+ /* @__PURE__ */ jsx(
22
+ "input",
23
+ {
24
+ id,
25
+ type: "text",
26
+ "aria-label": "Filter fields",
27
+ placeholder: "Search names, values, or tags…",
28
+ value,
29
+ onChange: (event) => onChange(event.target.value),
30
+ onKeyDown: (event) => event.stopPropagation(),
31
+ className: "h-7 w-full rounded-md border border-input bg-background pl-7 pr-7 text-xs text-foreground outline-none placeholder:text-placeholder focus-visible:ring-2 focus-visible:ring-ring"
32
+ }
33
+ ),
34
+ value !== "" && /* @__PURE__ */ jsx(
35
+ "button",
36
+ {
37
+ type: "button",
38
+ "aria-label": "Clear filter",
39
+ onClick: () => onChange(""),
40
+ className: "absolute right-1.5 top-1/2 inline-flex -translate-y-1/2 items-center justify-center text-muted-foreground hover:text-foreground",
41
+ children: /* @__PURE__ */ jsx(Icon, { icon: UiClose, className: "text-xs" })
42
+ }
43
+ )
44
+ ] })
45
+ ] });
46
+ }
47
+ export {
48
+ FormFieldFilter
49
+ };
50
+ //# sourceMappingURL=json-schema-form-filter-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema-form-filter-input.js","sources":["../../src/components/json-schema-form-filter-input.tsx"],"sourcesContent":["import { useId } from \"react\";\nimport { Icon } from \"../data/Icon\";\nimport { UiClose, UiSearch } from \"../icons\";\n\nexport function FormFieldFilter({\n value,\n onChange,\n}: {\n value: string;\n onChange: (value: string) => void;\n}) {\n const id = useId();\n return (\n <div className=\"flex min-w-0 flex-col gap-1\">\n <label htmlFor={id} className=\"text-xs text-muted-foreground\">\n Filter fields and values\n </label>\n <div className=\"relative\">\n <Icon\n icon={UiSearch}\n className=\"pointer-events-none absolute left-2 top-1/2 -translate-y-1/2 text-xs text-muted-foreground\"\n />\n <input\n id={id}\n type=\"text\"\n aria-label=\"Filter fields\"\n placeholder=\"Search names, values, or tags…\"\n value={value}\n onChange={(event) => onChange(event.target.value)}\n onKeyDown={(event) => event.stopPropagation()}\n className=\"h-7 w-full rounded-md border border-input bg-background pl-7 pr-7 text-xs text-foreground outline-none placeholder:text-placeholder focus-visible:ring-2 focus-visible:ring-ring\"\n />\n {value !== \"\" && (\n <button\n type=\"button\"\n aria-label=\"Clear filter\"\n onClick={() => onChange(\"\")}\n className=\"absolute right-1.5 top-1/2 inline-flex -translate-y-1/2 items-center justify-center text-muted-foreground hover:text-foreground\"\n >\n <Icon icon={UiClose} className=\"text-xs\" />\n </button>\n )}\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;AAIO,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AACF,GAGG;AACD,QAAM,KAAK,MAAA;AACX,SACE,qBAAC,OAAA,EAAI,WAAU,+BACb,UAAA;AAAA,IAAA,oBAAC,SAAA,EAAM,SAAS,IAAI,WAAU,iCAAgC,UAAA,4BAE9D;AAAA,IACA,qBAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAM;AAAA,UACN,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAEZ;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA,MAAK;AAAA,UACL,cAAW;AAAA,UACX,aAAY;AAAA,UACZ;AAAA,UACA,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,KAAK;AAAA,UAChD,WAAW,CAAC,UAAU,MAAM,gBAAA;AAAA,UAC5B,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAEX,UAAU,MACT;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,cAAW;AAAA,UACX,SAAS,MAAM,SAAS,EAAE;AAAA,UAC1B,WAAU;AAAA,UAEV,UAAA,oBAAC,MAAA,EAAK,MAAM,SAAS,WAAU,UAAA,CAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IAC3C,EAAA,CAEJ;AAAA,EAAA,GACF;AAEJ;"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const collections = require("../lib/collections.cjs");
4
+ const jsonSchemaFormResolve = require("./json-schema-form-resolve.cjs");
5
+ function matchesFieldFilter({
6
+ key,
7
+ prop,
8
+ filter,
9
+ value
10
+ }) {
11
+ var _a, _b;
12
+ const query = filter.trim().toLowerCase();
13
+ if (!query || key.toLowerCase().includes(query) || ((_a = prop.title) == null ? void 0 : _a.toLowerCase().includes(query)))
14
+ return true;
15
+ if (prop.format === "password") return false;
16
+ if (Array.isArray(value)) {
17
+ return value.some(
18
+ (item) => matchesFieldFilter({
19
+ key: "",
20
+ prop: prop.items ?? {},
21
+ filter,
22
+ value: item
23
+ })
24
+ );
25
+ }
26
+ if (collections.isPlainObject(value)) {
27
+ const { properties } = jsonSchemaFormResolve.effectiveProperties(prop, value);
28
+ const openMap = jsonSchemaFormResolve.isOpenStringMap(prop) || jsonSchemaFormResolve.schemaRendersAsObject(prop) && !prop.properties && Object.keys(properties).length === 0;
29
+ const keys = /* @__PURE__ */ new Set([...Object.keys(properties), ...Object.keys(value)]);
30
+ return [...keys].some((childKey) => {
31
+ var _a2;
32
+ const child = properties[childKey] ?? ((_a2 = Object.entries(prop.patternProperties ?? {}).find(
33
+ ([pattern]) => new RegExp(pattern).test(childKey)
34
+ )) == null ? void 0 : _a2[1]) ?? (collections.isPlainObject(prop.additionalProperties) ? prop.additionalProperties : openMap ? { type: "string" } : void 0);
35
+ return child !== void 0 && matchesFieldFilter({
36
+ key: childKey,
37
+ prop: child,
38
+ filter,
39
+ value: value[childKey]
40
+ });
41
+ });
42
+ }
43
+ if (value === null || value === void 0) return false;
44
+ const text = String(value).toLowerCase();
45
+ const label = (_b = prop["x-enum-labels"]) == null ? void 0 : _b[String(value)];
46
+ return text.includes(query) || Boolean(label == null ? void 0 : label.toLowerCase().includes(query));
47
+ }
48
+ exports.matchesFieldFilter = matchesFieldFilter;
49
+ //# sourceMappingURL=json-schema-form-filter.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema-form-filter.cjs","sources":["../../src/components/json-schema-form-filter.ts"],"sourcesContent":["import { isPlainObject } from \"../lib/collections\";\nimport {\n effectiveProperties,\n isOpenStringMap,\n schemaRendersAsObject,\n} from \"./json-schema-form-resolve\";\nimport type {\n JsonSchemaObject,\n JsonSchemaProperty,\n} from \"./json-schema-form-types\";\n\nexport function matchesFieldFilter({\n key,\n prop,\n filter,\n value,\n}: {\n key: string;\n prop: JsonSchemaProperty;\n filter: string;\n value?: unknown;\n}): boolean {\n const query = filter.trim().toLowerCase();\n if (\n !query ||\n key.toLowerCase().includes(query) ||\n prop.title?.toLowerCase().includes(query)\n )\n return true;\n if (prop.format === \"password\") return false;\n if (Array.isArray(value)) {\n return value.some((item) =>\n matchesFieldFilter({\n key: \"\",\n prop: prop.items ?? {},\n filter,\n value: item,\n }),\n );\n }\n if (isPlainObject(value)) {\n const { properties } = effectiveProperties(prop as JsonSchemaObject, value);\n const openMap =\n isOpenStringMap(prop) ||\n (schemaRendersAsObject(prop) &&\n !prop.properties &&\n Object.keys(properties).length === 0);\n const keys = new Set([...Object.keys(properties), ...Object.keys(value)]);\n return [...keys].some((childKey) => {\n const child =\n properties[childKey] ??\n Object.entries(prop.patternProperties ?? {}).find(([pattern]) =>\n new RegExp(pattern).test(childKey),\n )?.[1] ??\n (isPlainObject(prop.additionalProperties)\n ? prop.additionalProperties\n : openMap\n ? { type: \"string\" }\n : undefined);\n return (\n child !== undefined &&\n matchesFieldFilter({\n key: childKey,\n prop: child,\n filter,\n value: value[childKey],\n })\n );\n });\n }\n if (value === null || value === undefined) return false;\n const text = String(value).toLowerCase();\n const label = prop[\"x-enum-labels\"]?.[String(value)];\n return text.includes(query) || Boolean(label?.toLowerCase().includes(query));\n}\n"],"names":["isPlainObject","effectiveProperties","isOpenStringMap","schemaRendersAsObject","_a"],"mappings":";;;;AAWO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKY;;AACV,QAAM,QAAQ,OAAO,KAAA,EAAO,YAAA;AAC5B,MACE,CAAC,SACD,IAAI,YAAA,EAAc,SAAS,KAAK,OAChC,UAAK,UAAL,mBAAY,cAAc,SAAS;AAEnC,WAAO;AACT,MAAI,KAAK,WAAW,WAAY,QAAO;AACvC,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM;AAAA,MAAK,CAAC,SACjB,mBAAmB;AAAA,QACjB,KAAK;AAAA,QACL,MAAM,KAAK,SAAS,CAAA;AAAA,QACpB;AAAA,QACA,OAAO;AAAA,MAAA,CACR;AAAA,IAAA;AAAA,EAEL;AACA,MAAIA,YAAAA,cAAc,KAAK,GAAG;AACxB,UAAM,EAAE,WAAA,IAAeC,0CAAoB,MAA0B,KAAK;AAC1E,UAAM,UACJC,sBAAAA,gBAAgB,IAAI,KACnBC,sBAAAA,sBAAsB,IAAI,KACzB,CAAC,KAAK,cACN,OAAO,KAAK,UAAU,EAAE,WAAW;AACvC,UAAM,OAAO,oBAAI,IAAI,CAAC,GAAG,OAAO,KAAK,UAAU,GAAG,GAAG,OAAO,KAAK,KAAK,CAAC,CAAC;AACxE,WAAO,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,aAAa;;AAClC,YAAM,QACJ,WAAW,QAAQ,OACnBC,MAAA,OAAO,QAAQ,KAAK,qBAAqB,CAAA,CAAE,EAAE;AAAA,QAAK,CAAC,CAAC,OAAO,MACzD,IAAI,OAAO,OAAO,EAAE,KAAK,QAAQ;AAAA,MAAA,MADnC,gBAAAA,IAEI,QACHJ,YAAAA,cAAc,KAAK,oBAAoB,IACpC,KAAK,uBACL,UACE,EAAE,MAAM,aACR;AACR,aACE,UAAU,UACV,mBAAmB;AAAA,QACjB,KAAK;AAAA,QACL,MAAM;AAAA,QACN;AAAA,QACA,OAAO,MAAM,QAAQ;AAAA,MAAA,CACtB;AAAA,IAEL,CAAC;AAAA,EACH;AACA,MAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,QAAM,OAAO,OAAO,KAAK,EAAE,YAAA;AAC3B,QAAM,SAAQ,UAAK,eAAe,MAApB,mBAAwB,OAAO,KAAK;AAClD,SAAO,KAAK,SAAS,KAAK,KAAK,QAAQ,+BAAO,cAAc,SAAS,MAAM;AAC7E;;"}
@@ -0,0 +1,8 @@
1
+ import { JsonSchemaProperty } from './json-schema-form-types';
2
+ export declare function matchesFieldFilter({ key, prop, filter, value, }: {
3
+ key: string;
4
+ prop: JsonSchemaProperty;
5
+ filter: string;
6
+ value?: unknown;
7
+ }): boolean;
8
+ //# sourceMappingURL=json-schema-form-filter.d.ts.map