@flanksource/clicky-ui 0.3.40 → 0.3.41

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 (342) hide show
  1. package/README.md +24 -0
  2. package/dist/ai.cjs +10 -0
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +10 -0
  5. package/dist/ai.js.map +1 -1
  6. package/dist/components/AccordionList.cjs +5 -1
  7. package/dist/components/AccordionList.cjs.map +1 -1
  8. package/dist/components/AccordionList.d.ts +3 -1
  9. package/dist/components/AccordionList.d.ts.map +1 -1
  10. package/dist/components/AccordionList.js +5 -1
  11. package/dist/components/AccordionList.js.map +1 -1
  12. package/dist/components/JsonSchemaForm.cjs +9 -4
  13. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  14. package/dist/components/JsonSchemaForm.d.ts +1 -1
  15. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  16. package/dist/components/JsonSchemaForm.js +8 -3
  17. package/dist/components/JsonSchemaForm.js.map +1 -1
  18. package/dist/components/json-schema-form-accordion-array.cjs +3 -1
  19. package/dist/components/json-schema-form-accordion-array.cjs.map +1 -1
  20. package/dist/components/json-schema-form-accordion-array.d.ts +4 -1
  21. package/dist/components/json-schema-form-accordion-array.d.ts.map +1 -1
  22. package/dist/components/json-schema-form-accordion-array.js +3 -1
  23. package/dist/components/json-schema-form-accordion-array.js.map +1 -1
  24. package/dist/components/json-schema-form-array-view.cjs +63 -0
  25. package/dist/components/json-schema-form-array-view.cjs.map +1 -0
  26. package/dist/components/json-schema-form-array-view.d.ts +21 -0
  27. package/dist/components/json-schema-form-array-view.d.ts.map +1 -0
  28. package/dist/components/json-schema-form-array-view.js +63 -0
  29. package/dist/components/json-schema-form-array-view.js.map +1 -0
  30. package/dist/components/json-schema-form-array.cjs +3 -7
  31. package/dist/components/json-schema-form-array.cjs.map +1 -1
  32. package/dist/components/json-schema-form-array.d.ts.map +1 -1
  33. package/dist/components/json-schema-form-array.js +3 -7
  34. package/dist/components/json-schema-form-array.js.map +1 -1
  35. package/dist/components/json-schema-form-conditionals.cjs +67 -0
  36. package/dist/components/json-schema-form-conditionals.cjs.map +1 -0
  37. package/dist/components/json-schema-form-conditionals.d.ts +9 -0
  38. package/dist/components/json-schema-form-conditionals.d.ts.map +1 -0
  39. package/dist/components/json-schema-form-conditionals.js +67 -0
  40. package/dist/components/json-schema-form-conditionals.js.map +1 -0
  41. package/dist/components/json-schema-form-defaults.cjs +68 -0
  42. package/dist/components/json-schema-form-defaults.cjs.map +1 -0
  43. package/dist/components/json-schema-form-defaults.d.ts +4 -0
  44. package/dist/components/json-schema-form-defaults.d.ts.map +1 -0
  45. package/dist/components/json-schema-form-defaults.js +68 -0
  46. package/dist/components/json-schema-form-defaults.js.map +1 -0
  47. package/dist/components/json-schema-form-errors.cjs +49 -31
  48. package/dist/components/json-schema-form-errors.cjs.map +1 -1
  49. package/dist/components/json-schema-form-errors.d.ts +4 -2
  50. package/dist/components/json-schema-form-errors.d.ts.map +1 -1
  51. package/dist/components/json-schema-form-errors.js +51 -33
  52. package/dist/components/json-schema-form-errors.js.map +1 -1
  53. package/dist/components/json-schema-form-filter.cjs +2 -1
  54. package/dist/components/json-schema-form-filter.cjs.map +1 -1
  55. package/dist/components/json-schema-form-filter.js +2 -1
  56. package/dist/components/json-schema-form-filter.js.map +1 -1
  57. package/dist/components/json-schema-form-item-summary.cjs +6 -2
  58. package/dist/components/json-schema-form-item-summary.cjs.map +1 -1
  59. package/dist/components/json-schema-form-item-summary.d.ts.map +1 -1
  60. package/dist/components/json-schema-form-item-summary.js +6 -2
  61. package/dist/components/json-schema-form-item-summary.js.map +1 -1
  62. package/dist/components/json-schema-form-layout.cjs +28 -19
  63. package/dist/components/json-schema-form-layout.cjs.map +1 -1
  64. package/dist/components/json-schema-form-layout.d.ts +8 -6
  65. package/dist/components/json-schema-form-layout.d.ts.map +1 -1
  66. package/dist/components/json-schema-form-layout.js +29 -20
  67. package/dist/components/json-schema-form-layout.js.map +1 -1
  68. package/dist/components/json-schema-form-listener-paths.cjs +52 -0
  69. package/dist/components/json-schema-form-listener-paths.cjs.map +1 -0
  70. package/dist/components/json-schema-form-listener-paths.d.ts +10 -0
  71. package/dist/components/json-schema-form-listener-paths.d.ts.map +1 -0
  72. package/dist/components/json-schema-form-listener-paths.js +52 -0
  73. package/dist/components/json-schema-form-listener-paths.js.map +1 -0
  74. package/dist/components/json-schema-form-listener-types.d.ts +22 -0
  75. package/dist/components/json-schema-form-listener-types.d.ts.map +1 -0
  76. package/dist/components/json-schema-form-listeners.cjs +250 -0
  77. package/dist/components/json-schema-form-listeners.cjs.map +1 -0
  78. package/dist/components/json-schema-form-listeners.d.ts +13 -0
  79. package/dist/components/json-schema-form-listeners.d.ts.map +1 -0
  80. package/dist/components/json-schema-form-listeners.js +250 -0
  81. package/dist/components/json-schema-form-listeners.js.map +1 -0
  82. package/dist/components/json-schema-form-object-array-view.cjs +62 -0
  83. package/dist/components/json-schema-form-object-array-view.cjs.map +1 -0
  84. package/dist/components/json-schema-form-object-array-view.d.ts +14 -0
  85. package/dist/components/json-schema-form-object-array-view.d.ts.map +1 -0
  86. package/dist/components/json-schema-form-object-array-view.js +62 -0
  87. package/dist/components/json-schema-form-object-array-view.js.map +1 -0
  88. package/dist/components/json-schema-form-object.cjs +3 -0
  89. package/dist/components/json-schema-form-object.cjs.map +1 -1
  90. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  91. package/dist/components/json-schema-form-object.js +3 -0
  92. package/dist/components/json-schema-form-object.js.map +1 -1
  93. package/dist/components/json-schema-form-render.cjs +17 -9
  94. package/dist/components/json-schema-form-render.cjs.map +1 -1
  95. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  96. package/dist/components/json-schema-form-render.js +19 -11
  97. package/dist/components/json-schema-form-render.js.map +1 -1
  98. package/dist/components/json-schema-form-resolve.cjs +6 -99
  99. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  100. package/dist/components/json-schema-form-resolve.d.ts +1 -8
  101. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  102. package/dist/components/json-schema-form-resolve.js +5 -98
  103. package/dist/components/json-schema-form-resolve.js.map +1 -1
  104. package/dist/components/json-schema-form-runtime-types.d.ts +15 -0
  105. package/dist/components/json-schema-form-runtime-types.d.ts.map +1 -1
  106. package/dist/components/json-schema-form-table-array.cjs +67 -16
  107. package/dist/components/json-schema-form-table-array.cjs.map +1 -1
  108. package/dist/components/json-schema-form-table-array.d.ts +4 -1
  109. package/dist/components/json-schema-form-table-array.d.ts.map +1 -1
  110. package/dist/components/json-schema-form-table-array.js +70 -19
  111. package/dist/components/json-schema-form-table-array.js.map +1 -1
  112. package/dist/components/json-schema-form-types.d.ts +16 -0
  113. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  114. package/dist/components/json-schema-form-utils.cjs +7 -1
  115. package/dist/components/json-schema-form-utils.cjs.map +1 -1
  116. package/dist/components/json-schema-form-utils.d.ts +2 -1
  117. package/dist/components/json-schema-form-utils.d.ts.map +1 -1
  118. package/dist/components/json-schema-form-utils.js +7 -1
  119. package/dist/components/json-schema-form-utils.js.map +1 -1
  120. package/dist/components.cjs +3 -2
  121. package/dist/components.cjs.map +1 -1
  122. package/dist/components.d.ts +3 -2
  123. package/dist/components.d.ts.map +1 -1
  124. package/dist/components.js +2 -1
  125. package/dist/components.js.map +1 -1
  126. package/dist/data/DataTable.cjs +9 -3
  127. package/dist/data/DataTable.cjs.map +1 -1
  128. package/dist/data/DataTable.d.ts +6 -0
  129. package/dist/data/DataTable.d.ts.map +1 -1
  130. package/dist/data/DataTable.js +9 -3
  131. package/dist/data/DataTable.js.map +1 -1
  132. package/dist/data/FixtureEditor/FixtureEditor.cjs +43 -24
  133. package/dist/data/FixtureEditor/FixtureEditor.cjs.map +1 -1
  134. package/dist/data/FixtureEditor/FixtureEditor.d.ts.map +1 -1
  135. package/dist/data/FixtureEditor/FixtureEditor.js +43 -24
  136. package/dist/data/FixtureEditor/FixtureEditor.js.map +1 -1
  137. package/dist/data/Tree.cjs +10 -2
  138. package/dist/data/Tree.cjs.map +1 -1
  139. package/dist/data/Tree.d.ts +6 -1
  140. package/dist/data/Tree.d.ts.map +1 -1
  141. package/dist/data/Tree.js +10 -2
  142. package/dist/data/Tree.js.map +1 -1
  143. package/dist/data/ai/SessionInspector.cjs +143 -167
  144. package/dist/data/ai/SessionInspector.cjs.map +1 -1
  145. package/dist/data/ai/SessionInspector.collection-types.d.ts +5 -0
  146. package/dist/data/ai/SessionInspector.collection-types.d.ts.map +1 -1
  147. package/dist/data/ai/SessionInspector.collection.cjs +18 -5
  148. package/dist/data/ai/SessionInspector.collection.cjs.map +1 -1
  149. package/dist/data/ai/SessionInspector.collection.d.ts +2 -0
  150. package/dist/data/ai/SessionInspector.collection.d.ts.map +1 -1
  151. package/dist/data/ai/SessionInspector.collection.fixtures.d.ts +6 -0
  152. package/dist/data/ai/SessionInspector.collection.fixtures.d.ts.map +1 -0
  153. package/dist/data/ai/SessionInspector.collection.js +18 -5
  154. package/dist/data/ai/SessionInspector.collection.js.map +1 -1
  155. package/dist/data/ai/SessionInspector.d.ts +24 -2
  156. package/dist/data/ai/SessionInspector.d.ts.map +1 -1
  157. package/dist/data/ai/SessionInspector.hierarchy-state.cjs +105 -7
  158. package/dist/data/ai/SessionInspector.hierarchy-state.cjs.map +1 -1
  159. package/dist/data/ai/SessionInspector.hierarchy-state.d.ts +12 -1
  160. package/dist/data/ai/SessionInspector.hierarchy-state.d.ts.map +1 -1
  161. package/dist/data/ai/SessionInspector.hierarchy-state.js +107 -9
  162. package/dist/data/ai/SessionInspector.hierarchy-state.js.map +1 -1
  163. package/dist/data/ai/SessionInspector.hierarchy.cjs +1 -1
  164. package/dist/data/ai/SessionInspector.hierarchy.cjs.map +1 -1
  165. package/dist/data/ai/SessionInspector.hierarchy.js +1 -1
  166. package/dist/data/ai/SessionInspector.hierarchy.js.map +1 -1
  167. package/dist/data/ai/SessionInspector.js +144 -168
  168. package/dist/data/ai/SessionInspector.js.map +1 -1
  169. package/dist/data/ai/SessionInspector.legacy.cjs +116 -0
  170. package/dist/data/ai/SessionInspector.legacy.cjs.map +1 -0
  171. package/dist/data/ai/SessionInspector.legacy.d.ts +19 -0
  172. package/dist/data/ai/SessionInspector.legacy.d.ts.map +1 -0
  173. package/dist/data/ai/SessionInspector.legacy.js +116 -0
  174. package/dist/data/ai/SessionInspector.legacy.js.map +1 -0
  175. package/dist/data/ai/SessionInspector.panels.cjs +3 -0
  176. package/dist/data/ai/SessionInspector.panels.cjs.map +1 -1
  177. package/dist/data/ai/SessionInspector.panels.d.ts.map +1 -1
  178. package/dist/data/ai/SessionInspector.panels.js +3 -0
  179. package/dist/data/ai/SessionInspector.panels.js.map +1 -1
  180. package/dist/data/ai/SessionInspector.plan.cjs +29 -12
  181. package/dist/data/ai/SessionInspector.plan.cjs.map +1 -1
  182. package/dist/data/ai/SessionInspector.plan.d.ts.map +1 -1
  183. package/dist/data/ai/SessionInspector.plan.js +30 -13
  184. package/dist/data/ai/SessionInspector.plan.js.map +1 -1
  185. package/dist/data/ai/SessionInspector.remote-view.cjs +44 -0
  186. package/dist/data/ai/SessionInspector.remote-view.cjs.map +1 -0
  187. package/dist/data/ai/SessionInspector.remote-view.d.ts +11 -0
  188. package/dist/data/ai/SessionInspector.remote-view.d.ts.map +1 -0
  189. package/dist/data/ai/SessionInspector.remote-view.js +44 -0
  190. package/dist/data/ai/SessionInspector.remote-view.js.map +1 -0
  191. package/dist/data/ai/SessionInspector.remote.cjs +275 -0
  192. package/dist/data/ai/SessionInspector.remote.cjs.map +1 -0
  193. package/dist/data/ai/SessionInspector.remote.d.ts +57 -0
  194. package/dist/data/ai/SessionInspector.remote.d.ts.map +1 -0
  195. package/dist/data/ai/SessionInspector.remote.js +275 -0
  196. package/dist/data/ai/SessionInspector.remote.js.map +1 -0
  197. package/dist/data/ai/SessionInspector.summary.cjs +0 -156
  198. package/dist/data/ai/SessionInspector.summary.cjs.map +1 -1
  199. package/dist/data/ai/SessionInspector.summary.d.ts +0 -3
  200. package/dist/data/ai/SessionInspector.summary.d.ts.map +1 -1
  201. package/dist/data/ai/SessionInspector.summary.js +2 -158
  202. package/dist/data/ai/SessionInspector.summary.js.map +1 -1
  203. package/dist/data/ai/SessionInspector.tab-state.cjs +15 -0
  204. package/dist/data/ai/SessionInspector.tab-state.cjs.map +1 -0
  205. package/dist/data/ai/SessionInspector.tab-state.d.ts +3 -0
  206. package/dist/data/ai/SessionInspector.tab-state.d.ts.map +1 -0
  207. package/dist/data/ai/SessionInspector.tab-state.js +15 -0
  208. package/dist/data/ai/SessionInspector.tab-state.js.map +1 -0
  209. package/dist/data/ai/SessionInspector.tabs.model.cjs +31 -18
  210. package/dist/data/ai/SessionInspector.tabs.model.cjs.map +1 -1
  211. package/dist/data/ai/SessionInspector.tabs.model.d.ts +3 -1
  212. package/dist/data/ai/SessionInspector.tabs.model.d.ts.map +1 -1
  213. package/dist/data/ai/SessionInspector.tabs.model.js +32 -19
  214. package/dist/data/ai/SessionInspector.tabs.model.js.map +1 -1
  215. package/dist/data/ai/SessionInspector.verification.cjs +53 -0
  216. package/dist/data/ai/SessionInspector.verification.cjs.map +1 -0
  217. package/dist/data/ai/SessionInspector.verification.d.ts +7 -0
  218. package/dist/data/ai/SessionInspector.verification.d.ts.map +1 -0
  219. package/dist/data/ai/SessionInspector.verification.js +53 -0
  220. package/dist/data/ai/SessionInspector.verification.js.map +1 -0
  221. package/dist/data/ai/SessionViewer.model.cjs +7 -1
  222. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  223. package/dist/data/ai/SessionViewer.model.d.ts +21 -3
  224. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  225. package/dist/data/ai/SessionViewer.model.js +7 -1
  226. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  227. package/dist/data/ai/SessionViewer.unified.d.ts +13 -0
  228. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  229. package/dist/data/ai/index.d.ts +3 -1
  230. package/dist/data/ai/index.d.ts.map +1 -1
  231. package/dist/data/version-info.cjs +3 -3
  232. package/dist/data/version-info.js +3 -3
  233. package/dist/devtools/useDebugStream.cjs +5 -1
  234. package/dist/devtools/useDebugStream.cjs.map +1 -1
  235. package/dist/devtools/useDebugStream.d.ts.map +1 -1
  236. package/dist/devtools/useDebugStream.js +6 -2
  237. package/dist/devtools/useDebugStream.js.map +1 -1
  238. package/dist/hooks/event-source-provider.cjs +9 -0
  239. package/dist/hooks/event-source-provider.cjs.map +1 -0
  240. package/dist/hooks/event-source-provider.d.ts +15 -0
  241. package/dist/hooks/event-source-provider.d.ts.map +1 -0
  242. package/dist/hooks/event-source-provider.js +9 -0
  243. package/dist/hooks/event-source-provider.js.map +1 -0
  244. package/dist/hooks/event-source.cjs +11 -0
  245. package/dist/hooks/event-source.cjs.map +1 -0
  246. package/dist/hooks/event-source.d.ts +22 -0
  247. package/dist/hooks/event-source.d.ts.map +1 -0
  248. package/dist/hooks/event-source.js +11 -0
  249. package/dist/hooks/event-source.js.map +1 -0
  250. package/dist/hooks/use-log-tail.cjs +5 -1
  251. package/dist/hooks/use-log-tail.cjs.map +1 -1
  252. package/dist/hooks/use-log-tail.d.ts.map +1 -1
  253. package/dist/hooks/use-log-tail.js +5 -1
  254. package/dist/hooks/use-log-tail.js.map +1 -1
  255. package/dist/hooks/use-prompts.cjs +5 -1
  256. package/dist/hooks/use-prompts.cjs.map +1 -1
  257. package/dist/hooks/use-prompts.d.ts.map +1 -1
  258. package/dist/hooks/use-prompts.js +6 -2
  259. package/dist/hooks/use-prompts.js.map +1 -1
  260. package/dist/hooks/use-task-run.cjs +9 -2
  261. package/dist/hooks/use-task-run.cjs.map +1 -1
  262. package/dist/hooks/use-task-run.d.ts.map +1 -1
  263. package/dist/hooks/use-task-run.js +10 -3
  264. package/dist/hooks/use-task-run.js.map +1 -1
  265. package/dist/hooks.cjs +4 -0
  266. package/dist/hooks.cjs.map +1 -1
  267. package/dist/hooks.d.ts +2 -0
  268. package/dist/hooks.d.ts.map +1 -1
  269. package/dist/hooks.js +4 -0
  270. package/dist/hooks.js.map +1 -1
  271. package/dist/icons/programmingCatalog.cjs +34 -34
  272. package/dist/icons/programmingCatalog.cjs.map +1 -1
  273. package/dist/icons/programmingCatalog.js +34 -34
  274. package/dist/icons/programmingCatalog.js.map +1 -1
  275. package/dist/index.cjs +9 -2
  276. package/dist/index.cjs.map +1 -1
  277. package/dist/index.js +8 -1
  278. package/dist/index.js.map +1 -1
  279. package/dist/monaco/MonacoEditor.cjs +4 -1
  280. package/dist/monaco/MonacoEditor.cjs.map +1 -1
  281. package/dist/monaco/MonacoEditor.d.ts +1 -1
  282. package/dist/monaco/MonacoEditor.d.ts.map +1 -1
  283. package/dist/monaco/MonacoEditor.js +4 -1
  284. package/dist/monaco/MonacoEditor.js.map +1 -1
  285. package/dist/monaco/types.d.ts +2 -1
  286. package/dist/monaco/types.d.ts.map +1 -1
  287. package/dist/overlay/CommandPalette.cjs +14 -4
  288. package/dist/overlay/CommandPalette.cjs.map +1 -1
  289. package/dist/overlay/CommandPalette.d.ts +5 -1
  290. package/dist/overlay/CommandPalette.d.ts.map +1 -1
  291. package/dist/overlay/CommandPalette.js +14 -4
  292. package/dist/overlay/CommandPalette.js.map +1 -1
  293. package/dist/overlay/CommandPaletteList.cjs +5 -0
  294. package/dist/overlay/CommandPaletteList.cjs.map +1 -1
  295. package/dist/overlay/CommandPaletteList.d.ts +4 -2
  296. package/dist/overlay/CommandPaletteList.d.ts.map +1 -1
  297. package/dist/overlay/CommandPaletteList.js +5 -0
  298. package/dist/overlay/CommandPaletteList.js.map +1 -1
  299. package/dist/overlay/DropdownMenu.cjs +1 -0
  300. package/dist/overlay/DropdownMenu.cjs.map +1 -1
  301. package/dist/overlay/DropdownMenu.js +1 -0
  302. package/dist/overlay/DropdownMenu.js.map +1 -1
  303. package/dist/rpc/OperationCatalog.cjs +29 -26
  304. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  305. package/dist/rpc/OperationCatalog.d.ts +9 -1
  306. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  307. package/dist/rpc/OperationCatalog.js +29 -26
  308. package/dist/rpc/OperationCatalog.js.map +1 -1
  309. package/dist/rpc/OperationEntityContextPicker.cjs +62 -256
  310. package/dist/rpc/OperationEntityContextPicker.cjs.map +1 -1
  311. package/dist/rpc/OperationEntityContextPicker.d.ts.map +1 -1
  312. package/dist/rpc/OperationEntityContextPicker.js +64 -258
  313. package/dist/rpc/OperationEntityContextPicker.js.map +1 -1
  314. package/dist/rpc/OperationEntityPicker.cjs +185 -0
  315. package/dist/rpc/OperationEntityPicker.cjs.map +1 -0
  316. package/dist/rpc/OperationEntityPicker.d.ts +51 -0
  317. package/dist/rpc/OperationEntityPicker.d.ts.map +1 -0
  318. package/dist/rpc/OperationEntityPicker.js +185 -0
  319. package/dist/rpc/OperationEntityPicker.js.map +1 -0
  320. package/dist/rpc/OperationEntityPicker.model.cjs +39 -0
  321. package/dist/rpc/OperationEntityPicker.model.cjs.map +1 -0
  322. package/dist/rpc/OperationEntityPicker.model.d.ts +27 -0
  323. package/dist/rpc/OperationEntityPicker.model.d.ts.map +1 -0
  324. package/dist/rpc/OperationEntityPicker.model.js +39 -0
  325. package/dist/rpc/OperationEntityPicker.model.js.map +1 -0
  326. package/dist/rpc/operationCatalogRowSelection.cjs +85 -0
  327. package/dist/rpc/operationCatalogRowSelection.cjs.map +1 -0
  328. package/dist/rpc/operationCatalogRowSelection.d.ts +57 -0
  329. package/dist/rpc/operationCatalogRowSelection.d.ts.map +1 -0
  330. package/dist/rpc/operationCatalogRowSelection.js +85 -0
  331. package/dist/rpc/operationCatalogRowSelection.js.map +1 -0
  332. package/dist/rpc/operationEntityPicker.fixtures.d.ts +13 -0
  333. package/dist/rpc/operationEntityPicker.fixtures.d.ts.map +1 -0
  334. package/dist/rpc.cjs +2 -0
  335. package/dist/rpc.cjs.map +1 -1
  336. package/dist/rpc.d.ts +2 -0
  337. package/dist/rpc.d.ts.map +1 -1
  338. package/dist/rpc.js +2 -0
  339. package/dist/rpc.js.map +1 -1
  340. package/dist/styles.css +1 -1
  341. package/package.json +4 -1
  342. package/schemas/json-schema-form.schema.json +566 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flanksource/clicky-ui",
3
- "version": "0.3.40",
3
+ "version": "0.3.41",
4
4
  "description": "Flanksource Clicky UI — React component library built on shadcn/ui with light/dark and density theming.",
5
5
  "homepage": "https://github.com/flanksource/clicky-ui#readme",
6
6
  "bugs": "https://github.com/flanksource/clicky-ui/issues",
@@ -12,6 +12,7 @@
12
12
  },
13
13
  "files": [
14
14
  "dist",
15
+ "schemas",
15
16
  "oxlint-plugins/**/*.js",
16
17
  "oxlint-plugins/README.md",
17
18
  "README.md",
@@ -128,6 +129,7 @@
128
129
  "require": "./dist/runtime-profile.cjs"
129
130
  },
130
131
  "./oxlint-plugins": "./oxlint-plugins/clicky-ui.js",
132
+ "./json-schema-form.schema.json": "./schemas/json-schema-form.schema.json",
131
133
  "./styles.css": "./dist/styles.css",
132
134
  "./mdx-editor.css": "./dist/mdx-editor.css",
133
135
  "./tailwind-preset": {
@@ -177,6 +179,7 @@
177
179
  "@types/react": "19.2.17",
178
180
  "@types/react-dom": "19.2.3",
179
181
  "ai": "^6.0.199",
182
+ "ajv": "^8.18.0",
180
183
  "jsdom": "^26.0.0",
181
184
  "monaco-editor": "0.48.0",
182
185
  "react": "^18.3.1",
@@ -0,0 +1,566 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/flanksource/clicky-ui/json-schema-form.schema.json",
4
+ "$dynamicAnchor": "meta",
5
+ "title": "clicky-ui JsonSchemaForm schema",
6
+ "description": "A JSON Schema 2020-12 document annotated for @flanksource/clicky-ui's JsonSchemaForm. It is the standard 2020-12 meta-schema plus the `x-*` presentation keywords the form reads, applied at every depth (nested `properties`, `items`, `allOf` branches, map value schemas). Set `$schema` to this document's `$id` to validate a form schema and get hover documentation in editors.\n\nControl resolution is first-match-wins on schema keywords, never on field names: `x-clicky-lookup` → `enum` (or an `anyOf`/`oneOf` branch carrying an `enum`) → `format: date|date-time` → `format: textarea` → `format: md` → `boolean` → `integer`/`number` → `array` → open string map (`additionalProperties`/`patternProperties`/`propertyNames`) → nested object (`properties`) → string.\n\nUnknown `x-*` keys are allowed: consumers read their own extension keys from `PreExtension`/`PostExtension` functions and the form passes them through untouched.",
7
+ "allOf": [{ "$ref": "https://json-schema.org/draft/2020-12/schema" }],
8
+ "properties": {
9
+ "title": {
10
+ "description": "The field label. A missing title falls back to the property key; an explicit empty string renders no label at all (for a field whose host already names it)."
11
+ },
12
+ "description": {
13
+ "description": "Helper text for the field, shown under the control or behind a `?` beside the label (see `x-help-display`). Combined with `x-help.body` when both are present and differ."
14
+ },
15
+ "default": {
16
+ "description": "Seeds the value of a field that has none, and is the value an `x-on-change` `reset` action restores (the key is removed when there is no default)."
17
+ },
18
+ "enum": {
19
+ "description": "Renders the field as a picker over these values. Label, icon, description and tone per value come from `x-enum-labels`, `x-enum-icons`, `x-enum-descriptions` and `x-enum-tones`; the presentation from `x-enum-display`. On `propertyNames`, restricts a map's keys to a picker. On an array's `items`, renders a tag list (or `x-array-display: filter-pills`)."
20
+ },
21
+ "format": {
22
+ "description": "Standard string format. Formats with form-specific meaning: `date` and `date-time` render a date picker; `textarea` a multi-line text box; `md` the MDXEditor-backed markdown editor (options in `x-md-editor`); `percent` (on a number) shows a static `%` unit inside the input; `password` masks the input and excludes the field from text filtering. Any other format renders a plain string input.",
23
+ "anyOf": [
24
+ { "enum": ["date", "date-time", "textarea", "md", "percent", "password"] },
25
+ { "type": "string" }
26
+ ]
27
+ },
28
+ "readOnly": {
29
+ "description": "Renders the field as a read-only value display (no input), or drops it entirely when the form sets `hideReadOnlyFields`. Contrast `x-disabled`, which keeps the real control and disables it. On an object, array or map, the subtree becomes a view, as under a read-only form: its fields keep disabled controls, its tables show values, and its `writeOnly` fields are omitted. In an `x-layout: table` array every cell of a read-only table (the array's own `readOnly`, a `readOnly` ancestor, or a read-only form) renders the same value display as a `readOnly` column; a `readOnly` column is dropped, header and all, under `hideReadOnlyFields`, and a `writeOnly` column is dropped from a read-only table."
30
+ },
31
+ "maximum": {
32
+ "description": "Upper bound of a number field. Required for `x-number-display: slider`."
33
+ },
34
+ "multipleOf": {
35
+ "description": "Its presence opts a number field into a native `<input type=\"number\">` (with step/min/max) instead of the token-friendly text input."
36
+ },
37
+ "minItems": {
38
+ "description": "The form stops offering per-item \"remove\" at this length. Not validation: an array already outside its bounds is left alone rather than trapped."
39
+ },
40
+ "maxItems": {
41
+ "description": "The form stops offering \"add\" at this length. Not validation: an array already outside its bounds is left alone rather than trapped."
42
+ },
43
+ "additionalProperties": {
44
+ "description": "`false` closes the object; `true` opens it as a free string map; a subschema types every extra entry's value (a typed map)."
45
+ },
46
+ "patternProperties": {
47
+ "description": "Per-key-pattern value schemas for a map: the first regex matching an entry's key types that entry's value, falling back to `additionalProperties`. Lets a keyed map render a different value form per key."
48
+ },
49
+ "propertyNames": {
50
+ "description": "An `enum` here turns a map's key input into a picker limited to those keys (labelled from `propertyNames.title`, options labelled by `x-enum-labels`)."
51
+ },
52
+ "allOf": {
53
+ "description": "Each member is either an `if`/`then`/`else` conditional — the matched branch's `properties`/`required` are merged into the object against the current value, replacing a property wholesale — or an unconditional composition member (a flattened `$ref`) whose `properties`/`required` always merge. An `if` the form cannot evaluate fails closed to `else`."
54
+ },
55
+ "anyOf": {
56
+ "description": "Not validated, but mined: a branch carrying an `enum` renders the field as a dropdown (a value-or-template union), and a two-branch union of a string `pattern` plus a number/integer/boolean/date branch renders the native control of the non-template branch."
57
+ },
58
+ "oneOf": {
59
+ "description": "Not validated, but mined like `anyOf`: a branch carrying an `enum` renders the field as a dropdown."
60
+ },
61
+ "x-order": {
62
+ "description": "Object-level. Property render order: listed keys render first, in this order; unlisted keys keep document order after them. Lets producers whose serializer alphabetizes maps (e.g. Go) state the intended order. For order that composes across merged `allOf` branches use the per-field `x-clicky-order`.",
63
+ "type": "array",
64
+ "items": { "type": "string" },
65
+ "uniqueItems": true,
66
+ "examples": [["name", "type", "url"]]
67
+ },
68
+ "x-clicky-order": {
69
+ "description": "Field-level render order: lower values sort first; properties without it keep document order after the ordered ones. Unlike `x-order`, it composes across merged `allOf`/`then` branches because each field carries its own rank.",
70
+ "type": "number",
71
+ "examples": [10]
72
+ },
73
+ "x-hidden": {
74
+ "description": "Render nothing for this property — no label, no control, at any depth (a hidden object takes its whole section with it). The value is untouched: hiding is a presentation decision, not a data one. Flippable by an `allOf` branch (a matching branch replaces the property wholesale, so re-declare it with `\"x-hidden\": false` to reveal it) or by an `x-on-change` `show`/`hide` action or `patch`.",
75
+ "type": "boolean",
76
+ "examples": [true]
77
+ },
78
+ "x-disabled": {
79
+ "description": "Render the field's real control, disabled (containers disable their whole subtree). Unlike `readOnly`, which swaps the input for plain value text. Flippable by an `allOf` branch like `x-hidden`, and set/cleared by an `x-on-change` `enable`/`disable` action or `patch`.",
80
+ "type": "boolean",
81
+ "examples": [true]
82
+ },
83
+ "x-on-change": {
84
+ "description": "Change listeners on this field. Each entry's actions target SIBLING keys of the object that declares this property, applying while `when` holds (always, when `when` is omitted) and `else` applying while it does not. A `hide`/`show`/`enable`/`disable` target or a `patch` key may instead be a `/`-separated path into a sibling's subtree (`groups/Rates/Amount`): each later segment names a property of the object reached so far, and an array is crossed into its `items` without spending a segment. State actions (`hide`/`show`, `enable`/`disable`, `require`/`optional`, `patch`) are derived: re-evaluated from the current value on every render, so a reloaded record shows the shape it was saved with. Value actions (`reset`/`set`) are transitional: they fire only when this field is committed through the form, and cascade into the listeners of the fields they change (each key fires at most once per commit). `require`/`optional`/`reset`/`set` take sibling keys only, never a path. Listeners apply in order after the object's `x-on-load`, a later one winning per target.",
85
+ "type": "array",
86
+ "items": { "$ref": "#/$defs/ChangeListener" },
87
+ "examples": [
88
+ [
89
+ { "when": { "const": "manual" }, "show": ["amount"], "require": ["amount"], "else": { "hide": ["amount"], "reset": ["amount"] } }
90
+ ],
91
+ [
92
+ { "when": { "properties": { "Option": { "const": "01" } } }, "show": ["groups/Rates"], "else": { "hide": ["groups/Rates"] } }
93
+ ]
94
+ ]
95
+ },
96
+ "x-on-load": {
97
+ "description": "Object-level load listeners: the state the object's properties start in. Applied before any property's `x-on-change`, in order: the object's own, then each `allOf` member's — an unconditional member's own, or those of the `then`/`else` branch that currently applies. `when` is evaluated against the object itself (a nested `properties` predicate reads its fields; `expr` gets `key: \"\"` and the object as `value` and `self`). Only derived state is allowed — `hide`/`show`, `enable`/`disable` and `patch`, with the same path targets as `x-on-change`; `set`, `reset`, `require` and `optional` are refused.",
98
+ "type": "array",
99
+ "items": { "$ref": "#/$defs/LoadListener" },
100
+ "examples": [
101
+ [
102
+ { "hide": ["groups/Rates"] },
103
+ { "when": { "properties": { "Mode": { "const": "01" } } }, "disable": ["Amount"] }
104
+ ]
105
+ ]
106
+ },
107
+ "x-icon": {
108
+ "description": "Leading glyph for the field label: a runtime icon name resolved by the form's icon provider.",
109
+ "type": "string",
110
+ "minLength": 1,
111
+ "examples": ["database"]
112
+ },
113
+ "x-help": {
114
+ "description": "Inline help metadata emitted by CLI/schema generators. `body` is rendered together with `description` as the field's helper text.",
115
+ "$ref": "#/$defs/HelpBlock"
116
+ },
117
+ "x-help-display": {
118
+ "description": "How this field's description is presented, overriding the form-level `layout.help`. `inline` is a paragraph under the control; `hover` moves it behind a `?` beside the label.",
119
+ "enum": ["inline", "hover"]
120
+ },
121
+ "x-label-position": {
122
+ "description": "Friendlier alias for the per-field layout: `top` stacks the label above the value (`x-layout: stack`); `left` places it beside the value (`x-layout: inline`). `x-layout` wins when both are set.",
123
+ "enum": ["top", "left"]
124
+ },
125
+ "x-label-classes": {
126
+ "description": "Extra CSS classes merged onto the field's `<label>`. Tailwind classes only compile if the consumer's Tailwind build scans a file containing them.",
127
+ "type": "string",
128
+ "examples": ["font-semibold"]
129
+ },
130
+ "x-input-classes": {
131
+ "description": "Extra CSS classes merged onto the field's input element. Tailwind classes only compile if the consumer's Tailwind build scans a file containing them.",
132
+ "type": "string",
133
+ "examples": ["font-mono"]
134
+ },
135
+ "x-input-prefix": {
136
+ "description": "Static text rendered inside the input at its left edge (display only, never part of the value). `x-input-prefix-icon` wins when both are set.",
137
+ "type": "string",
138
+ "examples": ["https://"]
139
+ },
140
+ "x-input-suffix": {
141
+ "description": "Static text rendered inside the input at its right edge (display only, never part of the value). `x-input-suffix-icon` wins when both are set.",
142
+ "type": "string",
143
+ "examples": ["ms"]
144
+ },
145
+ "x-input-prefix-icon": {
146
+ "description": "Runtime icon name rendered inside the input at its left edge. Wins over `x-input-prefix`.",
147
+ "type": "string",
148
+ "examples": ["search"]
149
+ },
150
+ "x-input-suffix-icon": {
151
+ "description": "Runtime icon name rendered inside the input at its right edge. Wins over `x-input-suffix`.",
152
+ "type": "string",
153
+ "examples": ["lock"]
154
+ },
155
+ "x-layout": {
156
+ "description": "Per-field layout override, taking precedence over the form-level layout. `inline` and `stack` force the field's subtree into label-beside-value or label-above-value mode; `table` renders an array of objects (or a map) as compact rows under column headers. On a map's value schema, `stack` renders each key above its value as one full-width unit.",
157
+ "enum": ["inline", "stack", "table"]
158
+ },
159
+ "x-table-max-columns": {
160
+ "description": "Array-level, for arrays of objects with no `x-layout: table` or `x-array-display: accordion` hint. The most visible columns (the union across rows under each row's listener state) the array opens as a grid with; a wider array opens as the inline item form. The array's view menu switches between grid, stack form and inline form either way.",
161
+ "type": "integer",
162
+ "minimum": 1,
163
+ "default": 4
164
+ },
165
+ "x-columns": {
166
+ "description": "Object-level. Lay the object's fields out in N equal columns (stacked layout); fields span one column unless they set `x-col-span`. `auto` fits as many equal columns as the container width allows, each at least `x-column-min-width` wide.",
167
+ "type": ["integer", "string"],
168
+ "oneOf": [
169
+ { "type": "integer", "minimum": 1 },
170
+ { "const": "auto" }
171
+ ],
172
+ "examples": [2, "auto"]
173
+ },
174
+ "x-column-min-width": {
175
+ "description": "Object-level, with `x-columns: auto` only. Minimum width of one column as a CSS length (default `15rem`). A length rather than a class, because a class inside a schema is data no Tailwind scanner ever reads.",
176
+ "type": "string",
177
+ "examples": ["12rem"]
178
+ },
179
+ "x-columns-max-width": {
180
+ "description": "Object-level, with `x-columns: auto` only. Optional cap on the whole grid's width, as a CSS length.",
181
+ "type": "string",
182
+ "examples": ["60rem"]
183
+ },
184
+ "x-col-span": {
185
+ "description": "How many of the enclosing object's columns this field occupies (honoured when the object sets `x-columns`). `full` spans the whole row — the only meaningful answer under `x-columns: auto` — and lifts the stacked value-width cap.",
186
+ "type": ["integer", "string"],
187
+ "oneOf": [
188
+ { "type": "integer", "minimum": 1 },
189
+ { "const": "full" }
190
+ ],
191
+ "examples": [2, "full"]
192
+ },
193
+ "x-classes": {
194
+ "description": "Object-level. Extra CSS classes merged onto the object's fields-grid container, e.g. `gap-2` for the section's row/column gap.",
195
+ "type": "string",
196
+ "examples": ["gap-2"]
197
+ },
198
+ "x-enum-labels": {
199
+ "description": "Human label per enum value. The option renders as `Label (value)` while the raw value is what is stored. Also applies to `propertyNames.enum` key pickers.",
200
+ "type": "object",
201
+ "additionalProperties": { "type": "string" },
202
+ "examples": [{ "20": "Business", "30": "Personal" }]
203
+ },
204
+ "x-enum-icons": {
205
+ "description": "Runtime icon name per enum value. Its presence switches the enum control to a selectable icon grid unless `x-enum-display` says otherwise; `x-item.glyph` and `x-item.badge` also read it.",
206
+ "type": "object",
207
+ "additionalProperties": { "type": "string" },
208
+ "examples": [{ "postgres": "postgres", "mysql": "mysql" }]
209
+ },
210
+ "x-enum-descriptions": {
211
+ "description": "Secondary descriptive line per enum value, rendered by the `segmented` (as descriptive cards) and `grid` displays.",
212
+ "type": "object",
213
+ "additionalProperties": { "type": "string" },
214
+ "examples": [{ "plan": "No tool execution", "auto": "Runs tools without asking" }]
215
+ },
216
+ "x-enum-tones": {
217
+ "description": "Hue per enum value. Purely decorative — unlike `x-enum-icons` it does not change which enum control renders. Read by displays that colour a value, e.g. the accordion array's leading glyph (`x-item.glyph`).",
218
+ "type": "object",
219
+ "additionalProperties": { "$ref": "#/$defs/FieldTone" },
220
+ "examples": [{ "list": "indigo", "text": "emerald" }]
221
+ },
222
+ "x-enum-display": {
223
+ "description": "Force the enum presentation. `combobox` (the default) is a searchable dropdown; `radio` a segmented radio group for small fixed sets; `grid` a filterable grid of icon cards (the default when `x-enum-icons` is present); `segmented` the shared SegmentedControl, rendering large descriptive cards when `x-enum-descriptions` is present.",
224
+ "enum": ["combobox", "radio", "grid", "segmented"]
225
+ },
226
+ "x-array-display": {
227
+ "description": "Force an array's presentation. `filter-pills` renders each enum item option as a compact toggle (an empty array means all options); `accordion` opens object items as the item list — each item collapsed to a summary row, one open at a time — instead of the column-count default (see `x-table-max-columns`), with the view menu still offered; `cards` keeps every item open under a titled header; both read `x-item`. `stacked` opts out to one full sub-form per item labelled *Item N*; `list` renders scalar values as compact editable list items.",
228
+ "enum": ["filter-pills", "accordion", "cards", "stacked", "list"]
229
+ },
230
+ "x-item": {
231
+ "description": "Array-level. How to summarize one item in a collapsed accordion row or card header. Every value names a property of the item. Lives on the array rather than on `items` because one shared item schema may be summarized differently by each array that uses it.",
232
+ "$ref": "#/$defs/ArrayItemSpec"
233
+ },
234
+ "x-number-display": {
235
+ "description": "Render a bounded number (requires `maximum`) as a single-thumb slider with a progress-filled track instead of a numeric input.",
236
+ "const": "slider"
237
+ },
238
+ "x-discriminator": {
239
+ "description": "Object-level. Names the property whose value selects a \"kind\" (e.g. a connection `type`). The form renders that property first as a picker; once chosen, it shows the matched `allOf` branch's fields and collapses the picker to a compact header with a \"change\" affordance.",
240
+ "type": "string",
241
+ "examples": ["type"]
242
+ },
243
+ "x-md-editor": {
244
+ "description": "Options for the MDXEditor-backed markdown field rendered for `format: md`. Only the JSON-serializable subset of `MdxEditorPluginOptions` can be declared in a schema; function-valued options (image upload/preview handlers, `jsxComponents`, `plugins`, code block `editorDescriptors`, toolbar `extra`) must be supplied programmatically.",
245
+ "$ref": "#/$defs/MdxEditorOptions"
246
+ },
247
+ "x-clicky-lookup": {
248
+ "description": "Turns the field into an async entity-reference picker: options are fetched lazily from another entity's list endpoint via the form's `lookupFetcher`. Single-select also accepts free-form entry; set `multi` for an array field.",
249
+ "$ref": "#/$defs/LookupDescriptor"
250
+ },
251
+ "x-clicky-unit": {
252
+ "description": "Opt-in: honoured only when the consumer passes `createUnitFormExtensions()` to the form. Renders a positive integer as a unit-scaled input with step controls — `count` (K/M/B/T) or `bytes` (KiB/MiB/GiB/TiB).",
253
+ "enum": ["count", "bytes"]
254
+ },
255
+ "x-clicky-component": {
256
+ "description": "Opt-in: honoured only when the consumer passes `createSecretFormExtensions(...)` to the form. Replaces the control with a Kubernetes value-source selector — `k8s-secret-selector` for a secret/configmap/value reference, `k8s-url-selector` for the same plus a workload endpoint.",
257
+ "enum": ["k8s-secret-selector", "k8s-url-selector"]
258
+ },
259
+ "x-clicky-default-source": {
260
+ "description": "Opt-in, with `x-clicky-component`. The source a new, empty secret reference starts on.",
261
+ "enum": ["value", "secret", "configmap", "helm", "onepassword", "serviceaccount"]
262
+ }
263
+ },
264
+ "$defs": {
265
+ "FieldTone": {
266
+ "description": "The closed palette of decorative hues. Each tone tracks the light/dark theme.",
267
+ "enum": ["neutral", "slate", "violet", "amber", "sky", "teal", "indigo", "emerald", "rose"]
268
+ },
269
+ "HelpBlock": {
270
+ "type": "object",
271
+ "additionalProperties": false,
272
+ "properties": {
273
+ "source": { "description": "Where the help text came from (e.g. a CLI command).", "type": "string" },
274
+ "section": { "description": "The section of the source it was taken from.", "type": "string" },
275
+ "body": { "description": "Help text, appended to `description` in the rendered helper text.", "type": "string" }
276
+ },
277
+ "examples": [{ "body": "Must be unique within the namespace." }]
278
+ },
279
+ "ChangeActionTargets": {
280
+ "description": "Sibling property keys the action applies to. `hide`/`show`/`enable`/`disable` also accept a `/`-separated path into a sibling's subtree; the other actions take keys only.",
281
+ "type": "array",
282
+ "items": { "type": "string" },
283
+ "uniqueItems": true
284
+ },
285
+ "ChangeActions": {
286
+ "type": "object",
287
+ "properties": {
288
+ "hide": { "description": "Derived: hide these siblings while the condition holds.", "$ref": "#/$defs/ChangeActionTargets" },
289
+ "show": { "description": "Derived: show these siblings (clearing `x-hidden`) while the condition holds.", "$ref": "#/$defs/ChangeActionTargets" },
290
+ "enable": { "description": "Derived: enable these siblings (clearing `x-disabled`) while the condition holds.", "$ref": "#/$defs/ChangeActionTargets" },
291
+ "disable": { "description": "Derived: disable these siblings while the condition holds.", "$ref": "#/$defs/ChangeActionTargets" },
292
+ "require": { "description": "Derived: mark these siblings required while the condition holds.", "$ref": "#/$defs/ChangeActionTargets" },
293
+ "optional": { "description": "Derived: mark these siblings optional while the condition holds.", "$ref": "#/$defs/ChangeActionTargets" },
294
+ "reset": { "description": "Transitional: on commit, restore these siblings to their schema `default`, or remove them when they have none.", "$ref": "#/$defs/ChangeActionTargets" },
295
+ "set": {
296
+ "description": "Transitional: on commit, set each sibling key to the literal value given.",
297
+ "type": "object",
298
+ "examples": [{ "mode": "manual", "retries": 3 }]
299
+ },
300
+ "patch": {
301
+ "description": "Derived: per sibling key (or `/`-separated path into a sibling's subtree), keywords shallow-merged over that property while the condition holds — `readOnly`, `writeOnly`, `title`, `description`, `enum`, bounds, any presentation `x-*`. Applied after the other state actions; a later listener wins per keyword. A patch may not set a keyword a hide/show or enable/disable in the same actions also sets.",
302
+ "type": "object",
303
+ "additionalProperties": { "$ref": "#/$defs/ChangePatch" },
304
+ "examples": [{ "amount": { "readOnly": true }, "rate": { "title": "Override rate", "minimum": 0, "maximum": 25 } }]
305
+ }
306
+ }
307
+ },
308
+ "ChangePatch": {
309
+ "description": "Keywords merged over one sibling property. Refused: keywords that change the property's shape (use an `allOf` branch), `required` (use `require`/`optional`), value keywords `default`/`const` (use `set`/`reset`), and the listener keywords `x-on-change`/`x-on-load`.",
310
+ "$dynamicRef": "#meta",
311
+ "type": "object",
312
+ "propertyNames": {
313
+ "not": {
314
+ "enum": ["type", "properties", "items", "additionalProperties", "patternProperties", "allOf", "anyOf", "oneOf", "if", "then", "else", "not", "$ref", "$defs", "required", "default", "const", "x-on-change", "x-on-load"]
315
+ }
316
+ },
317
+ "examples": [{ "readOnly": true, "title": "Locked amount" }]
318
+ },
319
+ "ChangeListener": {
320
+ "description": "One `x-on-change` entry: its actions apply while `when` holds (always, when omitted), and `else` applies while it does not.",
321
+ "type": "object",
322
+ "allOf": [{ "$ref": "#/$defs/ChangeActions" }],
323
+ "properties": {
324
+ "when": {
325
+ "description": "Condition on THIS field's value, in the `if`-predicate grammar the form evaluates (`const`, `enum`, `not`, nested `properties`/`required`), plus an optional `expr` handed to the form's `expressionEvaluator`. When both are present both must hold. A condition with nothing evaluable is an error.",
326
+ "$dynamicRef": "#meta",
327
+ "properties": {
328
+ "expr": { "description": "Expression evaluated by the host's `expressionEvaluator`; must return a boolean.", "type": "string" }
329
+ }
330
+ },
331
+ "else": {
332
+ "description": "Actions applied while `when` does not hold.",
333
+ "$ref": "#/$defs/ChangeActions",
334
+ "unevaluatedProperties": false
335
+ }
336
+ },
337
+ "unevaluatedProperties": false
338
+ },
339
+ "LoadActionNames": {
340
+ "description": "Actions an `x-on-load` entry may not use: load state is derived, never a value or required-ness change.",
341
+ "not": { "enum": ["set", "reset", "require", "optional"] }
342
+ },
343
+ "LoadListener": {
344
+ "description": "One `x-on-load` entry: a ChangeListener whose `when` reads the object itself, limited to `hide`/`show`, `enable`/`disable` and `patch`.",
345
+ "$ref": "#/$defs/ChangeListener",
346
+ "propertyNames": { "$ref": "#/$defs/LoadActionNames" },
347
+ "properties": {
348
+ "else": { "propertyNames": { "$ref": "#/$defs/LoadActionNames" } }
349
+ }
350
+ },
351
+ "ArrayItemSummaryPart": {
352
+ "type": "object",
353
+ "additionalProperties": false,
354
+ "required": ["property"],
355
+ "properties": {
356
+ "property": { "description": "Item property whose value is shown.", "type": "string" },
357
+ "pattern": { "description": "Wraps the value; a single literal `{}` marks where it goes.", "type": "string", "examples": ["{{.params.{}}}"] }
358
+ }
359
+ },
360
+ "ArrayItemSpec": {
361
+ "type": "object",
362
+ "additionalProperties": false,
363
+ "properties": {
364
+ "title": { "description": "Item property keys tried in order; the first with a non-empty value is the row title.", "type": "array", "items": { "type": "string" } },
365
+ "fallback": { "description": "Title used when every `title` candidate is empty. Defaults to `Item <n>`.", "type": "string" },
366
+ "summary": {
367
+ "description": "The monospace trailing line, parts joined with \" · \". A string names an item property; an object wraps it in a `pattern`.",
368
+ "type": "array",
369
+ "items": { "anyOf": [{ "type": "string" }, { "$ref": "#/$defs/ArrayItemSummaryPart" }] }
370
+ },
371
+ "glyph": { "description": "Enum item property supplying the leading glyph's icon (`x-enum-icons`) and tone (`x-enum-tones`).", "type": "string" },
372
+ "badge": { "description": "Enum item property supplying a secondary chip.", "type": "string" },
373
+ "flag": { "description": "Boolean item property rendered as the required mark.", "type": "string" },
374
+ "actions": {
375
+ "description": "Which per-item actions rows offer. Omit for all of them; `[]` for none. `reorder` covers both the up and the down button.",
376
+ "type": "array",
377
+ "items": { "enum": ["reorder", "duplicate", "remove"] },
378
+ "uniqueItems": true
379
+ },
380
+ "noun": { "description": "Noun for the add row (\"Add parameter\"). Defaults to `items.title`, then \"item\".", "type": "string" },
381
+ "nounPlural": { "description": "Plural for the count line (\"4 parameters\"). Defaults to the array title, then \"items\".", "type": "string" },
382
+ "empty": { "description": "Copy shown by the add row at zero items. Defaults to the array's own description.", "type": "string" }
383
+ },
384
+ "examples": [
385
+ { "title": ["name", "key"], "summary": ["type", { "property": "name", "pattern": "{{.params.{}}}" }], "glyph": "type", "flag": "required", "noun": "parameter" }
386
+ ]
387
+ },
388
+ "LookupDescriptor": {
389
+ "type": "object",
390
+ "additionalProperties": false,
391
+ "required": ["url", "filter"],
392
+ "properties": {
393
+ "url": { "description": "Entity list path that serves the lookup.", "type": "string", "examples": ["/api/v1/connection"] },
394
+ "filter": { "description": "Filter key sent as `__lookup_filter`; the response keys its options (and the committed value) under it.", "type": "string", "examples": ["name"] },
395
+ "searchParam": { "description": "Query-string key for the search term. Informational — the client always sends `__lookup_q`.", "type": "string" },
396
+ "multi": { "description": "Allow multiple selected values (for an array field). Single-select also accepts free-form entry.", "type": "boolean" },
397
+ "scope": {
398
+ "description": "Derive an extra query param from another field so the option set is filtered by it.",
399
+ "type": "object",
400
+ "additionalProperties": false,
401
+ "required": ["param", "from"],
402
+ "properties": {
403
+ "param": { "description": "Query-string key to send.", "type": "string", "examples": ["types"] },
404
+ "from": { "description": "Dotted path into the form's root value.", "type": "string", "examples": ["provider.type"] },
405
+ "map": {
406
+ "description": "Maps the source value to the emitted values. When absent the source value is sent verbatim.",
407
+ "type": "object",
408
+ "additionalProperties": { "type": "array", "items": { "type": "string" } },
409
+ "examples": [{ "sql": ["postgres", "mysql"] }]
410
+ },
411
+ "join": { "description": "Joins mapped values into the param. Defaults to \",\".", "type": "string" }
412
+ }
413
+ },
414
+ "hierarchy": {
415
+ "description": "Render options as a browsable tree by splitting each label on any character in `delimiters`. Presentational only — the committed value is the unsplit option value.",
416
+ "type": "object",
417
+ "additionalProperties": false,
418
+ "required": ["delimiters"],
419
+ "properties": {
420
+ "delimiters": { "description": "Characters separating one level from the next.", "type": "string", "minLength": 1, "examples": ["./"] }
421
+ }
422
+ }
423
+ }
424
+ },
425
+ "MdxViewMode": { "enum": ["rich-text", "source", "diff"] },
426
+ "MdxEditorOptions": {
427
+ "type": "object",
428
+ "additionalProperties": false,
429
+ "properties": {
430
+ "toolbar": {
431
+ "description": "Show the toolbar, optionally positioned and styled.",
432
+ "anyOf": [
433
+ { "type": "boolean" },
434
+ {
435
+ "type": "object",
436
+ "additionalProperties": false,
437
+ "properties": {
438
+ "className": { "type": "string" },
439
+ "position": { "enum": ["top", "bottom"] }
440
+ }
441
+ }
442
+ ]
443
+ },
444
+ "headings": {
445
+ "description": "Enable headings, optionally limited to some levels.",
446
+ "anyOf": [
447
+ { "type": "boolean" },
448
+ {
449
+ "type": "object",
450
+ "additionalProperties": false,
451
+ "properties": {
452
+ "allowedHeadingLevels": { "type": "array", "items": { "type": "integer", "minimum": 1, "maximum": 6 } }
453
+ }
454
+ }
455
+ ]
456
+ },
457
+ "lists": { "type": "boolean" },
458
+ "quote": { "type": "boolean" },
459
+ "links": {
460
+ "anyOf": [
461
+ { "type": "boolean" },
462
+ {
463
+ "type": "object",
464
+ "additionalProperties": false,
465
+ "properties": {
466
+ "disableAutoLink": { "type": "boolean" },
467
+ "linkAutocompleteSuggestions": { "type": "array", "items": { "type": "string" } },
468
+ "showLinkTitleField": { "type": "boolean" }
469
+ }
470
+ }
471
+ ]
472
+ },
473
+ "tables": { "type": "boolean" },
474
+ "thematicBreak": { "type": "boolean" },
475
+ "codeBlocks": {
476
+ "anyOf": [
477
+ { "type": "boolean" },
478
+ {
479
+ "type": "object",
480
+ "additionalProperties": false,
481
+ "properties": { "defaultLanguage": { "type": "string" } }
482
+ }
483
+ ]
484
+ },
485
+ "codeMirror": {
486
+ "anyOf": [
487
+ { "type": "boolean" },
488
+ {
489
+ "type": "object",
490
+ "additionalProperties": false,
491
+ "properties": {
492
+ "languages": {
493
+ "description": "Language id → display name, or a list of language descriptors.",
494
+ "anyOf": [
495
+ { "type": "object", "additionalProperties": { "type": "string" } },
496
+ { "type": "array", "items": { "type": "object", "required": ["name"], "properties": { "name": { "type": "string" } } } }
497
+ ]
498
+ },
499
+ "autoLoadLanguageSupport": { "type": "boolean" }
500
+ }
501
+ }
502
+ ]
503
+ },
504
+ "frontmatter": { "type": "boolean" },
505
+ "admonitions": {
506
+ "anyOf": [
507
+ { "type": "boolean" },
508
+ {
509
+ "type": "object",
510
+ "additionalProperties": false,
511
+ "properties": { "escapeUnknownTextDirectives": { "type": "boolean" } }
512
+ }
513
+ ]
514
+ },
515
+ "callouts": {
516
+ "description": "Register `<CalloutBox>` with its own node editor. Off by default.",
517
+ "anyOf": [
518
+ { "type": "boolean" },
519
+ {
520
+ "type": "object",
521
+ "additionalProperties": false,
522
+ "properties": {
523
+ "name": { "description": "Tag to register. Defaults to `CalloutBox`.", "type": "string" },
524
+ "source": { "description": "Module the component is imported from, if the document needs the import.", "type": "string" }
525
+ }
526
+ }
527
+ ]
528
+ },
529
+ "images": {
530
+ "anyOf": [
531
+ { "type": "boolean" },
532
+ {
533
+ "type": "object",
534
+ "additionalProperties": false,
535
+ "properties": {
536
+ "imageAutocompleteSuggestions": { "type": "array", "items": { "type": "string" } },
537
+ "disableImageResize": { "type": "boolean" },
538
+ "disableImageSettingsButton": { "type": "boolean" },
539
+ "allowSetImageDimensions": { "type": "boolean" }
540
+ }
541
+ }
542
+ ]
543
+ },
544
+ "markdownShortcuts": { "type": "boolean" },
545
+ "diffMode": {
546
+ "description": "Enable the rich-text/source/diff view switcher, or start in a given view mode.",
547
+ "anyOf": [
548
+ { "type": "boolean" },
549
+ { "$ref": "#/$defs/MdxViewMode" },
550
+ {
551
+ "type": "object",
552
+ "additionalProperties": false,
553
+ "properties": {
554
+ "viewMode": { "$ref": "#/$defs/MdxViewMode" },
555
+ "viewModes": { "type": "array", "items": { "$ref": "#/$defs/MdxViewMode" } },
556
+ "diffMarkdown": { "description": "Baseline markdown the diff view compares against.", "type": "string" },
557
+ "readOnlyDiff": { "type": "boolean" }
558
+ }
559
+ }
560
+ ]
561
+ }
562
+ },
563
+ "examples": [{ "tables": true, "diffMode": { "viewMode": "rich-text", "viewModes": ["rich-text", "source"] } }]
564
+ }
565
+ }
566
+ }