@flanksource/clicky-ui 0.3.41 → 0.3.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (472) 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/rpc/OperationCatalog.cjs +3 -1
  441. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  442. package/dist/rpc/OperationCatalog.d.ts +3 -1
  443. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  444. package/dist/rpc/OperationCatalog.js +3 -1
  445. package/dist/rpc/OperationCatalog.js.map +1 -1
  446. package/dist/rpc/useOperationPages.cjs +6 -1
  447. package/dist/rpc/useOperationPages.cjs.map +1 -1
  448. package/dist/rpc/useOperationPages.d.ts +3 -1
  449. package/dist/rpc/useOperationPages.d.ts.map +1 -1
  450. package/dist/rpc/useOperationPages.js +6 -1
  451. package/dist/rpc/useOperationPages.js.map +1 -1
  452. package/dist/styles.css +1 -1
  453. package/package.json +1 -1
  454. package/schemas/json-schema-form.schema.json +5 -0
  455. package/dist/data/runtime/RuntimeBarCombo.cjs +0 -423
  456. package/dist/data/runtime/RuntimeBarCombo.cjs.map +0 -1
  457. package/dist/data/runtime/RuntimeBarCombo.d.ts +0 -33
  458. package/dist/data/runtime/RuntimeBarCombo.d.ts.map +0 -1
  459. package/dist/data/runtime/RuntimeBarCombo.js +0 -423
  460. package/dist/data/runtime/RuntimeBarCombo.js.map +0 -1
  461. package/dist/data/runtime/RuntimeBarLimits.cjs +0 -262
  462. package/dist/data/runtime/RuntimeBarLimits.cjs.map +0 -1
  463. package/dist/data/runtime/RuntimeBarLimits.d.ts +0 -17
  464. package/dist/data/runtime/RuntimeBarLimits.d.ts.map +0 -1
  465. package/dist/data/runtime/RuntimeBarLimits.js +0 -262
  466. package/dist/data/runtime/RuntimeBarLimits.js.map +0 -1
  467. package/dist/data/runtime/RuntimeBarSegments.cjs +0 -346
  468. package/dist/data/runtime/RuntimeBarSegments.cjs.map +0 -1
  469. package/dist/data/runtime/RuntimeBarSegments.d.ts +0 -37
  470. package/dist/data/runtime/RuntimeBarSegments.d.ts.map +0 -1
  471. package/dist/data/runtime/RuntimeBarSegments.js +0 -346
  472. package/dist/data/runtime/RuntimeBarSegments.js.map +0 -1
@@ -33,12 +33,24 @@ const TONE_EDGE_CLASS = {
33
33
  emerald: "border-l-emerald-400 dark:border-l-emerald-500",
34
34
  rose: "border-l-rose-400 dark:border-l-rose-500"
35
35
  };
36
+ const TONE_DOT_CLASS = {
37
+ neutral: "bg-muted-foreground dark:bg-muted-foreground",
38
+ slate: "bg-slate-400 dark:bg-slate-500",
39
+ violet: "bg-violet-400 dark:bg-violet-500",
40
+ amber: "bg-amber-400 dark:bg-amber-500",
41
+ sky: "bg-sky-400 dark:bg-sky-500",
42
+ teal: "bg-teal-400 dark:bg-teal-500",
43
+ indigo: "bg-indigo-400 dark:bg-indigo-500",
44
+ emerald: "bg-emerald-400 dark:bg-emerald-500",
45
+ rose: "bg-rose-400 dark:bg-rose-500"
46
+ };
36
47
  function isFieldTone(value) {
37
48
  return typeof value === "string" && TONES.includes(value);
38
49
  }
39
50
  function normalizeTone(value) {
40
51
  return isFieldTone(value) ? value : "neutral";
41
52
  }
53
+ exports.TONE_DOT_CLASS = TONE_DOT_CLASS;
42
54
  exports.TONE_EDGE_CLASS = TONE_EDGE_CLASS;
43
55
  exports.TONE_GLYPH_CLASS = TONE_GLYPH_CLASS;
44
56
  exports.isFieldTone = isFieldTone;
@@ -1 +1 @@
1
- {"version":3,"file":"json-schema-form-tone.cjs","sources":["../../src/components/json-schema-form-tone.ts"],"sourcesContent":["// FieldTone is the closed colour vocabulary a schema may name via `x-enum-tones`\n// to give an enum value its own hue (e.g. a parameter's type). It extends the\n// `IconTone` union in ../data/Icon with the two extra hues a six-value enum needs,\n// so the two vocabularies read as one system.\n//\n// The class strings below are written out IN FULL and never composed. Tailwind\n// scans source text, so `bg-${tone}-100` would emit nothing — and a tone name\n// arriving from a consumer's JSON schema is data the scanner never sees at all.\n// Every entry carries a `dark:` variant; the clicky-ui preset binds `dark:` to\n// [data-theme=\"dark\"], so tones track the theme switcher rather than the OS.\nexport type FieldTone =\n | \"neutral\"\n | \"slate\"\n | \"violet\"\n | \"amber\"\n | \"sky\"\n | \"teal\"\n | \"indigo\"\n | \"emerald\"\n | \"rose\";\n\nconst TONES: readonly FieldTone[] = [\n \"neutral\",\n \"slate\",\n \"violet\",\n \"amber\",\n \"sky\",\n \"teal\",\n \"indigo\",\n \"emerald\",\n \"rose\",\n];\n\n// Soft filled tile + inset ring — the accordion's leading glyph and enum chip.\nexport const TONE_GLYPH_CLASS: Record<FieldTone, string> = {\n neutral: \"bg-muted text-muted-foreground ring-border\",\n slate:\n \"bg-slate-100 text-slate-700 ring-slate-300/60 dark:bg-slate-400/10 dark:text-slate-300 dark:ring-slate-400/25\",\n violet:\n \"bg-violet-100 text-violet-700 ring-violet-300/60 dark:bg-violet-400/10 dark:text-violet-300 dark:ring-violet-400/25\",\n amber:\n \"bg-amber-100 text-amber-800 ring-amber-300/60 dark:bg-amber-400/10 dark:text-amber-300 dark:ring-amber-400/25\",\n sky: \"bg-sky-100 text-sky-700 ring-sky-300/60 dark:bg-sky-400/10 dark:text-sky-300 dark:ring-sky-400/25\",\n teal: \"bg-teal-100 text-teal-700 ring-teal-300/60 dark:bg-teal-400/10 dark:text-teal-300 dark:ring-teal-400/25\",\n indigo:\n \"bg-indigo-100 text-indigo-700 ring-indigo-300/60 dark:bg-indigo-400/10 dark:text-indigo-300 dark:ring-indigo-400/25\",\n emerald:\n \"bg-emerald-100 text-emerald-700 ring-emerald-300/60 dark:bg-emerald-400/10 dark:text-emerald-300 dark:ring-emerald-400/25\",\n rose: \"bg-rose-100 text-rose-700 ring-rose-300/60 dark:bg-rose-400/10 dark:text-rose-300 dark:ring-rose-400/25\",\n};\n\n// Left border accent — a stack of items is scannable by hue before you read it.\nexport const TONE_EDGE_CLASS: Record<FieldTone, string> = {\n neutral: \"border-l-border dark:border-l-border\",\n slate: \"border-l-slate-400 dark:border-l-slate-500\",\n violet: \"border-l-violet-400 dark:border-l-violet-500\",\n amber: \"border-l-amber-400 dark:border-l-amber-500\",\n sky: \"border-l-sky-400 dark:border-l-sky-500\",\n teal: \"border-l-teal-400 dark:border-l-teal-500\",\n indigo: \"border-l-indigo-400 dark:border-l-indigo-500\",\n emerald: \"border-l-emerald-400 dark:border-l-emerald-500\",\n rose: \"border-l-rose-400 dark:border-l-rose-500\",\n};\n\n// Solid dot — the compact legend/rail marker.\nexport const TONE_DOT_CLASS: Record<FieldTone, string> = {\n neutral: \"bg-muted-foreground dark:bg-muted-foreground\",\n slate: \"bg-slate-400 dark:bg-slate-500\",\n violet: \"bg-violet-400 dark:bg-violet-500\",\n amber: \"bg-amber-400 dark:bg-amber-500\",\n sky: \"bg-sky-400 dark:bg-sky-500\",\n teal: \"bg-teal-400 dark:bg-teal-500\",\n indigo: \"bg-indigo-400 dark:bg-indigo-500\",\n emerald: \"bg-emerald-400 dark:bg-emerald-500\",\n rose: \"bg-rose-400 dark:bg-rose-500\",\n};\n\nexport function isFieldTone(value: unknown): value is FieldTone {\n return typeof value === \"string\" && (TONES as readonly string[]).includes(value);\n}\n\n// normalizeTone coerces an unvalidated schema value to a known tone. A tone is\n// pure decoration, so an unrecognised one falls back to neutral rather than\n// failing the render.\nexport function normalizeTone(value: unknown): FieldTone {\n return isFieldTone(value) ? value : \"neutral\";\n}\n\nexport function fieldToneNames(): readonly FieldTone[] {\n return TONES;\n}\n"],"names":[],"mappings":";;AAqBA,MAAM,QAA8B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,MAAM,mBAA8C;AAAA,EACzD,SAAS;AAAA,EACT,OACE;AAAA,EACF,QACE;AAAA,EACF,OACE;AAAA,EACF,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QACE;AAAA,EACF,SACE;AAAA,EACF,MAAM;AACR;AAGO,MAAM,kBAA6C;AAAA,EACxD,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AACR;AAeO,SAAS,YAAY,OAAoC;AAC9D,SAAO,OAAO,UAAU,YAAa,MAA4B,SAAS,KAAK;AACjF;AAKO,SAAS,cAAc,OAA2B;AACvD,SAAO,YAAY,KAAK,IAAI,QAAQ;AACtC;;;;;"}
1
+ {"version":3,"file":"json-schema-form-tone.cjs","sources":["../../src/components/json-schema-form-tone.ts"],"sourcesContent":["// FieldTone is the closed colour vocabulary a schema may name via `x-enum-tones`\n// to give an enum value its own hue (e.g. a parameter's type). It extends the\n// `IconTone` union in ../data/Icon with the two extra hues a six-value enum needs,\n// so the two vocabularies read as one system.\n//\n// The class strings below are written out IN FULL and never composed. Tailwind\n// scans source text, so `bg-${tone}-100` would emit nothing — and a tone name\n// arriving from a consumer's JSON schema is data the scanner never sees at all.\n// Every entry carries a `dark:` variant; the clicky-ui preset binds `dark:` to\n// [data-theme=\"dark\"], so tones track the theme switcher rather than the OS.\nexport type FieldTone =\n | \"neutral\"\n | \"slate\"\n | \"violet\"\n | \"amber\"\n | \"sky\"\n | \"teal\"\n | \"indigo\"\n | \"emerald\"\n | \"rose\";\n\nconst TONES: readonly FieldTone[] = [\n \"neutral\",\n \"slate\",\n \"violet\",\n \"amber\",\n \"sky\",\n \"teal\",\n \"indigo\",\n \"emerald\",\n \"rose\",\n];\n\n// Soft filled tile + inset ring — the accordion's leading glyph and enum chip.\nexport const TONE_GLYPH_CLASS: Record<FieldTone, string> = {\n neutral: \"bg-muted text-muted-foreground ring-border\",\n slate:\n \"bg-slate-100 text-slate-700 ring-slate-300/60 dark:bg-slate-400/10 dark:text-slate-300 dark:ring-slate-400/25\",\n violet:\n \"bg-violet-100 text-violet-700 ring-violet-300/60 dark:bg-violet-400/10 dark:text-violet-300 dark:ring-violet-400/25\",\n amber:\n \"bg-amber-100 text-amber-800 ring-amber-300/60 dark:bg-amber-400/10 dark:text-amber-300 dark:ring-amber-400/25\",\n sky: \"bg-sky-100 text-sky-700 ring-sky-300/60 dark:bg-sky-400/10 dark:text-sky-300 dark:ring-sky-400/25\",\n teal: \"bg-teal-100 text-teal-700 ring-teal-300/60 dark:bg-teal-400/10 dark:text-teal-300 dark:ring-teal-400/25\",\n indigo:\n \"bg-indigo-100 text-indigo-700 ring-indigo-300/60 dark:bg-indigo-400/10 dark:text-indigo-300 dark:ring-indigo-400/25\",\n emerald:\n \"bg-emerald-100 text-emerald-700 ring-emerald-300/60 dark:bg-emerald-400/10 dark:text-emerald-300 dark:ring-emerald-400/25\",\n rose: \"bg-rose-100 text-rose-700 ring-rose-300/60 dark:bg-rose-400/10 dark:text-rose-300 dark:ring-rose-400/25\",\n};\n\n// Left border accent — a stack of items is scannable by hue before you read it.\nexport const TONE_EDGE_CLASS: Record<FieldTone, string> = {\n neutral: \"border-l-border dark:border-l-border\",\n slate: \"border-l-slate-400 dark:border-l-slate-500\",\n violet: \"border-l-violet-400 dark:border-l-violet-500\",\n amber: \"border-l-amber-400 dark:border-l-amber-500\",\n sky: \"border-l-sky-400 dark:border-l-sky-500\",\n teal: \"border-l-teal-400 dark:border-l-teal-500\",\n indigo: \"border-l-indigo-400 dark:border-l-indigo-500\",\n emerald: \"border-l-emerald-400 dark:border-l-emerald-500\",\n rose: \"border-l-rose-400 dark:border-l-rose-500\",\n};\n\n// Solid dot — the compact legend/rail marker.\nexport const TONE_DOT_CLASS: Record<FieldTone, string> = {\n neutral: \"bg-muted-foreground dark:bg-muted-foreground\",\n slate: \"bg-slate-400 dark:bg-slate-500\",\n violet: \"bg-violet-400 dark:bg-violet-500\",\n amber: \"bg-amber-400 dark:bg-amber-500\",\n sky: \"bg-sky-400 dark:bg-sky-500\",\n teal: \"bg-teal-400 dark:bg-teal-500\",\n indigo: \"bg-indigo-400 dark:bg-indigo-500\",\n emerald: \"bg-emerald-400 dark:bg-emerald-500\",\n rose: \"bg-rose-400 dark:bg-rose-500\",\n};\n\nexport function isFieldTone(value: unknown): value is FieldTone {\n return typeof value === \"string\" && (TONES as readonly string[]).includes(value);\n}\n\n// normalizeTone coerces an unvalidated schema value to a known tone. A tone is\n// pure decoration, so an unrecognised one falls back to neutral rather than\n// failing the render.\nexport function normalizeTone(value: unknown): FieldTone {\n return isFieldTone(value) ? value : \"neutral\";\n}\n\nexport function fieldToneNames(): readonly FieldTone[] {\n return TONES;\n}\n"],"names":[],"mappings":";;AAqBA,MAAM,QAA8B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,MAAM,mBAA8C;AAAA,EACzD,SAAS;AAAA,EACT,OACE;AAAA,EACF,QACE;AAAA,EACF,OACE;AAAA,EACF,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QACE;AAAA,EACF,SACE;AAAA,EACF,MAAM;AACR;AAGO,MAAM,kBAA6C;AAAA,EACxD,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AACR;AAGO,MAAM,iBAA4C;AAAA,EACvD,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AACR;AAEO,SAAS,YAAY,OAAoC;AAC9D,SAAO,OAAO,UAAU,YAAa,MAA4B,SAAS,KAAK;AACjF;AAKO,SAAS,cAAc,OAA2B;AACvD,SAAO,YAAY,KAAK,IAAI,QAAQ;AACtC;;;;;;"}
@@ -31,6 +31,17 @@ const TONE_EDGE_CLASS = {
31
31
  emerald: "border-l-emerald-400 dark:border-l-emerald-500",
32
32
  rose: "border-l-rose-400 dark:border-l-rose-500"
33
33
  };
34
+ const TONE_DOT_CLASS = {
35
+ neutral: "bg-muted-foreground dark:bg-muted-foreground",
36
+ slate: "bg-slate-400 dark:bg-slate-500",
37
+ violet: "bg-violet-400 dark:bg-violet-500",
38
+ amber: "bg-amber-400 dark:bg-amber-500",
39
+ sky: "bg-sky-400 dark:bg-sky-500",
40
+ teal: "bg-teal-400 dark:bg-teal-500",
41
+ indigo: "bg-indigo-400 dark:bg-indigo-500",
42
+ emerald: "bg-emerald-400 dark:bg-emerald-500",
43
+ rose: "bg-rose-400 dark:bg-rose-500"
44
+ };
34
45
  function isFieldTone(value) {
35
46
  return typeof value === "string" && TONES.includes(value);
36
47
  }
@@ -38,6 +49,7 @@ function normalizeTone(value) {
38
49
  return isFieldTone(value) ? value : "neutral";
39
50
  }
40
51
  export {
52
+ TONE_DOT_CLASS,
41
53
  TONE_EDGE_CLASS,
42
54
  TONE_GLYPH_CLASS,
43
55
  isFieldTone,
@@ -1 +1 @@
1
- {"version":3,"file":"json-schema-form-tone.js","sources":["../../src/components/json-schema-form-tone.ts"],"sourcesContent":["// FieldTone is the closed colour vocabulary a schema may name via `x-enum-tones`\n// to give an enum value its own hue (e.g. a parameter's type). It extends the\n// `IconTone` union in ../data/Icon with the two extra hues a six-value enum needs,\n// so the two vocabularies read as one system.\n//\n// The class strings below are written out IN FULL and never composed. Tailwind\n// scans source text, so `bg-${tone}-100` would emit nothing — and a tone name\n// arriving from a consumer's JSON schema is data the scanner never sees at all.\n// Every entry carries a `dark:` variant; the clicky-ui preset binds `dark:` to\n// [data-theme=\"dark\"], so tones track the theme switcher rather than the OS.\nexport type FieldTone =\n | \"neutral\"\n | \"slate\"\n | \"violet\"\n | \"amber\"\n | \"sky\"\n | \"teal\"\n | \"indigo\"\n | \"emerald\"\n | \"rose\";\n\nconst TONES: readonly FieldTone[] = [\n \"neutral\",\n \"slate\",\n \"violet\",\n \"amber\",\n \"sky\",\n \"teal\",\n \"indigo\",\n \"emerald\",\n \"rose\",\n];\n\n// Soft filled tile + inset ring — the accordion's leading glyph and enum chip.\nexport const TONE_GLYPH_CLASS: Record<FieldTone, string> = {\n neutral: \"bg-muted text-muted-foreground ring-border\",\n slate:\n \"bg-slate-100 text-slate-700 ring-slate-300/60 dark:bg-slate-400/10 dark:text-slate-300 dark:ring-slate-400/25\",\n violet:\n \"bg-violet-100 text-violet-700 ring-violet-300/60 dark:bg-violet-400/10 dark:text-violet-300 dark:ring-violet-400/25\",\n amber:\n \"bg-amber-100 text-amber-800 ring-amber-300/60 dark:bg-amber-400/10 dark:text-amber-300 dark:ring-amber-400/25\",\n sky: \"bg-sky-100 text-sky-700 ring-sky-300/60 dark:bg-sky-400/10 dark:text-sky-300 dark:ring-sky-400/25\",\n teal: \"bg-teal-100 text-teal-700 ring-teal-300/60 dark:bg-teal-400/10 dark:text-teal-300 dark:ring-teal-400/25\",\n indigo:\n \"bg-indigo-100 text-indigo-700 ring-indigo-300/60 dark:bg-indigo-400/10 dark:text-indigo-300 dark:ring-indigo-400/25\",\n emerald:\n \"bg-emerald-100 text-emerald-700 ring-emerald-300/60 dark:bg-emerald-400/10 dark:text-emerald-300 dark:ring-emerald-400/25\",\n rose: \"bg-rose-100 text-rose-700 ring-rose-300/60 dark:bg-rose-400/10 dark:text-rose-300 dark:ring-rose-400/25\",\n};\n\n// Left border accent — a stack of items is scannable by hue before you read it.\nexport const TONE_EDGE_CLASS: Record<FieldTone, string> = {\n neutral: \"border-l-border dark:border-l-border\",\n slate: \"border-l-slate-400 dark:border-l-slate-500\",\n violet: \"border-l-violet-400 dark:border-l-violet-500\",\n amber: \"border-l-amber-400 dark:border-l-amber-500\",\n sky: \"border-l-sky-400 dark:border-l-sky-500\",\n teal: \"border-l-teal-400 dark:border-l-teal-500\",\n indigo: \"border-l-indigo-400 dark:border-l-indigo-500\",\n emerald: \"border-l-emerald-400 dark:border-l-emerald-500\",\n rose: \"border-l-rose-400 dark:border-l-rose-500\",\n};\n\n// Solid dot — the compact legend/rail marker.\nexport const TONE_DOT_CLASS: Record<FieldTone, string> = {\n neutral: \"bg-muted-foreground dark:bg-muted-foreground\",\n slate: \"bg-slate-400 dark:bg-slate-500\",\n violet: \"bg-violet-400 dark:bg-violet-500\",\n amber: \"bg-amber-400 dark:bg-amber-500\",\n sky: \"bg-sky-400 dark:bg-sky-500\",\n teal: \"bg-teal-400 dark:bg-teal-500\",\n indigo: \"bg-indigo-400 dark:bg-indigo-500\",\n emerald: \"bg-emerald-400 dark:bg-emerald-500\",\n rose: \"bg-rose-400 dark:bg-rose-500\",\n};\n\nexport function isFieldTone(value: unknown): value is FieldTone {\n return typeof value === \"string\" && (TONES as readonly string[]).includes(value);\n}\n\n// normalizeTone coerces an unvalidated schema value to a known tone. A tone is\n// pure decoration, so an unrecognised one falls back to neutral rather than\n// failing the render.\nexport function normalizeTone(value: unknown): FieldTone {\n return isFieldTone(value) ? value : \"neutral\";\n}\n\nexport function fieldToneNames(): readonly FieldTone[] {\n return TONES;\n}\n"],"names":[],"mappings":"AAqBA,MAAM,QAA8B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,MAAM,mBAA8C;AAAA,EACzD,SAAS;AAAA,EACT,OACE;AAAA,EACF,QACE;AAAA,EACF,OACE;AAAA,EACF,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QACE;AAAA,EACF,SACE;AAAA,EACF,MAAM;AACR;AAGO,MAAM,kBAA6C;AAAA,EACxD,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AACR;AAeO,SAAS,YAAY,OAAoC;AAC9D,SAAO,OAAO,UAAU,YAAa,MAA4B,SAAS,KAAK;AACjF;AAKO,SAAS,cAAc,OAA2B;AACvD,SAAO,YAAY,KAAK,IAAI,QAAQ;AACtC;"}
1
+ {"version":3,"file":"json-schema-form-tone.js","sources":["../../src/components/json-schema-form-tone.ts"],"sourcesContent":["// FieldTone is the closed colour vocabulary a schema may name via `x-enum-tones`\n// to give an enum value its own hue (e.g. a parameter's type). It extends the\n// `IconTone` union in ../data/Icon with the two extra hues a six-value enum needs,\n// so the two vocabularies read as one system.\n//\n// The class strings below are written out IN FULL and never composed. Tailwind\n// scans source text, so `bg-${tone}-100` would emit nothing — and a tone name\n// arriving from a consumer's JSON schema is data the scanner never sees at all.\n// Every entry carries a `dark:` variant; the clicky-ui preset binds `dark:` to\n// [data-theme=\"dark\"], so tones track the theme switcher rather than the OS.\nexport type FieldTone =\n | \"neutral\"\n | \"slate\"\n | \"violet\"\n | \"amber\"\n | \"sky\"\n | \"teal\"\n | \"indigo\"\n | \"emerald\"\n | \"rose\";\n\nconst TONES: readonly FieldTone[] = [\n \"neutral\",\n \"slate\",\n \"violet\",\n \"amber\",\n \"sky\",\n \"teal\",\n \"indigo\",\n \"emerald\",\n \"rose\",\n];\n\n// Soft filled tile + inset ring — the accordion's leading glyph and enum chip.\nexport const TONE_GLYPH_CLASS: Record<FieldTone, string> = {\n neutral: \"bg-muted text-muted-foreground ring-border\",\n slate:\n \"bg-slate-100 text-slate-700 ring-slate-300/60 dark:bg-slate-400/10 dark:text-slate-300 dark:ring-slate-400/25\",\n violet:\n \"bg-violet-100 text-violet-700 ring-violet-300/60 dark:bg-violet-400/10 dark:text-violet-300 dark:ring-violet-400/25\",\n amber:\n \"bg-amber-100 text-amber-800 ring-amber-300/60 dark:bg-amber-400/10 dark:text-amber-300 dark:ring-amber-400/25\",\n sky: \"bg-sky-100 text-sky-700 ring-sky-300/60 dark:bg-sky-400/10 dark:text-sky-300 dark:ring-sky-400/25\",\n teal: \"bg-teal-100 text-teal-700 ring-teal-300/60 dark:bg-teal-400/10 dark:text-teal-300 dark:ring-teal-400/25\",\n indigo:\n \"bg-indigo-100 text-indigo-700 ring-indigo-300/60 dark:bg-indigo-400/10 dark:text-indigo-300 dark:ring-indigo-400/25\",\n emerald:\n \"bg-emerald-100 text-emerald-700 ring-emerald-300/60 dark:bg-emerald-400/10 dark:text-emerald-300 dark:ring-emerald-400/25\",\n rose: \"bg-rose-100 text-rose-700 ring-rose-300/60 dark:bg-rose-400/10 dark:text-rose-300 dark:ring-rose-400/25\",\n};\n\n// Left border accent — a stack of items is scannable by hue before you read it.\nexport const TONE_EDGE_CLASS: Record<FieldTone, string> = {\n neutral: \"border-l-border dark:border-l-border\",\n slate: \"border-l-slate-400 dark:border-l-slate-500\",\n violet: \"border-l-violet-400 dark:border-l-violet-500\",\n amber: \"border-l-amber-400 dark:border-l-amber-500\",\n sky: \"border-l-sky-400 dark:border-l-sky-500\",\n teal: \"border-l-teal-400 dark:border-l-teal-500\",\n indigo: \"border-l-indigo-400 dark:border-l-indigo-500\",\n emerald: \"border-l-emerald-400 dark:border-l-emerald-500\",\n rose: \"border-l-rose-400 dark:border-l-rose-500\",\n};\n\n// Solid dot — the compact legend/rail marker.\nexport const TONE_DOT_CLASS: Record<FieldTone, string> = {\n neutral: \"bg-muted-foreground dark:bg-muted-foreground\",\n slate: \"bg-slate-400 dark:bg-slate-500\",\n violet: \"bg-violet-400 dark:bg-violet-500\",\n amber: \"bg-amber-400 dark:bg-amber-500\",\n sky: \"bg-sky-400 dark:bg-sky-500\",\n teal: \"bg-teal-400 dark:bg-teal-500\",\n indigo: \"bg-indigo-400 dark:bg-indigo-500\",\n emerald: \"bg-emerald-400 dark:bg-emerald-500\",\n rose: \"bg-rose-400 dark:bg-rose-500\",\n};\n\nexport function isFieldTone(value: unknown): value is FieldTone {\n return typeof value === \"string\" && (TONES as readonly string[]).includes(value);\n}\n\n// normalizeTone coerces an unvalidated schema value to a known tone. A tone is\n// pure decoration, so an unrecognised one falls back to neutral rather than\n// failing the render.\nexport function normalizeTone(value: unknown): FieldTone {\n return isFieldTone(value) ? value : \"neutral\";\n}\n\nexport function fieldToneNames(): readonly FieldTone[] {\n return TONES;\n}\n"],"names":[],"mappings":"AAqBA,MAAM,QAA8B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,MAAM,mBAA8C;AAAA,EACzD,SAAS;AAAA,EACT,OACE;AAAA,EACF,QACE;AAAA,EACF,OACE;AAAA,EACF,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QACE;AAAA,EACF,SACE;AAAA,EACF,MAAM;AACR;AAGO,MAAM,kBAA6C;AAAA,EACxD,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AACR;AAGO,MAAM,iBAA4C;AAAA,EACvD,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AACR;AAEO,SAAS,YAAY,OAAoC;AAC9D,SAAO,OAAO,UAAU,YAAa,MAA4B,SAAS,KAAK;AACjF;AAKO,SAAS,cAAc,OAA2B;AACvD,SAAO,YAAY,KAAK,IAAI,QAAQ;AACtC;"}
@@ -48,6 +48,7 @@ export interface JsonSchemaProperty {
48
48
  "x-md-editor"?: MdxEditorPluginOptions;
49
49
  "x-help"?: JsonSchemaHelpBlock;
50
50
  "x-hidden"?: boolean;
51
+ "x-hidden-by"?: string;
51
52
  "x-disabled"?: boolean;
52
53
  "x-on-change"?: ChangeListener[];
53
54
  "x-on-load"?: ChangeListener[];
@@ -1 +1 @@
1
- {"version":3,"file":"json-schema-form-types.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"json-schema-form-types.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-types.ts"],"names":[],"mappings":"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"}
@@ -3,23 +3,21 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const react = require("react");
5
5
  const utils = require("../lib/utils.cjs");
6
+ const IconButton = require("../components/IconButton.cjs");
7
+ const graphColumnsLayout = require("./graph-columns-layout.cjs");
6
8
  const graphLayout = require("./graph-layout.cjs");
9
+ const GraphDiagramEdges = require("./GraphDiagramEdges.cjs");
10
+ const GraphDiagramNodes = require("./GraphDiagramNodes.cjs");
11
+ const graphDiagramModel = require("./graph-diagram-model.cjs");
12
+ const useEdgeFocus = require("./use-edge-focus.cjs");
13
+ const usePanZoom = require("./use-pan-zoom.cjs");
14
+ const graphEdgeRouting = require("./graph-edge-routing.cjs");
15
+ const UiZoomOut = require("../icons/components/UiZoomOut.cjs");
16
+ const UiZoomIn = require("../icons/components/UiZoomIn.cjs");
17
+ const UiFullscreen = require("../icons/components/UiFullscreen.cjs");
18
+ const UiHome = require("../icons/components/UiHome.cjs");
7
19
  const DEFAULT_NODE_WIDTH = 168;
8
20
  const DEFAULT_NODE_HEIGHT = 60;
9
- const TONE_TEXT_CLASS = {
10
- neutral: "text-muted-foreground",
11
- success: "text-emerald-600 dark:text-emerald-400",
12
- danger: "text-red-600 dark:text-red-400",
13
- warning: "text-amber-600 dark:text-amber-400",
14
- info: "text-sky-600 dark:text-sky-400"
15
- };
16
- const TONE_NODE_CLASS = {
17
- neutral: "border-border bg-card text-foreground",
18
- success: "border-emerald-500/50 bg-emerald-500/10 text-foreground",
19
- danger: "border-red-500/50 bg-red-500/10 text-foreground",
20
- warning: "border-amber-500/50 bg-amber-500/10 text-foreground",
21
- info: "border-sky-500/50 bg-sky-500/10 text-foreground"
22
- };
23
21
  function assertEdgesReferenceKnownNodes(nodes, edges) {
24
22
  const ids = new Set(nodes.map((node) => node.id));
25
23
  for (const edge of edges) {
@@ -31,10 +29,31 @@ function assertEdgesReferenceKnownNodes(nodes, edges) {
31
29
  }
32
30
  }
33
31
  }
34
- function layoutNodes(layout, nodes, nodeWidth, nodeHeight) {
32
+ function requireLevel(node) {
33
+ if (node.level === void 0 || !Number.isFinite(node.level)) {
34
+ throw new Error(`GraphDiagram: node "${node.id}" needs a finite level for the "columns" layout`);
35
+ }
36
+ return node.level;
37
+ }
38
+ function layoutNodes(nodes, edges, { layout, nodeWidth, nodeHeight, columnGap, rowGap }) {
35
39
  switch (layout) {
36
40
  case "ring":
37
- return graphLayout.ringLayout(nodes, { nodeWidth, nodeHeight });
41
+ return { ...graphLayout.ringLayout(nodes, { nodeWidth, nodeHeight }), groups: [] };
42
+ case "columns":
43
+ return graphColumnsLayout.columnsLayout(
44
+ nodes.map((node) => ({
45
+ id: node.id,
46
+ level: requireLevel(node),
47
+ ...node.group !== void 0 ? { group: node.group } : {}
48
+ })),
49
+ edges,
50
+ {
51
+ nodeWidth,
52
+ nodeHeight,
53
+ ...columnGap !== void 0 ? { columnGap } : {},
54
+ ...rowGap !== void 0 ? { rowGap } : {}
55
+ }
56
+ );
38
57
  default:
39
58
  throw new Error(`GraphDiagram: unknown layout "${layout}"`);
40
59
  }
@@ -42,25 +61,25 @@ function layoutNodes(layout, nodes, nodeWidth, nodeHeight) {
42
61
  function toPercent(value, extent) {
43
62
  return `${value / extent * 100}%`;
44
63
  }
45
- function requireRoute(routes, edgeId) {
46
- const route = routes[edgeId];
47
- if (!route) {
48
- throw new Error(`GraphDiagram: no route computed for edge "${edgeId}"`);
49
- }
50
- return route;
64
+ function stageStyle(size, natural, panZoom) {
65
+ if (!natural) return { aspectRatio: `${size.width} / ${size.height}` };
66
+ if (!panZoom) return size;
67
+ const { x, y, scale } = panZoom.transform;
68
+ return { ...size, transform: `translate(${x}px, ${y}px) scale(${scale})`, transformOrigin: "0 0" };
51
69
  }
52
- function requirePosition(positions, nodeId) {
53
- const position = positions[nodeId];
54
- if (!position) {
55
- throw new Error(`GraphDiagram: no layout position computed for node "${nodeId}"`);
56
- }
57
- return position;
70
+ function ZoomControls({ panZoom, resettable }) {
71
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute right-2 top-2 flex cursor-default gap-0.5 rounded-md border border-border bg-background p-0.5 shadow-sm", children: [
72
+ /* @__PURE__ */ jsxRuntime.jsx(IconButton.IconButton, { icon: UiZoomOut.UiZoomOut, label: "Zoom out", className: "size-6", onClick: panZoom.zoomOut }),
73
+ /* @__PURE__ */ jsxRuntime.jsx(IconButton.IconButton, { icon: UiZoomIn.UiZoomIn, label: "Zoom in", className: "size-6", onClick: panZoom.zoomIn }),
74
+ /* @__PURE__ */ jsxRuntime.jsx(IconButton.IconButton, { icon: UiFullscreen.UiFullscreen, label: "Fit to view", className: "size-6", onClick: panZoom.fit }),
75
+ resettable && /* @__PURE__ */ jsxRuntime.jsx(IconButton.IconButton, { icon: UiHome.UiHome, label: "Reset view", className: "size-6", onClick: panZoom.reset })
76
+ ] });
58
77
  }
59
- function handleNodeKeyDown(event, select) {
60
- if (event.key === "Enter" || event.key === " ") {
61
- event.preventDefault();
62
- select();
63
- }
78
+ function openingFit(positions, fitMinScale, focusId) {
79
+ return {
80
+ ...fitMinScale !== void 0 ? { minScale: fitMinScale } : {},
81
+ ...focusId !== void 0 ? { focus: graphDiagramModel.requireEntry(positions, focusId, "layout position") } : {}
82
+ };
64
83
  }
65
84
  function GraphDiagram({
66
85
  nodes,
@@ -68,132 +87,100 @@ function GraphDiagram({
68
87
  layout = "ring",
69
88
  selectedId,
70
89
  onNodeSelect,
90
+ onNodeExpand,
91
+ selectedEdgeId,
92
+ onEdgeSelect,
93
+ edgeFocus = "auto",
94
+ groups,
71
95
  nodeWidth = DEFAULT_NODE_WIDTH,
72
96
  nodeHeight = DEFAULT_NODE_HEIGHT,
97
+ columnGap,
98
+ rowGap,
99
+ zoomable = false,
100
+ fitMinScale,
101
+ focusId,
73
102
  maxHeight,
74
103
  ariaLabel,
75
104
  className
76
105
  }) {
77
106
  assertEdgesReferenceKnownNodes(nodes, edges);
78
- const { width, height, positions } = react.useMemo(
79
- () => layoutNodes(layout, nodes, nodeWidth, nodeHeight),
80
- [layout, nodes, nodeWidth, nodeHeight]
107
+ const markerPrefix = `graph-diagram-${react.useId().replace(/[^a-zA-Z0-9_-]/g, "")}`;
108
+ const { width, height, positions, groups: groupBoxes } = react.useMemo(
109
+ () => layoutNodes(nodes, edges, { layout, nodeWidth, nodeHeight, columnGap, rowGap }),
110
+ [layout, nodes, edges, nodeWidth, nodeHeight, columnGap, rowGap]
81
111
  );
82
112
  const routes = react.useMemo(
83
- () => graphLayout.routeEdges(edges, positions, { nodeWidth, nodeHeight }),
84
- [edges, positions, nodeWidth, nodeHeight]
85
- );
86
- const tones = react.useMemo(
87
- () => Array.from(new Set(edges.map((edge) => edge.tone ?? "neutral"))),
88
- [edges]
113
+ () => graphEdgeRouting.routeEdges(edges, positions, { nodeWidth, nodeHeight }, { anchor: layout === "columns" ? "side" : "center" }),
114
+ [edges, positions, nodeWidth, nodeHeight, layout]
89
115
  );
90
- return /* @__PURE__ */ jsxRuntime.jsx(
116
+ const panZoom = usePanZoom.usePanZoom({
117
+ enabled: zoomable,
118
+ contentWidth: width,
119
+ contentHeight: height,
120
+ opening: openingFit(positions, fitMinScale, focusId)
121
+ });
122
+ const natural = layout === "columns" || zoomable;
123
+ const place = natural ? ({ x, y }) => ({ left: x, top: y }) : ({ x, y }) => ({ left: toPercent(x, width), top: toPercent(y, height) });
124
+ const focus = useEdgeFocus.useEdgeFocus({ mode: edgeFocus, edges, selectedId, selectedEdgeId });
125
+ const edgeSelection = { selectedEdgeId, onEdgeSelect, focus: focus.state };
126
+ return /* @__PURE__ */ jsxRuntime.jsxs(
91
127
  "div",
92
128
  {
93
- className: utils.cn("w-full overflow-auto", className),
129
+ ref: panZoom.viewportRef,
130
+ className: utils.cn(
131
+ "w-full",
132
+ zoomable ? "relative touch-none overflow-hidden" : "overflow-auto",
133
+ zoomable && (panZoom.panning ? "cursor-grabbing select-none" : "cursor-grab"),
134
+ className
135
+ ),
94
136
  style: maxHeight != null ? { maxHeight } : void 0,
95
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative w-full", style: { aspectRatio: `${width} / ${height}` }, children: [
137
+ ...panZoom.handlers,
138
+ children: [
96
139
  /* @__PURE__ */ jsxRuntime.jsxs(
97
- "svg",
140
+ "div",
98
141
  {
99
- viewBox: `0 0 ${width} ${height}`,
100
- preserveAspectRatio: "xMidYMid meet",
101
- role: "img",
102
- "aria-label": ariaLabel,
103
- className: "absolute inset-0 h-full w-full",
142
+ ref: panZoom.contentRef,
143
+ "data-graph-stage": "",
144
+ className: utils.cn("relative", natural ? !zoomable && "mx-auto" : "w-full"),
145
+ style: stageStyle({ width, height }, natural, zoomable ? panZoom : void 0),
104
146
  children: [
105
- /* @__PURE__ */ jsxRuntime.jsx("defs", { children: tones.map((tone) => /* @__PURE__ */ jsxRuntime.jsx(
106
- "marker",
147
+ /* @__PURE__ */ jsxRuntime.jsx(GraphDiagramNodes.GraphDiagramGroupBoxes, { boxes: groupBoxes, groups }),
148
+ /* @__PURE__ */ jsxRuntime.jsx(
149
+ GraphDiagramEdges.GraphDiagramEdgePaths,
107
150
  {
108
- id: `graph-diagram-arrow-${tone}`,
109
- viewBox: "0 0 10 10",
110
- refX: 8,
111
- refY: 5,
112
- markerWidth: 7,
113
- markerHeight: 7,
114
- orient: "auto-start-reverse",
115
- children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M0,0 L10,5 L0,10 z", className: utils.cn(TONE_TEXT_CLASS[tone], "fill-current") })
116
- },
117
- tone
118
- )) }),
119
- edges.map((edge) => {
120
- const tone = edge.tone ?? "neutral";
121
- return /* @__PURE__ */ jsxRuntime.jsx(
122
- "path",
151
+ edges,
152
+ nodes,
153
+ routes,
154
+ width,
155
+ height,
156
+ ariaLabel,
157
+ markerPrefix,
158
+ onEdgeHover: focus.onEdgeHover,
159
+ ...edgeSelection
160
+ }
161
+ ),
162
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pointer-events-none absolute inset-0", children: [
163
+ /* @__PURE__ */ jsxRuntime.jsx(GraphDiagramEdges.GraphDiagramEdgeLabels, { edges, routes, place, spread: natural, ...edgeSelection }),
164
+ /* @__PURE__ */ jsxRuntime.jsx(
165
+ GraphDiagramNodes.GraphDiagramNodes,
123
166
  {
124
- d: requireRoute(routes, edge.id).path,
125
- fill: "none",
126
- stroke: "currentColor",
127
- strokeWidth: 1.5,
128
- strokeDasharray: edge.dashed ? "5 4" : void 0,
129
- markerEnd: `url(#graph-diagram-arrow-${tone})`,
130
- className: TONE_TEXT_CLASS[tone]
131
- },
132
- edge.id
133
- );
134
- })
167
+ nodes,
168
+ positions,
169
+ place,
170
+ nodeWidth,
171
+ nodeHeight,
172
+ selectedId,
173
+ onNodeSelect,
174
+ onNodeExpand,
175
+ onNodeHover: focus.onNodeHover
176
+ }
177
+ )
178
+ ] })
135
179
  ]
136
180
  }
137
181
  ),
138
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute inset-0", children: [
139
- edges.map((edge) => {
140
- if (!edge.label) return null;
141
- const route = requireRoute(routes, edge.id);
142
- const tone = edge.tone ?? "neutral";
143
- return /* @__PURE__ */ jsxRuntime.jsx(
144
- "span",
145
- {
146
- className: utils.cn(
147
- "absolute -translate-x-1/2 -translate-y-1/2 whitespace-nowrap rounded-full border border-border bg-background px-1.5 py-0.5 text-[10px] font-medium shadow-sm",
148
- TONE_TEXT_CLASS[tone]
149
- ),
150
- style: { left: toPercent(route.labelX, width), top: toPercent(route.labelY, height) },
151
- children: edge.label
152
- },
153
- `label-${edge.id}`
154
- );
155
- }),
156
- nodes.map((node) => {
157
- const position = requirePosition(positions, node.id);
158
- const selected = selectedId != null && node.id === selectedId;
159
- const tone = node.tone ?? "neutral";
160
- const shapeClass = node.shape === "pill" ? "rounded-full" : "rounded-lg";
161
- const interactive = onNodeSelect != null;
162
- return /* @__PURE__ */ jsxRuntime.jsxs(
163
- "div",
164
- {
165
- className: utils.cn(
166
- "absolute flex -translate-x-1/2 -translate-y-1/2 flex-col items-center justify-center gap-0.5 border px-3 py-1.5 text-center text-xs shadow-sm",
167
- shapeClass,
168
- TONE_NODE_CLASS[tone],
169
- selected && "ring-2 ring-primary ring-offset-2 ring-offset-background",
170
- interactive && "cursor-pointer"
171
- ),
172
- style: {
173
- left: toPercent(position.x, width),
174
- top: toPercent(position.y, height),
175
- width: nodeWidth,
176
- height: nodeHeight
177
- },
178
- ...interactive ? {
179
- role: "button",
180
- tabIndex: 0,
181
- "aria-pressed": selected,
182
- onClick: () => onNodeSelect(node.id),
183
- onKeyDown: (event) => handleNodeKeyDown(event, () => onNodeSelect(node.id))
184
- } : {},
185
- "aria-label": node.ariaLabel,
186
- children: [
187
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "line-clamp-2 font-medium leading-tight", children: node.label }),
188
- node.detail != null && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "line-clamp-1 text-[10px] leading-tight text-muted-foreground", children: node.detail }),
189
- node.badge != null && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mt-0.5", children: node.badge })
190
- ]
191
- },
192
- node.id
193
- );
194
- })
195
- ] })
196
- ] })
182
+ zoomable && /* @__PURE__ */ jsxRuntime.jsx(ZoomControls, { panZoom, resettable: fitMinScale !== void 0 })
183
+ ]
197
184
  }
198
185
  );
199
186
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GraphDiagram.cjs","sources":["../../src/data/GraphDiagram.tsx"],"sourcesContent":["import { useMemo, type KeyboardEvent, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport type { BadgeTone } from \"./Badge\";\nimport { ringLayout, routeEdges, type GraphLayoutPosition } from \"./graph-layout\";\n\n// GraphDiagram renders a generic, type-agnostic node/edge diagram — a small\n// cycle of resources and processes, a dependency graph, any relationship that\n// doesn't read well as a left-to-right column layout because it has back\n// edges or reciprocal pairs. It knows nothing about the domain: a producer\n// maps its data into GraphDiagramNode/GraphDiagramEdge and gets the same\n// ring layout, curved-edge routing, and selection behaviour.\n\nexport interface GraphDiagramNode {\n id: string;\n label: ReactNode;\n detail?: ReactNode;\n badge?: ReactNode;\n tone?: BadgeTone;\n shape?: \"pill\" | \"rect\";\n /** Accessible name for the node, when `label` alone isn't enough. */\n ariaLabel?: string;\n}\n\nexport interface GraphDiagramEdge {\n id: string;\n from: string;\n to: string;\n label?: string;\n tone?: BadgeTone;\n dashed?: boolean;\n}\n\nexport type GraphDiagramLayout = \"ring\";\n\nexport interface GraphDiagramProps {\n nodes: GraphDiagramNode[];\n edges: GraphDiagramEdge[];\n /** Only \"ring\" today; a \"columns\" layout is planned. */\n layout?: GraphDiagramLayout;\n selectedId?: string;\n onNodeSelect?: (id: string) => void;\n nodeWidth?: number;\n nodeHeight?: number;\n maxHeight?: number | string;\n ariaLabel: string;\n className?: string;\n}\n\nconst DEFAULT_NODE_WIDTH = 168;\nconst DEFAULT_NODE_HEIGHT = 60;\n\nconst TONE_TEXT_CLASS: Record<BadgeTone, string> = {\n neutral: \"text-muted-foreground\",\n success: \"text-emerald-600 dark:text-emerald-400\",\n danger: \"text-red-600 dark:text-red-400\",\n warning: \"text-amber-600 dark:text-amber-400\",\n info: \"text-sky-600 dark:text-sky-400\",\n};\n\nconst TONE_NODE_CLASS: Record<BadgeTone, string> = {\n neutral: \"border-border bg-card text-foreground\",\n success: \"border-emerald-500/50 bg-emerald-500/10 text-foreground\",\n danger: \"border-red-500/50 bg-red-500/10 text-foreground\",\n warning: \"border-amber-500/50 bg-amber-500/10 text-foreground\",\n info: \"border-sky-500/50 bg-sky-500/10 text-foreground\",\n};\n\nfunction assertEdgesReferenceKnownNodes(nodes: GraphDiagramNode[], edges: GraphDiagramEdge[]): void {\n const ids = new Set(nodes.map((node) => node.id));\n for (const edge of edges) {\n if (!ids.has(edge.from)) {\n throw new Error(`GraphDiagram: edge \"${edge.id}\" references unknown node \"${edge.from}\"`);\n }\n if (!ids.has(edge.to)) {\n throw new Error(`GraphDiagram: edge \"${edge.id}\" references unknown node \"${edge.to}\"`);\n }\n }\n}\n\nfunction layoutNodes(\n layout: GraphDiagramLayout,\n nodes: GraphDiagramNode[],\n nodeWidth: number,\n nodeHeight: number,\n): { width: number; height: number; positions: Record<string, GraphLayoutPosition> } {\n switch (layout) {\n case \"ring\":\n return ringLayout(nodes, { nodeWidth, nodeHeight });\n default:\n throw new Error(`GraphDiagram: unknown layout \"${layout satisfies never}\"`);\n }\n}\n\nfunction toPercent(value: number, extent: number): string {\n return `${(value / extent) * 100}%`;\n}\n\nfunction requireRoute<T>(routes: Record<string, T>, edgeId: string): T {\n const route = routes[edgeId];\n if (!route) {\n throw new Error(`GraphDiagram: no route computed for edge \"${edgeId}\"`);\n }\n return route;\n}\n\nfunction requirePosition(\n positions: Record<string, GraphLayoutPosition>,\n nodeId: string,\n): GraphLayoutPosition {\n const position = positions[nodeId];\n if (!position) {\n throw new Error(`GraphDiagram: no layout position computed for node \"${nodeId}\"`);\n }\n return position;\n}\n\nfunction handleNodeKeyDown(event: KeyboardEvent<HTMLDivElement>, select: () => void): void {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n select();\n }\n}\n\nexport function GraphDiagram({\n nodes,\n edges,\n layout = \"ring\",\n selectedId,\n onNodeSelect,\n nodeWidth = DEFAULT_NODE_WIDTH,\n nodeHeight = DEFAULT_NODE_HEIGHT,\n maxHeight,\n ariaLabel,\n className,\n}: GraphDiagramProps) {\n assertEdgesReferenceKnownNodes(nodes, edges);\n\n const { width, height, positions } = useMemo(\n () => layoutNodes(layout, nodes, nodeWidth, nodeHeight),\n [layout, nodes, nodeWidth, nodeHeight],\n );\n\n const routes = useMemo(\n () => routeEdges(edges, positions, { nodeWidth, nodeHeight }),\n [edges, positions, nodeWidth, nodeHeight],\n );\n\n const tones = useMemo(\n () => Array.from(new Set(edges.map((edge) => edge.tone ?? \"neutral\"))),\n [edges],\n );\n\n return (\n <div\n className={cn(\"w-full overflow-auto\", className)}\n style={maxHeight != null ? { maxHeight } : undefined}\n >\n <div className=\"relative w-full\" style={{ aspectRatio: `${width} / ${height}` }}>\n <svg\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"xMidYMid meet\"\n role=\"img\"\n aria-label={ariaLabel}\n className=\"absolute inset-0 h-full w-full\"\n >\n <defs>\n {tones.map((tone) => (\n <marker\n key={tone}\n id={`graph-diagram-arrow-${tone}`}\n viewBox=\"0 0 10 10\"\n refX={8}\n refY={5}\n markerWidth={7}\n markerHeight={7}\n orient=\"auto-start-reverse\"\n >\n <path d=\"M0,0 L10,5 L0,10 z\" className={cn(TONE_TEXT_CLASS[tone], \"fill-current\")} />\n </marker>\n ))}\n </defs>\n {edges.map((edge) => {\n const tone = edge.tone ?? \"neutral\";\n return (\n <path\n key={edge.id}\n d={requireRoute(routes, edge.id).path}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeDasharray={edge.dashed ? \"5 4\" : undefined}\n markerEnd={`url(#graph-diagram-arrow-${tone})`}\n className={TONE_TEXT_CLASS[tone]}\n />\n );\n })}\n </svg>\n\n <div className=\"absolute inset-0\">\n {edges.map((edge) => {\n if (!edge.label) return null;\n const route = requireRoute(routes, edge.id);\n const tone = edge.tone ?? \"neutral\";\n return (\n <span\n key={`label-${edge.id}`}\n className={cn(\n \"absolute -translate-x-1/2 -translate-y-1/2 whitespace-nowrap rounded-full border border-border bg-background px-1.5 py-0.5 text-[10px] font-medium shadow-sm\",\n TONE_TEXT_CLASS[tone],\n )}\n style={{ left: toPercent(route.labelX, width), top: toPercent(route.labelY, height) }}\n >\n {edge.label}\n </span>\n );\n })}\n\n {nodes.map((node) => {\n const position = requirePosition(positions, node.id);\n const selected = selectedId != null && node.id === selectedId;\n const tone = node.tone ?? \"neutral\";\n const shapeClass = node.shape === \"pill\" ? \"rounded-full\" : \"rounded-lg\";\n const interactive = onNodeSelect != null;\n\n return (\n <div\n key={node.id}\n className={cn(\n \"absolute flex -translate-x-1/2 -translate-y-1/2 flex-col items-center justify-center gap-0.5 border px-3 py-1.5 text-center text-xs shadow-sm\",\n shapeClass,\n TONE_NODE_CLASS[tone],\n selected && \"ring-2 ring-primary ring-offset-2 ring-offset-background\",\n interactive && \"cursor-pointer\",\n )}\n style={{\n left: toPercent(position.x, width),\n top: toPercent(position.y, height),\n width: nodeWidth,\n height: nodeHeight,\n }}\n {...(interactive\n ? {\n role: \"button\" as const,\n tabIndex: 0,\n \"aria-pressed\": selected,\n onClick: () => onNodeSelect(node.id),\n onKeyDown: (event: KeyboardEvent<HTMLDivElement>) =>\n handleNodeKeyDown(event, () => onNodeSelect(node.id)),\n }\n : {})}\n aria-label={node.ariaLabel}\n >\n <span className=\"line-clamp-2 font-medium leading-tight\">{node.label}</span>\n {node.detail != null && (\n <span className=\"line-clamp-1 text-[10px] leading-tight text-muted-foreground\">\n {node.detail}\n </span>\n )}\n {node.badge != null && <span className=\"mt-0.5\">{node.badge}</span>}\n </div>\n );\n })}\n </div>\n </div>\n </div>\n );\n}\n"],"names":["ringLayout","useMemo","routeEdges","jsx","cn","jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"GraphDiagram.cjs","sources":["../../src/data/GraphDiagram.tsx"],"sourcesContent":["import { useId, useMemo, type CSSProperties } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { IconButton } from \"../components/IconButton\";\nimport { UiFullscreen, UiHome, UiZoomIn, UiZoomOut } from \"../icons\";\nimport { columnsLayout, type ColumnsLayoutResult } from \"./graph-columns-layout\";\nimport { ringLayout, routeEdges, type GraphLayoutPosition } from \"./graph-layout\";\nimport { GraphDiagramEdgeLabels, GraphDiagramEdgePaths } from \"./GraphDiagramEdges\";\nimport { GraphDiagramGroupBoxes, GraphDiagramNodes } from \"./GraphDiagramNodes\";\nimport {\n requireEntry,\n type GraphDiagramEdge,\n type GraphDiagramEdgeFocus,\n type GraphDiagramGroup,\n type GraphDiagramLayout,\n type GraphDiagramNode,\n type GraphPlacer,\n} from \"./graph-diagram-model\";\nimport { useEdgeFocus } from \"./use-edge-focus\";\nimport { usePanZoom, type FitOptions, type PanZoom } from \"./use-pan-zoom\";\n\nexport type {\n GraphDiagramEdge,\n GraphDiagramEdgeFocus,\n GraphDiagramGroup,\n GraphDiagramLayout,\n GraphDiagramNode,\n} from \"./graph-diagram-model\";\n\n// GraphDiagram renders a generic, type-agnostic node/edge diagram. It knows\n// nothing about the domain: a producer maps its data into\n// GraphDiagramNode/GraphDiagramEdge and gets layout, edge routing and\n// selection behaviour.\n//\n// \"ring\" suits a small cycle of resources and processes — relationships with\n// back edges or reciprocal pairs. \"columns\" suits a directed graph with a\n// natural depth (a call graph, a dependency chain): nodes sit in the column of\n// their `level`, grouped and boxed by `group`.\n//\n// The \"columns\" layout, and any zoomable diagram, is drawn at its natural\n// pixel size so node boxes, edges and group boxes share one coordinate system\n// at every container width and zoom level. A non-zoomable \"ring\" keeps scaling\n// its node positions to the container width.\n\nexport interface GraphDiagramProps {\n nodes: GraphDiagramNode[];\n edges: GraphDiagramEdge[];\n /** Defaults to \"ring\". \"columns\" needs a `level` on every node. */\n layout?: GraphDiagramLayout;\n selectedId?: string;\n onNodeSelect?: (id: string) => void;\n /** Called by a node's `+N` control (see `expandCount`); does not select the node. */\n onNodeExpand?: (id: string) => void;\n selectedEdgeId?: string;\n /** Makes edges, and their label pills, selectable. */\n onEdgeSelect?: (id: string) => void;\n /**\n * Whether an edge shows its pill only while in focus, and fades while another is. Defaults to\n * \"auto\": a diagram with more than 32 edges is focused, a smaller one shows everything.\n */\n edgeFocus?: GraphDiagramEdgeFocus;\n /** \"columns\" layout: captions for the group rectangles. A group without an entry shows its id. */\n groups?: GraphDiagramGroup[];\n nodeWidth?: number;\n nodeHeight?: number;\n /** \"columns\" layout: horizontal gap between columns in px. Leave room for edge label pills. */\n columnGap?: number;\n /** \"columns\" layout: vertical gap between stacked nodes in px. */\n rowGap?: number;\n /** Ctrl/meta + wheel (or pinch) zooms, dragging the background pans, and zoom controls appear. */\n zoomable?: boolean;\n /**\n * Zoomable: the smallest scale the diagram opens at, so its text stays readable. A diagram too\n * large for it opens overflowing, centred on `focusId`, and is panned to reach the rest. `Fit to\n * view` still shows everything, and `Reset view` returns here. Unset, the diagram opens whole.\n */\n fitMinScale?: number;\n /** Zoomable: the node an overflowing diagram opens centred on. Defaults to the diagram's centre. */\n focusId?: string;\n maxHeight?: number | string;\n ariaLabel: string;\n className?: string;\n}\n\nconst DEFAULT_NODE_WIDTH = 168;\nconst DEFAULT_NODE_HEIGHT = 60;\n\ninterface LayoutOptions {\n layout: GraphDiagramLayout;\n nodeWidth: number;\n nodeHeight: number;\n columnGap: number | undefined;\n rowGap: number | undefined;\n}\n\nfunction assertEdgesReferenceKnownNodes(nodes: GraphDiagramNode[], edges: GraphDiagramEdge[]): void {\n const ids = new Set(nodes.map((node) => node.id));\n for (const edge of edges) {\n if (!ids.has(edge.from)) {\n throw new Error(`GraphDiagram: edge \"${edge.id}\" references unknown node \"${edge.from}\"`);\n }\n if (!ids.has(edge.to)) {\n throw new Error(`GraphDiagram: edge \"${edge.id}\" references unknown node \"${edge.to}\"`);\n }\n }\n}\n\nfunction requireLevel(node: GraphDiagramNode): number {\n if (node.level === undefined || !Number.isFinite(node.level)) {\n throw new Error(`GraphDiagram: node \"${node.id}\" needs a finite level for the \"columns\" layout`);\n }\n return node.level;\n}\n\nfunction layoutNodes(\n nodes: GraphDiagramNode[],\n edges: GraphDiagramEdge[],\n { layout, nodeWidth, nodeHeight, columnGap, rowGap }: LayoutOptions,\n): ColumnsLayoutResult {\n switch (layout) {\n case \"ring\":\n return { ...ringLayout(nodes, { nodeWidth, nodeHeight }), groups: [] };\n case \"columns\":\n return columnsLayout(\n nodes.map((node) => ({\n id: node.id,\n level: requireLevel(node),\n ...(node.group !== undefined ? { group: node.group } : {}),\n })),\n edges,\n {\n nodeWidth,\n nodeHeight,\n ...(columnGap !== undefined ? { columnGap } : {}),\n ...(rowGap !== undefined ? { rowGap } : {}),\n },\n );\n default:\n throw new Error(`GraphDiagram: unknown layout \"${layout satisfies never}\"`);\n }\n}\n\nfunction toPercent(value: number, extent: number): string {\n return `${(value / extent) * 100}%`;\n}\n\nfunction stageStyle(size: { width: number; height: number }, natural: boolean, panZoom: PanZoom | undefined): CSSProperties {\n if (!natural) return { aspectRatio: `${size.width} / ${size.height}` };\n if (!panZoom) return size;\n const { x, y, scale } = panZoom.transform;\n return { ...size, transform: `translate(${x}px, ${y}px) scale(${scale})`, transformOrigin: \"0 0\" };\n}\n\n/** `resettable`: the diagram opens at another view than the whole of it, so there is one to return to. */\nfunction ZoomControls({ panZoom, resettable }: { panZoom: PanZoom; resettable: boolean }) {\n return (\n <div className=\"absolute right-2 top-2 flex cursor-default gap-0.5 rounded-md border border-border bg-background p-0.5 shadow-sm\">\n <IconButton icon={UiZoomOut} label=\"Zoom out\" className=\"size-6\" onClick={panZoom.zoomOut} />\n <IconButton icon={UiZoomIn} label=\"Zoom in\" className=\"size-6\" onClick={panZoom.zoomIn} />\n <IconButton icon={UiFullscreen} label=\"Fit to view\" className=\"size-6\" onClick={panZoom.fit} />\n {resettable && <IconButton icon={UiHome} label=\"Reset view\" className=\"size-6\" onClick={panZoom.reset} />}\n </div>\n );\n}\n\n/** How a zoomable diagram opens: no smaller than `fitMinScale`, centred on the `focusId` node. */\nfunction openingFit(\n positions: Record<string, GraphLayoutPosition>,\n fitMinScale: number | undefined,\n focusId: string | undefined,\n): FitOptions {\n return {\n ...(fitMinScale !== undefined ? { minScale: fitMinScale } : {}),\n ...(focusId !== undefined ? { focus: requireEntry(positions, focusId, \"layout position\") } : {}),\n };\n}\n\nexport function GraphDiagram({\n nodes,\n edges,\n layout = \"ring\",\n selectedId,\n onNodeSelect,\n onNodeExpand,\n selectedEdgeId,\n onEdgeSelect,\n edgeFocus = \"auto\",\n groups,\n nodeWidth = DEFAULT_NODE_WIDTH,\n nodeHeight = DEFAULT_NODE_HEIGHT,\n columnGap,\n rowGap,\n zoomable = false,\n fitMinScale,\n focusId,\n maxHeight,\n ariaLabel,\n className,\n}: GraphDiagramProps) {\n assertEdgesReferenceKnownNodes(nodes, edges);\n const markerPrefix = `graph-diagram-${useId().replace(/[^a-zA-Z0-9_-]/g, \"\")}`;\n\n const { width, height, positions, groups: groupBoxes } = useMemo(\n () => layoutNodes(nodes, edges, { layout, nodeWidth, nodeHeight, columnGap, rowGap }),\n [layout, nodes, edges, nodeWidth, nodeHeight, columnGap, rowGap],\n );\n const routes = useMemo(\n () =>\n routeEdges(edges, positions, { nodeWidth, nodeHeight }, { anchor: layout === \"columns\" ? \"side\" : \"center\" }),\n [edges, positions, nodeWidth, nodeHeight, layout],\n );\n\n const panZoom = usePanZoom({\n enabled: zoomable,\n contentWidth: width,\n contentHeight: height,\n opening: openingFit(positions, fitMinScale, focusId),\n });\n const natural = layout === \"columns\" || zoomable;\n const place: GraphPlacer = natural\n ? ({ x, y }) => ({ left: x, top: y })\n : ({ x, y }) => ({ left: toPercent(x, width), top: toPercent(y, height) });\n const focus = useEdgeFocus({ mode: edgeFocus, edges, selectedId, selectedEdgeId });\n const edgeSelection = { selectedEdgeId, onEdgeSelect, focus: focus.state };\n\n return (\n <div\n ref={panZoom.viewportRef}\n className={cn(\n \"w-full\",\n zoomable ? \"relative touch-none overflow-hidden\" : \"overflow-auto\",\n zoomable && (panZoom.panning ? \"cursor-grabbing select-none\" : \"cursor-grab\"),\n className,\n )}\n style={maxHeight != null ? { maxHeight } : undefined}\n {...panZoom.handlers}\n >\n <div\n ref={panZoom.contentRef}\n data-graph-stage=\"\"\n className={cn(\"relative\", natural ? !zoomable && \"mx-auto\" : \"w-full\")}\n style={stageStyle({ width, height }, natural, zoomable ? panZoom : undefined)}\n >\n <GraphDiagramGroupBoxes boxes={groupBoxes} groups={groups} />\n <GraphDiagramEdgePaths\n edges={edges}\n nodes={nodes}\n routes={routes}\n width={width}\n height={height}\n ariaLabel={ariaLabel}\n markerPrefix={markerPrefix}\n onEdgeHover={focus.onEdgeHover}\n {...edgeSelection}\n />\n <div className=\"pointer-events-none absolute inset-0\">\n <GraphDiagramEdgeLabels edges={edges} routes={routes} place={place} spread={natural} {...edgeSelection} />\n <GraphDiagramNodes\n nodes={nodes}\n positions={positions}\n place={place}\n nodeWidth={nodeWidth}\n nodeHeight={nodeHeight}\n selectedId={selectedId}\n onNodeSelect={onNodeSelect}\n onNodeExpand={onNodeExpand}\n onNodeHover={focus.onNodeHover}\n />\n </div>\n </div>\n {zoomable && <ZoomControls panZoom={panZoom} resettable={fitMinScale !== undefined} />}\n </div>\n );\n}\n"],"names":["ringLayout","columnsLayout","jsxs","jsx","IconButton","UiZoomOut","UiZoomIn","UiFullscreen","UiHome","requireEntry","useId","useMemo","routeEdges","usePanZoom","useEdgeFocus","cn","GraphDiagramGroupBoxes","GraphDiagramEdgePaths","GraphDiagramEdgeLabels","GraphDiagramNodes"],"mappings":"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"}
@@ -1,36 +1,43 @@
1
- import { ReactNode } from 'react';
2
- import { BadgeTone } from './Badge.js';
3
- export interface GraphDiagramNode {
4
- id: string;
5
- label: ReactNode;
6
- detail?: ReactNode;
7
- badge?: ReactNode;
8
- tone?: BadgeTone;
9
- shape?: "pill" | "rect";
10
- /** Accessible name for the node, when `label` alone isn't enough. */
11
- ariaLabel?: string;
12
- }
13
- export interface GraphDiagramEdge {
14
- id: string;
15
- from: string;
16
- to: string;
17
- label?: string;
18
- tone?: BadgeTone;
19
- dashed?: boolean;
20
- }
21
- export type GraphDiagramLayout = "ring";
1
+ import { GraphDiagramEdge, GraphDiagramEdgeFocus, GraphDiagramGroup, GraphDiagramLayout, GraphDiagramNode } from './graph-diagram-model.js';
2
+ export type { GraphDiagramEdge, GraphDiagramEdgeFocus, GraphDiagramGroup, GraphDiagramLayout, GraphDiagramNode, } from './graph-diagram-model.js';
22
3
  export interface GraphDiagramProps {
23
4
  nodes: GraphDiagramNode[];
24
5
  edges: GraphDiagramEdge[];
25
- /** Only "ring" today; a "columns" layout is planned. */
6
+ /** Defaults to "ring". "columns" needs a `level` on every node. */
26
7
  layout?: GraphDiagramLayout;
27
8
  selectedId?: string;
28
9
  onNodeSelect?: (id: string) => void;
10
+ /** Called by a node's `+N` control (see `expandCount`); does not select the node. */
11
+ onNodeExpand?: (id: string) => void;
12
+ selectedEdgeId?: string;
13
+ /** Makes edges, and their label pills, selectable. */
14
+ onEdgeSelect?: (id: string) => void;
15
+ /**
16
+ * Whether an edge shows its pill only while in focus, and fades while another is. Defaults to
17
+ * "auto": a diagram with more than 32 edges is focused, a smaller one shows everything.
18
+ */
19
+ edgeFocus?: GraphDiagramEdgeFocus;
20
+ /** "columns" layout: captions for the group rectangles. A group without an entry shows its id. */
21
+ groups?: GraphDiagramGroup[];
29
22
  nodeWidth?: number;
30
23
  nodeHeight?: number;
24
+ /** "columns" layout: horizontal gap between columns in px. Leave room for edge label pills. */
25
+ columnGap?: number;
26
+ /** "columns" layout: vertical gap between stacked nodes in px. */
27
+ rowGap?: number;
28
+ /** Ctrl/meta + wheel (or pinch) zooms, dragging the background pans, and zoom controls appear. */
29
+ zoomable?: boolean;
30
+ /**
31
+ * Zoomable: the smallest scale the diagram opens at, so its text stays readable. A diagram too
32
+ * large for it opens overflowing, centred on `focusId`, and is panned to reach the rest. `Fit to
33
+ * view` still shows everything, and `Reset view` returns here. Unset, the diagram opens whole.
34
+ */
35
+ fitMinScale?: number;
36
+ /** Zoomable: the node an overflowing diagram opens centred on. Defaults to the diagram's centre. */
37
+ focusId?: string;
31
38
  maxHeight?: number | string;
32
39
  ariaLabel: string;
33
40
  className?: string;
34
41
  }
35
- export declare function GraphDiagram({ nodes, edges, layout, selectedId, onNodeSelect, nodeWidth, nodeHeight, maxHeight, ariaLabel, className, }: GraphDiagramProps): import("react").JSX.Element;
42
+ export declare function GraphDiagram({ nodes, edges, layout, selectedId, onNodeSelect, onNodeExpand, selectedEdgeId, onEdgeSelect, edgeFocus, groups, nodeWidth, nodeHeight, columnGap, rowGap, zoomable, fitMinScale, focusId, maxHeight, ariaLabel, className, }: GraphDiagramProps): import("react").JSX.Element;
36
43
  //# sourceMappingURL=GraphDiagram.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GraphDiagram.d.ts","sourceRoot":"","sources":["../../src/data/GraphDiagram.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAUzC,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAExC,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,wDAAwD;IACxD,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA6ED,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,KAAK,EACL,MAAe,EACf,UAAU,EACV,YAAY,EACZ,SAA8B,EAC9B,UAAgC,EAChC,SAAS,EACT,SAAS,EACT,SAAS,GACV,EAAE,iBAAiB,+BAoInB"}
1
+ {"version":3,"file":"GraphDiagram.d.ts","sourceRoot":"","sources":["../../src/data/GraphDiagram.tsx"],"names":[],"mappings":"AAQA,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EAEtB,MAAM,uBAAuB,CAAC;AAI/B,YAAY,EACV,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAiB/B,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,mEAAmE;IACnE,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,qFAAqF;IACrF,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sDAAsD;IACtD,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC;;;OAGG;IACH,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,kGAAkG;IAClG,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+FAA+F;IAC/F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kGAAkG;IAClG,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oGAAoG;IACpG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA+FD,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,KAAK,EACL,MAAe,EACf,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,SAAkB,EAClB,MAAM,EACN,SAA8B,EAC9B,UAAgC,EAChC,SAAS,EACT,MAAM,EACN,QAAgB,EAChB,WAAW,EACX,OAAO,EACP,SAAS,EACT,SAAS,EACT,SAAS,GACV,EAAE,iBAAiB,+BA2EnB"}