@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
|
@@ -39,7 +39,7 @@ function NodeLabel({ node, oneLine }) {
|
|
|
39
39
|
}
|
|
40
40
|
);
|
|
41
41
|
if (node.icon == null) return label;
|
|
42
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex max-w-full items-center gap-1.5", children: [
|
|
42
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 max-w-full items-center gap-1.5", children: [
|
|
43
43
|
/* @__PURE__ */ jsxRuntime.jsx("span", { "data-graph-node-icon": "", className: "flex shrink-0 text-base leading-none", children: node.icon }),
|
|
44
44
|
label
|
|
45
45
|
] });
|
|
@@ -47,6 +47,8 @@ function NodeLabel({ node, oneLine }) {
|
|
|
47
47
|
function NodeBody({
|
|
48
48
|
node,
|
|
49
49
|
oneLine,
|
|
50
|
+
compact,
|
|
51
|
+
row,
|
|
50
52
|
selected,
|
|
51
53
|
onSelect
|
|
52
54
|
}) {
|
|
@@ -55,12 +57,14 @@ function NodeBody({
|
|
|
55
57
|
"div",
|
|
56
58
|
{
|
|
57
59
|
className: utils.cn(
|
|
58
|
-
"flex h-full w-full
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
node.
|
|
62
|
-
|
|
63
|
-
|
|
60
|
+
"flex h-full w-full text-xs",
|
|
61
|
+
row ? "border-t border-border/60 hover:bg-accent" : "border shadow-sm",
|
|
62
|
+
compact ? "items-center px-2 text-left text-[11px]" : "flex-col items-center justify-center gap-0.5 px-3 py-1.5 text-center",
|
|
63
|
+
!row && (node.shape === "pill" ? "rounded-full" : compact ? "rounded-md" : "rounded-lg"),
|
|
64
|
+
row ? tone === "info" ? "bg-sky-500/10 text-foreground" : "text-foreground" : graphDiagramModel.TONE_NODE_CLASS[tone],
|
|
65
|
+
node.muted && (row ? "text-muted-foreground" : "border-dashed text-muted-foreground shadow-none"),
|
|
66
|
+
!row && node.muted && tone === "neutral" && "bg-muted",
|
|
67
|
+
selected && (row ? "bg-primary/10 ring-2 ring-inset ring-primary" : "ring-2 ring-primary ring-offset-2 ring-offset-background"),
|
|
64
68
|
onSelect && "cursor-pointer"
|
|
65
69
|
),
|
|
66
70
|
...onSelect ? {
|
|
@@ -73,9 +77,12 @@ function NodeBody({
|
|
|
73
77
|
"aria-label": node.ariaLabel,
|
|
74
78
|
title: node.title,
|
|
75
79
|
children: [
|
|
76
|
-
/* @__PURE__ */ jsxRuntime.jsx(NodeLabel, { node, oneLine }),
|
|
77
|
-
node.
|
|
78
|
-
node.
|
|
80
|
+
/* @__PURE__ */ jsxRuntime.jsx(NodeLabel, { node, oneLine: oneLine || compact }),
|
|
81
|
+
row && node.aside != null && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-auto min-w-0 truncate pl-2 font-mono text-[10px] text-muted-foreground", children: node.aside }),
|
|
82
|
+
node.mark != null && // Kept out of the node's accessible name, which stays the node's own; the mark is its tooltip.
|
|
83
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { "data-graph-node-mark": "", "aria-hidden": true, className: utils.cn("flex shrink-0 items-center", compact ? row && node.aside != null ? "pl-1" : "ml-auto pl-1" : "absolute right-1 top-1"), children: node.mark }),
|
|
84
|
+
!compact && node.detail != null && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "line-clamp-1 text-[10px] leading-tight text-muted-foreground", children: node.detail }),
|
|
85
|
+
!compact && node.badge != null && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mt-0.5", children: node.badge })
|
|
79
86
|
]
|
|
80
87
|
}
|
|
81
88
|
);
|
|
@@ -83,60 +90,48 @@ function NodeBody({
|
|
|
83
90
|
function GraphDiagramNodes({
|
|
84
91
|
nodes,
|
|
85
92
|
positions,
|
|
93
|
+
windowOf,
|
|
86
94
|
place,
|
|
87
95
|
nodeWidth,
|
|
88
96
|
nodeHeight,
|
|
97
|
+
nodeHeights,
|
|
98
|
+
recordNodes,
|
|
89
99
|
selectedId,
|
|
90
100
|
onNodeSelect,
|
|
91
101
|
onNodeExpand,
|
|
92
102
|
onNodeHover
|
|
93
103
|
}) {
|
|
94
|
-
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: nodes.map((node) =>
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
style: { ...place(graphDiagramModel.requireEntry(positions, node.id, "layout position")), width: nodeWidth, height: nodeHeight },
|
|
100
|
-
...onNodeHover ? graphDiagramModel.hoverHandlers(node.id, onNodeHover) : {},
|
|
101
|
-
children: [
|
|
102
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
103
|
-
NodeBody,
|
|
104
|
-
{
|
|
105
|
-
node,
|
|
106
|
-
oneLine: nodeHeight < TWO_LINE_HEIGHT,
|
|
107
|
-
selected: selectedId != null && node.id === selectedId,
|
|
108
|
-
onSelect: onNodeSelect ? () => onNodeSelect(node.id) : void 0
|
|
109
|
-
}
|
|
110
|
-
),
|
|
111
|
-
node.expandCount != null && node.expandCount > 0 && /* @__PURE__ */ jsxRuntime.jsx(ExpandControl, { node, onExpand: onNodeExpand ? () => onNodeExpand(node.id) : void 0 })
|
|
112
|
-
]
|
|
113
|
-
},
|
|
114
|
-
node.id
|
|
115
|
-
)) });
|
|
116
|
-
}
|
|
117
|
-
function GraphDiagramGroupBoxes({ boxes, groups }) {
|
|
118
|
-
const captions = new Map(groups == null ? void 0 : groups.map((group) => [group.id, group]));
|
|
119
|
-
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: boxes.map((box) => {
|
|
120
|
-
const caption = captions.get(box.group);
|
|
121
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
104
|
+
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: nodes.map((node) => {
|
|
105
|
+
const height = nodeHeights[node.id] ?? nodeHeight;
|
|
106
|
+
const compact = node.id in nodeHeights;
|
|
107
|
+
const windowBox = windowOf.get(node.id);
|
|
108
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
122
109
|
"div",
|
|
123
110
|
{
|
|
124
|
-
"data-graph-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
111
|
+
"data-graph-node": node.id,
|
|
112
|
+
"data-graph-node-size": compact ? "compact" : "regular",
|
|
113
|
+
...windowBox !== void 0 ? { "data-graph-window": windowBox } : {},
|
|
114
|
+
className: "pointer-events-auto absolute -translate-x-1/2 -translate-y-1/2",
|
|
115
|
+
style: { ...place(graphDiagramModel.requireEntry(positions, node.id, "layout position")), width: nodeWidth, height },
|
|
116
|
+
...onNodeHover ? graphDiagramModel.hoverHandlers(node.id, onNodeHover) : {},
|
|
117
|
+
children: [
|
|
118
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
119
|
+
NodeBody,
|
|
120
|
+
{
|
|
121
|
+
node,
|
|
122
|
+
oneLine: height < TWO_LINE_HEIGHT,
|
|
123
|
+
compact,
|
|
124
|
+
row: recordNodes.has(node.id),
|
|
125
|
+
selected: selectedId != null && node.id === selectedId,
|
|
126
|
+
onSelect: onNodeSelect ? () => onNodeSelect(node.id) : void 0
|
|
127
|
+
}
|
|
128
|
+
),
|
|
129
|
+
node.expandCount != null && node.expandCount > 0 && /* @__PURE__ */ jsxRuntime.jsx(ExpandControl, { node, onExpand: onNodeExpand ? () => onNodeExpand(node.id) : void 0 })
|
|
130
|
+
]
|
|
135
131
|
},
|
|
136
|
-
|
|
132
|
+
node.id
|
|
137
133
|
);
|
|
138
134
|
}) });
|
|
139
135
|
}
|
|
140
|
-
exports.GraphDiagramGroupBoxes = GraphDiagramGroupBoxes;
|
|
141
136
|
exports.GraphDiagramNodes = GraphDiagramNodes;
|
|
142
137
|
//# sourceMappingURL=GraphDiagramNodes.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphDiagramNodes.cjs","sources":["../../src/data/GraphDiagramNodes.tsx"],"sourcesContent":["import type { KeyboardEvent } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport type { GraphLayoutPosition } from \"./graph-layout\";\nimport type { GraphLayoutGroupBox } from \"./graph-columns-layout\";\nimport {\n activateOnKey,\n hoverHandlers,\n nodeName,\n requireEntry,\n TONE_NODE_CLASS,\n type GraphDiagramGroup,\n type GraphDiagramNode,\n type GraphPlacer,\n} from \"./graph-diagram-model\";\n\nexport interface GraphDiagramNodesProps {\n nodes: GraphDiagramNode[];\n positions: Record<string, GraphLayoutPosition>;\n place: GraphPlacer;\n nodeWidth: number;\n nodeHeight: number;\n selectedId: string | undefined;\n onNodeSelect: ((id: string) => void) | undefined;\n onNodeExpand: ((id: string) => void) | undefined;\n onNodeHover: ((id: string | undefined) => void) | undefined;\n}\n\nconst EXPAND_CLASS =\n \"absolute bottom-0 translate-y-1/2 rounded-full border border-border bg-background px-1.5 text-[10px] font-semibold leading-4 text-muted-foreground shadow-sm\";\n\n/**\n * The `+N` control. It hangs off the node's bottom edge at its outer end —\n * the left for a node left of level 0, the right otherwise — which keeps it\n * clear of the side middles where edges attach. It is a sibling of the node,\n * not a child, so activating it never also selects the node.\n */\nfunction ExpandControl({ node, onExpand }: { node: GraphDiagramNode; onExpand: (() => void) | undefined }) {\n const side = (node.level ?? 0) < 0 ? \"left-2\" : \"right-2\";\n const text = `+${node.expandCount}`;\n if (!onExpand) {\n return <span className={cn(EXPAND_CLASS, side)}>{text}</span>;\n }\n return (\n <button\n type=\"button\"\n aria-label={`Expand ${node.expandCount} more from ${nodeName(node)}`}\n className={cn(\n EXPAND_CLASS,\n side,\n \"cursor-pointer hover:border-primary hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n )}\n onClick={onExpand}\n >\n {text}\n </button>\n );\n}\n\n// Two 15px label lines, the body's vertical padding and its border.\nconst TWO_LINE_HEIGHT = 44;\n\n/** The label, behind the node's icon when it has one. `oneLine` cuts it with an ellipsis instead of wrapping. */\nfunction NodeLabel({ node, oneLine }: { node: GraphDiagramNode; oneLine: boolean }) {\n const label = (\n <span\n className={cn(\n oneLine ? \"max-w-full truncate\" : \"line-clamp-2\",\n \"font-medium leading-tight\",\n node.icon != null && \"min-w-0\",\n )}\n >\n {node.label}\n </span>\n );\n if (node.icon == null) return label;\n return (\n <span className=\"flex max-w-full items-center gap-1.5\">\n <span data-graph-node-icon=\"\" className=\"flex shrink-0 text-base leading-none\">\n {node.icon}\n </span>\n {label}\n </span>\n );\n}\n\nfunction NodeBody({\n node,\n oneLine,\n selected,\n onSelect,\n}: {\n node: GraphDiagramNode;\n /** The node is too short for two label lines. */\n oneLine: boolean;\n selected: boolean;\n onSelect: (() => void) | undefined;\n}) {\n const tone = node.tone ?? \"neutral\";\n return (\n <div\n className={cn(\n \"flex h-full w-full flex-col items-center justify-center gap-0.5 border px-3 py-1.5 text-center text-xs shadow-sm\",\n node.shape === \"pill\" ? \"rounded-full\" : \"rounded-lg\",\n TONE_NODE_CLASS[tone],\n node.muted && \"border-dashed text-muted-foreground shadow-none\",\n node.muted && tone === \"neutral\" && \"bg-muted\",\n selected && \"ring-2 ring-primary ring-offset-2 ring-offset-background\",\n onSelect && \"cursor-pointer\",\n )}\n {...(onSelect\n ? {\n role: \"button\" as const,\n tabIndex: 0,\n \"aria-pressed\": selected,\n onClick: onSelect,\n onKeyDown: (event: KeyboardEvent<HTMLDivElement>) => activateOnKey(event, onSelect),\n }\n : {})}\n aria-label={node.ariaLabel}\n title={node.title}\n >\n <NodeLabel node={node} oneLine={oneLine} />\n {node.detail != null && (\n <span className=\"line-clamp-1 text-[10px] leading-tight text-muted-foreground\">{node.detail}</span>\n )}\n {node.badge != null && <span className=\"mt-0.5\">{node.badge}</span>}\n </div>\n );\n}\n\nexport function GraphDiagramNodes({\n nodes,\n positions,\n place,\n nodeWidth,\n nodeHeight,\n selectedId,\n onNodeSelect,\n onNodeExpand,\n onNodeHover,\n}: GraphDiagramNodesProps) {\n return (\n <>\n {nodes.map((node) => (\n <div\n key={node.id}\n data-graph-node={node.id}\n className=\"pointer-events-auto absolute -translate-x-1/2 -translate-y-1/2\"\n style={{ ...place(requireEntry(positions, node.id, \"layout position\")), width: nodeWidth, height: nodeHeight }}\n {...(onNodeHover ? hoverHandlers(node.id, onNodeHover) : {})}\n >\n <NodeBody\n node={node}\n oneLine={nodeHeight < TWO_LINE_HEIGHT}\n selected={selectedId != null && node.id === selectedId}\n onSelect={onNodeSelect ? () => onNodeSelect(node.id) : undefined}\n />\n {node.expandCount != null && node.expandCount > 0 && (\n <ExpandControl node={node} onExpand={onNodeExpand ? () => onNodeExpand(node.id) : undefined} />\n )}\n </div>\n ))}\n </>\n );\n}\n\nexport interface GraphDiagramGroupBoxesProps {\n boxes: GraphLayoutGroupBox[];\n groups: GraphDiagramGroup[] | undefined;\n}\n\n/** Group rectangles, drawn behind the edges and nodes, each captioned on its top border. */\nexport function GraphDiagramGroupBoxes({ boxes, groups }: GraphDiagramGroupBoxesProps) {\n const captions = new Map(groups?.map((group) => [group.id, group]));\n return (\n <>\n {boxes.map((box) => {\n const caption = captions.get(box.group);\n return (\n <div\n key={box.id}\n data-graph-group={box.id}\n className=\"absolute rounded-xl border border-dashed border-border bg-muted/30\"\n style={{ left: box.x, top: box.y, width: box.width, height: box.height }}\n >\n <span\n title={caption?.title}\n className=\"absolute left-2 top-0 max-w-[calc(100%-1rem)] -translate-y-1/2 truncate rounded border border-border bg-background px-1.5 text-[10px] font-medium leading-4 text-muted-foreground\"\n >\n {caption ? caption.label : box.group}\n </span>\n </div>\n );\n })}\n </>\n );\n}\n"],"names":["cn","jsx","nodeName","jsxs","TONE_NODE_CLASS","activateOnKey","Fragment","requireEntry","hoverHandlers"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GraphDiagramNodes.cjs","sources":["../../src/data/GraphDiagramNodes.tsx"],"sourcesContent":["import type { KeyboardEvent } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport type { GraphLayoutPosition } from \"./graph-layout\";\nimport {\n activateOnKey,\n hoverHandlers,\n nodeName,\n requireEntry,\n TONE_NODE_CLASS,\n type GraphDiagramNode,\n type GraphPlacer,\n} from \"./graph-diagram-model\";\n\nexport interface GraphDiagramNodesProps {\n /** The nodes to draw: members scrolled out of their window and collapsed groups' stand-ins are left out. */\n nodes: GraphDiagramNode[];\n positions: Record<string, GraphLayoutPosition>;\n /** The windowed group box each scrolling member belongs to, by node id: a wheel over the member scrolls it. */\n windowOf: ReadonlyMap<string, string>;\n place: GraphPlacer;\n nodeWidth: number;\n nodeHeight: number;\n /** Heights of the nodes not drawn at `nodeHeight`, by id: the compact ones. */\n nodeHeights: Readonly<Record<string, number>>;\n recordNodes: ReadonlySet<string>;\n selectedId: string | undefined;\n onNodeSelect: ((id: string) => void) | undefined;\n onNodeExpand: ((id: string) => void) | undefined;\n onNodeHover: ((id: string | undefined) => void) | undefined;\n}\n\nconst EXPAND_CLASS =\n \"absolute bottom-0 translate-y-1/2 rounded-full border border-border bg-background px-1.5 text-[10px] font-semibold leading-4 text-muted-foreground shadow-sm\";\n\n/**\n * The `+N` control. It hangs off the node's bottom edge at its outer end —\n * the left for a node left of level 0, the right otherwise — which keeps it\n * clear of the side middles where edges attach. It is a sibling of the node,\n * not a child, so activating it never also selects the node.\n */\nfunction ExpandControl({ node, onExpand }: { node: GraphDiagramNode; onExpand: (() => void) | undefined }) {\n const side = (node.level ?? 0) < 0 ? \"left-2\" : \"right-2\";\n const text = `+${node.expandCount}`;\n if (!onExpand) {\n return <span className={cn(EXPAND_CLASS, side)}>{text}</span>;\n }\n return (\n <button\n type=\"button\"\n aria-label={`Expand ${node.expandCount} more from ${nodeName(node)}`}\n className={cn(\n EXPAND_CLASS,\n side,\n \"cursor-pointer hover:border-primary hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n )}\n onClick={onExpand}\n >\n {text}\n </button>\n );\n}\n\n// Two 15px label lines, the body's vertical padding and its border.\nconst TWO_LINE_HEIGHT = 44;\n\n/** The label, behind the node's icon when it has one. `oneLine` cuts it with an ellipsis instead of wrapping. */\nfunction NodeLabel({ node, oneLine }: { node: GraphDiagramNode; oneLine: boolean }) {\n const label = (\n <span\n className={cn(\n oneLine ? \"max-w-full truncate\" : \"line-clamp-2\",\n \"font-medium leading-tight\",\n node.icon != null && \"min-w-0\",\n )}\n >\n {node.label}\n </span>\n );\n if (node.icon == null) return label;\n return (\n <span className=\"flex min-w-0 max-w-full items-center gap-1.5\">\n <span data-graph-node-icon=\"\" className=\"flex shrink-0 text-base leading-none\">\n {node.icon}\n </span>\n {label}\n </span>\n );\n}\n\nfunction NodeBody({\n node,\n oneLine,\n compact,\n row,\n selected,\n onSelect,\n}: {\n node: GraphDiagramNode;\n /** The node is too short for two label lines. */\n oneLine: boolean;\n /** Its icon and label on one short line, left-aligned, without its detail or badge. */\n compact: boolean;\n row: boolean;\n selected: boolean;\n onSelect: (() => void) | undefined;\n}) {\n const tone = node.tone ?? \"neutral\";\n return (\n <div\n className={cn(\n \"flex h-full w-full text-xs\",\n row ? \"border-t border-border/60 hover:bg-accent\" : \"border shadow-sm\",\n compact\n ? \"items-center px-2 text-left text-[11px]\"\n : \"flex-col items-center justify-center gap-0.5 px-3 py-1.5 text-center\",\n !row && (node.shape === \"pill\" ? \"rounded-full\" : compact ? \"rounded-md\" : \"rounded-lg\"),\n row ? (tone === \"info\" ? \"bg-sky-500/10 text-foreground\" : \"text-foreground\") : TONE_NODE_CLASS[tone],\n node.muted && (row ? \"text-muted-foreground\" : \"border-dashed text-muted-foreground shadow-none\"),\n !row && node.muted && tone === \"neutral\" && \"bg-muted\",\n selected && (row ? \"bg-primary/10 ring-2 ring-inset ring-primary\" : \"ring-2 ring-primary ring-offset-2 ring-offset-background\"),\n onSelect && \"cursor-pointer\",\n )}\n {...(onSelect\n ? {\n role: \"button\" as const,\n tabIndex: 0,\n \"aria-pressed\": selected,\n onClick: onSelect,\n onKeyDown: (event: KeyboardEvent<HTMLDivElement>) => activateOnKey(event, onSelect),\n }\n : {})}\n aria-label={node.ariaLabel}\n title={node.title}\n >\n <NodeLabel node={node} oneLine={oneLine || compact} />\n {row && node.aside != null && <span className=\"ml-auto min-w-0 truncate pl-2 font-mono text-[10px] text-muted-foreground\">{node.aside}</span>}\n {node.mark != null && (\n // Kept out of the node's accessible name, which stays the node's own; the mark is its tooltip.\n <span data-graph-node-mark=\"\" aria-hidden className={cn(\"flex shrink-0 items-center\", compact ? (row && node.aside != null ? \"pl-1\" : \"ml-auto pl-1\") : \"absolute right-1 top-1\")}>\n {node.mark}\n </span>\n )}\n {!compact && node.detail != null && (\n <span className=\"line-clamp-1 text-[10px] leading-tight text-muted-foreground\">{node.detail}</span>\n )}\n {!compact && node.badge != null && <span className=\"mt-0.5\">{node.badge}</span>}\n </div>\n );\n}\n\nexport function GraphDiagramNodes({\n nodes,\n positions,\n windowOf,\n place,\n nodeWidth,\n nodeHeight,\n nodeHeights,\n recordNodes,\n selectedId,\n onNodeSelect,\n onNodeExpand,\n onNodeHover,\n}: GraphDiagramNodesProps) {\n return (\n <>\n {nodes.map((node) => {\n const height = nodeHeights[node.id] ?? nodeHeight;\n const compact = node.id in nodeHeights;\n const windowBox = windowOf.get(node.id);\n return (\n <div\n key={node.id}\n data-graph-node={node.id}\n data-graph-node-size={compact ? \"compact\" : \"regular\"}\n {...(windowBox !== undefined ? { \"data-graph-window\": windowBox } : {})}\n className=\"pointer-events-auto absolute -translate-x-1/2 -translate-y-1/2\"\n style={{ ...place(requireEntry(positions, node.id, \"layout position\")), width: nodeWidth, height }}\n {...(onNodeHover ? hoverHandlers(node.id, onNodeHover) : {})}\n >\n <NodeBody\n node={node}\n oneLine={height < TWO_LINE_HEIGHT}\n compact={compact}\n row={recordNodes.has(node.id)}\n selected={selectedId != null && node.id === selectedId}\n onSelect={onNodeSelect ? () => onNodeSelect(node.id) : undefined}\n />\n {node.expandCount != null && node.expandCount > 0 && (\n <ExpandControl node={node} onExpand={onNodeExpand ? () => onNodeExpand(node.id) : undefined} />\n )}\n </div>\n );\n })}\n </>\n );\n}\n"],"names":["cn","jsx","nodeName","jsxs","TONE_NODE_CLASS","activateOnKey","Fragment","requireEntry","hoverHandlers"],"mappings":"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"}
|
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
import { GraphLayoutPosition } from './graph-layout.js';
|
|
2
|
-
import {
|
|
3
|
-
import { GraphDiagramGroup, GraphDiagramNode, GraphPlacer } from './graph-diagram-model.js';
|
|
2
|
+
import { GraphDiagramNode, GraphPlacer } from './graph-diagram-model.js';
|
|
4
3
|
export interface GraphDiagramNodesProps {
|
|
4
|
+
/** The nodes to draw: members scrolled out of their window and collapsed groups' stand-ins are left out. */
|
|
5
5
|
nodes: GraphDiagramNode[];
|
|
6
6
|
positions: Record<string, GraphLayoutPosition>;
|
|
7
|
+
/** The windowed group box each scrolling member belongs to, by node id: a wheel over the member scrolls it. */
|
|
8
|
+
windowOf: ReadonlyMap<string, string>;
|
|
7
9
|
place: GraphPlacer;
|
|
8
10
|
nodeWidth: number;
|
|
9
11
|
nodeHeight: number;
|
|
12
|
+
/** Heights of the nodes not drawn at `nodeHeight`, by id: the compact ones. */
|
|
13
|
+
nodeHeights: Readonly<Record<string, number>>;
|
|
14
|
+
recordNodes: ReadonlySet<string>;
|
|
10
15
|
selectedId: string | undefined;
|
|
11
16
|
onNodeSelect: ((id: string) => void) | undefined;
|
|
12
17
|
onNodeExpand: ((id: string) => void) | undefined;
|
|
13
18
|
onNodeHover: ((id: string | undefined) => void) | undefined;
|
|
14
19
|
}
|
|
15
|
-
export declare function GraphDiagramNodes({ nodes, positions, place, nodeWidth, nodeHeight, selectedId, onNodeSelect, onNodeExpand, onNodeHover, }: GraphDiagramNodesProps): import("react").JSX.Element;
|
|
16
|
-
export interface GraphDiagramGroupBoxesProps {
|
|
17
|
-
boxes: GraphLayoutGroupBox[];
|
|
18
|
-
groups: GraphDiagramGroup[] | undefined;
|
|
19
|
-
}
|
|
20
|
-
/** Group rectangles, drawn behind the edges and nodes, each captioned on its top border. */
|
|
21
|
-
export declare function GraphDiagramGroupBoxes({ boxes, groups }: GraphDiagramGroupBoxesProps): import("react").JSX.Element;
|
|
20
|
+
export declare function GraphDiagramNodes({ nodes, positions, windowOf, place, nodeWidth, nodeHeight, nodeHeights, recordNodes, selectedId, onNodeSelect, onNodeExpand, onNodeHover, }: GraphDiagramNodesProps): import("react").JSX.Element;
|
|
22
21
|
//# sourceMappingURL=GraphDiagramNodes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphDiagramNodes.d.ts","sourceRoot":"","sources":["../../src/data/GraphDiagramNodes.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,
|
|
1
|
+
{"version":3,"file":"GraphDiagramNodes.d.ts","sourceRoot":"","sources":["../../src/data/GraphDiagramNodes.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAML,KAAK,gBAAgB,EACrB,KAAK,WAAW,EACjB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,sBAAsB;IACrC,4GAA4G;IAC5G,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC/C,+GAA+G;IAC/G,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,KAAK,EAAE,WAAW,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9C,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACjD,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACjD,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC7D;AAyHD,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,SAAS,EACT,QAAQ,EACR,KAAK,EACL,SAAS,EACT,UAAU,EACV,WAAW,EACX,WAAW,EACX,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,GACZ,EAAE,sBAAsB,+BAiCxB"}
|
|
@@ -37,7 +37,7 @@ function NodeLabel({ node, oneLine }) {
|
|
|
37
37
|
}
|
|
38
38
|
);
|
|
39
39
|
if (node.icon == null) return label;
|
|
40
|
-
return /* @__PURE__ */ jsxs("span", { className: "flex max-w-full items-center gap-1.5", children: [
|
|
40
|
+
return /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 max-w-full items-center gap-1.5", children: [
|
|
41
41
|
/* @__PURE__ */ jsx("span", { "data-graph-node-icon": "", className: "flex shrink-0 text-base leading-none", children: node.icon }),
|
|
42
42
|
label
|
|
43
43
|
] });
|
|
@@ -45,6 +45,8 @@ function NodeLabel({ node, oneLine }) {
|
|
|
45
45
|
function NodeBody({
|
|
46
46
|
node,
|
|
47
47
|
oneLine,
|
|
48
|
+
compact,
|
|
49
|
+
row,
|
|
48
50
|
selected,
|
|
49
51
|
onSelect
|
|
50
52
|
}) {
|
|
@@ -53,12 +55,14 @@ function NodeBody({
|
|
|
53
55
|
"div",
|
|
54
56
|
{
|
|
55
57
|
className: cn(
|
|
56
|
-
"flex h-full w-full
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
node.
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
"flex h-full w-full text-xs",
|
|
59
|
+
row ? "border-t border-border/60 hover:bg-accent" : "border shadow-sm",
|
|
60
|
+
compact ? "items-center px-2 text-left text-[11px]" : "flex-col items-center justify-center gap-0.5 px-3 py-1.5 text-center",
|
|
61
|
+
!row && (node.shape === "pill" ? "rounded-full" : compact ? "rounded-md" : "rounded-lg"),
|
|
62
|
+
row ? tone === "info" ? "bg-sky-500/10 text-foreground" : "text-foreground" : TONE_NODE_CLASS[tone],
|
|
63
|
+
node.muted && (row ? "text-muted-foreground" : "border-dashed text-muted-foreground shadow-none"),
|
|
64
|
+
!row && node.muted && tone === "neutral" && "bg-muted",
|
|
65
|
+
selected && (row ? "bg-primary/10 ring-2 ring-inset ring-primary" : "ring-2 ring-primary ring-offset-2 ring-offset-background"),
|
|
62
66
|
onSelect && "cursor-pointer"
|
|
63
67
|
),
|
|
64
68
|
...onSelect ? {
|
|
@@ -71,9 +75,12 @@ function NodeBody({
|
|
|
71
75
|
"aria-label": node.ariaLabel,
|
|
72
76
|
title: node.title,
|
|
73
77
|
children: [
|
|
74
|
-
/* @__PURE__ */ jsx(NodeLabel, { node, oneLine }),
|
|
75
|
-
node.
|
|
76
|
-
node.
|
|
78
|
+
/* @__PURE__ */ jsx(NodeLabel, { node, oneLine: oneLine || compact }),
|
|
79
|
+
row && node.aside != null && /* @__PURE__ */ jsx("span", { className: "ml-auto min-w-0 truncate pl-2 font-mono text-[10px] text-muted-foreground", children: node.aside }),
|
|
80
|
+
node.mark != null && // Kept out of the node's accessible name, which stays the node's own; the mark is its tooltip.
|
|
81
|
+
/* @__PURE__ */ jsx("span", { "data-graph-node-mark": "", "aria-hidden": true, className: cn("flex shrink-0 items-center", compact ? row && node.aside != null ? "pl-1" : "ml-auto pl-1" : "absolute right-1 top-1"), children: node.mark }),
|
|
82
|
+
!compact && node.detail != null && /* @__PURE__ */ jsx("span", { className: "line-clamp-1 text-[10px] leading-tight text-muted-foreground", children: node.detail }),
|
|
83
|
+
!compact && node.badge != null && /* @__PURE__ */ jsx("span", { className: "mt-0.5", children: node.badge })
|
|
77
84
|
]
|
|
78
85
|
}
|
|
79
86
|
);
|
|
@@ -81,62 +88,50 @@ function NodeBody({
|
|
|
81
88
|
function GraphDiagramNodes({
|
|
82
89
|
nodes,
|
|
83
90
|
positions,
|
|
91
|
+
windowOf,
|
|
84
92
|
place,
|
|
85
93
|
nodeWidth,
|
|
86
94
|
nodeHeight,
|
|
95
|
+
nodeHeights,
|
|
96
|
+
recordNodes,
|
|
87
97
|
selectedId,
|
|
88
98
|
onNodeSelect,
|
|
89
99
|
onNodeExpand,
|
|
90
100
|
onNodeHover
|
|
91
101
|
}) {
|
|
92
|
-
return /* @__PURE__ */ jsx(Fragment, { children: nodes.map((node) =>
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
style: { ...place(requireEntry(positions, node.id, "layout position")), width: nodeWidth, height: nodeHeight },
|
|
98
|
-
...onNodeHover ? hoverHandlers(node.id, onNodeHover) : {},
|
|
99
|
-
children: [
|
|
100
|
-
/* @__PURE__ */ jsx(
|
|
101
|
-
NodeBody,
|
|
102
|
-
{
|
|
103
|
-
node,
|
|
104
|
-
oneLine: nodeHeight < TWO_LINE_HEIGHT,
|
|
105
|
-
selected: selectedId != null && node.id === selectedId,
|
|
106
|
-
onSelect: onNodeSelect ? () => onNodeSelect(node.id) : void 0
|
|
107
|
-
}
|
|
108
|
-
),
|
|
109
|
-
node.expandCount != null && node.expandCount > 0 && /* @__PURE__ */ jsx(ExpandControl, { node, onExpand: onNodeExpand ? () => onNodeExpand(node.id) : void 0 })
|
|
110
|
-
]
|
|
111
|
-
},
|
|
112
|
-
node.id
|
|
113
|
-
)) });
|
|
114
|
-
}
|
|
115
|
-
function GraphDiagramGroupBoxes({ boxes, groups }) {
|
|
116
|
-
const captions = new Map(groups == null ? void 0 : groups.map((group) => [group.id, group]));
|
|
117
|
-
return /* @__PURE__ */ jsx(Fragment, { children: boxes.map((box) => {
|
|
118
|
-
const caption = captions.get(box.group);
|
|
119
|
-
return /* @__PURE__ */ jsx(
|
|
102
|
+
return /* @__PURE__ */ jsx(Fragment, { children: nodes.map((node) => {
|
|
103
|
+
const height = nodeHeights[node.id] ?? nodeHeight;
|
|
104
|
+
const compact = node.id in nodeHeights;
|
|
105
|
+
const windowBox = windowOf.get(node.id);
|
|
106
|
+
return /* @__PURE__ */ jsxs(
|
|
120
107
|
"div",
|
|
121
108
|
{
|
|
122
|
-
"data-graph-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
109
|
+
"data-graph-node": node.id,
|
|
110
|
+
"data-graph-node-size": compact ? "compact" : "regular",
|
|
111
|
+
...windowBox !== void 0 ? { "data-graph-window": windowBox } : {},
|
|
112
|
+
className: "pointer-events-auto absolute -translate-x-1/2 -translate-y-1/2",
|
|
113
|
+
style: { ...place(requireEntry(positions, node.id, "layout position")), width: nodeWidth, height },
|
|
114
|
+
...onNodeHover ? hoverHandlers(node.id, onNodeHover) : {},
|
|
115
|
+
children: [
|
|
116
|
+
/* @__PURE__ */ jsx(
|
|
117
|
+
NodeBody,
|
|
118
|
+
{
|
|
119
|
+
node,
|
|
120
|
+
oneLine: height < TWO_LINE_HEIGHT,
|
|
121
|
+
compact,
|
|
122
|
+
row: recordNodes.has(node.id),
|
|
123
|
+
selected: selectedId != null && node.id === selectedId,
|
|
124
|
+
onSelect: onNodeSelect ? () => onNodeSelect(node.id) : void 0
|
|
125
|
+
}
|
|
126
|
+
),
|
|
127
|
+
node.expandCount != null && node.expandCount > 0 && /* @__PURE__ */ jsx(ExpandControl, { node, onExpand: onNodeExpand ? () => onNodeExpand(node.id) : void 0 })
|
|
128
|
+
]
|
|
133
129
|
},
|
|
134
|
-
|
|
130
|
+
node.id
|
|
135
131
|
);
|
|
136
132
|
}) });
|
|
137
133
|
}
|
|
138
134
|
export {
|
|
139
|
-
GraphDiagramGroupBoxes,
|
|
140
135
|
GraphDiagramNodes
|
|
141
136
|
};
|
|
142
137
|
//# sourceMappingURL=GraphDiagramNodes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphDiagramNodes.js","sources":["../../src/data/GraphDiagramNodes.tsx"],"sourcesContent":["import type { KeyboardEvent } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport type { GraphLayoutPosition } from \"./graph-layout\";\nimport type { GraphLayoutGroupBox } from \"./graph-columns-layout\";\nimport {\n activateOnKey,\n hoverHandlers,\n nodeName,\n requireEntry,\n TONE_NODE_CLASS,\n type GraphDiagramGroup,\n type GraphDiagramNode,\n type GraphPlacer,\n} from \"./graph-diagram-model\";\n\nexport interface GraphDiagramNodesProps {\n nodes: GraphDiagramNode[];\n positions: Record<string, GraphLayoutPosition>;\n place: GraphPlacer;\n nodeWidth: number;\n nodeHeight: number;\n selectedId: string | undefined;\n onNodeSelect: ((id: string) => void) | undefined;\n onNodeExpand: ((id: string) => void) | undefined;\n onNodeHover: ((id: string | undefined) => void) | undefined;\n}\n\nconst EXPAND_CLASS =\n \"absolute bottom-0 translate-y-1/2 rounded-full border border-border bg-background px-1.5 text-[10px] font-semibold leading-4 text-muted-foreground shadow-sm\";\n\n/**\n * The `+N` control. It hangs off the node's bottom edge at its outer end —\n * the left for a node left of level 0, the right otherwise — which keeps it\n * clear of the side middles where edges attach. It is a sibling of the node,\n * not a child, so activating it never also selects the node.\n */\nfunction ExpandControl({ node, onExpand }: { node: GraphDiagramNode; onExpand: (() => void) | undefined }) {\n const side = (node.level ?? 0) < 0 ? \"left-2\" : \"right-2\";\n const text = `+${node.expandCount}`;\n if (!onExpand) {\n return <span className={cn(EXPAND_CLASS, side)}>{text}</span>;\n }\n return (\n <button\n type=\"button\"\n aria-label={`Expand ${node.expandCount} more from ${nodeName(node)}`}\n className={cn(\n EXPAND_CLASS,\n side,\n \"cursor-pointer hover:border-primary hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n )}\n onClick={onExpand}\n >\n {text}\n </button>\n );\n}\n\n// Two 15px label lines, the body's vertical padding and its border.\nconst TWO_LINE_HEIGHT = 44;\n\n/** The label, behind the node's icon when it has one. `oneLine` cuts it with an ellipsis instead of wrapping. */\nfunction NodeLabel({ node, oneLine }: { node: GraphDiagramNode; oneLine: boolean }) {\n const label = (\n <span\n className={cn(\n oneLine ? \"max-w-full truncate\" : \"line-clamp-2\",\n \"font-medium leading-tight\",\n node.icon != null && \"min-w-0\",\n )}\n >\n {node.label}\n </span>\n );\n if (node.icon == null) return label;\n return (\n <span className=\"flex max-w-full items-center gap-1.5\">\n <span data-graph-node-icon=\"\" className=\"flex shrink-0 text-base leading-none\">\n {node.icon}\n </span>\n {label}\n </span>\n );\n}\n\nfunction NodeBody({\n node,\n oneLine,\n selected,\n onSelect,\n}: {\n node: GraphDiagramNode;\n /** The node is too short for two label lines. */\n oneLine: boolean;\n selected: boolean;\n onSelect: (() => void) | undefined;\n}) {\n const tone = node.tone ?? \"neutral\";\n return (\n <div\n className={cn(\n \"flex h-full w-full flex-col items-center justify-center gap-0.5 border px-3 py-1.5 text-center text-xs shadow-sm\",\n node.shape === \"pill\" ? \"rounded-full\" : \"rounded-lg\",\n TONE_NODE_CLASS[tone],\n node.muted && \"border-dashed text-muted-foreground shadow-none\",\n node.muted && tone === \"neutral\" && \"bg-muted\",\n selected && \"ring-2 ring-primary ring-offset-2 ring-offset-background\",\n onSelect && \"cursor-pointer\",\n )}\n {...(onSelect\n ? {\n role: \"button\" as const,\n tabIndex: 0,\n \"aria-pressed\": selected,\n onClick: onSelect,\n onKeyDown: (event: KeyboardEvent<HTMLDivElement>) => activateOnKey(event, onSelect),\n }\n : {})}\n aria-label={node.ariaLabel}\n title={node.title}\n >\n <NodeLabel node={node} oneLine={oneLine} />\n {node.detail != null && (\n <span className=\"line-clamp-1 text-[10px] leading-tight text-muted-foreground\">{node.detail}</span>\n )}\n {node.badge != null && <span className=\"mt-0.5\">{node.badge}</span>}\n </div>\n );\n}\n\nexport function GraphDiagramNodes({\n nodes,\n positions,\n place,\n nodeWidth,\n nodeHeight,\n selectedId,\n onNodeSelect,\n onNodeExpand,\n onNodeHover,\n}: GraphDiagramNodesProps) {\n return (\n <>\n {nodes.map((node) => (\n <div\n key={node.id}\n data-graph-node={node.id}\n className=\"pointer-events-auto absolute -translate-x-1/2 -translate-y-1/2\"\n style={{ ...place(requireEntry(positions, node.id, \"layout position\")), width: nodeWidth, height: nodeHeight }}\n {...(onNodeHover ? hoverHandlers(node.id, onNodeHover) : {})}\n >\n <NodeBody\n node={node}\n oneLine={nodeHeight < TWO_LINE_HEIGHT}\n selected={selectedId != null && node.id === selectedId}\n onSelect={onNodeSelect ? () => onNodeSelect(node.id) : undefined}\n />\n {node.expandCount != null && node.expandCount > 0 && (\n <ExpandControl node={node} onExpand={onNodeExpand ? () => onNodeExpand(node.id) : undefined} />\n )}\n </div>\n ))}\n </>\n );\n}\n\nexport interface GraphDiagramGroupBoxesProps {\n boxes: GraphLayoutGroupBox[];\n groups: GraphDiagramGroup[] | undefined;\n}\n\n/** Group rectangles, drawn behind the edges and nodes, each captioned on its top border. */\nexport function GraphDiagramGroupBoxes({ boxes, groups }: GraphDiagramGroupBoxesProps) {\n const captions = new Map(groups?.map((group) => [group.id, group]));\n return (\n <>\n {boxes.map((box) => {\n const caption = captions.get(box.group);\n return (\n <div\n key={box.id}\n data-graph-group={box.id}\n className=\"absolute rounded-xl border border-dashed border-border bg-muted/30\"\n style={{ left: box.x, top: box.y, width: box.width, height: box.height }}\n >\n <span\n title={caption?.title}\n className=\"absolute left-2 top-0 max-w-[calc(100%-1rem)] -translate-y-1/2 truncate rounded border border-border bg-background px-1.5 text-[10px] font-medium leading-4 text-muted-foreground\"\n >\n {caption ? caption.label : box.group}\n </span>\n </div>\n );\n })}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GraphDiagramNodes.js","sources":["../../src/data/GraphDiagramNodes.tsx"],"sourcesContent":["import type { KeyboardEvent } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport type { GraphLayoutPosition } from \"./graph-layout\";\nimport {\n activateOnKey,\n hoverHandlers,\n nodeName,\n requireEntry,\n TONE_NODE_CLASS,\n type GraphDiagramNode,\n type GraphPlacer,\n} from \"./graph-diagram-model\";\n\nexport interface GraphDiagramNodesProps {\n /** The nodes to draw: members scrolled out of their window and collapsed groups' stand-ins are left out. */\n nodes: GraphDiagramNode[];\n positions: Record<string, GraphLayoutPosition>;\n /** The windowed group box each scrolling member belongs to, by node id: a wheel over the member scrolls it. */\n windowOf: ReadonlyMap<string, string>;\n place: GraphPlacer;\n nodeWidth: number;\n nodeHeight: number;\n /** Heights of the nodes not drawn at `nodeHeight`, by id: the compact ones. */\n nodeHeights: Readonly<Record<string, number>>;\n recordNodes: ReadonlySet<string>;\n selectedId: string | undefined;\n onNodeSelect: ((id: string) => void) | undefined;\n onNodeExpand: ((id: string) => void) | undefined;\n onNodeHover: ((id: string | undefined) => void) | undefined;\n}\n\nconst EXPAND_CLASS =\n \"absolute bottom-0 translate-y-1/2 rounded-full border border-border bg-background px-1.5 text-[10px] font-semibold leading-4 text-muted-foreground shadow-sm\";\n\n/**\n * The `+N` control. It hangs off the node's bottom edge at its outer end —\n * the left for a node left of level 0, the right otherwise — which keeps it\n * clear of the side middles where edges attach. It is a sibling of the node,\n * not a child, so activating it never also selects the node.\n */\nfunction ExpandControl({ node, onExpand }: { node: GraphDiagramNode; onExpand: (() => void) | undefined }) {\n const side = (node.level ?? 0) < 0 ? \"left-2\" : \"right-2\";\n const text = `+${node.expandCount}`;\n if (!onExpand) {\n return <span className={cn(EXPAND_CLASS, side)}>{text}</span>;\n }\n return (\n <button\n type=\"button\"\n aria-label={`Expand ${node.expandCount} more from ${nodeName(node)}`}\n className={cn(\n EXPAND_CLASS,\n side,\n \"cursor-pointer hover:border-primary hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n )}\n onClick={onExpand}\n >\n {text}\n </button>\n );\n}\n\n// Two 15px label lines, the body's vertical padding and its border.\nconst TWO_LINE_HEIGHT = 44;\n\n/** The label, behind the node's icon when it has one. `oneLine` cuts it with an ellipsis instead of wrapping. */\nfunction NodeLabel({ node, oneLine }: { node: GraphDiagramNode; oneLine: boolean }) {\n const label = (\n <span\n className={cn(\n oneLine ? \"max-w-full truncate\" : \"line-clamp-2\",\n \"font-medium leading-tight\",\n node.icon != null && \"min-w-0\",\n )}\n >\n {node.label}\n </span>\n );\n if (node.icon == null) return label;\n return (\n <span className=\"flex min-w-0 max-w-full items-center gap-1.5\">\n <span data-graph-node-icon=\"\" className=\"flex shrink-0 text-base leading-none\">\n {node.icon}\n </span>\n {label}\n </span>\n );\n}\n\nfunction NodeBody({\n node,\n oneLine,\n compact,\n row,\n selected,\n onSelect,\n}: {\n node: GraphDiagramNode;\n /** The node is too short for two label lines. */\n oneLine: boolean;\n /** Its icon and label on one short line, left-aligned, without its detail or badge. */\n compact: boolean;\n row: boolean;\n selected: boolean;\n onSelect: (() => void) | undefined;\n}) {\n const tone = node.tone ?? \"neutral\";\n return (\n <div\n className={cn(\n \"flex h-full w-full text-xs\",\n row ? \"border-t border-border/60 hover:bg-accent\" : \"border shadow-sm\",\n compact\n ? \"items-center px-2 text-left text-[11px]\"\n : \"flex-col items-center justify-center gap-0.5 px-3 py-1.5 text-center\",\n !row && (node.shape === \"pill\" ? \"rounded-full\" : compact ? \"rounded-md\" : \"rounded-lg\"),\n row ? (tone === \"info\" ? \"bg-sky-500/10 text-foreground\" : \"text-foreground\") : TONE_NODE_CLASS[tone],\n node.muted && (row ? \"text-muted-foreground\" : \"border-dashed text-muted-foreground shadow-none\"),\n !row && node.muted && tone === \"neutral\" && \"bg-muted\",\n selected && (row ? \"bg-primary/10 ring-2 ring-inset ring-primary\" : \"ring-2 ring-primary ring-offset-2 ring-offset-background\"),\n onSelect && \"cursor-pointer\",\n )}\n {...(onSelect\n ? {\n role: \"button\" as const,\n tabIndex: 0,\n \"aria-pressed\": selected,\n onClick: onSelect,\n onKeyDown: (event: KeyboardEvent<HTMLDivElement>) => activateOnKey(event, onSelect),\n }\n : {})}\n aria-label={node.ariaLabel}\n title={node.title}\n >\n <NodeLabel node={node} oneLine={oneLine || compact} />\n {row && node.aside != null && <span className=\"ml-auto min-w-0 truncate pl-2 font-mono text-[10px] text-muted-foreground\">{node.aside}</span>}\n {node.mark != null && (\n // Kept out of the node's accessible name, which stays the node's own; the mark is its tooltip.\n <span data-graph-node-mark=\"\" aria-hidden className={cn(\"flex shrink-0 items-center\", compact ? (row && node.aside != null ? \"pl-1\" : \"ml-auto pl-1\") : \"absolute right-1 top-1\")}>\n {node.mark}\n </span>\n )}\n {!compact && node.detail != null && (\n <span className=\"line-clamp-1 text-[10px] leading-tight text-muted-foreground\">{node.detail}</span>\n )}\n {!compact && node.badge != null && <span className=\"mt-0.5\">{node.badge}</span>}\n </div>\n );\n}\n\nexport function GraphDiagramNodes({\n nodes,\n positions,\n windowOf,\n place,\n nodeWidth,\n nodeHeight,\n nodeHeights,\n recordNodes,\n selectedId,\n onNodeSelect,\n onNodeExpand,\n onNodeHover,\n}: GraphDiagramNodesProps) {\n return (\n <>\n {nodes.map((node) => {\n const height = nodeHeights[node.id] ?? nodeHeight;\n const compact = node.id in nodeHeights;\n const windowBox = windowOf.get(node.id);\n return (\n <div\n key={node.id}\n data-graph-node={node.id}\n data-graph-node-size={compact ? \"compact\" : \"regular\"}\n {...(windowBox !== undefined ? { \"data-graph-window\": windowBox } : {})}\n className=\"pointer-events-auto absolute -translate-x-1/2 -translate-y-1/2\"\n style={{ ...place(requireEntry(positions, node.id, \"layout position\")), width: nodeWidth, height }}\n {...(onNodeHover ? hoverHandlers(node.id, onNodeHover) : {})}\n >\n <NodeBody\n node={node}\n oneLine={height < TWO_LINE_HEIGHT}\n compact={compact}\n row={recordNodes.has(node.id)}\n selected={selectedId != null && node.id === selectedId}\n onSelect={onNodeSelect ? () => onNodeSelect(node.id) : undefined}\n />\n {node.expandCount != null && node.expandCount > 0 && (\n <ExpandControl node={node} onExpand={onNodeExpand ? () => onNodeExpand(node.id) : undefined} />\n )}\n </div>\n );\n })}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
|