@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
|
@@ -9,11 +9,13 @@ import { ResponseBlock, InlineParams, DiffBlock, DetailBlock, QuestionCard } fro
|
|
|
9
9
|
import { hasApprovalBody } from "./approval-request.js";
|
|
10
10
|
import { TypedApprovalBody } from "./SessionViewer.approval-body.js";
|
|
11
11
|
import { PendingDecisionControls, QuestionDecisionControls } from "./SessionViewer.decision-controls.js";
|
|
12
|
+
import { EstimatedToolCost } from "./SessionViewer.tool-cost.js";
|
|
12
13
|
import { UiChevronDown } from "../../icons/components/UiChevronDown.js";
|
|
13
14
|
function ToolBody({
|
|
14
15
|
event,
|
|
15
16
|
visual,
|
|
16
17
|
defaultExpanded,
|
|
18
|
+
showEstimatedToolCost = false,
|
|
17
19
|
onPendingToolDecision
|
|
18
20
|
}) {
|
|
19
21
|
const summary = summarizeToolInput(
|
|
@@ -23,21 +25,27 @@ function ToolBody({
|
|
|
23
25
|
);
|
|
24
26
|
const command = shellCommand(event.tool ?? "", event.toolInput);
|
|
25
27
|
const [open, setOpen] = useState(defaultExpanded);
|
|
28
|
+
const cost = showEstimatedToolCost ? /* @__PURE__ */ jsx(EstimatedToolCost, { events: [event] }) : null;
|
|
29
|
+
const costFooter = showEstimatedToolCost ? /* @__PURE__ */ jsx(EstimatedToolCost, { events: [event], detailed: true }) : null;
|
|
30
|
+
const hasDetail = event.toolResponse !== void 0 || command === void 0 && event.toolInput !== void 0 || showEstimatedToolCost && event.estimatedCost !== void 0;
|
|
26
31
|
if (event.tool === "AskUserQuestion" || event.approvalKind === "question") {
|
|
27
32
|
return /* @__PURE__ */ jsx(
|
|
28
33
|
QuestionToolBody,
|
|
29
34
|
{
|
|
30
35
|
event,
|
|
31
36
|
visual,
|
|
32
|
-
onDecision: onPendingToolDecision
|
|
37
|
+
onDecision: onPendingToolDecision,
|
|
38
|
+
cost,
|
|
39
|
+
costFooter
|
|
33
40
|
}
|
|
34
41
|
);
|
|
35
42
|
}
|
|
36
43
|
if (event.pending && hasApprovalBody(event.approvalRequest)) {
|
|
37
44
|
return /* @__PURE__ */ jsxs("div", { className: "not-prose", children: [
|
|
38
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
45
|
+
/* @__PURE__ */ jsxs("div", { "data-tool-header": true, className: "flex items-center gap-1.5", children: [
|
|
39
46
|
/* @__PURE__ */ jsx("span", { className: "shrink-0 font-medium text-foreground", children: visual.label }),
|
|
40
|
-
/* @__PURE__ */ jsx(ApprovalBadge, { event })
|
|
47
|
+
/* @__PURE__ */ jsx(ApprovalBadge, { event }),
|
|
48
|
+
/* @__PURE__ */ jsx("span", { className: "ml-auto", children: cost })
|
|
41
49
|
] }),
|
|
42
50
|
/* @__PURE__ */ jsx(
|
|
43
51
|
TypedApprovalBody,
|
|
@@ -46,15 +54,17 @@ function ToolBody({
|
|
|
46
54
|
request: event.approvalRequest,
|
|
47
55
|
onDecision: onPendingToolDecision
|
|
48
56
|
}
|
|
49
|
-
)
|
|
57
|
+
),
|
|
58
|
+
costFooter
|
|
50
59
|
] });
|
|
51
60
|
}
|
|
52
61
|
if (command !== void 0) {
|
|
53
62
|
return /* @__PURE__ */ jsxs("div", { className: "not-prose", children: [
|
|
54
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-start gap-1.5", children: [
|
|
63
|
+
/* @__PURE__ */ jsxs("div", { "data-tool-header": true, className: "flex items-start gap-1.5", children: [
|
|
55
64
|
/* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsx(CodeBlock, { bare: true, language: "bash", source: command }) }),
|
|
56
65
|
/* @__PURE__ */ jsx(ApprovalBadge, { event }),
|
|
57
|
-
|
|
66
|
+
cost,
|
|
67
|
+
hasDetail && /* @__PURE__ */ jsx(
|
|
58
68
|
"button",
|
|
59
69
|
{
|
|
60
70
|
type: "button",
|
|
@@ -75,7 +85,10 @@ function ToolBody({
|
|
|
75
85
|
}
|
|
76
86
|
)
|
|
77
87
|
] }),
|
|
78
|
-
open &&
|
|
88
|
+
open && hasDetail && /* @__PURE__ */ jsxs("div", { className: "mt-1.5", children: [
|
|
89
|
+
event.toolResponse !== void 0 && /* @__PURE__ */ jsx(ResponseBlock, { response: event.toolResponse }),
|
|
90
|
+
costFooter
|
|
91
|
+
] }),
|
|
79
92
|
event.pending && onPendingToolDecision && /* @__PURE__ */ jsx(
|
|
80
93
|
PendingDecisionControls,
|
|
81
94
|
{
|
|
@@ -86,7 +99,6 @@ function ToolBody({
|
|
|
86
99
|
)
|
|
87
100
|
] });
|
|
88
101
|
}
|
|
89
|
-
const hasDetail = event.toolInput !== void 0 || event.toolResponse !== void 0;
|
|
90
102
|
const params = toolInputParams(event.tool ?? "", event.toolInput, event.cwd);
|
|
91
103
|
const diff = toolDiff(event.tool ?? "", event.toolInput);
|
|
92
104
|
const header = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
@@ -105,28 +117,31 @@ function ToolBody({
|
|
|
105
117
|
params.length > 0 && /* @__PURE__ */ jsx(InlineParams, { params })
|
|
106
118
|
] });
|
|
107
119
|
return /* @__PURE__ */ jsxs("div", { className: "not-prose", children: [
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
120
|
+
/* @__PURE__ */ jsxs("div", { "data-tool-header": true, className: "flex items-center gap-1.5", children: [
|
|
121
|
+
hasDetail ? /* @__PURE__ */ jsxs(
|
|
122
|
+
"button",
|
|
123
|
+
{
|
|
124
|
+
type: "button",
|
|
125
|
+
"aria-expanded": open,
|
|
126
|
+
onClick: () => setOpen((value) => !value),
|
|
127
|
+
className: "flex min-w-0 flex-1 items-center gap-1.5 text-left hover:text-foreground",
|
|
128
|
+
children: [
|
|
129
|
+
header,
|
|
130
|
+
/* @__PURE__ */ jsx(
|
|
131
|
+
Icon,
|
|
132
|
+
{
|
|
133
|
+
icon: UiChevronDown,
|
|
134
|
+
className: cn(
|
|
135
|
+
"ml-auto size-3 shrink-0 text-muted-foreground transition-transform",
|
|
136
|
+
open && "rotate-180"
|
|
137
|
+
)
|
|
138
|
+
}
|
|
139
|
+
)
|
|
140
|
+
]
|
|
141
|
+
}
|
|
142
|
+
) : /* @__PURE__ */ jsx("div", { className: "flex min-w-0 flex-1 items-center gap-1.5", children: header }),
|
|
143
|
+
cost
|
|
144
|
+
] }),
|
|
130
145
|
open && hasDetail && /* @__PURE__ */ jsxs("div", { className: "mt-1.5 space-y-1.5", children: [
|
|
131
146
|
diff ? /* @__PURE__ */ jsx(DiffBlock, { diff }) : event.toolInput !== void 0 && /* @__PURE__ */ jsx(
|
|
132
147
|
DetailBlock,
|
|
@@ -135,7 +150,8 @@ function ToolBody({
|
|
|
135
150
|
source: JSON.stringify(event.toolInput, null, 2)
|
|
136
151
|
}
|
|
137
152
|
),
|
|
138
|
-
event.toolResponse !== void 0 && /* @__PURE__ */ jsx(ResponseBlock, { response: event.toolResponse })
|
|
153
|
+
event.toolResponse !== void 0 && /* @__PURE__ */ jsx(ResponseBlock, { response: event.toolResponse }),
|
|
154
|
+
costFooter
|
|
139
155
|
] }),
|
|
140
156
|
event.pending && onPendingToolDecision && /* @__PURE__ */ jsx(
|
|
141
157
|
PendingDecisionControls,
|
|
@@ -150,7 +166,9 @@ function ToolBody({
|
|
|
150
166
|
function QuestionToolBody({
|
|
151
167
|
event,
|
|
152
168
|
visual,
|
|
153
|
-
onDecision
|
|
169
|
+
onDecision,
|
|
170
|
+
cost,
|
|
171
|
+
costFooter
|
|
154
172
|
}) {
|
|
155
173
|
var _a;
|
|
156
174
|
const typedQuestions = (_a = event.approvalRequest) == null ? void 0 : _a.questions;
|
|
@@ -161,10 +179,11 @@ function QuestionToolBody({
|
|
|
161
179
|
event.cwd
|
|
162
180
|
);
|
|
163
181
|
return /* @__PURE__ */ jsxs("div", { className: "not-prose", children: [
|
|
164
|
-
/* @__PURE__ */ jsxs("div", { className: "flex
|
|
182
|
+
/* @__PURE__ */ jsxs("div", { "data-tool-header": true, className: "flex items-center gap-1.5", children: [
|
|
165
183
|
/* @__PURE__ */ jsx("span", { className: "shrink-0 font-medium text-foreground", children: visual.label }),
|
|
166
184
|
/* @__PURE__ */ jsx(ApprovalBadge, { event }),
|
|
167
|
-
summary && questions.length !== 1 && /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate text-xs text-muted-foreground", children: summary })
|
|
185
|
+
summary && questions.length !== 1 && /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-xs text-muted-foreground", children: summary }),
|
|
186
|
+
/* @__PURE__ */ jsx("span", { className: "ml-auto", children: cost })
|
|
168
187
|
] }),
|
|
169
188
|
/* @__PURE__ */ jsxs("div", { className: "mt-1.5 space-y-1.5", children: [
|
|
170
189
|
questions.length > 0 ? questions.map((question, index) => /* @__PURE__ */ jsx(
|
|
@@ -193,7 +212,8 @@ function QuestionToolBody({
|
|
|
193
212
|
questions,
|
|
194
213
|
onDecision
|
|
195
214
|
}
|
|
196
|
-
)
|
|
215
|
+
),
|
|
216
|
+
costFooter
|
|
197
217
|
] })
|
|
198
218
|
] });
|
|
199
219
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionViewer.tool-row.js","sources":["../../../src/data/ai/SessionViewer.tool-row.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { UiChevronDown } from \"../../icons\";\nimport { cn } from \"../../lib/utils\";\nimport { CodeBlock } from \"../CodeBlock\";\nimport { Icon } from \"../Icon\";\nimport {\n questionsFromApproval,\n questionsFromToolInput,\n shellCommand,\n summarizeToolInput,\n toolDiff,\n toolInputParams,\n} from \"./SessionViewer.input\";\nimport type { SessionEvent } from \"./SessionViewer.model\";\nimport { ApprovalBadge } from \"./SessionViewer.row-metadata\";\nimport {\n DetailBlock,\n DiffBlock,\n InlineParams,\n QuestionCard,\n ResponseBlock,\n} from \"./SessionViewer.tool-details\";\nimport { hasApprovalBody } from \"./approval-request\";\nimport { TypedApprovalBody } from \"./SessionViewer.approval-body\";\nimport {\n PendingDecisionControls,\n QuestionDecisionControls,\n} from \"./SessionViewer.decision-controls\";\nimport type { SessionToolDecision } from \"./SessionViewer\";\n\nexport function ToolBody({\n event,\n visual,\n defaultExpanded,\n onPendingToolDecision,\n}: {\n event: SessionEvent;\n visual: { label: string; summaryOnly: boolean };\n defaultExpanded: boolean;\n onPendingToolDecision?:\n | ((decision: SessionToolDecision) => Promise<void> | void)\n | undefined;\n}) {\n const summary = summarizeToolInput(\n event.tool ?? \"\",\n event.toolInput,\n event.cwd,\n );\n const command = shellCommand(event.tool ?? \"\", event.toolInput);\n const [open, setOpen] = useState(defaultExpanded);\n\n if (event.tool === \"AskUserQuestion\" || event.approvalKind === \"question\") {\n return (\n <QuestionToolBody\n event={event}\n visual={visual}\n onDecision={onPendingToolDecision}\n />\n );\n }\n\n if (event.pending && hasApprovalBody(event.approvalRequest)) {\n return (\n <div className=\"not-prose\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"shrink-0 font-medium text-foreground\">\n {visual.label}\n </span>\n <ApprovalBadge event={event} />\n </div>\n <TypedApprovalBody\n event={event}\n request={event.approvalRequest}\n onDecision={onPendingToolDecision}\n />\n </div>\n );\n }\n\n if (command !== undefined) {\n return (\n <div className=\"not-prose\">\n <div className=\"flex items-start gap-1.5\">\n <div className=\"min-w-0 flex-1\">\n <CodeBlock bare language=\"bash\" source={command} />\n </div>\n <ApprovalBadge event={event} />\n {event.toolResponse !== undefined && (\n <button\n type=\"button\"\n aria-expanded={open}\n aria-label=\"Toggle response\"\n onClick={() => setOpen((value) => !value)}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <Icon\n icon={UiChevronDown}\n className={cn(\n \"size-3 shrink-0 transition-transform\",\n open && \"rotate-180\",\n )}\n />\n </button>\n )}\n </div>\n {open && event.toolResponse !== undefined && (\n <div className=\"mt-1.5\">\n <ResponseBlock response={event.toolResponse} />\n </div>\n )}\n {event.pending && onPendingToolDecision && (\n <PendingDecisionControls\n event={event}\n request={event.approvalRequest}\n onDecision={onPendingToolDecision}\n />\n )}\n </div>\n );\n }\n\n const hasDetail =\n event.toolInput !== undefined || event.toolResponse !== undefined;\n const params = toolInputParams(event.tool ?? \"\", event.toolInput, event.cwd);\n const diff = toolDiff(event.tool ?? \"\", event.toolInput);\n const header = (\n <>\n {visual.summaryOnly && summary ? (\n <span className=\"min-w-0 truncate font-mono text-xs text-foreground \">\n {summary}\n </span>\n ) : (\n <span className=\"shrink-0 font-medium text-foreground\">\n {visual.label}\n </span>\n )}\n {diff && (\n <span className=\"shrink-0 font-mono text-xs\">\n {diff.added > 0 && (\n <span className=\"text-emerald-600 [[data-theme=dark]_&]:text-emerald-400\">\n +{diff.added}\n </span>\n )}\n {diff.removed > 0 && (\n <span className=\"ml-1 text-rose-600 [[data-theme=dark]_&]:text-rose-400\">\n -{diff.removed}\n </span>\n )}\n </span>\n )}\n <ApprovalBadge event={event} />\n {params.length > 0 && <InlineParams params={params} />}\n </>\n );\n\n return (\n <div className=\"not-prose\">\n {hasDetail ? (\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n className=\"flex w-full items-center gap-1.5 text-left hover:text-foreground\"\n >\n {header}\n <Icon\n icon={UiChevronDown}\n className={cn(\n \"ml-auto size-3 shrink-0 text-muted-foreground transition-transform\",\n open && \"rotate-180\",\n )}\n />\n </button>\n ) : (\n <div className=\"flex items-center gap-1.5\">{header}</div>\n )}\n\n {open && hasDetail && (\n <div className=\"mt-1.5 space-y-1.5\">\n {diff ? (\n <DiffBlock diff={diff} />\n ) : (\n event.toolInput !== undefined && (\n <DetailBlock\n language=\"json\"\n source={JSON.stringify(event.toolInput, null, 2)}\n />\n )\n )}\n {event.toolResponse !== undefined && (\n <ResponseBlock response={event.toolResponse} />\n )}\n </div>\n )}\n {event.pending && onPendingToolDecision && (\n <PendingDecisionControls\n event={event}\n request={event.approvalRequest}\n onDecision={onPendingToolDecision}\n />\n )}\n </div>\n );\n}\n\nfunction QuestionToolBody({\n event,\n visual,\n onDecision,\n}: {\n event: SessionEvent;\n visual: { label: string };\n onDecision?:\n | ((decision: SessionToolDecision) => Promise<void> | void)\n | undefined;\n}) {\n const typedQuestions = event.approvalRequest?.questions;\n const questions = typedQuestions?.length\n ? questionsFromApproval(typedQuestions)\n : questionsFromToolInput(event.toolInput);\n const summary = summarizeToolInput(\n event.tool ?? \"\",\n event.toolInput,\n event.cwd,\n );\n\n return (\n <div className=\"not-prose\">\n <div className=\"flex flex-wrap items-center gap-1.5\">\n <span className=\"shrink-0 font-medium text-foreground\">\n {visual.label}\n </span>\n <ApprovalBadge event={event} />\n {summary && questions.length !== 1 && (\n <span className=\"min-w-0 truncate text-xs text-muted-foreground\">\n {summary}\n </span>\n )}\n </div>\n <div className=\"mt-1.5 space-y-1.5\">\n {questions.length > 0 ? (\n questions.map((question, index) => (\n <QuestionCard\n key={`${question.id}-${index}`}\n question={question}\n index={index}\n />\n ))\n ) : event.toolInput ? (\n <DetailBlock\n language=\"json\"\n source={JSON.stringify(event.toolInput, null, 2)}\n />\n ) : null}\n {event.toolResponse !== undefined && (\n <div className=\"space-y-1\">\n <div className=\"text-[11px] font-medium uppercase text-muted-foreground\">\n Answer\n </div>\n <ResponseBlock response={event.toolResponse} />\n </div>\n )}\n {event.pending && onDecision && (\n <QuestionDecisionControls\n event={event}\n request={event.approvalRequest}\n questions={questions}\n onDecision={onDecision}\n />\n )}\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SessionViewer.tool-row.js","sources":["../../../src/data/ai/SessionViewer.tool-row.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { UiChevronDown } from \"../../icons\";\nimport { cn } from \"../../lib/utils\";\nimport { CodeBlock } from \"../CodeBlock\";\nimport { Icon } from \"../Icon\";\nimport {\n questionsFromApproval,\n questionsFromToolInput,\n shellCommand,\n summarizeToolInput,\n toolDiff,\n toolInputParams,\n} from \"./SessionViewer.input\";\nimport type { SessionEvent } from \"./SessionViewer.model\";\nimport { ApprovalBadge } from \"./SessionViewer.row-metadata\";\nimport {\n DetailBlock,\n DiffBlock,\n InlineParams,\n QuestionCard,\n ResponseBlock,\n} from \"./SessionViewer.tool-details\";\nimport { hasApprovalBody } from \"./approval-request\";\nimport { TypedApprovalBody } from \"./SessionViewer.approval-body\";\nimport {\n PendingDecisionControls,\n QuestionDecisionControls,\n} from \"./SessionViewer.decision-controls\";\nimport type { SessionToolDecision } from \"./SessionViewer\";\nimport { EstimatedToolCost } from \"./SessionViewer.tool-cost\";\n\nexport function ToolBody({\n event,\n visual,\n defaultExpanded,\n showEstimatedToolCost = false,\n onPendingToolDecision,\n}: {\n event: SessionEvent;\n visual: { label: string; summaryOnly: boolean };\n defaultExpanded: boolean;\n showEstimatedToolCost?: boolean;\n onPendingToolDecision?:\n | ((decision: SessionToolDecision) => Promise<void> | void)\n | undefined;\n}) {\n const summary = summarizeToolInput(\n event.tool ?? \"\",\n event.toolInput,\n event.cwd,\n );\n const command = shellCommand(event.tool ?? \"\", event.toolInput);\n const [open, setOpen] = useState(defaultExpanded);\n const cost = showEstimatedToolCost ? <EstimatedToolCost events={[event]} /> : null;\n const costFooter = showEstimatedToolCost ? <EstimatedToolCost events={[event]} detailed /> : null;\n const hasDetail = event.toolResponse !== undefined || (command === undefined && event.toolInput !== undefined) || (showEstimatedToolCost && event.estimatedCost !== undefined);\n\n if (event.tool === \"AskUserQuestion\" || event.approvalKind === \"question\") {\n return (\n <QuestionToolBody\n event={event}\n visual={visual}\n onDecision={onPendingToolDecision}\n cost={cost}\n costFooter={costFooter}\n />\n );\n }\n\n if (event.pending && hasApprovalBody(event.approvalRequest)) {\n return (\n <div className=\"not-prose\">\n <div data-tool-header className=\"flex items-center gap-1.5\">\n <span className=\"shrink-0 font-medium text-foreground\">\n {visual.label}\n </span>\n <ApprovalBadge event={event} />\n <span className=\"ml-auto\">{cost}</span>\n </div>\n <TypedApprovalBody\n event={event}\n request={event.approvalRequest}\n onDecision={onPendingToolDecision}\n />\n {costFooter}\n </div>\n );\n }\n\n if (command !== undefined) {\n return (\n <div className=\"not-prose\">\n <div data-tool-header className=\"flex items-start gap-1.5\">\n <div className=\"min-w-0 flex-1\">\n <CodeBlock bare language=\"bash\" source={command} />\n </div>\n <ApprovalBadge event={event} />\n {cost}\n {hasDetail && (\n <button\n type=\"button\"\n aria-expanded={open}\n aria-label=\"Toggle response\"\n onClick={() => setOpen((value) => !value)}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <Icon\n icon={UiChevronDown}\n className={cn(\n \"size-3 shrink-0 transition-transform\",\n open && \"rotate-180\",\n )}\n />\n </button>\n )}\n </div>\n {open && hasDetail && (\n <div className=\"mt-1.5\">\n {event.toolResponse !== undefined && <ResponseBlock response={event.toolResponse} />}\n {costFooter}\n </div>\n )}\n {event.pending && onPendingToolDecision && (\n <PendingDecisionControls\n event={event}\n request={event.approvalRequest}\n onDecision={onPendingToolDecision}\n />\n )}\n </div>\n );\n }\n\n const params = toolInputParams(event.tool ?? \"\", event.toolInput, event.cwd);\n const diff = toolDiff(event.tool ?? \"\", event.toolInput);\n const header = (\n <>\n {visual.summaryOnly && summary ? (\n <span className=\"min-w-0 truncate font-mono text-xs text-foreground \">\n {summary}\n </span>\n ) : (\n <span className=\"shrink-0 font-medium text-foreground\">\n {visual.label}\n </span>\n )}\n {diff && (\n <span className=\"shrink-0 font-mono text-xs\">\n {diff.added > 0 && (\n <span className=\"text-emerald-600 [[data-theme=dark]_&]:text-emerald-400\">\n +{diff.added}\n </span>\n )}\n {diff.removed > 0 && (\n <span className=\"ml-1 text-rose-600 [[data-theme=dark]_&]:text-rose-400\">\n -{diff.removed}\n </span>\n )}\n </span>\n )}\n <ApprovalBadge event={event} />\n {params.length > 0 && <InlineParams params={params} />}\n </>\n );\n\n return (\n <div className=\"not-prose\">\n <div data-tool-header className=\"flex items-center gap-1.5\">\n {hasDetail ? (\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n className=\"flex min-w-0 flex-1 items-center gap-1.5 text-left hover:text-foreground\"\n >\n {header}\n <Icon\n icon={UiChevronDown}\n className={cn(\n \"ml-auto size-3 shrink-0 text-muted-foreground transition-transform\",\n open && \"rotate-180\",\n )}\n />\n </button>\n ) : (\n <div className=\"flex min-w-0 flex-1 items-center gap-1.5\">{header}</div>\n )}\n {cost}\n </div>\n\n {open && hasDetail && (\n <div className=\"mt-1.5 space-y-1.5\">\n {diff ? (\n <DiffBlock diff={diff} />\n ) : (\n event.toolInput !== undefined && (\n <DetailBlock\n language=\"json\"\n source={JSON.stringify(event.toolInput, null, 2)}\n />\n )\n )}\n {event.toolResponse !== undefined && (\n <ResponseBlock response={event.toolResponse} />\n )}\n {costFooter}\n </div>\n )}\n {event.pending && onPendingToolDecision && (\n <PendingDecisionControls\n event={event}\n request={event.approvalRequest}\n onDecision={onPendingToolDecision}\n />\n )}\n </div>\n );\n}\n\nfunction QuestionToolBody({\n event,\n visual,\n onDecision,\n cost,\n costFooter,\n}: {\n event: SessionEvent;\n visual: { label: string };\n cost: ReactNode;\n costFooter: ReactNode;\n onDecision?:\n | ((decision: SessionToolDecision) => Promise<void> | void)\n | undefined;\n}) {\n const typedQuestions = event.approvalRequest?.questions;\n const questions = typedQuestions?.length\n ? questionsFromApproval(typedQuestions)\n : questionsFromToolInput(event.toolInput);\n const summary = summarizeToolInput(\n event.tool ?? \"\",\n event.toolInput,\n event.cwd,\n );\n\n return (\n <div className=\"not-prose\">\n <div data-tool-header className=\"flex items-center gap-1.5\">\n <span className=\"shrink-0 font-medium text-foreground\">\n {visual.label}\n </span>\n <ApprovalBadge event={event} />\n {summary && questions.length !== 1 && (\n <span className=\"min-w-0 flex-1 truncate text-xs text-muted-foreground\">\n {summary}\n </span>\n )}\n <span className=\"ml-auto\">{cost}</span>\n </div>\n <div className=\"mt-1.5 space-y-1.5\">\n {questions.length > 0 ? (\n questions.map((question, index) => (\n <QuestionCard\n key={`${question.id}-${index}`}\n question={question}\n index={index}\n />\n ))\n ) : event.toolInput ? (\n <DetailBlock\n language=\"json\"\n source={JSON.stringify(event.toolInput, null, 2)}\n />\n ) : null}\n {event.toolResponse !== undefined && (\n <div className=\"space-y-1\">\n <div className=\"text-[11px] font-medium uppercase text-muted-foreground\">\n Answer\n </div>\n <ResponseBlock response={event.toolResponse} />\n </div>\n )}\n {event.pending && onDecision && (\n <QuestionDecisionControls\n event={event}\n request={event.approvalRequest}\n questions={questions}\n onDecision={onDecision}\n />\n )}\n {costFooter}\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -33,6 +33,10 @@ export interface SessionUIPart {
|
|
|
33
33
|
data?: unknown;
|
|
34
34
|
approval?: SessionApproval;
|
|
35
35
|
pending?: boolean;
|
|
36
|
+
estimatedCost?: {
|
|
37
|
+
cost: SessionCost;
|
|
38
|
+
sharedCalls: number;
|
|
39
|
+
};
|
|
36
40
|
}
|
|
37
41
|
/** One message in a session (AI SDK v6 UIMessage + provenance). */
|
|
38
42
|
export interface SessionUIMessage {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionViewer.unified.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionViewer.unified.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,yEAAyE;AACzE,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,uEAAuE;AACvE,MAAM,WAAW,aAAa;IAC5B,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SessionViewer.unified.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionViewer.unified.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,7 +44,12 @@ function SessionViewerMenu({
|
|
|
44
44
|
hasThinking,
|
|
45
45
|
hasEncryptedReasoning,
|
|
46
46
|
showEncryptedReasoning,
|
|
47
|
-
onToggleEncryptedReasoning
|
|
47
|
+
onToggleEncryptedReasoning,
|
|
48
|
+
showEstimatedToolCost,
|
|
49
|
+
onToggleEstimatedToolCost,
|
|
50
|
+
onEstimateTokens,
|
|
51
|
+
onCalculateMissingTokens,
|
|
52
|
+
estimatingTokens
|
|
48
53
|
}) {
|
|
49
54
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
50
55
|
DropdownMenu.DropdownMenu,
|
|
@@ -77,6 +82,18 @@ function SessionViewerMenu({
|
|
|
77
82
|
onChange: onThemeChange
|
|
78
83
|
}
|
|
79
84
|
),
|
|
85
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Section, { children: [
|
|
86
|
+
onEstimateTokens && /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", role: "menuitem", className: ROW_CLASS, disabled: estimatingTokens, onClick: onEstimateTokens, children: "Estimate tokens/cost for all rows" }),
|
|
87
|
+
onCalculateMissingTokens && /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", role: "menuitem", className: ROW_CLASS, disabled: estimatingTokens, onClick: onCalculateMissingTokens, children: "Calculate missing rows" }),
|
|
88
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
89
|
+
CheckRow,
|
|
90
|
+
{
|
|
91
|
+
label: "Show estimated tool cost",
|
|
92
|
+
checked: showEstimatedToolCost,
|
|
93
|
+
onToggle: onToggleEstimatedToolCost
|
|
94
|
+
}
|
|
95
|
+
)
|
|
96
|
+
] }),
|
|
80
97
|
filters.categories.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Section, { heading: "Categories", children: filters.categories.map((category) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
81
98
|
CheckRow,
|
|
82
99
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionViewerMenu.cjs","sources":["../../../src/data/ai/SessionViewerMenu.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport {\n UiCheck,\n UiDesktop,\n UiDotsVertical,\n UiListDashes,\n UiListFlat,\n UiMoon,\n UiResizeVertical,\n UiRows,\n UiSun,\n} from \"../../icons\";\nimport { type Density } from \"../../hooks/use-density\";\nimport { getSessionAction } from \"./SessionViewer.model\";\nimport {\n CATEGORY_ICONS,\n CATEGORY_LABELS,\n type SessionCategory,\n type SessionFilters,\n} from \"./session-categories\";\n\nexport type SessionThemeOverride = \"light\" | \"dark\";\n\ninterface SegmentedOption<T> {\n value: T | undefined;\n icon: StaticIconComponent;\n label: string;\n}\n\nconst DENSITY_OPTIONS: Array<SegmentedOption<Density>> = [\n { value: undefined, icon: UiResizeVertical, label: \"Use page density\" },\n { value: \"compact\", icon: UiRows, label: \"Compact\" },\n { value: \"comfortable\", icon: UiListFlat, label: \"Comfortable\" },\n { value: \"spacious\", icon: UiListDashes, label: \"Spacious\" },\n];\n\nconst THEME_OPTIONS: Array<SegmentedOption<SessionThemeOverride>> = [\n { value: undefined, icon: UiDesktop, label: \"Use page theme\" },\n { value: \"light\", icon: UiSun, label: \"Light\" },\n { value: \"dark\", icon: UiMoon, label: \"Dark\" },\n];\n\nexport interface SessionViewerMenuProps {\n menuHeader?: ReactNode;\n density: Density | undefined;\n onDensityChange: (density: Density | undefined) => void;\n theme: SessionThemeOverride | undefined;\n onThemeChange: (theme: SessionThemeOverride | undefined) => void;\n filters: SessionFilters;\n hiddenCategories: ReadonlySet<SessionCategory>;\n hiddenTools: ReadonlySet<string>;\n hiddenSources: ReadonlySet<string>;\n onToggleCategory: (category: SessionCategory) => void;\n onToggleTool: (tool: string) => void;\n onToggleSource: (source: string) => void;\n showThinking: boolean;\n onToggleThinking: () => void;\n hasThinking: boolean;\n hasEncryptedReasoning: boolean;\n showEncryptedReasoning: boolean;\n onToggleEncryptedReasoning: () => void;\n}\n\n/** The SessionViewer's \"3-dot\" menu: density and theme overrides as one-line\n * segmented icon rows, plus visibility toggles for the captain category /\n * tool / source facets present in the session. */\nexport function SessionViewerMenu({\n menuHeader,\n density,\n onDensityChange,\n theme,\n onThemeChange,\n filters,\n hiddenCategories,\n hiddenTools,\n hiddenSources,\n onToggleCategory,\n onToggleTool,\n onToggleSource,\n showThinking,\n onToggleThinking,\n hasThinking,\n hasEncryptedReasoning,\n showEncryptedReasoning,\n onToggleEncryptedReasoning,\n}: SessionViewerMenuProps) {\n return (\n <DropdownMenu\n icon={UiDotsVertical}\n hideChevron\n variant=\"ghost\"\n size=\"icon\"\n align=\"right\"\n title=\"Session options\"\n menuLabel=\"Session options\"\n menuClassName=\"min-w-[12rem] max-h-[70vh] overflow-auto px-1\"\n header={menuHeader}\n >\n {() => (\n <div className=\"text-popover-foreground\">\n <SegmentedRow\n label=\"Density\"\n options={DENSITY_OPTIONS}\n value={density}\n onChange={onDensityChange}\n />\n <SegmentedRow\n label=\"Theme\"\n options={THEME_OPTIONS}\n value={theme}\n onChange={onThemeChange}\n />\n\n {filters.categories.length > 0 && (\n <Section heading=\"Categories\">\n {filters.categories.map((category) => (\n <CheckRow\n key={category}\n label={CATEGORY_LABELS[category]}\n icon={CATEGORY_ICONS[category]}\n checked={!hiddenCategories.has(category)}\n onToggle={() => onToggleCategory(category)}\n />\n ))}\n </Section>\n )}\n\n {filters.tools.length > 0 && (\n <Section heading=\"Tools\">\n {filters.tools.map((tool) => (\n <CheckRow\n key={tool.key}\n label={tool.label}\n icon={getSessionAction(tool.key).icon}\n checked={!hiddenTools.has(tool.key)}\n onToggle={() => onToggleTool(tool.key)}\n />\n ))}\n </Section>\n )}\n\n {filters.sources.length > 1 && (\n <Section heading=\"Source\">\n {filters.sources.map((source) => (\n <CheckRow\n key={source}\n label={source}\n checked={!hiddenSources.has(source)}\n onToggle={() => onToggleSource(source)}\n />\n ))}\n </Section>\n )}\n\n {hasThinking && (\n <Section>\n <CheckRow label=\"Reasoning\" checked={showThinking} onToggle={onToggleThinking} />\n {hasEncryptedReasoning && (\n <CheckRow label=\"Encrypted reasoning\" checked={showEncryptedReasoning} onToggle={onToggleEncryptedReasoning} />\n )}\n </Section>\n )}\n </div>\n )}\n </DropdownMenu>\n );\n}\n\n// One line per setting: a dim label on the left, a bordered segmented group of\n// icon-only radio buttons on the right. Labels ride on aria-label/title so\n// menuitemradio queries (and tooltips) still see \"Compact\", \"Dark\", etc.\nfunction SegmentedRow<T extends string>({\n label,\n options,\n value,\n onChange,\n}: {\n label: string;\n options: Array<SegmentedOption<T>>;\n value: T | undefined;\n onChange: (value: T | undefined) => void;\n}) {\n return (\n <div className=\"flex items-center justify-between gap-2 px-2 py-1\">\n <span className=\"text-xs text-muted-foreground\">{label}</span>\n <div className=\"flex items-center gap-0.5 rounded-md border border-border p-0.5\">\n {options.map((option) => {\n const active = value === option.value;\n return (\n <button\n key={option.label}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n aria-label={option.label}\n title={option.label}\n onClick={() => onChange(option.value)}\n className={cn(\n \"flex h-5 w-5 items-center justify-center rounded transition-colors focus:outline-none\",\n active\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:text-foreground focus:text-foreground\",\n )}\n >\n <Icon icon={option.icon} className=\"text-xs\" />\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nfunction Section({ heading, children }: { heading?: string; children: ReactNode }) {\n return (\n <div className=\"mt-1 border-t border-border pt-0.5\">\n {heading && (\n <div className=\"px-2 py-1 text-[11px] font-medium text-muted-foreground\">{heading}</div>\n )}\n {children}\n </div>\n );\n}\n\nconst ROW_CLASS =\n \"flex w-full items-center gap-2 rounded-md px-2 py-1 text-left text-xs transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:outline-none\";\n\nfunction CheckRow({\n label,\n checked,\n onToggle,\n icon,\n}: {\n label: string;\n checked: boolean;\n onToggle: () => void;\n icon?: StaticIconComponent;\n}) {\n return (\n <button\n type=\"button\"\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n className={cn(ROW_CLASS, !checked && \"text-muted-foreground\")}\n onClick={onToggle}\n >\n <span\n aria-hidden\n className={cn(\n \"flex h-3.5 w-3.5 shrink-0 items-center justify-center rounded border\",\n checked ? \"border-primary bg-primary text-primary-foreground\" : \"border-input\",\n )}\n >\n {checked && <Icon icon={UiCheck} className=\"text-[0.6rem]\" />}\n </span>\n {icon && <Icon icon={icon} className=\"size-3.5 shrink-0 text-muted-foreground\" />}\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n </button>\n );\n}\n"],"names":["UiResizeVertical","UiRows","UiListFlat","UiListDashes","UiDesktop","UiSun","UiMoon","jsx","DropdownMenu","UiDotsVertical","jsxs","CATEGORY_LABELS","CATEGORY_ICONS","getSessionAction","cn","Icon","UiCheck"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SessionViewerMenu.cjs","sources":["../../../src/data/ai/SessionViewerMenu.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport {\n UiCheck,\n UiDesktop,\n UiDotsVertical,\n UiListDashes,\n UiListFlat,\n UiMoon,\n UiResizeVertical,\n UiRows,\n UiSun,\n} from \"../../icons\";\nimport { type Density } from \"../../hooks/use-density\";\nimport { getSessionAction } from \"./SessionViewer.model\";\nimport {\n CATEGORY_ICONS,\n CATEGORY_LABELS,\n type SessionCategory,\n type SessionFilters,\n} from \"./session-categories\";\n\nexport type SessionThemeOverride = \"light\" | \"dark\";\n\ninterface SegmentedOption<T> {\n value: T | undefined;\n icon: StaticIconComponent;\n label: string;\n}\n\nconst DENSITY_OPTIONS: Array<SegmentedOption<Density>> = [\n { value: undefined, icon: UiResizeVertical, label: \"Use page density\" },\n { value: \"compact\", icon: UiRows, label: \"Compact\" },\n { value: \"comfortable\", icon: UiListFlat, label: \"Comfortable\" },\n { value: \"spacious\", icon: UiListDashes, label: \"Spacious\" },\n];\n\nconst THEME_OPTIONS: Array<SegmentedOption<SessionThemeOverride>> = [\n { value: undefined, icon: UiDesktop, label: \"Use page theme\" },\n { value: \"light\", icon: UiSun, label: \"Light\" },\n { value: \"dark\", icon: UiMoon, label: \"Dark\" },\n];\n\nexport interface SessionViewerMenuProps {\n menuHeader?: ReactNode;\n density: Density | undefined;\n onDensityChange: (density: Density | undefined) => void;\n theme: SessionThemeOverride | undefined;\n onThemeChange: (theme: SessionThemeOverride | undefined) => void;\n filters: SessionFilters;\n hiddenCategories: ReadonlySet<SessionCategory>;\n hiddenTools: ReadonlySet<string>;\n hiddenSources: ReadonlySet<string>;\n onToggleCategory: (category: SessionCategory) => void;\n onToggleTool: (tool: string) => void;\n onToggleSource: (source: string) => void;\n showThinking: boolean;\n onToggleThinking: () => void;\n hasThinking: boolean;\n hasEncryptedReasoning: boolean;\n showEncryptedReasoning: boolean;\n onToggleEncryptedReasoning: () => void;\n showEstimatedToolCost: boolean;\n onToggleEstimatedToolCost: () => void;\n onEstimateTokens?: () => void;\n onCalculateMissingTokens?: (() => void) | undefined;\n estimatingTokens?: boolean;\n}\n\n/** The SessionViewer's \"3-dot\" menu: density and theme overrides as one-line\n * segmented icon rows, plus visibility toggles for the captain category /\n * tool / source facets present in the session. */\nexport function SessionViewerMenu({\n menuHeader,\n density,\n onDensityChange,\n theme,\n onThemeChange,\n filters,\n hiddenCategories,\n hiddenTools,\n hiddenSources,\n onToggleCategory,\n onToggleTool,\n onToggleSource,\n showThinking,\n onToggleThinking,\n hasThinking,\n hasEncryptedReasoning,\n showEncryptedReasoning,\n onToggleEncryptedReasoning,\n showEstimatedToolCost,\n onToggleEstimatedToolCost,\n onEstimateTokens,\n onCalculateMissingTokens,\n estimatingTokens,\n}: SessionViewerMenuProps) {\n return (\n <DropdownMenu\n icon={UiDotsVertical}\n hideChevron\n variant=\"ghost\"\n size=\"icon\"\n align=\"right\"\n title=\"Session options\"\n menuLabel=\"Session options\"\n menuClassName=\"min-w-[12rem] max-h-[70vh] overflow-auto px-1\"\n header={menuHeader}\n >\n {() => (\n <div className=\"text-popover-foreground\">\n <SegmentedRow\n label=\"Density\"\n options={DENSITY_OPTIONS}\n value={density}\n onChange={onDensityChange}\n />\n <SegmentedRow\n label=\"Theme\"\n options={THEME_OPTIONS}\n value={theme}\n onChange={onThemeChange}\n />\n\n <Section>\n {onEstimateTokens && <button type=\"button\" role=\"menuitem\" className={ROW_CLASS} disabled={estimatingTokens} onClick={onEstimateTokens}>Estimate tokens/cost for all rows</button>}\n {onCalculateMissingTokens && <button type=\"button\" role=\"menuitem\" className={ROW_CLASS} disabled={estimatingTokens} onClick={onCalculateMissingTokens}>Calculate missing rows</button>}\n <CheckRow\n label=\"Show estimated tool cost\"\n checked={showEstimatedToolCost}\n onToggle={onToggleEstimatedToolCost}\n />\n </Section>\n\n {filters.categories.length > 0 && (\n <Section heading=\"Categories\">\n {filters.categories.map((category) => (\n <CheckRow\n key={category}\n label={CATEGORY_LABELS[category]}\n icon={CATEGORY_ICONS[category]}\n checked={!hiddenCategories.has(category)}\n onToggle={() => onToggleCategory(category)}\n />\n ))}\n </Section>\n )}\n\n {filters.tools.length > 0 && (\n <Section heading=\"Tools\">\n {filters.tools.map((tool) => (\n <CheckRow\n key={tool.key}\n label={tool.label}\n icon={getSessionAction(tool.key).icon}\n checked={!hiddenTools.has(tool.key)}\n onToggle={() => onToggleTool(tool.key)}\n />\n ))}\n </Section>\n )}\n\n {filters.sources.length > 1 && (\n <Section heading=\"Source\">\n {filters.sources.map((source) => (\n <CheckRow\n key={source}\n label={source}\n checked={!hiddenSources.has(source)}\n onToggle={() => onToggleSource(source)}\n />\n ))}\n </Section>\n )}\n\n {hasThinking && (\n <Section>\n <CheckRow label=\"Reasoning\" checked={showThinking} onToggle={onToggleThinking} />\n {hasEncryptedReasoning && (\n <CheckRow label=\"Encrypted reasoning\" checked={showEncryptedReasoning} onToggle={onToggleEncryptedReasoning} />\n )}\n </Section>\n )}\n </div>\n )}\n </DropdownMenu>\n );\n}\n\n// One line per setting: a dim label on the left, a bordered segmented group of\n// icon-only radio buttons on the right. Labels ride on aria-label/title so\n// menuitemradio queries (and tooltips) still see \"Compact\", \"Dark\", etc.\nfunction SegmentedRow<T extends string>({\n label,\n options,\n value,\n onChange,\n}: {\n label: string;\n options: Array<SegmentedOption<T>>;\n value: T | undefined;\n onChange: (value: T | undefined) => void;\n}) {\n return (\n <div className=\"flex items-center justify-between gap-2 px-2 py-1\">\n <span className=\"text-xs text-muted-foreground\">{label}</span>\n <div className=\"flex items-center gap-0.5 rounded-md border border-border p-0.5\">\n {options.map((option) => {\n const active = value === option.value;\n return (\n <button\n key={option.label}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n aria-label={option.label}\n title={option.label}\n onClick={() => onChange(option.value)}\n className={cn(\n \"flex h-5 w-5 items-center justify-center rounded transition-colors focus:outline-none\",\n active\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:text-foreground focus:text-foreground\",\n )}\n >\n <Icon icon={option.icon} className=\"text-xs\" />\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nfunction Section({ heading, children }: { heading?: string; children: ReactNode }) {\n return (\n <div className=\"mt-1 border-t border-border pt-0.5\">\n {heading && (\n <div className=\"px-2 py-1 text-[11px] font-medium text-muted-foreground\">{heading}</div>\n )}\n {children}\n </div>\n );\n}\n\nconst ROW_CLASS =\n \"flex w-full items-center gap-2 rounded-md px-2 py-1 text-left text-xs transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:outline-none\";\n\nfunction CheckRow({\n label,\n checked,\n onToggle,\n icon,\n}: {\n label: string;\n checked: boolean;\n onToggle: () => void;\n icon?: StaticIconComponent;\n}) {\n return (\n <button\n type=\"button\"\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n className={cn(ROW_CLASS, !checked && \"text-muted-foreground\")}\n onClick={onToggle}\n >\n <span\n aria-hidden\n className={cn(\n \"flex h-3.5 w-3.5 shrink-0 items-center justify-center rounded border\",\n checked ? \"border-primary bg-primary text-primary-foreground\" : \"border-input\",\n )}\n >\n {checked && <Icon icon={UiCheck} className=\"text-[0.6rem]\" />}\n </span>\n {icon && <Icon icon={icon} className=\"size-3.5 shrink-0 text-muted-foreground\" />}\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n </button>\n );\n}\n"],"names":["UiResizeVertical","UiRows","UiListFlat","UiListDashes","UiDesktop","UiSun","UiMoon","jsx","DropdownMenu","UiDotsVertical","jsxs","CATEGORY_LABELS","CATEGORY_ICONS","getSessionAction","cn","Icon","UiCheck"],"mappings":"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"}
|
|
@@ -21,9 +21,14 @@ export interface SessionViewerMenuProps {
|
|
|
21
21
|
hasEncryptedReasoning: boolean;
|
|
22
22
|
showEncryptedReasoning: boolean;
|
|
23
23
|
onToggleEncryptedReasoning: () => void;
|
|
24
|
+
showEstimatedToolCost: boolean;
|
|
25
|
+
onToggleEstimatedToolCost: () => void;
|
|
26
|
+
onEstimateTokens?: () => void;
|
|
27
|
+
onCalculateMissingTokens?: (() => void) | undefined;
|
|
28
|
+
estimatingTokens?: boolean;
|
|
24
29
|
}
|
|
25
30
|
/** The SessionViewer's "3-dot" menu: density and theme overrides as one-line
|
|
26
31
|
* segmented icon rows, plus visibility toggles for the captain category /
|
|
27
32
|
* tool / source facets present in the session. */
|
|
28
|
-
export declare function SessionViewerMenu({ menuHeader, density, onDensityChange, theme, onThemeChange, filters, hiddenCategories, hiddenTools, hiddenSources, onToggleCategory, onToggleTool, onToggleSource, showThinking, onToggleThinking, hasThinking, hasEncryptedReasoning, showEncryptedReasoning, onToggleEncryptedReasoning, }: SessionViewerMenuProps): import("react").JSX.Element;
|
|
33
|
+
export declare function SessionViewerMenu({ menuHeader, density, onDensityChange, theme, onThemeChange, filters, hiddenCategories, hiddenTools, hiddenSources, onToggleCategory, onToggleTool, onToggleSource, showThinking, onToggleThinking, hasThinking, hasEncryptedReasoning, showEncryptedReasoning, onToggleEncryptedReasoning, showEstimatedToolCost, onToggleEstimatedToolCost, onEstimateTokens, onCalculateMissingTokens, estimatingTokens, }: SessionViewerMenuProps): import("react").JSX.Element;
|
|
29
34
|
//# sourceMappingURL=SessionViewerMenu.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionViewerMenu.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionViewerMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAevC,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,MAAM,CAAC;AAqBpD,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,KAAK,IAAI,CAAC;IACxD,KAAK,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACxC,aAAa,EAAE,CAAC,KAAK,EAAE,oBAAoB,GAAG,SAAS,KAAK,IAAI,CAAC;IACjE,OAAO,EAAE,cAAc,CAAC;IACxB,gBAAgB,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;IAC/C,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;IACtD,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;IACrB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,sBAAsB,EAAE,OAAO,CAAC;IAChC,0BAA0B,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"SessionViewerMenu.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionViewerMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAevC,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,MAAM,CAAC;AAqBpD,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,KAAK,IAAI,CAAC;IACxD,KAAK,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACxC,aAAa,EAAE,CAAC,KAAK,EAAE,oBAAoB,GAAG,SAAS,KAAK,IAAI,CAAC;IACjE,OAAO,EAAE,cAAc,CAAC;IACxB,gBAAgB,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;IAC/C,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;IACtD,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;IACrB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,sBAAsB,EAAE,OAAO,CAAC;IAChC,0BAA0B,EAAE,MAAM,IAAI,CAAC;IACvC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,yBAAyB,EAAE,MAAM,IAAI,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,wBAAwB,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACpD,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;mDAEmD;AACnD,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,EACV,OAAO,EACP,eAAe,EACf,KAAK,EACL,aAAa,EACb,OAAO,EACP,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,yBAAyB,EACzB,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,GACjB,EAAE,sBAAsB,+BA2FxB"}
|
|
@@ -42,7 +42,12 @@ function SessionViewerMenu({
|
|
|
42
42
|
hasThinking,
|
|
43
43
|
hasEncryptedReasoning,
|
|
44
44
|
showEncryptedReasoning,
|
|
45
|
-
onToggleEncryptedReasoning
|
|
45
|
+
onToggleEncryptedReasoning,
|
|
46
|
+
showEstimatedToolCost,
|
|
47
|
+
onToggleEstimatedToolCost,
|
|
48
|
+
onEstimateTokens,
|
|
49
|
+
onCalculateMissingTokens,
|
|
50
|
+
estimatingTokens
|
|
46
51
|
}) {
|
|
47
52
|
return /* @__PURE__ */ jsx(
|
|
48
53
|
DropdownMenu,
|
|
@@ -75,6 +80,18 @@ function SessionViewerMenu({
|
|
|
75
80
|
onChange: onThemeChange
|
|
76
81
|
}
|
|
77
82
|
),
|
|
83
|
+
/* @__PURE__ */ jsxs(Section, { children: [
|
|
84
|
+
onEstimateTokens && /* @__PURE__ */ jsx("button", { type: "button", role: "menuitem", className: ROW_CLASS, disabled: estimatingTokens, onClick: onEstimateTokens, children: "Estimate tokens/cost for all rows" }),
|
|
85
|
+
onCalculateMissingTokens && /* @__PURE__ */ jsx("button", { type: "button", role: "menuitem", className: ROW_CLASS, disabled: estimatingTokens, onClick: onCalculateMissingTokens, children: "Calculate missing rows" }),
|
|
86
|
+
/* @__PURE__ */ jsx(
|
|
87
|
+
CheckRow,
|
|
88
|
+
{
|
|
89
|
+
label: "Show estimated tool cost",
|
|
90
|
+
checked: showEstimatedToolCost,
|
|
91
|
+
onToggle: onToggleEstimatedToolCost
|
|
92
|
+
}
|
|
93
|
+
)
|
|
94
|
+
] }),
|
|
78
95
|
filters.categories.length > 0 && /* @__PURE__ */ jsx(Section, { heading: "Categories", children: filters.categories.map((category) => /* @__PURE__ */ jsx(
|
|
79
96
|
CheckRow,
|
|
80
97
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionViewerMenu.js","sources":["../../../src/data/ai/SessionViewerMenu.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport {\n UiCheck,\n UiDesktop,\n UiDotsVertical,\n UiListDashes,\n UiListFlat,\n UiMoon,\n UiResizeVertical,\n UiRows,\n UiSun,\n} from \"../../icons\";\nimport { type Density } from \"../../hooks/use-density\";\nimport { getSessionAction } from \"./SessionViewer.model\";\nimport {\n CATEGORY_ICONS,\n CATEGORY_LABELS,\n type SessionCategory,\n type SessionFilters,\n} from \"./session-categories\";\n\nexport type SessionThemeOverride = \"light\" | \"dark\";\n\ninterface SegmentedOption<T> {\n value: T | undefined;\n icon: StaticIconComponent;\n label: string;\n}\n\nconst DENSITY_OPTIONS: Array<SegmentedOption<Density>> = [\n { value: undefined, icon: UiResizeVertical, label: \"Use page density\" },\n { value: \"compact\", icon: UiRows, label: \"Compact\" },\n { value: \"comfortable\", icon: UiListFlat, label: \"Comfortable\" },\n { value: \"spacious\", icon: UiListDashes, label: \"Spacious\" },\n];\n\nconst THEME_OPTIONS: Array<SegmentedOption<SessionThemeOverride>> = [\n { value: undefined, icon: UiDesktop, label: \"Use page theme\" },\n { value: \"light\", icon: UiSun, label: \"Light\" },\n { value: \"dark\", icon: UiMoon, label: \"Dark\" },\n];\n\nexport interface SessionViewerMenuProps {\n menuHeader?: ReactNode;\n density: Density | undefined;\n onDensityChange: (density: Density | undefined) => void;\n theme: SessionThemeOverride | undefined;\n onThemeChange: (theme: SessionThemeOverride | undefined) => void;\n filters: SessionFilters;\n hiddenCategories: ReadonlySet<SessionCategory>;\n hiddenTools: ReadonlySet<string>;\n hiddenSources: ReadonlySet<string>;\n onToggleCategory: (category: SessionCategory) => void;\n onToggleTool: (tool: string) => void;\n onToggleSource: (source: string) => void;\n showThinking: boolean;\n onToggleThinking: () => void;\n hasThinking: boolean;\n hasEncryptedReasoning: boolean;\n showEncryptedReasoning: boolean;\n onToggleEncryptedReasoning: () => void;\n}\n\n/** The SessionViewer's \"3-dot\" menu: density and theme overrides as one-line\n * segmented icon rows, plus visibility toggles for the captain category /\n * tool / source facets present in the session. */\nexport function SessionViewerMenu({\n menuHeader,\n density,\n onDensityChange,\n theme,\n onThemeChange,\n filters,\n hiddenCategories,\n hiddenTools,\n hiddenSources,\n onToggleCategory,\n onToggleTool,\n onToggleSource,\n showThinking,\n onToggleThinking,\n hasThinking,\n hasEncryptedReasoning,\n showEncryptedReasoning,\n onToggleEncryptedReasoning,\n}: SessionViewerMenuProps) {\n return (\n <DropdownMenu\n icon={UiDotsVertical}\n hideChevron\n variant=\"ghost\"\n size=\"icon\"\n align=\"right\"\n title=\"Session options\"\n menuLabel=\"Session options\"\n menuClassName=\"min-w-[12rem] max-h-[70vh] overflow-auto px-1\"\n header={menuHeader}\n >\n {() => (\n <div className=\"text-popover-foreground\">\n <SegmentedRow\n label=\"Density\"\n options={DENSITY_OPTIONS}\n value={density}\n onChange={onDensityChange}\n />\n <SegmentedRow\n label=\"Theme\"\n options={THEME_OPTIONS}\n value={theme}\n onChange={onThemeChange}\n />\n\n {filters.categories.length > 0 && (\n <Section heading=\"Categories\">\n {filters.categories.map((category) => (\n <CheckRow\n key={category}\n label={CATEGORY_LABELS[category]}\n icon={CATEGORY_ICONS[category]}\n checked={!hiddenCategories.has(category)}\n onToggle={() => onToggleCategory(category)}\n />\n ))}\n </Section>\n )}\n\n {filters.tools.length > 0 && (\n <Section heading=\"Tools\">\n {filters.tools.map((tool) => (\n <CheckRow\n key={tool.key}\n label={tool.label}\n icon={getSessionAction(tool.key).icon}\n checked={!hiddenTools.has(tool.key)}\n onToggle={() => onToggleTool(tool.key)}\n />\n ))}\n </Section>\n )}\n\n {filters.sources.length > 1 && (\n <Section heading=\"Source\">\n {filters.sources.map((source) => (\n <CheckRow\n key={source}\n label={source}\n checked={!hiddenSources.has(source)}\n onToggle={() => onToggleSource(source)}\n />\n ))}\n </Section>\n )}\n\n {hasThinking && (\n <Section>\n <CheckRow label=\"Reasoning\" checked={showThinking} onToggle={onToggleThinking} />\n {hasEncryptedReasoning && (\n <CheckRow label=\"Encrypted reasoning\" checked={showEncryptedReasoning} onToggle={onToggleEncryptedReasoning} />\n )}\n </Section>\n )}\n </div>\n )}\n </DropdownMenu>\n );\n}\n\n// One line per setting: a dim label on the left, a bordered segmented group of\n// icon-only radio buttons on the right. Labels ride on aria-label/title so\n// menuitemradio queries (and tooltips) still see \"Compact\", \"Dark\", etc.\nfunction SegmentedRow<T extends string>({\n label,\n options,\n value,\n onChange,\n}: {\n label: string;\n options: Array<SegmentedOption<T>>;\n value: T | undefined;\n onChange: (value: T | undefined) => void;\n}) {\n return (\n <div className=\"flex items-center justify-between gap-2 px-2 py-1\">\n <span className=\"text-xs text-muted-foreground\">{label}</span>\n <div className=\"flex items-center gap-0.5 rounded-md border border-border p-0.5\">\n {options.map((option) => {\n const active = value === option.value;\n return (\n <button\n key={option.label}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n aria-label={option.label}\n title={option.label}\n onClick={() => onChange(option.value)}\n className={cn(\n \"flex h-5 w-5 items-center justify-center rounded transition-colors focus:outline-none\",\n active\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:text-foreground focus:text-foreground\",\n )}\n >\n <Icon icon={option.icon} className=\"text-xs\" />\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nfunction Section({ heading, children }: { heading?: string; children: ReactNode }) {\n return (\n <div className=\"mt-1 border-t border-border pt-0.5\">\n {heading && (\n <div className=\"px-2 py-1 text-[11px] font-medium text-muted-foreground\">{heading}</div>\n )}\n {children}\n </div>\n );\n}\n\nconst ROW_CLASS =\n \"flex w-full items-center gap-2 rounded-md px-2 py-1 text-left text-xs transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:outline-none\";\n\nfunction CheckRow({\n label,\n checked,\n onToggle,\n icon,\n}: {\n label: string;\n checked: boolean;\n onToggle: () => void;\n icon?: StaticIconComponent;\n}) {\n return (\n <button\n type=\"button\"\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n className={cn(ROW_CLASS, !checked && \"text-muted-foreground\")}\n onClick={onToggle}\n >\n <span\n aria-hidden\n className={cn(\n \"flex h-3.5 w-3.5 shrink-0 items-center justify-center rounded border\",\n checked ? \"border-primary bg-primary text-primary-foreground\" : \"border-input\",\n )}\n >\n {checked && <Icon icon={UiCheck} className=\"text-[0.6rem]\" />}\n </span>\n {icon && <Icon icon={icon} className=\"size-3.5 shrink-0 text-muted-foreground\" />}\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n </button>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SessionViewerMenu.js","sources":["../../../src/data/ai/SessionViewerMenu.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { Icon, type StaticIconComponent } from \"../Icon\";\nimport {\n UiCheck,\n UiDesktop,\n UiDotsVertical,\n UiListDashes,\n UiListFlat,\n UiMoon,\n UiResizeVertical,\n UiRows,\n UiSun,\n} from \"../../icons\";\nimport { type Density } from \"../../hooks/use-density\";\nimport { getSessionAction } from \"./SessionViewer.model\";\nimport {\n CATEGORY_ICONS,\n CATEGORY_LABELS,\n type SessionCategory,\n type SessionFilters,\n} from \"./session-categories\";\n\nexport type SessionThemeOverride = \"light\" | \"dark\";\n\ninterface SegmentedOption<T> {\n value: T | undefined;\n icon: StaticIconComponent;\n label: string;\n}\n\nconst DENSITY_OPTIONS: Array<SegmentedOption<Density>> = [\n { value: undefined, icon: UiResizeVertical, label: \"Use page density\" },\n { value: \"compact\", icon: UiRows, label: \"Compact\" },\n { value: \"comfortable\", icon: UiListFlat, label: \"Comfortable\" },\n { value: \"spacious\", icon: UiListDashes, label: \"Spacious\" },\n];\n\nconst THEME_OPTIONS: Array<SegmentedOption<SessionThemeOverride>> = [\n { value: undefined, icon: UiDesktop, label: \"Use page theme\" },\n { value: \"light\", icon: UiSun, label: \"Light\" },\n { value: \"dark\", icon: UiMoon, label: \"Dark\" },\n];\n\nexport interface SessionViewerMenuProps {\n menuHeader?: ReactNode;\n density: Density | undefined;\n onDensityChange: (density: Density | undefined) => void;\n theme: SessionThemeOverride | undefined;\n onThemeChange: (theme: SessionThemeOverride | undefined) => void;\n filters: SessionFilters;\n hiddenCategories: ReadonlySet<SessionCategory>;\n hiddenTools: ReadonlySet<string>;\n hiddenSources: ReadonlySet<string>;\n onToggleCategory: (category: SessionCategory) => void;\n onToggleTool: (tool: string) => void;\n onToggleSource: (source: string) => void;\n showThinking: boolean;\n onToggleThinking: () => void;\n hasThinking: boolean;\n hasEncryptedReasoning: boolean;\n showEncryptedReasoning: boolean;\n onToggleEncryptedReasoning: () => void;\n showEstimatedToolCost: boolean;\n onToggleEstimatedToolCost: () => void;\n onEstimateTokens?: () => void;\n onCalculateMissingTokens?: (() => void) | undefined;\n estimatingTokens?: boolean;\n}\n\n/** The SessionViewer's \"3-dot\" menu: density and theme overrides as one-line\n * segmented icon rows, plus visibility toggles for the captain category /\n * tool / source facets present in the session. */\nexport function SessionViewerMenu({\n menuHeader,\n density,\n onDensityChange,\n theme,\n onThemeChange,\n filters,\n hiddenCategories,\n hiddenTools,\n hiddenSources,\n onToggleCategory,\n onToggleTool,\n onToggleSource,\n showThinking,\n onToggleThinking,\n hasThinking,\n hasEncryptedReasoning,\n showEncryptedReasoning,\n onToggleEncryptedReasoning,\n showEstimatedToolCost,\n onToggleEstimatedToolCost,\n onEstimateTokens,\n onCalculateMissingTokens,\n estimatingTokens,\n}: SessionViewerMenuProps) {\n return (\n <DropdownMenu\n icon={UiDotsVertical}\n hideChevron\n variant=\"ghost\"\n size=\"icon\"\n align=\"right\"\n title=\"Session options\"\n menuLabel=\"Session options\"\n menuClassName=\"min-w-[12rem] max-h-[70vh] overflow-auto px-1\"\n header={menuHeader}\n >\n {() => (\n <div className=\"text-popover-foreground\">\n <SegmentedRow\n label=\"Density\"\n options={DENSITY_OPTIONS}\n value={density}\n onChange={onDensityChange}\n />\n <SegmentedRow\n label=\"Theme\"\n options={THEME_OPTIONS}\n value={theme}\n onChange={onThemeChange}\n />\n\n <Section>\n {onEstimateTokens && <button type=\"button\" role=\"menuitem\" className={ROW_CLASS} disabled={estimatingTokens} onClick={onEstimateTokens}>Estimate tokens/cost for all rows</button>}\n {onCalculateMissingTokens && <button type=\"button\" role=\"menuitem\" className={ROW_CLASS} disabled={estimatingTokens} onClick={onCalculateMissingTokens}>Calculate missing rows</button>}\n <CheckRow\n label=\"Show estimated tool cost\"\n checked={showEstimatedToolCost}\n onToggle={onToggleEstimatedToolCost}\n />\n </Section>\n\n {filters.categories.length > 0 && (\n <Section heading=\"Categories\">\n {filters.categories.map((category) => (\n <CheckRow\n key={category}\n label={CATEGORY_LABELS[category]}\n icon={CATEGORY_ICONS[category]}\n checked={!hiddenCategories.has(category)}\n onToggle={() => onToggleCategory(category)}\n />\n ))}\n </Section>\n )}\n\n {filters.tools.length > 0 && (\n <Section heading=\"Tools\">\n {filters.tools.map((tool) => (\n <CheckRow\n key={tool.key}\n label={tool.label}\n icon={getSessionAction(tool.key).icon}\n checked={!hiddenTools.has(tool.key)}\n onToggle={() => onToggleTool(tool.key)}\n />\n ))}\n </Section>\n )}\n\n {filters.sources.length > 1 && (\n <Section heading=\"Source\">\n {filters.sources.map((source) => (\n <CheckRow\n key={source}\n label={source}\n checked={!hiddenSources.has(source)}\n onToggle={() => onToggleSource(source)}\n />\n ))}\n </Section>\n )}\n\n {hasThinking && (\n <Section>\n <CheckRow label=\"Reasoning\" checked={showThinking} onToggle={onToggleThinking} />\n {hasEncryptedReasoning && (\n <CheckRow label=\"Encrypted reasoning\" checked={showEncryptedReasoning} onToggle={onToggleEncryptedReasoning} />\n )}\n </Section>\n )}\n </div>\n )}\n </DropdownMenu>\n );\n}\n\n// One line per setting: a dim label on the left, a bordered segmented group of\n// icon-only radio buttons on the right. Labels ride on aria-label/title so\n// menuitemradio queries (and tooltips) still see \"Compact\", \"Dark\", etc.\nfunction SegmentedRow<T extends string>({\n label,\n options,\n value,\n onChange,\n}: {\n label: string;\n options: Array<SegmentedOption<T>>;\n value: T | undefined;\n onChange: (value: T | undefined) => void;\n}) {\n return (\n <div className=\"flex items-center justify-between gap-2 px-2 py-1\">\n <span className=\"text-xs text-muted-foreground\">{label}</span>\n <div className=\"flex items-center gap-0.5 rounded-md border border-border p-0.5\">\n {options.map((option) => {\n const active = value === option.value;\n return (\n <button\n key={option.label}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n aria-label={option.label}\n title={option.label}\n onClick={() => onChange(option.value)}\n className={cn(\n \"flex h-5 w-5 items-center justify-center rounded transition-colors focus:outline-none\",\n active\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:text-foreground focus:text-foreground\",\n )}\n >\n <Icon icon={option.icon} className=\"text-xs\" />\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nfunction Section({ heading, children }: { heading?: string; children: ReactNode }) {\n return (\n <div className=\"mt-1 border-t border-border pt-0.5\">\n {heading && (\n <div className=\"px-2 py-1 text-[11px] font-medium text-muted-foreground\">{heading}</div>\n )}\n {children}\n </div>\n );\n}\n\nconst ROW_CLASS =\n \"flex w-full items-center gap-2 rounded-md px-2 py-1 text-left text-xs transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:outline-none\";\n\nfunction CheckRow({\n label,\n checked,\n onToggle,\n icon,\n}: {\n label: string;\n checked: boolean;\n onToggle: () => void;\n icon?: StaticIconComponent;\n}) {\n return (\n <button\n type=\"button\"\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n className={cn(ROW_CLASS, !checked && \"text-muted-foreground\")}\n onClick={onToggle}\n >\n <span\n aria-hidden\n className={cn(\n \"flex h-3.5 w-3.5 shrink-0 items-center justify-center rounded border\",\n checked ? \"border-primary bg-primary text-primary-foreground\" : \"border-input\",\n )}\n >\n {checked && <Icon icon={UiCheck} className=\"text-[0.6rem]\" />}\n </span>\n {icon && <Icon icon={icon} className=\"size-3.5 shrink-0 text-muted-foreground\" />}\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n </button>\n );\n}\n"],"names":[],"mappings":"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"}
|