@flanksource/clicky-ui 0.3.44 → 0.3.46

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 (537) hide show
  1. package/README.md +24 -0
  2. package/dist/ai.cjs +4 -2
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +3 -1
  5. package/dist/components/MdxEditorField.cjs +40 -22
  6. package/dist/components/MdxEditorField.cjs.map +1 -1
  7. package/dist/components/MdxEditorField.d.ts.map +1 -1
  8. package/dist/components/MdxEditorField.js +41 -23
  9. package/dist/components/MdxEditorField.js.map +1 -1
  10. package/dist/components/json-schema-form-item-summary.cjs +6 -1
  11. package/dist/components/json-schema-form-item-summary.cjs.map +1 -1
  12. package/dist/components/json-schema-form-item-summary.d.ts.map +1 -1
  13. package/dist/components/json-schema-form-item-summary.js +6 -1
  14. package/dist/components/json-schema-form-item-summary.js.map +1 -1
  15. package/dist/data/AccessMark.cjs +23 -0
  16. package/dist/data/AccessMark.cjs.map +1 -0
  17. package/dist/data/AccessMark.d.ts +11 -0
  18. package/dist/data/AccessMark.d.ts.map +1 -0
  19. package/dist/data/AccessMark.js +23 -0
  20. package/dist/data/AccessMark.js.map +1 -0
  21. package/dist/data/CodeBlock.cjs +3 -2
  22. package/dist/data/CodeBlock.cjs.map +1 -1
  23. package/dist/data/CodeBlock.d.ts +3 -1
  24. package/dist/data/CodeBlock.d.ts.map +1 -1
  25. package/dist/data/CodeBlock.js +3 -2
  26. package/dist/data/CodeBlock.js.map +1 -1
  27. package/dist/data/CodeDiff.cjs +116 -23
  28. package/dist/data/CodeDiff.cjs.map +1 -1
  29. package/dist/data/CodeDiff.d.ts +26 -0
  30. package/dist/data/CodeDiff.d.ts.map +1 -1
  31. package/dist/data/CodeDiff.js +116 -23
  32. package/dist/data/CodeDiff.js.map +1 -1
  33. package/dist/data/GraphDiagram.cjs +75 -11
  34. package/dist/data/GraphDiagram.cjs.map +1 -1
  35. package/dist/data/GraphDiagram.d.ts +17 -2
  36. package/dist/data/GraphDiagram.d.ts.map +1 -1
  37. package/dist/data/GraphDiagram.js +76 -12
  38. package/dist/data/GraphDiagram.js.map +1 -1
  39. package/dist/data/GraphDiagramGroups.cjs +100 -0
  40. package/dist/data/GraphDiagramGroups.cjs.map +1 -0
  41. package/dist/data/GraphDiagramGroups.d.ts +24 -0
  42. package/dist/data/GraphDiagramGroups.d.ts.map +1 -0
  43. package/dist/data/GraphDiagramGroups.js +100 -0
  44. package/dist/data/GraphDiagramGroups.js.map +1 -0
  45. package/dist/data/GraphDiagramNodes.cjs +46 -51
  46. package/dist/data/GraphDiagramNodes.cjs.map +1 -1
  47. package/dist/data/GraphDiagramNodes.d.ts +8 -9
  48. package/dist/data/GraphDiagramNodes.d.ts.map +1 -1
  49. package/dist/data/GraphDiagramNodes.js +46 -51
  50. package/dist/data/GraphDiagramNodes.js.map +1 -1
  51. package/dist/data/JsonView.cjs +118 -49
  52. package/dist/data/JsonView.cjs.map +1 -1
  53. package/dist/data/JsonView.d.ts +13 -10
  54. package/dist/data/JsonView.d.ts.map +1 -1
  55. package/dist/data/JsonView.js +118 -49
  56. package/dist/data/JsonView.js.map +1 -1
  57. package/dist/data/MarkdownEditor.cjs +2 -2
  58. package/dist/data/MarkdownEditor.cjs.map +1 -1
  59. package/dist/data/MarkdownEditor.js +2 -2
  60. package/dist/data/MarkdownEditor.js.map +1 -1
  61. package/dist/data/TreeNode.cjs +1 -1
  62. package/dist/data/TreeNode.cjs.map +1 -1
  63. package/dist/data/TreeNode.d.ts.map +1 -1
  64. package/dist/data/TreeNode.js +1 -1
  65. package/dist/data/TreeNode.js.map +1 -1
  66. package/dist/data/ai/AdvancedChatConfig.cjs +90 -249
  67. package/dist/data/ai/AdvancedChatConfig.cjs.map +1 -1
  68. package/dist/data/ai/AdvancedChatConfig.d.ts +2 -5
  69. package/dist/data/ai/AdvancedChatConfig.d.ts.map +1 -1
  70. package/dist/data/ai/AdvancedChatConfig.js +91 -250
  71. package/dist/data/ai/AdvancedChatConfig.js.map +1 -1
  72. package/dist/data/ai/ChatButton.cjs +2 -0
  73. package/dist/data/ai/ChatButton.cjs.map +1 -1
  74. package/dist/data/ai/ChatButton.d.ts +1 -1
  75. package/dist/data/ai/ChatButton.d.ts.map +1 -1
  76. package/dist/data/ai/ChatButton.js +2 -0
  77. package/dist/data/ai/ChatButton.js.map +1 -1
  78. package/dist/data/ai/ChatFab.cjs +5 -1
  79. package/dist/data/ai/ChatFab.cjs.map +1 -1
  80. package/dist/data/ai/ChatFab.d.ts +5 -1
  81. package/dist/data/ai/ChatFab.d.ts.map +1 -1
  82. package/dist/data/ai/ChatFab.js +5 -1
  83. package/dist/data/ai/ChatFab.js.map +1 -1
  84. package/dist/data/ai/ChatWindow.cjs +2 -8
  85. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  86. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  87. package/dist/data/ai/ChatWindow.js +2 -8
  88. package/dist/data/ai/ChatWindow.js.map +1 -1
  89. package/dist/data/ai/ChatWindow.runtime.cjs +0 -5
  90. package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -1
  91. package/dist/data/ai/ChatWindow.runtime.d.ts +0 -2
  92. package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -1
  93. package/dist/data/ai/ChatWindow.runtime.js +0 -5
  94. package/dist/data/ai/ChatWindow.runtime.js.map +1 -1
  95. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs +2 -2
  96. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs.map +1 -1
  97. package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts.map +1 -1
  98. package/dist/data/ai/PromptRunEditor/runtimeActions.js +2 -2
  99. package/dist/data/ai/PromptRunEditor/runtimeActions.js.map +1 -1
  100. package/dist/data/ai/SessionInspector.approvals.cjs +3 -6
  101. package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -1
  102. package/dist/data/ai/SessionInspector.approvals.js +3 -6
  103. package/dist/data/ai/SessionInspector.approvals.js.map +1 -1
  104. package/dist/data/ai/SessionViewer.cjs +13 -4
  105. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  106. package/dist/data/ai/SessionViewer.d.ts +5 -1
  107. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  108. package/dist/data/ai/SessionViewer.header.cjs +1 -1
  109. package/dist/data/ai/SessionViewer.header.cjs.map +1 -1
  110. package/dist/data/ai/SessionViewer.header.js +1 -1
  111. package/dist/data/ai/SessionViewer.header.js.map +1 -1
  112. package/dist/data/ai/SessionViewer.js +13 -4
  113. package/dist/data/ai/SessionViewer.js.map +1 -1
  114. package/dist/data/ai/SessionViewer.model.cjs +2 -0
  115. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  116. package/dist/data/ai/SessionViewer.model.d.ts +1 -0
  117. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  118. package/dist/data/ai/SessionViewer.model.js +2 -0
  119. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  120. package/dist/data/ai/SessionViewer.rows.cjs +41 -27
  121. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  122. package/dist/data/ai/SessionViewer.rows.d.ts +4 -2
  123. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  124. package/dist/data/ai/SessionViewer.rows.js +41 -27
  125. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  126. package/dist/data/ai/SessionViewer.tokens.cjs +35 -0
  127. package/dist/data/ai/SessionViewer.tokens.cjs.map +1 -0
  128. package/dist/data/ai/SessionViewer.tokens.d.ts +5 -0
  129. package/dist/data/ai/SessionViewer.tokens.d.ts.map +1 -0
  130. package/dist/data/ai/SessionViewer.tokens.js +35 -0
  131. package/dist/data/ai/SessionViewer.tokens.js.map +1 -0
  132. package/dist/data/ai/SessionViewer.tool-cost.cjs +128 -0
  133. package/dist/data/ai/SessionViewer.tool-cost.cjs.map +1 -0
  134. package/dist/data/ai/SessionViewer.tool-cost.d.ts +6 -0
  135. package/dist/data/ai/SessionViewer.tool-cost.d.ts.map +1 -0
  136. package/dist/data/ai/SessionViewer.tool-cost.js +128 -0
  137. package/dist/data/ai/SessionViewer.tool-cost.js.map +1 -0
  138. package/dist/data/ai/SessionViewer.tool-details.cjs +3 -1
  139. package/dist/data/ai/SessionViewer.tool-details.cjs.map +1 -1
  140. package/dist/data/ai/SessionViewer.tool-details.d.ts.map +1 -1
  141. package/dist/data/ai/SessionViewer.tool-details.js +3 -1
  142. package/dist/data/ai/SessionViewer.tool-details.js.map +1 -1
  143. package/dist/data/ai/SessionViewer.tool-row.cjs +55 -35
  144. package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -1
  145. package/dist/data/ai/SessionViewer.tool-row.d.ts +2 -1
  146. package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -1
  147. package/dist/data/ai/SessionViewer.tool-row.js +55 -35
  148. package/dist/data/ai/SessionViewer.tool-row.js.map +1 -1
  149. package/dist/data/ai/SessionViewer.unified.d.ts +4 -0
  150. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  151. package/dist/data/ai/SessionViewerMenu.cjs +18 -1
  152. package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
  153. package/dist/data/ai/SessionViewerMenu.d.ts +6 -1
  154. package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
  155. package/dist/data/ai/SessionViewerMenu.js +18 -1
  156. package/dist/data/ai/SessionViewerMenu.js.map +1 -1
  157. package/dist/data/ai/ToolPreferences.cjs +149 -143
  158. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  159. package/dist/data/ai/ToolPreferences.d.ts +20 -6
  160. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  161. package/dist/data/ai/ToolPreferences.js +151 -146
  162. package/dist/data/ai/ToolPreferences.js.map +1 -1
  163. package/dist/data/ai/ToolPreferences.model.cjs +14 -10
  164. package/dist/data/ai/ToolPreferences.model.cjs.map +1 -1
  165. package/dist/data/ai/ToolPreferences.model.d.ts +1 -0
  166. package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -1
  167. package/dist/data/ai/ToolPreferences.model.js +15 -11
  168. package/dist/data/ai/ToolPreferences.model.js.map +1 -1
  169. package/dist/data/ai/ToolPreferencesList.cjs +1 -0
  170. package/dist/data/ai/ToolPreferencesList.cjs.map +1 -1
  171. package/dist/data/ai/ToolPreferencesList.d.ts +4 -1
  172. package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -1
  173. package/dist/data/ai/ToolPreferencesList.js +2 -1
  174. package/dist/data/ai/ToolPreferencesList.js.map +1 -1
  175. package/dist/data/ai/ToolSchemaBrowser.cjs +52 -53
  176. package/dist/data/ai/ToolSchemaBrowser.cjs.map +1 -1
  177. package/dist/data/ai/ToolSchemaBrowser.d.ts +6 -3
  178. package/dist/data/ai/ToolSchemaBrowser.d.ts.map +1 -1
  179. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs +9 -13
  180. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs.map +1 -1
  181. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts +5 -2
  182. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts.map +1 -1
  183. package/dist/data/ai/ToolSchemaBrowser.directory-header.js +9 -13
  184. package/dist/data/ai/ToolSchemaBrowser.directory-header.js.map +1 -1
  185. package/dist/data/ai/ToolSchemaBrowser.js +53 -54
  186. package/dist/data/ai/ToolSchemaBrowser.js.map +1 -1
  187. package/dist/data/ai/ToolSchemaBrowser.model.cjs +19 -27
  188. package/dist/data/ai/ToolSchemaBrowser.model.cjs.map +1 -1
  189. package/dist/data/ai/ToolSchemaBrowser.model.d.ts +9 -6
  190. package/dist/data/ai/ToolSchemaBrowser.model.d.ts.map +1 -1
  191. package/dist/data/ai/ToolSchemaBrowser.model.js +20 -28
  192. package/dist/data/ai/ToolSchemaBrowser.model.js.map +1 -1
  193. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs +12 -213
  194. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs.map +1 -1
  195. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts +1 -3
  196. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts.map +1 -1
  197. package/dist/data/ai/ToolSchemaBrowser.sidebar.js +13 -214
  198. package/dist/data/ai/ToolSchemaBrowser.sidebar.js.map +1 -1
  199. package/dist/data/ai/ToolSchemaBrowser.strategies.cjs +54 -0
  200. package/dist/data/ai/ToolSchemaBrowser.strategies.cjs.map +1 -0
  201. package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts +9 -0
  202. package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts.map +1 -0
  203. package/dist/data/ai/ToolSchemaBrowser.strategies.js +54 -0
  204. package/dist/data/ai/ToolSchemaBrowser.strategies.js.map +1 -0
  205. package/dist/data/ai/ToolSchemaBrowser.tree.cjs +179 -0
  206. package/dist/data/ai/ToolSchemaBrowser.tree.cjs.map +1 -0
  207. package/dist/data/ai/ToolSchemaBrowser.tree.d.ts +20 -0
  208. package/dist/data/ai/ToolSchemaBrowser.tree.d.ts.map +1 -0
  209. package/dist/data/ai/ToolSchemaBrowser.tree.js +179 -0
  210. package/dist/data/ai/ToolSchemaBrowser.tree.js.map +1 -0
  211. package/dist/data/ai/index.d.ts +2 -2
  212. package/dist/data/ai/index.d.ts.map +1 -1
  213. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs +8 -28
  214. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs.map +1 -1
  215. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.d.ts.map +1 -1
  216. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js +9 -29
  217. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js.map +1 -1
  218. package/dist/data/ai/session-token-sizing.d.ts +32 -0
  219. package/dist/data/ai/session-token-sizing.d.ts.map +1 -0
  220. package/dist/data/ai/use-session-token-sizing.cjs +73 -0
  221. package/dist/data/ai/use-session-token-sizing.cjs.map +1 -0
  222. package/dist/data/ai/use-session-token-sizing.d.ts +21 -0
  223. package/dist/data/ai/use-session-token-sizing.d.ts.map +1 -0
  224. package/dist/data/ai/use-session-token-sizing.js +73 -0
  225. package/dist/data/ai/use-session-token-sizing.js.map +1 -0
  226. package/dist/data/call-graph/CallGraph.cjs +269 -0
  227. package/dist/data/call-graph/CallGraph.cjs.map +1 -0
  228. package/dist/data/call-graph/CallGraph.d.ts +78 -0
  229. package/dist/data/call-graph/CallGraph.d.ts.map +1 -0
  230. package/dist/data/call-graph/CallGraph.js +269 -0
  231. package/dist/data/call-graph/CallGraph.js.map +1 -0
  232. package/dist/data/call-graph/CallGraphGlyphs.cjs +39 -0
  233. package/dist/data/call-graph/CallGraphGlyphs.cjs.map +1 -0
  234. package/dist/data/call-graph/CallGraphGlyphs.d.ts +19 -0
  235. package/dist/data/call-graph/CallGraphGlyphs.d.ts.map +1 -0
  236. package/dist/data/call-graph/CallGraphGlyphs.js +39 -0
  237. package/dist/data/call-graph/CallGraphGlyphs.js.map +1 -0
  238. package/dist/data/call-graph/CallGraphMembers.cjs +51 -0
  239. package/dist/data/call-graph/CallGraphMembers.cjs.map +1 -0
  240. package/dist/data/call-graph/CallGraphMembers.d.ts +22 -0
  241. package/dist/data/call-graph/CallGraphMembers.d.ts.map +1 -0
  242. package/dist/data/call-graph/CallGraphMembers.js +51 -0
  243. package/dist/data/call-graph/CallGraphMembers.js.map +1 -0
  244. package/dist/data/call-graph/CallGraphParts.cjs +204 -0
  245. package/dist/data/call-graph/CallGraphParts.cjs.map +1 -0
  246. package/dist/data/call-graph/CallGraphParts.d.ts +44 -0
  247. package/dist/data/call-graph/CallGraphParts.d.ts.map +1 -0
  248. package/dist/data/call-graph/CallGraphParts.js +204 -0
  249. package/dist/data/call-graph/CallGraphParts.js.map +1 -0
  250. package/dist/data/call-graph/CallGraphToolbar.cjs +198 -0
  251. package/dist/data/call-graph/CallGraphToolbar.cjs.map +1 -0
  252. package/dist/data/call-graph/CallGraphToolbar.d.ts +55 -0
  253. package/dist/data/call-graph/CallGraphToolbar.d.ts.map +1 -0
  254. package/dist/data/call-graph/CallGraphToolbar.js +198 -0
  255. package/dist/data/call-graph/CallGraphToolbar.js.map +1 -0
  256. package/dist/data/call-graph/call-graph-exclude.cjs +75 -0
  257. package/dist/data/call-graph/call-graph-exclude.cjs.map +1 -0
  258. package/dist/data/call-graph/call-graph-exclude.d.ts +31 -0
  259. package/dist/data/call-graph/call-graph-exclude.d.ts.map +1 -0
  260. package/dist/data/call-graph/call-graph-exclude.js +75 -0
  261. package/dist/data/call-graph/call-graph-exclude.js.map +1 -0
  262. package/dist/data/call-graph/call-graph-labels.cjs +96 -0
  263. package/dist/data/call-graph/call-graph-labels.cjs.map +1 -0
  264. package/dist/data/call-graph/call-graph-labels.d.ts +53 -0
  265. package/dist/data/call-graph/call-graph-labels.d.ts.map +1 -0
  266. package/dist/data/call-graph/call-graph-labels.js +96 -0
  267. package/dist/data/call-graph/call-graph-labels.js.map +1 -0
  268. package/dist/data/call-graph/call-graph-model.cjs +312 -0
  269. package/dist/data/call-graph/call-graph-model.cjs.map +1 -0
  270. package/dist/data/call-graph/call-graph-model.d.ts +138 -0
  271. package/dist/data/call-graph/call-graph-model.d.ts.map +1 -0
  272. package/dist/data/call-graph/call-graph-model.js +312 -0
  273. package/dist/data/call-graph/call-graph-model.js.map +1 -0
  274. package/dist/data/call-graph/call-graph-vocabulary.cjs +195 -0
  275. package/dist/data/call-graph/call-graph-vocabulary.cjs.map +1 -0
  276. package/dist/data/call-graph/call-graph-vocabulary.d.ts +76 -0
  277. package/dist/data/call-graph/call-graph-vocabulary.d.ts.map +1 -0
  278. package/dist/data/call-graph/call-graph-vocabulary.js +195 -0
  279. package/dist/data/call-graph/call-graph-vocabulary.js.map +1 -0
  280. package/dist/data/call-graph/call-graph.fixtures.d.ts +63 -0
  281. package/dist/data/call-graph/call-graph.fixtures.d.ts.map +1 -0
  282. package/dist/data/call-graph/index.d.ts +7 -0
  283. package/dist/data/call-graph/index.d.ts.map +1 -0
  284. package/dist/data/call-graph/types.cjs +5 -0
  285. package/dist/data/call-graph/types.cjs.map +1 -0
  286. package/dist/data/call-graph/types.d.ts +140 -0
  287. package/dist/data/call-graph/types.d.ts.map +1 -0
  288. package/dist/data/call-graph/types.js +5 -0
  289. package/dist/data/call-graph/types.js.map +1 -0
  290. package/dist/data/call-graph/use-call-graph.cjs +93 -0
  291. package/dist/data/call-graph/use-call-graph.cjs.map +1 -0
  292. package/dist/data/call-graph/use-call-graph.d.ts +24 -0
  293. package/dist/data/call-graph/use-call-graph.d.ts.map +1 -0
  294. package/dist/data/call-graph/use-call-graph.js +93 -0
  295. package/dist/data/call-graph/use-call-graph.js.map +1 -0
  296. package/dist/data/chat/Chat.cjs +39 -15
  297. package/dist/data/chat/Chat.cjs.map +1 -1
  298. package/dist/data/chat/Chat.d.ts.map +1 -1
  299. package/dist/data/chat/Chat.fixtures.cjs +2 -2
  300. package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
  301. package/dist/data/chat/Chat.fixtures.js +2 -2
  302. package/dist/data/chat/Chat.fixtures.js.map +1 -1
  303. package/dist/data/chat/Chat.js +40 -16
  304. package/dist/data/chat/Chat.js.map +1 -1
  305. package/dist/data/chat/ChatRuntimeToolbar.cjs +3 -6
  306. package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
  307. package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -1
  308. package/dist/data/chat/ChatRuntimeToolbar.js +3 -6
  309. package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
  310. package/dist/data/chat/ContextMeter.bar.cjs +5 -8
  311. package/dist/data/chat/ContextMeter.bar.cjs.map +1 -1
  312. package/dist/data/chat/ContextMeter.bar.d.ts +1 -1
  313. package/dist/data/chat/ContextMeter.bar.d.ts.map +1 -1
  314. package/dist/data/chat/ContextMeter.bar.js +5 -8
  315. package/dist/data/chat/ContextMeter.bar.js.map +1 -1
  316. package/dist/data/chat/ContextMeter.cjs +18 -19
  317. package/dist/data/chat/ContextMeter.cjs.map +1 -1
  318. package/dist/data/chat/ContextMeter.d.ts +1 -1
  319. package/dist/data/chat/ContextMeter.d.ts.map +1 -1
  320. package/dist/data/chat/ContextMeter.js +18 -19
  321. package/dist/data/chat/ContextMeter.js.map +1 -1
  322. package/dist/data/chat/Conversation.cjs +2 -1
  323. package/dist/data/chat/Conversation.cjs.map +1 -1
  324. package/dist/data/chat/Conversation.d.ts +4 -1
  325. package/dist/data/chat/Conversation.d.ts.map +1 -1
  326. package/dist/data/chat/Conversation.js +2 -1
  327. package/dist/data/chat/Conversation.js.map +1 -1
  328. package/dist/data/chat/Message.cjs +39 -12
  329. package/dist/data/chat/Message.cjs.map +1 -1
  330. package/dist/data/chat/Message.d.ts +1 -1
  331. package/dist/data/chat/Message.d.ts.map +1 -1
  332. package/dist/data/chat/Message.js +40 -13
  333. package/dist/data/chat/Message.js.map +1 -1
  334. package/dist/data/chat/ToolCall.cjs +60 -5
  335. package/dist/data/chat/ToolCall.cjs.map +1 -1
  336. package/dist/data/chat/ToolCall.d.ts +7 -2
  337. package/dist/data/chat/ToolCall.d.ts.map +1 -1
  338. package/dist/data/chat/ToolCall.js +60 -5
  339. package/dist/data/chat/ToolCall.js.map +1 -1
  340. package/dist/data/chat/approval.cjs.map +1 -1
  341. package/dist/data/chat/approval.d.ts +2 -2
  342. package/dist/data/chat/approval.d.ts.map +1 -1
  343. package/dist/data/chat/approval.js.map +1 -1
  344. package/dist/data/chat/tool-policy.cjs +59 -2
  345. package/dist/data/chat/tool-policy.cjs.map +1 -1
  346. package/dist/data/chat/tool-policy.d.ts +9 -0
  347. package/dist/data/chat/tool-policy.d.ts.map +1 -1
  348. package/dist/data/chat/tool-policy.js +59 -2
  349. package/dist/data/chat/tool-policy.js.map +1 -1
  350. package/dist/data/chat/types.cjs +6 -0
  351. package/dist/data/chat/types.cjs.map +1 -1
  352. package/dist/data/chat/types.d.ts +13 -4
  353. package/dist/data/chat/types.d.ts.map +1 -1
  354. package/dist/data/chat/types.js +7 -1
  355. package/dist/data/chat/types.js.map +1 -1
  356. package/dist/data/chat/usage-snapshot.cjs +11 -6
  357. package/dist/data/chat/usage-snapshot.cjs.map +1 -1
  358. package/dist/data/chat/usage-snapshot.d.ts +0 -1
  359. package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
  360. package/dist/data/chat/usage-snapshot.js +11 -6
  361. package/dist/data/chat/usage-snapshot.js.map +1 -1
  362. package/dist/data/data-access.cjs +8 -0
  363. package/dist/data/data-access.cjs.map +1 -0
  364. package/dist/data/data-access.d.ts +5 -0
  365. package/dist/data/data-access.d.ts.map +1 -0
  366. package/dist/data/data-access.js +8 -0
  367. package/dist/data/data-access.js.map +1 -0
  368. package/dist/data/diagnostics/StackFrameRow.cjs +3 -3
  369. package/dist/data/diagnostics/StackFrameRow.cjs.map +1 -1
  370. package/dist/data/diagnostics/StackFrameRow.js +3 -3
  371. package/dist/data/diagnostics/StackFrameRow.js.map +1 -1
  372. package/dist/data/git/GitChangeList.cjs +6 -2
  373. package/dist/data/git/GitChangeList.cjs.map +1 -1
  374. package/dist/data/git/GitChangeList.d.ts +6 -1
  375. package/dist/data/git/GitChangeList.d.ts.map +1 -1
  376. package/dist/data/git/GitChangeList.js +6 -2
  377. package/dist/data/git/GitChangeList.js.map +1 -1
  378. package/dist/data/graph-columns-layout.cjs +61 -14
  379. package/dist/data/graph-columns-layout.cjs.map +1 -1
  380. package/dist/data/graph-columns-layout.d.ts +42 -0
  381. package/dist/data/graph-columns-layout.d.ts.map +1 -1
  382. package/dist/data/graph-columns-layout.js +61 -14
  383. package/dist/data/graph-columns-layout.js.map +1 -1
  384. package/dist/data/graph-diagram-model.cjs +5 -0
  385. package/dist/data/graph-diagram-model.cjs.map +1 -1
  386. package/dist/data/graph-diagram-model.d.ts +24 -0
  387. package/dist/data/graph-diagram-model.d.ts.map +1 -1
  388. package/dist/data/graph-diagram-model.js +5 -0
  389. package/dist/data/graph-diagram-model.js.map +1 -1
  390. package/dist/data/graph-edge-routing.cjs +9 -3
  391. package/dist/data/graph-edge-routing.cjs.map +1 -1
  392. package/dist/data/graph-edge-routing.d.ts +2 -0
  393. package/dist/data/graph-edge-routing.d.ts.map +1 -1
  394. package/dist/data/graph-edge-routing.js +9 -3
  395. package/dist/data/graph-edge-routing.js.map +1 -1
  396. package/dist/data/graph-group-window.cjs +60 -0
  397. package/dist/data/graph-group-window.cjs.map +1 -0
  398. package/dist/data/graph-group-window.d.ts +33 -0
  399. package/dist/data/graph-group-window.d.ts.map +1 -0
  400. package/dist/data/graph-group-window.js +60 -0
  401. package/dist/data/graph-group-window.js.map +1 -0
  402. package/dist/data/json-view/JsonSource.cjs +84 -0
  403. package/dist/data/json-view/JsonSource.cjs.map +1 -0
  404. package/dist/data/json-view/JsonSource.d.ts +7 -0
  405. package/dist/data/json-view/JsonSource.d.ts.map +1 -0
  406. package/dist/data/json-view/JsonSource.js +84 -0
  407. package/dist/data/json-view/JsonSource.js.map +1 -0
  408. package/dist/data/json-view/parse-prefix.cjs +132 -0
  409. package/dist/data/json-view/parse-prefix.cjs.map +1 -0
  410. package/dist/data/json-view/parse-prefix.d.ts +11 -0
  411. package/dist/data/json-view/parse-prefix.d.ts.map +1 -0
  412. package/dist/data/json-view/parse-prefix.js +132 -0
  413. package/dist/data/json-view/parse-prefix.js.map +1 -0
  414. package/dist/data/json-view/parse-source.cjs +62 -0
  415. package/dist/data/json-view/parse-source.cjs.map +1 -0
  416. package/dist/data/json-view/parse-source.d.ts +16 -0
  417. package/dist/data/json-view/parse-source.d.ts.map +1 -0
  418. package/dist/data/json-view/parse-source.js +62 -0
  419. package/dist/data/json-view/parse-source.js.map +1 -0
  420. package/dist/data/json-view/story-fixtures.d.ts +6 -0
  421. package/dist/data/json-view/story-fixtures.d.ts.map +1 -0
  422. package/dist/data/json-view/types.d.ts +14 -0
  423. package/dist/data/json-view/types.d.ts.map +1 -0
  424. package/dist/data/runtime/RuntimeBar.cjs +2 -5
  425. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  426. package/dist/data/runtime/RuntimeBar.d.ts +2 -4
  427. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  428. package/dist/data/runtime/RuntimeBar.fields.cjs +2 -2
  429. package/dist/data/runtime/RuntimeBar.fields.cjs.map +1 -1
  430. package/dist/data/runtime/RuntimeBar.fields.js +2 -2
  431. package/dist/data/runtime/RuntimeBar.fields.js.map +1 -1
  432. package/dist/data/runtime/RuntimeBar.js +2 -5
  433. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  434. package/dist/data/runtime/RuntimeBar.selection.cjs +4 -1
  435. package/dist/data/runtime/RuntimeBar.selection.cjs.map +1 -1
  436. package/dist/data/runtime/RuntimeBar.selection.d.ts.map +1 -1
  437. package/dist/data/runtime/RuntimeBar.selection.js +5 -2
  438. package/dist/data/runtime/RuntimeBar.selection.js.map +1 -1
  439. package/dist/data/runtime/RuntimeBarActions.cjs +1 -5
  440. package/dist/data/runtime/RuntimeBarActions.cjs.map +1 -1
  441. package/dist/data/runtime/RuntimeBarActions.d.ts +1 -1
  442. package/dist/data/runtime/RuntimeBarActions.d.ts.map +1 -1
  443. package/dist/data/runtime/RuntimeBarActions.js +1 -5
  444. package/dist/data/runtime/RuntimeBarActions.js.map +1 -1
  445. package/dist/data/runtime/RuntimeBarIdentity.cjs +6 -14
  446. package/dist/data/runtime/RuntimeBarIdentity.cjs.map +1 -1
  447. package/dist/data/runtime/RuntimeBarIdentity.d.ts +0 -1
  448. package/dist/data/runtime/RuntimeBarIdentity.d.ts.map +1 -1
  449. package/dist/data/runtime/RuntimeBarIdentity.js +6 -14
  450. package/dist/data/runtime/RuntimeBarIdentity.js.map +1 -1
  451. package/dist/data/runtime/RuntimeBarLayout.cjs +8 -27
  452. package/dist/data/runtime/RuntimeBarLayout.cjs.map +1 -1
  453. package/dist/data/runtime/RuntimeBarLayout.d.ts.map +1 -1
  454. package/dist/data/runtime/RuntimeBarLayout.js +8 -27
  455. package/dist/data/runtime/RuntimeBarLayout.js.map +1 -1
  456. package/dist/data/runtime/RuntimeBarSegment.cjs +1 -5
  457. package/dist/data/runtime/RuntimeBarSegment.cjs.map +1 -1
  458. package/dist/data/runtime/RuntimeBarSegment.d.ts.map +1 -1
  459. package/dist/data/runtime/RuntimeBarSegment.js +1 -5
  460. package/dist/data/runtime/RuntimeBarSegment.js.map +1 -1
  461. package/dist/data/runtime/use-runtime-bar-overflow.cjs +4 -10
  462. package/dist/data/runtime/use-runtime-bar-overflow.cjs.map +1 -1
  463. package/dist/data/runtime/use-runtime-bar-overflow.d.ts +1 -2
  464. package/dist/data/runtime/use-runtime-bar-overflow.d.ts.map +1 -1
  465. package/dist/data/runtime/use-runtime-bar-overflow.js +4 -10
  466. package/dist/data/runtime/use-runtime-bar-overflow.js.map +1 -1
  467. package/dist/data/test-runner/TestRunner.fixtures.d.ts +0 -20
  468. package/dist/data/test-runner/TestRunner.fixtures.d.ts.map +1 -1
  469. package/dist/data/test-runner/TestRunner.large-fixtures.d.ts +22 -0
  470. package/dist/data/test-runner/TestRunner.large-fixtures.d.ts.map +1 -0
  471. package/dist/data/use-group-windows.cjs +50 -0
  472. package/dist/data/use-group-windows.cjs.map +1 -0
  473. package/dist/data/use-group-windows.d.ts +27 -0
  474. package/dist/data/use-group-windows.d.ts.map +1 -0
  475. package/dist/data/use-group-windows.js +50 -0
  476. package/dist/data/use-group-windows.js.map +1 -0
  477. package/dist/data/use-pan-zoom.cjs +23 -10
  478. package/dist/data/use-pan-zoom.cjs.map +1 -1
  479. package/dist/data/use-pan-zoom.d.ts +16 -2
  480. package/dist/data/use-pan-zoom.d.ts.map +1 -1
  481. package/dist/data/use-pan-zoom.js +23 -10
  482. package/dist/data/use-pan-zoom.js.map +1 -1
  483. package/dist/data/version-info.cjs +3 -3
  484. package/dist/data/version-info.js +3 -3
  485. package/dist/data.cjs +36 -2
  486. package/dist/data.cjs.map +1 -1
  487. package/dist/data.d.ts +5 -2
  488. package/dist/data.d.ts.map +1 -1
  489. package/dist/data.js +35 -1
  490. package/dist/data.js.map +1 -1
  491. package/dist/hooks/event-hub.cjs +229 -0
  492. package/dist/hooks/event-hub.cjs.map +1 -0
  493. package/dist/hooks/event-hub.d.ts +26 -0
  494. package/dist/hooks/event-hub.d.ts.map +1 -0
  495. package/dist/hooks/event-hub.js +229 -0
  496. package/dist/hooks/event-hub.js.map +1 -0
  497. package/dist/hooks.cjs +2 -0
  498. package/dist/hooks.cjs.map +1 -1
  499. package/dist/hooks.d.ts +1 -0
  500. package/dist/hooks.d.ts.map +1 -1
  501. package/dist/hooks.js +2 -0
  502. package/dist/hooks.js.map +1 -1
  503. package/dist/index.cjs +40 -4
  504. package/dist/index.cjs.map +1 -1
  505. package/dist/index.js +37 -1
  506. package/dist/index.js.map +1 -1
  507. package/dist/layout/Workspace.cjs +13 -4
  508. package/dist/layout/Workspace.cjs.map +1 -1
  509. package/dist/layout/Workspace.d.ts +7 -2
  510. package/dist/layout/Workspace.d.ts.map +1 -1
  511. package/dist/layout/Workspace.js +13 -4
  512. package/dist/layout/Workspace.js.map +1 -1
  513. package/dist/lib/permission-strategies.cjs +71 -11
  514. package/dist/lib/permission-strategies.cjs.map +1 -1
  515. package/dist/lib/permission-strategies.d.ts +3 -0
  516. package/dist/lib/permission-strategies.d.ts.map +1 -1
  517. package/dist/lib/permission-strategies.js +71 -11
  518. package/dist/lib/permission-strategies.js.map +1 -1
  519. package/dist/overlay/modalStack.cjs +13 -6
  520. package/dist/overlay/modalStack.cjs.map +1 -1
  521. package/dist/overlay/modalStack.d.ts.map +1 -1
  522. package/dist/overlay/modalStack.js +13 -6
  523. package/dist/overlay/modalStack.js.map +1 -1
  524. package/dist/styles.css +1 -1
  525. package/package.json +5 -3
  526. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs +0 -57
  527. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs.map +0 -1
  528. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts +0 -7
  529. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts.map +0 -1
  530. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js +0 -57
  531. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js.map +0 -1
  532. package/dist/data/runtime/RuntimeBar.context.cjs +0 -8
  533. package/dist/data/runtime/RuntimeBar.context.cjs.map +0 -1
  534. package/dist/data/runtime/RuntimeBar.context.d.ts +0 -2
  535. package/dist/data/runtime/RuntimeBar.context.d.ts.map +0 -1
  536. package/dist/data/runtime/RuntimeBar.context.js +0 -8
  537. package/dist/data/runtime/RuntimeBar.context.js.map +0 -1
@@ -2,73 +2,142 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const react = require("react");
5
- function JsonView({ data, name, depth = 0, defaultOpenDepth = 2 }) {
5
+ const yaml = require("yaml");
6
+ const button = require("../components/button.cjs");
7
+ const useDensity = require("../hooks/use-density.cjs");
8
+ const utils = require("../lib/utils.cjs");
9
+ const JsonSource = require("./json-view/JsonSource.cjs");
10
+ const UiChevronRight = require("../icons/components/UiChevronRight.cjs");
11
+ const DENSITY_CLASSES = {
12
+ compact: "text-xs leading-4 [--json-view-indent:0.75rem] [--json-view-row-space:0px]",
13
+ comfortable: "text-sm leading-5 [--json-view-indent:1rem] [--json-view-row-space:1px]",
14
+ spacious: "text-base leading-6 [--json-view-indent:1.25rem] [--json-view-row-space:2px]"
15
+ };
16
+ function JsonView({
17
+ density,
18
+ format = "yaml",
19
+ ...props
20
+ }) {
21
+ const inheritedDensity = useDensity.useDensityValue();
22
+ const activeDensity = density ?? inheritedDensity;
23
+ const hasSource = Object.hasOwn(props, "source");
24
+ if (hasSource === Object.hasOwn(props, "data"))
25
+ throw new Error("JsonView requires exactly one of data or source");
26
+ if (!hasSource && Object.hasOwn(props, "inputFormat"))
27
+ throw new Error("JsonView inputFormat requires source");
28
+ if (hasSource && typeof props.source !== "string")
29
+ throw new Error("JsonView source must be a string");
30
+ const { data, source, inputFormat = "json", ...options } = props;
31
+ return /* @__PURE__ */ jsxRuntime.jsx(
32
+ "div",
33
+ {
34
+ "data-format": format,
35
+ "data-density": activeDensity,
36
+ className: utils.cn(
37
+ "font-mono whitespace-pre-wrap break-words",
38
+ DENSITY_CLASSES[activeDensity]
39
+ ),
40
+ children: hasSource && source !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx(
41
+ JsonSource.JsonSource,
42
+ {
43
+ source,
44
+ inputFormat,
45
+ renderValue: (value) => /* @__PURE__ */ jsxRuntime.jsx(JsonViewNode, { ...options, data: value, format })
46
+ }
47
+ ) : /* @__PURE__ */ jsxRuntime.jsx(JsonViewNode, { ...options, data, format })
48
+ }
49
+ );
50
+ }
51
+ function JsonViewNode({
52
+ data,
53
+ name,
54
+ depth = 0,
55
+ defaultOpenDepth = 2,
56
+ format,
57
+ sequenceItem = false
58
+ }) {
6
59
  const [open, setOpen] = react.useState(depth < defaultOpenDepth);
7
- if (data === null || data === void 0) {
8
- return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground italic", children: "null" });
9
- }
10
- if (typeof data === "string") {
11
- return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-green-700 dark:text-green-400", children: [
12
- '"',
13
- data,
14
- '"'
15
- ] });
16
- }
17
- if (typeof data === "number" || typeof data === "boolean") {
18
- return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-blue-700 dark:text-blue-400", children: String(data) });
19
- }
20
- if (typeof data !== "object") {
21
- return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: String(data) });
22
- }
23
60
  const isArray = Array.isArray(data);
24
- const entries = isArray ? data.map((v, i) => [i, v]) : Object.entries(data);
25
- const [openB, closeB] = isArray ? ["[", "]"] : ["{", "}"];
61
+ const entries = data !== null && typeof data === "object" ? Object.entries(data) : [];
62
+ const prefix = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
63
+ sequenceItem && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "- " }),
64
+ name !== void 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
65
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-purple-600 [[data-theme=dark]_&]:text-purple-400", children: format === "yaml" ? yamlString(name) : name }),
66
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: ": " })
67
+ ] })
68
+ ] });
26
69
  if (entries.length === 0) {
27
- return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground", children: [
28
- openB,
29
- closeB
70
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "py-[var(--json-view-row-space)]", children: [
71
+ prefix,
72
+ /* @__PURE__ */ jsxRuntime.jsx(JsonViewScalar, { data, format })
30
73
  ] });
31
74
  }
32
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-sm font-mono", style: { paddingLeft: depth > 0 ? "12px" : "0" }, children: [
75
+ const [openB, closeB] = isArray ? ["[", "]"] : ["{", "}"];
76
+ const summary = `${entries.length} ${isArray ? entries.length === 1 ? "item" : "items" : entries.length === 1 ? "key" : "keys"}`;
77
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
33
78
  /* @__PURE__ */ jsxRuntime.jsxs(
34
- "span",
79
+ button.Button,
35
80
  {
36
- className: "cursor-pointer hover:bg-accent rounded px-0.5 select-none",
81
+ variant: "ghost",
82
+ type: "button",
83
+ "aria-expanded": open,
84
+ "aria-label": `${open ? "Collapse" : "Expand"} ${name ?? "value"}`,
85
+ className: "h-auto max-w-full justify-start gap-0 rounded px-0 py-[var(--json-view-row-space)] text-left font-normal text-[length:inherit] leading-[inherit] whitespace-pre-wrap [&_svg]:size-[0.75em]",
37
86
  onClick: () => setOpen(!open),
38
87
  children: [
39
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground text-xs mr-1", children: open ? "▼" : "▶" }),
40
- name && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-purple-600 dark:text-purple-400", children: name }),
41
- name && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: ": " }),
42
- !open && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground", children: [
43
- openB,
44
- " ",
45
- entries.length,
46
- " ",
47
- isArray ? entries.length === 1 ? "item" : "items" : entries.length === 1 ? "key" : "keys",
48
- " ",
49
- closeB
50
- ] }),
51
- open && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: openB })
88
+ /* @__PURE__ */ jsxRuntime.jsx(
89
+ UiChevronRight.UiChevronRight,
90
+ {
91
+ "aria-hidden": "true",
92
+ className: utils.cn(
93
+ "mr-1 shrink-0 text-muted-foreground",
94
+ open && "rotate-90"
95
+ )
96
+ }
97
+ ),
98
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
99
+ prefix,
100
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: format === "json" ? open ? openB : `${openB} ${summary} ${closeB}` : !open || name === void 0 && !sequenceItem ? summary : null })
101
+ ] })
52
102
  ]
53
103
  }
54
104
  ),
55
105
  open && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
56
- entries.map(([key, val]) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pl-3 border-l border-border ml-1", children: typeof val === "object" && val !== null ? /* @__PURE__ */ jsxRuntime.jsx(
57
- JsonView,
106
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-l border-border pl-[var(--json-view-indent)]", children: entries.map(([key, val]) => /* @__PURE__ */ jsxRuntime.jsx(
107
+ JsonViewNode,
58
108
  {
59
109
  data: val,
60
- name: String(key),
110
+ ...!isArray ? { name: key } : {},
111
+ sequenceItem: isArray && format === "yaml",
61
112
  depth: depth + 1,
62
- defaultOpenDepth
63
- }
64
- ) : /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
65
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-purple-600 dark:text-purple-400", children: isArray ? "" : String(key) }),
66
- !isArray && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: ": " }),
67
- /* @__PURE__ */ jsxRuntime.jsx(JsonView, { data: val, depth: depth + 1, defaultOpenDepth })
68
- ] }) }, key)),
69
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: closeB })
113
+ defaultOpenDepth,
114
+ format
115
+ },
116
+ key
117
+ )) }),
118
+ format === "json" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground py-[var(--json-view-row-space)]", children: closeB })
70
119
  ] })
71
120
  ] });
72
121
  }
122
+ function JsonViewScalar({
123
+ data,
124
+ format
125
+ }) {
126
+ if (data === null || data === void 0)
127
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground italic", children: "null" });
128
+ if (typeof data === "string") {
129
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-green-700 [[data-theme=dark]_&]:text-green-400", children: format === "yaml" ? yamlString(data) : JSON.stringify(data) });
130
+ }
131
+ if (typeof data === "number" || typeof data === "boolean") {
132
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-blue-700 [[data-theme=dark]_&]:text-blue-400", children: String(data) });
133
+ }
134
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: typeof data === "object" ? Array.isArray(data) ? "[]" : "{}" : String(data) });
135
+ }
136
+ function yamlString(value) {
137
+ return yaml.stringify(value, {
138
+ lineWidth: 0,
139
+ defaultStringType: value.includes("\n") ? "QUOTE_DOUBLE" : "PLAIN"
140
+ }).trimEnd();
141
+ }
73
142
  exports.JsonView = JsonView;
74
143
  //# sourceMappingURL=JsonView.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"JsonView.cjs","sources":["../../src/data/JsonView.tsx"],"sourcesContent":["import { useState } from \"react\";\n\nexport type JsonViewProps = {\n /** JSON-like value to render. */\n data: unknown;\n /** Optional property name displayed before nested object/array values. */\n name?: string;\n /** Current nesting depth; callers usually leave this unset. */\n depth?: number;\n /** Depth that starts expanded by default. */\n defaultOpenDepth?: number;\n};\n\nexport function JsonView({ data, name, depth = 0, defaultOpenDepth = 2 }: JsonViewProps) {\n const [open, setOpen] = useState(depth < defaultOpenDepth);\n\n if (data === null || data === undefined) {\n return <span className=\"text-muted-foreground italic\">null</span>;\n }\n\n if (typeof data === \"string\") {\n return <span className=\"text-green-700 dark:text-green-400\">\"{data}\"</span>;\n }\n\n if (typeof data === \"number\" || typeof data === \"boolean\") {\n return <span className=\"text-blue-700 dark:text-blue-400\">{String(data)}</span>;\n }\n\n if (typeof data !== \"object\") {\n return <span className=\"text-muted-foreground\">{String(data)}</span>;\n }\n\n const isArray = Array.isArray(data);\n const entries: Array<[string | number, unknown]> = isArray\n ? (data as unknown[]).map((v, i) => [i, v])\n : Object.entries(data as Record<string, unknown>);\n const [openB, closeB] = isArray ? [\"[\", \"]\"] : [\"{\", \"}\"];\n\n if (entries.length === 0) {\n return (\n <span className=\"text-muted-foreground\">\n {openB}\n {closeB}\n </span>\n );\n }\n\n return (\n <div className=\"text-sm font-mono\" style={{ paddingLeft: depth > 0 ? \"12px\" : \"0\" }}>\n <span\n className=\"cursor-pointer hover:bg-accent rounded px-0.5 select-none\"\n onClick={() => setOpen(!open)}\n >\n <span className=\"text-muted-foreground text-xs mr-1\">{open ? \"▼\" : \"▶\"}</span>\n {name && <span className=\"text-purple-600 dark:text-purple-400\">{name}</span>}\n {name && <span className=\"text-muted-foreground\">: </span>}\n {!open && (\n <span className=\"text-muted-foreground\">\n {openB} {entries.length}{\" \"}\n {isArray\n ? entries.length === 1\n ? \"item\"\n : \"items\"\n : entries.length === 1\n ? \"key\"\n : \"keys\"}{\" \"}\n {closeB}\n </span>\n )}\n {open && <span className=\"text-muted-foreground\">{openB}</span>}\n </span>\n {open && (\n <>\n {entries.map(([key, val]) => (\n <div key={key} className=\"pl-3 border-l border-border ml-1\">\n {typeof val === \"object\" && val !== null ? (\n <JsonView\n data={val}\n name={String(key)}\n depth={depth + 1}\n defaultOpenDepth={defaultOpenDepth}\n />\n ) : (\n <div>\n <span className=\"text-purple-600 dark:text-purple-400\">\n {isArray ? \"\" : String(key)}\n </span>\n {!isArray && <span className=\"text-muted-foreground\">: </span>}\n <JsonView data={val} depth={depth + 1} defaultOpenDepth={defaultOpenDepth} />\n </div>\n )}\n </div>\n ))}\n <span className=\"text-muted-foreground\">{closeB}</span>\n </>\n )}\n </div>\n );\n}\n"],"names":["useState","jsx","jsxs","Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"JsonView.cjs","sources":["../../src/data/JsonView.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { stringify } from \"yaml\";\nimport { Button } from \"../components/button\";\nimport { useDensityValue, type Density } from \"../hooks/use-density\";\nimport { UiChevronRight } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport { JsonSource } from \"./json-view/JsonSource\";\nimport type { JsonViewOptions } from \"./json-view/types\";\n\nexport type JsonViewProps = JsonViewOptions &\n (\n | {\n /** Parsed JSON-like value. Strings remain literal values. */\n data: unknown;\n source?: never;\n inputFormat?: never;\n }\n | {\n /** Raw JSON or NDJSON, including input interrupted at EOF. */\n source: string;\n /** Source encoding. This is independent of the YAML/JSON display format. */\n inputFormat?: \"json\" | \"ndjson\";\n data?: never;\n }\n );\n\nconst DENSITY_CLASSES: Record<Density, string> = {\n compact:\n \"text-xs leading-4 [--json-view-indent:0.75rem] [--json-view-row-space:0px]\",\n comfortable:\n \"text-sm leading-5 [--json-view-indent:1rem] [--json-view-row-space:1px]\",\n spacious:\n \"text-base leading-6 [--json-view-indent:1.25rem] [--json-view-row-space:2px]\",\n};\n\nexport function JsonView({\n density,\n format = \"yaml\",\n ...props\n}: JsonViewProps) {\n const inheritedDensity = useDensityValue();\n const activeDensity = density ?? inheritedDensity;\n const hasSource = Object.hasOwn(props, \"source\");\n if (hasSource === Object.hasOwn(props, \"data\"))\n throw new Error(\"JsonView requires exactly one of data or source\");\n if (!hasSource && Object.hasOwn(props, \"inputFormat\"))\n throw new Error(\"JsonView inputFormat requires source\");\n if (hasSource && typeof props.source !== \"string\")\n throw new Error(\"JsonView source must be a string\");\n const { data, source, inputFormat = \"json\", ...options } = props;\n return (\n <div\n data-format={format}\n data-density={activeDensity}\n className={cn(\n \"font-mono whitespace-pre-wrap break-words\",\n DENSITY_CLASSES[activeDensity],\n )}\n >\n {hasSource && source !== undefined ? (\n <JsonSource\n source={source}\n inputFormat={inputFormat}\n renderValue={(value) => (\n <JsonViewNode {...options} data={value} format={format} />\n )}\n />\n ) : (\n <JsonViewNode {...options} data={data} format={format} />\n )}\n </div>\n );\n}\n\ntype JsonViewNodeProps = Omit<JsonViewOptions, \"density\"> & {\n data: unknown;\n format: \"yaml\" | \"json\";\n sequenceItem?: boolean;\n};\n\nfunction JsonViewNode({\n data,\n name,\n depth = 0,\n defaultOpenDepth = 2,\n format,\n sequenceItem = false,\n}: JsonViewNodeProps) {\n const [open, setOpen] = useState(depth < defaultOpenDepth);\n const isArray = Array.isArray(data);\n const entries =\n data !== null && typeof data === \"object\" ? Object.entries(data) : [];\n const prefix = (\n <>\n {sequenceItem && <span className=\"text-muted-foreground\">- </span>}\n {name !== undefined && (\n <>\n <span className=\"text-purple-600 [[data-theme=dark]_&]:text-purple-400\">\n {format === \"yaml\" ? yamlString(name) : name}\n </span>\n <span className=\"text-muted-foreground\">: </span>\n </>\n )}\n </>\n );\n if (entries.length === 0) {\n return (\n <div className=\"py-[var(--json-view-row-space)]\">\n {prefix}\n <JsonViewScalar data={data} format={format} />\n </div>\n );\n }\n const [openB, closeB] = isArray ? [\"[\", \"]\"] : [\"{\", \"}\"];\n const summary = `${entries.length} ${isArray ? (entries.length === 1 ? \"item\" : \"items\") : entries.length === 1 ? \"key\" : \"keys\"}`;\n return (\n <div>\n <Button\n variant=\"ghost\"\n type=\"button\"\n aria-expanded={open}\n aria-label={`${open ? \"Collapse\" : \"Expand\"} ${name ?? \"value\"}`}\n className=\"h-auto max-w-full justify-start gap-0 rounded px-0 py-[var(--json-view-row-space)] text-left font-normal text-[length:inherit] leading-[inherit] whitespace-pre-wrap [&_svg]:size-[0.75em]\"\n onClick={() => setOpen(!open)}\n >\n <UiChevronRight\n aria-hidden=\"true\"\n className={cn(\n \"mr-1 shrink-0 text-muted-foreground\",\n open && \"rotate-90\",\n )}\n />\n <span>\n {prefix}\n <span className=\"text-muted-foreground\">\n {format === \"json\"\n ? open\n ? openB\n : `${openB} ${summary} ${closeB}`\n : !open || (name === undefined && !sequenceItem)\n ? summary\n : null}\n </span>\n </span>\n </Button>\n {open && (\n <>\n <div className=\"border-l border-border pl-[var(--json-view-indent)]\">\n {entries.map(([key, val]) => (\n <JsonViewNode\n key={key}\n data={val}\n {...(!isArray ? { name: key } : {})}\n sequenceItem={isArray && format === \"yaml\"}\n depth={depth + 1}\n defaultOpenDepth={defaultOpenDepth}\n format={format}\n />\n ))}\n </div>\n {format === \"json\" && (\n <div className=\"text-muted-foreground py-[var(--json-view-row-space)]\">\n {closeB}\n </div>\n )}\n </>\n )}\n </div>\n );\n}\n\nfunction JsonViewScalar({\n data,\n format,\n}: Pick<JsonViewProps, \"data\" | \"format\">) {\n if (data === null || data === undefined)\n return <span className=\"text-muted-foreground italic\">null</span>;\n if (typeof data === \"string\") {\n return (\n <span className=\"text-green-700 [[data-theme=dark]_&]:text-green-400\">\n {format === \"yaml\" ? yamlString(data) : JSON.stringify(data)}\n </span>\n );\n }\n if (typeof data === \"number\" || typeof data === \"boolean\") {\n return (\n <span className=\"text-blue-700 [[data-theme=dark]_&]:text-blue-400\">\n {String(data)}\n </span>\n );\n }\n return (\n <span className=\"text-muted-foreground\">\n {typeof data === \"object\"\n ? Array.isArray(data)\n ? \"[]\"\n : \"{}\"\n : String(data)}\n </span>\n );\n}\n\nfunction yamlString(value: string): string {\n return stringify(value, {\n lineWidth: 0,\n defaultStringType: value.includes(\"\\n\") ? \"QUOTE_DOUBLE\" : \"PLAIN\",\n }).trimEnd();\n}\n"],"names":["useDensityValue","jsx","cn","JsonSource","useState","jsxs","Fragment","Button","UiChevronRight","stringify"],"mappings":"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"}
@@ -1,12 +1,15 @@
1
- export type JsonViewProps = {
2
- /** JSON-like value to render. */
1
+ import { JsonViewOptions } from './json-view/types.js';
2
+ export type JsonViewProps = JsonViewOptions & ({
3
+ /** Parsed JSON-like value. Strings remain literal values. */
3
4
  data: unknown;
4
- /** Optional property name displayed before nested object/array values. */
5
- name?: string;
6
- /** Current nesting depth; callers usually leave this unset. */
7
- depth?: number;
8
- /** Depth that starts expanded by default. */
9
- defaultOpenDepth?: number;
10
- };
11
- export declare function JsonView({ data, name, depth, defaultOpenDepth }: JsonViewProps): import("react").JSX.Element;
5
+ source?: never;
6
+ inputFormat?: never;
7
+ } | {
8
+ /** Raw JSON or NDJSON, including input interrupted at EOF. */
9
+ source: string;
10
+ /** Source encoding. This is independent of the YAML/JSON display format. */
11
+ inputFormat?: "json" | "ndjson";
12
+ data?: never;
13
+ });
14
+ export declare function JsonView({ density, format, ...props }: JsonViewProps): import("react").JSX.Element;
12
15
  //# sourceMappingURL=JsonView.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"JsonView.d.ts","sourceRoot":"","sources":["../../src/data/JsonView.tsx"],"names":[],"mappings":"AAEA,MAAM,MAAM,aAAa,GAAG;IAC1B,iCAAiC;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAS,EAAE,gBAAoB,EAAE,EAAE,aAAa,+BAqFtF"}
1
+ {"version":3,"file":"JsonView.d.ts","sourceRoot":"","sources":["../../src/data/JsonView.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,MAAM,aAAa,GAAG,eAAe,GACzC,CACI;IACE,6DAA6D;IAC7D,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,WAAW,CAAC,EAAE,KAAK,CAAC;CACrB,GACD;IACE,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAChC,IAAI,CAAC,EAAE,KAAK,CAAC;CACd,CACJ,CAAC;AAWJ,wBAAgB,QAAQ,CAAC,EACvB,OAAO,EACP,MAAe,EACf,GAAG,KAAK,EACT,EAAE,aAAa,+BAiCf"}
@@ -1,73 +1,142 @@
1
1
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
2
  import { useState } from "react";
3
- function JsonView({ data, name, depth = 0, defaultOpenDepth = 2 }) {
3
+ import { stringify } from "yaml";
4
+ import { Button } from "../components/button.js";
5
+ import { useDensityValue } from "../hooks/use-density.js";
6
+ import { cn } from "../lib/utils.js";
7
+ import { JsonSource } from "./json-view/JsonSource.js";
8
+ import { UiChevronRight } from "../icons/components/UiChevronRight.js";
9
+ const DENSITY_CLASSES = {
10
+ compact: "text-xs leading-4 [--json-view-indent:0.75rem] [--json-view-row-space:0px]",
11
+ comfortable: "text-sm leading-5 [--json-view-indent:1rem] [--json-view-row-space:1px]",
12
+ spacious: "text-base leading-6 [--json-view-indent:1.25rem] [--json-view-row-space:2px]"
13
+ };
14
+ function JsonView({
15
+ density,
16
+ format = "yaml",
17
+ ...props
18
+ }) {
19
+ const inheritedDensity = useDensityValue();
20
+ const activeDensity = density ?? inheritedDensity;
21
+ const hasSource = Object.hasOwn(props, "source");
22
+ if (hasSource === Object.hasOwn(props, "data"))
23
+ throw new Error("JsonView requires exactly one of data or source");
24
+ if (!hasSource && Object.hasOwn(props, "inputFormat"))
25
+ throw new Error("JsonView inputFormat requires source");
26
+ if (hasSource && typeof props.source !== "string")
27
+ throw new Error("JsonView source must be a string");
28
+ const { data, source, inputFormat = "json", ...options } = props;
29
+ return /* @__PURE__ */ jsx(
30
+ "div",
31
+ {
32
+ "data-format": format,
33
+ "data-density": activeDensity,
34
+ className: cn(
35
+ "font-mono whitespace-pre-wrap break-words",
36
+ DENSITY_CLASSES[activeDensity]
37
+ ),
38
+ children: hasSource && source !== void 0 ? /* @__PURE__ */ jsx(
39
+ JsonSource,
40
+ {
41
+ source,
42
+ inputFormat,
43
+ renderValue: (value) => /* @__PURE__ */ jsx(JsonViewNode, { ...options, data: value, format })
44
+ }
45
+ ) : /* @__PURE__ */ jsx(JsonViewNode, { ...options, data, format })
46
+ }
47
+ );
48
+ }
49
+ function JsonViewNode({
50
+ data,
51
+ name,
52
+ depth = 0,
53
+ defaultOpenDepth = 2,
54
+ format,
55
+ sequenceItem = false
56
+ }) {
4
57
  const [open, setOpen] = useState(depth < defaultOpenDepth);
5
- if (data === null || data === void 0) {
6
- return /* @__PURE__ */ jsx("span", { className: "text-muted-foreground italic", children: "null" });
7
- }
8
- if (typeof data === "string") {
9
- return /* @__PURE__ */ jsxs("span", { className: "text-green-700 dark:text-green-400", children: [
10
- '"',
11
- data,
12
- '"'
13
- ] });
14
- }
15
- if (typeof data === "number" || typeof data === "boolean") {
16
- return /* @__PURE__ */ jsx("span", { className: "text-blue-700 dark:text-blue-400", children: String(data) });
17
- }
18
- if (typeof data !== "object") {
19
- return /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: String(data) });
20
- }
21
58
  const isArray = Array.isArray(data);
22
- const entries = isArray ? data.map((v, i) => [i, v]) : Object.entries(data);
23
- const [openB, closeB] = isArray ? ["[", "]"] : ["{", "}"];
59
+ const entries = data !== null && typeof data === "object" ? Object.entries(data) : [];
60
+ const prefix = /* @__PURE__ */ jsxs(Fragment, { children: [
61
+ sequenceItem && /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "- " }),
62
+ name !== void 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
63
+ /* @__PURE__ */ jsx("span", { className: "text-purple-600 [[data-theme=dark]_&]:text-purple-400", children: format === "yaml" ? yamlString(name) : name }),
64
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: ": " })
65
+ ] })
66
+ ] });
24
67
  if (entries.length === 0) {
25
- return /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground", children: [
26
- openB,
27
- closeB
68
+ return /* @__PURE__ */ jsxs("div", { className: "py-[var(--json-view-row-space)]", children: [
69
+ prefix,
70
+ /* @__PURE__ */ jsx(JsonViewScalar, { data, format })
28
71
  ] });
29
72
  }
30
- return /* @__PURE__ */ jsxs("div", { className: "text-sm font-mono", style: { paddingLeft: depth > 0 ? "12px" : "0" }, children: [
73
+ const [openB, closeB] = isArray ? ["[", "]"] : ["{", "}"];
74
+ const summary = `${entries.length} ${isArray ? entries.length === 1 ? "item" : "items" : entries.length === 1 ? "key" : "keys"}`;
75
+ return /* @__PURE__ */ jsxs("div", { children: [
31
76
  /* @__PURE__ */ jsxs(
32
- "span",
77
+ Button,
33
78
  {
34
- className: "cursor-pointer hover:bg-accent rounded px-0.5 select-none",
79
+ variant: "ghost",
80
+ type: "button",
81
+ "aria-expanded": open,
82
+ "aria-label": `${open ? "Collapse" : "Expand"} ${name ?? "value"}`,
83
+ className: "h-auto max-w-full justify-start gap-0 rounded px-0 py-[var(--json-view-row-space)] text-left font-normal text-[length:inherit] leading-[inherit] whitespace-pre-wrap [&_svg]:size-[0.75em]",
35
84
  onClick: () => setOpen(!open),
36
85
  children: [
37
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-xs mr-1", children: open ? "▼" : "▶" }),
38
- name && /* @__PURE__ */ jsx("span", { className: "text-purple-600 dark:text-purple-400", children: name }),
39
- name && /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: ": " }),
40
- !open && /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground", children: [
41
- openB,
42
- " ",
43
- entries.length,
44
- " ",
45
- isArray ? entries.length === 1 ? "item" : "items" : entries.length === 1 ? "key" : "keys",
46
- " ",
47
- closeB
48
- ] }),
49
- open && /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: openB })
86
+ /* @__PURE__ */ jsx(
87
+ UiChevronRight,
88
+ {
89
+ "aria-hidden": "true",
90
+ className: cn(
91
+ "mr-1 shrink-0 text-muted-foreground",
92
+ open && "rotate-90"
93
+ )
94
+ }
95
+ ),
96
+ /* @__PURE__ */ jsxs("span", { children: [
97
+ prefix,
98
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: format === "json" ? open ? openB : `${openB} ${summary} ${closeB}` : !open || name === void 0 && !sequenceItem ? summary : null })
99
+ ] })
50
100
  ]
51
101
  }
52
102
  ),
53
103
  open && /* @__PURE__ */ jsxs(Fragment, { children: [
54
- entries.map(([key, val]) => /* @__PURE__ */ jsx("div", { className: "pl-3 border-l border-border ml-1", children: typeof val === "object" && val !== null ? /* @__PURE__ */ jsx(
55
- JsonView,
104
+ /* @__PURE__ */ jsx("div", { className: "border-l border-border pl-[var(--json-view-indent)]", children: entries.map(([key, val]) => /* @__PURE__ */ jsx(
105
+ JsonViewNode,
56
106
  {
57
107
  data: val,
58
- name: String(key),
108
+ ...!isArray ? { name: key } : {},
109
+ sequenceItem: isArray && format === "yaml",
59
110
  depth: depth + 1,
60
- defaultOpenDepth
61
- }
62
- ) : /* @__PURE__ */ jsxs("div", { children: [
63
- /* @__PURE__ */ jsx("span", { className: "text-purple-600 dark:text-purple-400", children: isArray ? "" : String(key) }),
64
- !isArray && /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: ": " }),
65
- /* @__PURE__ */ jsx(JsonView, { data: val, depth: depth + 1, defaultOpenDepth })
66
- ] }) }, key)),
67
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: closeB })
111
+ defaultOpenDepth,
112
+ format
113
+ },
114
+ key
115
+ )) }),
116
+ format === "json" && /* @__PURE__ */ jsx("div", { className: "text-muted-foreground py-[var(--json-view-row-space)]", children: closeB })
68
117
  ] })
69
118
  ] });
70
119
  }
120
+ function JsonViewScalar({
121
+ data,
122
+ format
123
+ }) {
124
+ if (data === null || data === void 0)
125
+ return /* @__PURE__ */ jsx("span", { className: "text-muted-foreground italic", children: "null" });
126
+ if (typeof data === "string") {
127
+ return /* @__PURE__ */ jsx("span", { className: "text-green-700 [[data-theme=dark]_&]:text-green-400", children: format === "yaml" ? yamlString(data) : JSON.stringify(data) });
128
+ }
129
+ if (typeof data === "number" || typeof data === "boolean") {
130
+ return /* @__PURE__ */ jsx("span", { className: "text-blue-700 [[data-theme=dark]_&]:text-blue-400", children: String(data) });
131
+ }
132
+ return /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: typeof data === "object" ? Array.isArray(data) ? "[]" : "{}" : String(data) });
133
+ }
134
+ function yamlString(value) {
135
+ return stringify(value, {
136
+ lineWidth: 0,
137
+ defaultStringType: value.includes("\n") ? "QUOTE_DOUBLE" : "PLAIN"
138
+ }).trimEnd();
139
+ }
71
140
  export {
72
141
  JsonView
73
142
  };
@@ -1 +1 @@
1
- {"version":3,"file":"JsonView.js","sources":["../../src/data/JsonView.tsx"],"sourcesContent":["import { useState } from \"react\";\n\nexport type JsonViewProps = {\n /** JSON-like value to render. */\n data: unknown;\n /** Optional property name displayed before nested object/array values. */\n name?: string;\n /** Current nesting depth; callers usually leave this unset. */\n depth?: number;\n /** Depth that starts expanded by default. */\n defaultOpenDepth?: number;\n};\n\nexport function JsonView({ data, name, depth = 0, defaultOpenDepth = 2 }: JsonViewProps) {\n const [open, setOpen] = useState(depth < defaultOpenDepth);\n\n if (data === null || data === undefined) {\n return <span className=\"text-muted-foreground italic\">null</span>;\n }\n\n if (typeof data === \"string\") {\n return <span className=\"text-green-700 dark:text-green-400\">\"{data}\"</span>;\n }\n\n if (typeof data === \"number\" || typeof data === \"boolean\") {\n return <span className=\"text-blue-700 dark:text-blue-400\">{String(data)}</span>;\n }\n\n if (typeof data !== \"object\") {\n return <span className=\"text-muted-foreground\">{String(data)}</span>;\n }\n\n const isArray = Array.isArray(data);\n const entries: Array<[string | number, unknown]> = isArray\n ? (data as unknown[]).map((v, i) => [i, v])\n : Object.entries(data as Record<string, unknown>);\n const [openB, closeB] = isArray ? [\"[\", \"]\"] : [\"{\", \"}\"];\n\n if (entries.length === 0) {\n return (\n <span className=\"text-muted-foreground\">\n {openB}\n {closeB}\n </span>\n );\n }\n\n return (\n <div className=\"text-sm font-mono\" style={{ paddingLeft: depth > 0 ? \"12px\" : \"0\" }}>\n <span\n className=\"cursor-pointer hover:bg-accent rounded px-0.5 select-none\"\n onClick={() => setOpen(!open)}\n >\n <span className=\"text-muted-foreground text-xs mr-1\">{open ? \"▼\" : \"▶\"}</span>\n {name && <span className=\"text-purple-600 dark:text-purple-400\">{name}</span>}\n {name && <span className=\"text-muted-foreground\">: </span>}\n {!open && (\n <span className=\"text-muted-foreground\">\n {openB} {entries.length}{\" \"}\n {isArray\n ? entries.length === 1\n ? \"item\"\n : \"items\"\n : entries.length === 1\n ? \"key\"\n : \"keys\"}{\" \"}\n {closeB}\n </span>\n )}\n {open && <span className=\"text-muted-foreground\">{openB}</span>}\n </span>\n {open && (\n <>\n {entries.map(([key, val]) => (\n <div key={key} className=\"pl-3 border-l border-border ml-1\">\n {typeof val === \"object\" && val !== null ? (\n <JsonView\n data={val}\n name={String(key)}\n depth={depth + 1}\n defaultOpenDepth={defaultOpenDepth}\n />\n ) : (\n <div>\n <span className=\"text-purple-600 dark:text-purple-400\">\n {isArray ? \"\" : String(key)}\n </span>\n {!isArray && <span className=\"text-muted-foreground\">: </span>}\n <JsonView data={val} depth={depth + 1} defaultOpenDepth={defaultOpenDepth} />\n </div>\n )}\n </div>\n ))}\n <span className=\"text-muted-foreground\">{closeB}</span>\n </>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"JsonView.js","sources":["../../src/data/JsonView.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { stringify } from \"yaml\";\nimport { Button } from \"../components/button\";\nimport { useDensityValue, type Density } from \"../hooks/use-density\";\nimport { UiChevronRight } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport { JsonSource } from \"./json-view/JsonSource\";\nimport type { JsonViewOptions } from \"./json-view/types\";\n\nexport type JsonViewProps = JsonViewOptions &\n (\n | {\n /** Parsed JSON-like value. Strings remain literal values. */\n data: unknown;\n source?: never;\n inputFormat?: never;\n }\n | {\n /** Raw JSON or NDJSON, including input interrupted at EOF. */\n source: string;\n /** Source encoding. This is independent of the YAML/JSON display format. */\n inputFormat?: \"json\" | \"ndjson\";\n data?: never;\n }\n );\n\nconst DENSITY_CLASSES: Record<Density, string> = {\n compact:\n \"text-xs leading-4 [--json-view-indent:0.75rem] [--json-view-row-space:0px]\",\n comfortable:\n \"text-sm leading-5 [--json-view-indent:1rem] [--json-view-row-space:1px]\",\n spacious:\n \"text-base leading-6 [--json-view-indent:1.25rem] [--json-view-row-space:2px]\",\n};\n\nexport function JsonView({\n density,\n format = \"yaml\",\n ...props\n}: JsonViewProps) {\n const inheritedDensity = useDensityValue();\n const activeDensity = density ?? inheritedDensity;\n const hasSource = Object.hasOwn(props, \"source\");\n if (hasSource === Object.hasOwn(props, \"data\"))\n throw new Error(\"JsonView requires exactly one of data or source\");\n if (!hasSource && Object.hasOwn(props, \"inputFormat\"))\n throw new Error(\"JsonView inputFormat requires source\");\n if (hasSource && typeof props.source !== \"string\")\n throw new Error(\"JsonView source must be a string\");\n const { data, source, inputFormat = \"json\", ...options } = props;\n return (\n <div\n data-format={format}\n data-density={activeDensity}\n className={cn(\n \"font-mono whitespace-pre-wrap break-words\",\n DENSITY_CLASSES[activeDensity],\n )}\n >\n {hasSource && source !== undefined ? (\n <JsonSource\n source={source}\n inputFormat={inputFormat}\n renderValue={(value) => (\n <JsonViewNode {...options} data={value} format={format} />\n )}\n />\n ) : (\n <JsonViewNode {...options} data={data} format={format} />\n )}\n </div>\n );\n}\n\ntype JsonViewNodeProps = Omit<JsonViewOptions, \"density\"> & {\n data: unknown;\n format: \"yaml\" | \"json\";\n sequenceItem?: boolean;\n};\n\nfunction JsonViewNode({\n data,\n name,\n depth = 0,\n defaultOpenDepth = 2,\n format,\n sequenceItem = false,\n}: JsonViewNodeProps) {\n const [open, setOpen] = useState(depth < defaultOpenDepth);\n const isArray = Array.isArray(data);\n const entries =\n data !== null && typeof data === \"object\" ? Object.entries(data) : [];\n const prefix = (\n <>\n {sequenceItem && <span className=\"text-muted-foreground\">- </span>}\n {name !== undefined && (\n <>\n <span className=\"text-purple-600 [[data-theme=dark]_&]:text-purple-400\">\n {format === \"yaml\" ? yamlString(name) : name}\n </span>\n <span className=\"text-muted-foreground\">: </span>\n </>\n )}\n </>\n );\n if (entries.length === 0) {\n return (\n <div className=\"py-[var(--json-view-row-space)]\">\n {prefix}\n <JsonViewScalar data={data} format={format} />\n </div>\n );\n }\n const [openB, closeB] = isArray ? [\"[\", \"]\"] : [\"{\", \"}\"];\n const summary = `${entries.length} ${isArray ? (entries.length === 1 ? \"item\" : \"items\") : entries.length === 1 ? \"key\" : \"keys\"}`;\n return (\n <div>\n <Button\n variant=\"ghost\"\n type=\"button\"\n aria-expanded={open}\n aria-label={`${open ? \"Collapse\" : \"Expand\"} ${name ?? \"value\"}`}\n className=\"h-auto max-w-full justify-start gap-0 rounded px-0 py-[var(--json-view-row-space)] text-left font-normal text-[length:inherit] leading-[inherit] whitespace-pre-wrap [&_svg]:size-[0.75em]\"\n onClick={() => setOpen(!open)}\n >\n <UiChevronRight\n aria-hidden=\"true\"\n className={cn(\n \"mr-1 shrink-0 text-muted-foreground\",\n open && \"rotate-90\",\n )}\n />\n <span>\n {prefix}\n <span className=\"text-muted-foreground\">\n {format === \"json\"\n ? open\n ? openB\n : `${openB} ${summary} ${closeB}`\n : !open || (name === undefined && !sequenceItem)\n ? summary\n : null}\n </span>\n </span>\n </Button>\n {open && (\n <>\n <div className=\"border-l border-border pl-[var(--json-view-indent)]\">\n {entries.map(([key, val]) => (\n <JsonViewNode\n key={key}\n data={val}\n {...(!isArray ? { name: key } : {})}\n sequenceItem={isArray && format === \"yaml\"}\n depth={depth + 1}\n defaultOpenDepth={defaultOpenDepth}\n format={format}\n />\n ))}\n </div>\n {format === \"json\" && (\n <div className=\"text-muted-foreground py-[var(--json-view-row-space)]\">\n {closeB}\n </div>\n )}\n </>\n )}\n </div>\n );\n}\n\nfunction JsonViewScalar({\n data,\n format,\n}: Pick<JsonViewProps, \"data\" | \"format\">) {\n if (data === null || data === undefined)\n return <span className=\"text-muted-foreground italic\">null</span>;\n if (typeof data === \"string\") {\n return (\n <span className=\"text-green-700 [[data-theme=dark]_&]:text-green-400\">\n {format === \"yaml\" ? yamlString(data) : JSON.stringify(data)}\n </span>\n );\n }\n if (typeof data === \"number\" || typeof data === \"boolean\") {\n return (\n <span className=\"text-blue-700 [[data-theme=dark]_&]:text-blue-400\">\n {String(data)}\n </span>\n );\n }\n return (\n <span className=\"text-muted-foreground\">\n {typeof data === \"object\"\n ? Array.isArray(data)\n ? \"[]\"\n : \"{}\"\n : String(data)}\n </span>\n );\n}\n\nfunction yamlString(value: string): string {\n return stringify(value, {\n lineWidth: 0,\n defaultStringType: value.includes(\"\\n\") ? \"QUOTE_DOUBLE\" : \"PLAIN\",\n }).trimEnd();\n}\n"],"names":[],"mappings":"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"}
@@ -323,7 +323,7 @@ function PreviewResult({
323
323
  case "html":
324
324
  return /* @__PURE__ */ jsxRuntime.jsx(HtmlPreview, { html: result.html });
325
325
  case "json":
326
- return /* @__PURE__ */ jsxRuntime.jsx(JsonView.JsonView, { data: result.data });
326
+ return /* @__PURE__ */ jsxRuntime.jsx(JsonView.JsonView, { data: result.data, format: "json" });
327
327
  case "url":
328
328
  return /* @__PURE__ */ jsxRuntime.jsx(UrlPreview, { format, url: result.url });
329
329
  case "blob":
@@ -344,7 +344,7 @@ function TextResult({
344
344
  }
345
345
  if (format === "json" || isJsonContent(result.contentType)) {
346
346
  const parsed = parseJson(result.text);
347
- return parsed.ok ? /* @__PURE__ */ jsxRuntime.jsx(JsonView.JsonView, { data: parsed.value }) : /* @__PURE__ */ jsxRuntime.jsx(TextPreview, { label: "JSON output", text: result.text });
347
+ return parsed.ok ? /* @__PURE__ */ jsxRuntime.jsx(JsonView.JsonView, { data: parsed.value, format: "json" }) : /* @__PURE__ */ jsxRuntime.jsx(TextPreview, { label: "JSON output", text: result.text });
348
348
  }
349
349
  return /* @__PURE__ */ jsxRuntime.jsx(
350
350
  TextPreview,