@flanksource/clicky-ui 0.3.54 → 0.3.56

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 (999) hide show
  1. package/NOTICE.md +6 -0
  2. package/dist/ai.cjs +6 -0
  3. package/dist/ai.js +3 -1
  4. package/dist/chat.cjs +2 -0
  5. package/dist/chat.d.ts +1 -0
  6. package/dist/chat.d.ts.map +1 -1
  7. package/dist/chat.js +2 -1
  8. package/dist/comments/CommentCard.cjs +37 -7
  9. package/dist/comments/CommentCard.cjs.map +1 -1
  10. package/dist/comments/CommentCard.d.ts +11 -1
  11. package/dist/comments/CommentCard.d.ts.map +1 -1
  12. package/dist/comments/CommentCard.js +37 -7
  13. package/dist/comments/CommentCard.js.map +1 -1
  14. package/dist/comments/CommentCardParts.cjs +9 -4
  15. package/dist/comments/CommentCardParts.cjs.map +1 -1
  16. package/dist/comments/CommentCardParts.d.ts.map +1 -1
  17. package/dist/comments/CommentCardParts.js +9 -4
  18. package/dist/comments/CommentCardParts.js.map +1 -1
  19. package/dist/comments/CommentComposer.cjs +8 -8
  20. package/dist/comments/CommentComposer.cjs.map +1 -1
  21. package/dist/comments/CommentComposer.d.ts.map +1 -1
  22. package/dist/comments/CommentComposer.js +8 -8
  23. package/dist/comments/CommentComposer.js.map +1 -1
  24. package/dist/comments/CommentProvider.cjs +5 -1
  25. package/dist/comments/CommentProvider.cjs.map +1 -1
  26. package/dist/comments/CommentProvider.d.ts +1 -1
  27. package/dist/comments/CommentProvider.d.ts.map +1 -1
  28. package/dist/comments/CommentProvider.js +5 -1
  29. package/dist/comments/CommentProvider.js.map +1 -1
  30. package/dist/comments/CommentSidePanel.cjs +17 -11
  31. package/dist/comments/CommentSidePanel.cjs.map +1 -1
  32. package/dist/comments/CommentSidePanel.d.ts +6 -0
  33. package/dist/comments/CommentSidePanel.d.ts.map +1 -1
  34. package/dist/comments/CommentSidePanel.js +17 -11
  35. package/dist/comments/CommentSidePanel.js.map +1 -1
  36. package/dist/comments/CommentThread.cjs +4 -1
  37. package/dist/comments/CommentThread.cjs.map +1 -1
  38. package/dist/comments/CommentThread.d.ts +4 -1
  39. package/dist/comments/CommentThread.d.ts.map +1 -1
  40. package/dist/comments/CommentThread.js +4 -1
  41. package/dist/comments/CommentThread.js.map +1 -1
  42. package/dist/comments/CommentThreadList.cjs +6 -3
  43. package/dist/comments/CommentThreadList.cjs.map +1 -1
  44. package/dist/comments/CommentThreadList.d.ts +7 -2
  45. package/dist/comments/CommentThreadList.d.ts.map +1 -1
  46. package/dist/comments/CommentThreadList.js +6 -3
  47. package/dist/comments/CommentThreadList.js.map +1 -1
  48. package/dist/comments/MentionTextarea.cjs +1 -1
  49. package/dist/comments/MentionTextarea.cjs.map +1 -1
  50. package/dist/comments/MentionTextarea.d.ts.map +1 -1
  51. package/dist/comments/MentionTextarea.js +1 -1
  52. package/dist/comments/MentionTextarea.js.map +1 -1
  53. package/dist/comments/comment-assign.cjs +68 -0
  54. package/dist/comments/comment-assign.cjs.map +1 -0
  55. package/dist/comments/comment-assign.d.ts +31 -0
  56. package/dist/comments/comment-assign.d.ts.map +1 -0
  57. package/dist/comments/comment-assign.js +67 -0
  58. package/dist/comments/comment-assign.js.map +1 -0
  59. package/dist/comments/comment-types.cjs.map +1 -1
  60. package/dist/comments/comment-types.d.ts +39 -0
  61. package/dist/comments/comment-types.d.ts.map +1 -1
  62. package/dist/comments/comment-types.js.map +1 -1
  63. package/dist/comments/comment-utils.cjs +2 -0
  64. package/dist/comments/comment-utils.cjs.map +1 -1
  65. package/dist/comments/comment-utils.d.ts +2 -0
  66. package/dist/comments/comment-utils.d.ts.map +1 -1
  67. package/dist/comments/comment-utils.js +2 -0
  68. package/dist/comments/comment-utils.js.map +1 -1
  69. package/dist/comments.cjs +3 -0
  70. package/dist/comments.d.ts +1 -0
  71. package/dist/comments.d.ts.map +1 -1
  72. package/dist/comments.js +2 -1
  73. package/dist/components/ComboboxMenu.cjs +23 -13
  74. package/dist/components/ComboboxMenu.cjs.map +1 -1
  75. package/dist/components/ComboboxMenu.d.ts.map +1 -1
  76. package/dist/components/ComboboxMenu.js +23 -13
  77. package/dist/components/ComboboxMenu.js.map +1 -1
  78. package/dist/components/FilterBar.cjs +29 -6
  79. package/dist/components/FilterBar.cjs.map +1 -1
  80. package/dist/components/FilterBar.d.ts +3 -1
  81. package/dist/components/FilterBar.d.ts.map +1 -1
  82. package/dist/components/FilterBar.js +29 -6
  83. package/dist/components/FilterBar.js.map +1 -1
  84. package/dist/components/ItemActions.cjs +1 -1
  85. package/dist/components/ItemActions.cjs.map +1 -1
  86. package/dist/components/ItemActions.js +1 -1
  87. package/dist/components/ItemActions.js.map +1 -1
  88. package/dist/components/ListMenu.cjs +33 -3
  89. package/dist/components/ListMenu.cjs.map +1 -1
  90. package/dist/components/ListMenu.d.ts +4 -1
  91. package/dist/components/ListMenu.d.ts.map +1 -1
  92. package/dist/components/ListMenu.js +33 -3
  93. package/dist/components/ListMenu.js.map +1 -1
  94. package/dist/components/ListMenuItems.cjs +80 -0
  95. package/dist/components/ListMenuItems.cjs.map +1 -0
  96. package/dist/components/ListMenuItems.d.ts +8 -0
  97. package/dist/components/ListMenuItems.d.ts.map +1 -0
  98. package/dist/components/ListMenuItems.js +80 -0
  99. package/dist/components/ListMenuItems.js.map +1 -0
  100. package/dist/components/LocalPathPicker.cjs +182 -0
  101. package/dist/components/LocalPathPicker.cjs.map +1 -0
  102. package/dist/components/LocalPathPicker.d.ts +11 -0
  103. package/dist/components/LocalPathPicker.d.ts.map +1 -0
  104. package/dist/components/LocalPathPicker.js +182 -0
  105. package/dist/components/LocalPathPicker.js.map +1 -0
  106. package/dist/components/LocalPathTree.cjs +89 -0
  107. package/dist/components/LocalPathTree.cjs.map +1 -0
  108. package/dist/components/LocalPathTree.d.ts +9 -0
  109. package/dist/components/LocalPathTree.d.ts.map +1 -0
  110. package/dist/components/LocalPathTree.js +89 -0
  111. package/dist/components/LocalPathTree.js.map +1 -0
  112. package/dist/components/RangeSlider.cjs +10 -30
  113. package/dist/components/RangeSlider.cjs.map +1 -1
  114. package/dist/components/RangeSlider.d.ts.map +1 -1
  115. package/dist/components/RangeSlider.js +4 -24
  116. package/dist/components/RangeSlider.js.map +1 -1
  117. package/dist/components/Slider.cjs +79 -0
  118. package/dist/components/Slider.cjs.map +1 -0
  119. package/dist/components/Slider.d.ts +23 -0
  120. package/dist/components/Slider.d.ts.map +1 -0
  121. package/dist/components/Slider.js +79 -0
  122. package/dist/components/Slider.js.map +1 -0
  123. package/dist/components/combobox-types.d.ts +4 -1
  124. package/dist/components/combobox-types.d.ts.map +1 -1
  125. package/dist/components/filter-bar-field-utils.cjs +3 -5
  126. package/dist/components/filter-bar-field-utils.cjs.map +1 -1
  127. package/dist/components/filter-bar-field-utils.d.ts.map +1 -1
  128. package/dist/components/filter-bar-field-utils.js +3 -5
  129. package/dist/components/filter-bar-field-utils.js.map +1 -1
  130. package/dist/components/filter-bar-tree-model.cjs +22 -0
  131. package/dist/components/filter-bar-tree-model.cjs.map +1 -0
  132. package/dist/components/filter-bar-tree-model.d.ts +33 -0
  133. package/dist/components/filter-bar-tree-model.d.ts.map +1 -0
  134. package/dist/components/filter-bar-tree-model.js +21 -0
  135. package/dist/components/filter-bar-tree-model.js.map +1 -0
  136. package/dist/components/filter-bar-tree.cjs +84 -0
  137. package/dist/components/filter-bar-tree.cjs.map +1 -0
  138. package/dist/components/filter-bar-tree.d.ts +7 -0
  139. package/dist/components/filter-bar-tree.d.ts.map +1 -0
  140. package/dist/components/filter-bar-tree.js +84 -0
  141. package/dist/components/filter-bar-tree.js.map +1 -0
  142. package/dist/components/json-schema-form-debug-glyph-map.cjs +2 -0
  143. package/dist/components/json-schema-form-debug-glyph-map.cjs.map +1 -1
  144. package/dist/components/json-schema-form-debug-glyph-map.d.ts.map +1 -1
  145. package/dist/components/json-schema-form-debug-glyph-map.js +2 -0
  146. package/dist/components/json-schema-form-debug-glyph-map.js.map +1 -1
  147. package/dist/components/json-schema-form-help-links.cjs +18 -0
  148. package/dist/components/json-schema-form-help-links.cjs.map +1 -0
  149. package/dist/components/json-schema-form-help-links.d.ts +5 -0
  150. package/dist/components/json-schema-form-help-links.d.ts.map +1 -0
  151. package/dist/components/json-schema-form-help-links.js +18 -0
  152. package/dist/components/json-schema-form-help-links.js.map +1 -0
  153. package/dist/components/json-schema-form-help-model.cjs +7 -0
  154. package/dist/components/json-schema-form-help-model.cjs.map +1 -0
  155. package/dist/components/json-schema-form-help-model.d.ts +3 -0
  156. package/dist/components/json-schema-form-help-model.d.ts.map +1 -0
  157. package/dist/components/json-schema-form-help-model.js +7 -0
  158. package/dist/components/json-schema-form-help-model.js.map +1 -0
  159. package/dist/components/json-schema-form-json.cjs +48 -0
  160. package/dist/components/json-schema-form-json.cjs.map +1 -0
  161. package/dist/components/json-schema-form-json.d.ts +7 -0
  162. package/dist/components/json-schema-form-json.d.ts.map +1 -0
  163. package/dist/components/json-schema-form-json.js +48 -0
  164. package/dist/components/json-schema-form-json.js.map +1 -0
  165. package/dist/components/json-schema-form-layout.cjs +7 -5
  166. package/dist/components/json-schema-form-layout.cjs.map +1 -1
  167. package/dist/components/json-schema-form-layout.d.ts +2 -2
  168. package/dist/components/json-schema-form-layout.d.ts.map +1 -1
  169. package/dist/components/json-schema-form-layout.js +7 -5
  170. package/dist/components/json-schema-form-layout.js.map +1 -1
  171. package/dist/components/json-schema-form-object.cjs +2 -13
  172. package/dist/components/json-schema-form-object.cjs.map +1 -1
  173. package/dist/components/json-schema-form-object.d.ts.map +1 -1
  174. package/dist/components/json-schema-form-object.js +2 -13
  175. package/dist/components/json-schema-form-object.js.map +1 -1
  176. package/dist/components/json-schema-form-refs.cjs +1 -1
  177. package/dist/components/json-schema-form-refs.cjs.map +1 -1
  178. package/dist/components/json-schema-form-refs.d.ts.map +1 -1
  179. package/dist/components/json-schema-form-refs.js +1 -1
  180. package/dist/components/json-schema-form-refs.js.map +1 -1
  181. package/dist/components/json-schema-form-render.cjs +20 -6
  182. package/dist/components/json-schema-form-render.cjs.map +1 -1
  183. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  184. package/dist/components/json-schema-form-render.js +20 -6
  185. package/dist/components/json-schema-form-render.js.map +1 -1
  186. package/dist/components/json-schema-form-resolve.cjs +22 -2
  187. package/dist/components/json-schema-form-resolve.cjs.map +1 -1
  188. package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
  189. package/dist/components/json-schema-form-resolve.js +22 -2
  190. package/dist/components/json-schema-form-resolve.js.map +1 -1
  191. package/dist/components/json-schema-form-types.d.ts +5 -1
  192. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  193. package/dist/components/json-schema-form-union-model.cjs +46 -0
  194. package/dist/components/json-schema-form-union-model.cjs.map +1 -0
  195. package/dist/components/json-schema-form-union-model.d.ts +6 -0
  196. package/dist/components/json-schema-form-union-model.d.ts.map +1 -0
  197. package/dist/components/json-schema-form-union-model.js +43 -0
  198. package/dist/components/json-schema-form-union-model.js.map +1 -0
  199. package/dist/components/json-schema-form-union.cjs +52 -0
  200. package/dist/components/json-schema-form-union.cjs.map +1 -0
  201. package/dist/components/json-schema-form-union.d.ts +7 -0
  202. package/dist/components/json-schema-form-union.d.ts.map +1 -0
  203. package/dist/components/json-schema-form-union.js +52 -0
  204. package/dist/components/json-schema-form-union.js.map +1 -0
  205. package/dist/components/list-menu-virtual.cjs +5 -0
  206. package/dist/components/list-menu-virtual.cjs.map +1 -0
  207. package/dist/components/list-menu-virtual.d.ts +12 -0
  208. package/dist/components/list-menu-virtual.d.ts.map +1 -0
  209. package/dist/components/list-menu-virtual.js +6 -0
  210. package/dist/components/list-menu-virtual.js.map +1 -0
  211. package/dist/components/local-path.cjs +12 -0
  212. package/dist/components/local-path.cjs.map +1 -0
  213. package/dist/components/local-path.d.ts +14 -0
  214. package/dist/components/local-path.d.ts.map +1 -0
  215. package/dist/components/local-path.js +12 -0
  216. package/dist/components/local-path.js.map +1 -0
  217. package/dist/components/slider-shared.cjs +32 -0
  218. package/dist/components/slider-shared.cjs.map +1 -0
  219. package/dist/components/slider-shared.d.ts +18 -0
  220. package/dist/components/slider-shared.d.ts.map +1 -0
  221. package/dist/components/slider-shared.js +27 -0
  222. package/dist/components/slider-shared.js.map +1 -0
  223. package/dist/components.cjs +8 -0
  224. package/dist/components.d.ts +6 -1
  225. package/dist/components.d.ts.map +1 -1
  226. package/dist/components.js +5 -1
  227. package/dist/connections/ConnectionsPage.cjs +51 -19
  228. package/dist/connections/ConnectionsPage.cjs.map +1 -1
  229. package/dist/connections/ConnectionsPage.d.ts +9 -1
  230. package/dist/connections/ConnectionsPage.d.ts.map +1 -1
  231. package/dist/connections/ConnectionsPage.js +52 -20
  232. package/dist/connections/ConnectionsPage.js.map +1 -1
  233. package/dist/connections/connectionDashboard.cjs +13 -8
  234. package/dist/connections/connectionDashboard.cjs.map +1 -1
  235. package/dist/connections/connectionDashboard.d.ts +8 -3
  236. package/dist/connections/connectionDashboard.d.ts.map +1 -1
  237. package/dist/connections/connectionDashboard.js +14 -9
  238. package/dist/connections/connectionDashboard.js.map +1 -1
  239. package/dist/connections/connectionDashboardModel.cjs.map +1 -1
  240. package/dist/connections/connectionDashboardModel.d.ts +4 -0
  241. package/dist/connections/connectionDashboardModel.d.ts.map +1 -1
  242. package/dist/connections/connectionDashboardModel.js.map +1 -1
  243. package/dist/connections/connectionDashboardRow.cjs +75 -55
  244. package/dist/connections/connectionDashboardRow.cjs.map +1 -1
  245. package/dist/connections/connectionDashboardRow.d.ts +3 -2
  246. package/dist/connections/connectionDashboardRow.d.ts.map +1 -1
  247. package/dist/connections/connectionDashboardRow.js +75 -55
  248. package/dist/connections/connectionDashboardRow.js.map +1 -1
  249. package/dist/connections/connectionNamespaceField.cjs +17 -0
  250. package/dist/connections/connectionNamespaceField.cjs.map +1 -0
  251. package/dist/connections/connectionNamespaceField.d.ts +10 -0
  252. package/dist/connections/connectionNamespaceField.d.ts.map +1 -0
  253. package/dist/connections/connectionNamespaceField.js +17 -0
  254. package/dist/connections/connectionNamespaceField.js.map +1 -0
  255. package/dist/connections/connectionSchemaFormExtensions.cjs +98 -0
  256. package/dist/connections/connectionSchemaFormExtensions.cjs.map +1 -0
  257. package/dist/connections/connectionSchemaFormExtensions.d.ts +41 -0
  258. package/dist/connections/connectionSchemaFormExtensions.d.ts.map +1 -0
  259. package/dist/connections/connectionSchemaFormExtensions.js +96 -0
  260. package/dist/connections/connectionSchemaFormExtensions.js.map +1 -0
  261. package/dist/connections/connectionsPageModel.cjs +11 -0
  262. package/dist/connections/connectionsPageModel.cjs.map +1 -1
  263. package/dist/connections/connectionsPageModel.d.ts +5 -0
  264. package/dist/connections/connectionsPageModel.d.ts.map +1 -1
  265. package/dist/connections/connectionsPageModel.js +11 -1
  266. package/dist/connections/connectionsPageModel.js.map +1 -1
  267. package/dist/connections.cjs +5 -0
  268. package/dist/connections.d.ts +2 -1
  269. package/dist/connections.d.ts.map +1 -1
  270. package/dist/connections.js +3 -2
  271. package/dist/data/AvatarBadge.cjs +3 -3
  272. package/dist/data/AvatarBadge.cjs.map +1 -1
  273. package/dist/data/AvatarBadge.js +3 -3
  274. package/dist/data/AvatarBadge.js.map +1 -1
  275. package/dist/data/CodeDiff.cjs +2 -0
  276. package/dist/data/CodeDiff.cjs.map +1 -1
  277. package/dist/data/CodeDiff.js +2 -0
  278. package/dist/data/CodeDiff.js.map +1 -1
  279. package/dist/data/DataTable.cjs +3 -2
  280. package/dist/data/DataTable.cjs.map +1 -1
  281. package/dist/data/DataTable.d.ts.map +1 -1
  282. package/dist/data/DataTable.js +3 -2
  283. package/dist/data/DataTable.js.map +1 -1
  284. package/dist/data/Gauge.cjs +1 -1
  285. package/dist/data/Gauge.cjs.map +1 -1
  286. package/dist/data/Gauge.js +1 -1
  287. package/dist/data/Gauge.js.map +1 -1
  288. package/dist/data/HighlightedTokens.cjs +2 -10
  289. package/dist/data/HighlightedTokens.cjs.map +1 -1
  290. package/dist/data/HighlightedTokens.d.ts.map +1 -1
  291. package/dist/data/HighlightedTokens.js +1 -9
  292. package/dist/data/HighlightedTokens.js.map +1 -1
  293. package/dist/data/Markdown.cjs +38 -11
  294. package/dist/data/Markdown.cjs.map +1 -1
  295. package/dist/data/Markdown.d.ts +9 -1
  296. package/dist/data/Markdown.d.ts.map +1 -1
  297. package/dist/data/Markdown.js +39 -12
  298. package/dist/data/Markdown.js.map +1 -1
  299. package/dist/data/MultiGaugeBar.cjs +157 -0
  300. package/dist/data/MultiGaugeBar.cjs.map +1 -0
  301. package/dist/data/MultiGaugeBar.d.ts +29 -0
  302. package/dist/data/MultiGaugeBar.d.ts.map +1 -0
  303. package/dist/data/MultiGaugeBar.js +157 -0
  304. package/dist/data/MultiGaugeBar.js.map +1 -0
  305. package/dist/data/OpenInFilesLink.cjs +27 -0
  306. package/dist/data/OpenInFilesLink.cjs.map +1 -0
  307. package/dist/data/OpenInFilesLink.d.ts +15 -0
  308. package/dist/data/OpenInFilesLink.d.ts.map +1 -0
  309. package/dist/data/OpenInFilesLink.js +27 -0
  310. package/dist/data/OpenInFilesLink.js.map +1 -0
  311. package/dist/data/ProgressBar.cjs +5 -3
  312. package/dist/data/ProgressBar.cjs.map +1 -1
  313. package/dist/data/ProgressBar.d.ts +5 -1
  314. package/dist/data/ProgressBar.d.ts.map +1 -1
  315. package/dist/data/ProgressBar.js +5 -3
  316. package/dist/data/ProgressBar.js.map +1 -1
  317. package/dist/data/ProgressBars.cjs +13 -5
  318. package/dist/data/ProgressBars.cjs.map +1 -1
  319. package/dist/data/ProgressBars.d.ts +6 -1
  320. package/dist/data/ProgressBars.d.ts.map +1 -1
  321. package/dist/data/ProgressBars.js +13 -5
  322. package/dist/data/ProgressBars.js.map +1 -1
  323. package/dist/data/Properties.cjs +3 -3
  324. package/dist/data/Properties.cjs.map +1 -1
  325. package/dist/data/Properties.js +3 -3
  326. package/dist/data/Properties.js.map +1 -1
  327. package/dist/data/TaskProgress.cjs +14 -6
  328. package/dist/data/TaskProgress.cjs.map +1 -1
  329. package/dist/data/TaskProgress.d.ts +3 -1
  330. package/dist/data/TaskProgress.d.ts.map +1 -1
  331. package/dist/data/TaskProgress.js +14 -6
  332. package/dist/data/TaskProgress.js.map +1 -1
  333. package/dist/data/TaskPrompts.cjs +96 -0
  334. package/dist/data/TaskPrompts.cjs.map +1 -0
  335. package/dist/data/TaskPrompts.d.ts +6 -0
  336. package/dist/data/TaskPrompts.d.ts.map +1 -0
  337. package/dist/data/TaskPrompts.js +96 -0
  338. package/dist/data/TaskPrompts.js.map +1 -0
  339. package/dist/data/TaskSnapshot.cjs.map +1 -1
  340. package/dist/data/TaskSnapshot.d.ts +3 -0
  341. package/dist/data/TaskSnapshot.d.ts.map +1 -1
  342. package/dist/data/TaskSnapshot.js.map +1 -1
  343. package/dist/data/TimeseriesCoreBars.cjs +7 -3
  344. package/dist/data/TimeseriesCoreBars.cjs.map +1 -1
  345. package/dist/data/TimeseriesCoreBars.d.ts.map +1 -1
  346. package/dist/data/TimeseriesCoreBars.js +8 -4
  347. package/dist/data/TimeseriesCoreBars.js.map +1 -1
  348. package/dist/data/TimeseriesGauge.cjs +12 -5
  349. package/dist/data/TimeseriesGauge.cjs.map +1 -1
  350. package/dist/data/TimeseriesGauge.d.ts.map +1 -1
  351. package/dist/data/TimeseriesGauge.js +13 -6
  352. package/dist/data/TimeseriesGauge.js.map +1 -1
  353. package/dist/data/TimeseriesPanel.cjs +10 -9
  354. package/dist/data/TimeseriesPanel.cjs.map +1 -1
  355. package/dist/data/TimeseriesPanel.d.ts +1 -1
  356. package/dist/data/TimeseriesPanel.d.ts.map +1 -1
  357. package/dist/data/TimeseriesPanel.js +11 -10
  358. package/dist/data/TimeseriesPanel.js.map +1 -1
  359. package/dist/data/TimeseriesPanel.model.cjs +62 -10
  360. package/dist/data/TimeseriesPanel.model.cjs.map +1 -1
  361. package/dist/data/TimeseriesPanel.model.d.ts +40 -1
  362. package/dist/data/TimeseriesPanel.model.d.ts.map +1 -1
  363. package/dist/data/TimeseriesPanel.model.js +62 -11
  364. package/dist/data/TimeseriesPanel.model.js.map +1 -1
  365. package/dist/data/WorkloadCard.cjs +7 -3
  366. package/dist/data/WorkloadCard.cjs.map +1 -1
  367. package/dist/data/WorkloadCard.d.ts +3 -1
  368. package/dist/data/WorkloadCard.d.ts.map +1 -1
  369. package/dist/data/WorkloadCard.js +7 -3
  370. package/dist/data/WorkloadCard.js.map +1 -1
  371. package/dist/data/WorkloadCard.model.cjs.map +1 -1
  372. package/dist/data/WorkloadCard.model.d.ts +2 -0
  373. package/dist/data/WorkloadCard.model.d.ts.map +1 -1
  374. package/dist/data/WorkloadCard.model.js.map +1 -1
  375. package/dist/data/ai/ChatWindow.placement.cjs +2 -1
  376. package/dist/data/ai/ChatWindow.placement.cjs.map +1 -1
  377. package/dist/data/ai/ChatWindow.placement.d.ts +1 -1
  378. package/dist/data/ai/ChatWindow.placement.d.ts.map +1 -1
  379. package/dist/data/ai/ChatWindow.placement.js +2 -1
  380. package/dist/data/ai/ChatWindow.placement.js.map +1 -1
  381. package/dist/data/ai/SpecRuntimeBar.cjs +2 -2
  382. package/dist/data/ai/SpecRuntimeBar.cjs.map +1 -1
  383. package/dist/data/ai/SpecRuntimeBar.d.ts +4 -1
  384. package/dist/data/ai/SpecRuntimeBar.d.ts.map +1 -1
  385. package/dist/data/ai/SpecRuntimeBar.js +2 -2
  386. package/dist/data/ai/SpecRuntimeBar.js.map +1 -1
  387. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs +1 -1
  388. package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs.map +1 -1
  389. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js +1 -1
  390. package/dist/data/ai/SpecRuntimeEditor/PromptSection.js.map +1 -1
  391. package/dist/data/ai/SpecRuntimeEditor.model.cjs +2 -2
  392. package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
  393. package/dist/data/ai/SpecRuntimeEditor.model.d.ts +2 -2
  394. package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
  395. package/dist/data/ai/SpecRuntimeEditor.model.js +2 -2
  396. package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -1
  397. package/dist/data/ai/ThreadPicker.cjs +2 -2
  398. package/dist/data/ai/ThreadPicker.cjs.map +1 -1
  399. package/dist/data/ai/ThreadPicker.js +2 -2
  400. package/dist/data/ai/ThreadPicker.js.map +1 -1
  401. package/dist/data/ai/index.d.ts +2 -0
  402. package/dist/data/ai/index.d.ts.map +1 -1
  403. package/dist/data/ai/use-prompt-run-stream.cjs +126 -0
  404. package/dist/data/ai/use-prompt-run-stream.cjs.map +1 -0
  405. package/dist/data/ai/use-prompt-run-stream.d.ts +52 -0
  406. package/dist/data/ai/use-prompt-run-stream.d.ts.map +1 -0
  407. package/dist/data/ai/use-prompt-run-stream.js +126 -0
  408. package/dist/data/ai/use-prompt-run-stream.js.map +1 -0
  409. package/dist/data/cache-browser/CacheBrowser.cjs +1 -0
  410. package/dist/data/cache-browser/CacheBrowser.cjs.map +1 -1
  411. package/dist/data/cache-browser/CacheBrowser.d.ts.map +1 -1
  412. package/dist/data/cache-browser/CacheBrowser.js +1 -0
  413. package/dist/data/cache-browser/CacheBrowser.js.map +1 -1
  414. package/dist/data/charts/BarChart.cjs +194 -0
  415. package/dist/data/charts/BarChart.cjs.map +1 -0
  416. package/dist/data/charts/BarChart.d.ts +19 -0
  417. package/dist/data/charts/BarChart.d.ts.map +1 -0
  418. package/dist/data/charts/BarChart.js +194 -0
  419. package/dist/data/charts/BarChart.js.map +1 -0
  420. package/dist/data/charts/ChartLegend.cjs +54 -0
  421. package/dist/data/charts/ChartLegend.cjs.map +1 -0
  422. package/dist/data/charts/ChartLegend.d.ts +17 -0
  423. package/dist/data/charts/ChartLegend.d.ts.map +1 -0
  424. package/dist/data/charts/ChartLegend.js +54 -0
  425. package/dist/data/charts/ChartLegend.js.map +1 -0
  426. package/dist/data/charts/Sparkline.cjs +56 -0
  427. package/dist/data/charts/Sparkline.cjs.map +1 -0
  428. package/dist/data/charts/Sparkline.d.ts +15 -0
  429. package/dist/data/charts/Sparkline.d.ts.map +1 -0
  430. package/dist/data/charts/Sparkline.js +56 -0
  431. package/dist/data/charts/Sparkline.js.map +1 -0
  432. package/dist/data/charts/StackedBarChart.cjs +241 -0
  433. package/dist/data/charts/StackedBarChart.cjs.map +1 -0
  434. package/dist/data/charts/StackedBarChart.d.ts +20 -0
  435. package/dist/data/charts/StackedBarChart.d.ts.map +1 -0
  436. package/dist/data/charts/StackedBarChart.js +241 -0
  437. package/dist/data/charts/StackedBarChart.js.map +1 -0
  438. package/dist/data/charts/TrendChart.cjs +157 -0
  439. package/dist/data/charts/TrendChart.cjs.map +1 -0
  440. package/dist/data/charts/TrendChart.d.ts +20 -0
  441. package/dist/data/charts/TrendChart.d.ts.map +1 -0
  442. package/dist/data/charts/TrendChart.js +157 -0
  443. package/dist/data/charts/TrendChart.js.map +1 -0
  444. package/dist/data/charts/chart-marks.cjs +115 -0
  445. package/dist/data/charts/chart-marks.cjs.map +1 -0
  446. package/dist/data/charts/chart-marks.d.ts +39 -0
  447. package/dist/data/charts/chart-marks.d.ts.map +1 -0
  448. package/dist/data/charts/chart-marks.js +112 -0
  449. package/dist/data/charts/chart-marks.js.map +1 -0
  450. package/dist/data/charts/chart-palette.cjs +74 -0
  451. package/dist/data/charts/chart-palette.cjs.map +1 -0
  452. package/dist/data/charts/chart-palette.d.ts +58 -0
  453. package/dist/data/charts/chart-palette.d.ts.map +1 -0
  454. package/dist/data/charts/chart-palette.js +72 -0
  455. package/dist/data/charts/chart-palette.js.map +1 -0
  456. package/dist/data/charts/chart-scale.cjs +115 -0
  457. package/dist/data/charts/chart-scale.cjs.map +1 -0
  458. package/dist/data/charts/chart-scale.d.ts +41 -0
  459. package/dist/data/charts/chart-scale.d.ts.map +1 -0
  460. package/dist/data/charts/chart-scale.js +104 -0
  461. package/dist/data/charts/chart-scale.js.map +1 -0
  462. package/dist/data/charts/chart.test-utils.d.ts +7 -0
  463. package/dist/data/charts/chart.test-utils.d.ts.map +1 -0
  464. package/dist/data/charts/index.d.ts +7 -0
  465. package/dist/data/charts/index.d.ts.map +1 -0
  466. package/dist/data/chat/MessageActions.cjs +1 -1
  467. package/dist/data/chat/MessageActions.cjs.map +1 -1
  468. package/dist/data/chat/MessageActions.js +1 -1
  469. package/dist/data/chat/MessageActions.js.map +1 -1
  470. package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs +1 -1
  471. package/dist/data/diagnostics/DiagnosticsDetailPanel.js +1 -1
  472. package/dist/data/diagnostics/DiagnosticsTree.cjs +1 -1
  473. package/dist/data/diagnostics/DiagnosticsTree.cjs.map +1 -1
  474. package/dist/data/diagnostics/DiagnosticsTree.js +1 -1
  475. package/dist/data/diagnostics/DiagnosticsTree.js.map +1 -1
  476. package/dist/data/diagnostics/FrameSourceWindow.cjs +9 -2
  477. package/dist/data/diagnostics/FrameSourceWindow.cjs.map +1 -1
  478. package/dist/data/diagnostics/FrameSourceWindow.d.ts +1 -1
  479. package/dist/data/diagnostics/FrameSourceWindow.d.ts.map +1 -1
  480. package/dist/data/diagnostics/FrameSourceWindow.js +9 -2
  481. package/dist/data/diagnostics/FrameSourceWindow.js.map +1 -1
  482. package/dist/data/diagnostics/ProblemActions.cjs +37 -0
  483. package/dist/data/diagnostics/ProblemActions.cjs.map +1 -0
  484. package/dist/data/diagnostics/ProblemActions.d.ts +6 -0
  485. package/dist/data/diagnostics/ProblemActions.d.ts.map +1 -0
  486. package/dist/data/diagnostics/ProblemActions.js +37 -0
  487. package/dist/data/diagnostics/ProblemActions.js.map +1 -0
  488. package/dist/data/diagnostics/ProblemFacet.cjs +33 -0
  489. package/dist/data/diagnostics/ProblemFacet.cjs.map +1 -0
  490. package/dist/data/diagnostics/ProblemFacet.d.ts +9 -0
  491. package/dist/data/diagnostics/ProblemFacet.d.ts.map +1 -0
  492. package/dist/data/diagnostics/ProblemFacet.js +33 -0
  493. package/dist/data/diagnostics/ProblemFacet.js.map +1 -0
  494. package/dist/data/diagnostics/ProblemRow.cjs +62 -0
  495. package/dist/data/diagnostics/ProblemRow.cjs.map +1 -0
  496. package/dist/data/diagnostics/ProblemRow.d.ts +14 -0
  497. package/dist/data/diagnostics/ProblemRow.d.ts.map +1 -0
  498. package/dist/data/diagnostics/ProblemRow.js +62 -0
  499. package/dist/data/diagnostics/ProblemRow.js.map +1 -0
  500. package/dist/data/diagnostics/ProblemViewOptions.cjs +18 -0
  501. package/dist/data/diagnostics/ProblemViewOptions.cjs.map +1 -0
  502. package/dist/data/diagnostics/ProblemViewOptions.d.ts +6 -0
  503. package/dist/data/diagnostics/ProblemViewOptions.d.ts.map +1 -0
  504. package/dist/data/diagnostics/ProblemViewOptions.js +18 -0
  505. package/dist/data/diagnostics/ProblemViewOptions.js.map +1 -0
  506. package/dist/data/diagnostics/StackFrameRow.cjs +1 -1
  507. package/dist/data/diagnostics/StackFrameRow.cjs.map +1 -1
  508. package/dist/data/diagnostics/StackFrameRow.js +1 -1
  509. package/dist/data/diagnostics/StackFrameRow.js.map +1 -1
  510. package/dist/data/diagnostics/diagnostic-identity.cjs +14 -0
  511. package/dist/data/diagnostics/diagnostic-identity.cjs.map +1 -0
  512. package/dist/data/diagnostics/diagnostic-identity.d.ts +3 -0
  513. package/dist/data/diagnostics/diagnostic-identity.d.ts.map +1 -0
  514. package/dist/data/diagnostics/diagnostic-identity.js +14 -0
  515. package/dist/data/diagnostics/diagnostic-identity.js.map +1 -0
  516. package/dist/data/diagnostics/use-problem-expansion.cjs +16 -0
  517. package/dist/data/diagnostics/use-problem-expansion.cjs.map +1 -0
  518. package/dist/data/diagnostics/use-problem-expansion.d.ts +3 -0
  519. package/dist/data/diagnostics/use-problem-expansion.d.ts.map +1 -0
  520. package/dist/data/diagnostics/use-problem-expansion.js +16 -0
  521. package/dist/data/diagnostics/use-problem-expansion.js.map +1 -0
  522. package/dist/data/git/GitChangeList.cjs +9 -6
  523. package/dist/data/git/GitChangeList.cjs.map +1 -1
  524. package/dist/data/git/GitChangeList.d.ts +6 -0
  525. package/dist/data/git/GitChangeList.d.ts.map +1 -1
  526. package/dist/data/git/GitChangeList.js +9 -6
  527. package/dist/data/git/GitChangeList.js.map +1 -1
  528. package/dist/data/git/pickers/GitPickersDemo.d.ts.map +1 -1
  529. package/dist/data/git/pickers/ReferencePicker.cjs +1 -0
  530. package/dist/data/git/pickers/ReferencePicker.cjs.map +1 -1
  531. package/dist/data/git/pickers/ReferencePicker.js +1 -0
  532. package/dist/data/git/pickers/ReferencePicker.js.map +1 -1
  533. package/dist/data/lint/LintDetail.cjs +230 -189
  534. package/dist/data/lint/LintDetail.cjs.map +1 -1
  535. package/dist/data/lint/LintDetail.d.ts +25 -3
  536. package/dist/data/lint/LintDetail.d.ts.map +1 -1
  537. package/dist/data/lint/LintDetail.js +231 -192
  538. package/dist/data/lint/LintDetail.js.map +1 -1
  539. package/dist/data/lint/LintFilterBar.cjs +78 -83
  540. package/dist/data/lint/LintFilterBar.cjs.map +1 -1
  541. package/dist/data/lint/LintFilterBar.d.ts +23 -6
  542. package/dist/data/lint/LintFilterBar.d.ts.map +1 -1
  543. package/dist/data/lint/LintFilterBar.js +78 -85
  544. package/dist/data/lint/LintFilterBar.js.map +1 -1
  545. package/dist/data/lint/LintIgnoreMenu.cjs +59 -0
  546. package/dist/data/lint/LintIgnoreMenu.cjs.map +1 -0
  547. package/dist/data/lint/LintIgnoreMenu.d.ts +20 -0
  548. package/dist/data/lint/LintIgnoreMenu.d.ts.map +1 -0
  549. package/dist/data/lint/LintIgnoreMenu.js +58 -0
  550. package/dist/data/lint/LintIgnoreMenu.js.map +1 -0
  551. package/dist/data/lint/LintResults.cjs +59 -14
  552. package/dist/data/lint/LintResults.cjs.map +1 -1
  553. package/dist/data/lint/LintResults.d.ts +25 -1
  554. package/dist/data/lint/LintResults.d.ts.map +1 -1
  555. package/dist/data/lint/LintResults.fixtures.d.ts +19 -0
  556. package/dist/data/lint/LintResults.fixtures.d.ts.map +1 -1
  557. package/dist/data/lint/LintResults.js +60 -15
  558. package/dist/data/lint/LintResults.js.map +1 -1
  559. package/dist/data/lint/LintTable.cjs +156 -0
  560. package/dist/data/lint/LintTable.cjs.map +1 -0
  561. package/dist/data/lint/LintTable.d.ts +13 -0
  562. package/dist/data/lint/LintTable.d.ts.map +1 -0
  563. package/dist/data/lint/LintTable.js +156 -0
  564. package/dist/data/lint/LintTable.js.map +1 -0
  565. package/dist/data/lint/LintTreeNode.cjs +42 -19
  566. package/dist/data/lint/LintTreeNode.cjs.map +1 -1
  567. package/dist/data/lint/LintTreeNode.d.ts +7 -2
  568. package/dist/data/lint/LintTreeNode.d.ts.map +1 -1
  569. package/dist/data/lint/LintTreeNode.js +44 -21
  570. package/dist/data/lint/LintTreeNode.js.map +1 -1
  571. package/dist/data/lint/ViolationSnippet.cjs +113 -0
  572. package/dist/data/lint/ViolationSnippet.cjs.map +1 -0
  573. package/dist/data/lint/ViolationSnippet.d.ts +20 -0
  574. package/dist/data/lint/ViolationSnippet.d.ts.map +1 -0
  575. package/dist/data/lint/ViolationSnippet.js +112 -0
  576. package/dist/data/lint/ViolationSnippet.js.map +1 -0
  577. package/dist/data/lint/actions.cjs +44 -16
  578. package/dist/data/lint/actions.cjs.map +1 -1
  579. package/dist/data/lint/actions.d.ts +7 -3
  580. package/dist/data/lint/actions.d.ts.map +1 -1
  581. package/dist/data/lint/actions.js +44 -16
  582. package/dist/data/lint/actions.js.map +1 -1
  583. package/dist/data/lint/grouping.cjs +105 -8
  584. package/dist/data/lint/grouping.cjs.map +1 -1
  585. package/dist/data/lint/grouping.d.ts +21 -1
  586. package/dist/data/lint/grouping.d.ts.map +1 -1
  587. package/dist/data/lint/grouping.js +105 -10
  588. package/dist/data/lint/grouping.js.map +1 -1
  589. package/dist/data/lint/ignore-menu-items.cjs +18 -0
  590. package/dist/data/lint/ignore-menu-items.cjs.map +1 -0
  591. package/dist/data/lint/ignore-menu-items.d.ts +6 -0
  592. package/dist/data/lint/ignore-menu-items.d.ts.map +1 -0
  593. package/dist/data/lint/ignore-menu-items.js +17 -0
  594. package/dist/data/lint/ignore-menu-items.js.map +1 -0
  595. package/dist/data/lint/index.d.ts +7 -5
  596. package/dist/data/lint/index.d.ts.map +1 -1
  597. package/dist/data/lint/stats.cjs +19 -4
  598. package/dist/data/lint/stats.cjs.map +1 -1
  599. package/dist/data/lint/stats.d.ts +13 -3
  600. package/dist/data/lint/stats.d.ts.map +1 -1
  601. package/dist/data/lint/stats.js +17 -5
  602. package/dist/data/lint/stats.js.map +1 -1
  603. package/dist/data/lint/types.cjs +8 -0
  604. package/dist/data/lint/types.cjs.map +1 -1
  605. package/dist/data/lint/types.d.ts +47 -0
  606. package/dist/data/lint/types.d.ts.map +1 -1
  607. package/dist/data/lint/types.js +8 -1
  608. package/dist/data/lint/types.js.map +1 -1
  609. package/dist/data/lint/violation-menu-items.cjs +31 -0
  610. package/dist/data/lint/violation-menu-items.cjs.map +1 -0
  611. package/dist/data/lint/violation-menu-items.d.ts +12 -0
  612. package/dist/data/lint/violation-menu-items.d.ts.map +1 -0
  613. package/dist/data/lint/violation-menu-items.js +31 -0
  614. package/dist/data/lint/violation-menu-items.js.map +1 -0
  615. package/dist/data/markdown-source-blocks.cjs +38 -0
  616. package/dist/data/markdown-source-blocks.cjs.map +1 -0
  617. package/dist/data/markdown-source-blocks.d.ts +32 -0
  618. package/dist/data/markdown-source-blocks.d.ts.map +1 -0
  619. package/dist/data/markdown-source-blocks.js +35 -0
  620. package/dist/data/markdown-source-blocks.js.map +1 -0
  621. package/dist/data/test-runner/FilterFacet.cjs +52 -0
  622. package/dist/data/test-runner/FilterFacet.cjs.map +1 -0
  623. package/dist/data/test-runner/FilterFacet.d.ts +13 -0
  624. package/dist/data/test-runner/FilterFacet.d.ts.map +1 -0
  625. package/dist/data/test-runner/FilterFacet.js +52 -0
  626. package/dist/data/test-runner/FilterFacet.js.map +1 -0
  627. package/dist/data/test-runner/MatrixMarks.cjs +42 -40
  628. package/dist/data/test-runner/MatrixMarks.cjs.map +1 -1
  629. package/dist/data/test-runner/MatrixMarks.d.ts +20 -4
  630. package/dist/data/test-runner/MatrixMarks.d.ts.map +1 -1
  631. package/dist/data/test-runner/MatrixMarks.js +43 -42
  632. package/dist/data/test-runner/MatrixMarks.js.map +1 -1
  633. package/dist/data/test-runner/TestAttemptDetail.cjs +1 -1
  634. package/dist/data/test-runner/TestAttemptDetail.js +1 -1
  635. package/dist/data/test-runner/TestDetailPanel.cjs +11 -0
  636. package/dist/data/test-runner/TestDetailPanel.cjs.map +1 -1
  637. package/dist/data/test-runner/TestDetailPanel.d.ts.map +1 -1
  638. package/dist/data/test-runner/TestDetailPanel.js +11 -0
  639. package/dist/data/test-runner/TestDetailPanel.js.map +1 -1
  640. package/dist/data/test-runner/TestFilterBar.cjs +3 -44
  641. package/dist/data/test-runner/TestFilterBar.cjs.map +1 -1
  642. package/dist/data/test-runner/TestFilterBar.d.ts.map +1 -1
  643. package/dist/data/test-runner/TestFilterBar.js +3 -44
  644. package/dist/data/test-runner/TestFilterBar.js.map +1 -1
  645. package/dist/data/test-runner/TestRunner.cjs +3 -1
  646. package/dist/data/test-runner/TestRunner.cjs.map +1 -1
  647. package/dist/data/test-runner/TestRunner.d.ts +7 -1
  648. package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
  649. package/dist/data/test-runner/TestRunner.js +3 -1
  650. package/dist/data/test-runner/TestRunner.js.map +1 -1
  651. package/dist/data/test-runner/context.cjs.map +1 -1
  652. package/dist/data/test-runner/context.d.ts +3 -0
  653. package/dist/data/test-runner/context.d.ts.map +1 -1
  654. package/dist/data/test-runner/context.js.map +1 -1
  655. package/dist/data/test-runner/index.d.ts +2 -2
  656. package/dist/data/test-runner/index.d.ts.map +1 -1
  657. package/dist/data/test-runner/matrix-marks.cjs +2 -11
  658. package/dist/data/test-runner/matrix-marks.cjs.map +1 -1
  659. package/dist/data/test-runner/matrix-marks.d.ts +2 -4
  660. package/dist/data/test-runner/matrix-marks.d.ts.map +1 -1
  661. package/dist/data/test-runner/matrix-marks.js +3 -11
  662. package/dist/data/test-runner/matrix-marks.js.map +1 -1
  663. package/dist/data/test-runner/types.d.ts +2 -0
  664. package/dist/data/test-runner/types.d.ts.map +1 -1
  665. package/dist/data/timeseries-query.cjs +98 -2
  666. package/dist/data/timeseries-query.cjs.map +1 -1
  667. package/dist/data/timeseries-query.d.ts +31 -5
  668. package/dist/data/timeseries-query.d.ts.map +1 -1
  669. package/dist/data/timeseries-query.js +98 -3
  670. package/dist/data/timeseries-query.js.map +1 -1
  671. package/dist/data/timeseries-stream-provider.cjs +38 -0
  672. package/dist/data/timeseries-stream-provider.cjs.map +1 -0
  673. package/dist/data/timeseries-stream-provider.d.ts +26 -0
  674. package/dist/data/timeseries-stream-provider.d.ts.map +1 -0
  675. package/dist/data/timeseries-stream-provider.js +38 -0
  676. package/dist/data/timeseries-stream-provider.js.map +1 -0
  677. package/dist/data/timeseries-stream.cjs +304 -0
  678. package/dist/data/timeseries-stream.cjs.map +1 -0
  679. package/dist/data/timeseries-stream.d.ts +81 -0
  680. package/dist/data/timeseries-stream.d.ts.map +1 -0
  681. package/dist/data/timeseries-stream.fixtures.d.ts +36 -0
  682. package/dist/data/timeseries-stream.fixtures.d.ts.map +1 -0
  683. package/dist/data/timeseries-stream.js +296 -0
  684. package/dist/data/timeseries-stream.js.map +1 -0
  685. package/dist/data/token-style.cjs +13 -0
  686. package/dist/data/token-style.cjs.map +1 -0
  687. package/dist/data/token-style.d.ts +4 -0
  688. package/dist/data/token-style.d.ts.map +1 -0
  689. package/dist/data/token-style.js +13 -0
  690. package/dist/data/token-style.js.map +1 -0
  691. package/dist/data/traces/ProcessTraceDetail.cjs +1 -1
  692. package/dist/data/traces/ProcessTraceDetail.js +1 -1
  693. package/dist/data/traces/index.d.ts +1 -1
  694. package/dist/data/traces/index.d.ts.map +1 -1
  695. package/dist/data/use-data-table-virtual.d.ts +1 -1
  696. package/dist/data/version-info.cjs +3 -3
  697. package/dist/data/version-info.js +3 -3
  698. package/dist/data/workload-panel/MemoryStack.cjs +49 -0
  699. package/dist/data/workload-panel/MemoryStack.cjs.map +1 -0
  700. package/dist/data/workload-panel/MemoryStack.d.ts +11 -0
  701. package/dist/data/workload-panel/MemoryStack.d.ts.map +1 -0
  702. package/dist/data/workload-panel/MemoryStack.js +48 -0
  703. package/dist/data/workload-panel/MemoryStack.js.map +1 -0
  704. package/dist/data/workload-panel/Metrics.cjs +197 -0
  705. package/dist/data/workload-panel/Metrics.cjs.map +1 -0
  706. package/dist/data/workload-panel/Metrics.d.ts +11 -0
  707. package/dist/data/workload-panel/Metrics.d.ts.map +1 -0
  708. package/dist/data/workload-panel/Metrics.js +196 -0
  709. package/dist/data/workload-panel/Metrics.js.map +1 -0
  710. package/dist/data/workload-panel/WorkloadPanel.cjs +66 -0
  711. package/dist/data/workload-panel/WorkloadPanel.cjs.map +1 -0
  712. package/dist/data/workload-panel/WorkloadPanel.d.ts +3 -0
  713. package/dist/data/workload-panel/WorkloadPanel.d.ts.map +1 -0
  714. package/dist/data/workload-panel/WorkloadPanel.js +66 -0
  715. package/dist/data/workload-panel/WorkloadPanel.js.map +1 -0
  716. package/dist/data/workload-panel/fixtures.d.ts +60 -0
  717. package/dist/data/workload-panel/fixtures.d.ts.map +1 -0
  718. package/dist/data/workload-panel/model.cjs +137 -0
  719. package/dist/data/workload-panel/model.cjs.map +1 -0
  720. package/dist/data/workload-panel/model.d.ts +53 -0
  721. package/dist/data/workload-panel/model.d.ts.map +1 -0
  722. package/dist/data/workload-panel/model.js +133 -0
  723. package/dist/data/workload-panel/model.js.map +1 -0
  724. package/dist/data/workload-panel/types.d.ts +56 -0
  725. package/dist/data/workload-panel/types.d.ts.map +1 -0
  726. package/dist/data.cjs +58 -7
  727. package/dist/data.d.ts +9 -1
  728. package/dist/data.d.ts.map +1 -1
  729. package/dist/data.js +29 -12
  730. package/dist/file-findings/AnnotatedCode.cjs +243 -0
  731. package/dist/file-findings/AnnotatedCode.cjs.map +1 -0
  732. package/dist/file-findings/AnnotatedCode.d.ts +30 -0
  733. package/dist/file-findings/AnnotatedCode.d.ts.map +1 -0
  734. package/dist/file-findings/AnnotatedCode.js +243 -0
  735. package/dist/file-findings/AnnotatedCode.js.map +1 -0
  736. package/dist/file-findings/FileFindingsView.cjs +213 -0
  737. package/dist/file-findings/FileFindingsView.cjs.map +1 -0
  738. package/dist/file-findings/FileFindingsView.d.ts +35 -0
  739. package/dist/file-findings/FileFindingsView.d.ts.map +1 -0
  740. package/dist/file-findings/FileFindingsView.js +213 -0
  741. package/dist/file-findings/FileFindingsView.js.map +1 -0
  742. package/dist/file-findings/LazyAnnotatedCode.cjs +22 -0
  743. package/dist/file-findings/LazyAnnotatedCode.cjs.map +1 -0
  744. package/dist/file-findings/LazyAnnotatedCode.d.ts +5 -0
  745. package/dist/file-findings/LazyAnnotatedCode.d.ts.map +1 -0
  746. package/dist/file-findings/LazyAnnotatedCode.js +22 -0
  747. package/dist/file-findings/LazyAnnotatedCode.js.map +1 -0
  748. package/dist/file-findings/adapters.cjs +155 -0
  749. package/dist/file-findings/adapters.cjs.map +1 -0
  750. package/dist/file-findings/adapters.d.ts +24 -0
  751. package/dist/file-findings/adapters.d.ts.map +1 -0
  752. package/dist/file-findings/adapters.js +153 -0
  753. package/dist/file-findings/adapters.js.map +1 -0
  754. package/dist/file-findings/file-review/CommentDraft.cjs +97 -0
  755. package/dist/file-findings/file-review/CommentDraft.cjs.map +1 -0
  756. package/dist/file-findings/file-review/CommentDraft.d.ts +25 -0
  757. package/dist/file-findings/file-review/CommentDraft.d.ts.map +1 -0
  758. package/dist/file-findings/file-review/CommentDraft.js +97 -0
  759. package/dist/file-findings/file-review/CommentDraft.js.map +1 -0
  760. package/dist/file-findings/file-review/FileReview.cjs +863 -0
  761. package/dist/file-findings/file-review/FileReview.cjs.map +1 -0
  762. package/dist/file-findings/file-review/FileReview.d.ts +79 -0
  763. package/dist/file-findings/file-review/FileReview.d.ts.map +1 -0
  764. package/dist/file-findings/file-review/FileReview.fixtures.d.ts +25 -0
  765. package/dist/file-findings/file-review/FileReview.fixtures.d.ts.map +1 -0
  766. package/dist/file-findings/file-review/FileReview.js +863 -0
  767. package/dist/file-findings/file-review/FileReview.js.map +1 -0
  768. package/dist/file-findings/file-review/InlineAuthors.cjs +77 -0
  769. package/dist/file-findings/file-review/InlineAuthors.cjs.map +1 -0
  770. package/dist/file-findings/file-review/InlineAuthors.d.ts +9 -0
  771. package/dist/file-findings/file-review/InlineAuthors.d.ts.map +1 -0
  772. package/dist/file-findings/file-review/InlineAuthors.js +77 -0
  773. package/dist/file-findings/file-review/InlineAuthors.js.map +1 -0
  774. package/dist/file-findings/file-review/InlineThread.cjs +77 -0
  775. package/dist/file-findings/file-review/InlineThread.cjs.map +1 -0
  776. package/dist/file-findings/file-review/InlineThread.d.ts +27 -0
  777. package/dist/file-findings/file-review/InlineThread.d.ts.map +1 -0
  778. package/dist/file-findings/file-review/InlineThread.js +77 -0
  779. package/dist/file-findings/file-review/InlineThread.js.map +1 -0
  780. package/dist/file-findings/file-review/ProblemsList.cjs +164 -0
  781. package/dist/file-findings/file-review/ProblemsList.cjs.map +1 -0
  782. package/dist/file-findings/file-review/ProblemsList.d.ts +15 -0
  783. package/dist/file-findings/file-review/ProblemsList.d.ts.map +1 -0
  784. package/dist/file-findings/file-review/ProblemsList.js +164 -0
  785. package/dist/file-findings/file-review/ProblemsList.js.map +1 -0
  786. package/dist/file-findings/file-review/SourceView.cjs +179 -0
  787. package/dist/file-findings/file-review/SourceView.cjs.map +1 -0
  788. package/dist/file-findings/file-review/SourceView.d.ts +29 -0
  789. package/dist/file-findings/file-review/SourceView.d.ts.map +1 -0
  790. package/dist/file-findings/file-review/SourceView.js +179 -0
  791. package/dist/file-findings/file-review/SourceView.js.map +1 -0
  792. package/dist/file-findings/file-review/blame.cjs +35 -0
  793. package/dist/file-findings/file-review/blame.cjs.map +1 -0
  794. package/dist/file-findings/file-review/blame.d.ts +28 -0
  795. package/dist/file-findings/file-review/blame.d.ts.map +1 -0
  796. package/dist/file-findings/file-review/blame.js +33 -0
  797. package/dist/file-findings/file-review/blame.js.map +1 -0
  798. package/dist/file-findings/file-review/geometry.cjs +101 -0
  799. package/dist/file-findings/file-review/geometry.cjs.map +1 -0
  800. package/dist/file-findings/file-review/geometry.d.ts +45 -0
  801. package/dist/file-findings/file-review/geometry.d.ts.map +1 -0
  802. package/dist/file-findings/file-review/geometry.js +98 -0
  803. package/dist/file-findings/file-review/geometry.js.map +1 -0
  804. package/dist/file-findings/file-review/hooks.cjs +101 -0
  805. package/dist/file-findings/file-review/hooks.cjs.map +1 -0
  806. package/dist/file-findings/file-review/hooks.d.ts +22 -0
  807. package/dist/file-findings/file-review/hooks.d.ts.map +1 -0
  808. package/dist/file-findings/file-review/hooks.js +99 -0
  809. package/dist/file-findings/file-review/hooks.js.map +1 -0
  810. package/dist/file-findings/file-review/marks.cjs +52 -0
  811. package/dist/file-findings/file-review/marks.cjs.map +1 -0
  812. package/dist/file-findings/file-review/marks.d.ts +23 -0
  813. package/dist/file-findings/file-review/marks.d.ts.map +1 -0
  814. package/dist/file-findings/file-review/marks.js +47 -0
  815. package/dist/file-findings/file-review/marks.js.map +1 -0
  816. package/dist/file-findings/file-review/problem-filters.cjs +14 -0
  817. package/dist/file-findings/file-review/problem-filters.cjs.map +1 -0
  818. package/dist/file-findings/file-review/problem-filters.d.ts +10 -0
  819. package/dist/file-findings/file-review/problem-filters.d.ts.map +1 -0
  820. package/dist/file-findings/file-review/problem-filters.js +13 -0
  821. package/dist/file-findings/file-review/problem-filters.js.map +1 -0
  822. package/dist/file-findings/file-review/quote-anchor.cjs +234 -0
  823. package/dist/file-findings/file-review/quote-anchor.cjs.map +1 -0
  824. package/dist/file-findings/file-review/quote-anchor.d.ts +54 -0
  825. package/dist/file-findings/file-review/quote-anchor.d.ts.map +1 -0
  826. package/dist/file-findings/file-review/quote-anchor.js +226 -0
  827. package/dist/file-findings/file-review/quote-anchor.js.map +1 -0
  828. package/dist/file-findings/file-review/source-anchor.cjs +104 -0
  829. package/dist/file-findings/file-review/source-anchor.cjs.map +1 -0
  830. package/dist/file-findings/file-review/source-anchor.d.ts +27 -0
  831. package/dist/file-findings/file-review/source-anchor.d.ts.map +1 -0
  832. package/dist/file-findings/file-review/source-anchor.js +99 -0
  833. package/dist/file-findings/file-review/source-anchor.js.map +1 -0
  834. package/dist/file-findings/file-review/source-marks.cjs +71 -0
  835. package/dist/file-findings/file-review/source-marks.cjs.map +1 -0
  836. package/dist/file-findings/file-review/source-marks.d.ts +27 -0
  837. package/dist/file-findings/file-review/source-marks.d.ts.map +1 -0
  838. package/dist/file-findings/file-review/source-marks.js +68 -0
  839. package/dist/file-findings/file-review/source-marks.js.map +1 -0
  840. package/dist/file-findings/findings-comments.cjs +136 -0
  841. package/dist/file-findings/findings-comments.cjs.map +1 -0
  842. package/dist/file-findings/findings-comments.d.ts +28 -0
  843. package/dist/file-findings/findings-comments.d.ts.map +1 -0
  844. package/dist/file-findings/findings-comments.js +131 -0
  845. package/dist/file-findings/findings-comments.js.map +1 -0
  846. package/dist/file-findings/findings-languages.cjs +53 -0
  847. package/dist/file-findings/findings-languages.cjs.map +1 -0
  848. package/dist/file-findings/findings-languages.d.ts +11 -0
  849. package/dist/file-findings/findings-languages.d.ts.map +1 -0
  850. package/dist/file-findings/findings-languages.js +53 -0
  851. package/dist/file-findings/findings-languages.js.map +1 -0
  852. package/dist/file-findings/mdx-source.cjs +48 -0
  853. package/dist/file-findings/mdx-source.cjs.map +1 -0
  854. package/dist/file-findings/mdx-source.d.ts +7 -0
  855. package/dist/file-findings/mdx-source.d.ts.map +1 -0
  856. package/dist/file-findings/mdx-source.js +48 -0
  857. package/dist/file-findings/mdx-source.js.map +1 -0
  858. package/dist/file-findings/monaco-language.cjs +73 -0
  859. package/dist/file-findings/monaco-language.cjs.map +1 -0
  860. package/dist/file-findings/monaco-language.d.ts +11 -0
  861. package/dist/file-findings/monaco-language.d.ts.map +1 -0
  862. package/dist/file-findings/monaco-language.js +72 -0
  863. package/dist/file-findings/monaco-language.js.map +1 -0
  864. package/dist/file-findings/severity-counts.cjs +20 -0
  865. package/dist/file-findings/severity-counts.cjs.map +1 -0
  866. package/dist/file-findings/severity-counts.d.ts +5 -0
  867. package/dist/file-findings/severity-counts.d.ts.map +1 -0
  868. package/dist/file-findings/severity-counts.js +19 -0
  869. package/dist/file-findings/severity-counts.js.map +1 -0
  870. package/dist/file-findings/types.cjs +12 -0
  871. package/dist/file-findings/types.cjs.map +1 -0
  872. package/dist/file-findings/types.d.ts +43 -0
  873. package/dist/file-findings/types.d.ts.map +1 -0
  874. package/dist/file-findings/types.js +11 -0
  875. package/dist/file-findings/types.js.map +1 -0
  876. package/dist/file-findings.cjs +47 -0
  877. package/dist/file-findings.d.ts +15 -0
  878. package/dist/file-findings.d.ts.map +1 -0
  879. package/dist/file-findings.js +15 -0
  880. package/dist/hooks/event-hub.cjs +22 -8
  881. package/dist/hooks/event-hub.cjs.map +1 -1
  882. package/dist/hooks/event-hub.d.ts.map +1 -1
  883. package/dist/hooks/event-hub.js +22 -8
  884. package/dist/hooks/event-hub.js.map +1 -1
  885. package/dist/icons/components/UiBrowser.cjs +51 -0
  886. package/dist/icons/components/UiBrowser.cjs.map +1 -0
  887. package/dist/icons/components/UiBrowser.d.ts +15 -0
  888. package/dist/icons/components/UiBrowser.d.ts.map +1 -0
  889. package/dist/icons/components/UiBrowser.js +48 -0
  890. package/dist/icons/components/UiBrowser.js.map +1 -0
  891. package/dist/icons/components/UiCreditCard.cjs +51 -0
  892. package/dist/icons/components/UiCreditCard.cjs.map +1 -0
  893. package/dist/icons/components/UiCreditCard.d.ts +15 -0
  894. package/dist/icons/components/UiCreditCard.d.ts.map +1 -0
  895. package/dist/icons/components/UiCreditCard.js +48 -0
  896. package/dist/icons/components/UiCreditCard.js.map +1 -0
  897. package/dist/icons/components/UiShoppingCart.cjs +51 -0
  898. package/dist/icons/components/UiShoppingCart.cjs.map +1 -0
  899. package/dist/icons/components/UiShoppingCart.d.ts +15 -0
  900. package/dist/icons/components/UiShoppingCart.d.ts.map +1 -0
  901. package/dist/icons/components/UiShoppingCart.js +48 -0
  902. package/dist/icons/components/UiShoppingCart.js.map +1 -0
  903. package/dist/icons/index.d.ts +6 -0
  904. package/dist/icons/index.d.ts.map +1 -1
  905. package/dist/icons/registry.cjs +6 -0
  906. package/dist/icons/registry.cjs.map +1 -1
  907. package/dist/icons/registry.d.ts.map +1 -1
  908. package/dist/icons/registry.js +6 -0
  909. package/dist/icons/registry.js.map +1 -1
  910. package/dist/icons.cjs +9 -0
  911. package/dist/icons.js +4 -1
  912. package/dist/index.cjs +76 -8
  913. package/dist/index.d.ts +1 -0
  914. package/dist/index.d.ts.map +1 -1
  915. package/dist/index.js +37 -14
  916. package/dist/layout/AppShell.cjs +37 -21
  917. package/dist/layout/AppShell.cjs.map +1 -1
  918. package/dist/layout/AppShell.d.ts +13 -2
  919. package/dist/layout/AppShell.d.ts.map +1 -1
  920. package/dist/layout/AppShell.js +37 -21
  921. package/dist/layout/AppShell.js.map +1 -1
  922. package/dist/layout/AppShell.nav.cjs +7 -6
  923. package/dist/layout/AppShell.nav.cjs.map +1 -1
  924. package/dist/layout/AppShell.nav.d.ts.map +1 -1
  925. package/dist/layout/AppShell.nav.js +7 -6
  926. package/dist/layout/AppShell.nav.js.map +1 -1
  927. package/dist/layout/SplitPane.cjs +16 -6
  928. package/dist/layout/SplitPane.cjs.map +1 -1
  929. package/dist/layout/SplitPane.d.ts +12 -2
  930. package/dist/layout/SplitPane.d.ts.map +1 -1
  931. package/dist/layout/SplitPane.js +16 -6
  932. package/dist/layout/SplitPane.js.map +1 -1
  933. package/dist/layout/Workspace.cjs +37 -33
  934. package/dist/layout/Workspace.cjs.map +1 -1
  935. package/dist/layout/Workspace.d.ts.map +1 -1
  936. package/dist/layout/Workspace.js +37 -33
  937. package/dist/layout/Workspace.js.map +1 -1
  938. package/dist/layout/Workspace.regions.cjs +3 -3
  939. package/dist/layout/Workspace.regions.cjs.map +1 -1
  940. package/dist/layout/Workspace.regions.js +3 -3
  941. package/dist/layout/Workspace.regions.js.map +1 -1
  942. package/dist/lib/breakpoints.cjs +102 -0
  943. package/dist/lib/breakpoints.cjs.map +1 -0
  944. package/dist/lib/breakpoints.d.ts +36 -0
  945. package/dist/lib/breakpoints.d.ts.map +1 -0
  946. package/dist/lib/breakpoints.js +99 -0
  947. package/dist/lib/breakpoints.js.map +1 -0
  948. package/dist/lib/combobox.cjs +2 -1
  949. package/dist/lib/combobox.cjs.map +1 -1
  950. package/dist/lib/combobox.d.ts +1 -1
  951. package/dist/lib/combobox.d.ts.map +1 -1
  952. package/dist/lib/combobox.js +2 -1
  953. package/dist/lib/combobox.js.map +1 -1
  954. package/dist/lib/path-tree.cjs +21 -0
  955. package/dist/lib/path-tree.cjs.map +1 -1
  956. package/dist/lib/path-tree.d.ts +15 -0
  957. package/dist/lib/path-tree.d.ts.map +1 -1
  958. package/dist/lib/path-tree.js +21 -1
  959. package/dist/lib/path-tree.js.map +1 -1
  960. package/dist/overlay/Modal.cjs +2 -1
  961. package/dist/overlay/Modal.cjs.map +1 -1
  962. package/dist/overlay/Modal.d.ts.map +1 -1
  963. package/dist/overlay/Modal.js +2 -1
  964. package/dist/overlay/Modal.js.map +1 -1
  965. package/dist/overlay/dropdownMenuContext.d.ts +1 -1
  966. package/dist/profiles/editor/profileEditor.cjs +1 -1
  967. package/dist/profiles/editor/profileEditor.cjs.map +1 -1
  968. package/dist/profiles/editor/profileEditor.js +1 -1
  969. package/dist/profiles/editor/profileEditor.js.map +1 -1
  970. package/dist/profiles/editor/profileEditorSections.cjs +2 -2
  971. package/dist/profiles/editor/profileEditorSections.cjs.map +1 -1
  972. package/dist/profiles/editor/profileEditorSections.js +2 -2
  973. package/dist/profiles/editor/profileEditorSections.js.map +1 -1
  974. package/dist/profiles/query/prometheusResults.cjs +24 -36
  975. package/dist/profiles/query/prometheusResults.cjs.map +1 -1
  976. package/dist/profiles/query/prometheusResults.d.ts.map +1 -1
  977. package/dist/profiles/query/prometheusResults.js +24 -36
  978. package/dist/profiles/query/prometheusResults.js.map +1 -1
  979. package/dist/rpc/CommandForm.cjs +1 -1
  980. package/dist/rpc/CommandForm.cjs.map +1 -1
  981. package/dist/rpc/CommandForm.js +1 -1
  982. package/dist/rpc/CommandForm.js.map +1 -1
  983. package/dist/rpc/classify.cjs +1 -1
  984. package/dist/rpc/classify.cjs.map +1 -1
  985. package/dist/rpc/classify.d.ts.map +1 -1
  986. package/dist/rpc/classify.js +1 -1
  987. package/dist/rpc/classify.js.map +1 -1
  988. package/dist/rpc/useOperations.d.ts +24 -24
  989. package/dist/rpc.cjs +0 -2
  990. package/dist/rpc.d.ts +0 -1
  991. package/dist/rpc.d.ts.map +1 -1
  992. package/dist/rpc.js +1 -2
  993. package/dist/styles.css +1 -1
  994. package/dist/utils.cjs +6 -0
  995. package/dist/utils.d.ts +2 -1
  996. package/dist/utils.d.ts.map +1 -1
  997. package/dist/utils.js +3 -2
  998. package/package.json +9 -3
  999. package/schemas/json-schema-form.schema.json +9 -1
@@ -0,0 +1,48 @@
1
+ const require_InputField = require("./InputField.cjs");
2
+ let react = require("react");
3
+ let react_jsx_runtime = require("react/jsx-runtime");
4
+ // src/components/json-schema-form-json.tsx
5
+ function JsonControl({ field, fieldId, readOnly }) {
6
+ const serialized = JSON.stringify(field.value, null, 2) ?? "";
7
+ const [draft, setDraft] = (0, react.useState)({
8
+ source: serialized,
9
+ text: serialized
10
+ });
11
+ const text = draft.source === serialized ? draft.text : serialized;
12
+ const error = draft.source === serialized ? draft.error : void 0;
13
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
14
+ className: "min-w-0",
15
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_InputField.InputField, {
16
+ as: "textarea",
17
+ id: fieldId,
18
+ "aria-label": field.label,
19
+ value: text,
20
+ readOnly,
21
+ inputClassName: "min-h-28 font-mono text-xs",
22
+ "aria-invalid": Boolean(error),
23
+ onChange: (next) => {
24
+ try {
25
+ const value = JSON.parse(next);
26
+ field.onChange(value);
27
+ setDraft({
28
+ source: JSON.stringify(value, null, 2) ?? "",
29
+ text: next
30
+ });
31
+ } catch (error) {
32
+ setDraft({
33
+ source: serialized,
34
+ text: next,
35
+ error: error instanceof Error ? error.message : String(error)
36
+ });
37
+ }
38
+ }
39
+ }), error && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
40
+ role: "alert",
41
+ className: "text-xs text-destructive",
42
+ children: error
43
+ })]
44
+ });
45
+ }
46
+ exports.JsonControl = JsonControl;
47
+
48
+ //# sourceMappingURL=json-schema-form-json.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema-form-json.cjs","names":["useState","InputField"],"sources":["../../src/components/json-schema-form-json.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { InputField } from \"./InputField\";\nimport type { FieldControl } from \"./json-schema-form-types\";\n\nexport function JsonControl({ field, fieldId, readOnly }: { field: FieldControl; fieldId: string; readOnly: boolean }) {\n const serialized = JSON.stringify(field.value, null, 2) ?? \"\";\n const [draft, setDraft] = useState<{ source: string; text: string; error?: string }>({ source: serialized, text: serialized });\n const text = draft.source === serialized ? draft.text : serialized;\n const error = draft.source === serialized ? draft.error : undefined;\n return <div className=\"min-w-0\">\n <InputField as=\"textarea\" id={fieldId} aria-label={field.label} value={text} readOnly={readOnly} inputClassName=\"min-h-28 font-mono text-xs\"\n aria-invalid={Boolean(error)} onChange={(next) => {\n try {\n const value: unknown = JSON.parse(next);\n field.onChange(value);\n setDraft({ source: JSON.stringify(value, null, 2) ?? \"\", text: next });\n } catch (error) {\n setDraft({ source: serialized, text: next, error: error instanceof Error ? error.message : String(error) });\n }\n }} />\n {error && <p role=\"alert\" className=\"text-xs text-destructive\">{error}</p>}\n </div>;\n}\n"],"mappings":";;;;AAIA,SAAgB,YAAY,EAAE,OAAO,SAAS,YAAyE;CACrH,MAAM,aAAa,KAAK,UAAU,MAAM,OAAO,MAAM,CAAC,KAAK;CAC3D,MAAM,CAAC,OAAO,aAAA,GAAYA,MAAAA,SAAAA,CAA2D;EAAE,QAAQ;EAAY,MAAM;CAAW,CAAC;CAC7H,MAAM,OAAO,MAAM,WAAW,aAAa,MAAM,OAAO;CACxD,MAAM,QAAQ,MAAM,WAAW,aAAa,MAAM,QAAQ,KAAA;CAC1D,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACL,iBAAA,GAAA,kBAAA,IAAA,CAACC,mBAAAA,YAAD;GAAY,IAAG;GAAW,IAAI;GAAS,cAAY,MAAM;GAAO,OAAO;GAAgB;GAAU,gBAAe;GAC9G,gBAAc,QAAQ,KAAK;GAAG,WAAW,SAAS;IAChD,IAAI;KACF,MAAM,QAAiB,KAAK,MAAM,IAAI;KACtC,MAAM,SAAS,KAAK;KACpB,SAAS;MAAE,QAAQ,KAAK,UAAU,OAAO,MAAM,CAAC,KAAK;MAAI,MAAM;KAAK,CAAC;IACvE,SAAS,OAAO;KACd,SAAS;MAAE,QAAQ;MAAY,MAAM;MAAM,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;KAAE,CAAC;IAC5G;GACF;EAAI,CAAA,GACL,SAAS,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;GAAG,MAAK;GAAQ,WAAU;GAA4B,UAAA;EAAS,CAAA,CACtE;;AACP"}
@@ -0,0 +1,7 @@
1
+ import { FieldControl } from './json-schema-form-types.js';
2
+ export declare function JsonControl({ field, fieldId, readOnly }: {
3
+ field: FieldControl;
4
+ fieldId: string;
5
+ readOnly: boolean;
6
+ }): import("react").JSX.Element;
7
+ //# sourceMappingURL=json-schema-form-json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema-form-json.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-json.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,+BAkBpH"}
@@ -0,0 +1,48 @@
1
+ import { InputField } from "./InputField.js";
2
+ import { useState } from "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ // src/components/json-schema-form-json.tsx
5
+ function JsonControl({ field, fieldId, readOnly }) {
6
+ const serialized = JSON.stringify(field.value, null, 2) ?? "";
7
+ const [draft, setDraft] = useState({
8
+ source: serialized,
9
+ text: serialized
10
+ });
11
+ const text = draft.source === serialized ? draft.text : serialized;
12
+ const error = draft.source === serialized ? draft.error : void 0;
13
+ return /* @__PURE__ */ jsxs("div", {
14
+ className: "min-w-0",
15
+ children: [/* @__PURE__ */ jsx(InputField, {
16
+ as: "textarea",
17
+ id: fieldId,
18
+ "aria-label": field.label,
19
+ value: text,
20
+ readOnly,
21
+ inputClassName: "min-h-28 font-mono text-xs",
22
+ "aria-invalid": Boolean(error),
23
+ onChange: (next) => {
24
+ try {
25
+ const value = JSON.parse(next);
26
+ field.onChange(value);
27
+ setDraft({
28
+ source: JSON.stringify(value, null, 2) ?? "",
29
+ text: next
30
+ });
31
+ } catch (error) {
32
+ setDraft({
33
+ source: serialized,
34
+ text: next,
35
+ error: error instanceof Error ? error.message : String(error)
36
+ });
37
+ }
38
+ }
39
+ }), error && /* @__PURE__ */ jsx("p", {
40
+ role: "alert",
41
+ className: "text-xs text-destructive",
42
+ children: error
43
+ })]
44
+ });
45
+ }
46
+ export { JsonControl };
47
+
48
+ //# sourceMappingURL=json-schema-form-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema-form-json.js","names":[],"sources":["../../src/components/json-schema-form-json.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { InputField } from \"./InputField\";\nimport type { FieldControl } from \"./json-schema-form-types\";\n\nexport function JsonControl({ field, fieldId, readOnly }: { field: FieldControl; fieldId: string; readOnly: boolean }) {\n const serialized = JSON.stringify(field.value, null, 2) ?? \"\";\n const [draft, setDraft] = useState<{ source: string; text: string; error?: string }>({ source: serialized, text: serialized });\n const text = draft.source === serialized ? draft.text : serialized;\n const error = draft.source === serialized ? draft.error : undefined;\n return <div className=\"min-w-0\">\n <InputField as=\"textarea\" id={fieldId} aria-label={field.label} value={text} readOnly={readOnly} inputClassName=\"min-h-28 font-mono text-xs\"\n aria-invalid={Boolean(error)} onChange={(next) => {\n try {\n const value: unknown = JSON.parse(next);\n field.onChange(value);\n setDraft({ source: JSON.stringify(value, null, 2) ?? \"\", text: next });\n } catch (error) {\n setDraft({ source: serialized, text: next, error: error instanceof Error ? error.message : String(error) });\n }\n }} />\n {error && <p role=\"alert\" className=\"text-xs text-destructive\">{error}</p>}\n </div>;\n}\n"],"mappings":";;;;AAIA,SAAgB,YAAY,EAAE,OAAO,SAAS,YAAyE;CACrH,MAAM,aAAa,KAAK,UAAU,MAAM,OAAO,MAAM,CAAC,KAAK;CAC3D,MAAM,CAAC,OAAO,YAAY,SAA2D;EAAE,QAAQ;EAAY,MAAM;CAAW,CAAC;CAC7H,MAAM,OAAO,MAAM,WAAW,aAAa,MAAM,OAAO;CACxD,MAAM,QAAQ,MAAM,WAAW,aAAa,MAAM,QAAQ,KAAA;CAC1D,OAAO,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACL,oBAAC,YAAD;GAAY,IAAG;GAAW,IAAI;GAAS,cAAY,MAAM;GAAO,OAAO;GAAgB;GAAU,gBAAe;GAC9G,gBAAc,QAAQ,KAAK;GAAG,WAAW,SAAS;IAChD,IAAI;KACF,MAAM,QAAiB,KAAK,MAAM,IAAI;KACtC,MAAM,SAAS,KAAK;KACpB,SAAS;MAAE,QAAQ,KAAK,UAAU,OAAO,MAAM,CAAC,KAAK;MAAI,MAAM;KAAK,CAAC;IACvE,SAAS,OAAO;KACd,SAAS;MAAE,QAAQ;MAAY,MAAM;MAAM,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;KAAE,CAAC;IAC5G;GACF;EAAI,CAAA,GACL,SAAS,oBAAC,KAAD;GAAG,MAAK;GAAQ,WAAU;GAA4B,UAAA;EAAS,CAAA,CACtE;;AACP"}
@@ -5,6 +5,8 @@ const require_json_schema_form_size = require("./json-schema-form-size.cjs");
5
5
  const require_properties_context = require("../data/properties-context.cjs");
6
6
  const require_HoverCard = require("../overlay/HoverCard.cjs");
7
7
  require("./json-schema-form-utils.cjs");
8
+ const require_json_schema_form_help_links = require("./json-schema-form-help-links.cjs");
9
+ const require_json_schema_form_help_model = require("./json-schema-form-help-model.cjs");
8
10
  let react = require("react");
9
11
  let react_jsx_runtime = require("react/jsx-runtime");
10
12
  // src/components/json-schema-form-layout.tsx
@@ -102,9 +104,9 @@ function FieldLabel({ field, fieldId, size, helpDisplay }) {
102
104
  className: "shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground",
103
105
  children: field.badge
104
106
  }),
105
- helpDisplay === "hover" && field.helper && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(HelpHint, {
107
+ helpDisplay === "hover" && require_json_schema_form_help_model.hasFormHelp(field) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(HelpHint, {
106
108
  label: field.label,
107
- helper: field.helper
109
+ helper: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_json_schema_form_help_links.FormHelp, { field })
108
110
  })
109
111
  ]
110
112
  });
@@ -126,7 +128,7 @@ function HelpHint({ label, helper }) {
126
128
  });
127
129
  }
128
130
  function SectionHeading({ field, label = field.label, size, helpDisplay }) {
129
- const { required, badge, helper, labelIcon } = field;
131
+ const { required, badge, labelIcon } = field;
130
132
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
131
133
  className: require_utils.cn("flex min-w-0 items-center gap-2", require_json_schema_form_size.labelSizeClass[size]),
132
134
  children: [
@@ -146,9 +148,9 @@ function SectionHeading({ field, label = field.label, size, helpDisplay }) {
146
148
  className: "shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground",
147
149
  children: badge
148
150
  }),
149
- helpDisplay === "hover" && helper && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(HelpHint, {
151
+ helpDisplay === "hover" && require_json_schema_form_help_model.hasFormHelp(field) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(HelpHint, {
150
152
  label,
151
- helper
153
+ helper: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_json_schema_form_help_links.FormHelp, { field })
152
154
  })
153
155
  ]
154
156
  });
@@ -1 +1 @@
1
- {"version":3,"file":"json-schema-form-layout.cjs","names":["useContext","PropertiesContext","cn","inlineRowGapClass","stackedRowGapClass","controlMinHeightClass","labelSizeClass","LabelIcon","HoverCard","Icon","UiQuestion","fieldInnerGapClass"],"sources":["../../src/components/json-schema-form-layout.tsx"],"sourcesContent":["import { useContext, type ReactNode } from \"react\";\nimport { PropertiesContext } from \"../data/properties-context\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, LabelIcon } from \"../data/Icon\";\nimport { UiQuestion } from \"../icons\";\nimport { HoverCard } from \"../overlay/HoverCard\";\nimport type {\n FieldControl,\n FormLayout,\n GridColumns,\n HelpDisplay,\n} from \"./json-schema-form-types\";\nimport { DEFAULT_COLUMN_MIN_WIDTH } from \"./json-schema-form-utils\";\nimport {\n controlMinHeightClass,\n fieldInnerGapClass,\n inlineRowGapClass,\n labelSizeClass,\n stackedRowGapClass,\n type FormSize,\n} from \"./json-schema-form-size\";\n\n// FieldsGrid is the container every group of field rows renders into — the\n// top-level form and each nested object/map. In inline mode it owns the single\n// 2-column track definition: `fit-content(labelMaxWidth)` for the label column,\n// `minmax(0, valueMaxWidth)` for the value column. Every field row is a\n// `subgrid` that inherits these tracks, so all labels share one column width and\n// every value lines up — a real form grid, not per-row independent grids.\n// (`fit-content()` is the only valid CSS for \"size to content, clamped to a max\"\n// — `min(w, max-content)` is rejected by the browser, which silently drops the\n// whole declaration and collapses every row to a stacked-looking column. The\n// template is an inline style because Tailwind can't interpolate runtime widths.)\n// Stacked mode is a plain single-column grid.\nexport function FieldsGrid({\n layout,\n size,\n columns,\n columnMinWidth,\n columnsMaxWidth,\n className,\n children,\n}: {\n layout: FormLayout;\n size: FormSize;\n // Object-level `x-columns`: split a stacked object into N equal columns, or\n // \"auto\" to fit as many `columnMinWidth`-wide columns as the container allows.\n // Fields span one column unless they set `x-col-span`. Ignored in inline mode\n // (which owns its own 2-track label/value layout).\n columns?: GridColumns;\n // `x-columns: \"auto\"` only: the minmax() floor for one column, and an optional\n // cap on the whole grid so controls don't stretch edge to edge on a wide\n // screen. CSS lengths, applied inline — a runtime width can't be a Tailwind\n // arbitrary class, because the scanner never sees it.\n columnMinWidth?: string;\n columnsMaxWidth?: string;\n // Object-level `x-classes`: extra classes merged onto the grid container\n // (e.g. `gap-2`, padding). Applied last so a standard utility wins over the\n // defaults via tailwind-merge.\n className?: string;\n children: ReactNode;\n}) {\n const propertiesParent = useContext(PropertiesContext);\n if (layout.mode === \"properties\") {\n return (\n <div\n className={cn(\n \"min-w-0 overflow-hidden rounded-md border border-border\",\n propertiesParent &&\n \"col-span-full grid grid-cols-subgrid rounded-none border-0\",\n className,\n )}\n >\n {children}\n </div>\n );\n }\n if (layout.mode === \"inline\") {\n const labelMaxWidth = layout.labelMaxWidth ?? \"40ch\";\n const valueMaxWidth = layout.valueMaxWidth ?? \"600px\";\n return (\n <div\n className={cn(\"grid\", inlineRowGapClass[size], className)}\n style={{\n gridTemplateColumns: `fit-content(${labelMaxWidth}) minmax(0, ${valueMaxWidth})`,\n }}\n >\n {children}\n </div>\n );\n }\n if (columns === \"auto\") {\n return (\n <div\n className={cn(\"grid gap-x-4\", stackedRowGapClass[size], className)}\n style={{\n gridTemplateColumns: `repeat(auto-fill, minmax(${columnMinWidth ?? DEFAULT_COLUMN_MIN_WIDTH}, 1fr))`,\n ...(columnsMaxWidth ? { maxWidth: columnsMaxWidth } : {}),\n }}\n >\n {children}\n </div>\n );\n }\n if (columns && columns > 1) {\n return (\n <div\n className={cn(\"grid gap-x-3\", stackedRowGapClass[size], className)}\n style={{ gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` }}\n >\n {children}\n </div>\n );\n }\n return (\n <div className={cn(\"grid\", stackedRowGapClass[size], className)}>\n {children}\n </div>\n );\n}\n\n// FieldWrapper lays out a single label + value (+ helper/error). In inline mode\n// it is a `subgrid` row spanning the parent FieldsGrid's two columns, so its\n// label and value snap to the shared label/value tracks (helper/error sit under\n// the value column). In stacked mode the label sits tight above its control as\n// one unit, capped at valueMaxWidth so controls don't stretch edge to edge.\nexport function FieldWrapper({\n label,\n value,\n helper,\n error,\n layout,\n size,\n maxWidth,\n}: {\n label: ReactNode;\n value: ReactNode;\n helper?: ReactNode;\n error?: ReactNode;\n layout: FormLayout;\n size: FormSize;\n // Overrides the stacked value-width cap. A field spanning the full row of a\n // multi-column grid passes \"none\", so it actually fills the row it was given\n // instead of stopping at the shared 600px cap.\n maxWidth?: string;\n}) {\n if (layout.mode === \"inline\") {\n return (\n <div className=\"col-span-2 grid grid-cols-subgrid items-start gap-x-3 gap-y-0.5\">\n <div\n className={cn(\n \"flex min-w-0 items-center\",\n controlMinHeightClass[size],\n )}\n >\n {label}\n </div>\n <div className=\"min-w-0\">{value}</div>\n {helper && (\n <p className=\"col-start-2 text-xs text-muted-foreground\">{helper}</p>\n )}\n {error && (\n <p className=\"col-start-2 text-xs text-destructive\">{error}</p>\n )}\n </div>\n );\n }\n return (\n <div\n className=\"flex w-full flex-col gap-1\"\n style={{ maxWidth: maxWidth ?? layout.valueMaxWidth ?? \"600px\" }}\n >\n {label}\n {value}\n {helper && <p className=\"text-xs text-muted-foreground\">{helper}</p>}\n {error && <p className=\"text-xs text-destructive\">{error}</p>}\n </div>\n );\n}\n\nexport function FieldLabel({\n field,\n fieldId,\n size,\n helpDisplay,\n}: {\n field: FieldControl;\n fieldId: string;\n size: FormSize;\n // When \"hover\", the description rides on the label as a `?` instead of being\n // rendered as a paragraph under the control by FieldWrapper.\n helpDisplay?: HelpDisplay;\n}) {\n return (\n <label\n htmlFor={fieldId}\n className={cn(\n \"flex min-w-0 items-center gap-2 font-medium\",\n labelSizeClass[size],\n field.labelClassName,\n )}\n >\n <LabelIcon\n icon={field.labelIcon}\n className=\"shrink-0 text-[15px] text-muted-foreground\"\n />\n <span\n className=\"truncate\"\n title={field.label !== field.key ? field.key : undefined}\n >\n {field.label}\n </span>\n {field.required && <span className=\"shrink-0 text-destructive\">*</span>}\n {field.badge && (\n <span className=\"shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {field.badge}\n </span>\n )}\n {helpDisplay === \"hover\" && field.helper && (\n <HelpHint label={field.label} helper={field.helper} />\n )}\n </label>\n );\n}\n\n// HelpHint is the `?` affordance that replaces a permanent description\n// paragraph. HoverCard opens on focus as well as hover, so the text stays\n// reachable from the keyboard rather than being mouse-only.\nexport function HelpHint({ label, helper }: { label: string; helper: string }) {\n return (\n <HoverCard\n placement=\"top\"\n trigger={\n <button\n type=\"button\"\n aria-label={`About ${label}`}\n className=\"shrink-0 cursor-help text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <Icon icon={UiQuestion} className=\"text-sm\" />\n </button>\n }\n cardClassName=\"max-w-xs whitespace-normal text-left text-xs font-normal text-foreground\"\n >\n {helper}\n </HoverCard>\n );\n}\n\n// SectionHeading is the content of a section's header row: the label with its\n// icon, required marker, badge and hover help. It is the label node buildField\n// hands to post extensions for a field that renders as a section; a section\n// with an empty title has no heading at all (see ObjectSection).\nexport function SectionHeading({\n field,\n label = field.label,\n size,\n helpDisplay,\n}: {\n field: FieldControl;\n label?: string;\n size: FormSize;\n helpDisplay?: HelpDisplay;\n}) {\n const { required, badge, helper, labelIcon } = field;\n return (\n <span className={cn(\"flex min-w-0 items-center gap-2\", labelSizeClass[size])}>\n <LabelIcon\n icon={labelIcon}\n className=\"shrink-0 text-[15px] text-muted-foreground\"\n />\n <span className=\"min-w-0 truncate\">{label}</span>\n {required && <span className=\"shrink-0 text-destructive\">*</span>}\n {badge && (\n <span className=\"shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {badge}\n </span>\n )}\n {helpDisplay === \"hover\" && helper && <HelpHint label={label} helper={helper} />}\n </span>\n );\n}\n\n// ObjectSection renders a nested object as a labelled section: a header row\n// (the field label + required/badge) above its fields, which fill the full\n// width below. It replaces the inline label + bordered box so nested objects\n// read as flat, headed groups rather than indented sub-forms. `col-span-full`\n// makes it span both tracks of an inline FieldsGrid (full width, not crammed\n// into the value column); in a stacked single-column grid it is a no-op.\n//\n// A field whose schema gives it an EMPTY title renders with no header at all:\n// the host already titled it (a collapsible section of its own, a dialog), and\n// a headed section inside that one would say the same word twice. A missing\n// title is not this — it falls back to the humanised key, as every other\n// control does — so only an explicit `\"title\": \"\"` opts out.\n//\n// The header row is a separate SectionHeading node (null for no header), so\n// the post extensions that decorate every other field's label decorate a\n// section's header too.\nexport function ObjectSection({\n heading,\n size,\n helper,\n helpDisplay,\n children,\n}: {\n heading: ReactNode;\n size: FormSize;\n helper?: string;\n helpDisplay?: HelpDisplay;\n children: ReactNode;\n}) {\n const hoverHelp = helpDisplay === \"hover\" && !!helper;\n return (\n <div\n className={cn(\n \"col-span-full flex min-w-0 max-w-full flex-col\",\n fieldInnerGapClass[size],\n )}\n >\n {heading != null && (\n // The header row owns the rule and weight, so whatever a post\n // extension puts beside the heading sits inline in the same row.\n <div\n data-jsf-section-heading\n className={cn(\n \"flex min-w-0 items-center gap-2 border-b border-border pb-1 font-semibold\",\n labelSizeClass[size],\n )}\n >\n {heading}\n </div>\n )}\n {helper && !hoverHelp && (\n <p className=\"min-w-0 break-words text-xs text-muted-foreground\">\n {helper}\n </p>\n )}\n {children}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"json-schema-form-layout.cjs","names":["useContext","PropertiesContext","cn","inlineRowGapClass","stackedRowGapClass","controlMinHeightClass","labelSizeClass","LabelIcon","hasFormHelp","FormHelp","HoverCard","Icon","UiQuestion","fieldInnerGapClass"],"sources":["../../src/components/json-schema-form-layout.tsx"],"sourcesContent":["import { useContext, type ReactNode } from \"react\";\nimport { PropertiesContext } from \"../data/properties-context\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, LabelIcon } from \"../data/Icon\";\nimport { UiQuestion } from \"../icons\";\nimport { HoverCard } from \"../overlay/HoverCard\";\nimport type {\n FieldControl,\n FormLayout,\n GridColumns,\n HelpDisplay,\n} from \"./json-schema-form-types\";\nimport { DEFAULT_COLUMN_MIN_WIDTH } from \"./json-schema-form-utils\";\nimport { FormHelp } from \"./json-schema-form-help-links\";\nimport { hasFormHelp } from \"./json-schema-form-help-model\";\nimport {\n controlMinHeightClass,\n fieldInnerGapClass,\n inlineRowGapClass,\n labelSizeClass,\n stackedRowGapClass,\n type FormSize,\n} from \"./json-schema-form-size\";\n\n// FieldsGrid is the container every group of field rows renders into — the\n// top-level form and each nested object/map. In inline mode it owns the single\n// 2-column track definition: `fit-content(labelMaxWidth)` for the label column,\n// `minmax(0, valueMaxWidth)` for the value column. Every field row is a\n// `subgrid` that inherits these tracks, so all labels share one column width and\n// every value lines up — a real form grid, not per-row independent grids.\n// (`fit-content()` is the only valid CSS for \"size to content, clamped to a max\"\n// — `min(w, max-content)` is rejected by the browser, which silently drops the\n// whole declaration and collapses every row to a stacked-looking column. The\n// template is an inline style because Tailwind can't interpolate runtime widths.)\n// Stacked mode is a plain single-column grid.\nexport function FieldsGrid({\n layout,\n size,\n columns,\n columnMinWidth,\n columnsMaxWidth,\n className,\n children,\n}: {\n layout: FormLayout;\n size: FormSize;\n // Object-level `x-columns`: split a stacked object into N equal columns, or\n // \"auto\" to fit as many `columnMinWidth`-wide columns as the container allows.\n // Fields span one column unless they set `x-col-span`. Ignored in inline mode\n // (which owns its own 2-track label/value layout).\n columns?: GridColumns;\n // `x-columns: \"auto\"` only: the minmax() floor for one column, and an optional\n // cap on the whole grid so controls don't stretch edge to edge on a wide\n // screen. CSS lengths, applied inline — a runtime width can't be a Tailwind\n // arbitrary class, because the scanner never sees it.\n columnMinWidth?: string;\n columnsMaxWidth?: string;\n // Object-level `x-classes`: extra classes merged onto the grid container\n // (e.g. `gap-2`, padding). Applied last so a standard utility wins over the\n // defaults via tailwind-merge.\n className?: string;\n children: ReactNode;\n}) {\n const propertiesParent = useContext(PropertiesContext);\n if (layout.mode === \"properties\") {\n return (\n <div\n className={cn(\n \"min-w-0 overflow-hidden rounded-md border border-border\",\n propertiesParent &&\n \"col-span-full grid grid-cols-subgrid rounded-none border-0\",\n className,\n )}\n >\n {children}\n </div>\n );\n }\n if (layout.mode === \"inline\") {\n const labelMaxWidth = layout.labelMaxWidth ?? \"40ch\";\n const valueMaxWidth = layout.valueMaxWidth ?? \"600px\";\n return (\n <div\n className={cn(\"grid\", inlineRowGapClass[size], className)}\n style={{\n gridTemplateColumns: `fit-content(${labelMaxWidth}) minmax(0, ${valueMaxWidth})`,\n }}\n >\n {children}\n </div>\n );\n }\n if (columns === \"auto\") {\n return (\n <div\n className={cn(\"grid gap-x-4\", stackedRowGapClass[size], className)}\n style={{\n gridTemplateColumns: `repeat(auto-fill, minmax(${columnMinWidth ?? DEFAULT_COLUMN_MIN_WIDTH}, 1fr))`,\n ...(columnsMaxWidth ? { maxWidth: columnsMaxWidth } : {}),\n }}\n >\n {children}\n </div>\n );\n }\n if (columns && columns > 1) {\n return (\n <div\n className={cn(\"grid gap-x-3\", stackedRowGapClass[size], className)}\n style={{ gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` }}\n >\n {children}\n </div>\n );\n }\n return (\n <div className={cn(\"grid\", stackedRowGapClass[size], className)}>\n {children}\n </div>\n );\n}\n\n// FieldWrapper lays out a single label + value (+ helper/error). In inline mode\n// it is a `subgrid` row spanning the parent FieldsGrid's two columns, so its\n// label and value snap to the shared label/value tracks (helper/error sit under\n// the value column). In stacked mode the label sits tight above its control as\n// one unit, capped at valueMaxWidth so controls don't stretch edge to edge.\nexport function FieldWrapper({\n label,\n value,\n helper,\n error,\n layout,\n size,\n maxWidth,\n}: {\n label: ReactNode;\n value: ReactNode;\n helper?: ReactNode;\n error?: ReactNode;\n layout: FormLayout;\n size: FormSize;\n // Overrides the stacked value-width cap. A field spanning the full row of a\n // multi-column grid passes \"none\", so it actually fills the row it was given\n // instead of stopping at the shared 600px cap.\n maxWidth?: string;\n}) {\n if (layout.mode === \"inline\") {\n return (\n <div className=\"col-span-2 grid grid-cols-subgrid items-start gap-x-3 gap-y-0.5\">\n <div\n className={cn(\n \"flex min-w-0 items-center\",\n controlMinHeightClass[size],\n )}\n >\n {label}\n </div>\n <div className=\"min-w-0\">{value}</div>\n {helper && (\n <p className=\"col-start-2 text-xs text-muted-foreground\">{helper}</p>\n )}\n {error && (\n <p className=\"col-start-2 text-xs text-destructive\">{error}</p>\n )}\n </div>\n );\n }\n return (\n <div\n className=\"flex w-full flex-col gap-1\"\n style={{ maxWidth: maxWidth ?? layout.valueMaxWidth ?? \"600px\" }}\n >\n {label}\n {value}\n {helper && <p className=\"text-xs text-muted-foreground\">{helper}</p>}\n {error && <p className=\"text-xs text-destructive\">{error}</p>}\n </div>\n );\n}\n\nexport function FieldLabel({\n field,\n fieldId,\n size,\n helpDisplay,\n}: {\n field: FieldControl;\n fieldId: string;\n size: FormSize;\n // When \"hover\", the description rides on the label as a `?` instead of being\n // rendered as a paragraph under the control by FieldWrapper.\n helpDisplay?: HelpDisplay;\n}) {\n return (\n <label\n htmlFor={fieldId}\n className={cn(\n \"flex min-w-0 items-center gap-2 font-medium\",\n labelSizeClass[size],\n field.labelClassName,\n )}\n >\n <LabelIcon\n icon={field.labelIcon}\n className=\"shrink-0 text-[15px] text-muted-foreground\"\n />\n <span\n className=\"truncate\"\n title={field.label !== field.key ? field.key : undefined}\n >\n {field.label}\n </span>\n {field.required && <span className=\"shrink-0 text-destructive\">*</span>}\n {field.badge && (\n <span className=\"shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {field.badge}\n </span>\n )}\n {helpDisplay === \"hover\" && hasFormHelp(field) && (\n <HelpHint label={field.label} helper={<FormHelp field={field} />} />\n )}\n </label>\n );\n}\n\n// HelpHint is the `?` affordance that replaces a permanent description\n// paragraph. HoverCard opens on focus as well as hover, so the text stays\n// reachable from the keyboard rather than being mouse-only.\nexport function HelpHint({ label, helper }: { label: string; helper: ReactNode }) {\n return (\n <HoverCard\n placement=\"top\"\n trigger={\n <button\n type=\"button\"\n aria-label={`About ${label}`}\n className=\"shrink-0 cursor-help text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <Icon icon={UiQuestion} className=\"text-sm\" />\n </button>\n }\n cardClassName=\"max-w-xs whitespace-normal text-left text-xs font-normal text-foreground\"\n >\n {helper}\n </HoverCard>\n );\n}\n\n// SectionHeading is the content of a section's header row: the label with its\n// icon, required marker, badge and hover help. It is the label node buildField\n// hands to post extensions for a field that renders as a section; a section\n// with an empty title has no heading at all (see ObjectSection).\nexport function SectionHeading({\n field,\n label = field.label,\n size,\n helpDisplay,\n}: {\n field: FieldControl;\n label?: string;\n size: FormSize;\n helpDisplay?: HelpDisplay;\n}) {\n const { required, badge, labelIcon } = field;\n return (\n <span className={cn(\"flex min-w-0 items-center gap-2\", labelSizeClass[size])}>\n <LabelIcon\n icon={labelIcon}\n className=\"shrink-0 text-[15px] text-muted-foreground\"\n />\n <span className=\"min-w-0 truncate\">{label}</span>\n {required && <span className=\"shrink-0 text-destructive\">*</span>}\n {badge && (\n <span className=\"shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {badge}\n </span>\n )}\n {helpDisplay === \"hover\" && hasFormHelp(field) && <HelpHint label={label} helper={<FormHelp field={field} />} />}\n </span>\n );\n}\n\n// ObjectSection renders a nested object as a labelled section: a header row\n// (the field label + required/badge) above its fields, which fill the full\n// width below. It replaces the inline label + bordered box so nested objects\n// read as flat, headed groups rather than indented sub-forms. `col-span-full`\n// makes it span both tracks of an inline FieldsGrid (full width, not crammed\n// into the value column); in a stacked single-column grid it is a no-op.\n//\n// A field whose schema gives it an EMPTY title renders with no header at all:\n// the host already titled it (a collapsible section of its own, a dialog), and\n// a headed section inside that one would say the same word twice. A missing\n// title is not this — it falls back to the humanised key, as every other\n// control does — so only an explicit `\"title\": \"\"` opts out.\n//\n// The header row is a separate SectionHeading node (null for no header), so\n// the post extensions that decorate every other field's label decorate a\n// section's header too.\nexport function ObjectSection({\n heading,\n size,\n helper,\n helpDisplay,\n children,\n}: {\n heading: ReactNode;\n size: FormSize;\n helper?: ReactNode;\n helpDisplay?: HelpDisplay;\n children: ReactNode;\n}) {\n const hoverHelp = helpDisplay === \"hover\" && !!helper;\n return (\n <div\n className={cn(\n \"col-span-full flex min-w-0 max-w-full flex-col\",\n fieldInnerGapClass[size],\n )}\n >\n {heading != null && (\n // The header row owns the rule and weight, so whatever a post\n // extension puts beside the heading sits inline in the same row.\n <div\n data-jsf-section-heading\n className={cn(\n \"flex min-w-0 items-center gap-2 border-b border-border pb-1 font-semibold\",\n labelSizeClass[size],\n )}\n >\n {heading}\n </div>\n )}\n {helper && !hoverHelp && (\n <p className=\"min-w-0 break-words text-xs text-muted-foreground\">\n {helper}\n </p>\n )}\n {children}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -27,7 +27,7 @@ export declare function FieldLabel({ field, fieldId, size, helpDisplay, }: {
27
27
  }): import("react").JSX.Element;
28
28
  export declare function HelpHint({ label, helper }: {
29
29
  label: string;
30
- helper: string;
30
+ helper: ReactNode;
31
31
  }): import("react").JSX.Element;
32
32
  export declare function SectionHeading({ field, label, size, helpDisplay, }: {
33
33
  field: FieldControl;
@@ -38,7 +38,7 @@ export declare function SectionHeading({ field, label, size, helpDisplay, }: {
38
38
  export declare function ObjectSection({ heading, size, helper, helpDisplay, children, }: {
39
39
  heading: ReactNode;
40
40
  size: FormSize;
41
- helper?: string;
41
+ helper?: ReactNode;
42
42
  helpDisplay?: HelpDisplay;
43
43
  children: ReactNode;
44
44
  }): import("react").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"json-schema-form-layout.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-layout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAMnD,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,WAAW,EACX,WAAW,EACZ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAML,KAAK,QAAQ,EACd,MAAM,yBAAyB,CAAC;AAajC,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,IAAI,EACJ,OAAO,EACP,cAAc,EACd,eAAe,EACf,SAAS,EACT,QAAQ,GACT,EAAE;IACD,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC;IAKf,OAAO,CAAC,EAAE,WAAW,CAAC;IAKtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IAIzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACrB,+BA0DA;AAOD,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,KAAK,EACL,MAAM,EACN,KAAK,EACL,MAAM,EACN,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC;IAIf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,+BAiCA;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,OAAO,EACP,IAAI,EACJ,WAAW,GACZ,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,QAAQ,CAAC;IAGf,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,+BA+BA;AAKD,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,+BAkB5E;AAMD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,KAAmB,EACnB,IAAI,EACJ,WAAW,GACZ,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,+BAkBA;AAkBD,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,IAAI,EACJ,MAAM,EACN,WAAW,EACX,QAAQ,GACT,EAAE;IACD,OAAO,EAAE,SAAS,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,EAAE,SAAS,CAAC;CACrB,+BA8BA"}
1
+ {"version":3,"file":"json-schema-form-layout.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-layout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAMnD,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,WAAW,EACX,WAAW,EACZ,MAAM,0BAA0B,CAAC;AAIlC,OAAO,EAML,KAAK,QAAQ,EACd,MAAM,yBAAyB,CAAC;AAajC,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,IAAI,EACJ,OAAO,EACP,cAAc,EACd,eAAe,EACf,SAAS,EACT,QAAQ,GACT,EAAE;IACD,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC;IAKf,OAAO,CAAC,EAAE,WAAW,CAAC;IAKtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IAIzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACrB,+BA0DA;AAOD,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,KAAK,EACL,MAAM,EACN,KAAK,EACL,MAAM,EACN,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC;IAIf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,+BAiCA;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,OAAO,EACP,IAAI,EACJ,WAAW,GACZ,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,QAAQ,CAAC;IAGf,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,+BA+BA;AAKD,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,+BAkB/E;AAMD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,KAAmB,EACnB,IAAI,EACJ,WAAW,GACZ,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,+BAkBA;AAkBD,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,IAAI,EACJ,MAAM,EACN,WAAW,EACX,QAAQ,GACT,EAAE;IACD,OAAO,EAAE,SAAS,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,EAAE,SAAS,CAAC;CACrB,+BA8BA"}
@@ -5,6 +5,8 @@ import { controlMinHeightClass, fieldInnerGapClass, inlineRowGapClass, labelSize
5
5
  import { PropertiesContext } from "../data/properties-context.js";
6
6
  import { HoverCard } from "../overlay/HoverCard.js";
7
7
  import "./json-schema-form-utils.js";
8
+ import { FormHelp } from "./json-schema-form-help-links.js";
9
+ import { hasFormHelp } from "./json-schema-form-help-model.js";
8
10
  import { useContext } from "react";
9
11
  import { jsx, jsxs } from "react/jsx-runtime";
10
12
  // src/components/json-schema-form-layout.tsx
@@ -102,9 +104,9 @@ function FieldLabel({ field, fieldId, size, helpDisplay }) {
102
104
  className: "shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground",
103
105
  children: field.badge
104
106
  }),
105
- helpDisplay === "hover" && field.helper && /* @__PURE__ */ jsx(HelpHint, {
107
+ helpDisplay === "hover" && hasFormHelp(field) && /* @__PURE__ */ jsx(HelpHint, {
106
108
  label: field.label,
107
- helper: field.helper
109
+ helper: /* @__PURE__ */ jsx(FormHelp, { field })
108
110
  })
109
111
  ]
110
112
  });
@@ -126,7 +128,7 @@ function HelpHint({ label, helper }) {
126
128
  });
127
129
  }
128
130
  function SectionHeading({ field, label = field.label, size, helpDisplay }) {
129
- const { required, badge, helper, labelIcon } = field;
131
+ const { required, badge, labelIcon } = field;
130
132
  return /* @__PURE__ */ jsxs("span", {
131
133
  className: cn("flex min-w-0 items-center gap-2", labelSizeClass[size]),
132
134
  children: [
@@ -146,9 +148,9 @@ function SectionHeading({ field, label = field.label, size, helpDisplay }) {
146
148
  className: "shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground",
147
149
  children: badge
148
150
  }),
149
- helpDisplay === "hover" && helper && /* @__PURE__ */ jsx(HelpHint, {
151
+ helpDisplay === "hover" && hasFormHelp(field) && /* @__PURE__ */ jsx(HelpHint, {
150
152
  label,
151
- helper
153
+ helper: /* @__PURE__ */ jsx(FormHelp, { field })
152
154
  })
153
155
  ]
154
156
  });
@@ -1 +1 @@
1
- {"version":3,"file":"json-schema-form-layout.js","names":[],"sources":["../../src/components/json-schema-form-layout.tsx"],"sourcesContent":["import { useContext, type ReactNode } from \"react\";\nimport { PropertiesContext } from \"../data/properties-context\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, LabelIcon } from \"../data/Icon\";\nimport { UiQuestion } from \"../icons\";\nimport { HoverCard } from \"../overlay/HoverCard\";\nimport type {\n FieldControl,\n FormLayout,\n GridColumns,\n HelpDisplay,\n} from \"./json-schema-form-types\";\nimport { DEFAULT_COLUMN_MIN_WIDTH } from \"./json-schema-form-utils\";\nimport {\n controlMinHeightClass,\n fieldInnerGapClass,\n inlineRowGapClass,\n labelSizeClass,\n stackedRowGapClass,\n type FormSize,\n} from \"./json-schema-form-size\";\n\n// FieldsGrid is the container every group of field rows renders into — the\n// top-level form and each nested object/map. In inline mode it owns the single\n// 2-column track definition: `fit-content(labelMaxWidth)` for the label column,\n// `minmax(0, valueMaxWidth)` for the value column. Every field row is a\n// `subgrid` that inherits these tracks, so all labels share one column width and\n// every value lines up — a real form grid, not per-row independent grids.\n// (`fit-content()` is the only valid CSS for \"size to content, clamped to a max\"\n// — `min(w, max-content)` is rejected by the browser, which silently drops the\n// whole declaration and collapses every row to a stacked-looking column. The\n// template is an inline style because Tailwind can't interpolate runtime widths.)\n// Stacked mode is a plain single-column grid.\nexport function FieldsGrid({\n layout,\n size,\n columns,\n columnMinWidth,\n columnsMaxWidth,\n className,\n children,\n}: {\n layout: FormLayout;\n size: FormSize;\n // Object-level `x-columns`: split a stacked object into N equal columns, or\n // \"auto\" to fit as many `columnMinWidth`-wide columns as the container allows.\n // Fields span one column unless they set `x-col-span`. Ignored in inline mode\n // (which owns its own 2-track label/value layout).\n columns?: GridColumns;\n // `x-columns: \"auto\"` only: the minmax() floor for one column, and an optional\n // cap on the whole grid so controls don't stretch edge to edge on a wide\n // screen. CSS lengths, applied inline — a runtime width can't be a Tailwind\n // arbitrary class, because the scanner never sees it.\n columnMinWidth?: string;\n columnsMaxWidth?: string;\n // Object-level `x-classes`: extra classes merged onto the grid container\n // (e.g. `gap-2`, padding). Applied last so a standard utility wins over the\n // defaults via tailwind-merge.\n className?: string;\n children: ReactNode;\n}) {\n const propertiesParent = useContext(PropertiesContext);\n if (layout.mode === \"properties\") {\n return (\n <div\n className={cn(\n \"min-w-0 overflow-hidden rounded-md border border-border\",\n propertiesParent &&\n \"col-span-full grid grid-cols-subgrid rounded-none border-0\",\n className,\n )}\n >\n {children}\n </div>\n );\n }\n if (layout.mode === \"inline\") {\n const labelMaxWidth = layout.labelMaxWidth ?? \"40ch\";\n const valueMaxWidth = layout.valueMaxWidth ?? \"600px\";\n return (\n <div\n className={cn(\"grid\", inlineRowGapClass[size], className)}\n style={{\n gridTemplateColumns: `fit-content(${labelMaxWidth}) minmax(0, ${valueMaxWidth})`,\n }}\n >\n {children}\n </div>\n );\n }\n if (columns === \"auto\") {\n return (\n <div\n className={cn(\"grid gap-x-4\", stackedRowGapClass[size], className)}\n style={{\n gridTemplateColumns: `repeat(auto-fill, minmax(${columnMinWidth ?? DEFAULT_COLUMN_MIN_WIDTH}, 1fr))`,\n ...(columnsMaxWidth ? { maxWidth: columnsMaxWidth } : {}),\n }}\n >\n {children}\n </div>\n );\n }\n if (columns && columns > 1) {\n return (\n <div\n className={cn(\"grid gap-x-3\", stackedRowGapClass[size], className)}\n style={{ gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` }}\n >\n {children}\n </div>\n );\n }\n return (\n <div className={cn(\"grid\", stackedRowGapClass[size], className)}>\n {children}\n </div>\n );\n}\n\n// FieldWrapper lays out a single label + value (+ helper/error). In inline mode\n// it is a `subgrid` row spanning the parent FieldsGrid's two columns, so its\n// label and value snap to the shared label/value tracks (helper/error sit under\n// the value column). In stacked mode the label sits tight above its control as\n// one unit, capped at valueMaxWidth so controls don't stretch edge to edge.\nexport function FieldWrapper({\n label,\n value,\n helper,\n error,\n layout,\n size,\n maxWidth,\n}: {\n label: ReactNode;\n value: ReactNode;\n helper?: ReactNode;\n error?: ReactNode;\n layout: FormLayout;\n size: FormSize;\n // Overrides the stacked value-width cap. A field spanning the full row of a\n // multi-column grid passes \"none\", so it actually fills the row it was given\n // instead of stopping at the shared 600px cap.\n maxWidth?: string;\n}) {\n if (layout.mode === \"inline\") {\n return (\n <div className=\"col-span-2 grid grid-cols-subgrid items-start gap-x-3 gap-y-0.5\">\n <div\n className={cn(\n \"flex min-w-0 items-center\",\n controlMinHeightClass[size],\n )}\n >\n {label}\n </div>\n <div className=\"min-w-0\">{value}</div>\n {helper && (\n <p className=\"col-start-2 text-xs text-muted-foreground\">{helper}</p>\n )}\n {error && (\n <p className=\"col-start-2 text-xs text-destructive\">{error}</p>\n )}\n </div>\n );\n }\n return (\n <div\n className=\"flex w-full flex-col gap-1\"\n style={{ maxWidth: maxWidth ?? layout.valueMaxWidth ?? \"600px\" }}\n >\n {label}\n {value}\n {helper && <p className=\"text-xs text-muted-foreground\">{helper}</p>}\n {error && <p className=\"text-xs text-destructive\">{error}</p>}\n </div>\n );\n}\n\nexport function FieldLabel({\n field,\n fieldId,\n size,\n helpDisplay,\n}: {\n field: FieldControl;\n fieldId: string;\n size: FormSize;\n // When \"hover\", the description rides on the label as a `?` instead of being\n // rendered as a paragraph under the control by FieldWrapper.\n helpDisplay?: HelpDisplay;\n}) {\n return (\n <label\n htmlFor={fieldId}\n className={cn(\n \"flex min-w-0 items-center gap-2 font-medium\",\n labelSizeClass[size],\n field.labelClassName,\n )}\n >\n <LabelIcon\n icon={field.labelIcon}\n className=\"shrink-0 text-[15px] text-muted-foreground\"\n />\n <span\n className=\"truncate\"\n title={field.label !== field.key ? field.key : undefined}\n >\n {field.label}\n </span>\n {field.required && <span className=\"shrink-0 text-destructive\">*</span>}\n {field.badge && (\n <span className=\"shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {field.badge}\n </span>\n )}\n {helpDisplay === \"hover\" && field.helper && (\n <HelpHint label={field.label} helper={field.helper} />\n )}\n </label>\n );\n}\n\n// HelpHint is the `?` affordance that replaces a permanent description\n// paragraph. HoverCard opens on focus as well as hover, so the text stays\n// reachable from the keyboard rather than being mouse-only.\nexport function HelpHint({ label, helper }: { label: string; helper: string }) {\n return (\n <HoverCard\n placement=\"top\"\n trigger={\n <button\n type=\"button\"\n aria-label={`About ${label}`}\n className=\"shrink-0 cursor-help text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <Icon icon={UiQuestion} className=\"text-sm\" />\n </button>\n }\n cardClassName=\"max-w-xs whitespace-normal text-left text-xs font-normal text-foreground\"\n >\n {helper}\n </HoverCard>\n );\n}\n\n// SectionHeading is the content of a section's header row: the label with its\n// icon, required marker, badge and hover help. It is the label node buildField\n// hands to post extensions for a field that renders as a section; a section\n// with an empty title has no heading at all (see ObjectSection).\nexport function SectionHeading({\n field,\n label = field.label,\n size,\n helpDisplay,\n}: {\n field: FieldControl;\n label?: string;\n size: FormSize;\n helpDisplay?: HelpDisplay;\n}) {\n const { required, badge, helper, labelIcon } = field;\n return (\n <span className={cn(\"flex min-w-0 items-center gap-2\", labelSizeClass[size])}>\n <LabelIcon\n icon={labelIcon}\n className=\"shrink-0 text-[15px] text-muted-foreground\"\n />\n <span className=\"min-w-0 truncate\">{label}</span>\n {required && <span className=\"shrink-0 text-destructive\">*</span>}\n {badge && (\n <span className=\"shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {badge}\n </span>\n )}\n {helpDisplay === \"hover\" && helper && <HelpHint label={label} helper={helper} />}\n </span>\n );\n}\n\n// ObjectSection renders a nested object as a labelled section: a header row\n// (the field label + required/badge) above its fields, which fill the full\n// width below. It replaces the inline label + bordered box so nested objects\n// read as flat, headed groups rather than indented sub-forms. `col-span-full`\n// makes it span both tracks of an inline FieldsGrid (full width, not crammed\n// into the value column); in a stacked single-column grid it is a no-op.\n//\n// A field whose schema gives it an EMPTY title renders with no header at all:\n// the host already titled it (a collapsible section of its own, a dialog), and\n// a headed section inside that one would say the same word twice. A missing\n// title is not this — it falls back to the humanised key, as every other\n// control does — so only an explicit `\"title\": \"\"` opts out.\n//\n// The header row is a separate SectionHeading node (null for no header), so\n// the post extensions that decorate every other field's label decorate a\n// section's header too.\nexport function ObjectSection({\n heading,\n size,\n helper,\n helpDisplay,\n children,\n}: {\n heading: ReactNode;\n size: FormSize;\n helper?: string;\n helpDisplay?: HelpDisplay;\n children: ReactNode;\n}) {\n const hoverHelp = helpDisplay === \"hover\" && !!helper;\n return (\n <div\n className={cn(\n \"col-span-full flex min-w-0 max-w-full flex-col\",\n fieldInnerGapClass[size],\n )}\n >\n {heading != null && (\n // The header row owns the rule and weight, so whatever a post\n // extension puts beside the heading sits inline in the same row.\n <div\n data-jsf-section-heading\n className={cn(\n \"flex min-w-0 items-center gap-2 border-b border-border pb-1 font-semibold\",\n labelSizeClass[size],\n )}\n >\n {heading}\n </div>\n )}\n {helper && !hoverHelp && (\n <p className=\"min-w-0 break-words text-xs text-muted-foreground\">\n {helper}\n </p>\n )}\n {children}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"json-schema-form-layout.js","names":[],"sources":["../../src/components/json-schema-form-layout.tsx"],"sourcesContent":["import { useContext, type ReactNode } from \"react\";\nimport { PropertiesContext } from \"../data/properties-context\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, LabelIcon } from \"../data/Icon\";\nimport { UiQuestion } from \"../icons\";\nimport { HoverCard } from \"../overlay/HoverCard\";\nimport type {\n FieldControl,\n FormLayout,\n GridColumns,\n HelpDisplay,\n} from \"./json-schema-form-types\";\nimport { DEFAULT_COLUMN_MIN_WIDTH } from \"./json-schema-form-utils\";\nimport { FormHelp } from \"./json-schema-form-help-links\";\nimport { hasFormHelp } from \"./json-schema-form-help-model\";\nimport {\n controlMinHeightClass,\n fieldInnerGapClass,\n inlineRowGapClass,\n labelSizeClass,\n stackedRowGapClass,\n type FormSize,\n} from \"./json-schema-form-size\";\n\n// FieldsGrid is the container every group of field rows renders into — the\n// top-level form and each nested object/map. In inline mode it owns the single\n// 2-column track definition: `fit-content(labelMaxWidth)` for the label column,\n// `minmax(0, valueMaxWidth)` for the value column. Every field row is a\n// `subgrid` that inherits these tracks, so all labels share one column width and\n// every value lines up — a real form grid, not per-row independent grids.\n// (`fit-content()` is the only valid CSS for \"size to content, clamped to a max\"\n// — `min(w, max-content)` is rejected by the browser, which silently drops the\n// whole declaration and collapses every row to a stacked-looking column. The\n// template is an inline style because Tailwind can't interpolate runtime widths.)\n// Stacked mode is a plain single-column grid.\nexport function FieldsGrid({\n layout,\n size,\n columns,\n columnMinWidth,\n columnsMaxWidth,\n className,\n children,\n}: {\n layout: FormLayout;\n size: FormSize;\n // Object-level `x-columns`: split a stacked object into N equal columns, or\n // \"auto\" to fit as many `columnMinWidth`-wide columns as the container allows.\n // Fields span one column unless they set `x-col-span`. Ignored in inline mode\n // (which owns its own 2-track label/value layout).\n columns?: GridColumns;\n // `x-columns: \"auto\"` only: the minmax() floor for one column, and an optional\n // cap on the whole grid so controls don't stretch edge to edge on a wide\n // screen. CSS lengths, applied inline — a runtime width can't be a Tailwind\n // arbitrary class, because the scanner never sees it.\n columnMinWidth?: string;\n columnsMaxWidth?: string;\n // Object-level `x-classes`: extra classes merged onto the grid container\n // (e.g. `gap-2`, padding). Applied last so a standard utility wins over the\n // defaults via tailwind-merge.\n className?: string;\n children: ReactNode;\n}) {\n const propertiesParent = useContext(PropertiesContext);\n if (layout.mode === \"properties\") {\n return (\n <div\n className={cn(\n \"min-w-0 overflow-hidden rounded-md border border-border\",\n propertiesParent &&\n \"col-span-full grid grid-cols-subgrid rounded-none border-0\",\n className,\n )}\n >\n {children}\n </div>\n );\n }\n if (layout.mode === \"inline\") {\n const labelMaxWidth = layout.labelMaxWidth ?? \"40ch\";\n const valueMaxWidth = layout.valueMaxWidth ?? \"600px\";\n return (\n <div\n className={cn(\"grid\", inlineRowGapClass[size], className)}\n style={{\n gridTemplateColumns: `fit-content(${labelMaxWidth}) minmax(0, ${valueMaxWidth})`,\n }}\n >\n {children}\n </div>\n );\n }\n if (columns === \"auto\") {\n return (\n <div\n className={cn(\"grid gap-x-4\", stackedRowGapClass[size], className)}\n style={{\n gridTemplateColumns: `repeat(auto-fill, minmax(${columnMinWidth ?? DEFAULT_COLUMN_MIN_WIDTH}, 1fr))`,\n ...(columnsMaxWidth ? { maxWidth: columnsMaxWidth } : {}),\n }}\n >\n {children}\n </div>\n );\n }\n if (columns && columns > 1) {\n return (\n <div\n className={cn(\"grid gap-x-3\", stackedRowGapClass[size], className)}\n style={{ gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` }}\n >\n {children}\n </div>\n );\n }\n return (\n <div className={cn(\"grid\", stackedRowGapClass[size], className)}>\n {children}\n </div>\n );\n}\n\n// FieldWrapper lays out a single label + value (+ helper/error). In inline mode\n// it is a `subgrid` row spanning the parent FieldsGrid's two columns, so its\n// label and value snap to the shared label/value tracks (helper/error sit under\n// the value column). In stacked mode the label sits tight above its control as\n// one unit, capped at valueMaxWidth so controls don't stretch edge to edge.\nexport function FieldWrapper({\n label,\n value,\n helper,\n error,\n layout,\n size,\n maxWidth,\n}: {\n label: ReactNode;\n value: ReactNode;\n helper?: ReactNode;\n error?: ReactNode;\n layout: FormLayout;\n size: FormSize;\n // Overrides the stacked value-width cap. A field spanning the full row of a\n // multi-column grid passes \"none\", so it actually fills the row it was given\n // instead of stopping at the shared 600px cap.\n maxWidth?: string;\n}) {\n if (layout.mode === \"inline\") {\n return (\n <div className=\"col-span-2 grid grid-cols-subgrid items-start gap-x-3 gap-y-0.5\">\n <div\n className={cn(\n \"flex min-w-0 items-center\",\n controlMinHeightClass[size],\n )}\n >\n {label}\n </div>\n <div className=\"min-w-0\">{value}</div>\n {helper && (\n <p className=\"col-start-2 text-xs text-muted-foreground\">{helper}</p>\n )}\n {error && (\n <p className=\"col-start-2 text-xs text-destructive\">{error}</p>\n )}\n </div>\n );\n }\n return (\n <div\n className=\"flex w-full flex-col gap-1\"\n style={{ maxWidth: maxWidth ?? layout.valueMaxWidth ?? \"600px\" }}\n >\n {label}\n {value}\n {helper && <p className=\"text-xs text-muted-foreground\">{helper}</p>}\n {error && <p className=\"text-xs text-destructive\">{error}</p>}\n </div>\n );\n}\n\nexport function FieldLabel({\n field,\n fieldId,\n size,\n helpDisplay,\n}: {\n field: FieldControl;\n fieldId: string;\n size: FormSize;\n // When \"hover\", the description rides on the label as a `?` instead of being\n // rendered as a paragraph under the control by FieldWrapper.\n helpDisplay?: HelpDisplay;\n}) {\n return (\n <label\n htmlFor={fieldId}\n className={cn(\n \"flex min-w-0 items-center gap-2 font-medium\",\n labelSizeClass[size],\n field.labelClassName,\n )}\n >\n <LabelIcon\n icon={field.labelIcon}\n className=\"shrink-0 text-[15px] text-muted-foreground\"\n />\n <span\n className=\"truncate\"\n title={field.label !== field.key ? field.key : undefined}\n >\n {field.label}\n </span>\n {field.required && <span className=\"shrink-0 text-destructive\">*</span>}\n {field.badge && (\n <span className=\"shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {field.badge}\n </span>\n )}\n {helpDisplay === \"hover\" && hasFormHelp(field) && (\n <HelpHint label={field.label} helper={<FormHelp field={field} />} />\n )}\n </label>\n );\n}\n\n// HelpHint is the `?` affordance that replaces a permanent description\n// paragraph. HoverCard opens on focus as well as hover, so the text stays\n// reachable from the keyboard rather than being mouse-only.\nexport function HelpHint({ label, helper }: { label: string; helper: ReactNode }) {\n return (\n <HoverCard\n placement=\"top\"\n trigger={\n <button\n type=\"button\"\n aria-label={`About ${label}`}\n className=\"shrink-0 cursor-help text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <Icon icon={UiQuestion} className=\"text-sm\" />\n </button>\n }\n cardClassName=\"max-w-xs whitespace-normal text-left text-xs font-normal text-foreground\"\n >\n {helper}\n </HoverCard>\n );\n}\n\n// SectionHeading is the content of a section's header row: the label with its\n// icon, required marker, badge and hover help. It is the label node buildField\n// hands to post extensions for a field that renders as a section; a section\n// with an empty title has no heading at all (see ObjectSection).\nexport function SectionHeading({\n field,\n label = field.label,\n size,\n helpDisplay,\n}: {\n field: FieldControl;\n label?: string;\n size: FormSize;\n helpDisplay?: HelpDisplay;\n}) {\n const { required, badge, labelIcon } = field;\n return (\n <span className={cn(\"flex min-w-0 items-center gap-2\", labelSizeClass[size])}>\n <LabelIcon\n icon={labelIcon}\n className=\"shrink-0 text-[15px] text-muted-foreground\"\n />\n <span className=\"min-w-0 truncate\">{label}</span>\n {required && <span className=\"shrink-0 text-destructive\">*</span>}\n {badge && (\n <span className=\"shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {badge}\n </span>\n )}\n {helpDisplay === \"hover\" && hasFormHelp(field) && <HelpHint label={label} helper={<FormHelp field={field} />} />}\n </span>\n );\n}\n\n// ObjectSection renders a nested object as a labelled section: a header row\n// (the field label + required/badge) above its fields, which fill the full\n// width below. It replaces the inline label + bordered box so nested objects\n// read as flat, headed groups rather than indented sub-forms. `col-span-full`\n// makes it span both tracks of an inline FieldsGrid (full width, not crammed\n// into the value column); in a stacked single-column grid it is a no-op.\n//\n// A field whose schema gives it an EMPTY title renders with no header at all:\n// the host already titled it (a collapsible section of its own, a dialog), and\n// a headed section inside that one would say the same word twice. A missing\n// title is not this — it falls back to the humanised key, as every other\n// control does — so only an explicit `\"title\": \"\"` opts out.\n//\n// The header row is a separate SectionHeading node (null for no header), so\n// the post extensions that decorate every other field's label decorate a\n// section's header too.\nexport function ObjectSection({\n heading,\n size,\n helper,\n helpDisplay,\n children,\n}: {\n heading: ReactNode;\n size: FormSize;\n helper?: ReactNode;\n helpDisplay?: HelpDisplay;\n children: ReactNode;\n}) {\n const hoverHelp = helpDisplay === \"hover\" && !!helper;\n return (\n <div\n className={cn(\n \"col-span-full flex min-w-0 max-w-full flex-col\",\n fieldInnerGapClass[size],\n )}\n >\n {heading != null && (\n // The header row owns the rule and weight, so whatever a post\n // extension puts beside the heading sits inline in the same row.\n <div\n data-jsf-section-heading\n className={cn(\n \"flex min-w-0 items-center gap-2 border-b border-border pb-1 font-semibold\",\n labelSizeClass[size],\n )}\n >\n {heading}\n </div>\n )}\n {helper && !hoverHelp && (\n <p className=\"min-w-0 break-words text-xs text-muted-foreground\">\n {helper}\n </p>\n )}\n {children}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAmCA,SAAgB,WAAW,EACzB,QACA,MACA,SACA,gBACA,iBACA,WACA,YAoBC;CACD,MAAM,mBAAmB,WAAW,iBAAiB;CACrD,IAAI,OAAO,SAAS,cAClB,OACE,oBAAC,OAAD;EACE,WAAW,GACT,2DACA,oBACE,8DACF,SACF;EAEC;CACE,CAAA;CAGT,IAAI,OAAO,SAAS,UAAU;EAC5B,MAAM,gBAAgB,OAAO,iBAAiB;EAC9C,MAAM,gBAAgB,OAAO,iBAAiB;EAC9C,OACE,oBAAC,OAAD;GACE,WAAW,GAAG,QAAQ,kBAAkB,OAAO,SAAS;GACxD,OAAO,EACL,qBAAqB,eAAe,cAAc,cAAc,cAAc,GAChF;GAEC;EACE,CAAA;CAET;CACA,IAAI,YAAY,QACd,OACE,oBAAC,OAAD;EACE,WAAW,GAAG,gBAAgB,mBAAmB,OAAO,SAAS;EACjE,OAAO;GACL,qBAAqB,4BAA4B,kBAAA,QAA2C;GAC5F,GAAI,kBAAkB,EAAE,UAAU,gBAAgB,IAAI,CAAC;EACzD;EAEC;CACE,CAAA;CAGT,IAAI,WAAW,UAAU,GACvB,OACE,oBAAC,OAAD;EACE,WAAW,GAAG,gBAAgB,mBAAmB,OAAO,SAAS;EACjE,OAAO,EAAE,qBAAqB,UAAU,QAAQ,mBAAmB;EAElE;CACE,CAAA;CAGT,OACE,oBAAC,OAAD;EAAK,WAAW,GAAG,QAAQ,mBAAmB,OAAO,SAAS;EAC3D;CACE,CAAA;AAET;AAOA,SAAgB,aAAa,EAC3B,OACA,OACA,QACA,OACA,QACA,MACA,YAYC;CACD,IAAI,OAAO,SAAS,UAClB,OACE,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,oBAAC,OAAD;IACE,WAAW,GACT,6BACA,sBAAsB,KACxB;IAEC,UAAA;GACE,CAAA;GACL,oBAAC,OAAD;IAAK,WAAU;IAAW,UAAA;GAAW,CAAA;GACpC,UACC,oBAAC,KAAD;IAAG,WAAU;IAA6C,UAAA;GAAU,CAAA;GAErE,SACC,oBAAC,KAAD;IAAG,WAAU;IAAwC,UAAA;GAAS,CAAA;EAE7D;;CAGT,OACE,qBAAC,OAAD;EACE,WAAU;EACV,OAAO,EAAE,UAAU,YAAY,OAAO,iBAAiB,QAAQ;EAFjE,UAAA;GAIG;GACA;GACA,UAAU,oBAAC,KAAD;IAAG,WAAU;IAAiC,UAAA;GAAU,CAAA;GAClE,SAAS,oBAAC,KAAD;IAAG,WAAU;IAA4B,UAAA;GAAS,CAAA;EACzD;;AAET;AAEA,SAAgB,WAAW,EACzB,OACA,SACA,MACA,eAQC;CACD,OACE,qBAAC,SAAD;EACE,SAAS;EACT,WAAW,GACT,+CACA,eAAe,OACf,MAAM,cACR;EANF,UAAA;GAQE,oBAAC,WAAD;IACE,MAAM,MAAM;IACZ,WAAU;GACX,CAAA;GACD,oBAAC,QAAD;IACE,WAAU;IACV,OAAO,MAAM,UAAU,MAAM,MAAM,MAAM,MAAM,KAAA;IAE9C,UAAA,MAAM;GACH,CAAA;GACL,MAAM,YAAY,oBAAC,QAAD;IAAM,WAAU;IAA4B,UAAA;GAAO,CAAA;GACrE,MAAM,SACL,oBAAC,QAAD;IAAM,WAAU;IACb,UAAA,MAAM;GACH,CAAA;GAEP,gBAAgB,WAAW,YAAY,KAAK,KAC3C,oBAAC,UAAD;IAAU,OAAO,MAAM;IAAO,QAAQ,oBAAC,UAAD,EAAiB,MAAQ,CAAA;GAAI,CAAA;EAEhE;;AAEX;AAKA,SAAgB,SAAS,EAAE,OAAO,UAAgD;CAChF,OACE,oBAAC,WAAD;EACE,WAAU;EACV,SACE,oBAAC,UAAD;GACE,MAAK;GACL,cAAY,SAAS;GACrB,WAAU;GAEV,UAAA,oBAAC,MAAD;IAAM,MAAM;IAAY,WAAU;GAAW,CAAA;EACvC,CAAA;EAEV,eAAc;EAEb,UAAA;CACQ,CAAA;AAEf;AAMA,SAAgB,eAAe,EAC7B,OACA,QAAQ,MAAM,OACd,MACA,eAMC;CACD,MAAM,EAAE,UAAU,OAAO,cAAc;CACvC,OACE,qBAAC,QAAD;EAAM,WAAW,GAAG,mCAAmC,eAAe,KAAK;EAA3E,UAAA;GACE,oBAAC,WAAD;IACE,MAAM;IACN,WAAU;GACX,CAAA;GACD,oBAAC,QAAD;IAAM,WAAU;IAAoB,UAAA;GAAY,CAAA;GAC/C,YAAY,oBAAC,QAAD;IAAM,WAAU;IAA4B,UAAA;GAAO,CAAA;GAC/D,SACC,oBAAC,QAAD;IAAM,WAAU;IACb,UAAA;GACG,CAAA;GAEP,gBAAgB,WAAW,YAAY,KAAK,KAAK,oBAAC,UAAD;IAAiB;IAAO,QAAQ,oBAAC,UAAD,EAAiB,MAAQ,CAAA;GAAI,CAAA;EAC3G;;AAEV;AAkBA,SAAgB,cAAc,EAC5B,SACA,MACA,QACA,aACA,YAOC;CACD,MAAM,YAAY,gBAAgB,WAAW,CAAC,CAAC;CAC/C,OACE,qBAAC,OAAD;EACE,WAAW,GACT,kDACA,mBAAmB,KACrB;EAJF,UAAA;GAMG,WAAW,QAGV,oBAAC,OAAD;IACE,4BAAA;IACA,WAAW,GACT,6EACA,eAAe,KACjB;IAEC,UAAA;GACE,CAAA;GAEN,UAAU,CAAC,aACV,oBAAC,KAAD;IAAG,WAAU;IACV,UAAA;GACA,CAAA;GAEJ;EACE;;AAET"}
@@ -100,7 +100,7 @@ function StringMapControl({ field, ctx }) {
100
100
  key,
101
101
  prop: valueSchema,
102
102
  required: false,
103
- value: map[key] ?? "",
103
+ value: map[key],
104
104
  onChange: (next) => setEntry(key, next),
105
105
  instancePath: require_json_schema_form_errors.appendInstancePath(ctx.instancePath, key)
106
106
  }, childCtx)?.value ?? null;
@@ -130,7 +130,7 @@ function StringMapControl({ field, ctx }) {
130
130
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
131
131
  className: require_utils.cn(properties ? "col-span-full grid grid-cols-subgrid" : "flex flex-col", !properties && !ctx.presentation && "rounded-md border border-input p-2", !properties && require_json_schema_form_size.fieldInnerGapClass[childCtx.size]),
132
132
  children: [
133
- knownKeys.map((key) => properties ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
133
+ knownKeys.map((key) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
134
134
  className: "contents",
135
135
  children: ctx.render.renderFieldRow({
136
136
  key,
@@ -140,17 +140,6 @@ function StringMapControl({ field, ctx }) {
140
140
  onChange: (next) => setEntry(key, next),
141
141
  instancePath: require_json_schema_form_errors.appendInstancePath(ctx.instancePath, key)
142
142
  }, childCtx)
143
- }, `known-${key}`) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
144
- className: "grid grid-cols-[10rem_1fr] items-center gap-2",
145
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
146
- htmlFor: require_json_schema_form_utils.fieldInputId(require_json_schema_form_errors.appendInstancePath(ctx.instancePath, key), childCtx.idPrefix),
147
- className: "truncate text-xs text-muted-foreground",
148
- title: key,
149
- children: key
150
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
151
- className: "min-w-0",
152
- children: valueControlFor(key, known[key] ?? { type: "string" })
153
- })]
154
143
  }, `known-${key}`)),
155
144
  extraKeys.map((key) => {
156
145
  const keyControl = ctx.presentation ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -1 +1 @@
1
- {"version":3,"file":"json-schema-form-object.cjs","names":["isPlainObject","FieldsGrid","normalizeColumns","cssLength","DEFAULT_COLUMN_MIN_WIDTH","appendInstancePath","propertyControlSize","Combobox","keyPickerOptions","cn","inputClass","fieldInnerGapClass","fieldInputId","controlHeightClass","Icon","UiTrash","_Fragment","PropertyValueEditor","Button","inputSizeClass","UiAdd"],"sources":["../../src/components/json-schema-form-object.tsx"],"sourcesContent":["import { type ReactNode } from \"react\";\nimport { isPlainObject } from \"../lib/collections\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"../data/Icon\";\nimport { UiAdd, UiTrash } from \"../icons\";\nimport { Button } from \"./button\";\nimport { Combobox } from \"./Combobox\";\nimport type {\n FieldControl,\n JsonSchemaObject,\n JsonSchemaProperty,\n RenderContext,\n} from \"./json-schema-form-types\";\nimport {\n cssLength,\n DEFAULT_COLUMN_MIN_WIDTH,\n fieldInputId,\n inputClass,\n keyPickerOptions,\n normalizeColumns,\n} from \"./json-schema-form-utils\";\nimport { FieldsGrid } from \"./json-schema-form-layout\";\nimport { PropertyValueEditor } from \"./json-schema-form-properties\";\nimport { propertyControlSize } from \"./json-schema-form-properties-size\";\nimport { appendInstancePath } from \"./json-schema-form-errors\";\nimport {\n controlHeightClass,\n fieldInnerGapClass,\n inputSizeClass,\n} from \"./json-schema-form-size\";\n\n// ObjectControl renders a nested structured object as a sub-form: its own\n// properties, required markers, if/then, soft errors — all via the shared\n// recursive renderer (ctx.render), so pre/post extensions apply at this depth too.\nexport function ObjectControl({\n field,\n ctx,\n}: {\n field: FieldControl;\n ctx: RenderContext;\n}) {\n const obj = isPlainObject(field.value)\n ? (field.value as Record<string, unknown>)\n : {};\n const subSchema: JsonSchemaObject = {\n type: \"object\",\n properties: field.objectProperties ?? {},\n ...(field.objectRequired ? { required: field.objectRequired } : {}),\n ...(Array.isArray(field.schema.allOf) ? { allOf: field.schema.allOf } : {}),\n // Copied whatever its shape, so a malformed value fails loudly in the\n // listener collector rather than vanishing here.\n ...(field.schema[\"x-on-load\"] !== undefined ? { \"x-on-load\": field.schema[\"x-on-load\"] } : {}),\n ...(Array.isArray(field.schema[\"x-order\"])\n ? { \"x-order\": field.schema[\"x-order\"] }\n : {}),\n // Every object-level layout keyword must be copied here or it works at the\n // top level and silently dies one level down — which is exactly where these\n // matter (an array item's body is a nested object).\n ...(typeof field.schema[\"x-columns\"] === \"number\" ||\n field.schema[\"x-columns\"] === \"auto\"\n ? { \"x-columns\": field.schema[\"x-columns\"] }\n : {}),\n ...(typeof field.schema[\"x-column-min-width\"] === \"string\"\n ? { \"x-column-min-width\": field.schema[\"x-column-min-width\"] }\n : {}),\n ...(typeof field.schema[\"x-columns-max-width\"] === \"string\"\n ? { \"x-columns-max-width\": field.schema[\"x-columns-max-width\"] }\n : {}),\n ...(typeof field.schema[\"x-classes\"] === \"string\"\n ? { \"x-classes\": field.schema[\"x-classes\"] }\n : {}),\n };\n // No border/box: nested objects render as flat headed sections (see\n // ObjectSection in renderFieldRow) rather than progressively indented\n // sub-forms, so deep schemas stay readable as a single column.\n // A read-only object marks its whole subtree non-editable: recurse with\n // form-level readOnly on so child inputs are disabled (and any child the\n // schema marks readOnly still renders as a value span).\n return (\n <FieldsGrid\n layout={ctx.layout}\n size={ctx.size}\n columns={normalizeColumns(subSchema[\"x-columns\"])}\n columnMinWidth={cssLength(\n subSchema[\"x-column-min-width\"],\n DEFAULT_COLUMN_MIN_WIDTH,\n )}\n {...(typeof subSchema[\"x-columns-max-width\"] === \"string\"\n ? { columnsMaxWidth: subSchema[\"x-columns-max-width\"] }\n : {})}\n {...(typeof subSchema[\"x-classes\"] === \"string\"\n ? { className: subSchema[\"x-classes\"] }\n : {})}\n >\n {ctx.render.renderObjectFields(\n subSchema,\n obj,\n (next) => field.onChange(next),\n {\n ...ctx,\n readOnly: ctx.readOnly || field.readOnly === true,\n depth: ctx.depth + 1,\n },\n )}\n </FieldsGrid>\n );\n}\n\n// StringMapControl edits an object as key/value rows. Known properties (from the\n// schema) render first with derived value controls; unknown keys render as\n// editable key/value pairs. \"Add field\" appears when extra keys are allowed.\n// Values recurse through the shared pipeline, so a value that is itself an object\n// or array renders structurally and pre/post extensions apply to it.\nexport function StringMapControl({\n field,\n ctx,\n}: {\n field: FieldControl;\n ctx: RenderContext;\n}) {\n // A read-only map marks its whole subtree non-editable: no rename/remove/add\n // and value inputs disabled.\n const readOnly = ctx.readOnly || field.readOnly === true;\n const map = isPlainObject(field.value)\n ? (field.value as Record<string, unknown>)\n : {};\n const known = field.knownProperties ?? {};\n const knownKeys = Object.keys(known);\n const extraKeys = Object.keys(map).filter((k) => !(k in known));\n const childCtx: RenderContext = { ...ctx, readOnly, depth: ctx.depth + 1 };\n const properties = ctx.layout.mode === \"properties\";\n // What the map key IS (e.g. \"Address Role\"), from the key-constraint schema.\n const pn = field.schema.propertyNames as JsonSchemaProperty | undefined;\n const keyTitle =\n typeof pn?.title === \"string\" && pn.title ? pn.title : undefined;\n\n // valueSchemaForKey picks an entry's value schema: the first patternProperties\n // entry whose regex matches the key, else the `additionalProperties` schema,\n // else a bare string. Lets the value form vary by key (e.g. House vs Apartment).\n function valueSchemaForKey(key: string): JsonSchemaProperty {\n for (const { pattern, schema } of field.valuePatternSchemas ?? []) {\n let re: RegExp | undefined;\n try {\n re = new RegExp(pattern);\n } catch {\n re = undefined; // a malformed pattern simply never matches\n }\n if (re?.test(key)) return schema;\n }\n return field.valueSchema ?? { type: \"string\" };\n }\n\n // When the entry value opts into a stacked layout (`x-layout: \"stack\"`), the\n // key+value render as one full-width stacked unit instead of a key column\n // beside the value. Resolved per key, since pattern schemas may differ.\n function entryIsStacked(key: string): boolean {\n return valueSchemaForKey(key)[\"x-layout\"] === \"stack\";\n }\n\n function setEntry(key: string, next: unknown) {\n field.onChange({ ...map, [key]: next });\n }\n function renameEntry(oldKey: string, newKey: string) {\n if (newKey === oldKey) return;\n const next: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(map))\n next[k === oldKey ? newKey : k] = v;\n field.onChange(next);\n }\n function removeEntry(key: string) {\n const next = { ...map };\n delete next[key];\n field.onChange(next);\n }\n function addEntry() {\n if (\"\" in map) return;\n field.onChange({ ...map, \"\": \"\" });\n }\n\n function valueControlFor(\n key: string,\n valueSchema: JsonSchemaProperty,\n ): ReactNode {\n const nodes = ctx.render.renderFieldNodes(\n {\n key,\n prop: valueSchema,\n required: false,\n value: map[key] ?? \"\",\n onChange: (next) => setEntry(key, next),\n instancePath: appendInstancePath(ctx.instancePath, key),\n },\n childCtx,\n );\n return nodes?.value ?? null;\n }\n\n // valueControlForKey resolves the per-key value schema (patternProperties /\n // additionalProperties) before rendering, so the form varies by key.\n function valueControlForKey(key: string): ReactNode {\n return valueControlFor(key, valueSchemaForKey(key));\n }\n\n function keyEditor({\n key,\n value,\n onChange,\n }: {\n key: string;\n value: string;\n onChange: (next: string) => void;\n }) {\n const size = properties ? propertyControlSize[ctx.size] : ctx.size;\n return field.keyOptions ? (\n <Combobox\n options={keyPickerOptions(\n field.keyOptions,\n [...knownKeys, ...extraKeys],\n key,\n )}\n value={value}\n disabled={readOnly}\n size={size}\n allowCustomValue={false}\n onChange={onChange}\n placeholder=\"Select…\"\n />\n ) : (\n <input\n type=\"text\"\n aria-label=\"Field name\"\n className={cn(inputClass(size), \"font-mono\")}\n value={value}\n disabled={readOnly}\n onChange={(event) => onChange(event.target.value)}\n />\n );\n }\n\n return (\n <div\n className={cn(\n properties ? \"col-span-full grid grid-cols-subgrid\" : \"flex flex-col\",\n !properties &&\n !ctx.presentation &&\n \"rounded-md border border-input p-2\",\n !properties && fieldInnerGapClass[childCtx.size],\n )}\n >\n {knownKeys.map((key) =>\n properties ? (\n <div key={`known-${key}`} className=\"contents\">\n {ctx.render.renderFieldRow(\n {\n key,\n prop: known[key]!,\n required:\n Array.isArray(field.schema.required) &&\n field.schema.required.includes(key),\n value: map[key],\n onChange: (next) => setEntry(key, next),\n instancePath: appendInstancePath(ctx.instancePath, key),\n },\n childCtx,\n )}\n </div>\n ) : (\n <div\n key={`known-${key}`}\n className=\"grid grid-cols-[10rem_1fr] items-center gap-2\"\n >\n <label\n htmlFor={fieldInputId(\n appendInstancePath(ctx.instancePath, key),\n childCtx.idPrefix,\n )}\n className=\"truncate text-xs text-muted-foreground\"\n title={key}\n >\n {key}\n </label>\n <div className=\"min-w-0\">\n {valueControlFor(key, known[key] ?? { type: \"string\" })}\n </div>\n </div>\n ),\n )}\n {extraKeys.map((key) => {\n const keyControl = ctx.presentation ? (\n <span\n className={cn(\n \"flex min-w-0 items-center break-words text-xs\",\n controlHeightClass[childCtx.size],\n field.keyOptions\n ? \"text-foreground\"\n : \"font-mono text-muted-foreground\",\n )}\n >\n {field.keyOptions?.find((option) => option.value === key)?.label ??\n key}\n </span>\n ) : (\n keyEditor({\n key,\n value: key,\n onChange: (next) => renameEntry(key, next),\n })\n );\n const removeButton = !readOnly ? (\n <button\n type=\"button\"\n aria-label={`Remove ${key}`}\n className={cn(\n \"inline-flex aspect-square shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground\",\n controlHeightClass[childCtx.size],\n )}\n onClick={() => removeEntry(key)}\n >\n <Icon icon={UiTrash} className=\"text-sm\" />\n </button>\n ) : null;\n if (properties) {\n const instancePath = appendInstancePath(ctx.instancePath, key);\n const keyLabel =\n field.keyOptions?.find((option) => option.value === key)?.label ??\n (key || \"New field\");\n return (\n <div key={`extra-${key}`} className=\"contents\">\n {ctx.render.renderFieldRow(\n {\n key,\n prop: { ...valueSchemaForKey(key), title: keyLabel },\n required: false,\n value: map[key],\n onChange: (next) => setEntry(key, next),\n instancePath,\n },\n {\n ...childCtx,\n post: [\n ...childCtx.post,\n (entry, nodes, postCtx) =>\n postCtx?.instancePath !== instancePath\n ? nodes\n : {\n ...nodes,\n label: (\n <>\n <span className=\"sr-only\">{nodes.label}</span>\n <PropertyValueEditor\n actionsPlacement=\"row\"\n field={{\n ...entry,\n kind: \"string\",\n label: `${keyLabel} key`,\n value: key,\n onChange: (next) =>\n renameEntry(key, String(next)),\n }}\n fieldId={`${fieldInputId(instancePath, ctx.idPrefix)}-key`}\n ctx={{\n ...childCtx,\n size: propertyControlSize[ctx.size],\n }}\n renderPreview={(previewField) => (\n <span>{String(previewField.value)}</span>\n )}\n renderEditor={(draft) => (\n <div className=\"flex min-w-0 items-center gap-1\">\n {keyEditor({\n key,\n value: String(draft.value),\n onChange: draft.onChange,\n })}\n {removeButton}\n </div>\n )}\n />\n </>\n ),\n },\n ],\n },\n )}\n </div>\n );\n }\n // When the value is stacked (`x-layout: \"stack\"` on the entry schema),\n // the key joins the stack: it sits full-width above its value as one\n // unit, rather than cramped in a fixed key column beside it. The key\n // picker is labelled from `propertyNames.title` so a constrained key\n // (e.g. an AsCode role) says what it is.\n if (entryIsStacked(key)) {\n return (\n <div\n key={`extra-${key}`}\n className={cn(\n \"space-y-1.5\",\n !ctx.presentation && \"rounded-md border border-input p-2\",\n )}\n >\n {keyTitle && (\n <span className=\"block text-xs font-medium text-muted-foreground\">\n {keyTitle}\n </span>\n )}\n <div className=\"flex items-center gap-2\">\n <div className=\"min-w-0 flex-1\">{keyControl}</div>\n {removeButton}\n </div>\n <div className=\"min-w-0\">{valueControlForKey(key)}</div>\n </div>\n );\n }\n return (\n <div\n key={`extra-${key}`}\n className={cn(\n \"grid items-center gap-2\",\n ctx.presentation\n ? \"grid-cols-[minmax(0,10rem)_minmax(0,1fr)]\"\n : \"grid-cols-[10rem_1fr_auto]\",\n )}\n >\n {keyControl}\n <div className=\"min-w-0\">{valueControlForKey(key)}</div>\n {removeButton}\n </div>\n );\n })}\n {!readOnly && field.allowExtraKeys !== false && (\n <Button\n type=\"button\"\n variant={properties ? \"ghost\" : \"outline\"}\n onClick={addEntry}\n className={cn(\n \"gap-1.5\",\n properties && \"col-span-full justify-self-start m-1\",\n inputSizeClass[\n properties ? propertyControlSize[ctx.size] : childCtx.size\n ],\n )}\n >\n <Icon icon={UiAdd} className=\"text-sm\" />\n Add field\n </Button>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"json-schema-form-object.cjs","names":["isPlainObject","FieldsGrid","normalizeColumns","cssLength","DEFAULT_COLUMN_MIN_WIDTH","appendInstancePath","propertyControlSize","Combobox","keyPickerOptions","cn","inputClass","fieldInnerGapClass","controlHeightClass","Icon","UiTrash","_Fragment","PropertyValueEditor","fieldInputId","Button","inputSizeClass","UiAdd"],"sources":["../../src/components/json-schema-form-object.tsx"],"sourcesContent":["import { type ReactNode } from \"react\";\nimport { isPlainObject } from \"../lib/collections\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"../data/Icon\";\nimport { UiAdd, UiTrash } from \"../icons\";\nimport { Button } from \"./button\";\nimport { Combobox } from \"./Combobox\";\nimport type {\n FieldControl,\n JsonSchemaObject,\n JsonSchemaProperty,\n RenderContext,\n} from \"./json-schema-form-types\";\nimport {\n cssLength,\n DEFAULT_COLUMN_MIN_WIDTH,\n fieldInputId,\n inputClass,\n keyPickerOptions,\n normalizeColumns,\n} from \"./json-schema-form-utils\";\nimport { FieldsGrid } from \"./json-schema-form-layout\";\nimport { PropertyValueEditor } from \"./json-schema-form-properties\";\nimport { propertyControlSize } from \"./json-schema-form-properties-size\";\nimport { appendInstancePath } from \"./json-schema-form-errors\";\nimport {\n controlHeightClass,\n fieldInnerGapClass,\n inputSizeClass,\n} from \"./json-schema-form-size\";\n\n// ObjectControl renders a nested structured object as a sub-form: its own\n// properties, required markers, if/then, soft errors — all via the shared\n// recursive renderer (ctx.render), so pre/post extensions apply at this depth too.\nexport function ObjectControl({\n field,\n ctx,\n}: {\n field: FieldControl;\n ctx: RenderContext;\n}) {\n const obj = isPlainObject(field.value)\n ? (field.value as Record<string, unknown>)\n : {};\n const subSchema: JsonSchemaObject = {\n type: \"object\",\n properties: field.objectProperties ?? {},\n ...(field.objectRequired ? { required: field.objectRequired } : {}),\n ...(Array.isArray(field.schema.allOf) ? { allOf: field.schema.allOf } : {}),\n // Copied whatever its shape, so a malformed value fails loudly in the\n // listener collector rather than vanishing here.\n ...(field.schema[\"x-on-load\"] !== undefined ? { \"x-on-load\": field.schema[\"x-on-load\"] } : {}),\n ...(Array.isArray(field.schema[\"x-order\"])\n ? { \"x-order\": field.schema[\"x-order\"] }\n : {}),\n // Every object-level layout keyword must be copied here or it works at the\n // top level and silently dies one level down — which is exactly where these\n // matter (an array item's body is a nested object).\n ...(typeof field.schema[\"x-columns\"] === \"number\" ||\n field.schema[\"x-columns\"] === \"auto\"\n ? { \"x-columns\": field.schema[\"x-columns\"] }\n : {}),\n ...(typeof field.schema[\"x-column-min-width\"] === \"string\"\n ? { \"x-column-min-width\": field.schema[\"x-column-min-width\"] }\n : {}),\n ...(typeof field.schema[\"x-columns-max-width\"] === \"string\"\n ? { \"x-columns-max-width\": field.schema[\"x-columns-max-width\"] }\n : {}),\n ...(typeof field.schema[\"x-classes\"] === \"string\"\n ? { \"x-classes\": field.schema[\"x-classes\"] }\n : {}),\n };\n // No border/box: nested objects render as flat headed sections (see\n // ObjectSection in renderFieldRow) rather than progressively indented\n // sub-forms, so deep schemas stay readable as a single column.\n // A read-only object marks its whole subtree non-editable: recurse with\n // form-level readOnly on so child inputs are disabled (and any child the\n // schema marks readOnly still renders as a value span).\n return (\n <FieldsGrid\n layout={ctx.layout}\n size={ctx.size}\n columns={normalizeColumns(subSchema[\"x-columns\"])}\n columnMinWidth={cssLength(\n subSchema[\"x-column-min-width\"],\n DEFAULT_COLUMN_MIN_WIDTH,\n )}\n {...(typeof subSchema[\"x-columns-max-width\"] === \"string\"\n ? { columnsMaxWidth: subSchema[\"x-columns-max-width\"] }\n : {})}\n {...(typeof subSchema[\"x-classes\"] === \"string\"\n ? { className: subSchema[\"x-classes\"] }\n : {})}\n >\n {ctx.render.renderObjectFields(\n subSchema,\n obj,\n (next) => field.onChange(next),\n {\n ...ctx,\n readOnly: ctx.readOnly || field.readOnly === true,\n depth: ctx.depth + 1,\n },\n )}\n </FieldsGrid>\n );\n}\n\n// StringMapControl edits an object as key/value rows. Known properties (from the\n// schema) render first with derived value controls; unknown keys render as\n// editable key/value pairs. \"Add field\" appears when extra keys are allowed.\n// Values recurse through the shared pipeline, so a value that is itself an object\n// or array renders structurally and pre/post extensions apply to it.\nexport function StringMapControl({\n field,\n ctx,\n}: {\n field: FieldControl;\n ctx: RenderContext;\n}) {\n // A read-only map marks its whole subtree non-editable: no rename/remove/add\n // and value inputs disabled.\n const readOnly = ctx.readOnly || field.readOnly === true;\n const map = isPlainObject(field.value)\n ? (field.value as Record<string, unknown>)\n : {};\n const known = field.knownProperties ?? {};\n const knownKeys = Object.keys(known);\n const extraKeys = Object.keys(map).filter((k) => !(k in known));\n const childCtx: RenderContext = { ...ctx, readOnly, depth: ctx.depth + 1 };\n const properties = ctx.layout.mode === \"properties\";\n // What the map key IS (e.g. \"Address Role\"), from the key-constraint schema.\n const pn = field.schema.propertyNames as JsonSchemaProperty | undefined;\n const keyTitle =\n typeof pn?.title === \"string\" && pn.title ? pn.title : undefined;\n\n // valueSchemaForKey picks an entry's value schema: the first patternProperties\n // entry whose regex matches the key, else the `additionalProperties` schema,\n // else a bare string. Lets the value form vary by key (e.g. House vs Apartment).\n function valueSchemaForKey(key: string): JsonSchemaProperty {\n for (const { pattern, schema } of field.valuePatternSchemas ?? []) {\n let re: RegExp | undefined;\n try {\n re = new RegExp(pattern);\n } catch {\n re = undefined; // a malformed pattern simply never matches\n }\n if (re?.test(key)) return schema;\n }\n return field.valueSchema ?? { type: \"string\" };\n }\n\n // When the entry value opts into a stacked layout (`x-layout: \"stack\"`), the\n // key+value render as one full-width stacked unit instead of a key column\n // beside the value. Resolved per key, since pattern schemas may differ.\n function entryIsStacked(key: string): boolean {\n return valueSchemaForKey(key)[\"x-layout\"] === \"stack\";\n }\n\n function setEntry(key: string, next: unknown) {\n field.onChange({ ...map, [key]: next });\n }\n function renameEntry(oldKey: string, newKey: string) {\n if (newKey === oldKey) return;\n const next: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(map))\n next[k === oldKey ? newKey : k] = v;\n field.onChange(next);\n }\n function removeEntry(key: string) {\n const next = { ...map };\n delete next[key];\n field.onChange(next);\n }\n function addEntry() {\n if (\"\" in map) return;\n field.onChange({ ...map, \"\": \"\" });\n }\n\n function valueControlFor(\n key: string,\n valueSchema: JsonSchemaProperty,\n ): ReactNode {\n const nodes = ctx.render.renderFieldNodes(\n {\n key,\n prop: valueSchema,\n required: false,\n value: map[key],\n onChange: (next) => setEntry(key, next),\n instancePath: appendInstancePath(ctx.instancePath, key),\n },\n childCtx,\n );\n return nodes?.value ?? null;\n }\n\n // valueControlForKey resolves the per-key value schema (patternProperties /\n // additionalProperties) before rendering, so the form varies by key.\n function valueControlForKey(key: string): ReactNode {\n return valueControlFor(key, valueSchemaForKey(key));\n }\n\n function keyEditor({\n key,\n value,\n onChange,\n }: {\n key: string;\n value: string;\n onChange: (next: string) => void;\n }) {\n const size = properties ? propertyControlSize[ctx.size] : ctx.size;\n return field.keyOptions ? (\n <Combobox\n options={keyPickerOptions(\n field.keyOptions,\n [...knownKeys, ...extraKeys],\n key,\n )}\n value={value}\n disabled={readOnly}\n size={size}\n allowCustomValue={false}\n onChange={onChange}\n placeholder=\"Select…\"\n />\n ) : (\n <input\n type=\"text\"\n aria-label=\"Field name\"\n className={cn(inputClass(size), \"font-mono\")}\n value={value}\n disabled={readOnly}\n onChange={(event) => onChange(event.target.value)}\n />\n );\n }\n\n return (\n <div\n className={cn(\n properties ? \"col-span-full grid grid-cols-subgrid\" : \"flex flex-col\",\n !properties &&\n !ctx.presentation &&\n \"rounded-md border border-input p-2\",\n !properties && fieldInnerGapClass[childCtx.size],\n )}\n >\n {knownKeys.map((key) => (\n <div key={`known-${key}`} className=\"contents\">\n {ctx.render.renderFieldRow(\n {\n key,\n prop: known[key]!,\n required:\n Array.isArray(field.schema.required) &&\n field.schema.required.includes(key),\n value: map[key],\n onChange: (next) => setEntry(key, next),\n instancePath: appendInstancePath(ctx.instancePath, key),\n },\n childCtx,\n )}\n </div>\n ))}\n {extraKeys.map((key) => {\n const keyControl = ctx.presentation ? (\n <span\n className={cn(\n \"flex min-w-0 items-center break-words text-xs\",\n controlHeightClass[childCtx.size],\n field.keyOptions\n ? \"text-foreground\"\n : \"font-mono text-muted-foreground\",\n )}\n >\n {field.keyOptions?.find((option) => option.value === key)?.label ??\n key}\n </span>\n ) : (\n keyEditor({\n key,\n value: key,\n onChange: (next) => renameEntry(key, next),\n })\n );\n const removeButton = !readOnly ? (\n <button\n type=\"button\"\n aria-label={`Remove ${key}`}\n className={cn(\n \"inline-flex aspect-square shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground\",\n controlHeightClass[childCtx.size],\n )}\n onClick={() => removeEntry(key)}\n >\n <Icon icon={UiTrash} className=\"text-sm\" />\n </button>\n ) : null;\n if (properties) {\n const instancePath = appendInstancePath(ctx.instancePath, key);\n const keyLabel =\n field.keyOptions?.find((option) => option.value === key)?.label ??\n (key || \"New field\");\n return (\n <div key={`extra-${key}`} className=\"contents\">\n {ctx.render.renderFieldRow(\n {\n key,\n prop: { ...valueSchemaForKey(key), title: keyLabel },\n required: false,\n value: map[key],\n onChange: (next) => setEntry(key, next),\n instancePath,\n },\n {\n ...childCtx,\n post: [\n ...childCtx.post,\n (entry, nodes, postCtx) =>\n postCtx?.instancePath !== instancePath\n ? nodes\n : {\n ...nodes,\n label: (\n <>\n <span className=\"sr-only\">{nodes.label}</span>\n <PropertyValueEditor\n actionsPlacement=\"row\"\n field={{\n ...entry,\n kind: \"string\",\n label: `${keyLabel} key`,\n value: key,\n onChange: (next) =>\n renameEntry(key, String(next)),\n }}\n fieldId={`${fieldInputId(instancePath, ctx.idPrefix)}-key`}\n ctx={{\n ...childCtx,\n size: propertyControlSize[ctx.size],\n }}\n renderPreview={(previewField) => (\n <span>{String(previewField.value)}</span>\n )}\n renderEditor={(draft) => (\n <div className=\"flex min-w-0 items-center gap-1\">\n {keyEditor({\n key,\n value: String(draft.value),\n onChange: draft.onChange,\n })}\n {removeButton}\n </div>\n )}\n />\n </>\n ),\n },\n ],\n },\n )}\n </div>\n );\n }\n // When the value is stacked (`x-layout: \"stack\"` on the entry schema),\n // the key joins the stack: it sits full-width above its value as one\n // unit, rather than cramped in a fixed key column beside it. The key\n // picker is labelled from `propertyNames.title` so a constrained key\n // (e.g. an AsCode role) says what it is.\n if (entryIsStacked(key)) {\n return (\n <div\n key={`extra-${key}`}\n className={cn(\n \"space-y-1.5\",\n !ctx.presentation && \"rounded-md border border-input p-2\",\n )}\n >\n {keyTitle && (\n <span className=\"block text-xs font-medium text-muted-foreground\">\n {keyTitle}\n </span>\n )}\n <div className=\"flex items-center gap-2\">\n <div className=\"min-w-0 flex-1\">{keyControl}</div>\n {removeButton}\n </div>\n <div className=\"min-w-0\">{valueControlForKey(key)}</div>\n </div>\n );\n }\n return (\n <div\n key={`extra-${key}`}\n className={cn(\n \"grid items-center gap-2\",\n ctx.presentation\n ? \"grid-cols-[minmax(0,10rem)_minmax(0,1fr)]\"\n : \"grid-cols-[10rem_1fr_auto]\",\n )}\n >\n {keyControl}\n <div className=\"min-w-0\">{valueControlForKey(key)}</div>\n {removeButton}\n </div>\n );\n })}\n {!readOnly && field.allowExtraKeys !== false && (\n <Button\n type=\"button\"\n variant={properties ? \"ghost\" : \"outline\"}\n onClick={addEntry}\n className={cn(\n \"gap-1.5\",\n properties && \"col-span-full justify-self-start m-1\",\n inputSizeClass[\n properties ? propertyControlSize[ctx.size] : childCtx.size\n ],\n )}\n >\n <Icon icon={UiAdd} className=\"text-sm\" />\n Add field\n </Button>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"json-schema-form-object.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-object.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,YAAY,EAGZ,aAAa,EACd,MAAM,0BAA0B,CAAC;AAsBlC,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,GAAG,GACJ,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,GAAG,EAAE,aAAa,CAAC;CACpB,+BAkEA;AAOD,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,GAAG,GACJ,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,GAAG,EAAE,aAAa,CAAC;CACpB,+BA0UA"}
1
+ {"version":3,"file":"json-schema-form-object.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-object.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,YAAY,EAGZ,aAAa,EACd,MAAM,0BAA0B,CAAC;AAsBlC,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,GAAG,GACJ,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,GAAG,EAAE,aAAa,CAAC;CACpB,+BAkEA;AAOD,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,GAAG,GACJ,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,GAAG,EAAE,aAAa,CAAC;CACpB,+BAqTA"}
@@ -100,7 +100,7 @@ function StringMapControl({ field, ctx }) {
100
100
  key,
101
101
  prop: valueSchema,
102
102
  required: false,
103
- value: map[key] ?? "",
103
+ value: map[key],
104
104
  onChange: (next) => setEntry(key, next),
105
105
  instancePath: appendInstancePath(ctx.instancePath, key)
106
106
  }, childCtx)?.value ?? null;
@@ -130,7 +130,7 @@ function StringMapControl({ field, ctx }) {
130
130
  return /* @__PURE__ */ jsxs("div", {
131
131
  className: cn(properties ? "col-span-full grid grid-cols-subgrid" : "flex flex-col", !properties && !ctx.presentation && "rounded-md border border-input p-2", !properties && fieldInnerGapClass[childCtx.size]),
132
132
  children: [
133
- knownKeys.map((key) => properties ? /* @__PURE__ */ jsx("div", {
133
+ knownKeys.map((key) => /* @__PURE__ */ jsx("div", {
134
134
  className: "contents",
135
135
  children: ctx.render.renderFieldRow({
136
136
  key,
@@ -140,17 +140,6 @@ function StringMapControl({ field, ctx }) {
140
140
  onChange: (next) => setEntry(key, next),
141
141
  instancePath: appendInstancePath(ctx.instancePath, key)
142
142
  }, childCtx)
143
- }, `known-${key}`) : /* @__PURE__ */ jsxs("div", {
144
- className: "grid grid-cols-[10rem_1fr] items-center gap-2",
145
- children: [/* @__PURE__ */ jsx("label", {
146
- htmlFor: fieldInputId(appendInstancePath(ctx.instancePath, key), childCtx.idPrefix),
147
- className: "truncate text-xs text-muted-foreground",
148
- title: key,
149
- children: key
150
- }), /* @__PURE__ */ jsx("div", {
151
- className: "min-w-0",
152
- children: valueControlFor(key, known[key] ?? { type: "string" })
153
- })]
154
143
  }, `known-${key}`)),
155
144
  extraKeys.map((key) => {
156
145
  const keyControl = ctx.presentation ? /* @__PURE__ */ jsx("span", {