@flanksource/clicky-ui 0.3.41 → 0.3.43

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 (487) hide show
  1. package/dist/ai.cjs +4 -0
  2. package/dist/ai.cjs.map +1 -1
  3. package/dist/ai.js +4 -0
  4. package/dist/ai.js.map +1 -1
  5. package/dist/comments/CommentCard.cjs +3 -1
  6. package/dist/comments/CommentCard.cjs.map +1 -1
  7. package/dist/comments/CommentCard.d.ts.map +1 -1
  8. package/dist/comments/CommentCard.js +4 -2
  9. package/dist/comments/CommentCard.js.map +1 -1
  10. package/dist/comments/CommentCardParts.cjs +16 -0
  11. package/dist/comments/CommentCardParts.cjs.map +1 -1
  12. package/dist/comments/CommentCardParts.d.ts +4 -1
  13. package/dist/comments/CommentCardParts.d.ts.map +1 -1
  14. package/dist/comments/CommentCardParts.js +16 -0
  15. package/dist/comments/CommentCardParts.js.map +1 -1
  16. package/dist/comments/comment-types.cjs.map +1 -1
  17. package/dist/comments/comment-types.d.ts +4 -0
  18. package/dist/comments/comment-types.d.ts.map +1 -1
  19. package/dist/comments/comment-types.js.map +1 -1
  20. package/dist/components/Combobox.cjs +54 -8
  21. package/dist/components/Combobox.cjs.map +1 -1
  22. package/dist/components/Combobox.d.ts.map +1 -1
  23. package/dist/components/Combobox.js +56 -10
  24. package/dist/components/Combobox.js.map +1 -1
  25. package/dist/components/ComboboxMenu.cjs +139 -113
  26. package/dist/components/ComboboxMenu.cjs.map +1 -1
  27. package/dist/components/ComboboxMenu.d.ts +3 -1
  28. package/dist/components/ComboboxMenu.d.ts.map +1 -1
  29. package/dist/components/ComboboxMenu.js +139 -113
  30. package/dist/components/ComboboxMenu.js.map +1 -1
  31. package/dist/components/ComboboxMenuTrigger.cjs +87 -0
  32. package/dist/components/ComboboxMenuTrigger.cjs.map +1 -0
  33. package/dist/components/ComboboxMenuTrigger.d.ts +23 -0
  34. package/dist/components/ComboboxMenuTrigger.d.ts.map +1 -0
  35. package/dist/components/ComboboxMenuTrigger.js +87 -0
  36. package/dist/components/ComboboxMenuTrigger.js.map +1 -0
  37. package/dist/components/JsonSchemaForm.cjs +30 -7
  38. package/dist/components/JsonSchemaForm.cjs.map +1 -1
  39. package/dist/components/JsonSchemaForm.d.ts.map +1 -1
  40. package/dist/components/JsonSchemaForm.js +30 -7
  41. package/dist/components/JsonSchemaForm.js.map +1 -1
  42. package/dist/components/SegmentedControl.cjs +20 -3
  43. package/dist/components/SegmentedControl.cjs.map +1 -1
  44. package/dist/components/SegmentedControl.d.ts +11 -0
  45. package/dist/components/SegmentedControl.d.ts.map +1 -1
  46. package/dist/components/SegmentedControl.js +21 -4
  47. package/dist/components/SegmentedControl.js.map +1 -1
  48. package/dist/components/combobox-types.d.ts +8 -0
  49. package/dist/components/combobox-types.d.ts.map +1 -1
  50. package/dist/components/json-schema-form-debug-badge.cjs +108 -0
  51. package/dist/components/json-schema-form-debug-badge.cjs.map +1 -0
  52. package/dist/components/json-schema-form-debug-badge.d.ts +10 -0
  53. package/dist/components/json-schema-form-debug-badge.d.ts.map +1 -0
  54. package/dist/components/json-schema-form-debug-badge.js +108 -0
  55. package/dist/components/json-schema-form-debug-badge.js.map +1 -0
  56. package/dist/components/json-schema-form-debug-glyph-map.cjs +129 -0
  57. package/dist/components/json-schema-form-debug-glyph-map.cjs.map +1 -0
  58. package/dist/components/json-schema-form-debug-glyph-map.d.ts +20 -0
  59. package/dist/components/json-schema-form-debug-glyph-map.d.ts.map +1 -0
  60. package/dist/components/json-schema-form-debug-glyph-map.js +129 -0
  61. package/dist/components/json-schema-form-debug-glyph-map.js.map +1 -0
  62. package/dist/components/json-schema-form-debug-glyph.cjs +13 -0
  63. package/dist/components/json-schema-form-debug-glyph.cjs.map +1 -0
  64. package/dist/components/json-schema-form-debug-glyph.d.ts +6 -0
  65. package/dist/components/json-schema-form-debug-glyph.d.ts.map +1 -0
  66. package/dist/components/json-schema-form-debug-glyph.js +13 -0
  67. package/dist/components/json-schema-form-debug-glyph.js.map +1 -0
  68. package/dist/components/json-schema-form-debug-groups.cjs +56 -0
  69. package/dist/components/json-schema-form-debug-groups.cjs.map +1 -0
  70. package/dist/components/json-schema-form-debug-groups.d.ts +8 -0
  71. package/dist/components/json-schema-form-debug-groups.d.ts.map +1 -0
  72. package/dist/components/json-schema-form-debug-groups.js +56 -0
  73. package/dist/components/json-schema-form-debug-groups.js.map +1 -0
  74. package/dist/components/json-schema-form-debug-keywords.cjs +159 -0
  75. package/dist/components/json-schema-form-debug-keywords.cjs.map +1 -0
  76. package/dist/components/json-schema-form-debug-keywords.d.ts +6 -0
  77. package/dist/components/json-schema-form-debug-keywords.d.ts.map +1 -0
  78. package/dist/components/json-schema-form-debug-keywords.js +159 -0
  79. package/dist/components/json-schema-form-debug-keywords.js.map +1 -0
  80. package/dist/components/json-schema-form-debug-listeners.cjs +102 -0
  81. package/dist/components/json-schema-form-debug-listeners.cjs.map +1 -0
  82. package/dist/components/json-schema-form-debug-listeners.d.ts +6 -0
  83. package/dist/components/json-schema-form-debug-listeners.d.ts.map +1 -0
  84. package/dist/components/json-schema-form-debug-listeners.js +102 -0
  85. package/dist/components/json-schema-form-debug-listeners.js.map +1 -0
  86. package/dist/components/json-schema-form-debug.cjs +31 -0
  87. package/dist/components/json-schema-form-debug.cjs.map +1 -0
  88. package/dist/components/json-schema-form-debug.d.ts +11 -0
  89. package/dist/components/json-schema-form-debug.d.ts.map +1 -0
  90. package/dist/components/json-schema-form-debug.js +31 -0
  91. package/dist/components/json-schema-form-debug.js.map +1 -0
  92. package/dist/components/json-schema-form-enum-choice.cjs +114 -0
  93. package/dist/components/json-schema-form-enum-choice.cjs.map +1 -0
  94. package/dist/components/json-schema-form-enum-choice.d.ts +14 -0
  95. package/dist/components/json-schema-form-enum-choice.d.ts.map +1 -0
  96. package/dist/components/json-schema-form-enum-choice.js +114 -0
  97. package/dist/components/json-schema-form-enum-choice.js.map +1 -0
  98. package/dist/components/json-schema-form-fields.cjs +3 -93
  99. package/dist/components/json-schema-form-fields.cjs.map +1 -1
  100. package/dist/components/json-schema-form-fields.d.ts.map +1 -1
  101. package/dist/components/json-schema-form-fields.js +1 -91
  102. package/dist/components/json-schema-form-fields.js.map +1 -1
  103. package/dist/components/json-schema-form-listeners.cjs +7 -1
  104. package/dist/components/json-schema-form-listeners.cjs.map +1 -1
  105. package/dist/components/json-schema-form-listeners.d.ts.map +1 -1
  106. package/dist/components/json-schema-form-listeners.js +7 -1
  107. package/dist/components/json-schema-form-listeners.js.map +1 -1
  108. package/dist/components/json-schema-form-preferences.cjs +1 -0
  109. package/dist/components/json-schema-form-preferences.cjs.map +1 -1
  110. package/dist/components/json-schema-form-preferences.d.ts +1 -0
  111. package/dist/components/json-schema-form-preferences.d.ts.map +1 -1
  112. package/dist/components/json-schema-form-preferences.js +1 -0
  113. package/dist/components/json-schema-form-preferences.js.map +1 -1
  114. package/dist/components/json-schema-form-render.cjs +21 -5
  115. package/dist/components/json-schema-form-render.cjs.map +1 -1
  116. package/dist/components/json-schema-form-render.d.ts.map +1 -1
  117. package/dist/components/json-schema-form-render.js +21 -5
  118. package/dist/components/json-schema-form-render.js.map +1 -1
  119. package/dist/components/json-schema-form-runtime-types.d.ts +1 -0
  120. package/dist/components/json-schema-form-runtime-types.d.ts.map +1 -1
  121. package/dist/components/json-schema-form-tone.cjs +12 -0
  122. package/dist/components/json-schema-form-tone.cjs.map +1 -1
  123. package/dist/components/json-schema-form-tone.js +12 -0
  124. package/dist/components/json-schema-form-tone.js.map +1 -1
  125. package/dist/components/json-schema-form-types.d.ts +1 -0
  126. package/dist/components/json-schema-form-types.d.ts.map +1 -1
  127. package/dist/data/GraphDiagram.cjs +125 -138
  128. package/dist/data/GraphDiagram.cjs.map +1 -1
  129. package/dist/data/GraphDiagram.d.ts +30 -23
  130. package/dist/data/GraphDiagram.d.ts.map +1 -1
  131. package/dist/data/GraphDiagram.js +128 -141
  132. package/dist/data/GraphDiagram.js.map +1 -1
  133. package/dist/data/GraphDiagramEdges.cjs +208 -0
  134. package/dist/data/GraphDiagramEdges.cjs.map +1 -0
  135. package/dist/data/GraphDiagramEdges.d.ts +40 -0
  136. package/dist/data/GraphDiagramEdges.d.ts.map +1 -0
  137. package/dist/data/GraphDiagramEdges.js +208 -0
  138. package/dist/data/GraphDiagramEdges.js.map +1 -0
  139. package/dist/data/GraphDiagramNodes.cjs +142 -0
  140. package/dist/data/GraphDiagramNodes.cjs.map +1 -0
  141. package/dist/data/GraphDiagramNodes.d.ts +22 -0
  142. package/dist/data/GraphDiagramNodes.d.ts.map +1 -0
  143. package/dist/data/GraphDiagramNodes.js +142 -0
  144. package/dist/data/GraphDiagramNodes.js.map +1 -0
  145. package/dist/data/ai/PromptRunEditor/RuntimeRows.cjs +8 -3
  146. package/dist/data/ai/PromptRunEditor/RuntimeRows.cjs.map +1 -1
  147. package/dist/data/ai/PromptRunEditor/RuntimeRows.d.ts.map +1 -1
  148. package/dist/data/ai/PromptRunEditor/RuntimeRows.js +8 -3
  149. package/dist/data/ai/PromptRunEditor/RuntimeRows.js.map +1 -1
  150. package/dist/data/ai/PromptRunEditor/index.cjs +37 -43
  151. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  152. package/dist/data/ai/PromptRunEditor/index.d.ts +3 -1
  153. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
  154. package/dist/data/ai/PromptRunEditor/index.js +38 -44
  155. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  156. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs +16 -5
  157. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs.map +1 -1
  158. package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts +4 -1
  159. package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts.map +1 -1
  160. package/dist/data/ai/PromptRunEditor/runtimeActions.js +17 -6
  161. package/dist/data/ai/PromptRunEditor/runtimeActions.js.map +1 -1
  162. package/dist/data/ai/SessionInspector.approvals-model.cjs +12 -0
  163. package/dist/data/ai/SessionInspector.approvals-model.cjs.map +1 -1
  164. package/dist/data/ai/SessionInspector.approvals-model.d.ts +11 -2
  165. package/dist/data/ai/SessionInspector.approvals-model.d.ts.map +1 -1
  166. package/dist/data/ai/SessionInspector.approvals-model.js +12 -0
  167. package/dist/data/ai/SessionInspector.approvals-model.js.map +1 -1
  168. package/dist/data/ai/SessionInspector.approvals.cjs +25 -1
  169. package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -1
  170. package/dist/data/ai/SessionInspector.approvals.d.ts.map +1 -1
  171. package/dist/data/ai/SessionInspector.approvals.js +26 -2
  172. package/dist/data/ai/SessionInspector.approvals.js.map +1 -1
  173. package/dist/data/ai/SessionInspector.summary.cjs +9 -3
  174. package/dist/data/ai/SessionInspector.summary.cjs.map +1 -1
  175. package/dist/data/ai/SessionInspector.summary.d.ts.map +1 -1
  176. package/dist/data/ai/SessionInspector.summary.js +9 -3
  177. package/dist/data/ai/SessionInspector.summary.js.map +1 -1
  178. package/dist/data/ai/SessionInspector.transcript.cjs +4 -0
  179. package/dist/data/ai/SessionInspector.transcript.cjs.map +1 -1
  180. package/dist/data/ai/SessionInspector.transcript.d.ts.map +1 -1
  181. package/dist/data/ai/SessionInspector.transcript.js +4 -0
  182. package/dist/data/ai/SessionInspector.transcript.js.map +1 -1
  183. package/dist/data/ai/SessionViewer.approval-body.cjs +146 -0
  184. package/dist/data/ai/SessionViewer.approval-body.cjs.map +1 -0
  185. package/dist/data/ai/SessionViewer.approval-body.d.ts +11 -0
  186. package/dist/data/ai/SessionViewer.approval-body.d.ts.map +1 -0
  187. package/dist/data/ai/SessionViewer.approval-body.js +146 -0
  188. package/dist/data/ai/SessionViewer.approval-body.js.map +1 -0
  189. package/dist/data/ai/SessionViewer.approval-forms.cjs +150 -0
  190. package/dist/data/ai/SessionViewer.approval-forms.cjs.map +1 -0
  191. package/dist/data/ai/SessionViewer.approval-forms.d.ts +23 -0
  192. package/dist/data/ai/SessionViewer.approval-forms.d.ts.map +1 -0
  193. package/dist/data/ai/SessionViewer.approval-forms.js +150 -0
  194. package/dist/data/ai/SessionViewer.approval-forms.js.map +1 -0
  195. package/dist/data/ai/SessionViewer.cjs +57 -20
  196. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  197. package/dist/data/ai/SessionViewer.d.ts +13 -3
  198. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  199. package/dist/data/ai/SessionViewer.decision-controls.cjs +313 -0
  200. package/dist/data/ai/SessionViewer.decision-controls.cjs.map +1 -0
  201. package/dist/data/ai/SessionViewer.decision-controls.d.ts +43 -0
  202. package/dist/data/ai/SessionViewer.decision-controls.d.ts.map +1 -0
  203. package/dist/data/ai/SessionViewer.decision-controls.js +313 -0
  204. package/dist/data/ai/SessionViewer.decision-controls.js.map +1 -0
  205. package/dist/data/ai/SessionViewer.decision.cjs +21 -0
  206. package/dist/data/ai/SessionViewer.decision.cjs.map +1 -0
  207. package/dist/data/ai/SessionViewer.decision.d.ts +12 -0
  208. package/dist/data/ai/SessionViewer.decision.d.ts.map +1 -0
  209. package/dist/data/ai/SessionViewer.decision.js +21 -0
  210. package/dist/data/ai/SessionViewer.decision.js.map +1 -0
  211. package/dist/data/ai/SessionViewer.input.cjs +14 -0
  212. package/dist/data/ai/SessionViewer.input.cjs.map +1 -1
  213. package/dist/data/ai/SessionViewer.input.d.ts +5 -0
  214. package/dist/data/ai/SessionViewer.input.d.ts.map +1 -1
  215. package/dist/data/ai/SessionViewer.input.js +14 -0
  216. package/dist/data/ai/SessionViewer.input.js.map +1 -1
  217. package/dist/data/ai/SessionViewer.js +58 -21
  218. package/dist/data/ai/SessionViewer.js.map +1 -1
  219. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  220. package/dist/data/ai/SessionViewer.model.d.ts +4 -0
  221. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  222. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  223. package/dist/data/ai/SessionViewer.rows.cjs +6 -3
  224. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  225. package/dist/data/ai/SessionViewer.rows.d.ts +2 -1
  226. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  227. package/dist/data/ai/SessionViewer.rows.js +6 -3
  228. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  229. package/dist/data/ai/SessionViewer.tool-row.cjs +29 -237
  230. package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -1
  231. package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -1
  232. package/dist/data/ai/SessionViewer.tool-row.js +27 -235
  233. package/dist/data/ai/SessionViewer.tool-row.js.map +1 -1
  234. package/dist/data/ai/SessionViewer.unified.d.ts +4 -0
  235. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  236. package/dist/data/ai/SessionViewerMenu.cjs +8 -2
  237. package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
  238. package/dist/data/ai/SessionViewerMenu.d.ts +4 -1
  239. package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
  240. package/dist/data/ai/SessionViewerMenu.js +8 -2
  241. package/dist/data/ai/SessionViewerMenu.js.map +1 -1
  242. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs +28 -17
  243. package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs.map +1 -1
  244. package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts +10 -2
  245. package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts.map +1 -1
  246. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js +29 -18
  247. package/dist/data/ai/SpecRuntimeEditor/CommitSection.js.map +1 -1
  248. package/dist/data/ai/SpecRuntimeEditor/index.cjs +9 -1
  249. package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
  250. package/dist/data/ai/SpecRuntimeEditor/index.d.ts +9 -2
  251. package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
  252. package/dist/data/ai/SpecRuntimeEditor/index.js +9 -1
  253. package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
  254. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.cjs +1 -1
  255. package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.js +1 -1
  256. package/dist/data/ai/SpecRuntimeEditor/summaries.cjs.map +1 -1
  257. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts +8 -2
  258. package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts.map +1 -1
  259. package/dist/data/ai/SpecRuntimeEditor/summaries.js.map +1 -1
  260. package/dist/data/ai/SpecRuntimeEditor/update.cjs +14 -6
  261. package/dist/data/ai/SpecRuntimeEditor/update.cjs.map +1 -1
  262. package/dist/data/ai/SpecRuntimeEditor/update.d.ts +1 -0
  263. package/dist/data/ai/SpecRuntimeEditor/update.d.ts.map +1 -1
  264. package/dist/data/ai/SpecRuntimeEditor/update.js +14 -6
  265. package/dist/data/ai/SpecRuntimeEditor/update.js.map +1 -1
  266. package/dist/data/ai/approval-request.cjs +75 -0
  267. package/dist/data/ai/approval-request.cjs.map +1 -0
  268. package/dist/data/ai/approval-request.d.ts +155 -0
  269. package/dist/data/ai/approval-request.d.ts.map +1 -0
  270. package/dist/data/ai/approval-request.js +75 -0
  271. package/dist/data/ai/approval-request.js.map +1 -0
  272. package/dist/data/ai/index.d.ts +3 -0
  273. package/dist/data/ai/index.d.ts.map +1 -1
  274. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.cjs +125 -0
  275. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.cjs.map +1 -0
  276. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.d.ts +11 -0
  277. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.d.ts.map +1 -0
  278. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.js +125 -0
  279. package/dist/data/ai/runtime-preset-menu/SavePresetDialog.js.map +1 -0
  280. package/dist/data/ai/runtime-preset-menu/index.d.ts +3 -0
  281. package/dist/data/ai/runtime-preset-menu/index.d.ts.map +1 -0
  282. package/dist/data/ai/runtime-preset-menu/model.cjs +73 -0
  283. package/dist/data/ai/runtime-preset-menu/model.cjs.map +1 -0
  284. package/dist/data/ai/runtime-preset-menu/model.d.ts +13 -0
  285. package/dist/data/ai/runtime-preset-menu/model.d.ts.map +1 -0
  286. package/dist/data/ai/runtime-preset-menu/model.js +73 -0
  287. package/dist/data/ai/runtime-preset-menu/model.js.map +1 -0
  288. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.cjs +149 -0
  289. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.cjs.map +1 -0
  290. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.d.ts +15 -0
  291. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.d.ts.map +1 -0
  292. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.js +149 -0
  293. package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.js.map +1 -0
  294. package/dist/data/ai/runtime-spec-fields.cjs +166 -0
  295. package/dist/data/ai/runtime-spec-fields.cjs.map +1 -0
  296. package/dist/data/ai/runtime-spec-fields.d.ts +13 -0
  297. package/dist/data/ai/runtime-spec-fields.d.ts.map +1 -0
  298. package/dist/data/ai/runtime-spec-fields.js +166 -0
  299. package/dist/data/ai/runtime-spec-fields.js.map +1 -0
  300. package/dist/data/ai/session-categories.cjs +4 -0
  301. package/dist/data/ai/session-categories.cjs.map +1 -1
  302. package/dist/data/ai/session-categories.d.ts +1 -0
  303. package/dist/data/ai/session-categories.d.ts.map +1 -1
  304. package/dist/data/ai/session-categories.js +4 -0
  305. package/dist/data/ai/session-categories.js.map +1 -1
  306. package/dist/data/ai/use-session-scroll.cjs +49 -21
  307. package/dist/data/ai/use-session-scroll.cjs.map +1 -1
  308. package/dist/data/ai/use-session-scroll.d.ts +2 -0
  309. package/dist/data/ai/use-session-scroll.d.ts.map +1 -1
  310. package/dist/data/ai/use-session-scroll.js +49 -21
  311. package/dist/data/ai/use-session-scroll.js.map +1 -1
  312. package/dist/data/chat/Chat.runtime.cjs +1 -1
  313. package/dist/data/chat/Chat.runtime.cjs.map +1 -1
  314. package/dist/data/chat/Chat.runtime.d.ts.map +1 -1
  315. package/dist/data/chat/Chat.runtime.js +1 -1
  316. package/dist/data/chat/Chat.runtime.js.map +1 -1
  317. package/dist/data/graph-columns-layout.cjs +216 -0
  318. package/dist/data/graph-columns-layout.cjs.map +1 -0
  319. package/dist/data/graph-columns-layout.d.ts +56 -0
  320. package/dist/data/graph-columns-layout.d.ts.map +1 -0
  321. package/dist/data/graph-columns-layout.js +216 -0
  322. package/dist/data/graph-columns-layout.js.map +1 -0
  323. package/dist/data/graph-diagram-model.cjs +73 -0
  324. package/dist/data/graph-diagram-model.cjs.map +1 -0
  325. package/dist/data/graph-diagram-model.d.ts +90 -0
  326. package/dist/data/graph-diagram-model.d.ts.map +1 -0
  327. package/dist/data/graph-diagram-model.js +73 -0
  328. package/dist/data/graph-diagram-model.js.map +1 -0
  329. package/dist/data/graph-edge-routing.cjs +235 -0
  330. package/dist/data/graph-edge-routing.cjs.map +1 -0
  331. package/dist/data/graph-edge-routing.d.ts +73 -0
  332. package/dist/data/graph-edge-routing.d.ts.map +1 -0
  333. package/dist/data/graph-edge-routing.js +235 -0
  334. package/dist/data/graph-edge-routing.js.map +1 -0
  335. package/dist/data/graph-layout.cjs +0 -82
  336. package/dist/data/graph-layout.cjs.map +1 -1
  337. package/dist/data/graph-layout.d.ts +1 -28
  338. package/dist/data/graph-layout.d.ts.map +1 -1
  339. package/dist/data/graph-layout.js +1 -83
  340. package/dist/data/graph-layout.js.map +1 -1
  341. package/dist/data/har/HarPanel.cjs +129 -33
  342. package/dist/data/har/HarPanel.cjs.map +1 -1
  343. package/dist/data/har/HarPanel.d.ts +13 -1
  344. package/dist/data/har/HarPanel.d.ts.map +1 -1
  345. package/dist/data/har/HarPanel.js +130 -34
  346. package/dist/data/har/HarPanel.js.map +1 -1
  347. package/dist/data/har/fixtures.d.ts +12 -0
  348. package/dist/data/har/fixtures.d.ts.map +1 -1
  349. package/dist/data/har/types.d.ts +12 -0
  350. package/dist/data/har/types.d.ts.map +1 -1
  351. package/dist/data/runtime/RuntimeBar.cjs +67 -84
  352. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  353. package/dist/data/runtime/RuntimeBar.d.ts +4 -5
  354. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  355. package/dist/data/runtime/RuntimeBar.fields.cjs +170 -0
  356. package/dist/data/runtime/RuntimeBar.fields.cjs.map +1 -0
  357. package/dist/data/runtime/RuntimeBar.fields.d.ts +16 -0
  358. package/dist/data/runtime/RuntimeBar.fields.d.ts.map +1 -0
  359. package/dist/data/runtime/RuntimeBar.fields.js +170 -0
  360. package/dist/data/runtime/RuntimeBar.fields.js.map +1 -0
  361. package/dist/data/runtime/RuntimeBar.js +70 -87
  362. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  363. package/dist/data/runtime/RuntimeBar.selection.cjs +56 -0
  364. package/dist/data/runtime/RuntimeBar.selection.cjs.map +1 -0
  365. package/dist/data/runtime/RuntimeBar.selection.d.ts +20 -0
  366. package/dist/data/runtime/RuntimeBar.selection.d.ts.map +1 -0
  367. package/dist/data/runtime/RuntimeBar.selection.js +56 -0
  368. package/dist/data/runtime/RuntimeBar.selection.js.map +1 -0
  369. package/dist/data/runtime/RuntimeBarActions.cjs +10 -6
  370. package/dist/data/runtime/RuntimeBarActions.cjs.map +1 -1
  371. package/dist/data/runtime/RuntimeBarActions.d.ts +8 -1
  372. package/dist/data/runtime/RuntimeBarActions.d.ts.map +1 -1
  373. package/dist/data/runtime/RuntimeBarActions.js +10 -6
  374. package/dist/data/runtime/RuntimeBarActions.js.map +1 -1
  375. package/dist/data/runtime/RuntimeBarIdentity.cjs +166 -0
  376. package/dist/data/runtime/RuntimeBarIdentity.cjs.map +1 -0
  377. package/dist/data/runtime/RuntimeBarIdentity.d.ts +25 -0
  378. package/dist/data/runtime/RuntimeBarIdentity.d.ts.map +1 -0
  379. package/dist/data/runtime/RuntimeBarIdentity.js +166 -0
  380. package/dist/data/runtime/RuntimeBarIdentity.js.map +1 -0
  381. package/dist/data/runtime/RuntimeBarLayout.cjs +95 -0
  382. package/dist/data/runtime/RuntimeBarLayout.cjs.map +1 -0
  383. package/dist/data/runtime/RuntimeBarLayout.d.ts +9 -0
  384. package/dist/data/runtime/RuntimeBarLayout.d.ts.map +1 -0
  385. package/dist/data/runtime/RuntimeBarLayout.js +95 -0
  386. package/dist/data/runtime/RuntimeBarLayout.js.map +1 -0
  387. package/dist/data/runtime/RuntimeBarSegment.cjs +25 -14
  388. package/dist/data/runtime/RuntimeBarSegment.cjs.map +1 -1
  389. package/dist/data/runtime/RuntimeBarSegment.d.ts +4 -0
  390. package/dist/data/runtime/RuntimeBarSegment.d.ts.map +1 -1
  391. package/dist/data/runtime/RuntimeBarSegment.js +25 -14
  392. package/dist/data/runtime/RuntimeBarSegment.js.map +1 -1
  393. package/dist/data/runtime/RuntimeLimitInput.cjs +41 -0
  394. package/dist/data/runtime/RuntimeLimitInput.cjs.map +1 -0
  395. package/dist/data/runtime/RuntimeLimitInput.d.ts +9 -0
  396. package/dist/data/runtime/RuntimeLimitInput.d.ts.map +1 -0
  397. package/dist/data/runtime/RuntimeLimitInput.js +41 -0
  398. package/dist/data/runtime/RuntimeLimitInput.js.map +1 -0
  399. package/dist/data/runtime/use-runtime-bar-overflow.cjs +70 -0
  400. package/dist/data/runtime/use-runtime-bar-overflow.cjs.map +1 -0
  401. package/dist/data/runtime/use-runtime-bar-overflow.d.ts +13 -0
  402. package/dist/data/runtime/use-runtime-bar-overflow.d.ts.map +1 -0
  403. package/dist/data/runtime/use-runtime-bar-overflow.js +70 -0
  404. package/dist/data/runtime/use-runtime-bar-overflow.js.map +1 -0
  405. package/dist/data/use-edge-focus.cjs +20 -0
  406. package/dist/data/use-edge-focus.cjs.map +1 -0
  407. package/dist/data/use-edge-focus.d.ts +23 -0
  408. package/dist/data/use-edge-focus.d.ts.map +1 -0
  409. package/dist/data/use-edge-focus.js +20 -0
  410. package/dist/data/use-edge-focus.js.map +1 -0
  411. package/dist/data/use-pan-zoom.cjs +159 -0
  412. package/dist/data/use-pan-zoom.cjs.map +1 -0
  413. package/dist/data/use-pan-zoom.d.ts +79 -0
  414. package/dist/data/use-pan-zoom.d.ts.map +1 -0
  415. package/dist/data/use-pan-zoom.js +159 -0
  416. package/dist/data/use-pan-zoom.js.map +1 -0
  417. package/dist/data/version-info.cjs +3 -3
  418. package/dist/data/version-info.js +3 -3
  419. package/dist/data.cjs +5 -1
  420. package/dist/data.cjs.map +1 -1
  421. package/dist/data.d.ts +4 -3
  422. package/dist/data.d.ts.map +1 -1
  423. package/dist/data.js +6 -2
  424. package/dist/data.js.map +1 -1
  425. package/dist/index.cjs +5 -1
  426. package/dist/index.cjs.map +1 -1
  427. package/dist/index.js +6 -2
  428. package/dist/index.js.map +1 -1
  429. package/dist/overlay/DropdownMenu.cjs +1 -0
  430. package/dist/overlay/DropdownMenu.cjs.map +1 -1
  431. package/dist/overlay/DropdownMenu.d.ts +4 -0
  432. package/dist/overlay/DropdownMenu.d.ts.map +1 -1
  433. package/dist/overlay/DropdownMenu.js +1 -0
  434. package/dist/overlay/DropdownMenu.js.map +1 -1
  435. package/dist/overlay/DropdownMenuSubmenu.cjs +31 -15
  436. package/dist/overlay/DropdownMenuSubmenu.cjs.map +1 -1
  437. package/dist/overlay/DropdownMenuSubmenu.d.ts.map +1 -1
  438. package/dist/overlay/DropdownMenuSubmenu.js +31 -15
  439. package/dist/overlay/DropdownMenuSubmenu.js.map +1 -1
  440. package/dist/profiles/fields/profileFieldFilterEditor.cjs +5 -2
  441. package/dist/profiles/fields/profileFieldFilterEditor.cjs.map +1 -1
  442. package/dist/profiles/fields/profileFieldFilterEditor.js +5 -2
  443. package/dist/profiles/fields/profileFieldFilterEditor.js.map +1 -1
  444. package/dist/profiles/fields/profileFieldIcons.cjs +2 -0
  445. package/dist/profiles/fields/profileFieldIcons.cjs.map +1 -1
  446. package/dist/profiles/fields/profileFieldIcons.d.ts.map +1 -1
  447. package/dist/profiles/fields/profileFieldIcons.js +2 -0
  448. package/dist/profiles/fields/profileFieldIcons.js.map +1 -1
  449. package/dist/profiles/wizard/profileWizardModel.cjs +1 -0
  450. package/dist/profiles/wizard/profileWizardModel.cjs.map +1 -1
  451. package/dist/profiles/wizard/profileWizardModel.d.ts +3 -0
  452. package/dist/profiles/wizard/profileWizardModel.d.ts.map +1 -1
  453. package/dist/profiles/wizard/profileWizardModel.js +1 -0
  454. package/dist/profiles/wizard/profileWizardModel.js.map +1 -1
  455. package/dist/rpc/OperationCatalog.cjs +3 -1
  456. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  457. package/dist/rpc/OperationCatalog.d.ts +3 -1
  458. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  459. package/dist/rpc/OperationCatalog.js +3 -1
  460. package/dist/rpc/OperationCatalog.js.map +1 -1
  461. package/dist/rpc/useOperationPages.cjs +6 -1
  462. package/dist/rpc/useOperationPages.cjs.map +1 -1
  463. package/dist/rpc/useOperationPages.d.ts +3 -1
  464. package/dist/rpc/useOperationPages.d.ts.map +1 -1
  465. package/dist/rpc/useOperationPages.js +6 -1
  466. package/dist/rpc/useOperationPages.js.map +1 -1
  467. package/dist/styles.css +1 -1
  468. package/package.json +1 -1
  469. package/schemas/json-schema-form.schema.json +5 -0
  470. package/dist/data/runtime/RuntimeBarCombo.cjs +0 -423
  471. package/dist/data/runtime/RuntimeBarCombo.cjs.map +0 -1
  472. package/dist/data/runtime/RuntimeBarCombo.d.ts +0 -33
  473. package/dist/data/runtime/RuntimeBarCombo.d.ts.map +0 -1
  474. package/dist/data/runtime/RuntimeBarCombo.js +0 -423
  475. package/dist/data/runtime/RuntimeBarCombo.js.map +0 -1
  476. package/dist/data/runtime/RuntimeBarLimits.cjs +0 -262
  477. package/dist/data/runtime/RuntimeBarLimits.cjs.map +0 -1
  478. package/dist/data/runtime/RuntimeBarLimits.d.ts +0 -17
  479. package/dist/data/runtime/RuntimeBarLimits.d.ts.map +0 -1
  480. package/dist/data/runtime/RuntimeBarLimits.js +0 -262
  481. package/dist/data/runtime/RuntimeBarLimits.js.map +0 -1
  482. package/dist/data/runtime/RuntimeBarSegments.cjs +0 -346
  483. package/dist/data/runtime/RuntimeBarSegments.cjs.map +0 -1
  484. package/dist/data/runtime/RuntimeBarSegments.d.ts +0 -37
  485. package/dist/data/runtime/RuntimeBarSegments.d.ts.map +0 -1
  486. package/dist/data/runtime/RuntimeBarSegments.js +0 -346
  487. package/dist/data/runtime/RuntimeBarSegments.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SegmentedControl.js","sources":["../../src/components/SegmentedControl.tsx"],"sourcesContent":["import { useRef, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"../data/Icon\";\n\nexport type SegmentedSize = \"sm\" | \"md\" | \"lg\";\n\nexport type SegmentedOption<T extends string = string> = {\n /** Stable value emitted on selection. */\n id: T;\n /** Visible label. */\n label: ReactNode;\n /** Optional leading icon (imported `Ui*` component or runtime name). */\n icon?: string | StaticIconComponent;\n /** Classes applied to the leading icon. */\n iconClassName?: string;\n /** Classes applied to this segment only while selected. */\n activeClassName?: string;\n /** Optional secondary line, used by larger card-like segmented controls. */\n description?: ReactNode;\n /** Native title attribute. */\n title?: string;\n /** Disable this segment. */\n disabled?: boolean;\n};\n\nexport type SegmentedControlProps<T extends string = string> = {\n /** Currently selected option id. */\n value: T;\n /** Mutually-exclusive options rendered left to right. */\n options: SegmentedOption<T>[];\n /** Called with the newly selected id. */\n onChange: (id: T) => void;\n /** Control size. `md` (default) matches form controls; `sm` is denser and `lg` is card-like. */\n size?: SegmentedSize;\n /** Allows segments to wrap instead of overflowing horizontally. */\n wrap?: boolean;\n /** Accessible group label. */\n \"aria-label\"?: string;\n /** Classes applied to the track. */\n className?: string;\n};\n\nconst SIZE_CLASSES: Record<SegmentedSize, string> = {\n sm: \"text-xs px-density-2 py-density-1 gap-1\",\n md: \"h-full px-control-px text-sm gap-1.5\",\n lg: \"min-h-[4.25rem] min-w-44 flex-1 px-density-3 py-density-3 gap-density-2 text-sm\",\n};\n\n/**\n * Single-select toggle group (the Gavel `Segmented` \"Mine / All / Bots\"\n * pattern). A muted track holds mutually-exclusive segments; the active\n * segment lifts onto the card surface. Built on clicky tokens so it inherits\n * dark-mode and density. Use for small, flat choice sets — reach for `Select`\n * when the option count grows.\n */\nexport function SegmentedControl<T extends string = string>({\n value,\n options,\n onChange,\n size = \"md\",\n wrap = false,\n className,\n \"aria-label\": ariaLabel,\n}: SegmentedControlProps<T>) {\n const btnRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\n const move = (from: number, dir: 1 | -1) => {\n const n = options.length;\n let i = from;\n for (let step = 0; step < n; step++) {\n i = (i + dir + n) % n;\n const opt = options[i];\n if (opt && !opt.disabled) {\n onChange(opt.id);\n btnRefs.current[i]?.focus();\n return;\n }\n }\n };\n\n return (\n <div\n role=\"radiogroup\"\n aria-label={ariaLabel}\n className={cn(\n \"inline-flex items-center rounded-md bg-muted p-0.5\",\n size === \"md\" && \"h-control-h\",\n size === \"lg\" && \"gap-density-2 bg-transparent p-0\",\n wrap && \"flex-wrap\",\n className,\n )}\n >\n {options.map((option, index) => {\n const active = option.id === value;\n return (\n <button\n key={option.id}\n ref={(el) => {\n btnRefs.current[index] = el;\n }}\n type=\"button\"\n role=\"radio\"\n aria-checked={active}\n title={option.title}\n disabled={option.disabled}\n tabIndex={active ? 0 : -1}\n onClick={() => !option.disabled && onChange(option.id)}\n onKeyDown={(e) => {\n if (e.key === \"ArrowRight\" || e.key === \"ArrowDown\") {\n e.preventDefault();\n move(index, 1);\n } else if (e.key === \"ArrowLeft\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n move(index, -1);\n }\n }}\n className={cn(\n \"inline-flex items-center rounded-[5px] border border-transparent font-medium transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n size === \"lg\" && \"rounded-lg text-left\",\n option.description ? \"whitespace-normal\" : \"whitespace-nowrap\",\n SIZE_CLASSES[size],\n active\n ? size === \"lg\"\n ? \"border-primary/70 bg-primary/10 text-foreground shadow-sm ring-1 ring-primary/25\"\n : \"border-border bg-card text-foreground shadow-sm\"\n : size === \"lg\"\n ? \"border-border bg-card text-muted-foreground hover:border-muted-foreground/40 hover:bg-card hover:text-foreground hover:shadow-sm\"\n : \"text-muted-foreground hover:border-border hover:bg-background/60 hover:text-foreground\",\n active && option.activeClassName,\n )}\n >\n {option.icon && (\n <Icon\n {...(typeof option.icon === \"string\"\n ? { name: option.icon }\n : { icon: option.icon })}\n className={cn(\n size === \"lg\" ? \"size-4 shrink-0\" : \"size-3.5 shrink-0\",\n size === \"lg\" &&\n (active ? \"text-primary\" : \"text-muted-foreground\"),\n option.iconClassName,\n )}\n />\n )}\n <span\n className={cn(\n \"min-w-0\",\n size === \"lg\" &&\n \"flex flex-col items-start text-left leading-tight\",\n )}\n >\n <span className=\"min-w-0 truncate\">{option.label}</span>\n {option.description && (\n <span\n className={cn(\n \"mt-0.5 max-w-56 whitespace-normal break-words text-[11px] font-normal leading-snug\",\n active\n ? \"text-muted-foreground\"\n : \"text-muted-foreground/80\",\n )}\n >\n {option.description}\n </span>\n )}\n </span>\n </button>\n );\n })}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SegmentedControl.js","sources":["../../src/components/SegmentedControl.tsx"],"sourcesContent":["import { useId, useRef, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"../data/Icon\";\n\nexport type SegmentedSize = \"sm\" | \"md\" | \"lg\";\n\nexport type SegmentedOption<T extends string = string> = {\n /** Stable value emitted on selection. */\n id: T;\n /** Visible label. */\n label: ReactNode;\n /** Optional leading icon (imported `Ui*` component or runtime name). */\n icon?: string | StaticIconComponent;\n /** Classes applied to the leading icon. */\n iconClassName?: string;\n /** Classes applied to this segment only while selected. */\n activeClassName?: string;\n /** Optional secondary line, used by larger card-like segmented controls. */\n description?: ReactNode;\n /** Native title attribute. */\n title?: string;\n /**\n * Short muted tag rendered after the label (e.g. \"default\"). It is exposed to\n * assistive tech as the segment's accessible description, not its name.\n */\n marker?: string;\n /**\n * Render this segment as the implied choice while no option is selected (e.g.\n * a schema default the value has not been set to). It is outlined, not\n * filled, and stays `aria-checked=false` because nothing is selected.\n */\n implied?: boolean;\n /** Disable this segment. */\n disabled?: boolean;\n};\n\nexport type SegmentedControlProps<T extends string = string> = {\n /** Currently selected option id. */\n value: T;\n /** Mutually-exclusive options rendered left to right. */\n options: SegmentedOption<T>[];\n /** Called with the newly selected id. */\n onChange: (id: T) => void;\n /** Control size. `md` (default) matches form controls; `sm` is denser and `lg` is card-like. */\n size?: SegmentedSize;\n /** Allows segments to wrap instead of overflowing horizontally. */\n wrap?: boolean;\n /** Accessible group label. */\n \"aria-label\"?: string;\n /** Classes applied to the track. */\n className?: string;\n};\n\nconst SIZE_CLASSES: Record<SegmentedSize, string> = {\n sm: \"text-xs px-density-2 py-density-1 gap-1\",\n md: \"h-full px-control-px text-sm gap-1.5\",\n lg: \"min-h-[4.25rem] min-w-44 flex-1 px-density-3 py-density-3 gap-density-2 text-sm\",\n};\n\n/**\n * Single-select toggle group (the Gavel `Segmented` \"Mine / All / Bots\"\n * pattern). A muted track holds mutually-exclusive segments; the active\n * segment lifts onto the card surface. Built on clicky tokens so it inherits\n * dark-mode and density. Use for small, flat choice sets — reach for `Select`\n * when the option count grows.\n */\nexport function SegmentedControl<T extends string = string>({\n value,\n options,\n onChange,\n size = \"md\",\n wrap = false,\n className,\n \"aria-label\": ariaLabel,\n}: SegmentedControlProps<T>) {\n const btnRefs = useRef<(HTMLButtonElement | null)[]>([]);\n const markerIdBase = useId();\n const hasSelection = options.some((option) => option.id === value);\n\n const move = (from: number, dir: 1 | -1) => {\n const n = options.length;\n let i = from;\n for (let step = 0; step < n; step++) {\n i = (i + dir + n) % n;\n const opt = options[i];\n if (opt && !opt.disabled) {\n onChange(opt.id);\n btnRefs.current[i]?.focus();\n return;\n }\n }\n };\n\n return (\n <div\n role=\"radiogroup\"\n aria-label={ariaLabel}\n className={cn(\n \"inline-flex items-center rounded-md bg-muted p-0.5\",\n size === \"md\" && \"h-control-h\",\n size === \"lg\" && \"gap-density-2 bg-transparent p-0\",\n wrap && \"flex-wrap\",\n className,\n )}\n >\n {options.map((option, index) => {\n const active = option.id === value;\n const implied = !hasSelection && option.implied === true;\n const markerId = option.marker ? `${markerIdBase}-marker-${index}` : undefined;\n return (\n <button\n key={option.id}\n ref={(el) => {\n btnRefs.current[index] = el;\n }}\n type=\"button\"\n role=\"radio\"\n aria-checked={active}\n aria-describedby={markerId}\n data-implied={implied ? \"true\" : undefined}\n title={option.title}\n disabled={option.disabled}\n tabIndex={active || implied ? 0 : -1}\n onClick={() => !option.disabled && onChange(option.id)}\n onKeyDown={(e) => {\n if (e.key === \"ArrowRight\" || e.key === \"ArrowDown\") {\n e.preventDefault();\n move(index, 1);\n } else if (e.key === \"ArrowLeft\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n move(index, -1);\n }\n }}\n className={cn(\n \"inline-flex items-center rounded-[5px] border border-transparent font-medium transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n size === \"lg\" && \"rounded-lg text-left\",\n option.description ? \"whitespace-normal\" : \"whitespace-nowrap\",\n SIZE_CLASSES[size],\n active\n ? size === \"lg\"\n ? \"border-primary/70 bg-primary/10 text-foreground shadow-sm ring-1 ring-primary/25\"\n : \"border-border bg-card text-foreground shadow-sm\"\n : implied\n ? size === \"lg\"\n ? \"border-dashed border-primary/60 bg-card text-foreground hover:shadow-sm\"\n : \"border-dashed border-primary/60 text-foreground hover:bg-background/60\"\n : size === \"lg\"\n ? \"border-border bg-card text-muted-foreground hover:border-muted-foreground/40 hover:bg-card hover:text-foreground hover:shadow-sm\"\n : \"text-muted-foreground hover:border-border hover:bg-background/60 hover:text-foreground\",\n active && option.activeClassName,\n )}\n >\n {option.icon && (\n <Icon\n {...(typeof option.icon === \"string\"\n ? { name: option.icon }\n : { icon: option.icon })}\n className={cn(\n size === \"lg\" ? \"size-4 shrink-0\" : \"size-3.5 shrink-0\",\n size === \"lg\" &&\n (active ? \"text-primary\" : \"text-muted-foreground\"),\n option.iconClassName,\n )}\n />\n )}\n <span\n className={cn(\n \"min-w-0\",\n size === \"lg\" &&\n \"flex flex-col items-start text-left leading-tight\",\n )}\n >\n {option.marker ? (\n <span className=\"inline-flex min-w-0 max-w-full items-baseline gap-1\">\n <span className=\"min-w-0 truncate\">{option.label}</span>\n <span\n id={markerId}\n aria-hidden=\"true\"\n className=\"shrink-0 text-[11px] font-normal opacity-70\"\n >\n {option.marker}\n </span>\n </span>\n ) : (\n <span className=\"min-w-0 truncate\">{option.label}</span>\n )}\n {option.description && (\n <span\n className={cn(\n \"mt-0.5 max-w-56 whitespace-normal break-words text-[11px] font-normal leading-snug\",\n active\n ? \"text-muted-foreground\"\n : \"text-muted-foreground/80\",\n )}\n >\n {option.description}\n </span>\n )}\n </span>\n </button>\n );\n })}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -112,6 +112,14 @@ type ComboboxBaseProps = {
112
112
  footer?: ReactNode;
113
113
  };
114
114
  export type ComboboxSingleProps = ComboboxBaseProps & {
115
+ /** Places the filter in the popup and uses a button for the closed control. Custom entries appear only when no options match; dismissal discards the search. */
116
+ searchPlacement?: "control" | "menu";
117
+ /** Replaces the closed caption when searchPlacement is menu. */
118
+ triggerContent?: ReactNode;
119
+ /** Button classes for the menu filter layout. */
120
+ triggerClassName?: string;
121
+ /** Tooltip for the menu filter button. */
122
+ title?: string;
115
123
  multiple?: false;
116
124
  tristate?: false;
117
125
  value: string;
@@ -1 +1 @@
1
- {"version":3,"file":"combobox-types.d.ts","sourceRoot":"","sources":["../../src/components/combobox-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"combobox-types.d.ts","sourceRoot":"","sources":["../../src/components/combobox-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const react = require("react");
5
+ const utils = require("../lib/utils.cjs");
6
+ const Icon = require("../data/Icon.cjs");
7
+ const HoverCard = require("../overlay/HoverCard.cjs");
8
+ const Modal = require("../overlay/Modal.cjs");
9
+ const jsonSchemaFormDebugGlyph = require("./json-schema-form-debug-glyph.cjs");
10
+ const jsonSchemaFormDebugGlyphMap = require("./json-schema-form-debug-glyph-map.cjs");
11
+ const jsonSchemaFormDebugKeywords = require("./json-schema-form-debug-keywords.cjs");
12
+ const UiEyeClosed = require("../icons/components/UiEyeClosed.cjs");
13
+ const UiBug = require("../icons/components/UiBug.cjs");
14
+ const UiChevronUp = require("../icons/components/UiChevronUp.cjs");
15
+ const UiChevronDown = require("../icons/components/UiChevronDown.cjs");
16
+ const UiFullscreen = require("../icons/components/UiFullscreen.cjs");
17
+ const FOOTER_BUTTON = "inline-flex items-center gap-1 rounded px-1 text-[11px] text-sky-700 hover:bg-muted dark:text-sky-300";
18
+ function FieldDebugBadge(info) {
19
+ const { fieldKey, instancePath, field, prop, hiddenReason } = info;
20
+ const [expanded, setExpanded] = react.useState(false);
21
+ const [dialogOpen, setDialogOpen] = react.useState(false);
22
+ const hidden = hiddenReason !== void 0;
23
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
24
+ /* @__PURE__ */ jsxRuntime.jsx(
25
+ HoverCard.HoverCard,
26
+ {
27
+ placement: "right",
28
+ trigger: /* @__PURE__ */ jsxRuntime.jsx(
29
+ "button",
30
+ {
31
+ type: "button",
32
+ "aria-label": `Debug ${fieldKey}`,
33
+ className: utils.cn(
34
+ "inline-flex h-4 w-4 shrink-0 items-center justify-center rounded text-[11px]",
35
+ hidden ? "text-amber-600 dark:text-amber-400" : "text-muted-foreground hover:text-foreground"
36
+ ),
37
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: hidden ? UiEyeClosed.UiEyeClosed : UiBug.UiBug })
38
+ }
39
+ ),
40
+ children: /* @__PURE__ */ jsxRuntime.jsx(ClampedCard, { info, expanded, onToggle: () => setExpanded(!expanded), onOpenDialog: () => setDialogOpen(true) })
41
+ }
42
+ ),
43
+ /* @__PURE__ */ jsxRuntime.jsx(Modal.Modal, { open: dialogOpen, onClose: () => setDialogOpen(false), title: prop.title || fieldKey, subtitle: `${instancePath || "/"} · ${field.kind}`, size: "lg", children: /* @__PURE__ */ jsxRuntime.jsx("div", { "data-testid": "json-schema-form-debug-card-body", "data-clamped": "false", className: "text-xs", children: /* @__PURE__ */ jsxRuntime.jsx(FieldDebugDetails, { ...info, withHeading: false }) }) })
44
+ ] });
45
+ }
46
+ function ClampedCard({
47
+ info,
48
+ expanded,
49
+ onToggle,
50
+ onOpenDialog
51
+ }) {
52
+ const bodyRef = react.useRef(null);
53
+ const [overflows, setOverflows] = react.useState(false);
54
+ react.useLayoutEffect(() => {
55
+ const body = bodyRef.current;
56
+ if (body && !expanded) setOverflows(body.scrollHeight > body.clientHeight + 1);
57
+ }, [expanded, info.prop, info.field.value]);
58
+ const clamped = !expanded;
59
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": "json-schema-form-debug-card", className: "max-w-md space-y-1 whitespace-normal text-xs", children: [
60
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
61
+ /* @__PURE__ */ jsxRuntime.jsx(
62
+ "div",
63
+ {
64
+ ref: bodyRef,
65
+ "data-testid": "json-schema-form-debug-card-body",
66
+ "data-clamped": String(clamped),
67
+ className: clamped ? "max-h-80 overflow-hidden" : "max-h-[70vh] overflow-y-auto",
68
+ children: /* @__PURE__ */ jsxRuntime.jsx(FieldDebugDetails, { ...info })
69
+ }
70
+ ),
71
+ clamped && overflows && /* @__PURE__ */ jsxRuntime.jsx("div", { "aria-hidden": true, className: "pointer-events-none absolute inset-x-0 bottom-0 h-10 bg-gradient-to-t from-background" })
72
+ ] }),
73
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1 border-t border-border pt-1", children: [
74
+ overflows && /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", "aria-expanded": expanded, onClick: onToggle, className: FOOTER_BUTTON, children: [
75
+ /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: expanded ? UiChevronUp.UiChevronUp : UiChevronDown.UiChevronDown }),
76
+ expanded ? "Show less" : "Show more"
77
+ ] }),
78
+ /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", onClick: onOpenDialog, className: utils.cn(FOOTER_BUTTON, "ml-auto"), children: [
79
+ /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiFullscreen.UiFullscreen }),
80
+ "Open in dialog"
81
+ ] })
82
+ ] })
83
+ ] });
84
+ }
85
+ function FieldDebugDetails({ fieldKey, instancePath, field, prop, hiddenReason, withHeading = true }) {
86
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
87
+ withHeading && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-1.5", children: [
88
+ /* @__PURE__ */ jsxRuntime.jsx(jsonSchemaFormDebugGlyph.DebugGlyph, { glyph: jsonSchemaFormDebugGlyphMap.KIND_GLYPH[field.kind], className: "mt-0.5 size-4" }),
89
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
90
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-medium", children: prop.title || fieldKey }),
91
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "font-mono text-[11px] text-muted-foreground", children: [
92
+ instancePath || "/",
93
+ " · ",
94
+ field.kind
95
+ ] })
96
+ ] })
97
+ ] }),
98
+ hiddenReason !== void 0 && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "flex items-center gap-1 text-amber-700 dark:text-amber-300", children: [
99
+ /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: UiEyeClosed.UiEyeClosed }),
100
+ " ",
101
+ hiddenReason
102
+ ] }),
103
+ prop.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground", children: prop.description }),
104
+ /* @__PURE__ */ jsxRuntime.jsx(jsonSchemaFormDebugKeywords.DebugKeywords, { prop, value: field.value })
105
+ ] });
106
+ }
107
+ exports.FieldDebugBadge = FieldDebugBadge;
108
+ //# sourceMappingURL=json-schema-form-debug-badge.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema-form-debug-badge.cjs","sources":["../../src/components/json-schema-form-debug-badge.tsx"],"sourcesContent":["import { useLayoutEffect, useRef, useState } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"../data/Icon\";\nimport { UiBug, UiChevronDown, UiChevronUp, UiEyeClosed, UiFullscreen } from \"../icons\";\nimport { HoverCard } from \"../overlay/HoverCard\";\nimport { Modal } from \"../overlay/Modal\";\nimport { DebugGlyph } from \"./json-schema-form-debug-glyph\";\nimport { KIND_GLYPH } from \"./json-schema-form-debug-glyph-map\";\nimport { DebugKeywords } from \"./json-schema-form-debug-keywords\";\nimport type { FieldControl, JsonSchemaProperty } from \"./json-schema-form-types\";\n\nexport interface FieldDebugInfo {\n fieldKey: string;\n instancePath: string;\n field: FieldControl;\n prop: JsonSchemaProperty;\n hiddenReason: string | undefined;\n}\n\nconst FOOTER_BUTTON = \"inline-flex items-center gap-1 rounded px-1 text-[11px] text-sky-700 hover:bg-muted dark:text-sky-300\";\n\n// FieldDebugBadge is a field's debug-mode badge: an eye-slash when the form\n// would hide it, a bug otherwise, whose hover card says where it comes from.\n// A field whose details outgrow the card (a screen field with a dozen\n// listeners, a long query) is clamped behind \"Show more\", and \"Open in dialog\"\n// shows the full details in a modal. Both states live here, not in the card,\n// because the card unmounts as soon as the pointer leaves it.\nexport function FieldDebugBadge(info: FieldDebugInfo) {\n const { fieldKey, instancePath, field, prop, hiddenReason } = info;\n const [expanded, setExpanded] = useState(false);\n const [dialogOpen, setDialogOpen] = useState(false);\n const hidden = hiddenReason !== undefined;\n return (\n <>\n <HoverCard\n placement=\"right\"\n trigger={\n <button\n type=\"button\"\n aria-label={`Debug ${fieldKey}`}\n className={cn(\n \"inline-flex h-4 w-4 shrink-0 items-center justify-center rounded text-[11px]\",\n hidden ? \"text-amber-600 dark:text-amber-400\" : \"text-muted-foreground hover:text-foreground\",\n )}\n >\n <Icon icon={hidden ? UiEyeClosed : UiBug} />\n </button>\n }\n >\n <ClampedCard info={info} expanded={expanded} onToggle={() => setExpanded(!expanded)} onOpenDialog={() => setDialogOpen(true)} />\n </HoverCard>\n <Modal open={dialogOpen} onClose={() => setDialogOpen(false)} title={prop.title || fieldKey} subtitle={`${instancePath || \"/\"} · ${field.kind}`} size=\"lg\">\n <div data-testid=\"json-schema-form-debug-card-body\" data-clamped=\"false\" className=\"text-xs\">\n <FieldDebugDetails {...info} withHeading={false} />\n </div>\n </Modal>\n </>\n );\n}\n\nfunction ClampedCard({\n info,\n expanded,\n onToggle,\n onOpenDialog,\n}: {\n info: FieldDebugInfo;\n expanded: boolean;\n onToggle: () => void;\n onOpenDialog: () => void;\n}) {\n const bodyRef = useRef<HTMLDivElement | null>(null);\n const [overflows, setOverflows] = useState(false);\n // Measured only while clamped: once expanded the body has no clamp to\n // overflow, and \"Show less\" must stay to put it back.\n useLayoutEffect(() => {\n const body = bodyRef.current;\n if (body && !expanded) setOverflows(body.scrollHeight > body.clientHeight + 1);\n }, [expanded, info.prop, info.field.value]);\n const clamped = !expanded;\n return (\n <div data-testid=\"json-schema-form-debug-card\" className=\"max-w-md space-y-1 whitespace-normal text-xs\">\n <div className=\"relative\">\n <div\n ref={bodyRef}\n data-testid=\"json-schema-form-debug-card-body\"\n data-clamped={String(clamped)}\n className={clamped ? \"max-h-80 overflow-hidden\" : \"max-h-[70vh] overflow-y-auto\"}\n >\n <FieldDebugDetails {...info} />\n </div>\n {clamped && overflows && <div aria-hidden className=\"pointer-events-none absolute inset-x-0 bottom-0 h-10 bg-gradient-to-t from-background\" />}\n </div>\n <div className=\"flex items-center gap-1 border-t border-border pt-1\">\n {overflows && (\n <button type=\"button\" aria-expanded={expanded} onClick={onToggle} className={FOOTER_BUTTON}>\n <Icon icon={expanded ? UiChevronUp : UiChevronDown} />\n {expanded ? \"Show less\" : \"Show more\"}\n </button>\n )}\n <button type=\"button\" onClick={onOpenDialog} className={cn(FOOTER_BUTTON, \"ml-auto\")}>\n <Icon icon={UiFullscreen} />\n Open in dialog\n </button>\n </div>\n </div>\n );\n}\n\n// FieldDebugDetails is the card's content. The dialog's own header already\n// names the field, so it renders without the heading.\nfunction FieldDebugDetails({ fieldKey, instancePath, field, prop, hiddenReason, withHeading = true }: FieldDebugInfo & { withHeading?: boolean }) {\n return (\n <div className=\"space-y-1.5\">\n {withHeading && (\n <div className=\"flex items-start gap-1.5\">\n <DebugGlyph glyph={KIND_GLYPH[field.kind]} className=\"mt-0.5 size-4\" />\n <div className=\"min-w-0\">\n <div className=\"font-medium\">{prop.title || fieldKey}</div>\n <div className=\"font-mono text-[11px] text-muted-foreground\">\n {instancePath || \"/\"} · {field.kind}\n </div>\n </div>\n </div>\n )}\n {hiddenReason !== undefined && (\n <p className=\"flex items-center gap-1 text-amber-700 dark:text-amber-300\">\n <Icon icon={UiEyeClosed} /> {hiddenReason}\n </p>\n )}\n {prop.description && <p className=\"text-muted-foreground\">{prop.description}</p>}\n <DebugKeywords prop={prop} value={field.value} />\n </div>\n );\n}\n"],"names":["useState","jsxs","Fragment","jsx","HoverCard","cn","Icon","UiEyeClosed","UiBug","Modal","useRef","useLayoutEffect","UiChevronUp","UiChevronDown","UiFullscreen","DebugGlyph","KIND_GLYPH","DebugKeywords"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { FieldControl, JsonSchemaProperty } from './json-schema-form-types.js';
2
+ export interface FieldDebugInfo {
3
+ fieldKey: string;
4
+ instancePath: string;
5
+ field: FieldControl;
6
+ prop: JsonSchemaProperty;
7
+ hiddenReason: string | undefined;
8
+ }
9
+ export declare function FieldDebugBadge(info: FieldDebugInfo): import("react").JSX.Element;
10
+ //# sourceMappingURL=json-schema-form-debug-badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema-form-debug-badge.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-debug-badge.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEjF,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,kBAAkB,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAUD,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,+BA+BnD"}
@@ -0,0 +1,108 @@
1
+ import { jsxs, Fragment, jsx } from "react/jsx-runtime";
2
+ import { useState, useRef, useLayoutEffect } from "react";
3
+ import { cn } from "../lib/utils.js";
4
+ import { Icon } from "../data/Icon.js";
5
+ import { HoverCard } from "../overlay/HoverCard.js";
6
+ import { Modal } from "../overlay/Modal.js";
7
+ import { DebugGlyph } from "./json-schema-form-debug-glyph.js";
8
+ import { KIND_GLYPH } from "./json-schema-form-debug-glyph-map.js";
9
+ import { DebugKeywords } from "./json-schema-form-debug-keywords.js";
10
+ import { UiEyeClosed } from "../icons/components/UiEyeClosed.js";
11
+ import { UiBug } from "../icons/components/UiBug.js";
12
+ import { UiChevronUp } from "../icons/components/UiChevronUp.js";
13
+ import { UiChevronDown } from "../icons/components/UiChevronDown.js";
14
+ import { UiFullscreen } from "../icons/components/UiFullscreen.js";
15
+ const FOOTER_BUTTON = "inline-flex items-center gap-1 rounded px-1 text-[11px] text-sky-700 hover:bg-muted dark:text-sky-300";
16
+ function FieldDebugBadge(info) {
17
+ const { fieldKey, instancePath, field, prop, hiddenReason } = info;
18
+ const [expanded, setExpanded] = useState(false);
19
+ const [dialogOpen, setDialogOpen] = useState(false);
20
+ const hidden = hiddenReason !== void 0;
21
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
22
+ /* @__PURE__ */ jsx(
23
+ HoverCard,
24
+ {
25
+ placement: "right",
26
+ trigger: /* @__PURE__ */ jsx(
27
+ "button",
28
+ {
29
+ type: "button",
30
+ "aria-label": `Debug ${fieldKey}`,
31
+ className: cn(
32
+ "inline-flex h-4 w-4 shrink-0 items-center justify-center rounded text-[11px]",
33
+ hidden ? "text-amber-600 dark:text-amber-400" : "text-muted-foreground hover:text-foreground"
34
+ ),
35
+ children: /* @__PURE__ */ jsx(Icon, { icon: hidden ? UiEyeClosed : UiBug })
36
+ }
37
+ ),
38
+ children: /* @__PURE__ */ jsx(ClampedCard, { info, expanded, onToggle: () => setExpanded(!expanded), onOpenDialog: () => setDialogOpen(true) })
39
+ }
40
+ ),
41
+ /* @__PURE__ */ jsx(Modal, { open: dialogOpen, onClose: () => setDialogOpen(false), title: prop.title || fieldKey, subtitle: `${instancePath || "/"} · ${field.kind}`, size: "lg", children: /* @__PURE__ */ jsx("div", { "data-testid": "json-schema-form-debug-card-body", "data-clamped": "false", className: "text-xs", children: /* @__PURE__ */ jsx(FieldDebugDetails, { ...info, withHeading: false }) }) })
42
+ ] });
43
+ }
44
+ function ClampedCard({
45
+ info,
46
+ expanded,
47
+ onToggle,
48
+ onOpenDialog
49
+ }) {
50
+ const bodyRef = useRef(null);
51
+ const [overflows, setOverflows] = useState(false);
52
+ useLayoutEffect(() => {
53
+ const body = bodyRef.current;
54
+ if (body && !expanded) setOverflows(body.scrollHeight > body.clientHeight + 1);
55
+ }, [expanded, info.prop, info.field.value]);
56
+ const clamped = !expanded;
57
+ return /* @__PURE__ */ jsxs("div", { "data-testid": "json-schema-form-debug-card", className: "max-w-md space-y-1 whitespace-normal text-xs", children: [
58
+ /* @__PURE__ */ jsxs("div", { className: "relative", children: [
59
+ /* @__PURE__ */ jsx(
60
+ "div",
61
+ {
62
+ ref: bodyRef,
63
+ "data-testid": "json-schema-form-debug-card-body",
64
+ "data-clamped": String(clamped),
65
+ className: clamped ? "max-h-80 overflow-hidden" : "max-h-[70vh] overflow-y-auto",
66
+ children: /* @__PURE__ */ jsx(FieldDebugDetails, { ...info })
67
+ }
68
+ ),
69
+ clamped && overflows && /* @__PURE__ */ jsx("div", { "aria-hidden": true, className: "pointer-events-none absolute inset-x-0 bottom-0 h-10 bg-gradient-to-t from-background" })
70
+ ] }),
71
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 border-t border-border pt-1", children: [
72
+ overflows && /* @__PURE__ */ jsxs("button", { type: "button", "aria-expanded": expanded, onClick: onToggle, className: FOOTER_BUTTON, children: [
73
+ /* @__PURE__ */ jsx(Icon, { icon: expanded ? UiChevronUp : UiChevronDown }),
74
+ expanded ? "Show less" : "Show more"
75
+ ] }),
76
+ /* @__PURE__ */ jsxs("button", { type: "button", onClick: onOpenDialog, className: cn(FOOTER_BUTTON, "ml-auto"), children: [
77
+ /* @__PURE__ */ jsx(Icon, { icon: UiFullscreen }),
78
+ "Open in dialog"
79
+ ] })
80
+ ] })
81
+ ] });
82
+ }
83
+ function FieldDebugDetails({ fieldKey, instancePath, field, prop, hiddenReason, withHeading = true }) {
84
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
85
+ withHeading && /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-1.5", children: [
86
+ /* @__PURE__ */ jsx(DebugGlyph, { glyph: KIND_GLYPH[field.kind], className: "mt-0.5 size-4" }),
87
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
88
+ /* @__PURE__ */ jsx("div", { className: "font-medium", children: prop.title || fieldKey }),
89
+ /* @__PURE__ */ jsxs("div", { className: "font-mono text-[11px] text-muted-foreground", children: [
90
+ instancePath || "/",
91
+ " · ",
92
+ field.kind
93
+ ] })
94
+ ] })
95
+ ] }),
96
+ hiddenReason !== void 0 && /* @__PURE__ */ jsxs("p", { className: "flex items-center gap-1 text-amber-700 dark:text-amber-300", children: [
97
+ /* @__PURE__ */ jsx(Icon, { icon: UiEyeClosed }),
98
+ " ",
99
+ hiddenReason
100
+ ] }),
101
+ prop.description && /* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: prop.description }),
102
+ /* @__PURE__ */ jsx(DebugKeywords, { prop, value: field.value })
103
+ ] });
104
+ }
105
+ export {
106
+ FieldDebugBadge
107
+ };
108
+ //# sourceMappingURL=json-schema-form-debug-badge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema-form-debug-badge.js","sources":["../../src/components/json-schema-form-debug-badge.tsx"],"sourcesContent":["import { useLayoutEffect, useRef, useState } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"../data/Icon\";\nimport { UiBug, UiChevronDown, UiChevronUp, UiEyeClosed, UiFullscreen } from \"../icons\";\nimport { HoverCard } from \"../overlay/HoverCard\";\nimport { Modal } from \"../overlay/Modal\";\nimport { DebugGlyph } from \"./json-schema-form-debug-glyph\";\nimport { KIND_GLYPH } from \"./json-schema-form-debug-glyph-map\";\nimport { DebugKeywords } from \"./json-schema-form-debug-keywords\";\nimport type { FieldControl, JsonSchemaProperty } from \"./json-schema-form-types\";\n\nexport interface FieldDebugInfo {\n fieldKey: string;\n instancePath: string;\n field: FieldControl;\n prop: JsonSchemaProperty;\n hiddenReason: string | undefined;\n}\n\nconst FOOTER_BUTTON = \"inline-flex items-center gap-1 rounded px-1 text-[11px] text-sky-700 hover:bg-muted dark:text-sky-300\";\n\n// FieldDebugBadge is a field's debug-mode badge: an eye-slash when the form\n// would hide it, a bug otherwise, whose hover card says where it comes from.\n// A field whose details outgrow the card (a screen field with a dozen\n// listeners, a long query) is clamped behind \"Show more\", and \"Open in dialog\"\n// shows the full details in a modal. Both states live here, not in the card,\n// because the card unmounts as soon as the pointer leaves it.\nexport function FieldDebugBadge(info: FieldDebugInfo) {\n const { fieldKey, instancePath, field, prop, hiddenReason } = info;\n const [expanded, setExpanded] = useState(false);\n const [dialogOpen, setDialogOpen] = useState(false);\n const hidden = hiddenReason !== undefined;\n return (\n <>\n <HoverCard\n placement=\"right\"\n trigger={\n <button\n type=\"button\"\n aria-label={`Debug ${fieldKey}`}\n className={cn(\n \"inline-flex h-4 w-4 shrink-0 items-center justify-center rounded text-[11px]\",\n hidden ? \"text-amber-600 dark:text-amber-400\" : \"text-muted-foreground hover:text-foreground\",\n )}\n >\n <Icon icon={hidden ? UiEyeClosed : UiBug} />\n </button>\n }\n >\n <ClampedCard info={info} expanded={expanded} onToggle={() => setExpanded(!expanded)} onOpenDialog={() => setDialogOpen(true)} />\n </HoverCard>\n <Modal open={dialogOpen} onClose={() => setDialogOpen(false)} title={prop.title || fieldKey} subtitle={`${instancePath || \"/\"} · ${field.kind}`} size=\"lg\">\n <div data-testid=\"json-schema-form-debug-card-body\" data-clamped=\"false\" className=\"text-xs\">\n <FieldDebugDetails {...info} withHeading={false} />\n </div>\n </Modal>\n </>\n );\n}\n\nfunction ClampedCard({\n info,\n expanded,\n onToggle,\n onOpenDialog,\n}: {\n info: FieldDebugInfo;\n expanded: boolean;\n onToggle: () => void;\n onOpenDialog: () => void;\n}) {\n const bodyRef = useRef<HTMLDivElement | null>(null);\n const [overflows, setOverflows] = useState(false);\n // Measured only while clamped: once expanded the body has no clamp to\n // overflow, and \"Show less\" must stay to put it back.\n useLayoutEffect(() => {\n const body = bodyRef.current;\n if (body && !expanded) setOverflows(body.scrollHeight > body.clientHeight + 1);\n }, [expanded, info.prop, info.field.value]);\n const clamped = !expanded;\n return (\n <div data-testid=\"json-schema-form-debug-card\" className=\"max-w-md space-y-1 whitespace-normal text-xs\">\n <div className=\"relative\">\n <div\n ref={bodyRef}\n data-testid=\"json-schema-form-debug-card-body\"\n data-clamped={String(clamped)}\n className={clamped ? \"max-h-80 overflow-hidden\" : \"max-h-[70vh] overflow-y-auto\"}\n >\n <FieldDebugDetails {...info} />\n </div>\n {clamped && overflows && <div aria-hidden className=\"pointer-events-none absolute inset-x-0 bottom-0 h-10 bg-gradient-to-t from-background\" />}\n </div>\n <div className=\"flex items-center gap-1 border-t border-border pt-1\">\n {overflows && (\n <button type=\"button\" aria-expanded={expanded} onClick={onToggle} className={FOOTER_BUTTON}>\n <Icon icon={expanded ? UiChevronUp : UiChevronDown} />\n {expanded ? \"Show less\" : \"Show more\"}\n </button>\n )}\n <button type=\"button\" onClick={onOpenDialog} className={cn(FOOTER_BUTTON, \"ml-auto\")}>\n <Icon icon={UiFullscreen} />\n Open in dialog\n </button>\n </div>\n </div>\n );\n}\n\n// FieldDebugDetails is the card's content. The dialog's own header already\n// names the field, so it renders without the heading.\nfunction FieldDebugDetails({ fieldKey, instancePath, field, prop, hiddenReason, withHeading = true }: FieldDebugInfo & { withHeading?: boolean }) {\n return (\n <div className=\"space-y-1.5\">\n {withHeading && (\n <div className=\"flex items-start gap-1.5\">\n <DebugGlyph glyph={KIND_GLYPH[field.kind]} className=\"mt-0.5 size-4\" />\n <div className=\"min-w-0\">\n <div className=\"font-medium\">{prop.title || fieldKey}</div>\n <div className=\"font-mono text-[11px] text-muted-foreground\">\n {instancePath || \"/\"} · {field.kind}\n </div>\n </div>\n </div>\n )}\n {hiddenReason !== undefined && (\n <p className=\"flex items-center gap-1 text-amber-700 dark:text-amber-300\">\n <Icon icon={UiEyeClosed} /> {hiddenReason}\n </p>\n )}\n {prop.description && <p className=\"text-muted-foreground\">{prop.description}</p>}\n <DebugKeywords prop={prop} value={field.value} />\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const UiDataSchema = require("../icons/components/UiDataSchema.cjs");
4
+ const UiExtension = require("../icons/components/UiExtension.cjs");
5
+ const UiPluginModule = require("../icons/components/UiPluginModule.cjs");
6
+ const UiPalette = require("../icons/components/UiPalette.cjs");
7
+ const UiHibernateEvent = require("../icons/components/UiHibernateEvent.cjs");
8
+ const UiNull = require("../icons/components/UiNull.cjs");
9
+ const UiLayoutDashboard = require("../icons/components/UiLayoutDashboard.cjs");
10
+ const UiColumns = require("../icons/components/UiColumns.cjs");
11
+ const UiQuestion = require("../icons/components/UiQuestion.cjs");
12
+ const UiRows = require("../icons/components/UiRows.cjs");
13
+ const UiListOrdered = require("../icons/components/UiListOrdered.cjs");
14
+ const UiSortAlphabetically = require("../icons/components/UiSortAlphabetically.cjs");
15
+ const UiDatabaseLink = require("../icons/components/UiDatabaseLink.cjs");
16
+ const UiLock = require("../icons/components/UiLock.cjs");
17
+ const UiEyeClosed = require("../icons/components/UiEyeClosed.cjs");
18
+ const UiWriteAccess = require("../icons/components/UiWriteAccess.cjs");
19
+ const UiReadAccess = require("../icons/components/UiReadAccess.cjs");
20
+ const UiRegex = require("../icons/components/UiRegex.cjs");
21
+ const UiFileFormat = require("../icons/components/UiFileFormat.cjs");
22
+ const UiConstant1 = require("../icons/components/UiConstant1.cjs");
23
+ const UiCircleOutline = require("../icons/components/UiCircleOutline.cjs");
24
+ const UiEvaluateExpression = require("../icons/components/UiEvaluateExpression.cjs");
25
+ const UiProhibit = require("../icons/components/UiProhibit.cjs");
26
+ const UiEditMode = require("../icons/components/UiEditMode.cjs");
27
+ const UiVariable5 = require("../icons/components/UiVariable5.cjs");
28
+ const UiArrowsCounterClockwise = require("../icons/components/UiArrowsCounterClockwise.cjs");
29
+ const UiAsterisk = require("../icons/components/UiAsterisk.cjs");
30
+ const UiLockOpen = require("../icons/components/UiLockOpen.cjs");
31
+ const UiEye = require("../icons/components/UiEye.cjs");
32
+ const UiLink = require("../icons/components/UiLink.cjs");
33
+ const UiText = require("../icons/components/UiText.cjs");
34
+ const UiObject = require("../icons/components/UiObject.cjs");
35
+ const UiArray = require("../icons/components/UiArray.cjs");
36
+ const UiCalendarBlank = require("../icons/components/UiCalendarBlank.cjs");
37
+ const UiSelect = require("../icons/components/UiSelect.cjs");
38
+ const UiEnum = require("../icons/components/UiEnum.cjs");
39
+ const UiBoolean = require("../icons/components/UiBoolean.cjs");
40
+ const UiNumeric = require("../icons/components/UiNumeric.cjs");
41
+ const UiFileCode = require("../icons/components/UiFileCode.cjs");
42
+ const UiString = require("../icons/components/UiString.cjs");
43
+ const pair = (light, dark) => dark ? { light, dark } : { light };
44
+ const GROUP_GLYPH = {
45
+ behaviour: pair(UiHibernateEvent.UiHibernateEvent, UiHibernateEvent.UiHibernateEventDark),
46
+ presentation: pair(UiPalette.UiPalette),
47
+ "opt-in": pair(UiPluginModule.UiPluginModule, UiPluginModule.UiPluginModuleDark),
48
+ consumer: pair(UiExtension.UiExtension, UiExtension.UiExtensionDark),
49
+ schema: pair(UiDataSchema.UiDataSchema, UiDataSchema.UiDataSchemaDark)
50
+ };
51
+ const KIND_GLYPH = {
52
+ string: pair(UiString.UiString),
53
+ textarea: pair(UiText.UiText),
54
+ markdown: pair(UiFileCode.UiFileCode),
55
+ number: pair(UiNumeric.UiNumeric),
56
+ boolean: pair(UiBoolean.UiBoolean),
57
+ enum: pair(UiEnum.UiEnum),
58
+ lookup: pair(UiSelect.UiSelect),
59
+ date: pair(UiCalendarBlank.UiCalendarBlank),
60
+ "string-map": pair(UiDataSchema.UiDataSchema, UiDataSchema.UiDataSchemaDark),
61
+ array: pair(UiArray.UiArray),
62
+ object: pair(UiObject.UiObject),
63
+ display: pair(UiText.UiText),
64
+ link: pair(UiLink.UiLink)
65
+ };
66
+ const TYPE_GLYPH = {
67
+ string: KIND_GLYPH.string,
68
+ integer: KIND_GLYPH.number,
69
+ number: KIND_GLYPH.number,
70
+ boolean: KIND_GLYPH.boolean,
71
+ array: KIND_GLYPH.array,
72
+ object: KIND_GLYPH.object,
73
+ null: pair(UiNull.UiNull)
74
+ };
75
+ const KEYWORD_GLYPH = {
76
+ enum: KIND_GLYPH.enum,
77
+ const: pair(UiConstant1.UiConstant1, UiConstant1.UiConstant1Dark),
78
+ default: pair(UiConstant1.UiConstant1, UiConstant1.UiConstant1Dark),
79
+ format: pair(UiFileFormat.UiFileFormat, UiFileFormat.UiFileFormatDark),
80
+ pattern: pair(UiRegex.UiRegex, UiRegex.UiRegexDark),
81
+ readOnly: pair(UiReadAccess.UiReadAccess, UiReadAccess.UiReadAccessDark),
82
+ writeOnly: pair(UiWriteAccess.UiWriteAccess, UiWriteAccess.UiWriteAccessDark),
83
+ "x-hidden": pair(UiEyeClosed.UiEyeClosed),
84
+ "x-hidden-by": pair(UiEyeClosed.UiEyeClosed),
85
+ "x-disabled": pair(UiLock.UiLock),
86
+ "x-on-change": GROUP_GLYPH.behaviour,
87
+ "x-on-load": GROUP_GLYPH.behaviour,
88
+ "x-clicky-lookup": pair(UiDatabaseLink.UiDatabaseLink, UiDatabaseLink.UiDatabaseLinkDark),
89
+ "x-discriminator": KIND_GLYPH.enum,
90
+ "x-order": pair(UiSortAlphabetically.UiSortAlphabetically, UiSortAlphabetically.UiSortAlphabeticallyDark),
91
+ "x-clicky-order": pair(UiListOrdered.UiListOrdered),
92
+ "x-item": pair(UiRows.UiRows),
93
+ "x-help": pair(UiQuestion.UiQuestion),
94
+ "x-help-display": pair(UiQuestion.UiQuestion),
95
+ "x-md-editor": KIND_GLYPH.markdown,
96
+ "x-columns": pair(UiColumns.UiColumns),
97
+ "x-col-span": pair(UiColumns.UiColumns),
98
+ "x-layout": pair(UiLayoutDashboard.UiLayoutDashboard),
99
+ "x-label-position": pair(UiLayoutDashboard.UiLayoutDashboard)
100
+ };
101
+ function keywordGlyph(keyword, raw) {
102
+ if (keyword === "type" && typeof raw === "string") return TYPE_GLYPH[raw];
103
+ return KEYWORD_GLYPH[keyword];
104
+ }
105
+ const ACTION_GLYPH = {
106
+ hide: pair(UiEyeClosed.UiEyeClosed),
107
+ show: pair(UiEye.UiEye),
108
+ enable: pair(UiLockOpen.UiLockOpen),
109
+ disable: pair(UiLock.UiLock),
110
+ require: pair(UiAsterisk.UiAsterisk),
111
+ optional: pair(UiCircleOutline.UiCircleOutline),
112
+ reset: pair(UiArrowsCounterClockwise.UiArrowsCounterClockwise),
113
+ set: pair(UiVariable5.UiVariable5, UiVariable5.UiVariable5Dark),
114
+ patch: pair(UiEditMode.UiEditMode, UiEditMode.UiEditModeDark)
115
+ };
116
+ const CONDITION_GLYPH = {
117
+ const: pair(UiConstant1.UiConstant1, UiConstant1.UiConstant1Dark),
118
+ enum: KIND_GLYPH.enum,
119
+ not: pair(UiProhibit.UiProhibit),
120
+ expr: pair(UiEvaluateExpression.UiEvaluateExpression, UiEvaluateExpression.UiEvaluateExpressionDark),
121
+ schema: pair(UiDataSchema.UiDataSchema, UiDataSchema.UiDataSchemaDark),
122
+ always: pair(UiCircleOutline.UiCircleOutline)
123
+ };
124
+ exports.ACTION_GLYPH = ACTION_GLYPH;
125
+ exports.CONDITION_GLYPH = CONDITION_GLYPH;
126
+ exports.GROUP_GLYPH = GROUP_GLYPH;
127
+ exports.KIND_GLYPH = KIND_GLYPH;
128
+ exports.keywordGlyph = keywordGlyph;
129
+ //# sourceMappingURL=json-schema-form-debug-glyph-map.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema-form-debug-glyph-map.cjs","sources":["../../src/components/json-schema-form-debug-glyph-map.ts"],"sourcesContent":["import {\n UiArray,\n UiArrowsCounterClockwise,\n UiAsterisk,\n UiBoolean,\n UiCalendarBlank,\n UiCircleOutline,\n UiColumns,\n UiConstant1,\n UiConstant1Dark,\n UiDataSchema,\n UiDataSchemaDark,\n UiDatabaseLink,\n UiDatabaseLinkDark,\n UiEditMode,\n UiEditModeDark,\n UiEnum,\n UiEvaluateExpression,\n UiEvaluateExpressionDark,\n UiExtension,\n UiExtensionDark,\n UiEye,\n UiEyeClosed,\n UiFileCode,\n UiFileFormat,\n UiFileFormatDark,\n UiHibernateEvent,\n UiHibernateEventDark,\n UiLayoutDashboard,\n UiLink,\n UiListOrdered,\n UiLock,\n UiLockOpen,\n UiNull,\n UiNumeric,\n UiObject,\n UiPalette,\n UiPluginModule,\n UiPluginModuleDark,\n UiProhibit,\n UiQuestion,\n UiReadAccess,\n UiReadAccessDark,\n UiRegex,\n UiRegexDark,\n UiRows,\n UiSelect,\n UiSortAlphabetically,\n UiSortAlphabeticallyDark,\n UiString,\n UiText,\n UiVariable5,\n UiVariable5Dark,\n UiWriteAccess,\n UiWriteAccessDark,\n} from \"../icons\";\nimport type { IconComponent } from \"../icons/types\";\nimport type { KeywordGroup } from \"./json-schema-form-debug-groups\";\nimport type { ChangeActions, FieldControlKind } from \"./json-schema-form-types\";\n\n// Glyphs the debug card draws from the programming icon palette. A palette icon\n// is a coloured pair: `dark` is its dark-theme artwork, where one exists.\nexport interface DebugGlyphPair {\n light: IconComponent;\n dark?: IconComponent;\n}\n\nconst pair = (light: IconComponent, dark?: IconComponent): DebugGlyphPair => (dark ? { light, dark } : { light });\n\nexport const GROUP_GLYPH: Record<KeywordGroup, DebugGlyphPair> = {\n behaviour: pair(UiHibernateEvent, UiHibernateEventDark),\n presentation: pair(UiPalette),\n \"opt-in\": pair(UiPluginModule, UiPluginModuleDark),\n consumer: pair(UiExtension, UiExtensionDark),\n schema: pair(UiDataSchema, UiDataSchemaDark),\n};\n\nexport const KIND_GLYPH: Record<FieldControlKind, DebugGlyphPair> = {\n string: pair(UiString),\n textarea: pair(UiText),\n markdown: pair(UiFileCode),\n number: pair(UiNumeric),\n boolean: pair(UiBoolean),\n enum: pair(UiEnum),\n lookup: pair(UiSelect),\n date: pair(UiCalendarBlank),\n \"string-map\": pair(UiDataSchema, UiDataSchemaDark),\n array: pair(UiArray),\n object: pair(UiObject),\n display: pair(UiText),\n link: pair(UiLink),\n};\n\n// The JSON Schema `type` names, read by the `type` keyword row.\nconst TYPE_GLYPH: Record<string, DebugGlyphPair> = {\n string: KIND_GLYPH.string,\n integer: KIND_GLYPH.number,\n number: KIND_GLYPH.number,\n boolean: KIND_GLYPH.boolean,\n array: KIND_GLYPH.array,\n object: KIND_GLYPH.object,\n null: pair(UiNull),\n};\n\nconst KEYWORD_GLYPH: Record<string, DebugGlyphPair> = {\n enum: KIND_GLYPH.enum,\n const: pair(UiConstant1, UiConstant1Dark),\n default: pair(UiConstant1, UiConstant1Dark),\n format: pair(UiFileFormat, UiFileFormatDark),\n pattern: pair(UiRegex, UiRegexDark),\n readOnly: pair(UiReadAccess, UiReadAccessDark),\n writeOnly: pair(UiWriteAccess, UiWriteAccessDark),\n \"x-hidden\": pair(UiEyeClosed),\n \"x-hidden-by\": pair(UiEyeClosed),\n \"x-disabled\": pair(UiLock),\n \"x-on-change\": GROUP_GLYPH.behaviour,\n \"x-on-load\": GROUP_GLYPH.behaviour,\n \"x-clicky-lookup\": pair(UiDatabaseLink, UiDatabaseLinkDark),\n \"x-discriminator\": KIND_GLYPH.enum,\n \"x-order\": pair(UiSortAlphabetically, UiSortAlphabeticallyDark),\n \"x-clicky-order\": pair(UiListOrdered),\n \"x-item\": pair(UiRows),\n \"x-help\": pair(UiQuestion),\n \"x-help-display\": pair(UiQuestion),\n \"x-md-editor\": KIND_GLYPH.markdown,\n \"x-columns\": pair(UiColumns),\n \"x-col-span\": pair(UiColumns),\n \"x-layout\": pair(UiLayoutDashboard),\n \"x-label-position\": pair(UiLayoutDashboard),\n};\n\n// keywordGlyph is the glyph beside a keyword row; `type` is marked by the\n// type it names. A keyword the palette has no symbol for has none.\nexport function keywordGlyph(keyword: string, raw: unknown): DebugGlyphPair | undefined {\n if (keyword === \"type\" && typeof raw === \"string\") return TYPE_GLYPH[raw];\n return KEYWORD_GLYPH[keyword];\n}\n\nexport const ACTION_GLYPH: Record<keyof ChangeActions, DebugGlyphPair> = {\n hide: pair(UiEyeClosed),\n show: pair(UiEye),\n enable: pair(UiLockOpen),\n disable: pair(UiLock),\n require: pair(UiAsterisk),\n optional: pair(UiCircleOutline),\n reset: pair(UiArrowsCounterClockwise),\n set: pair(UiVariable5, UiVariable5Dark),\n patch: pair(UiEditMode, UiEditModeDark),\n};\n\n// One glyph per predicate a `when` can state.\nexport const CONDITION_GLYPH = {\n const: pair(UiConstant1, UiConstant1Dark),\n enum: KIND_GLYPH.enum,\n not: pair(UiProhibit),\n expr: pair(UiEvaluateExpression, UiEvaluateExpressionDark),\n schema: pair(UiDataSchema, UiDataSchemaDark),\n always: pair(UiCircleOutline),\n} satisfies Record<string, DebugGlyphPair>;\n"],"names":["UiHibernateEvent","UiHibernateEventDark","UiPalette","UiPluginModule","UiPluginModuleDark","UiExtension","UiExtensionDark","UiDataSchema","UiDataSchemaDark","UiString","UiText","UiFileCode","UiNumeric","UiBoolean","UiEnum","UiSelect","UiCalendarBlank","UiArray","UiObject","UiLink","UiNull","UiConstant1","UiConstant1Dark","UiFileFormat","UiFileFormatDark","UiRegex","UiRegexDark","UiReadAccess","UiReadAccessDark","UiWriteAccess","UiWriteAccessDark","UiEyeClosed","UiLock","UiDatabaseLink","UiDatabaseLinkDark","UiSortAlphabetically","UiSortAlphabeticallyDark","UiListOrdered","UiRows","UiQuestion","UiColumns","UiLayoutDashboard","UiEye","UiLockOpen","UiAsterisk","UiCircleOutline","UiArrowsCounterClockwise","UiVariable5","UiVariable5Dark","UiEditMode","UiEditModeDark","UiProhibit","UiEvaluateExpression","UiEvaluateExpressionDark"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { IconComponent } from '../icons/types.js';
2
+ import { KeywordGroup } from './json-schema-form-debug-groups.js';
3
+ import { ChangeActions, FieldControlKind } from './json-schema-form-types.js';
4
+ export interface DebugGlyphPair {
5
+ light: IconComponent;
6
+ dark?: IconComponent;
7
+ }
8
+ export declare const GROUP_GLYPH: Record<KeywordGroup, DebugGlyphPair>;
9
+ export declare const KIND_GLYPH: Record<FieldControlKind, DebugGlyphPair>;
10
+ export declare function keywordGlyph(keyword: string, raw: unknown): DebugGlyphPair | undefined;
11
+ export declare const ACTION_GLYPH: Record<keyof ChangeActions, DebugGlyphPair>;
12
+ export declare const CONDITION_GLYPH: {
13
+ const: DebugGlyphPair;
14
+ enum: DebugGlyphPair;
15
+ not: DebugGlyphPair;
16
+ expr: DebugGlyphPair;
17
+ schema: DebugGlyphPair;
18
+ always: DebugGlyphPair;
19
+ };
20
+ //# sourceMappingURL=json-schema-form-debug-glyph-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema-form-debug-glyph-map.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-debug-glyph-map.ts"],"names":[],"mappings":"AAwDA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAIhF,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB;AAID,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,YAAY,EAAE,cAAc,CAM5D,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,gBAAgB,EAAE,cAAc,CAc/D,CAAC;AA0CF,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,cAAc,GAAG,SAAS,CAGtF;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,aAAa,EAAE,cAAc,CAUpE,CAAC;AAGF,eAAO,MAAM,eAAe;;;;;;;CAOc,CAAC"}