@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.
- package/README.md +24 -0
- package/dist/ai.cjs +4 -2
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +3 -1
- package/dist/components/MdxEditorField.cjs +40 -22
- package/dist/components/MdxEditorField.cjs.map +1 -1
- package/dist/components/MdxEditorField.d.ts.map +1 -1
- package/dist/components/MdxEditorField.js +41 -23
- package/dist/components/MdxEditorField.js.map +1 -1
- package/dist/components/json-schema-form-item-summary.cjs +6 -1
- package/dist/components/json-schema-form-item-summary.cjs.map +1 -1
- package/dist/components/json-schema-form-item-summary.d.ts.map +1 -1
- package/dist/components/json-schema-form-item-summary.js +6 -1
- package/dist/components/json-schema-form-item-summary.js.map +1 -1
- package/dist/data/AccessMark.cjs +23 -0
- package/dist/data/AccessMark.cjs.map +1 -0
- package/dist/data/AccessMark.d.ts +11 -0
- package/dist/data/AccessMark.d.ts.map +1 -0
- package/dist/data/AccessMark.js +23 -0
- package/dist/data/AccessMark.js.map +1 -0
- package/dist/data/CodeBlock.cjs +3 -2
- package/dist/data/CodeBlock.cjs.map +1 -1
- package/dist/data/CodeBlock.d.ts +3 -1
- package/dist/data/CodeBlock.d.ts.map +1 -1
- package/dist/data/CodeBlock.js +3 -2
- package/dist/data/CodeBlock.js.map +1 -1
- package/dist/data/CodeDiff.cjs +116 -23
- package/dist/data/CodeDiff.cjs.map +1 -1
- package/dist/data/CodeDiff.d.ts +26 -0
- package/dist/data/CodeDiff.d.ts.map +1 -1
- package/dist/data/CodeDiff.js +116 -23
- package/dist/data/CodeDiff.js.map +1 -1
- package/dist/data/GraphDiagram.cjs +75 -11
- package/dist/data/GraphDiagram.cjs.map +1 -1
- package/dist/data/GraphDiagram.d.ts +17 -2
- package/dist/data/GraphDiagram.d.ts.map +1 -1
- package/dist/data/GraphDiagram.js +76 -12
- package/dist/data/GraphDiagram.js.map +1 -1
- package/dist/data/GraphDiagramGroups.cjs +100 -0
- package/dist/data/GraphDiagramGroups.cjs.map +1 -0
- package/dist/data/GraphDiagramGroups.d.ts +24 -0
- package/dist/data/GraphDiagramGroups.d.ts.map +1 -0
- package/dist/data/GraphDiagramGroups.js +100 -0
- package/dist/data/GraphDiagramGroups.js.map +1 -0
- package/dist/data/GraphDiagramNodes.cjs +46 -51
- package/dist/data/GraphDiagramNodes.cjs.map +1 -1
- package/dist/data/GraphDiagramNodes.d.ts +8 -9
- package/dist/data/GraphDiagramNodes.d.ts.map +1 -1
- package/dist/data/GraphDiagramNodes.js +46 -51
- package/dist/data/GraphDiagramNodes.js.map +1 -1
- package/dist/data/JsonView.cjs +118 -49
- package/dist/data/JsonView.cjs.map +1 -1
- package/dist/data/JsonView.d.ts +13 -10
- package/dist/data/JsonView.d.ts.map +1 -1
- package/dist/data/JsonView.js +118 -49
- package/dist/data/JsonView.js.map +1 -1
- package/dist/data/MarkdownEditor.cjs +2 -2
- package/dist/data/MarkdownEditor.cjs.map +1 -1
- package/dist/data/MarkdownEditor.js +2 -2
- package/dist/data/MarkdownEditor.js.map +1 -1
- package/dist/data/TreeNode.cjs +1 -1
- package/dist/data/TreeNode.cjs.map +1 -1
- package/dist/data/TreeNode.d.ts.map +1 -1
- package/dist/data/TreeNode.js +1 -1
- package/dist/data/TreeNode.js.map +1 -1
- package/dist/data/ai/AdvancedChatConfig.cjs +90 -249
- package/dist/data/ai/AdvancedChatConfig.cjs.map +1 -1
- package/dist/data/ai/AdvancedChatConfig.d.ts +2 -5
- package/dist/data/ai/AdvancedChatConfig.d.ts.map +1 -1
- package/dist/data/ai/AdvancedChatConfig.js +91 -250
- package/dist/data/ai/AdvancedChatConfig.js.map +1 -1
- package/dist/data/ai/ChatButton.cjs +2 -0
- package/dist/data/ai/ChatButton.cjs.map +1 -1
- package/dist/data/ai/ChatButton.d.ts +1 -1
- package/dist/data/ai/ChatButton.d.ts.map +1 -1
- package/dist/data/ai/ChatButton.js +2 -0
- package/dist/data/ai/ChatButton.js.map +1 -1
- package/dist/data/ai/ChatFab.cjs +5 -1
- package/dist/data/ai/ChatFab.cjs.map +1 -1
- package/dist/data/ai/ChatFab.d.ts +5 -1
- package/dist/data/ai/ChatFab.d.ts.map +1 -1
- package/dist/data/ai/ChatFab.js +5 -1
- package/dist/data/ai/ChatFab.js.map +1 -1
- package/dist/data/ai/ChatWindow.cjs +2 -8
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.js +2 -8
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/ChatWindow.runtime.cjs +0 -5
- package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.runtime.d.ts +0 -2
- package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.runtime.js +0 -5
- package/dist/data/ai/ChatWindow.runtime.js.map +1 -1
- package/dist/data/ai/PromptRunEditor/runtimeActions.cjs +2 -2
- package/dist/data/ai/PromptRunEditor/runtimeActions.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/runtimeActions.js +2 -2
- package/dist/data/ai/PromptRunEditor/runtimeActions.js.map +1 -1
- package/dist/data/ai/SessionInspector.approvals.cjs +3 -6
- package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.approvals.js +3 -6
- package/dist/data/ai/SessionInspector.approvals.js.map +1 -1
- package/dist/data/ai/SessionViewer.cjs +13 -4
- package/dist/data/ai/SessionViewer.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.d.ts +5 -1
- package/dist/data/ai/SessionViewer.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.header.cjs +1 -1
- package/dist/data/ai/SessionViewer.header.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.header.js +1 -1
- package/dist/data/ai/SessionViewer.header.js.map +1 -1
- package/dist/data/ai/SessionViewer.js +13 -4
- package/dist/data/ai/SessionViewer.js.map +1 -1
- package/dist/data/ai/SessionViewer.model.cjs +2 -0
- package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.model.d.ts +1 -0
- package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.model.js +2 -0
- package/dist/data/ai/SessionViewer.model.js.map +1 -1
- package/dist/data/ai/SessionViewer.rows.cjs +41 -27
- package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.rows.d.ts +4 -2
- package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.rows.js +41 -27
- package/dist/data/ai/SessionViewer.rows.js.map +1 -1
- package/dist/data/ai/SessionViewer.tokens.cjs +35 -0
- package/dist/data/ai/SessionViewer.tokens.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.tokens.d.ts +5 -0
- package/dist/data/ai/SessionViewer.tokens.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.tokens.js +35 -0
- package/dist/data/ai/SessionViewer.tokens.js.map +1 -0
- package/dist/data/ai/SessionViewer.tool-cost.cjs +128 -0
- package/dist/data/ai/SessionViewer.tool-cost.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.tool-cost.d.ts +6 -0
- package/dist/data/ai/SessionViewer.tool-cost.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.tool-cost.js +128 -0
- package/dist/data/ai/SessionViewer.tool-cost.js.map +1 -0
- package/dist/data/ai/SessionViewer.tool-details.cjs +3 -1
- package/dist/data/ai/SessionViewer.tool-details.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.tool-details.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.tool-details.js +3 -1
- package/dist/data/ai/SessionViewer.tool-details.js.map +1 -1
- package/dist/data/ai/SessionViewer.tool-row.cjs +55 -35
- package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.tool-row.d.ts +2 -1
- package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.tool-row.js +55 -35
- package/dist/data/ai/SessionViewer.tool-row.js.map +1 -1
- package/dist/data/ai/SessionViewer.unified.d.ts +4 -0
- package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
- package/dist/data/ai/SessionViewerMenu.cjs +18 -1
- package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
- package/dist/data/ai/SessionViewerMenu.d.ts +6 -1
- package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
- package/dist/data/ai/SessionViewerMenu.js +18 -1
- package/dist/data/ai/SessionViewerMenu.js.map +1 -1
- package/dist/data/ai/ToolPreferences.cjs +149 -143
- package/dist/data/ai/ToolPreferences.cjs.map +1 -1
- package/dist/data/ai/ToolPreferences.d.ts +20 -6
- package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.js +151 -146
- package/dist/data/ai/ToolPreferences.js.map +1 -1
- package/dist/data/ai/ToolPreferences.model.cjs +14 -10
- package/dist/data/ai/ToolPreferences.model.cjs.map +1 -1
- package/dist/data/ai/ToolPreferences.model.d.ts +1 -0
- package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.model.js +15 -11
- package/dist/data/ai/ToolPreferences.model.js.map +1 -1
- package/dist/data/ai/ToolPreferencesList.cjs +1 -0
- package/dist/data/ai/ToolPreferencesList.cjs.map +1 -1
- package/dist/data/ai/ToolPreferencesList.d.ts +4 -1
- package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferencesList.js +2 -1
- package/dist/data/ai/ToolPreferencesList.js.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.cjs +52 -53
- package/dist/data/ai/ToolSchemaBrowser.cjs.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.d.ts +6 -3
- package/dist/data/ai/ToolSchemaBrowser.d.ts.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs +9 -13
- package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts +5 -2
- package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.directory-header.js +9 -13
- package/dist/data/ai/ToolSchemaBrowser.directory-header.js.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.js +53 -54
- package/dist/data/ai/ToolSchemaBrowser.js.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.model.cjs +19 -27
- package/dist/data/ai/ToolSchemaBrowser.model.cjs.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.model.d.ts +9 -6
- package/dist/data/ai/ToolSchemaBrowser.model.d.ts.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.model.js +20 -28
- package/dist/data/ai/ToolSchemaBrowser.model.js.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs +12 -213
- package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts +1 -3
- package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.sidebar.js +13 -214
- package/dist/data/ai/ToolSchemaBrowser.sidebar.js.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.strategies.cjs +54 -0
- package/dist/data/ai/ToolSchemaBrowser.strategies.cjs.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts +9 -0
- package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.strategies.js +54 -0
- package/dist/data/ai/ToolSchemaBrowser.strategies.js.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.tree.cjs +179 -0
- package/dist/data/ai/ToolSchemaBrowser.tree.cjs.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.tree.d.ts +20 -0
- package/dist/data/ai/ToolSchemaBrowser.tree.d.ts.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.tree.js +179 -0
- package/dist/data/ai/ToolSchemaBrowser.tree.js.map +1 -0
- package/dist/data/ai/index.d.ts +2 -2
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs +8 -28
- package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs.map +1 -1
- package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.d.ts.map +1 -1
- package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js +9 -29
- package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js.map +1 -1
- package/dist/data/ai/session-token-sizing.d.ts +32 -0
- package/dist/data/ai/session-token-sizing.d.ts.map +1 -0
- package/dist/data/ai/use-session-token-sizing.cjs +73 -0
- package/dist/data/ai/use-session-token-sizing.cjs.map +1 -0
- package/dist/data/ai/use-session-token-sizing.d.ts +21 -0
- package/dist/data/ai/use-session-token-sizing.d.ts.map +1 -0
- package/dist/data/ai/use-session-token-sizing.js +73 -0
- package/dist/data/ai/use-session-token-sizing.js.map +1 -0
- package/dist/data/call-graph/CallGraph.cjs +269 -0
- package/dist/data/call-graph/CallGraph.cjs.map +1 -0
- package/dist/data/call-graph/CallGraph.d.ts +78 -0
- package/dist/data/call-graph/CallGraph.d.ts.map +1 -0
- package/dist/data/call-graph/CallGraph.js +269 -0
- package/dist/data/call-graph/CallGraph.js.map +1 -0
- package/dist/data/call-graph/CallGraphGlyphs.cjs +39 -0
- package/dist/data/call-graph/CallGraphGlyphs.cjs.map +1 -0
- package/dist/data/call-graph/CallGraphGlyphs.d.ts +19 -0
- package/dist/data/call-graph/CallGraphGlyphs.d.ts.map +1 -0
- package/dist/data/call-graph/CallGraphGlyphs.js +39 -0
- package/dist/data/call-graph/CallGraphGlyphs.js.map +1 -0
- package/dist/data/call-graph/CallGraphMembers.cjs +51 -0
- package/dist/data/call-graph/CallGraphMembers.cjs.map +1 -0
- package/dist/data/call-graph/CallGraphMembers.d.ts +22 -0
- package/dist/data/call-graph/CallGraphMembers.d.ts.map +1 -0
- package/dist/data/call-graph/CallGraphMembers.js +51 -0
- package/dist/data/call-graph/CallGraphMembers.js.map +1 -0
- package/dist/data/call-graph/CallGraphParts.cjs +204 -0
- package/dist/data/call-graph/CallGraphParts.cjs.map +1 -0
- package/dist/data/call-graph/CallGraphParts.d.ts +44 -0
- package/dist/data/call-graph/CallGraphParts.d.ts.map +1 -0
- package/dist/data/call-graph/CallGraphParts.js +204 -0
- package/dist/data/call-graph/CallGraphParts.js.map +1 -0
- package/dist/data/call-graph/CallGraphToolbar.cjs +198 -0
- package/dist/data/call-graph/CallGraphToolbar.cjs.map +1 -0
- package/dist/data/call-graph/CallGraphToolbar.d.ts +55 -0
- package/dist/data/call-graph/CallGraphToolbar.d.ts.map +1 -0
- package/dist/data/call-graph/CallGraphToolbar.js +198 -0
- package/dist/data/call-graph/CallGraphToolbar.js.map +1 -0
- package/dist/data/call-graph/call-graph-exclude.cjs +75 -0
- package/dist/data/call-graph/call-graph-exclude.cjs.map +1 -0
- package/dist/data/call-graph/call-graph-exclude.d.ts +31 -0
- package/dist/data/call-graph/call-graph-exclude.d.ts.map +1 -0
- package/dist/data/call-graph/call-graph-exclude.js +75 -0
- package/dist/data/call-graph/call-graph-exclude.js.map +1 -0
- package/dist/data/call-graph/call-graph-labels.cjs +96 -0
- package/dist/data/call-graph/call-graph-labels.cjs.map +1 -0
- package/dist/data/call-graph/call-graph-labels.d.ts +53 -0
- package/dist/data/call-graph/call-graph-labels.d.ts.map +1 -0
- package/dist/data/call-graph/call-graph-labels.js +96 -0
- package/dist/data/call-graph/call-graph-labels.js.map +1 -0
- package/dist/data/call-graph/call-graph-model.cjs +312 -0
- package/dist/data/call-graph/call-graph-model.cjs.map +1 -0
- package/dist/data/call-graph/call-graph-model.d.ts +138 -0
- package/dist/data/call-graph/call-graph-model.d.ts.map +1 -0
- package/dist/data/call-graph/call-graph-model.js +312 -0
- package/dist/data/call-graph/call-graph-model.js.map +1 -0
- package/dist/data/call-graph/call-graph-vocabulary.cjs +195 -0
- package/dist/data/call-graph/call-graph-vocabulary.cjs.map +1 -0
- package/dist/data/call-graph/call-graph-vocabulary.d.ts +76 -0
- package/dist/data/call-graph/call-graph-vocabulary.d.ts.map +1 -0
- package/dist/data/call-graph/call-graph-vocabulary.js +195 -0
- package/dist/data/call-graph/call-graph-vocabulary.js.map +1 -0
- package/dist/data/call-graph/call-graph.fixtures.d.ts +63 -0
- package/dist/data/call-graph/call-graph.fixtures.d.ts.map +1 -0
- package/dist/data/call-graph/index.d.ts +7 -0
- package/dist/data/call-graph/index.d.ts.map +1 -0
- package/dist/data/call-graph/types.cjs +5 -0
- package/dist/data/call-graph/types.cjs.map +1 -0
- package/dist/data/call-graph/types.d.ts +140 -0
- package/dist/data/call-graph/types.d.ts.map +1 -0
- package/dist/data/call-graph/types.js +5 -0
- package/dist/data/call-graph/types.js.map +1 -0
- package/dist/data/call-graph/use-call-graph.cjs +93 -0
- package/dist/data/call-graph/use-call-graph.cjs.map +1 -0
- package/dist/data/call-graph/use-call-graph.d.ts +24 -0
- package/dist/data/call-graph/use-call-graph.d.ts.map +1 -0
- package/dist/data/call-graph/use-call-graph.js +93 -0
- package/dist/data/call-graph/use-call-graph.js.map +1 -0
- package/dist/data/chat/Chat.cjs +39 -15
- package/dist/data/chat/Chat.cjs.map +1 -1
- package/dist/data/chat/Chat.d.ts.map +1 -1
- package/dist/data/chat/Chat.fixtures.cjs +2 -2
- package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
- package/dist/data/chat/Chat.fixtures.js +2 -2
- package/dist/data/chat/Chat.fixtures.js.map +1 -1
- package/dist/data/chat/Chat.js +40 -16
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.cjs +3 -6
- package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.js +3 -6
- package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
- package/dist/data/chat/ContextMeter.bar.cjs +5 -8
- package/dist/data/chat/ContextMeter.bar.cjs.map +1 -1
- package/dist/data/chat/ContextMeter.bar.d.ts +1 -1
- package/dist/data/chat/ContextMeter.bar.d.ts.map +1 -1
- package/dist/data/chat/ContextMeter.bar.js +5 -8
- package/dist/data/chat/ContextMeter.bar.js.map +1 -1
- package/dist/data/chat/ContextMeter.cjs +18 -19
- package/dist/data/chat/ContextMeter.cjs.map +1 -1
- package/dist/data/chat/ContextMeter.d.ts +1 -1
- package/dist/data/chat/ContextMeter.d.ts.map +1 -1
- package/dist/data/chat/ContextMeter.js +18 -19
- package/dist/data/chat/ContextMeter.js.map +1 -1
- package/dist/data/chat/Conversation.cjs +2 -1
- package/dist/data/chat/Conversation.cjs.map +1 -1
- package/dist/data/chat/Conversation.d.ts +4 -1
- package/dist/data/chat/Conversation.d.ts.map +1 -1
- package/dist/data/chat/Conversation.js +2 -1
- package/dist/data/chat/Conversation.js.map +1 -1
- package/dist/data/chat/Message.cjs +39 -12
- package/dist/data/chat/Message.cjs.map +1 -1
- package/dist/data/chat/Message.d.ts +1 -1
- package/dist/data/chat/Message.d.ts.map +1 -1
- package/dist/data/chat/Message.js +40 -13
- package/dist/data/chat/Message.js.map +1 -1
- package/dist/data/chat/ToolCall.cjs +60 -5
- package/dist/data/chat/ToolCall.cjs.map +1 -1
- package/dist/data/chat/ToolCall.d.ts +7 -2
- package/dist/data/chat/ToolCall.d.ts.map +1 -1
- package/dist/data/chat/ToolCall.js +60 -5
- package/dist/data/chat/ToolCall.js.map +1 -1
- package/dist/data/chat/approval.cjs.map +1 -1
- package/dist/data/chat/approval.d.ts +2 -2
- package/dist/data/chat/approval.d.ts.map +1 -1
- package/dist/data/chat/approval.js.map +1 -1
- package/dist/data/chat/tool-policy.cjs +59 -2
- package/dist/data/chat/tool-policy.cjs.map +1 -1
- package/dist/data/chat/tool-policy.d.ts +9 -0
- package/dist/data/chat/tool-policy.d.ts.map +1 -1
- package/dist/data/chat/tool-policy.js +59 -2
- package/dist/data/chat/tool-policy.js.map +1 -1
- package/dist/data/chat/types.cjs +6 -0
- package/dist/data/chat/types.cjs.map +1 -1
- package/dist/data/chat/types.d.ts +13 -4
- package/dist/data/chat/types.d.ts.map +1 -1
- package/dist/data/chat/types.js +7 -1
- package/dist/data/chat/types.js.map +1 -1
- package/dist/data/chat/usage-snapshot.cjs +11 -6
- package/dist/data/chat/usage-snapshot.cjs.map +1 -1
- package/dist/data/chat/usage-snapshot.d.ts +0 -1
- package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
- package/dist/data/chat/usage-snapshot.js +11 -6
- package/dist/data/chat/usage-snapshot.js.map +1 -1
- package/dist/data/data-access.cjs +8 -0
- package/dist/data/data-access.cjs.map +1 -0
- package/dist/data/data-access.d.ts +5 -0
- package/dist/data/data-access.d.ts.map +1 -0
- package/dist/data/data-access.js +8 -0
- package/dist/data/data-access.js.map +1 -0
- package/dist/data/diagnostics/StackFrameRow.cjs +3 -3
- package/dist/data/diagnostics/StackFrameRow.cjs.map +1 -1
- package/dist/data/diagnostics/StackFrameRow.js +3 -3
- package/dist/data/diagnostics/StackFrameRow.js.map +1 -1
- package/dist/data/git/GitChangeList.cjs +6 -2
- package/dist/data/git/GitChangeList.cjs.map +1 -1
- package/dist/data/git/GitChangeList.d.ts +6 -1
- package/dist/data/git/GitChangeList.d.ts.map +1 -1
- package/dist/data/git/GitChangeList.js +6 -2
- package/dist/data/git/GitChangeList.js.map +1 -1
- package/dist/data/graph-columns-layout.cjs +61 -14
- package/dist/data/graph-columns-layout.cjs.map +1 -1
- package/dist/data/graph-columns-layout.d.ts +42 -0
- package/dist/data/graph-columns-layout.d.ts.map +1 -1
- package/dist/data/graph-columns-layout.js +61 -14
- package/dist/data/graph-columns-layout.js.map +1 -1
- package/dist/data/graph-diagram-model.cjs +5 -0
- package/dist/data/graph-diagram-model.cjs.map +1 -1
- package/dist/data/graph-diagram-model.d.ts +24 -0
- package/dist/data/graph-diagram-model.d.ts.map +1 -1
- package/dist/data/graph-diagram-model.js +5 -0
- package/dist/data/graph-diagram-model.js.map +1 -1
- package/dist/data/graph-edge-routing.cjs +9 -3
- package/dist/data/graph-edge-routing.cjs.map +1 -1
- package/dist/data/graph-edge-routing.d.ts +2 -0
- package/dist/data/graph-edge-routing.d.ts.map +1 -1
- package/dist/data/graph-edge-routing.js +9 -3
- package/dist/data/graph-edge-routing.js.map +1 -1
- package/dist/data/graph-group-window.cjs +60 -0
- package/dist/data/graph-group-window.cjs.map +1 -0
- package/dist/data/graph-group-window.d.ts +33 -0
- package/dist/data/graph-group-window.d.ts.map +1 -0
- package/dist/data/graph-group-window.js +60 -0
- package/dist/data/graph-group-window.js.map +1 -0
- package/dist/data/json-view/JsonSource.cjs +84 -0
- package/dist/data/json-view/JsonSource.cjs.map +1 -0
- package/dist/data/json-view/JsonSource.d.ts +7 -0
- package/dist/data/json-view/JsonSource.d.ts.map +1 -0
- package/dist/data/json-view/JsonSource.js +84 -0
- package/dist/data/json-view/JsonSource.js.map +1 -0
- package/dist/data/json-view/parse-prefix.cjs +132 -0
- package/dist/data/json-view/parse-prefix.cjs.map +1 -0
- package/dist/data/json-view/parse-prefix.d.ts +11 -0
- package/dist/data/json-view/parse-prefix.d.ts.map +1 -0
- package/dist/data/json-view/parse-prefix.js +132 -0
- package/dist/data/json-view/parse-prefix.js.map +1 -0
- package/dist/data/json-view/parse-source.cjs +62 -0
- package/dist/data/json-view/parse-source.cjs.map +1 -0
- package/dist/data/json-view/parse-source.d.ts +16 -0
- package/dist/data/json-view/parse-source.d.ts.map +1 -0
- package/dist/data/json-view/parse-source.js +62 -0
- package/dist/data/json-view/parse-source.js.map +1 -0
- package/dist/data/json-view/story-fixtures.d.ts +6 -0
- package/dist/data/json-view/story-fixtures.d.ts.map +1 -0
- package/dist/data/json-view/types.d.ts +14 -0
- package/dist/data/json-view/types.d.ts.map +1 -0
- package/dist/data/runtime/RuntimeBar.cjs +2 -5
- package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBar.d.ts +2 -4
- package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBar.fields.cjs +2 -2
- package/dist/data/runtime/RuntimeBar.fields.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBar.fields.js +2 -2
- package/dist/data/runtime/RuntimeBar.fields.js.map +1 -1
- package/dist/data/runtime/RuntimeBar.js +2 -5
- package/dist/data/runtime/RuntimeBar.js.map +1 -1
- package/dist/data/runtime/RuntimeBar.selection.cjs +4 -1
- package/dist/data/runtime/RuntimeBar.selection.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBar.selection.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBar.selection.js +5 -2
- package/dist/data/runtime/RuntimeBar.selection.js.map +1 -1
- package/dist/data/runtime/RuntimeBarActions.cjs +1 -5
- package/dist/data/runtime/RuntimeBarActions.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBarActions.d.ts +1 -1
- package/dist/data/runtime/RuntimeBarActions.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBarActions.js +1 -5
- package/dist/data/runtime/RuntimeBarActions.js.map +1 -1
- package/dist/data/runtime/RuntimeBarIdentity.cjs +6 -14
- package/dist/data/runtime/RuntimeBarIdentity.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBarIdentity.d.ts +0 -1
- package/dist/data/runtime/RuntimeBarIdentity.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBarIdentity.js +6 -14
- package/dist/data/runtime/RuntimeBarIdentity.js.map +1 -1
- package/dist/data/runtime/RuntimeBarLayout.cjs +8 -27
- package/dist/data/runtime/RuntimeBarLayout.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBarLayout.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBarLayout.js +8 -27
- package/dist/data/runtime/RuntimeBarLayout.js.map +1 -1
- package/dist/data/runtime/RuntimeBarSegment.cjs +1 -5
- package/dist/data/runtime/RuntimeBarSegment.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBarSegment.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBarSegment.js +1 -5
- package/dist/data/runtime/RuntimeBarSegment.js.map +1 -1
- package/dist/data/runtime/use-runtime-bar-overflow.cjs +4 -10
- package/dist/data/runtime/use-runtime-bar-overflow.cjs.map +1 -1
- package/dist/data/runtime/use-runtime-bar-overflow.d.ts +1 -2
- package/dist/data/runtime/use-runtime-bar-overflow.d.ts.map +1 -1
- package/dist/data/runtime/use-runtime-bar-overflow.js +4 -10
- package/dist/data/runtime/use-runtime-bar-overflow.js.map +1 -1
- package/dist/data/test-runner/TestRunner.fixtures.d.ts +0 -20
- package/dist/data/test-runner/TestRunner.fixtures.d.ts.map +1 -1
- package/dist/data/test-runner/TestRunner.large-fixtures.d.ts +22 -0
- package/dist/data/test-runner/TestRunner.large-fixtures.d.ts.map +1 -0
- package/dist/data/use-group-windows.cjs +50 -0
- package/dist/data/use-group-windows.cjs.map +1 -0
- package/dist/data/use-group-windows.d.ts +27 -0
- package/dist/data/use-group-windows.d.ts.map +1 -0
- package/dist/data/use-group-windows.js +50 -0
- package/dist/data/use-group-windows.js.map +1 -0
- package/dist/data/use-pan-zoom.cjs +23 -10
- package/dist/data/use-pan-zoom.cjs.map +1 -1
- package/dist/data/use-pan-zoom.d.ts +16 -2
- package/dist/data/use-pan-zoom.d.ts.map +1 -1
- package/dist/data/use-pan-zoom.js +23 -10
- package/dist/data/use-pan-zoom.js.map +1 -1
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +36 -2
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +5 -2
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +35 -1
- package/dist/data.js.map +1 -1
- package/dist/hooks/event-hub.cjs +229 -0
- package/dist/hooks/event-hub.cjs.map +1 -0
- package/dist/hooks/event-hub.d.ts +26 -0
- package/dist/hooks/event-hub.d.ts.map +1 -0
- package/dist/hooks/event-hub.js +229 -0
- package/dist/hooks/event-hub.js.map +1 -0
- package/dist/hooks.cjs +2 -0
- package/dist/hooks.cjs.map +1 -1
- package/dist/hooks.d.ts +1 -0
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +2 -0
- package/dist/hooks.js.map +1 -1
- package/dist/index.cjs +40 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +37 -1
- package/dist/index.js.map +1 -1
- package/dist/layout/Workspace.cjs +13 -4
- package/dist/layout/Workspace.cjs.map +1 -1
- package/dist/layout/Workspace.d.ts +7 -2
- package/dist/layout/Workspace.d.ts.map +1 -1
- package/dist/layout/Workspace.js +13 -4
- package/dist/layout/Workspace.js.map +1 -1
- package/dist/lib/permission-strategies.cjs +71 -11
- package/dist/lib/permission-strategies.cjs.map +1 -1
- package/dist/lib/permission-strategies.d.ts +3 -0
- package/dist/lib/permission-strategies.d.ts.map +1 -1
- package/dist/lib/permission-strategies.js +71 -11
- package/dist/lib/permission-strategies.js.map +1 -1
- package/dist/overlay/modalStack.cjs +13 -6
- package/dist/overlay/modalStack.cjs.map +1 -1
- package/dist/overlay/modalStack.d.ts.map +1 -1
- package/dist/overlay/modalStack.js +13 -6
- package/dist/overlay/modalStack.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +5 -3
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs +0 -57
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs.map +0 -1
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts +0 -7
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts.map +0 -1
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js +0 -57
- package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js.map +0 -1
- package/dist/data/runtime/RuntimeBar.context.cjs +0 -8
- package/dist/data/runtime/RuntimeBar.context.cjs.map +0 -1
- package/dist/data/runtime/RuntimeBar.context.d.ts +0 -2
- package/dist/data/runtime/RuntimeBar.context.d.ts.map +0 -1
- package/dist/data/runtime/RuntimeBar.context.js +0 -8
- package/dist/data/runtime/RuntimeBar.context.js.map +0 -1
package/dist/data/JsonView.cjs
CHANGED
|
@@ -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
|
-
|
|
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 =
|
|
25
|
-
const
|
|
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("
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
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
|
-
|
|
79
|
+
button.Button,
|
|
35
80
|
{
|
|
36
|
-
|
|
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(
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
57
|
-
|
|
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:
|
|
110
|
+
...!isArray ? { name: key } : {},
|
|
111
|
+
sequenceItem: isArray && format === "yaml",
|
|
61
112
|
depth: depth + 1,
|
|
62
|
-
defaultOpenDepth
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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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"}
|
package/dist/data/JsonView.d.ts
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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":"
|
|
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"}
|
package/dist/data/JsonView.js
CHANGED
|
@@ -1,73 +1,142 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useState } from "react";
|
|
3
|
-
|
|
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 =
|
|
23
|
-
const
|
|
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("
|
|
26
|
-
|
|
27
|
-
|
|
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
|
-
|
|
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
|
-
|
|
77
|
+
Button,
|
|
33
78
|
{
|
|
34
|
-
|
|
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(
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
-
|
|
55
|
-
|
|
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:
|
|
108
|
+
...!isArray ? { name: key } : {},
|
|
109
|
+
sequenceItem: isArray && format === "yaml",
|
|
59
110
|
depth: depth + 1,
|
|
60
|
-
defaultOpenDepth
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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,
|