@flanksource/clicky-ui 0.3.40 → 0.3.42

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 (759) hide show
  1. package/README.md +24 -0
  2. package/dist/ai.cjs +14 -0
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +14 -0
  5. package/dist/ai.js.map +1 -1
  6. package/dist/comments/CommentCard.cjs +3 -1
  7. package/dist/comments/CommentCard.cjs.map +1 -1
  8. package/dist/comments/CommentCard.d.ts.map +1 -1
  9. package/dist/comments/CommentCard.js +4 -2
  10. package/dist/comments/CommentCard.js.map +1 -1
  11. package/dist/comments/CommentCardParts.cjs +16 -0
  12. package/dist/comments/CommentCardParts.cjs.map +1 -1
  13. package/dist/comments/CommentCardParts.d.ts +4 -1
  14. package/dist/comments/CommentCardParts.d.ts.map +1 -1
  15. package/dist/comments/CommentCardParts.js +16 -0
  16. package/dist/comments/CommentCardParts.js.map +1 -1
  17. package/dist/comments/comment-types.cjs.map +1 -1
  18. package/dist/comments/comment-types.d.ts +4 -0
  19. package/dist/comments/comment-types.d.ts.map +1 -1
  20. package/dist/comments/comment-types.js.map +1 -1
  21. package/dist/components/AccordionList.cjs +5 -1
  22. package/dist/components/AccordionList.cjs.map +1 -1
  23. package/dist/components/AccordionList.d.ts +3 -1
  24. package/dist/components/AccordionList.d.ts.map +1 -1
  25. package/dist/components/AccordionList.js +5 -1
  26. package/dist/components/AccordionList.js.map +1 -1
  27. package/dist/components/Combobox.cjs +54 -8
  28. package/dist/components/Combobox.cjs.map +1 -1
  29. package/dist/components/Combobox.d.ts.map +1 -1
  30. package/dist/components/Combobox.js +56 -10
  31. package/dist/components/Combobox.js.map +1 -1
  32. package/dist/components/ComboboxMenu.cjs +139 -113
  33. package/dist/components/ComboboxMenu.cjs.map +1 -1
  34. package/dist/components/ComboboxMenu.d.ts +3 -1
  35. package/dist/components/ComboboxMenu.d.ts.map +1 -1
  36. package/dist/components/ComboboxMenu.js +139 -113
  37. package/dist/components/ComboboxMenu.js.map +1 -1
  38. package/dist/components/ComboboxMenuTrigger.cjs +87 -0
  39. package/dist/components/ComboboxMenuTrigger.cjs.map +1 -0
  40. package/dist/components/ComboboxMenuTrigger.d.ts +23 -0
  41. package/dist/components/ComboboxMenuTrigger.d.ts.map +1 -0
  42. package/dist/components/ComboboxMenuTrigger.js +87 -0
  43. package/dist/components/ComboboxMenuTrigger.js.map +1 -0
  44. package/dist/components/JsonSchemaForm.cjs +39 -11
  45. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  46. package/dist/components/JsonSchemaForm.d.ts +1 -1
  47. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  48. package/dist/components/JsonSchemaForm.js +38 -10
  49. package/dist/components/JsonSchemaForm.js.map +1 -1
  50. package/dist/components/SegmentedControl.cjs +20 -3
  51. package/dist/components/SegmentedControl.cjs.map +1 -1
  52. package/dist/components/SegmentedControl.d.ts +11 -0
  53. package/dist/components/SegmentedControl.d.ts.map +1 -1
  54. package/dist/components/SegmentedControl.js +21 -4
  55. package/dist/components/SegmentedControl.js.map +1 -1
  56. package/dist/components/combobox-types.d.ts +8 -0
  57. package/dist/components/combobox-types.d.ts.map +1 -1
  58. package/dist/components/json-schema-form-accordion-array.cjs +3 -1
  59. package/dist/components/json-schema-form-accordion-array.cjs.map +1 -1
  60. package/dist/components/json-schema-form-accordion-array.d.ts +4 -1
  61. package/dist/components/json-schema-form-accordion-array.d.ts.map +1 -1
  62. package/dist/components/json-schema-form-accordion-array.js +3 -1
  63. package/dist/components/json-schema-form-accordion-array.js.map +1 -1
  64. package/dist/components/json-schema-form-array-view.cjs +63 -0
  65. package/dist/components/json-schema-form-array-view.cjs.map +1 -0
  66. package/dist/components/json-schema-form-array-view.d.ts +21 -0
  67. package/dist/components/json-schema-form-array-view.d.ts.map +1 -0
  68. package/dist/components/json-schema-form-array-view.js +63 -0
  69. package/dist/components/json-schema-form-array-view.js.map +1 -0
  70. package/dist/components/json-schema-form-array.cjs +3 -7
  71. package/dist/components/json-schema-form-array.cjs.map +1 -1
  72. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  73. package/dist/components/json-schema-form-array.js +3 -7
  74. package/dist/components/json-schema-form-array.js.map +1 -1
  75. package/dist/components/json-schema-form-conditionals.cjs +67 -0
  76. package/dist/components/json-schema-form-conditionals.cjs.map +1 -0
  77. package/dist/components/json-schema-form-conditionals.d.ts +9 -0
  78. package/dist/components/json-schema-form-conditionals.d.ts.map +1 -0
  79. package/dist/components/json-schema-form-conditionals.js +67 -0
  80. package/dist/components/json-schema-form-conditionals.js.map +1 -0
  81. package/dist/components/json-schema-form-debug-badge.cjs +108 -0
  82. package/dist/components/json-schema-form-debug-badge.cjs.map +1 -0
  83. package/dist/components/json-schema-form-debug-badge.d.ts +10 -0
  84. package/dist/components/json-schema-form-debug-badge.d.ts.map +1 -0
  85. package/dist/components/json-schema-form-debug-badge.js +108 -0
  86. package/dist/components/json-schema-form-debug-badge.js.map +1 -0
  87. package/dist/components/json-schema-form-debug-glyph-map.cjs +129 -0
  88. package/dist/components/json-schema-form-debug-glyph-map.cjs.map +1 -0
  89. package/dist/components/json-schema-form-debug-glyph-map.d.ts +20 -0
  90. package/dist/components/json-schema-form-debug-glyph-map.d.ts.map +1 -0
  91. package/dist/components/json-schema-form-debug-glyph-map.js +129 -0
  92. package/dist/components/json-schema-form-debug-glyph-map.js.map +1 -0
  93. package/dist/components/json-schema-form-debug-glyph.cjs +13 -0
  94. package/dist/components/json-schema-form-debug-glyph.cjs.map +1 -0
  95. package/dist/components/json-schema-form-debug-glyph.d.ts +6 -0
  96. package/dist/components/json-schema-form-debug-glyph.d.ts.map +1 -0
  97. package/dist/components/json-schema-form-debug-glyph.js +13 -0
  98. package/dist/components/json-schema-form-debug-glyph.js.map +1 -0
  99. package/dist/components/json-schema-form-debug-groups.cjs +56 -0
  100. package/dist/components/json-schema-form-debug-groups.cjs.map +1 -0
  101. package/dist/components/json-schema-form-debug-groups.d.ts +8 -0
  102. package/dist/components/json-schema-form-debug-groups.d.ts.map +1 -0
  103. package/dist/components/json-schema-form-debug-groups.js +56 -0
  104. package/dist/components/json-schema-form-debug-groups.js.map +1 -0
  105. package/dist/components/json-schema-form-debug-keywords.cjs +159 -0
  106. package/dist/components/json-schema-form-debug-keywords.cjs.map +1 -0
  107. package/dist/components/json-schema-form-debug-keywords.d.ts +6 -0
  108. package/dist/components/json-schema-form-debug-keywords.d.ts.map +1 -0
  109. package/dist/components/json-schema-form-debug-keywords.js +159 -0
  110. package/dist/components/json-schema-form-debug-keywords.js.map +1 -0
  111. package/dist/components/json-schema-form-debug-listeners.cjs +102 -0
  112. package/dist/components/json-schema-form-debug-listeners.cjs.map +1 -0
  113. package/dist/components/json-schema-form-debug-listeners.d.ts +6 -0
  114. package/dist/components/json-schema-form-debug-listeners.d.ts.map +1 -0
  115. package/dist/components/json-schema-form-debug-listeners.js +102 -0
  116. package/dist/components/json-schema-form-debug-listeners.js.map +1 -0
  117. package/dist/components/json-schema-form-debug.cjs +31 -0
  118. package/dist/components/json-schema-form-debug.cjs.map +1 -0
  119. package/dist/components/json-schema-form-debug.d.ts +11 -0
  120. package/dist/components/json-schema-form-debug.d.ts.map +1 -0
  121. package/dist/components/json-schema-form-debug.js +31 -0
  122. package/dist/components/json-schema-form-debug.js.map +1 -0
  123. package/dist/components/json-schema-form-defaults.cjs +68 -0
  124. package/dist/components/json-schema-form-defaults.cjs.map +1 -0
  125. package/dist/components/json-schema-form-defaults.d.ts +4 -0
  126. package/dist/components/json-schema-form-defaults.d.ts.map +1 -0
  127. package/dist/components/json-schema-form-defaults.js +68 -0
  128. package/dist/components/json-schema-form-defaults.js.map +1 -0
  129. package/dist/components/json-schema-form-enum-choice.cjs +114 -0
  130. package/dist/components/json-schema-form-enum-choice.cjs.map +1 -0
  131. package/dist/components/json-schema-form-enum-choice.d.ts +14 -0
  132. package/dist/components/json-schema-form-enum-choice.d.ts.map +1 -0
  133. package/dist/components/json-schema-form-enum-choice.js +114 -0
  134. package/dist/components/json-schema-form-enum-choice.js.map +1 -0
  135. package/dist/components/json-schema-form-errors.cjs +49 -31
  136. package/dist/components/json-schema-form-errors.cjs.map +1 -1
  137. package/dist/components/json-schema-form-errors.d.ts +4 -2
  138. package/dist/components/json-schema-form-errors.d.ts.map +1 -1
  139. package/dist/components/json-schema-form-errors.js +51 -33
  140. package/dist/components/json-schema-form-errors.js.map +1 -1
  141. package/dist/components/json-schema-form-fields.cjs +3 -93
  142. package/dist/components/json-schema-form-fields.cjs.map +1 -1
  143. package/dist/components/json-schema-form-fields.d.ts.map +1 -1
  144. package/dist/components/json-schema-form-fields.js +1 -91
  145. package/dist/components/json-schema-form-fields.js.map +1 -1
  146. package/dist/components/json-schema-form-filter.cjs +2 -1
  147. package/dist/components/json-schema-form-filter.cjs.map +1 -1
  148. package/dist/components/json-schema-form-filter.js +2 -1
  149. package/dist/components/json-schema-form-filter.js.map +1 -1
  150. package/dist/components/json-schema-form-item-summary.cjs +6 -2
  151. package/dist/components/json-schema-form-item-summary.cjs.map +1 -1
  152. package/dist/components/json-schema-form-item-summary.d.ts.map +1 -1
  153. package/dist/components/json-schema-form-item-summary.js +6 -2
  154. package/dist/components/json-schema-form-item-summary.js.map +1 -1
  155. package/dist/components/json-schema-form-layout.cjs +28 -19
  156. package/dist/components/json-schema-form-layout.cjs.map +1 -1
  157. package/dist/components/json-schema-form-layout.d.ts +8 -6
  158. package/dist/components/json-schema-form-layout.d.ts.map +1 -1
  159. package/dist/components/json-schema-form-layout.js +29 -20
  160. package/dist/components/json-schema-form-layout.js.map +1 -1
  161. package/dist/components/json-schema-form-listener-paths.cjs +52 -0
  162. package/dist/components/json-schema-form-listener-paths.cjs.map +1 -0
  163. package/dist/components/json-schema-form-listener-paths.d.ts +10 -0
  164. package/dist/components/json-schema-form-listener-paths.d.ts.map +1 -0
  165. package/dist/components/json-schema-form-listener-paths.js +52 -0
  166. package/dist/components/json-schema-form-listener-paths.js.map +1 -0
  167. package/dist/components/json-schema-form-listener-types.d.ts +22 -0
  168. package/dist/components/json-schema-form-listener-types.d.ts.map +1 -0
  169. package/dist/components/json-schema-form-listeners.cjs +256 -0
  170. package/dist/components/json-schema-form-listeners.cjs.map +1 -0
  171. package/dist/components/json-schema-form-listeners.d.ts +13 -0
  172. package/dist/components/json-schema-form-listeners.d.ts.map +1 -0
  173. package/dist/components/json-schema-form-listeners.js +256 -0
  174. package/dist/components/json-schema-form-listeners.js.map +1 -0
  175. package/dist/components/json-schema-form-object-array-view.cjs +62 -0
  176. package/dist/components/json-schema-form-object-array-view.cjs.map +1 -0
  177. package/dist/components/json-schema-form-object-array-view.d.ts +14 -0
  178. package/dist/components/json-schema-form-object-array-view.d.ts.map +1 -0
  179. package/dist/components/json-schema-form-object-array-view.js +62 -0
  180. package/dist/components/json-schema-form-object-array-view.js.map +1 -0
  181. package/dist/components/json-schema-form-object.cjs +3 -0
  182. package/dist/components/json-schema-form-object.cjs.map +1 -1
  183. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  184. package/dist/components/json-schema-form-object.js +3 -0
  185. package/dist/components/json-schema-form-object.js.map +1 -1
  186. package/dist/components/json-schema-form-preferences.cjs +1 -0
  187. package/dist/components/json-schema-form-preferences.cjs.map +1 -1
  188. package/dist/components/json-schema-form-preferences.d.ts +1 -0
  189. package/dist/components/json-schema-form-preferences.d.ts.map +1 -1
  190. package/dist/components/json-schema-form-preferences.js +1 -0
  191. package/dist/components/json-schema-form-preferences.js.map +1 -1
  192. package/dist/components/json-schema-form-render.cjs +36 -12
  193. package/dist/components/json-schema-form-render.cjs.map +1 -1
  194. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  195. package/dist/components/json-schema-form-render.js +38 -14
  196. package/dist/components/json-schema-form-render.js.map +1 -1
  197. package/dist/components/json-schema-form-resolve.cjs +6 -99
  198. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  199. package/dist/components/json-schema-form-resolve.d.ts +1 -8
  200. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  201. package/dist/components/json-schema-form-resolve.js +5 -98
  202. package/dist/components/json-schema-form-resolve.js.map +1 -1
  203. package/dist/components/json-schema-form-runtime-types.d.ts +16 -0
  204. package/dist/components/json-schema-form-runtime-types.d.ts.map +1 -1
  205. package/dist/components/json-schema-form-table-array.cjs +67 -16
  206. package/dist/components/json-schema-form-table-array.cjs.map +1 -1
  207. package/dist/components/json-schema-form-table-array.d.ts +4 -1
  208. package/dist/components/json-schema-form-table-array.d.ts.map +1 -1
  209. package/dist/components/json-schema-form-table-array.js +70 -19
  210. package/dist/components/json-schema-form-table-array.js.map +1 -1
  211. package/dist/components/json-schema-form-tone.cjs +12 -0
  212. package/dist/components/json-schema-form-tone.cjs.map +1 -1
  213. package/dist/components/json-schema-form-tone.js +12 -0
  214. package/dist/components/json-schema-form-tone.js.map +1 -1
  215. package/dist/components/json-schema-form-types.d.ts +17 -0
  216. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  217. package/dist/components/json-schema-form-utils.cjs +7 -1
  218. package/dist/components/json-schema-form-utils.cjs.map +1 -1
  219. package/dist/components/json-schema-form-utils.d.ts +2 -1
  220. package/dist/components/json-schema-form-utils.d.ts.map +1 -1
  221. package/dist/components/json-schema-form-utils.js +7 -1
  222. package/dist/components/json-schema-form-utils.js.map +1 -1
  223. package/dist/components.cjs +3 -2
  224. package/dist/components.cjs.map +1 -1
  225. package/dist/components.d.ts +3 -2
  226. package/dist/components.d.ts.map +1 -1
  227. package/dist/components.js +2 -1
  228. package/dist/components.js.map +1 -1
  229. package/dist/data/DataTable.cjs +9 -3
  230. package/dist/data/DataTable.cjs.map +1 -1
  231. package/dist/data/DataTable.d.ts +6 -0
  232. package/dist/data/DataTable.d.ts.map +1 -1
  233. package/dist/data/DataTable.js +9 -3
  234. package/dist/data/DataTable.js.map +1 -1
  235. package/dist/data/FixtureEditor/FixtureEditor.cjs +43 -24
  236. package/dist/data/FixtureEditor/FixtureEditor.cjs.map +1 -1
  237. package/dist/data/FixtureEditor/FixtureEditor.d.ts.map +1 -1
  238. package/dist/data/FixtureEditor/FixtureEditor.js +43 -24
  239. package/dist/data/FixtureEditor/FixtureEditor.js.map +1 -1
  240. package/dist/data/GraphDiagram.cjs +125 -138
  241. package/dist/data/GraphDiagram.cjs.map +1 -1
  242. package/dist/data/GraphDiagram.d.ts +30 -23
  243. package/dist/data/GraphDiagram.d.ts.map +1 -1
  244. package/dist/data/GraphDiagram.js +128 -141
  245. package/dist/data/GraphDiagram.js.map +1 -1
  246. package/dist/data/GraphDiagramEdges.cjs +208 -0
  247. package/dist/data/GraphDiagramEdges.cjs.map +1 -0
  248. package/dist/data/GraphDiagramEdges.d.ts +40 -0
  249. package/dist/data/GraphDiagramEdges.d.ts.map +1 -0
  250. package/dist/data/GraphDiagramEdges.js +208 -0
  251. package/dist/data/GraphDiagramEdges.js.map +1 -0
  252. package/dist/data/GraphDiagramNodes.cjs +142 -0
  253. package/dist/data/GraphDiagramNodes.cjs.map +1 -0
  254. package/dist/data/GraphDiagramNodes.d.ts +22 -0
  255. package/dist/data/GraphDiagramNodes.d.ts.map +1 -0
  256. package/dist/data/GraphDiagramNodes.js +142 -0
  257. package/dist/data/GraphDiagramNodes.js.map +1 -0
  258. package/dist/data/Tree.cjs +10 -2
  259. package/dist/data/Tree.cjs.map +1 -1
  260. package/dist/data/Tree.d.ts +6 -1
  261. package/dist/data/Tree.d.ts.map +1 -1
  262. package/dist/data/Tree.js +10 -2
  263. package/dist/data/Tree.js.map +1 -1
  264. package/dist/data/ai/PromptRunEditor/RuntimeRows.cjs +8 -3
  265. package/dist/data/ai/PromptRunEditor/RuntimeRows.cjs.map +1 -1
  266. package/dist/data/ai/PromptRunEditor/RuntimeRows.d.ts.map +1 -1
  267. package/dist/data/ai/PromptRunEditor/RuntimeRows.js +8 -3
  268. package/dist/data/ai/PromptRunEditor/RuntimeRows.js.map +1 -1
  269. package/dist/data/ai/PromptRunEditor/index.cjs +37 -43
  270. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  271. package/dist/data/ai/PromptRunEditor/index.d.ts +3 -1
  272. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
  273. package/dist/data/ai/PromptRunEditor/index.js +38 -44
  274. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  275. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs +16 -5
  276. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs.map +1 -1
  277. package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts +4 -1
  278. package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts.map +1 -1
  279. package/dist/data/ai/PromptRunEditor/runtimeActions.js +17 -6
  280. package/dist/data/ai/PromptRunEditor/runtimeActions.js.map +1 -1
  281. package/dist/data/ai/SessionInspector.approvals-model.cjs +12 -0
  282. package/dist/data/ai/SessionInspector.approvals-model.cjs.map +1 -1
  283. package/dist/data/ai/SessionInspector.approvals-model.d.ts +11 -2
  284. package/dist/data/ai/SessionInspector.approvals-model.d.ts.map +1 -1
  285. package/dist/data/ai/SessionInspector.approvals-model.js +12 -0
  286. package/dist/data/ai/SessionInspector.approvals-model.js.map +1 -1
  287. package/dist/data/ai/SessionInspector.approvals.cjs +25 -1
  288. package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -1
  289. package/dist/data/ai/SessionInspector.approvals.d.ts.map +1 -1
  290. package/dist/data/ai/SessionInspector.approvals.js +26 -2
  291. package/dist/data/ai/SessionInspector.approvals.js.map +1 -1
  292. package/dist/data/ai/SessionInspector.cjs +143 -167
  293. package/dist/data/ai/SessionInspector.cjs.map +1 -1
  294. package/dist/data/ai/SessionInspector.collection-types.d.ts +5 -0
  295. package/dist/data/ai/SessionInspector.collection-types.d.ts.map +1 -1
  296. package/dist/data/ai/SessionInspector.collection.cjs +18 -5
  297. package/dist/data/ai/SessionInspector.collection.cjs.map +1 -1
  298. package/dist/data/ai/SessionInspector.collection.d.ts +2 -0
  299. package/dist/data/ai/SessionInspector.collection.d.ts.map +1 -1
  300. package/dist/data/ai/SessionInspector.collection.fixtures.d.ts +6 -0
  301. package/dist/data/ai/SessionInspector.collection.fixtures.d.ts.map +1 -0
  302. package/dist/data/ai/SessionInspector.collection.js +18 -5
  303. package/dist/data/ai/SessionInspector.collection.js.map +1 -1
  304. package/dist/data/ai/SessionInspector.d.ts +24 -2
  305. package/dist/data/ai/SessionInspector.d.ts.map +1 -1
  306. package/dist/data/ai/SessionInspector.hierarchy-state.cjs +105 -7
  307. package/dist/data/ai/SessionInspector.hierarchy-state.cjs.map +1 -1
  308. package/dist/data/ai/SessionInspector.hierarchy-state.d.ts +12 -1
  309. package/dist/data/ai/SessionInspector.hierarchy-state.d.ts.map +1 -1
  310. package/dist/data/ai/SessionInspector.hierarchy-state.js +107 -9
  311. package/dist/data/ai/SessionInspector.hierarchy-state.js.map +1 -1
  312. package/dist/data/ai/SessionInspector.hierarchy.cjs +1 -1
  313. package/dist/data/ai/SessionInspector.hierarchy.cjs.map +1 -1
  314. package/dist/data/ai/SessionInspector.hierarchy.js +1 -1
  315. package/dist/data/ai/SessionInspector.hierarchy.js.map +1 -1
  316. package/dist/data/ai/SessionInspector.js +144 -168
  317. package/dist/data/ai/SessionInspector.js.map +1 -1
  318. package/dist/data/ai/SessionInspector.legacy.cjs +116 -0
  319. package/dist/data/ai/SessionInspector.legacy.cjs.map +1 -0
  320. package/dist/data/ai/SessionInspector.legacy.d.ts +19 -0
  321. package/dist/data/ai/SessionInspector.legacy.d.ts.map +1 -0
  322. package/dist/data/ai/SessionInspector.legacy.js +116 -0
  323. package/dist/data/ai/SessionInspector.legacy.js.map +1 -0
  324. package/dist/data/ai/SessionInspector.panels.cjs +3 -0
  325. package/dist/data/ai/SessionInspector.panels.cjs.map +1 -1
  326. package/dist/data/ai/SessionInspector.panels.d.ts.map +1 -1
  327. package/dist/data/ai/SessionInspector.panels.js +3 -0
  328. package/dist/data/ai/SessionInspector.panels.js.map +1 -1
  329. package/dist/data/ai/SessionInspector.plan.cjs +29 -12
  330. package/dist/data/ai/SessionInspector.plan.cjs.map +1 -1
  331. package/dist/data/ai/SessionInspector.plan.d.ts.map +1 -1
  332. package/dist/data/ai/SessionInspector.plan.js +30 -13
  333. package/dist/data/ai/SessionInspector.plan.js.map +1 -1
  334. package/dist/data/ai/SessionInspector.remote-view.cjs +44 -0
  335. package/dist/data/ai/SessionInspector.remote-view.cjs.map +1 -0
  336. package/dist/data/ai/SessionInspector.remote-view.d.ts +11 -0
  337. package/dist/data/ai/SessionInspector.remote-view.d.ts.map +1 -0
  338. package/dist/data/ai/SessionInspector.remote-view.js +44 -0
  339. package/dist/data/ai/SessionInspector.remote-view.js.map +1 -0
  340. package/dist/data/ai/SessionInspector.remote.cjs +275 -0
  341. package/dist/data/ai/SessionInspector.remote.cjs.map +1 -0
  342. package/dist/data/ai/SessionInspector.remote.d.ts +57 -0
  343. package/dist/data/ai/SessionInspector.remote.d.ts.map +1 -0
  344. package/dist/data/ai/SessionInspector.remote.js +275 -0
  345. package/dist/data/ai/SessionInspector.remote.js.map +1 -0
  346. package/dist/data/ai/SessionInspector.summary.cjs +9 -159
  347. package/dist/data/ai/SessionInspector.summary.cjs.map +1 -1
  348. package/dist/data/ai/SessionInspector.summary.d.ts +0 -3
  349. package/dist/data/ai/SessionInspector.summary.d.ts.map +1 -1
  350. package/dist/data/ai/SessionInspector.summary.js +11 -161
  351. package/dist/data/ai/SessionInspector.summary.js.map +1 -1
  352. package/dist/data/ai/SessionInspector.tab-state.cjs +15 -0
  353. package/dist/data/ai/SessionInspector.tab-state.cjs.map +1 -0
  354. package/dist/data/ai/SessionInspector.tab-state.d.ts +3 -0
  355. package/dist/data/ai/SessionInspector.tab-state.d.ts.map +1 -0
  356. package/dist/data/ai/SessionInspector.tab-state.js +15 -0
  357. package/dist/data/ai/SessionInspector.tab-state.js.map +1 -0
  358. package/dist/data/ai/SessionInspector.tabs.model.cjs +31 -18
  359. package/dist/data/ai/SessionInspector.tabs.model.cjs.map +1 -1
  360. package/dist/data/ai/SessionInspector.tabs.model.d.ts +3 -1
  361. package/dist/data/ai/SessionInspector.tabs.model.d.ts.map +1 -1
  362. package/dist/data/ai/SessionInspector.tabs.model.js +32 -19
  363. package/dist/data/ai/SessionInspector.tabs.model.js.map +1 -1
  364. package/dist/data/ai/SessionInspector.transcript.cjs +4 -0
  365. package/dist/data/ai/SessionInspector.transcript.cjs.map +1 -1
  366. package/dist/data/ai/SessionInspector.transcript.d.ts.map +1 -1
  367. package/dist/data/ai/SessionInspector.transcript.js +4 -0
  368. package/dist/data/ai/SessionInspector.transcript.js.map +1 -1
  369. package/dist/data/ai/SessionInspector.verification.cjs +53 -0
  370. package/dist/data/ai/SessionInspector.verification.cjs.map +1 -0
  371. package/dist/data/ai/SessionInspector.verification.d.ts +7 -0
  372. package/dist/data/ai/SessionInspector.verification.d.ts.map +1 -0
  373. package/dist/data/ai/SessionInspector.verification.js +53 -0
  374. package/dist/data/ai/SessionInspector.verification.js.map +1 -0
  375. package/dist/data/ai/SessionViewer.approval-body.cjs +146 -0
  376. package/dist/data/ai/SessionViewer.approval-body.cjs.map +1 -0
  377. package/dist/data/ai/SessionViewer.approval-body.d.ts +11 -0
  378. package/dist/data/ai/SessionViewer.approval-body.d.ts.map +1 -0
  379. package/dist/data/ai/SessionViewer.approval-body.js +146 -0
  380. package/dist/data/ai/SessionViewer.approval-body.js.map +1 -0
  381. package/dist/data/ai/SessionViewer.approval-forms.cjs +150 -0
  382. package/dist/data/ai/SessionViewer.approval-forms.cjs.map +1 -0
  383. package/dist/data/ai/SessionViewer.approval-forms.d.ts +23 -0
  384. package/dist/data/ai/SessionViewer.approval-forms.d.ts.map +1 -0
  385. package/dist/data/ai/SessionViewer.approval-forms.js +150 -0
  386. package/dist/data/ai/SessionViewer.approval-forms.js.map +1 -0
  387. package/dist/data/ai/SessionViewer.cjs +57 -20
  388. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  389. package/dist/data/ai/SessionViewer.d.ts +13 -3
  390. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  391. package/dist/data/ai/SessionViewer.decision-controls.cjs +313 -0
  392. package/dist/data/ai/SessionViewer.decision-controls.cjs.map +1 -0
  393. package/dist/data/ai/SessionViewer.decision-controls.d.ts +43 -0
  394. package/dist/data/ai/SessionViewer.decision-controls.d.ts.map +1 -0
  395. package/dist/data/ai/SessionViewer.decision-controls.js +313 -0
  396. package/dist/data/ai/SessionViewer.decision-controls.js.map +1 -0
  397. package/dist/data/ai/SessionViewer.decision.cjs +21 -0
  398. package/dist/data/ai/SessionViewer.decision.cjs.map +1 -0
  399. package/dist/data/ai/SessionViewer.decision.d.ts +12 -0
  400. package/dist/data/ai/SessionViewer.decision.d.ts.map +1 -0
  401. package/dist/data/ai/SessionViewer.decision.js +21 -0
  402. package/dist/data/ai/SessionViewer.decision.js.map +1 -0
  403. package/dist/data/ai/SessionViewer.input.cjs +14 -0
  404. package/dist/data/ai/SessionViewer.input.cjs.map +1 -1
  405. package/dist/data/ai/SessionViewer.input.d.ts +5 -0
  406. package/dist/data/ai/SessionViewer.input.d.ts.map +1 -1
  407. package/dist/data/ai/SessionViewer.input.js +14 -0
  408. package/dist/data/ai/SessionViewer.input.js.map +1 -1
  409. package/dist/data/ai/SessionViewer.js +58 -21
  410. package/dist/data/ai/SessionViewer.js.map +1 -1
  411. package/dist/data/ai/SessionViewer.model.cjs +7 -1
  412. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  413. package/dist/data/ai/SessionViewer.model.d.ts +25 -3
  414. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  415. package/dist/data/ai/SessionViewer.model.js +7 -1
  416. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  417. package/dist/data/ai/SessionViewer.rows.cjs +6 -3
  418. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  419. package/dist/data/ai/SessionViewer.rows.d.ts +2 -1
  420. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  421. package/dist/data/ai/SessionViewer.rows.js +6 -3
  422. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  423. package/dist/data/ai/SessionViewer.tool-row.cjs +29 -237
  424. package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -1
  425. package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -1
  426. package/dist/data/ai/SessionViewer.tool-row.js +27 -235
  427. package/dist/data/ai/SessionViewer.tool-row.js.map +1 -1
  428. package/dist/data/ai/SessionViewer.unified.d.ts +17 -0
  429. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  430. package/dist/data/ai/SessionViewerMenu.cjs +8 -2
  431. package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
  432. package/dist/data/ai/SessionViewerMenu.d.ts +4 -1
  433. package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
  434. package/dist/data/ai/SessionViewerMenu.js +8 -2
  435. package/dist/data/ai/SessionViewerMenu.js.map +1 -1
  436. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs +28 -17
  437. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs.map +1 -1
  438. package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts +10 -2
  439. package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts.map +1 -1
  440. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js +29 -18
  441. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js.map +1 -1
  442. package/dist/data/ai/SpecRuntimeEditor/index.cjs +9 -1
  443. package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
  444. package/dist/data/ai/SpecRuntimeEditor/index.d.ts +9 -2
  445. package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
  446. package/dist/data/ai/SpecRuntimeEditor/index.js +9 -1
  447. package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
  448. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.cjs +1 -1
  449. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.js +1 -1
  450. package/dist/data/ai/SpecRuntimeEditor/summaries.cjs.map +1 -1
  451. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts +8 -2
  452. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts.map +1 -1
  453. package/dist/data/ai/SpecRuntimeEditor/summaries.js.map +1 -1
  454. package/dist/data/ai/SpecRuntimeEditor/update.cjs +14 -6
  455. package/dist/data/ai/SpecRuntimeEditor/update.cjs.map +1 -1
  456. package/dist/data/ai/SpecRuntimeEditor/update.d.ts +1 -0
  457. package/dist/data/ai/SpecRuntimeEditor/update.d.ts.map +1 -1
  458. package/dist/data/ai/SpecRuntimeEditor/update.js +14 -6
  459. package/dist/data/ai/SpecRuntimeEditor/update.js.map +1 -1
  460. package/dist/data/ai/approval-request.cjs +75 -0
  461. package/dist/data/ai/approval-request.cjs.map +1 -0
  462. package/dist/data/ai/approval-request.d.ts +155 -0
  463. package/dist/data/ai/approval-request.d.ts.map +1 -0
  464. package/dist/data/ai/approval-request.js +75 -0
  465. package/dist/data/ai/approval-request.js.map +1 -0
  466. package/dist/data/ai/index.d.ts +6 -1
  467. package/dist/data/ai/index.d.ts.map +1 -1
  468. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.cjs +125 -0
  469. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.cjs.map +1 -0
  470. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.d.ts +11 -0
  471. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.d.ts.map +1 -0
  472. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.js +125 -0
  473. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.js.map +1 -0
  474. package/dist/data/ai/runtime-preset-menu/index.d.ts +3 -0
  475. package/dist/data/ai/runtime-preset-menu/index.d.ts.map +1 -0
  476. package/dist/data/ai/runtime-preset-menu/model.cjs +73 -0
  477. package/dist/data/ai/runtime-preset-menu/model.cjs.map +1 -0
  478. package/dist/data/ai/runtime-preset-menu/model.d.ts +13 -0
  479. package/dist/data/ai/runtime-preset-menu/model.d.ts.map +1 -0
  480. package/dist/data/ai/runtime-preset-menu/model.js +73 -0
  481. package/dist/data/ai/runtime-preset-menu/model.js.map +1 -0
  482. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.cjs +149 -0
  483. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.cjs.map +1 -0
  484. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.d.ts +15 -0
  485. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.d.ts.map +1 -0
  486. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.js +149 -0
  487. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.js.map +1 -0
  488. package/dist/data/ai/runtime-spec-fields.cjs +166 -0
  489. package/dist/data/ai/runtime-spec-fields.cjs.map +1 -0
  490. package/dist/data/ai/runtime-spec-fields.d.ts +13 -0
  491. package/dist/data/ai/runtime-spec-fields.d.ts.map +1 -0
  492. package/dist/data/ai/runtime-spec-fields.js +166 -0
  493. package/dist/data/ai/runtime-spec-fields.js.map +1 -0
  494. package/dist/data/ai/session-categories.cjs +4 -0
  495. package/dist/data/ai/session-categories.cjs.map +1 -1
  496. package/dist/data/ai/session-categories.d.ts +1 -0
  497. package/dist/data/ai/session-categories.d.ts.map +1 -1
  498. package/dist/data/ai/session-categories.js +4 -0
  499. package/dist/data/ai/session-categories.js.map +1 -1
  500. package/dist/data/ai/use-session-scroll.cjs +49 -21
  501. package/dist/data/ai/use-session-scroll.cjs.map +1 -1
  502. package/dist/data/ai/use-session-scroll.d.ts +2 -0
  503. package/dist/data/ai/use-session-scroll.d.ts.map +1 -1
  504. package/dist/data/ai/use-session-scroll.js +49 -21
  505. package/dist/data/ai/use-session-scroll.js.map +1 -1
  506. package/dist/data/chat/Chat.runtime.cjs +1 -1
  507. package/dist/data/chat/Chat.runtime.cjs.map +1 -1
  508. package/dist/data/chat/Chat.runtime.d.ts.map +1 -1
  509. package/dist/data/chat/Chat.runtime.js +1 -1
  510. package/dist/data/chat/Chat.runtime.js.map +1 -1
  511. package/dist/data/graph-columns-layout.cjs +216 -0
  512. package/dist/data/graph-columns-layout.cjs.map +1 -0
  513. package/dist/data/graph-columns-layout.d.ts +56 -0
  514. package/dist/data/graph-columns-layout.d.ts.map +1 -0
  515. package/dist/data/graph-columns-layout.js +216 -0
  516. package/dist/data/graph-columns-layout.js.map +1 -0
  517. package/dist/data/graph-diagram-model.cjs +73 -0
  518. package/dist/data/graph-diagram-model.cjs.map +1 -0
  519. package/dist/data/graph-diagram-model.d.ts +90 -0
  520. package/dist/data/graph-diagram-model.d.ts.map +1 -0
  521. package/dist/data/graph-diagram-model.js +73 -0
  522. package/dist/data/graph-diagram-model.js.map +1 -0
  523. package/dist/data/graph-edge-routing.cjs +235 -0
  524. package/dist/data/graph-edge-routing.cjs.map +1 -0
  525. package/dist/data/graph-edge-routing.d.ts +73 -0
  526. package/dist/data/graph-edge-routing.d.ts.map +1 -0
  527. package/dist/data/graph-edge-routing.js +235 -0
  528. package/dist/data/graph-edge-routing.js.map +1 -0
  529. package/dist/data/graph-layout.cjs +0 -82
  530. package/dist/data/graph-layout.cjs.map +1 -1
  531. package/dist/data/graph-layout.d.ts +1 -28
  532. package/dist/data/graph-layout.d.ts.map +1 -1
  533. package/dist/data/graph-layout.js +1 -83
  534. package/dist/data/graph-layout.js.map +1 -1
  535. package/dist/data/har/HarPanel.cjs +129 -33
  536. package/dist/data/har/HarPanel.cjs.map +1 -1
  537. package/dist/data/har/HarPanel.d.ts +13 -1
  538. package/dist/data/har/HarPanel.d.ts.map +1 -1
  539. package/dist/data/har/HarPanel.js +130 -34
  540. package/dist/data/har/HarPanel.js.map +1 -1
  541. package/dist/data/har/fixtures.d.ts +12 -0
  542. package/dist/data/har/fixtures.d.ts.map +1 -1
  543. package/dist/data/har/types.d.ts +12 -0
  544. package/dist/data/har/types.d.ts.map +1 -1
  545. package/dist/data/runtime/RuntimeBar.cjs +67 -84
  546. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  547. package/dist/data/runtime/RuntimeBar.d.ts +4 -5
  548. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  549. package/dist/data/runtime/RuntimeBar.fields.cjs +170 -0
  550. package/dist/data/runtime/RuntimeBar.fields.cjs.map +1 -0
  551. package/dist/data/runtime/RuntimeBar.fields.d.ts +16 -0
  552. package/dist/data/runtime/RuntimeBar.fields.d.ts.map +1 -0
  553. package/dist/data/runtime/RuntimeBar.fields.js +170 -0
  554. package/dist/data/runtime/RuntimeBar.fields.js.map +1 -0
  555. package/dist/data/runtime/RuntimeBar.js +70 -87
  556. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  557. package/dist/data/runtime/RuntimeBar.selection.cjs +56 -0
  558. package/dist/data/runtime/RuntimeBar.selection.cjs.map +1 -0
  559. package/dist/data/runtime/RuntimeBar.selection.d.ts +20 -0
  560. package/dist/data/runtime/RuntimeBar.selection.d.ts.map +1 -0
  561. package/dist/data/runtime/RuntimeBar.selection.js +56 -0
  562. package/dist/data/runtime/RuntimeBar.selection.js.map +1 -0
  563. package/dist/data/runtime/RuntimeBarActions.cjs +10 -6
  564. package/dist/data/runtime/RuntimeBarActions.cjs.map +1 -1
  565. package/dist/data/runtime/RuntimeBarActions.d.ts +8 -1
  566. package/dist/data/runtime/RuntimeBarActions.d.ts.map +1 -1
  567. package/dist/data/runtime/RuntimeBarActions.js +10 -6
  568. package/dist/data/runtime/RuntimeBarActions.js.map +1 -1
  569. package/dist/data/runtime/RuntimeBarIdentity.cjs +166 -0
  570. package/dist/data/runtime/RuntimeBarIdentity.cjs.map +1 -0
  571. package/dist/data/runtime/RuntimeBarIdentity.d.ts +25 -0
  572. package/dist/data/runtime/RuntimeBarIdentity.d.ts.map +1 -0
  573. package/dist/data/runtime/RuntimeBarIdentity.js +166 -0
  574. package/dist/data/runtime/RuntimeBarIdentity.js.map +1 -0
  575. package/dist/data/runtime/RuntimeBarLayout.cjs +95 -0
  576. package/dist/data/runtime/RuntimeBarLayout.cjs.map +1 -0
  577. package/dist/data/runtime/RuntimeBarLayout.d.ts +9 -0
  578. package/dist/data/runtime/RuntimeBarLayout.d.ts.map +1 -0
  579. package/dist/data/runtime/RuntimeBarLayout.js +95 -0
  580. package/dist/data/runtime/RuntimeBarLayout.js.map +1 -0
  581. package/dist/data/runtime/RuntimeBarSegment.cjs +25 -14
  582. package/dist/data/runtime/RuntimeBarSegment.cjs.map +1 -1
  583. package/dist/data/runtime/RuntimeBarSegment.d.ts +4 -0
  584. package/dist/data/runtime/RuntimeBarSegment.d.ts.map +1 -1
  585. package/dist/data/runtime/RuntimeBarSegment.js +25 -14
  586. package/dist/data/runtime/RuntimeBarSegment.js.map +1 -1
  587. package/dist/data/runtime/RuntimeLimitInput.cjs +41 -0
  588. package/dist/data/runtime/RuntimeLimitInput.cjs.map +1 -0
  589. package/dist/data/runtime/RuntimeLimitInput.d.ts +9 -0
  590. package/dist/data/runtime/RuntimeLimitInput.d.ts.map +1 -0
  591. package/dist/data/runtime/RuntimeLimitInput.js +41 -0
  592. package/dist/data/runtime/RuntimeLimitInput.js.map +1 -0
  593. package/dist/data/runtime/use-runtime-bar-overflow.cjs +70 -0
  594. package/dist/data/runtime/use-runtime-bar-overflow.cjs.map +1 -0
  595. package/dist/data/runtime/use-runtime-bar-overflow.d.ts +13 -0
  596. package/dist/data/runtime/use-runtime-bar-overflow.d.ts.map +1 -0
  597. package/dist/data/runtime/use-runtime-bar-overflow.js +70 -0
  598. package/dist/data/runtime/use-runtime-bar-overflow.js.map +1 -0
  599. package/dist/data/use-edge-focus.cjs +20 -0
  600. package/dist/data/use-edge-focus.cjs.map +1 -0
  601. package/dist/data/use-edge-focus.d.ts +23 -0
  602. package/dist/data/use-edge-focus.d.ts.map +1 -0
  603. package/dist/data/use-edge-focus.js +20 -0
  604. package/dist/data/use-edge-focus.js.map +1 -0
  605. package/dist/data/use-pan-zoom.cjs +159 -0
  606. package/dist/data/use-pan-zoom.cjs.map +1 -0
  607. package/dist/data/use-pan-zoom.d.ts +79 -0
  608. package/dist/data/use-pan-zoom.d.ts.map +1 -0
  609. package/dist/data/use-pan-zoom.js +159 -0
  610. package/dist/data/use-pan-zoom.js.map +1 -0
  611. package/dist/data/version-info.cjs +3 -3
  612. package/dist/data/version-info.js +3 -3
  613. package/dist/data.cjs +5 -1
  614. package/dist/data.cjs.map +1 -1
  615. package/dist/data.d.ts +4 -3
  616. package/dist/data.d.ts.map +1 -1
  617. package/dist/data.js +6 -2
  618. package/dist/data.js.map +1 -1
  619. package/dist/devtools/useDebugStream.cjs +5 -1
  620. package/dist/devtools/useDebugStream.cjs.map +1 -1
  621. package/dist/devtools/useDebugStream.d.ts.map +1 -1
  622. package/dist/devtools/useDebugStream.js +6 -2
  623. package/dist/devtools/useDebugStream.js.map +1 -1
  624. package/dist/hooks/event-source-provider.cjs +9 -0
  625. package/dist/hooks/event-source-provider.cjs.map +1 -0
  626. package/dist/hooks/event-source-provider.d.ts +15 -0
  627. package/dist/hooks/event-source-provider.d.ts.map +1 -0
  628. package/dist/hooks/event-source-provider.js +9 -0
  629. package/dist/hooks/event-source-provider.js.map +1 -0
  630. package/dist/hooks/event-source.cjs +11 -0
  631. package/dist/hooks/event-source.cjs.map +1 -0
  632. package/dist/hooks/event-source.d.ts +22 -0
  633. package/dist/hooks/event-source.d.ts.map +1 -0
  634. package/dist/hooks/event-source.js +11 -0
  635. package/dist/hooks/event-source.js.map +1 -0
  636. package/dist/hooks/use-log-tail.cjs +5 -1
  637. package/dist/hooks/use-log-tail.cjs.map +1 -1
  638. package/dist/hooks/use-log-tail.d.ts.map +1 -1
  639. package/dist/hooks/use-log-tail.js +5 -1
  640. package/dist/hooks/use-log-tail.js.map +1 -1
  641. package/dist/hooks/use-prompts.cjs +5 -1
  642. package/dist/hooks/use-prompts.cjs.map +1 -1
  643. package/dist/hooks/use-prompts.d.ts.map +1 -1
  644. package/dist/hooks/use-prompts.js +6 -2
  645. package/dist/hooks/use-prompts.js.map +1 -1
  646. package/dist/hooks/use-task-run.cjs +9 -2
  647. package/dist/hooks/use-task-run.cjs.map +1 -1
  648. package/dist/hooks/use-task-run.d.ts.map +1 -1
  649. package/dist/hooks/use-task-run.js +10 -3
  650. package/dist/hooks/use-task-run.js.map +1 -1
  651. package/dist/hooks.cjs +4 -0
  652. package/dist/hooks.cjs.map +1 -1
  653. package/dist/hooks.d.ts +2 -0
  654. package/dist/hooks.d.ts.map +1 -1
  655. package/dist/hooks.js +4 -0
  656. package/dist/hooks.js.map +1 -1
  657. package/dist/icons/programmingCatalog.cjs +34 -34
  658. package/dist/icons/programmingCatalog.cjs.map +1 -1
  659. package/dist/icons/programmingCatalog.js +34 -34
  660. package/dist/icons/programmingCatalog.js.map +1 -1
  661. package/dist/index.cjs +14 -3
  662. package/dist/index.cjs.map +1 -1
  663. package/dist/index.js +14 -3
  664. package/dist/index.js.map +1 -1
  665. package/dist/monaco/MonacoEditor.cjs +4 -1
  666. package/dist/monaco/MonacoEditor.cjs.map +1 -1
  667. package/dist/monaco/MonacoEditor.d.ts +1 -1
  668. package/dist/monaco/MonacoEditor.d.ts.map +1 -1
  669. package/dist/monaco/MonacoEditor.js +4 -1
  670. package/dist/monaco/MonacoEditor.js.map +1 -1
  671. package/dist/monaco/types.d.ts +2 -1
  672. package/dist/monaco/types.d.ts.map +1 -1
  673. package/dist/overlay/CommandPalette.cjs +14 -4
  674. package/dist/overlay/CommandPalette.cjs.map +1 -1
  675. package/dist/overlay/CommandPalette.d.ts +5 -1
  676. package/dist/overlay/CommandPalette.d.ts.map +1 -1
  677. package/dist/overlay/CommandPalette.js +14 -4
  678. package/dist/overlay/CommandPalette.js.map +1 -1
  679. package/dist/overlay/CommandPaletteList.cjs +5 -0
  680. package/dist/overlay/CommandPaletteList.cjs.map +1 -1
  681. package/dist/overlay/CommandPaletteList.d.ts +4 -2
  682. package/dist/overlay/CommandPaletteList.d.ts.map +1 -1
  683. package/dist/overlay/CommandPaletteList.js +5 -0
  684. package/dist/overlay/CommandPaletteList.js.map +1 -1
  685. package/dist/overlay/DropdownMenu.cjs +2 -0
  686. package/dist/overlay/DropdownMenu.cjs.map +1 -1
  687. package/dist/overlay/DropdownMenu.d.ts +4 -0
  688. package/dist/overlay/DropdownMenu.d.ts.map +1 -1
  689. package/dist/overlay/DropdownMenu.js +2 -0
  690. package/dist/overlay/DropdownMenu.js.map +1 -1
  691. package/dist/overlay/DropdownMenuSubmenu.cjs +31 -15
  692. package/dist/overlay/DropdownMenuSubmenu.cjs.map +1 -1
  693. package/dist/overlay/DropdownMenuSubmenu.d.ts.map +1 -1
  694. package/dist/overlay/DropdownMenuSubmenu.js +31 -15
  695. package/dist/overlay/DropdownMenuSubmenu.js.map +1 -1
  696. package/dist/rpc/OperationCatalog.cjs +32 -27
  697. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  698. package/dist/rpc/OperationCatalog.d.ts +11 -1
  699. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  700. package/dist/rpc/OperationCatalog.js +32 -27
  701. package/dist/rpc/OperationCatalog.js.map +1 -1
  702. package/dist/rpc/OperationEntityContextPicker.cjs +62 -256
  703. package/dist/rpc/OperationEntityContextPicker.cjs.map +1 -1
  704. package/dist/rpc/OperationEntityContextPicker.d.ts.map +1 -1
  705. package/dist/rpc/OperationEntityContextPicker.js +64 -258
  706. package/dist/rpc/OperationEntityContextPicker.js.map +1 -1
  707. package/dist/rpc/OperationEntityPicker.cjs +185 -0
  708. package/dist/rpc/OperationEntityPicker.cjs.map +1 -0
  709. package/dist/rpc/OperationEntityPicker.d.ts +51 -0
  710. package/dist/rpc/OperationEntityPicker.d.ts.map +1 -0
  711. package/dist/rpc/OperationEntityPicker.js +185 -0
  712. package/dist/rpc/OperationEntityPicker.js.map +1 -0
  713. package/dist/rpc/OperationEntityPicker.model.cjs +39 -0
  714. package/dist/rpc/OperationEntityPicker.model.cjs.map +1 -0
  715. package/dist/rpc/OperationEntityPicker.model.d.ts +27 -0
  716. package/dist/rpc/OperationEntityPicker.model.d.ts.map +1 -0
  717. package/dist/rpc/OperationEntityPicker.model.js +39 -0
  718. package/dist/rpc/OperationEntityPicker.model.js.map +1 -0
  719. package/dist/rpc/operationCatalogRowSelection.cjs +85 -0
  720. package/dist/rpc/operationCatalogRowSelection.cjs.map +1 -0
  721. package/dist/rpc/operationCatalogRowSelection.d.ts +57 -0
  722. package/dist/rpc/operationCatalogRowSelection.d.ts.map +1 -0
  723. package/dist/rpc/operationCatalogRowSelection.js +85 -0
  724. package/dist/rpc/operationCatalogRowSelection.js.map +1 -0
  725. package/dist/rpc/operationEntityPicker.fixtures.d.ts +13 -0
  726. package/dist/rpc/operationEntityPicker.fixtures.d.ts.map +1 -0
  727. package/dist/rpc/useOperationPages.cjs +6 -1
  728. package/dist/rpc/useOperationPages.cjs.map +1 -1
  729. package/dist/rpc/useOperationPages.d.ts +3 -1
  730. package/dist/rpc/useOperationPages.d.ts.map +1 -1
  731. package/dist/rpc/useOperationPages.js +6 -1
  732. package/dist/rpc/useOperationPages.js.map +1 -1
  733. package/dist/rpc.cjs +2 -0
  734. package/dist/rpc.cjs.map +1 -1
  735. package/dist/rpc.d.ts +2 -0
  736. package/dist/rpc.d.ts.map +1 -1
  737. package/dist/rpc.js +2 -0
  738. package/dist/rpc.js.map +1 -1
  739. package/dist/styles.css +1 -1
  740. package/package.json +4 -1
  741. package/schemas/json-schema-form.schema.json +571 -0
  742. package/dist/data/runtime/RuntimeBarCombo.cjs +0 -423
  743. package/dist/data/runtime/RuntimeBarCombo.cjs.map +0 -1
  744. package/dist/data/runtime/RuntimeBarCombo.d.ts +0 -33
  745. package/dist/data/runtime/RuntimeBarCombo.d.ts.map +0 -1
  746. package/dist/data/runtime/RuntimeBarCombo.js +0 -423
  747. package/dist/data/runtime/RuntimeBarCombo.js.map +0 -1
  748. package/dist/data/runtime/RuntimeBarLimits.cjs +0 -262
  749. package/dist/data/runtime/RuntimeBarLimits.cjs.map +0 -1
  750. package/dist/data/runtime/RuntimeBarLimits.d.ts +0 -17
  751. package/dist/data/runtime/RuntimeBarLimits.d.ts.map +0 -1
  752. package/dist/data/runtime/RuntimeBarLimits.js +0 -262
  753. package/dist/data/runtime/RuntimeBarLimits.js.map +0 -1
  754. package/dist/data/runtime/RuntimeBarSegments.cjs +0 -346
  755. package/dist/data/runtime/RuntimeBarSegments.cjs.map +0 -1
  756. package/dist/data/runtime/RuntimeBarSegments.d.ts +0 -37
  757. package/dist/data/runtime/RuntimeBarSegments.d.ts.map +0 -1
  758. package/dist/data/runtime/RuntimeBarSegments.js +0 -346
  759. package/dist/data/runtime/RuntimeBarSegments.js.map +0 -1
@@ -0,0 +1,114 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../lib/utils.js";
3
+ import { SegmentedControl } from "./SegmentedControl.js";
4
+ import { labelSizeClass } from "./json-schema-form-size.js";
5
+ const DEFAULT_MARKER = "default";
6
+ function schemaDefaultChoice(schema, options) {
7
+ const fallback = schema.default;
8
+ if (typeof fallback !== "string" && typeof fallback !== "number" && typeof fallback !== "boolean") {
9
+ return void 0;
10
+ }
11
+ const choice = String(fallback);
12
+ return options.some((opt) => opt.value === choice) ? choice : void 0;
13
+ }
14
+ function optionTitle(opt, isDefault) {
15
+ const parts = [opt.description, isDefault ? `(${DEFAULT_MARKER})` : void 0].filter(Boolean);
16
+ return parts.length > 0 ? parts.join(" ") : void 0;
17
+ }
18
+ const SEGMENTED_SIZE = {
19
+ xs: "sm",
20
+ sm: "sm",
21
+ md: "md",
22
+ lg: "lg",
23
+ xl: "lg"
24
+ };
25
+ function SegmentedEnumControl({ field, fieldId, readOnly, options, value, size }) {
26
+ const hasDescription = options.some((opt) => opt.description);
27
+ const segSize = hasDescription ? "lg" : SEGMENTED_SIZE[size];
28
+ const defaultChoice = schemaDefaultChoice(field.schema, options);
29
+ return /* @__PURE__ */ jsx("div", { id: fieldId, "data-jsf-input": true, className: cn(field.inputClassName), children: /* @__PURE__ */ jsx(
30
+ SegmentedControl,
31
+ {
32
+ "aria-label": field.label,
33
+ value,
34
+ onChange: (next) => field.onChange(next),
35
+ size: segSize,
36
+ wrap: true,
37
+ options: options.map((opt) => {
38
+ const isDefault = opt.value === defaultChoice;
39
+ const title = optionTitle(opt, isDefault);
40
+ return {
41
+ id: opt.value,
42
+ label: opt.label,
43
+ // x-enum-icons resolves to a runtime name string; SegmentedControl
44
+ // renders that via <Icon name>. Non-string (pre-extension) icons are
45
+ // dropped here since the segmented option type only takes name/component.
46
+ ...typeof opt.icon === "string" ? { icon: opt.icon } : {},
47
+ ...opt.description ? { description: opt.description } : {},
48
+ ...title ? { title } : {},
49
+ ...isDefault ? { marker: DEFAULT_MARKER, implied: true } : {},
50
+ ...readOnly ? { disabled: true } : {}
51
+ };
52
+ })
53
+ }
54
+ ) });
55
+ }
56
+ function RadioGroupControl({ field, fieldId, readOnly, options, value, size }) {
57
+ const defaultChoice = schemaDefaultChoice(field.schema, options);
58
+ const impliedChoice = value === "" ? defaultChoice : void 0;
59
+ return /* @__PURE__ */ jsx(
60
+ "div",
61
+ {
62
+ role: "radiogroup",
63
+ "aria-label": field.label,
64
+ id: fieldId,
65
+ "data-jsf-input": true,
66
+ className: cn(
67
+ "inline-flex flex-wrap items-center gap-1 rounded-md border border-input bg-background p-0.5",
68
+ field.inputClassName
69
+ ),
70
+ children: options.map((opt) => {
71
+ const checked = opt.value === value;
72
+ const implied = opt.value === impliedChoice;
73
+ const isDefault = opt.value === defaultChoice;
74
+ const markerId = isDefault ? `${fieldId}-default` : void 0;
75
+ return /* @__PURE__ */ jsxs(
76
+ "label",
77
+ {
78
+ title: optionTitle(opt, isDefault),
79
+ "data-implied": implied ? "true" : void 0,
80
+ className: cn(
81
+ "inline-flex cursor-pointer select-none items-center rounded px-2.5 py-1",
82
+ labelSizeClass[size],
83
+ checked ? "bg-primary text-primary-foreground" : implied ? "text-foreground outline-dashed outline-1 -outline-offset-1 outline-primary/60 hover:bg-accent" : "text-muted-foreground hover:bg-accent hover:text-foreground",
84
+ readOnly && "cursor-not-allowed opacity-60"
85
+ ),
86
+ children: [
87
+ /* @__PURE__ */ jsx(
88
+ "input",
89
+ {
90
+ type: "radio",
91
+ name: fieldId,
92
+ className: "sr-only",
93
+ value: opt.value,
94
+ checked,
95
+ disabled: readOnly,
96
+ "aria-describedby": markerId,
97
+ onChange: () => field.onChange(opt.value)
98
+ }
99
+ ),
100
+ opt.label,
101
+ isDefault && /* @__PURE__ */ jsx("span", { id: markerId, "aria-hidden": "true", className: "ml-1.5 text-[11px] font-normal opacity-70", children: DEFAULT_MARKER })
102
+ ]
103
+ },
104
+ opt.value
105
+ );
106
+ })
107
+ }
108
+ );
109
+ }
110
+ export {
111
+ RadioGroupControl,
112
+ SegmentedEnumControl
113
+ };
114
+ //# sourceMappingURL=json-schema-form-enum-choice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema-form-enum-choice.js","sources":["../../src/components/json-schema-form-enum-choice.tsx"],"sourcesContent":["import { cn } from \"../lib/utils\";\nimport { SegmentedControl, type SegmentedSize } from \"./SegmentedControl\";\nimport type { FieldControl, FieldOption, JsonSchemaProperty } from \"./json-schema-form-types\";\nimport { labelSizeClass, type FormSize } from \"./json-schema-form-size\";\n\nconst DEFAULT_MARKER = \"default\";\n\n// schemaDefaultChoice returns the option value named by the schema's scalar\n// `default`, or undefined when there is none or it matches no option.\nfunction schemaDefaultChoice(schema: JsonSchemaProperty, options: FieldOption[]): string | undefined {\n const fallback = schema.default;\n if (typeof fallback !== \"string\" && typeof fallback !== \"number\" && typeof fallback !== \"boolean\") {\n return undefined;\n }\n const choice = String(fallback);\n return options.some((opt) => opt.value === choice) ? choice : undefined;\n}\n\n// optionTitle is the native tooltip for one choice: its x-enum-descriptions\n// entry, suffixed with \"(default)\" when it is the schema default.\nfunction optionTitle(opt: FieldOption, isDefault: boolean): string | undefined {\n const parts = [opt.description, isDefault ? `(${DEFAULT_MARKER})` : undefined].filter(Boolean);\n return parts.length > 0 ? parts.join(\" \") : undefined;\n}\n\ntype EnumChoiceProps = {\n field: FieldControl;\n fieldId: string;\n readOnly: boolean;\n options: FieldOption[];\n value: string;\n size: FormSize;\n};\n\n// The FormSize scale is wider than SegmentedControl's; map the extremes down.\nconst SEGMENTED_SIZE: Record<FormSize, SegmentedSize> = {\n xs: \"sm\",\n sm: \"sm\",\n md: \"md\",\n lg: \"lg\",\n xl: \"lg\",\n};\n\n// SegmentedEnumControl renders an enum (x-enum-display: \"segmented\") with the\n// shared SegmentedControl. Icons come from x-enum-icons, descriptions from\n// x-enum-descriptions (which promote it to the large card layout, and double as\n// the segment tooltip). The schema default carries a \"default\" marker and, while\n// the value is unset, the implied style. The wrapper carries the field id +\n// data-jsf-input so the JSF field contract holds.\nexport function SegmentedEnumControl({ field, fieldId, readOnly, options, value, size }: EnumChoiceProps) {\n const hasDescription = options.some((opt) => opt.description);\n const segSize: SegmentedSize = hasDescription ? \"lg\" : SEGMENTED_SIZE[size];\n const defaultChoice = schemaDefaultChoice(field.schema, options);\n return (\n <div id={fieldId} data-jsf-input className={cn(field.inputClassName)}>\n <SegmentedControl\n aria-label={field.label}\n value={value}\n onChange={(next) => field.onChange(next)}\n size={segSize}\n wrap\n options={options.map((opt) => {\n const isDefault = opt.value === defaultChoice;\n const title = optionTitle(opt, isDefault);\n return {\n id: opt.value,\n label: opt.label,\n // x-enum-icons resolves to a runtime name string; SegmentedControl\n // renders that via <Icon name>. Non-string (pre-extension) icons are\n // dropped here since the segmented option type only takes name/component.\n ...(typeof opt.icon === \"string\" ? { icon: opt.icon } : {}),\n ...(opt.description ? { description: opt.description } : {}),\n ...(title ? { title } : {}),\n ...(isDefault ? { marker: DEFAULT_MARKER, implied: true } : {}),\n ...(readOnly ? { disabled: true } : {}),\n };\n })}\n />\n </div>\n );\n}\n\n// RadioGroupControl renders a small fixed enum as a segmented radio-button group\n// instead of a dropdown. It shares EnumControl's option list (any out-of-enum\n// value is already prepended, so a token still shows). One `radiogroup` role +\n// native radios keep it keyboard-navigable; the visible chip is a styled label\n// whose title is the option's description. The schema default carries a muted\n// \"default\" marker (the radio's accessible description) and, while the value is\n// unset, a dashed primary outline — distinct from the filled selection, and\n// never `checked`, because nothing is selected.\nexport function RadioGroupControl({ field, fieldId, readOnly, options, value, size }: EnumChoiceProps) {\n const defaultChoice = schemaDefaultChoice(field.schema, options);\n const impliedChoice = value === \"\" ? defaultChoice : undefined;\n return (\n <div\n role=\"radiogroup\"\n aria-label={field.label}\n id={fieldId}\n data-jsf-input\n className={cn(\n \"inline-flex flex-wrap items-center gap-1 rounded-md border border-input bg-background p-0.5\",\n field.inputClassName,\n )}\n >\n {options.map((opt) => {\n const checked = opt.value === value;\n const implied = opt.value === impliedChoice;\n const isDefault = opt.value === defaultChoice;\n const markerId = isDefault ? `${fieldId}-default` : undefined;\n return (\n <label\n key={opt.value}\n title={optionTitle(opt, isDefault)}\n data-implied={implied ? \"true\" : undefined}\n className={cn(\n \"inline-flex cursor-pointer select-none items-center rounded px-2.5 py-1\",\n labelSizeClass[size],\n checked\n ? \"bg-primary text-primary-foreground\"\n : implied\n ? \"text-foreground outline-dashed outline-1 -outline-offset-1 outline-primary/60 hover:bg-accent\"\n : \"text-muted-foreground hover:bg-accent hover:text-foreground\",\n readOnly && \"cursor-not-allowed opacity-60\",\n )}\n >\n <input\n type=\"radio\"\n name={fieldId}\n className=\"sr-only\"\n value={opt.value}\n checked={checked}\n disabled={readOnly}\n aria-describedby={markerId}\n onChange={() => field.onChange(opt.value)}\n />\n {opt.label}\n {isDefault && (\n <span id={markerId} aria-hidden=\"true\" className=\"ml-1.5 text-[11px] font-normal opacity-70\">\n {DEFAULT_MARKER}\n </span>\n )}\n </label>\n );\n })}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsonSchemaFormResolve = require("./json-schema-form-resolve.cjs");
4
+ const jsonSchemaFormListeners = require("./json-schema-form-listeners.cjs");
5
+ const jsonSchemaFormArrayView = require("./json-schema-form-array-view.cjs");
4
6
  const collections = require("../lib/collections.cjs");
5
7
  const jsonSchemaFormUtils = require("./json-schema-form-utils.cjs");
6
8
  const jsonSchemaFormFilter = require("./json-schema-form-filter.cjs");
@@ -21,30 +23,38 @@ function unmatchedFormErrors({
21
23
  value,
22
24
  errors,
23
25
  hiddenKeys,
26
+ viewOnly,
24
27
  hideReadOnlyFields,
25
28
  hideEmpty,
26
29
  fieldFilter,
27
30
  pre,
28
31
  rootValue = value,
29
- instancePath = ""
32
+ instancePath = "",
33
+ expressionEvaluator
30
34
  }) {
31
35
  const rendered = /* @__PURE__ */ new Set();
32
36
  collectObjectPaths(schema, value, instancePath, rendered, {
33
37
  hiddenKeys: new Set(hiddenKeys ?? []),
38
+ viewOnly,
34
39
  hideReadOnlyFields,
35
40
  hideEmpty,
36
41
  pre,
37
42
  rootValue,
38
43
  root: true,
39
- ...fieldFilter ? { fieldFilter } : {}
44
+ ...fieldFilter ? { fieldFilter } : {},
45
+ ...expressionEvaluator ? { expressionEvaluator } : {}
40
46
  });
41
47
  return errors.filter((error) => !rendered.has(error.instancePath));
42
48
  }
43
49
  function collectObjectPaths(schema, value, basePath, paths, options) {
44
- const { properties, required } = jsonSchemaFormResolve.effectiveProperties(schema, value);
50
+ const { properties, required } = jsonSchemaFormListeners.applyListenerState(schema, value, {
51
+ root: options.rootValue,
52
+ ...options.expressionEvaluator ? { evaluate: options.expressionEvaluator } : {}
53
+ });
45
54
  const discriminator = options.root && typeof schema["x-discriminator"] === "string" ? schema["x-discriminator"] : void 0;
46
55
  const pickerPhase = discriminator != null && (value[discriminator] == null || value[discriminator] === "");
47
56
  for (const [key, prop] of Object.entries(properties)) {
57
+ if (prop["x-hidden"]) continue;
48
58
  if (options.root && options.hiddenKeys.has(key)) continue;
49
59
  if (options.root && options.fieldFilter && !jsonSchemaFormFilter.matchesFieldFilter({ key, prop, filter: options.fieldFilter, value: value[key] })) {
50
60
  continue;
@@ -67,12 +77,19 @@ function collectObjectPaths(schema, value, basePath, paths, options) {
67
77
  options.pre
68
78
  );
69
79
  if (!field || options.hideReadOnlyFields && field.readOnly) continue;
80
+ if (omitsWriteOnly(field, options)) continue;
70
81
  if (options.hideEmpty && jsonSchemaFormUtils.isEmptyValue(field.value)) continue;
71
82
  const path = appendInstancePath(basePath, key);
72
83
  paths.add(path);
73
- collectControlPaths(field, path, paths, { ...options, root: false });
84
+ collectControlPaths(field, path, paths, { ...options, root: false, viewOnly: subtreeIsView(field, options) });
74
85
  }
75
86
  }
87
+ function omitsWriteOnly(field, options) {
88
+ return field.writeOnly === true && (options.viewOnly || field.readOnly === true);
89
+ }
90
+ function subtreeIsView(field, options) {
91
+ return options.viewOnly || field.readOnly === true;
92
+ }
76
93
  function applyPreExtensions(initial, prop, value, rootValue, extensions) {
77
94
  let field = initial;
78
95
  for (const extension of extensions) {
@@ -111,7 +128,14 @@ function collectArrayPaths(field, instancePath, paths, options) {
111
128
  return;
112
129
  }
113
130
  const itemSchema = field.itemSchema ?? { type: "string" };
114
- const table = field.layout === "table" && itemSchema.properties != null && Object.keys(itemSchema.properties).length > 0;
131
+ const table = field.arrayDisplay !== "stacked" && jsonSchemaFormUtils.hasObjectItemProperties(itemSchema) && jsonSchemaFormArrayView.defaultArrayView(field, {
132
+ hideReadOnlyFields: options.hideReadOnlyFields,
133
+ valueCells: subtreeIsView(field, options),
134
+ // Only picks stack vs inline — both item lists — so any mode will do.
135
+ layoutMode: "stacked",
136
+ rootValue: options.rootValue,
137
+ ...options.expressionEvaluator ? { evaluate: options.expressionEvaluator } : {}
138
+ }) === "grid";
115
139
  for (const [index, item] of (Array.isArray(field.value) ? field.value : []).entries()) {
116
140
  const itemPath = appendInstancePath(instancePath, index);
117
141
  if (table) {
@@ -124,20 +148,17 @@ function collectArrayPaths(field, instancePath, paths, options) {
124
148
  );
125
149
  continue;
126
150
  }
151
+ const itemField = jsonSchemaFormResolve.resolveControl({
152
+ key: `${field.key}[${index}]`,
153
+ prop: itemSchema,
154
+ required: false,
155
+ value: item,
156
+ onChange: () => {
157
+ }
158
+ });
159
+ if (omitsWriteOnly(itemField, options)) continue;
127
160
  paths.add(itemPath);
128
- collectControlPaths(
129
- jsonSchemaFormResolve.resolveControl({
130
- key: `${field.key}[${index}]`,
131
- prop: itemSchema,
132
- required: false,
133
- value: item,
134
- onChange: () => {
135
- }
136
- }),
137
- itemPath,
138
- paths,
139
- options
140
- );
161
+ collectControlPaths(itemField, itemPath, paths, { ...options, viewOnly: subtreeIsView(itemField, options) });
141
162
  }
142
163
  }
143
164
  function hasEnumItems(field) {
@@ -155,20 +176,17 @@ function collectMapPaths(field, instancePath, paths, options) {
155
176
  for (const key of keys) {
156
177
  const schema = known[key] ?? mapValueSchema(field, key);
157
178
  const path = appendInstancePath(instancePath, key);
179
+ const valueField = jsonSchemaFormResolve.resolveControl({
180
+ key,
181
+ prop: schema,
182
+ required: false,
183
+ value: value[key],
184
+ onChange: () => {
185
+ }
186
+ });
187
+ if (omitsWriteOnly(valueField, options)) continue;
158
188
  paths.add(path);
159
- collectControlPaths(
160
- jsonSchemaFormResolve.resolveControl({
161
- key,
162
- prop: schema,
163
- required: false,
164
- value: value[key],
165
- onChange: () => {
166
- }
167
- }),
168
- path,
169
- paths,
170
- options
171
- );
189
+ collectControlPaths(valueField, path, paths, { ...options, viewOnly: subtreeIsView(valueField, options) });
172
190
  }
173
191
  }
174
192
  function mapValueSchema(field, key) {
@@ -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 { 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 rootValue = value,\n instancePath = \"\",\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 rootValue?: Record<string, unknown>;\n instancePath?: string;\n}): JsonSchemaFormError[] {\n const rendered = new Set<string>();\n collectObjectPaths(schema, value, instancePath, rendered, {\n hiddenKeys: new Set(hiddenKeys ?? []),\n hideReadOnlyFields,\n hideEmpty,\n pre,\n rootValue,\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":";;;;;;AAgBO,SAAS,mBACd,MACA,OACQ;AACR,QAAM,UAAU,OAAO,KAAK,EAAE,WAAW,KAAK,IAAI,EAAE,WAAW,KAAK,IAAI;AACxE,SAAO,GAAG,IAAI,IAAI,OAAO;AAC3B;AAKO,SAAS,4BACd,QACA,cACQ;AACR,SAAO,OAAO;AAAA,IACZ,CAAC,UACC,MAAM,iBAAiB,gBACvB,MAAM,aAAa,WAAW,GAAG,YAAY,GAAG;AAAA,EAAA,EAClD;AACJ;AAEO,SAAS,qBACd,QACA,cACuB;AACvB,SAAO,OAAO,OAAO,CAAC,UAAU,MAAM,iBAAiB,YAAY;AACrE;AAEO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,eAAe;AACjB,GAW0B;AACxB,QAAM,+BAAe,IAAA;AACrB,qBAAmB,QAAQ,OAAO,cAAc,UAAU;AAAA,IACxD,YAAY,IAAI,IAAI,cAAc,EAAE;AAAA,IACpC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN,GAAI,cAAc,EAAE,gBAAgB,CAAA;AAAA,EAAC,CACtC;AACD,SAAO,OAAO,OAAO,CAAC,UAAU,CAAC,SAAS,IAAI,MAAM,YAAY,CAAC;AACnE;AAYA,SAAS,mBACP,QACA,OACA,UACA,OACA,SACA;AACA,QAAM,EAAE,YAAY,SAAA,IAAaA,sBAAAA,oBAAoB,QAAQ,KAAK;AAClE,QAAM,gBACJ,QAAQ,QAAQ,OAAO,OAAO,iBAAiB,MAAM,WACjD,OAAO,iBAAiB,IACxB;AACN,QAAM,cACJ,iBAAiB,SAChB,MAAM,aAAa,KAAK,QAAQ,MAAM,aAAa,MAAM;AAE5D,aAAW,CAAC,KAAK,IAAI,KAAK,OAAO,QAAQ,UAAU,GAAG;AACpD,QAAI,QAAQ,QAAQ,QAAQ,WAAW,IAAI,GAAG,EAAG;AACjD,QACE,QAAQ,QACR,QAAQ,eACR,CAACC,qBAAAA,mBAAmB,EAAE,KAAK,MAAM,QAAQ,QAAQ,aAAa,OAAO,MAAM,GAAG,EAAA,CAAG,GACjF;AACA;AAAA,IACF;AACA,QACE,kBACC,cAAc,QAAQ,gBAAgB,QAAQ,gBAC/C;AACA;AAAA,IACF;AAEA,UAAM,QAAQ;AAAA,MACZC,qCAAe;AAAA,QACb;AAAA,QACA;AAAA,QACA,UAAU,SAAS,SAAS,GAAG;AAAA,QAC/B,OAAO,MAAM,GAAG;AAAA,QAChB,UAAU,MAAM;AAAA,QAAC;AAAA,MAAA,CAClB;AAAA,MACD;AAAA,MACA,MAAM,GAAG;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ;AAAA,IAAA;AAEV,QAAI,CAAC,SAAU,QAAQ,sBAAsB,MAAM,SAAW;AAG9D,QAAI,QAAQ,aAAaC,oBAAAA,aAAa,MAAM,KAAK,EAAG;AAEpD,UAAM,OAAO,mBAAmB,UAAU,GAAG;AAC7C,UAAM,IAAI,IAAI;AACd,wBAAoB,OAAO,MAAM,OAAO,EAAE,GAAG,SAAS,MAAM,OAAO;AAAA,EACrE;AACF;AAEA,SAAS,mBACP,SACA,MACA,OACA,WACA,YACqB;AACrB,MAAI,QAA6B;AACjC,aAAW,aAAa,YAAY;AAClC,QAAI,CAAC,MAAO,QAAO;AACnB,YAAQ,UAAU,OAAO;AAAA,MACvB,KAAK,MAAM;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EACH;AACA,SAAO;AACT;AAEA,SAAS,oBACP,OACA,cACA,OACA,SACA;AACA,MAAI,MAAM,SAAS,UAAU;AAC3B;AAAA,MACE,MAAM;AAAA,MACNC,YAAAA,cAAc,MAAM,KAAK,IAAI,MAAM,QAAQ,CAAA;AAAA,MAC3C;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAEF;AAAA,EACF;AACA,MAAI,MAAM,SAAS,SAAS;AAC1B,sBAAkB,OAAO,cAAc,OAAO,OAAO;AACrD;AAAA,EACF;AACA,MAAI,MAAM,SAAS,cAAc;AAC/B,oBAAgB,OAAO,cAAc,OAAO,OAAO;AAAA,EACrD;AACF;AAEA,SAAS,kBACP,OACA,cACA,OACA,SACA;AAKA,MAAI,MAAM,iBAAiB,eAAgB;AAC3C,MACE,MAAM,iBAAiB,cACtB,aAAa,KAAK,KAAKC,sCAAgB,MAAM,UAAU,IACxD;AACA;AAAA,EACF;AAEA,QAAM,aAAa,MAAM,cAAc,EAAE,MAAM,SAAA;AAC/C,QAAM,QACJ,MAAM,WAAW,WACjB,WAAW,cAAc,QACzB,OAAO,KAAK,WAAW,UAAU,EAAE,SAAS;AAC9C,aAAW,CAAC,OAAO,IAAI,MAAM,MAAM,QAAQ,MAAM,KAAK,IAClD,MAAM,QACN,CAAA,GACF,WAAW;AACX,UAAM,WAAW,mBAAmB,cAAc,KAAK;AACvD,QAAI,OAAO;AACT;AAAA,QACE;AAAA,QACAD,0BAAc,IAAI,IAAI,OAAO,CAAA;AAAA,QAC7B;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAEF;AAAA,IACF;AACA,UAAM,IAAI,QAAQ;AAClB;AAAA,MACEF,qCAAe;AAAA,QACb,KAAK,GAAG,MAAM,GAAG,IAAI,KAAK;AAAA,QAC1B,MAAM;AAAA,QACN,UAAU;AAAA,QACV,OAAO;AAAA,QACP,UAAU,MAAM;AAAA,QAAC;AAAA,MAAA,CAClB;AAAA,MACD;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACF;AAIA,SAAS,aAAa,OAA8B;;AAClD,MAAI,MAAM,WAAW,MAAM,QAAQ,SAAS,EAAG,QAAO;AACtD,SAAO,MAAM,SAAQ,WAAM,eAAN,mBAAkB,IAAI,KAAK,MAAM,WAAW,KAAK,SAAS;AACjF;AAEA,SAAS,gBACP,OACA,cACA,OACA,SACA;AACA,QAAM,QAAQE,YAAAA,cAAc,MAAM,KAAK,IAAI,MAAM,QAAQ,CAAA;AACzD,QAAM,QAAQ,MAAM,mBAAmB,CAAA;AACvC,QAAM,OAAO;AAAA,IACX,GAAG,OAAO,KAAK,KAAK;AAAA,IACpB,GAAG,OAAO,KAAK,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,MAAM;AAAA,EAAA;AAEvD,aAAW,OAAO,MAAM;AACtB,UAAM,SAAS,MAAM,GAAG,KAAK,eAAe,OAAO,GAAG;AACtD,UAAM,OAAO,mBAAmB,cAAc,GAAG;AACjD,UAAM,IAAI,IAAI;AACd;AAAA,MACEF,qCAAe;AAAA,QACb;AAAA,QACA,MAAM;AAAA,QACN,UAAU;AAAA,QACV,OAAO,MAAM,GAAG;AAAA,QAChB,UAAU,MAAM;AAAA,QAAC;AAAA,MAAA,CAClB;AAAA,MACD;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACF;AAEA,SAAS,eAAe,OAAqB,KAAiC;AAC5E,aAAW,SAAS,MAAM,uBAAuB,CAAA,GAAI;AACnD,QAAI;AACF,UAAI,IAAI,OAAO,MAAM,OAAO,EAAE,KAAK,GAAG,EAAG,QAAO,MAAM;AAAA,IACxD,QAAQ;AACN;AAAA,IACF;AAAA,EACF;AACA,SAAO,MAAM,eAAe,EAAE,MAAM,SAAA;AACtC;;;;;"}
1
+ {"version":3,"file":"json-schema-form-errors.cjs","sources":["../../src/components/json-schema-form-errors.ts"],"sourcesContent":["import {\n resolveControl,\n scalarItemsType,\n} from \"./json-schema-form-resolve\";\nimport { applyListenerState } from \"./json-schema-form-listeners\";\nimport { defaultArrayView } from \"./json-schema-form-array-view\";\nimport { isPlainObject } from \"../lib/collections\";\nimport { hasObjectItemProperties, 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 ExpressionEvaluator,\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 viewOnly,\n hideReadOnlyFields,\n hideEmpty,\n fieldFilter,\n pre,\n rootValue = value,\n instancePath = \"\",\n expressionEvaluator,\n}: {\n schema: JsonSchemaObject;\n value: Record<string, unknown>;\n errors: JsonSchemaFormError[];\n hiddenKeys?: string[];\n // The form-level `readOnly` prop: a read-only form is a view, which omits\n // writeOnly fields, so their errors cannot be shown on them.\n viewOnly: boolean;\n hideReadOnlyFields: boolean;\n hideEmpty: boolean;\n fieldFilter?: string;\n pre: PreExtension[];\n rootValue?: Record<string, unknown>;\n instancePath?: string;\n expressionEvaluator?: ExpressionEvaluator;\n}): JsonSchemaFormError[] {\n const rendered = new Set<string>();\n collectObjectPaths(schema, value, instancePath, rendered, {\n hiddenKeys: new Set(hiddenKeys ?? []),\n viewOnly,\n hideReadOnlyFields,\n hideEmpty,\n pre,\n rootValue,\n root: true,\n ...(fieldFilter ? { fieldFilter } : {}),\n ...(expressionEvaluator ? { expressionEvaluator } : {}),\n });\n return errors.filter((error) => !rendered.has(error.instancePath));\n}\n\ninterface CollectOptions {\n hiddenKeys: Set<string>;\n // Mirrors RenderContext.viewOnly: the form is read-only, or an ancestor\n // field is readOnly.\n viewOnly: boolean;\n hideReadOnlyFields: boolean;\n hideEmpty: boolean;\n fieldFilter?: string;\n pre: PreExtension[];\n rootValue: Record<string, unknown>;\n root: boolean;\n expressionEvaluator?: ExpressionEvaluator;\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 } = applyListenerState(schema, value, {\n root: options.rootValue,\n ...(options.expressionEvaluator ? { evaluate: options.expressionEvaluator } : {}),\n });\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 // Mirrors buildField: a hidden field renders nothing to hang an error on.\n if (prop[\"x-hidden\"]) continue;\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 (omitsWriteOnly(field, options)) continue;\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, viewOnly: subtreeIsView(field, options) });\n }\n}\n\n// Mirrors buildField: a writeOnly value is never shown in a view, nor by a\n// field that is itself readOnly.\nfunction omitsWriteOnly(field: FieldControl, options: CollectOptions): boolean {\n return field.writeOnly === true && (options.viewOnly || field.readOnly === true);\n}\n\n// Mirrors buildField: a readOnly field's subtree is a view.\nfunction subtreeIsView(field: FieldControl, options: CollectOptions): boolean {\n return options.viewOnly || field.readOnly === true;\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 // A grid has no row header to hang an item-level message on. The view is\n // the one the array opens in; a later switch through its view menu is\n // local UI state this pure walk cannot see.\n const table =\n field.arrayDisplay !== \"stacked\" &&\n hasObjectItemProperties(itemSchema) &&\n defaultArrayView(field, {\n hideReadOnlyFields: options.hideReadOnlyFields,\n valueCells: subtreeIsView(field, options),\n // Only picks stack vs inline — both item lists — so any mode will do.\n layoutMode: \"stacked\",\n rootValue: options.rootValue,\n ...(options.expressionEvaluator ? { evaluate: options.expressionEvaluator } : {}),\n }) === \"grid\";\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 const itemField = resolveControl({\n key: `${field.key}[${index}]`,\n prop: itemSchema,\n required: false,\n value: item,\n onChange: () => {},\n });\n if (omitsWriteOnly(itemField, options)) continue;\n paths.add(itemPath);\n collectControlPaths(itemField, itemPath, paths, { ...options, viewOnly: subtreeIsView(itemField, options) });\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 const valueField = resolveControl({\n key,\n prop: schema,\n required: false,\n value: value[key],\n onChange: () => {},\n });\n if (omitsWriteOnly(valueField, options)) continue;\n paths.add(path);\n collectControlPaths(valueField, path, paths, { ...options, viewOnly: subtreeIsView(valueField, options) });\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":["applyListenerState","matchesFieldFilter","resolveControl","isEmptyValue","isPlainObject","scalarItemsType","hasObjectItemProperties","defaultArrayView"],"mappings":"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"}
@@ -1,18 +1,20 @@
1
1
  import { JsonSchemaFormError } from './json-schema-form-error-types.js';
2
- import { JsonSchemaObject, PreExtension } from './json-schema-form-types.js';
2
+ import { ExpressionEvaluator, JsonSchemaObject, PreExtension } from './json-schema-form-types.js';
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, hideEmpty, fieldFilter, pre, rootValue, instancePath, }: {
6
+ export declare function unmatchedFormErrors({ schema, value, errors, hiddenKeys, viewOnly, hideReadOnlyFields, hideEmpty, fieldFilter, pre, rootValue, instancePath, expressionEvaluator, }: {
7
7
  schema: JsonSchemaObject;
8
8
  value: Record<string, unknown>;
9
9
  errors: JsonSchemaFormError[];
10
10
  hiddenKeys?: string[];
11
+ viewOnly: boolean;
11
12
  hideReadOnlyFields: boolean;
12
13
  hideEmpty: boolean;
13
14
  fieldFilter?: string;
14
15
  pre: PreExtension[];
15
16
  rootValue?: Record<string, unknown>;
16
17
  instancePath?: string;
18
+ expressionEvaluator?: ExpressionEvaluator;
17
19
  }): JsonSchemaFormError[];
18
20
  //# sourceMappingURL=json-schema-form-errors.d.ts.map
@@ -1 +1 @@
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,EACH,SAAiB,EACjB,YAAiB,GAClB,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;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,mBAAmB,EAAE,CAYxB"}
1
+ {"version":3,"file":"json-schema-form-errors.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-errors.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,KAAK,EACV,mBAAmB,EAEnB,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,QAAQ,EACR,kBAAkB,EAClB,SAAS,EACT,WAAW,EACX,GAAG,EACH,SAAiB,EACjB,YAAiB,EACjB,mBAAmB,GACpB,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;IAGtB,QAAQ,EAAE,OAAO,CAAC;IAClB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,YAAY,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC3C,GAAG,mBAAmB,EAAE,CAcxB"}
@@ -1,6 +1,8 @@
1
- import { effectiveProperties, resolveControl, scalarItemsType } from "./json-schema-form-resolve.js";
1
+ import { resolveControl, scalarItemsType } from "./json-schema-form-resolve.js";
2
+ import { applyListenerState } from "./json-schema-form-listeners.js";
3
+ import { defaultArrayView } from "./json-schema-form-array-view.js";
2
4
  import { isPlainObject } from "../lib/collections.js";
3
- import { isEmptyValue } from "./json-schema-form-utils.js";
5
+ import { isEmptyValue, hasObjectItemProperties } from "./json-schema-form-utils.js";
4
6
  import { matchesFieldFilter } from "./json-schema-form-filter.js";
5
7
  function appendInstancePath(base, token) {
6
8
  const escaped = String(token).replaceAll("~", "~0").replaceAll("/", "~1");
@@ -19,30 +21,38 @@ function unmatchedFormErrors({
19
21
  value,
20
22
  errors,
21
23
  hiddenKeys,
24
+ viewOnly,
22
25
  hideReadOnlyFields,
23
26
  hideEmpty,
24
27
  fieldFilter,
25
28
  pre,
26
29
  rootValue = value,
27
- instancePath = ""
30
+ instancePath = "",
31
+ expressionEvaluator
28
32
  }) {
29
33
  const rendered = /* @__PURE__ */ new Set();
30
34
  collectObjectPaths(schema, value, instancePath, rendered, {
31
35
  hiddenKeys: new Set(hiddenKeys ?? []),
36
+ viewOnly,
32
37
  hideReadOnlyFields,
33
38
  hideEmpty,
34
39
  pre,
35
40
  rootValue,
36
41
  root: true,
37
- ...fieldFilter ? { fieldFilter } : {}
42
+ ...fieldFilter ? { fieldFilter } : {},
43
+ ...expressionEvaluator ? { expressionEvaluator } : {}
38
44
  });
39
45
  return errors.filter((error) => !rendered.has(error.instancePath));
40
46
  }
41
47
  function collectObjectPaths(schema, value, basePath, paths, options) {
42
- const { properties, required } = effectiveProperties(schema, value);
48
+ const { properties, required } = applyListenerState(schema, value, {
49
+ root: options.rootValue,
50
+ ...options.expressionEvaluator ? { evaluate: options.expressionEvaluator } : {}
51
+ });
43
52
  const discriminator = options.root && typeof schema["x-discriminator"] === "string" ? schema["x-discriminator"] : void 0;
44
53
  const pickerPhase = discriminator != null && (value[discriminator] == null || value[discriminator] === "");
45
54
  for (const [key, prop] of Object.entries(properties)) {
55
+ if (prop["x-hidden"]) continue;
46
56
  if (options.root && options.hiddenKeys.has(key)) continue;
47
57
  if (options.root && options.fieldFilter && !matchesFieldFilter({ key, prop, filter: options.fieldFilter, value: value[key] })) {
48
58
  continue;
@@ -65,12 +75,19 @@ function collectObjectPaths(schema, value, basePath, paths, options) {
65
75
  options.pre
66
76
  );
67
77
  if (!field || options.hideReadOnlyFields && field.readOnly) continue;
78
+ if (omitsWriteOnly(field, options)) continue;
68
79
  if (options.hideEmpty && isEmptyValue(field.value)) continue;
69
80
  const path = appendInstancePath(basePath, key);
70
81
  paths.add(path);
71
- collectControlPaths(field, path, paths, { ...options, root: false });
82
+ collectControlPaths(field, path, paths, { ...options, root: false, viewOnly: subtreeIsView(field, options) });
72
83
  }
73
84
  }
85
+ function omitsWriteOnly(field, options) {
86
+ return field.writeOnly === true && (options.viewOnly || field.readOnly === true);
87
+ }
88
+ function subtreeIsView(field, options) {
89
+ return options.viewOnly || field.readOnly === true;
90
+ }
74
91
  function applyPreExtensions(initial, prop, value, rootValue, extensions) {
75
92
  let field = initial;
76
93
  for (const extension of extensions) {
@@ -109,7 +126,14 @@ function collectArrayPaths(field, instancePath, paths, options) {
109
126
  return;
110
127
  }
111
128
  const itemSchema = field.itemSchema ?? { type: "string" };
112
- const table = field.layout === "table" && itemSchema.properties != null && Object.keys(itemSchema.properties).length > 0;
129
+ const table = field.arrayDisplay !== "stacked" && hasObjectItemProperties(itemSchema) && defaultArrayView(field, {
130
+ hideReadOnlyFields: options.hideReadOnlyFields,
131
+ valueCells: subtreeIsView(field, options),
132
+ // Only picks stack vs inline — both item lists — so any mode will do.
133
+ layoutMode: "stacked",
134
+ rootValue: options.rootValue,
135
+ ...options.expressionEvaluator ? { evaluate: options.expressionEvaluator } : {}
136
+ }) === "grid";
113
137
  for (const [index, item] of (Array.isArray(field.value) ? field.value : []).entries()) {
114
138
  const itemPath = appendInstancePath(instancePath, index);
115
139
  if (table) {
@@ -122,20 +146,17 @@ function collectArrayPaths(field, instancePath, paths, options) {
122
146
  );
123
147
  continue;
124
148
  }
149
+ const itemField = resolveControl({
150
+ key: `${field.key}[${index}]`,
151
+ prop: itemSchema,
152
+ required: false,
153
+ value: item,
154
+ onChange: () => {
155
+ }
156
+ });
157
+ if (omitsWriteOnly(itemField, options)) continue;
125
158
  paths.add(itemPath);
126
- collectControlPaths(
127
- resolveControl({
128
- key: `${field.key}[${index}]`,
129
- prop: itemSchema,
130
- required: false,
131
- value: item,
132
- onChange: () => {
133
- }
134
- }),
135
- itemPath,
136
- paths,
137
- options
138
- );
159
+ collectControlPaths(itemField, itemPath, paths, { ...options, viewOnly: subtreeIsView(itemField, options) });
139
160
  }
140
161
  }
141
162
  function hasEnumItems(field) {
@@ -153,20 +174,17 @@ function collectMapPaths(field, instancePath, paths, options) {
153
174
  for (const key of keys) {
154
175
  const schema = known[key] ?? mapValueSchema(field, key);
155
176
  const path = appendInstancePath(instancePath, key);
177
+ const valueField = resolveControl({
178
+ key,
179
+ prop: schema,
180
+ required: false,
181
+ value: value[key],
182
+ onChange: () => {
183
+ }
184
+ });
185
+ if (omitsWriteOnly(valueField, options)) continue;
156
186
  paths.add(path);
157
- collectControlPaths(
158
- resolveControl({
159
- key,
160
- prop: schema,
161
- required: false,
162
- value: value[key],
163
- onChange: () => {
164
- }
165
- }),
166
- path,
167
- paths,
168
- options
169
- );
187
+ collectControlPaths(valueField, path, paths, { ...options, viewOnly: subtreeIsView(valueField, options) });
170
188
  }
171
189
  }
172
190
  function mapValueSchema(field, key) {
@@ -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 { 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 rootValue = value,\n instancePath = \"\",\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 rootValue?: Record<string, unknown>;\n instancePath?: string;\n}): JsonSchemaFormError[] {\n const rendered = new Set<string>();\n collectObjectPaths(schema, value, instancePath, rendered, {\n hiddenKeys: new Set(hiddenKeys ?? []),\n hideReadOnlyFields,\n hideEmpty,\n pre,\n rootValue,\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":";;;;AAgBO,SAAS,mBACd,MACA,OACQ;AACR,QAAM,UAAU,OAAO,KAAK,EAAE,WAAW,KAAK,IAAI,EAAE,WAAW,KAAK,IAAI;AACxE,SAAO,GAAG,IAAI,IAAI,OAAO;AAC3B;AAKO,SAAS,4BACd,QACA,cACQ;AACR,SAAO,OAAO;AAAA,IACZ,CAAC,UACC,MAAM,iBAAiB,gBACvB,MAAM,aAAa,WAAW,GAAG,YAAY,GAAG;AAAA,EAAA,EAClD;AACJ;AAEO,SAAS,qBACd,QACA,cACuB;AACvB,SAAO,OAAO,OAAO,CAAC,UAAU,MAAM,iBAAiB,YAAY;AACrE;AAEO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,eAAe;AACjB,GAW0B;AACxB,QAAM,+BAAe,IAAA;AACrB,qBAAmB,QAAQ,OAAO,cAAc,UAAU;AAAA,IACxD,YAAY,IAAI,IAAI,cAAc,EAAE;AAAA,IACpC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN,GAAI,cAAc,EAAE,gBAAgB,CAAA;AAAA,EAAC,CACtC;AACD,SAAO,OAAO,OAAO,CAAC,UAAU,CAAC,SAAS,IAAI,MAAM,YAAY,CAAC;AACnE;AAYA,SAAS,mBACP,QACA,OACA,UACA,OACA,SACA;AACA,QAAM,EAAE,YAAY,SAAA,IAAa,oBAAoB,QAAQ,KAAK;AAClE,QAAM,gBACJ,QAAQ,QAAQ,OAAO,OAAO,iBAAiB,MAAM,WACjD,OAAO,iBAAiB,IACxB;AACN,QAAM,cACJ,iBAAiB,SAChB,MAAM,aAAa,KAAK,QAAQ,MAAM,aAAa,MAAM;AAE5D,aAAW,CAAC,KAAK,IAAI,KAAK,OAAO,QAAQ,UAAU,GAAG;AACpD,QAAI,QAAQ,QAAQ,QAAQ,WAAW,IAAI,GAAG,EAAG;AACjD,QACE,QAAQ,QACR,QAAQ,eACR,CAAC,mBAAmB,EAAE,KAAK,MAAM,QAAQ,QAAQ,aAAa,OAAO,MAAM,GAAG,EAAA,CAAG,GACjF;AACA;AAAA,IACF;AACA,QACE,kBACC,cAAc,QAAQ,gBAAgB,QAAQ,gBAC/C;AACA;AAAA,IACF;AAEA,UAAM,QAAQ;AAAA,MACZ,eAAe;AAAA,QACb;AAAA,QACA;AAAA,QACA,UAAU,SAAS,SAAS,GAAG;AAAA,QAC/B,OAAO,MAAM,GAAG;AAAA,QAChB,UAAU,MAAM;AAAA,QAAC;AAAA,MAAA,CAClB;AAAA,MACD;AAAA,MACA,MAAM,GAAG;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ;AAAA,IAAA;AAEV,QAAI,CAAC,SAAU,QAAQ,sBAAsB,MAAM,SAAW;AAG9D,QAAI,QAAQ,aAAa,aAAa,MAAM,KAAK,EAAG;AAEpD,UAAM,OAAO,mBAAmB,UAAU,GAAG;AAC7C,UAAM,IAAI,IAAI;AACd,wBAAoB,OAAO,MAAM,OAAO,EAAE,GAAG,SAAS,MAAM,OAAO;AAAA,EACrE;AACF;AAEA,SAAS,mBACP,SACA,MACA,OACA,WACA,YACqB;AACrB,MAAI,QAA6B;AACjC,aAAW,aAAa,YAAY;AAClC,QAAI,CAAC,MAAO,QAAO;AACnB,YAAQ,UAAU,OAAO;AAAA,MACvB,KAAK,MAAM;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EACH;AACA,SAAO;AACT;AAEA,SAAS,oBACP,OACA,cACA,OACA,SACA;AACA,MAAI,MAAM,SAAS,UAAU;AAC3B;AAAA,MACE,MAAM;AAAA,MACN,cAAc,MAAM,KAAK,IAAI,MAAM,QAAQ,CAAA;AAAA,MAC3C;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAEF;AAAA,EACF;AACA,MAAI,MAAM,SAAS,SAAS;AAC1B,sBAAkB,OAAO,cAAc,OAAO,OAAO;AACrD;AAAA,EACF;AACA,MAAI,MAAM,SAAS,cAAc;AAC/B,oBAAgB,OAAO,cAAc,OAAO,OAAO;AAAA,EACrD;AACF;AAEA,SAAS,kBACP,OACA,cACA,OACA,SACA;AAKA,MAAI,MAAM,iBAAiB,eAAgB;AAC3C,MACE,MAAM,iBAAiB,cACtB,aAAa,KAAK,KAAK,gBAAgB,MAAM,UAAU,IACxD;AACA;AAAA,EACF;AAEA,QAAM,aAAa,MAAM,cAAc,EAAE,MAAM,SAAA;AAC/C,QAAM,QACJ,MAAM,WAAW,WACjB,WAAW,cAAc,QACzB,OAAO,KAAK,WAAW,UAAU,EAAE,SAAS;AAC9C,aAAW,CAAC,OAAO,IAAI,MAAM,MAAM,QAAQ,MAAM,KAAK,IAClD,MAAM,QACN,CAAA,GACF,WAAW;AACX,UAAM,WAAW,mBAAmB,cAAc,KAAK;AACvD,QAAI,OAAO;AACT;AAAA,QACE;AAAA,QACA,cAAc,IAAI,IAAI,OAAO,CAAA;AAAA,QAC7B;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAEF;AAAA,IACF;AACA,UAAM,IAAI,QAAQ;AAClB;AAAA,MACE,eAAe;AAAA,QACb,KAAK,GAAG,MAAM,GAAG,IAAI,KAAK;AAAA,QAC1B,MAAM;AAAA,QACN,UAAU;AAAA,QACV,OAAO;AAAA,QACP,UAAU,MAAM;AAAA,QAAC;AAAA,MAAA,CAClB;AAAA,MACD;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACF;AAIA,SAAS,aAAa,OAA8B;;AAClD,MAAI,MAAM,WAAW,MAAM,QAAQ,SAAS,EAAG,QAAO;AACtD,SAAO,MAAM,SAAQ,WAAM,eAAN,mBAAkB,IAAI,KAAK,MAAM,WAAW,KAAK,SAAS;AACjF;AAEA,SAAS,gBACP,OACA,cACA,OACA,SACA;AACA,QAAM,QAAQ,cAAc,MAAM,KAAK,IAAI,MAAM,QAAQ,CAAA;AACzD,QAAM,QAAQ,MAAM,mBAAmB,CAAA;AACvC,QAAM,OAAO;AAAA,IACX,GAAG,OAAO,KAAK,KAAK;AAAA,IACpB,GAAG,OAAO,KAAK,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,MAAM;AAAA,EAAA;AAEvD,aAAW,OAAO,MAAM;AACtB,UAAM,SAAS,MAAM,GAAG,KAAK,eAAe,OAAO,GAAG;AACtD,UAAM,OAAO,mBAAmB,cAAc,GAAG;AACjD,UAAM,IAAI,IAAI;AACd;AAAA,MACE,eAAe;AAAA,QACb;AAAA,QACA,MAAM;AAAA,QACN,UAAU;AAAA,QACV,OAAO,MAAM,GAAG;AAAA,QAChB,UAAU,MAAM;AAAA,QAAC;AAAA,MAAA,CAClB;AAAA,MACD;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACF;AAEA,SAAS,eAAe,OAAqB,KAAiC;AAC5E,aAAW,SAAS,MAAM,uBAAuB,CAAA,GAAI;AACnD,QAAI;AACF,UAAI,IAAI,OAAO,MAAM,OAAO,EAAE,KAAK,GAAG,EAAG,QAAO,MAAM;AAAA,IACxD,QAAQ;AACN;AAAA,IACF;AAAA,EACF;AACA,SAAO,MAAM,eAAe,EAAE,MAAM,SAAA;AACtC;"}
1
+ {"version":3,"file":"json-schema-form-errors.js","sources":["../../src/components/json-schema-form-errors.ts"],"sourcesContent":["import {\n resolveControl,\n scalarItemsType,\n} from \"./json-schema-form-resolve\";\nimport { applyListenerState } from \"./json-schema-form-listeners\";\nimport { defaultArrayView } from \"./json-schema-form-array-view\";\nimport { isPlainObject } from \"../lib/collections\";\nimport { hasObjectItemProperties, 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 ExpressionEvaluator,\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 viewOnly,\n hideReadOnlyFields,\n hideEmpty,\n fieldFilter,\n pre,\n rootValue = value,\n instancePath = \"\",\n expressionEvaluator,\n}: {\n schema: JsonSchemaObject;\n value: Record<string, unknown>;\n errors: JsonSchemaFormError[];\n hiddenKeys?: string[];\n // The form-level `readOnly` prop: a read-only form is a view, which omits\n // writeOnly fields, so their errors cannot be shown on them.\n viewOnly: boolean;\n hideReadOnlyFields: boolean;\n hideEmpty: boolean;\n fieldFilter?: string;\n pre: PreExtension[];\n rootValue?: Record<string, unknown>;\n instancePath?: string;\n expressionEvaluator?: ExpressionEvaluator;\n}): JsonSchemaFormError[] {\n const rendered = new Set<string>();\n collectObjectPaths(schema, value, instancePath, rendered, {\n hiddenKeys: new Set(hiddenKeys ?? []),\n viewOnly,\n hideReadOnlyFields,\n hideEmpty,\n pre,\n rootValue,\n root: true,\n ...(fieldFilter ? { fieldFilter } : {}),\n ...(expressionEvaluator ? { expressionEvaluator } : {}),\n });\n return errors.filter((error) => !rendered.has(error.instancePath));\n}\n\ninterface CollectOptions {\n hiddenKeys: Set<string>;\n // Mirrors RenderContext.viewOnly: the form is read-only, or an ancestor\n // field is readOnly.\n viewOnly: boolean;\n hideReadOnlyFields: boolean;\n hideEmpty: boolean;\n fieldFilter?: string;\n pre: PreExtension[];\n rootValue: Record<string, unknown>;\n root: boolean;\n expressionEvaluator?: ExpressionEvaluator;\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 } = applyListenerState(schema, value, {\n root: options.rootValue,\n ...(options.expressionEvaluator ? { evaluate: options.expressionEvaluator } : {}),\n });\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 // Mirrors buildField: a hidden field renders nothing to hang an error on.\n if (prop[\"x-hidden\"]) continue;\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 (omitsWriteOnly(field, options)) continue;\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, viewOnly: subtreeIsView(field, options) });\n }\n}\n\n// Mirrors buildField: a writeOnly value is never shown in a view, nor by a\n// field that is itself readOnly.\nfunction omitsWriteOnly(field: FieldControl, options: CollectOptions): boolean {\n return field.writeOnly === true && (options.viewOnly || field.readOnly === true);\n}\n\n// Mirrors buildField: a readOnly field's subtree is a view.\nfunction subtreeIsView(field: FieldControl, options: CollectOptions): boolean {\n return options.viewOnly || field.readOnly === true;\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 // A grid has no row header to hang an item-level message on. The view is\n // the one the array opens in; a later switch through its view menu is\n // local UI state this pure walk cannot see.\n const table =\n field.arrayDisplay !== \"stacked\" &&\n hasObjectItemProperties(itemSchema) &&\n defaultArrayView(field, {\n hideReadOnlyFields: options.hideReadOnlyFields,\n valueCells: subtreeIsView(field, options),\n // Only picks stack vs inline — both item lists — so any mode will do.\n layoutMode: \"stacked\",\n rootValue: options.rootValue,\n ...(options.expressionEvaluator ? { evaluate: options.expressionEvaluator } : {}),\n }) === \"grid\";\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 const itemField = resolveControl({\n key: `${field.key}[${index}]`,\n prop: itemSchema,\n required: false,\n value: item,\n onChange: () => {},\n });\n if (omitsWriteOnly(itemField, options)) continue;\n paths.add(itemPath);\n collectControlPaths(itemField, itemPath, paths, { ...options, viewOnly: subtreeIsView(itemField, options) });\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 const valueField = resolveControl({\n key,\n prop: schema,\n required: false,\n value: value[key],\n onChange: () => {},\n });\n if (omitsWriteOnly(valueField, options)) continue;\n paths.add(path);\n collectControlPaths(valueField, path, paths, { ...options, viewOnly: subtreeIsView(valueField, options) });\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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"}