@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-pan-zoom.cjs","sources":["../../src/data/use-pan-zoom.ts"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type PointerEvent as ReactPointerEvent,\n type RefObject,\n} from \"react\";\n\nexport interface PanZoomTransform {\n /** Translation of the content's top-left corner inside the viewport, in px. */\n x: number;\n y: number;\n scale: number;\n}\n\nexport interface PanZoomSize {\n width: number;\n height: number;\n}\n\nexport interface PanZoomLimits {\n minScale: number;\n maxScale: number;\n}\n\nconst DEFAULT_LIMITS: PanZoomLimits = { minScale: 0.2, maxScale: 4 };\nconst BUTTON_ZOOM_FACTOR = 1.25;\nconst WHEEL_ZOOM_RATE = 0.01;\n/** Air kept between overflowing content and the viewport edge when fitting, in content px. */\nconst OVERFLOW_MARGIN = 8;\n/** Pointer travel in px before a press becomes a pan rather than a click. */\nconst DRAG_THRESHOLD = 4;\n\n/** Scales by `factor`, clamped to `limits`, keeping the content under `point` (viewport px) where it is. */\nexport function zoomAround(\n transform: PanZoomTransform,\n point: { x: number; y: number },\n factor: number,\n limits: PanZoomLimits = DEFAULT_LIMITS,\n): PanZoomTransform {\n const scale = Math.min(limits.maxScale, Math.max(limits.minScale, transform.scale * factor));\n const ratio = scale / transform.scale;\n return {\n x: point.x - (point.x - transform.x) * ratio,\n y: point.y - (point.y - transform.y) * ratio,\n scale,\n };\n}\n\nexport interface FitOptions {\n /** The smallest scale the fit shrinks to. Content too large for it overflows the viewport. */\n minScale?: number;\n /** The content point an overflowing axis is centred on. Defaults to the content's centre. */\n focus?: { x: number; y: number };\n}\n\n/** Offset of one axis: centred when the content fits, else centred on `focus` without showing past either edge. */\nfunction fitOffset(viewport: number, content: number, focus: number, scale: number): number {\n const slack = viewport - content * scale;\n return slack >= 0 ? slack / 2 : Math.min(0, Math.max(slack, viewport / 2 - focus * scale));\n}\n\n/**\n * The transform that shows all of `content` centred in `viewport`. Content is\n * only ever shrunk to fit, never enlarged past its natural size. With\n * `fit.minScale` it is not shrunk past that either: it then overflows, centred\n * on `fit.focus`, and the rest is reached by panning. An unmeasured\n * (zero-sized) viewport yields the identity transform.\n */\nexport function fitTransform(\n content: PanZoomSize,\n viewport: PanZoomSize,\n limits: PanZoomLimits = DEFAULT_LIMITS,\n fit: FitOptions = {},\n): PanZoomTransform {\n if (viewport.width <= 0 || viewport.height <= 0 || content.width <= 0 || content.height <= 0) {\n return { x: 0, y: 0, scale: 1 };\n }\n const whole = Math.min(1, viewport.width / content.width, viewport.height / content.height);\n const scale = Math.max(limits.minScale, Math.min(1, fit.minScale ?? 0), whole);\n const focus = fit.focus ?? { x: content.width / 2, y: content.height / 2 };\n return {\n x: fitOffset(viewport.width, content.width, focus.x, scale),\n y: fitOffset(viewport.height, content.height, focus.y, scale),\n scale,\n };\n}\n\nexport interface UsePanZoomOptions {\n /** When false the hook is inert: no listeners, identity transform. */\n enabled: boolean;\n /** Natural (unscaled) size of the content being panned and zoomed. */\n contentWidth: number;\n contentHeight: number;\n /** How the content opens, and what `reset()` returns to. `fit()` ignores it and shows everything. */\n opening?: FitOptions;\n}\n\nexport interface PanZoomViewportHandlers {\n onPointerDown: (event: ReactPointerEvent<HTMLDivElement>) => void;\n onPointerMove: (event: ReactPointerEvent<HTMLDivElement>) => void;\n onPointerUp: (event: ReactPointerEvent<HTMLDivElement>) => void;\n onPointerCancel: (event: ReactPointerEvent<HTMLDivElement>) => void;\n}\n\nexport interface PanZoom {\n /** Attach to the clipping viewport element. */\n viewportRef: RefObject<HTMLDivElement | null>;\n /** Attach to the content element, so anything overflowing its box is fitted too. */\n contentRef: RefObject<HTMLDivElement | null>;\n /** Spread onto the viewport element; empty when disabled. */\n handlers: Partial<PanZoomViewportHandlers>;\n /** Apply to the content as `translate(x, y) scale(scale)` with a top-left transform origin. */\n transform: PanZoomTransform;\n panning: boolean;\n zoomIn: () => void;\n zoomOut: () => void;\n /** Shows everything, however small. */\n fit: () => void;\n /** Returns to how the content opened: see `UsePanZoomOptions.opening`. */\n reset: () => void;\n}\n\ntype ViewportRef = RefObject<HTMLDivElement | null>;\n\nfunction viewportSize(element: HTMLElement): PanZoomSize {\n return { width: element.clientWidth, height: element.clientHeight };\n}\n\n/**\n * The content's size, counting children that overflow its box to the right or\n * below (a label hanging off its edge): they extend its scroll size, which a\n * transform leaves untouched.\n */\nfunction overflowedSize(element: HTMLElement | null, natural: PanZoomSize): PanZoomSize {\n const overflowed = (size: number, scrolled: number | undefined) =>\n scrolled !== undefined && scrolled > size ? scrolled + OVERFLOW_MARGIN : size;\n return {\n width: overflowed(natural.width, element?.scrollWidth),\n height: overflowed(natural.height, element?.scrollHeight),\n };\n}\n\n/** Runs `refit` now and whenever the viewport is resized. */\nfunction useViewportResize(viewportRef: ViewportRef, enabled: boolean, refit: () => void): void {\n useEffect(() => {\n const viewport = viewportRef.current;\n if (!enabled || !viewport) return;\n refit();\n if (typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver(refit);\n observer.observe(viewport);\n return () => observer.disconnect();\n }, [viewportRef, enabled, refit]);\n}\n\nfunction useWheelZoom(\n viewportRef: ViewportRef,\n enabled: boolean,\n zoomAt: (point: { x: number; y: number }, factor: number) => void,\n): void {\n useEffect(() => {\n const viewport = viewportRef.current;\n if (!enabled || !viewport) return;\n const onWheel = (event: WheelEvent) => {\n if (!event.ctrlKey && !event.metaKey) return;\n event.preventDefault();\n const rect = viewport.getBoundingClientRect();\n zoomAt(\n { x: event.clientX - rect.left, y: event.clientY - rect.top },\n Math.exp(-event.deltaY * WHEEL_ZOOM_RATE),\n );\n };\n // React registers wheel listeners as passive, which cannot preventDefault the page zoom.\n viewport.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => viewport.removeEventListener(\"wheel\", onWheel);\n }, [viewportRef, enabled, zoomAt]);\n}\n\nfunction useDragPan(panBy: (dx: number, dy: number) => void): {\n panning: boolean;\n handlers: PanZoomViewportHandlers;\n} {\n const [panning, setPanning] = useState(false);\n const drag = useRef<{ pointerId: number; x: number; y: number; moved: boolean } | null>(null);\n const endDrag = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (!drag.current || drag.current.pointerId !== event.pointerId) return;\n drag.current = null;\n setPanning(false);\n };\n return {\n panning,\n handlers: {\n onPointerDown: (event) => {\n if (event.button !== 0) return;\n drag.current = { pointerId: event.pointerId, x: event.clientX, y: event.clientY, moved: false };\n },\n onPointerMove: (event) => {\n const active = drag.current;\n if (!active || active.pointerId !== event.pointerId) return;\n const dx = event.clientX - active.x;\n const dy = event.clientY - active.y;\n if (!active.moved) {\n if (Math.hypot(dx, dy) < DRAG_THRESHOLD) return;\n // Capturing only once a drag is under way leaves plain clicks on nodes and edges alone,\n // and retargets the click that ends a drag to the viewport so it selects nothing.\n event.currentTarget.setPointerCapture?.(event.pointerId);\n setPanning(true);\n }\n drag.current = { pointerId: active.pointerId, x: event.clientX, y: event.clientY, moved: true };\n panBy(dx, dy);\n },\n onPointerUp: endDrag,\n onPointerCancel: endDrag,\n },\n };\n}\n\n/**\n * Pan and zoom for a fixed-size content box inside a clipping viewport:\n * ctrl/meta + wheel (which is also what a trackpad pinch sends) zooms around\n * the pointer, dragging pans, and `zoomIn`/`zoomOut`/`fit` back a control\n * cluster. The content stays fitted to the viewport — across content and\n * viewport size changes — until the user pans or zooms, and again after\n * `fit()` or `reset()`.\n */\nexport function usePanZoom({ enabled, contentWidth, contentHeight, opening }: UsePanZoomOptions): PanZoom {\n const viewportRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [transform, setTransform] = useState<PanZoomTransform>({ x: 0, y: 0, scale: 1 });\n // Which fit the content is held to, until the user pans or zooms.\n const fitted = useRef<\"opening\" | \"everything\" | undefined>(\"opening\");\n const { minScale, focus } = opening ?? {};\n const [focusX, focusY] = [focus?.x, focus?.y];\n\n const refit = useCallback(() => {\n const viewport = viewportRef.current;\n if (!viewport || !fitted.current) return;\n const content = overflowedSize(contentRef.current, { width: contentWidth, height: contentHeight });\n const fit: FitOptions =\n fitted.current === \"everything\"\n ? {}\n : {\n ...(minScale !== undefined ? { minScale } : {}),\n ...(focusX !== undefined && focusY !== undefined ? { focus: { x: focusX, y: focusY } } : {}),\n };\n setTransform(fitTransform(content, viewportSize(viewport), DEFAULT_LIMITS, fit));\n }, [contentWidth, contentHeight, minScale, focusX, focusY]);\n const zoomAt = useCallback((point: { x: number; y: number }, factor: number) => {\n fitted.current = undefined;\n setTransform((current) => zoomAround(current, point, factor));\n }, []);\n const zoomAtCentre = (factor: number) => {\n const viewport = viewportRef.current;\n if (!viewport) return;\n const { width, height } = viewportSize(viewport);\n zoomAt({ x: width / 2, y: height / 2 }, factor);\n };\n const { panning, handlers } = useDragPan((dx, dy) => {\n fitted.current = undefined;\n setTransform((current) => ({ ...current, x: current.x + dx, y: current.y + dy }));\n });\n useViewportResize(viewportRef, enabled, refit);\n useWheelZoom(viewportRef, enabled, zoomAt);\n const hold = (fit: \"opening\" | \"everything\") => () => {\n fitted.current = fit;\n refit();\n };\n\n return {\n viewportRef,\n contentRef,\n handlers: enabled ? handlers : {},\n transform,\n panning,\n zoomIn: () => zoomAtCentre(BUTTON_ZOOM_FACTOR),\n zoomOut: () => zoomAtCentre(1 / BUTTON_ZOOM_FACTOR),\n fit: hold(\"everything\"),\n reset: hold(\"opening\"),\n };\n}\n"],"names":["useEffect","useState","useRef","useCallback"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-pan-zoom.cjs","sources":["../../src/data/use-pan-zoom.ts"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type PointerEvent as ReactPointerEvent,\n type RefObject,\n} from \"react\";\n\nexport interface PanZoomTransform {\n /** Translation of the content's top-left corner inside the viewport, in px. */\n x: number;\n y: number;\n scale: number;\n}\n\nexport interface PanZoomSize {\n width: number;\n height: number;\n}\n\nexport interface PanZoomLimits {\n minScale: number;\n maxScale: number;\n}\n\nconst DEFAULT_LIMITS: PanZoomLimits = { minScale: 0.2, maxScale: 4 };\nconst BUTTON_ZOOM_FACTOR = 1.25;\n/** A pinch sends small ctrl-wheel deltas: this rate keeps it tracking the fingers. */\nconst PINCH_ZOOM_RATE = 0.01;\n/** A mouse wheel notch is about 100px of delta; this rate makes one notch a button step. */\nconst WHEEL_NOTCH_PX = 100;\nconst WHEEL_ZOOM_RATE = Math.log(BUTTON_ZOOM_FACTOR) / WHEEL_NOTCH_PX;\nconst LINE_PX = 16;\nconst DOM_DELTA_LINE = 1;\nconst DOM_DELTA_PAGE = 2;\n/** Air kept between overflowing content and the viewport edge when fitting, in content px. */\nconst OVERFLOW_MARGIN = 8;\n/** Pointer travel in px before a press becomes a pan rather than a click. */\nconst DRAG_THRESHOLD = 4;\n\n/** Scales by `factor`, clamped to `limits`, keeping the content under `point` (viewport px) where it is. */\nexport function zoomAround(\n transform: PanZoomTransform,\n point: { x: number; y: number },\n factor: number,\n limits: PanZoomLimits = DEFAULT_LIMITS,\n): PanZoomTransform {\n const scale = Math.min(limits.maxScale, Math.max(limits.minScale, transform.scale * factor));\n const ratio = scale / transform.scale;\n return {\n x: point.x - (point.x - transform.x) * ratio,\n y: point.y - (point.y - transform.y) * ratio,\n scale,\n };\n}\n\nexport interface FitOptions {\n /** The smallest scale the fit shrinks to. Content too large for it overflows the viewport. */\n minScale?: number;\n /** The content point an overflowing axis is centred on. Defaults to the content's centre. */\n focus?: { x: number; y: number };\n}\n\n/** Offset of one axis: centred when the content fits, else centred on `focus` without showing past either edge. */\nfunction fitOffset(viewport: number, content: number, focus: number, scale: number): number {\n const slack = viewport - content * scale;\n return slack >= 0 ? slack / 2 : Math.min(0, Math.max(slack, viewport / 2 - focus * scale));\n}\n\n/**\n * The transform that shows all of `content` centred in `viewport`. Content is\n * only ever shrunk to fit, never enlarged past its natural size. With\n * `fit.minScale` it is not shrunk past that either: it then overflows, centred\n * on `fit.focus`, and the rest is reached by panning. An unmeasured\n * (zero-sized) viewport yields the identity transform.\n */\nexport function fitTransform(\n content: PanZoomSize,\n viewport: PanZoomSize,\n limits: PanZoomLimits = DEFAULT_LIMITS,\n fit: FitOptions = {},\n): PanZoomTransform {\n if (viewport.width <= 0 || viewport.height <= 0 || content.width <= 0 || content.height <= 0) {\n return { x: 0, y: 0, scale: 1 };\n }\n const whole = Math.min(1, viewport.width / content.width, viewport.height / content.height);\n const scale = Math.max(limits.minScale, Math.min(1, fit.minScale ?? 0), whole);\n const focus = fit.focus ?? { x: content.width / 2, y: content.height / 2 };\n return {\n x: fitOffset(viewport.width, content.width, focus.x, scale),\n y: fitOffset(viewport.height, content.height, focus.y, scale),\n scale,\n };\n}\n\nexport interface UsePanZoomOptions {\n /** When false the hook is inert: no listeners, identity transform. */\n enabled: boolean;\n /** Natural (unscaled) size of the content being panned and zoomed. */\n contentWidth: number;\n contentHeight: number;\n /** How the content opens, and what `reset()` returns to. `fit()` ignores it and shows everything. */\n opening?: FitOptions;\n /** What a plain wheel does; defaults to \"modifier\". See `WheelMode`. */\n wheel?: WheelMode;\n}\n\nexport interface PanZoomViewportHandlers {\n onPointerDown: (event: ReactPointerEvent<HTMLDivElement>) => void;\n onPointerMove: (event: ReactPointerEvent<HTMLDivElement>) => void;\n onPointerUp: (event: ReactPointerEvent<HTMLDivElement>) => void;\n onPointerCancel: (event: ReactPointerEvent<HTMLDivElement>) => void;\n}\n\nexport interface PanZoom {\n /** Attach to the clipping viewport element. */\n viewportRef: RefObject<HTMLDivElement | null>;\n /** Attach to the content element, so anything overflowing its box is fitted too. */\n contentRef: RefObject<HTMLDivElement | null>;\n /** Spread onto the viewport element; empty when disabled. */\n handlers: Partial<PanZoomViewportHandlers>;\n /** Apply to the content as `translate(x, y) scale(scale)` with a top-left transform origin. */\n transform: PanZoomTransform;\n panning: boolean;\n zoomIn: () => void;\n zoomOut: () => void;\n /** Shows everything, however small. */\n fit: () => void;\n /** Returns to how the content opened: see `UsePanZoomOptions.opening`. */\n reset: () => void;\n}\n\ntype ViewportRef = RefObject<HTMLDivElement | null>;\n\nfunction viewportSize(element: HTMLElement): PanZoomSize {\n return { width: element.clientWidth, height: element.clientHeight };\n}\n\n/**\n * The content's size, counting children that overflow its box to the right or\n * below (a label hanging off its edge): they extend its scroll size, which a\n * transform leaves untouched.\n */\nfunction overflowedSize(element: HTMLElement | null, natural: PanZoomSize): PanZoomSize {\n const overflowed = (size: number, scrolled: number | undefined) =>\n scrolled !== undefined && scrolled > size ? scrolled + OVERFLOW_MARGIN : size;\n return {\n width: overflowed(natural.width, element?.scrollWidth),\n height: overflowed(natural.height, element?.scrollHeight),\n };\n}\n\n/** Runs `refit` now and whenever the viewport is resized. */\nfunction useViewportResize(viewportRef: ViewportRef, enabled: boolean, refit: () => void): void {\n useEffect(() => {\n const viewport = viewportRef.current;\n if (!enabled || !viewport) return;\n refit();\n if (typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver(refit);\n observer.observe(viewport);\n return () => observer.disconnect();\n }, [viewportRef, enabled, refit]);\n}\n\n/**\n * What a plain (unmodified) wheel does over the viewport: \"modifier\" leaves it to scroll the page\n * and zooms only on ctrl/meta + wheel or a pinch; \"zoom\" zooms on every wheel.\n */\nexport type WheelMode = \"modifier\" | \"zoom\";\n\ntype WheelInput = Pick<WheelEvent, \"deltaY\" | \"deltaMode\" | \"ctrlKey\" | \"metaKey\">;\n\n/**\n * The scale factor a wheel event zooms by, or undefined when `mode` leaves it to the page. The\n * delta is read in pixels whatever its unit, and a plain wheel notch is capped at one button step.\n */\nexport function wheelZoomFactor(event: WheelInput, mode: WheelMode, viewportHeight: number): number | undefined {\n const modified = event.ctrlKey || event.metaKey;\n if (!modified && mode === \"modifier\") return undefined;\n const unit = event.deltaMode === DOM_DELTA_LINE ? LINE_PX : event.deltaMode === DOM_DELTA_PAGE ? viewportHeight : 1;\n const pixels = -event.deltaY * unit;\n if (modified) return Math.exp(pixels * PINCH_ZOOM_RATE);\n const step = Math.log(BUTTON_ZOOM_FACTOR);\n return Math.exp(Math.min(step, Math.max(-step, pixels * WHEEL_ZOOM_RATE)));\n}\n\nfunction useWheelZoom(\n viewportRef: ViewportRef,\n enabled: boolean,\n mode: WheelMode,\n zoomAt: (point: { x: number; y: number }, factor: number) => void,\n): void {\n useEffect(() => {\n const viewport = viewportRef.current;\n if (!enabled || !viewport) return;\n const onWheel = (event: WheelEvent) => {\n const factor = wheelZoomFactor(event, mode, viewport.clientHeight);\n if (factor === undefined) return;\n event.preventDefault();\n const rect = viewport.getBoundingClientRect();\n zoomAt({ x: event.clientX - rect.left, y: event.clientY - rect.top }, factor);\n };\n // React registers wheel listeners as passive, which cannot preventDefault the page zoom or scroll.\n viewport.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => viewport.removeEventListener(\"wheel\", onWheel);\n }, [viewportRef, enabled, mode, zoomAt]);\n}\n\nfunction useDragPan(panBy: (dx: number, dy: number) => void): {\n panning: boolean;\n handlers: PanZoomViewportHandlers;\n} {\n const [panning, setPanning] = useState(false);\n const drag = useRef<{ pointerId: number; x: number; y: number; moved: boolean } | null>(null);\n const endDrag = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (!drag.current || drag.current.pointerId !== event.pointerId) return;\n drag.current = null;\n setPanning(false);\n };\n return {\n panning,\n handlers: {\n onPointerDown: (event) => {\n if (event.button !== 0) return;\n drag.current = { pointerId: event.pointerId, x: event.clientX, y: event.clientY, moved: false };\n },\n onPointerMove: (event) => {\n const active = drag.current;\n if (!active || active.pointerId !== event.pointerId) return;\n const dx = event.clientX - active.x;\n const dy = event.clientY - active.y;\n if (!active.moved) {\n if (Math.hypot(dx, dy) < DRAG_THRESHOLD) return;\n // Capturing only once a drag is under way leaves plain clicks on nodes and edges alone,\n // and retargets the click that ends a drag to the viewport so it selects nothing.\n event.currentTarget.setPointerCapture?.(event.pointerId);\n setPanning(true);\n }\n drag.current = { pointerId: active.pointerId, x: event.clientX, y: event.clientY, moved: true };\n panBy(dx, dy);\n },\n onPointerUp: endDrag,\n onPointerCancel: endDrag,\n },\n };\n}\n\n/**\n * Pan and zoom for a fixed-size content box inside a clipping viewport:\n * ctrl/meta + wheel (which is also what a trackpad pinch sends) — or any wheel, with `wheel: \"zoom\"` — zooms around\n * the pointer, dragging pans, and `zoomIn`/`zoomOut`/`fit` back a control\n * cluster. The content stays fitted to the viewport — across content and\n * viewport size changes — until the user pans or zooms, and again after\n * `fit()` or `reset()`.\n */\nexport function usePanZoom({ enabled, contentWidth, contentHeight, opening, wheel = \"modifier\" }: UsePanZoomOptions): PanZoom {\n const viewportRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [transform, setTransform] = useState<PanZoomTransform>({ x: 0, y: 0, scale: 1 });\n // Which fit the content is held to, until the user pans or zooms.\n const fitted = useRef<\"opening\" | \"everything\" | undefined>(\"opening\");\n const { minScale, focus } = opening ?? {};\n const [focusX, focusY] = [focus?.x, focus?.y];\n\n const refit = useCallback(() => {\n const viewport = viewportRef.current;\n if (!viewport || !fitted.current) return;\n const content = overflowedSize(contentRef.current, { width: contentWidth, height: contentHeight });\n const fit: FitOptions =\n fitted.current === \"everything\"\n ? {}\n : {\n ...(minScale !== undefined ? { minScale } : {}),\n ...(focusX !== undefined && focusY !== undefined ? { focus: { x: focusX, y: focusY } } : {}),\n };\n setTransform(fitTransform(content, viewportSize(viewport), DEFAULT_LIMITS, fit));\n }, [contentWidth, contentHeight, minScale, focusX, focusY]);\n const zoomAt = useCallback((point: { x: number; y: number }, factor: number) => {\n fitted.current = undefined;\n setTransform((current) => zoomAround(current, point, factor));\n }, []);\n const zoomAtCentre = (factor: number) => {\n const viewport = viewportRef.current;\n if (!viewport) return;\n const { width, height } = viewportSize(viewport);\n zoomAt({ x: width / 2, y: height / 2 }, factor);\n };\n const { panning, handlers } = useDragPan((dx, dy) => {\n fitted.current = undefined;\n setTransform((current) => ({ ...current, x: current.x + dx, y: current.y + dy }));\n });\n useViewportResize(viewportRef, enabled, refit);\n useWheelZoom(viewportRef, enabled, wheel, zoomAt);\n const hold = (fit: \"opening\" | \"everything\") => () => {\n fitted.current = fit;\n refit();\n };\n\n return {\n viewportRef,\n contentRef,\n handlers: enabled ? handlers : {},\n transform,\n panning,\n zoomIn: () => zoomAtCentre(BUTTON_ZOOM_FACTOR),\n zoomOut: () => zoomAtCentre(1 / BUTTON_ZOOM_FACTOR),\n fit: hold(\"everything\"),\n reset: hold(\"opening\"),\n };\n}\n"],"names":["useEffect","useState","useRef","useCallback"],"mappings":"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"}
|
|
@@ -43,6 +43,8 @@ export interface UsePanZoomOptions {
|
|
|
43
43
|
contentHeight: number;
|
|
44
44
|
/** How the content opens, and what `reset()` returns to. `fit()` ignores it and shows everything. */
|
|
45
45
|
opening?: FitOptions;
|
|
46
|
+
/** What a plain wheel does; defaults to "modifier". See `WheelMode`. */
|
|
47
|
+
wheel?: WheelMode;
|
|
46
48
|
}
|
|
47
49
|
export interface PanZoomViewportHandlers {
|
|
48
50
|
onPointerDown: (event: ReactPointerEvent<HTMLDivElement>) => void;
|
|
@@ -67,13 +69,25 @@ export interface PanZoom {
|
|
|
67
69
|
/** Returns to how the content opened: see `UsePanZoomOptions.opening`. */
|
|
68
70
|
reset: () => void;
|
|
69
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* What a plain (unmodified) wheel does over the viewport: "modifier" leaves it to scroll the page
|
|
74
|
+
* and zooms only on ctrl/meta + wheel or a pinch; "zoom" zooms on every wheel.
|
|
75
|
+
*/
|
|
76
|
+
export type WheelMode = "modifier" | "zoom";
|
|
77
|
+
type WheelInput = Pick<WheelEvent, "deltaY" | "deltaMode" | "ctrlKey" | "metaKey">;
|
|
78
|
+
/**
|
|
79
|
+
* The scale factor a wheel event zooms by, or undefined when `mode` leaves it to the page. The
|
|
80
|
+
* delta is read in pixels whatever its unit, and a plain wheel notch is capped at one button step.
|
|
81
|
+
*/
|
|
82
|
+
export declare function wheelZoomFactor(event: WheelInput, mode: WheelMode, viewportHeight: number): number | undefined;
|
|
70
83
|
/**
|
|
71
84
|
* Pan and zoom for a fixed-size content box inside a clipping viewport:
|
|
72
|
-
* ctrl/meta + wheel (which is also what a trackpad pinch sends) zooms around
|
|
85
|
+
* ctrl/meta + wheel (which is also what a trackpad pinch sends) — or any wheel, with `wheel: "zoom"` — zooms around
|
|
73
86
|
* the pointer, dragging pans, and `zoomIn`/`zoomOut`/`fit` back a control
|
|
74
87
|
* cluster. The content stays fitted to the viewport — across content and
|
|
75
88
|
* viewport size changes — until the user pans or zooms, and again after
|
|
76
89
|
* `fit()` or `reset()`.
|
|
77
90
|
*/
|
|
78
|
-
export declare function usePanZoom({ enabled, contentWidth, contentHeight, opening }: UsePanZoomOptions): PanZoom;
|
|
91
|
+
export declare function usePanZoom({ enabled, contentWidth, contentHeight, opening, wheel }: UsePanZoomOptions): PanZoom;
|
|
92
|
+
export {};
|
|
79
93
|
//# sourceMappingURL=use-pan-zoom.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-pan-zoom.d.ts","sourceRoot":"","sources":["../../src/data/use-pan-zoom.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,YAAY,IAAI,iBAAiB,EACtC,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,MAAM,WAAW,gBAAgB;IAC/B,+EAA+E;IAC/E,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"use-pan-zoom.d.ts","sourceRoot":"","sources":["../../src/data/use-pan-zoom.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { useRef, useState, useCallback, useEffect } from "react";
|
|
2
2
|
const DEFAULT_LIMITS = { minScale: 0.2, maxScale: 4 };
|
|
3
3
|
const BUTTON_ZOOM_FACTOR = 1.25;
|
|
4
|
-
const
|
|
4
|
+
const PINCH_ZOOM_RATE = 0.01;
|
|
5
|
+
const WHEEL_NOTCH_PX = 100;
|
|
6
|
+
const WHEEL_ZOOM_RATE = Math.log(BUTTON_ZOOM_FACTOR) / WHEEL_NOTCH_PX;
|
|
7
|
+
const LINE_PX = 16;
|
|
8
|
+
const DOM_DELTA_LINE = 1;
|
|
9
|
+
const DOM_DELTA_PAGE = 2;
|
|
5
10
|
const OVERFLOW_MARGIN = 8;
|
|
6
11
|
const DRAG_THRESHOLD = 4;
|
|
7
12
|
function zoomAround(transform, point, factor, limits = DEFAULT_LIMITS) {
|
|
@@ -51,22 +56,29 @@ function useViewportResize(viewportRef, enabled, refit) {
|
|
|
51
56
|
return () => observer.disconnect();
|
|
52
57
|
}, [viewportRef, enabled, refit]);
|
|
53
58
|
}
|
|
54
|
-
function
|
|
59
|
+
function wheelZoomFactor(event, mode, viewportHeight) {
|
|
60
|
+
const modified = event.ctrlKey || event.metaKey;
|
|
61
|
+
if (!modified && mode === "modifier") return void 0;
|
|
62
|
+
const unit = event.deltaMode === DOM_DELTA_LINE ? LINE_PX : event.deltaMode === DOM_DELTA_PAGE ? viewportHeight : 1;
|
|
63
|
+
const pixels = -event.deltaY * unit;
|
|
64
|
+
if (modified) return Math.exp(pixels * PINCH_ZOOM_RATE);
|
|
65
|
+
const step = Math.log(BUTTON_ZOOM_FACTOR);
|
|
66
|
+
return Math.exp(Math.min(step, Math.max(-step, pixels * WHEEL_ZOOM_RATE)));
|
|
67
|
+
}
|
|
68
|
+
function useWheelZoom(viewportRef, enabled, mode, zoomAt) {
|
|
55
69
|
useEffect(() => {
|
|
56
70
|
const viewport = viewportRef.current;
|
|
57
71
|
if (!enabled || !viewport) return;
|
|
58
72
|
const onWheel = (event) => {
|
|
59
|
-
|
|
73
|
+
const factor = wheelZoomFactor(event, mode, viewport.clientHeight);
|
|
74
|
+
if (factor === void 0) return;
|
|
60
75
|
event.preventDefault();
|
|
61
76
|
const rect = viewport.getBoundingClientRect();
|
|
62
|
-
zoomAt(
|
|
63
|
-
{ x: event.clientX - rect.left, y: event.clientY - rect.top },
|
|
64
|
-
Math.exp(-event.deltaY * WHEEL_ZOOM_RATE)
|
|
65
|
-
);
|
|
77
|
+
zoomAt({ x: event.clientX - rect.left, y: event.clientY - rect.top }, factor);
|
|
66
78
|
};
|
|
67
79
|
viewport.addEventListener("wheel", onWheel, { passive: false });
|
|
68
80
|
return () => viewport.removeEventListener("wheel", onWheel);
|
|
69
|
-
}, [viewportRef, enabled, zoomAt]);
|
|
81
|
+
}, [viewportRef, enabled, mode, zoomAt]);
|
|
70
82
|
}
|
|
71
83
|
function useDragPan(panBy) {
|
|
72
84
|
const [panning, setPanning] = useState(false);
|
|
@@ -102,7 +114,7 @@ function useDragPan(panBy) {
|
|
|
102
114
|
}
|
|
103
115
|
};
|
|
104
116
|
}
|
|
105
|
-
function usePanZoom({ enabled, contentWidth, contentHeight, opening }) {
|
|
117
|
+
function usePanZoom({ enabled, contentWidth, contentHeight, opening, wheel = "modifier" }) {
|
|
106
118
|
const viewportRef = useRef(null);
|
|
107
119
|
const contentRef = useRef(null);
|
|
108
120
|
const [transform, setTransform] = useState({ x: 0, y: 0, scale: 1 });
|
|
@@ -134,7 +146,7 @@ function usePanZoom({ enabled, contentWidth, contentHeight, opening }) {
|
|
|
134
146
|
setTransform((current) => ({ ...current, x: current.x + dx, y: current.y + dy }));
|
|
135
147
|
});
|
|
136
148
|
useViewportResize(viewportRef, enabled, refit);
|
|
137
|
-
useWheelZoom(viewportRef, enabled, zoomAt);
|
|
149
|
+
useWheelZoom(viewportRef, enabled, wheel, zoomAt);
|
|
138
150
|
const hold = (fit) => () => {
|
|
139
151
|
fitted.current = fit;
|
|
140
152
|
refit();
|
|
@@ -154,6 +166,7 @@ function usePanZoom({ enabled, contentWidth, contentHeight, opening }) {
|
|
|
154
166
|
export {
|
|
155
167
|
fitTransform,
|
|
156
168
|
usePanZoom,
|
|
169
|
+
wheelZoomFactor,
|
|
157
170
|
zoomAround
|
|
158
171
|
};
|
|
159
172
|
//# sourceMappingURL=use-pan-zoom.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-pan-zoom.js","sources":["../../src/data/use-pan-zoom.ts"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type PointerEvent as ReactPointerEvent,\n type RefObject,\n} from \"react\";\n\nexport interface PanZoomTransform {\n /** Translation of the content's top-left corner inside the viewport, in px. */\n x: number;\n y: number;\n scale: number;\n}\n\nexport interface PanZoomSize {\n width: number;\n height: number;\n}\n\nexport interface PanZoomLimits {\n minScale: number;\n maxScale: number;\n}\n\nconst DEFAULT_LIMITS: PanZoomLimits = { minScale: 0.2, maxScale: 4 };\nconst BUTTON_ZOOM_FACTOR = 1.25;\nconst WHEEL_ZOOM_RATE = 0.01;\n/** Air kept between overflowing content and the viewport edge when fitting, in content px. */\nconst OVERFLOW_MARGIN = 8;\n/** Pointer travel in px before a press becomes a pan rather than a click. */\nconst DRAG_THRESHOLD = 4;\n\n/** Scales by `factor`, clamped to `limits`, keeping the content under `point` (viewport px) where it is. */\nexport function zoomAround(\n transform: PanZoomTransform,\n point: { x: number; y: number },\n factor: number,\n limits: PanZoomLimits = DEFAULT_LIMITS,\n): PanZoomTransform {\n const scale = Math.min(limits.maxScale, Math.max(limits.minScale, transform.scale * factor));\n const ratio = scale / transform.scale;\n return {\n x: point.x - (point.x - transform.x) * ratio,\n y: point.y - (point.y - transform.y) * ratio,\n scale,\n };\n}\n\nexport interface FitOptions {\n /** The smallest scale the fit shrinks to. Content too large for it overflows the viewport. */\n minScale?: number;\n /** The content point an overflowing axis is centred on. Defaults to the content's centre. */\n focus?: { x: number; y: number };\n}\n\n/** Offset of one axis: centred when the content fits, else centred on `focus` without showing past either edge. */\nfunction fitOffset(viewport: number, content: number, focus: number, scale: number): number {\n const slack = viewport - content * scale;\n return slack >= 0 ? slack / 2 : Math.min(0, Math.max(slack, viewport / 2 - focus * scale));\n}\n\n/**\n * The transform that shows all of `content` centred in `viewport`. Content is\n * only ever shrunk to fit, never enlarged past its natural size. With\n * `fit.minScale` it is not shrunk past that either: it then overflows, centred\n * on `fit.focus`, and the rest is reached by panning. An unmeasured\n * (zero-sized) viewport yields the identity transform.\n */\nexport function fitTransform(\n content: PanZoomSize,\n viewport: PanZoomSize,\n limits: PanZoomLimits = DEFAULT_LIMITS,\n fit: FitOptions = {},\n): PanZoomTransform {\n if (viewport.width <= 0 || viewport.height <= 0 || content.width <= 0 || content.height <= 0) {\n return { x: 0, y: 0, scale: 1 };\n }\n const whole = Math.min(1, viewport.width / content.width, viewport.height / content.height);\n const scale = Math.max(limits.minScale, Math.min(1, fit.minScale ?? 0), whole);\n const focus = fit.focus ?? { x: content.width / 2, y: content.height / 2 };\n return {\n x: fitOffset(viewport.width, content.width, focus.x, scale),\n y: fitOffset(viewport.height, content.height, focus.y, scale),\n scale,\n };\n}\n\nexport interface UsePanZoomOptions {\n /** When false the hook is inert: no listeners, identity transform. */\n enabled: boolean;\n /** Natural (unscaled) size of the content being panned and zoomed. */\n contentWidth: number;\n contentHeight: number;\n /** How the content opens, and what `reset()` returns to. `fit()` ignores it and shows everything. */\n opening?: FitOptions;\n}\n\nexport interface PanZoomViewportHandlers {\n onPointerDown: (event: ReactPointerEvent<HTMLDivElement>) => void;\n onPointerMove: (event: ReactPointerEvent<HTMLDivElement>) => void;\n onPointerUp: (event: ReactPointerEvent<HTMLDivElement>) => void;\n onPointerCancel: (event: ReactPointerEvent<HTMLDivElement>) => void;\n}\n\nexport interface PanZoom {\n /** Attach to the clipping viewport element. */\n viewportRef: RefObject<HTMLDivElement | null>;\n /** Attach to the content element, so anything overflowing its box is fitted too. */\n contentRef: RefObject<HTMLDivElement | null>;\n /** Spread onto the viewport element; empty when disabled. */\n handlers: Partial<PanZoomViewportHandlers>;\n /** Apply to the content as `translate(x, y) scale(scale)` with a top-left transform origin. */\n transform: PanZoomTransform;\n panning: boolean;\n zoomIn: () => void;\n zoomOut: () => void;\n /** Shows everything, however small. */\n fit: () => void;\n /** Returns to how the content opened: see `UsePanZoomOptions.opening`. */\n reset: () => void;\n}\n\ntype ViewportRef = RefObject<HTMLDivElement | null>;\n\nfunction viewportSize(element: HTMLElement): PanZoomSize {\n return { width: element.clientWidth, height: element.clientHeight };\n}\n\n/**\n * The content's size, counting children that overflow its box to the right or\n * below (a label hanging off its edge): they extend its scroll size, which a\n * transform leaves untouched.\n */\nfunction overflowedSize(element: HTMLElement | null, natural: PanZoomSize): PanZoomSize {\n const overflowed = (size: number, scrolled: number | undefined) =>\n scrolled !== undefined && scrolled > size ? scrolled + OVERFLOW_MARGIN : size;\n return {\n width: overflowed(natural.width, element?.scrollWidth),\n height: overflowed(natural.height, element?.scrollHeight),\n };\n}\n\n/** Runs `refit` now and whenever the viewport is resized. */\nfunction useViewportResize(viewportRef: ViewportRef, enabled: boolean, refit: () => void): void {\n useEffect(() => {\n const viewport = viewportRef.current;\n if (!enabled || !viewport) return;\n refit();\n if (typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver(refit);\n observer.observe(viewport);\n return () => observer.disconnect();\n }, [viewportRef, enabled, refit]);\n}\n\nfunction useWheelZoom(\n viewportRef: ViewportRef,\n enabled: boolean,\n zoomAt: (point: { x: number; y: number }, factor: number) => void,\n): void {\n useEffect(() => {\n const viewport = viewportRef.current;\n if (!enabled || !viewport) return;\n const onWheel = (event: WheelEvent) => {\n if (!event.ctrlKey && !event.metaKey) return;\n event.preventDefault();\n const rect = viewport.getBoundingClientRect();\n zoomAt(\n { x: event.clientX - rect.left, y: event.clientY - rect.top },\n Math.exp(-event.deltaY * WHEEL_ZOOM_RATE),\n );\n };\n // React registers wheel listeners as passive, which cannot preventDefault the page zoom.\n viewport.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => viewport.removeEventListener(\"wheel\", onWheel);\n }, [viewportRef, enabled, zoomAt]);\n}\n\nfunction useDragPan(panBy: (dx: number, dy: number) => void): {\n panning: boolean;\n handlers: PanZoomViewportHandlers;\n} {\n const [panning, setPanning] = useState(false);\n const drag = useRef<{ pointerId: number; x: number; y: number; moved: boolean } | null>(null);\n const endDrag = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (!drag.current || drag.current.pointerId !== event.pointerId) return;\n drag.current = null;\n setPanning(false);\n };\n return {\n panning,\n handlers: {\n onPointerDown: (event) => {\n if (event.button !== 0) return;\n drag.current = { pointerId: event.pointerId, x: event.clientX, y: event.clientY, moved: false };\n },\n onPointerMove: (event) => {\n const active = drag.current;\n if (!active || active.pointerId !== event.pointerId) return;\n const dx = event.clientX - active.x;\n const dy = event.clientY - active.y;\n if (!active.moved) {\n if (Math.hypot(dx, dy) < DRAG_THRESHOLD) return;\n // Capturing only once a drag is under way leaves plain clicks on nodes and edges alone,\n // and retargets the click that ends a drag to the viewport so it selects nothing.\n event.currentTarget.setPointerCapture?.(event.pointerId);\n setPanning(true);\n }\n drag.current = { pointerId: active.pointerId, x: event.clientX, y: event.clientY, moved: true };\n panBy(dx, dy);\n },\n onPointerUp: endDrag,\n onPointerCancel: endDrag,\n },\n };\n}\n\n/**\n * Pan and zoom for a fixed-size content box inside a clipping viewport:\n * ctrl/meta + wheel (which is also what a trackpad pinch sends) zooms around\n * the pointer, dragging pans, and `zoomIn`/`zoomOut`/`fit` back a control\n * cluster. The content stays fitted to the viewport — across content and\n * viewport size changes — until the user pans or zooms, and again after\n * `fit()` or `reset()`.\n */\nexport function usePanZoom({ enabled, contentWidth, contentHeight, opening }: UsePanZoomOptions): PanZoom {\n const viewportRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [transform, setTransform] = useState<PanZoomTransform>({ x: 0, y: 0, scale: 1 });\n // Which fit the content is held to, until the user pans or zooms.\n const fitted = useRef<\"opening\" | \"everything\" | undefined>(\"opening\");\n const { minScale, focus } = opening ?? {};\n const [focusX, focusY] = [focus?.x, focus?.y];\n\n const refit = useCallback(() => {\n const viewport = viewportRef.current;\n if (!viewport || !fitted.current) return;\n const content = overflowedSize(contentRef.current, { width: contentWidth, height: contentHeight });\n const fit: FitOptions =\n fitted.current === \"everything\"\n ? {}\n : {\n ...(minScale !== undefined ? { minScale } : {}),\n ...(focusX !== undefined && focusY !== undefined ? { focus: { x: focusX, y: focusY } } : {}),\n };\n setTransform(fitTransform(content, viewportSize(viewport), DEFAULT_LIMITS, fit));\n }, [contentWidth, contentHeight, minScale, focusX, focusY]);\n const zoomAt = useCallback((point: { x: number; y: number }, factor: number) => {\n fitted.current = undefined;\n setTransform((current) => zoomAround(current, point, factor));\n }, []);\n const zoomAtCentre = (factor: number) => {\n const viewport = viewportRef.current;\n if (!viewport) return;\n const { width, height } = viewportSize(viewport);\n zoomAt({ x: width / 2, y: height / 2 }, factor);\n };\n const { panning, handlers } = useDragPan((dx, dy) => {\n fitted.current = undefined;\n setTransform((current) => ({ ...current, x: current.x + dx, y: current.y + dy }));\n });\n useViewportResize(viewportRef, enabled, refit);\n useWheelZoom(viewportRef, enabled, zoomAt);\n const hold = (fit: \"opening\" | \"everything\") => () => {\n fitted.current = fit;\n refit();\n };\n\n return {\n viewportRef,\n contentRef,\n handlers: enabled ? handlers : {},\n transform,\n panning,\n zoomIn: () => zoomAtCentre(BUTTON_ZOOM_FACTOR),\n zoomOut: () => zoomAtCentre(1 / BUTTON_ZOOM_FACTOR),\n fit: hold(\"everything\"),\n reset: hold(\"opening\"),\n };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-pan-zoom.js","sources":["../../src/data/use-pan-zoom.ts"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type PointerEvent as ReactPointerEvent,\n type RefObject,\n} from \"react\";\n\nexport interface PanZoomTransform {\n /** Translation of the content's top-left corner inside the viewport, in px. */\n x: number;\n y: number;\n scale: number;\n}\n\nexport interface PanZoomSize {\n width: number;\n height: number;\n}\n\nexport interface PanZoomLimits {\n minScale: number;\n maxScale: number;\n}\n\nconst DEFAULT_LIMITS: PanZoomLimits = { minScale: 0.2, maxScale: 4 };\nconst BUTTON_ZOOM_FACTOR = 1.25;\n/** A pinch sends small ctrl-wheel deltas: this rate keeps it tracking the fingers. */\nconst PINCH_ZOOM_RATE = 0.01;\n/** A mouse wheel notch is about 100px of delta; this rate makes one notch a button step. */\nconst WHEEL_NOTCH_PX = 100;\nconst WHEEL_ZOOM_RATE = Math.log(BUTTON_ZOOM_FACTOR) / WHEEL_NOTCH_PX;\nconst LINE_PX = 16;\nconst DOM_DELTA_LINE = 1;\nconst DOM_DELTA_PAGE = 2;\n/** Air kept between overflowing content and the viewport edge when fitting, in content px. */\nconst OVERFLOW_MARGIN = 8;\n/** Pointer travel in px before a press becomes a pan rather than a click. */\nconst DRAG_THRESHOLD = 4;\n\n/** Scales by `factor`, clamped to `limits`, keeping the content under `point` (viewport px) where it is. */\nexport function zoomAround(\n transform: PanZoomTransform,\n point: { x: number; y: number },\n factor: number,\n limits: PanZoomLimits = DEFAULT_LIMITS,\n): PanZoomTransform {\n const scale = Math.min(limits.maxScale, Math.max(limits.minScale, transform.scale * factor));\n const ratio = scale / transform.scale;\n return {\n x: point.x - (point.x - transform.x) * ratio,\n y: point.y - (point.y - transform.y) * ratio,\n scale,\n };\n}\n\nexport interface FitOptions {\n /** The smallest scale the fit shrinks to. Content too large for it overflows the viewport. */\n minScale?: number;\n /** The content point an overflowing axis is centred on. Defaults to the content's centre. */\n focus?: { x: number; y: number };\n}\n\n/** Offset of one axis: centred when the content fits, else centred on `focus` without showing past either edge. */\nfunction fitOffset(viewport: number, content: number, focus: number, scale: number): number {\n const slack = viewport - content * scale;\n return slack >= 0 ? slack / 2 : Math.min(0, Math.max(slack, viewport / 2 - focus * scale));\n}\n\n/**\n * The transform that shows all of `content` centred in `viewport`. Content is\n * only ever shrunk to fit, never enlarged past its natural size. With\n * `fit.minScale` it is not shrunk past that either: it then overflows, centred\n * on `fit.focus`, and the rest is reached by panning. An unmeasured\n * (zero-sized) viewport yields the identity transform.\n */\nexport function fitTransform(\n content: PanZoomSize,\n viewport: PanZoomSize,\n limits: PanZoomLimits = DEFAULT_LIMITS,\n fit: FitOptions = {},\n): PanZoomTransform {\n if (viewport.width <= 0 || viewport.height <= 0 || content.width <= 0 || content.height <= 0) {\n return { x: 0, y: 0, scale: 1 };\n }\n const whole = Math.min(1, viewport.width / content.width, viewport.height / content.height);\n const scale = Math.max(limits.minScale, Math.min(1, fit.minScale ?? 0), whole);\n const focus = fit.focus ?? { x: content.width / 2, y: content.height / 2 };\n return {\n x: fitOffset(viewport.width, content.width, focus.x, scale),\n y: fitOffset(viewport.height, content.height, focus.y, scale),\n scale,\n };\n}\n\nexport interface UsePanZoomOptions {\n /** When false the hook is inert: no listeners, identity transform. */\n enabled: boolean;\n /** Natural (unscaled) size of the content being panned and zoomed. */\n contentWidth: number;\n contentHeight: number;\n /** How the content opens, and what `reset()` returns to. `fit()` ignores it and shows everything. */\n opening?: FitOptions;\n /** What a plain wheel does; defaults to \"modifier\". See `WheelMode`. */\n wheel?: WheelMode;\n}\n\nexport interface PanZoomViewportHandlers {\n onPointerDown: (event: ReactPointerEvent<HTMLDivElement>) => void;\n onPointerMove: (event: ReactPointerEvent<HTMLDivElement>) => void;\n onPointerUp: (event: ReactPointerEvent<HTMLDivElement>) => void;\n onPointerCancel: (event: ReactPointerEvent<HTMLDivElement>) => void;\n}\n\nexport interface PanZoom {\n /** Attach to the clipping viewport element. */\n viewportRef: RefObject<HTMLDivElement | null>;\n /** Attach to the content element, so anything overflowing its box is fitted too. */\n contentRef: RefObject<HTMLDivElement | null>;\n /** Spread onto the viewport element; empty when disabled. */\n handlers: Partial<PanZoomViewportHandlers>;\n /** Apply to the content as `translate(x, y) scale(scale)` with a top-left transform origin. */\n transform: PanZoomTransform;\n panning: boolean;\n zoomIn: () => void;\n zoomOut: () => void;\n /** Shows everything, however small. */\n fit: () => void;\n /** Returns to how the content opened: see `UsePanZoomOptions.opening`. */\n reset: () => void;\n}\n\ntype ViewportRef = RefObject<HTMLDivElement | null>;\n\nfunction viewportSize(element: HTMLElement): PanZoomSize {\n return { width: element.clientWidth, height: element.clientHeight };\n}\n\n/**\n * The content's size, counting children that overflow its box to the right or\n * below (a label hanging off its edge): they extend its scroll size, which a\n * transform leaves untouched.\n */\nfunction overflowedSize(element: HTMLElement | null, natural: PanZoomSize): PanZoomSize {\n const overflowed = (size: number, scrolled: number | undefined) =>\n scrolled !== undefined && scrolled > size ? scrolled + OVERFLOW_MARGIN : size;\n return {\n width: overflowed(natural.width, element?.scrollWidth),\n height: overflowed(natural.height, element?.scrollHeight),\n };\n}\n\n/** Runs `refit` now and whenever the viewport is resized. */\nfunction useViewportResize(viewportRef: ViewportRef, enabled: boolean, refit: () => void): void {\n useEffect(() => {\n const viewport = viewportRef.current;\n if (!enabled || !viewport) return;\n refit();\n if (typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver(refit);\n observer.observe(viewport);\n return () => observer.disconnect();\n }, [viewportRef, enabled, refit]);\n}\n\n/**\n * What a plain (unmodified) wheel does over the viewport: \"modifier\" leaves it to scroll the page\n * and zooms only on ctrl/meta + wheel or a pinch; \"zoom\" zooms on every wheel.\n */\nexport type WheelMode = \"modifier\" | \"zoom\";\n\ntype WheelInput = Pick<WheelEvent, \"deltaY\" | \"deltaMode\" | \"ctrlKey\" | \"metaKey\">;\n\n/**\n * The scale factor a wheel event zooms by, or undefined when `mode` leaves it to the page. The\n * delta is read in pixels whatever its unit, and a plain wheel notch is capped at one button step.\n */\nexport function wheelZoomFactor(event: WheelInput, mode: WheelMode, viewportHeight: number): number | undefined {\n const modified = event.ctrlKey || event.metaKey;\n if (!modified && mode === \"modifier\") return undefined;\n const unit = event.deltaMode === DOM_DELTA_LINE ? LINE_PX : event.deltaMode === DOM_DELTA_PAGE ? viewportHeight : 1;\n const pixels = -event.deltaY * unit;\n if (modified) return Math.exp(pixels * PINCH_ZOOM_RATE);\n const step = Math.log(BUTTON_ZOOM_FACTOR);\n return Math.exp(Math.min(step, Math.max(-step, pixels * WHEEL_ZOOM_RATE)));\n}\n\nfunction useWheelZoom(\n viewportRef: ViewportRef,\n enabled: boolean,\n mode: WheelMode,\n zoomAt: (point: { x: number; y: number }, factor: number) => void,\n): void {\n useEffect(() => {\n const viewport = viewportRef.current;\n if (!enabled || !viewport) return;\n const onWheel = (event: WheelEvent) => {\n const factor = wheelZoomFactor(event, mode, viewport.clientHeight);\n if (factor === undefined) return;\n event.preventDefault();\n const rect = viewport.getBoundingClientRect();\n zoomAt({ x: event.clientX - rect.left, y: event.clientY - rect.top }, factor);\n };\n // React registers wheel listeners as passive, which cannot preventDefault the page zoom or scroll.\n viewport.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => viewport.removeEventListener(\"wheel\", onWheel);\n }, [viewportRef, enabled, mode, zoomAt]);\n}\n\nfunction useDragPan(panBy: (dx: number, dy: number) => void): {\n panning: boolean;\n handlers: PanZoomViewportHandlers;\n} {\n const [panning, setPanning] = useState(false);\n const drag = useRef<{ pointerId: number; x: number; y: number; moved: boolean } | null>(null);\n const endDrag = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (!drag.current || drag.current.pointerId !== event.pointerId) return;\n drag.current = null;\n setPanning(false);\n };\n return {\n panning,\n handlers: {\n onPointerDown: (event) => {\n if (event.button !== 0) return;\n drag.current = { pointerId: event.pointerId, x: event.clientX, y: event.clientY, moved: false };\n },\n onPointerMove: (event) => {\n const active = drag.current;\n if (!active || active.pointerId !== event.pointerId) return;\n const dx = event.clientX - active.x;\n const dy = event.clientY - active.y;\n if (!active.moved) {\n if (Math.hypot(dx, dy) < DRAG_THRESHOLD) return;\n // Capturing only once a drag is under way leaves plain clicks on nodes and edges alone,\n // and retargets the click that ends a drag to the viewport so it selects nothing.\n event.currentTarget.setPointerCapture?.(event.pointerId);\n setPanning(true);\n }\n drag.current = { pointerId: active.pointerId, x: event.clientX, y: event.clientY, moved: true };\n panBy(dx, dy);\n },\n onPointerUp: endDrag,\n onPointerCancel: endDrag,\n },\n };\n}\n\n/**\n * Pan and zoom for a fixed-size content box inside a clipping viewport:\n * ctrl/meta + wheel (which is also what a trackpad pinch sends) — or any wheel, with `wheel: \"zoom\"` — zooms around\n * the pointer, dragging pans, and `zoomIn`/`zoomOut`/`fit` back a control\n * cluster. The content stays fitted to the viewport — across content and\n * viewport size changes — until the user pans or zooms, and again after\n * `fit()` or `reset()`.\n */\nexport function usePanZoom({ enabled, contentWidth, contentHeight, opening, wheel = \"modifier\" }: UsePanZoomOptions): PanZoom {\n const viewportRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [transform, setTransform] = useState<PanZoomTransform>({ x: 0, y: 0, scale: 1 });\n // Which fit the content is held to, until the user pans or zooms.\n const fitted = useRef<\"opening\" | \"everything\" | undefined>(\"opening\");\n const { minScale, focus } = opening ?? {};\n const [focusX, focusY] = [focus?.x, focus?.y];\n\n const refit = useCallback(() => {\n const viewport = viewportRef.current;\n if (!viewport || !fitted.current) return;\n const content = overflowedSize(contentRef.current, { width: contentWidth, height: contentHeight });\n const fit: FitOptions =\n fitted.current === \"everything\"\n ? {}\n : {\n ...(minScale !== undefined ? { minScale } : {}),\n ...(focusX !== undefined && focusY !== undefined ? { focus: { x: focusX, y: focusY } } : {}),\n };\n setTransform(fitTransform(content, viewportSize(viewport), DEFAULT_LIMITS, fit));\n }, [contentWidth, contentHeight, minScale, focusX, focusY]);\n const zoomAt = useCallback((point: { x: number; y: number }, factor: number) => {\n fitted.current = undefined;\n setTransform((current) => zoomAround(current, point, factor));\n }, []);\n const zoomAtCentre = (factor: number) => {\n const viewport = viewportRef.current;\n if (!viewport) return;\n const { width, height } = viewportSize(viewport);\n zoomAt({ x: width / 2, y: height / 2 }, factor);\n };\n const { panning, handlers } = useDragPan((dx, dy) => {\n fitted.current = undefined;\n setTransform((current) => ({ ...current, x: current.x + dx, y: current.y + dy }));\n });\n useViewportResize(viewportRef, enabled, refit);\n useWheelZoom(viewportRef, enabled, wheel, zoomAt);\n const hold = (fit: \"opening\" | \"everything\") => () => {\n fitted.current = fit;\n refit();\n };\n\n return {\n viewportRef,\n contentRef,\n handlers: enabled ? handlers : {},\n transform,\n panning,\n zoomIn: () => zoomAtCentre(BUTTON_ZOOM_FACTOR),\n zoomOut: () => zoomAtCentre(1 / BUTTON_ZOOM_FACTOR),\n fit: hold(\"everything\"),\n reset: hold(\"opening\"),\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -15,9 +15,9 @@ function detectMode() {
|
|
|
15
15
|
}
|
|
16
16
|
function getVersionInfo() {
|
|
17
17
|
return {
|
|
18
|
-
commit: read(() => "
|
|
19
|
-
tag: read(() => "clicky-ui@0.3.
|
|
20
|
-
date: read(() => "2026-10-
|
|
18
|
+
commit: read(() => "16ab56d2", ""),
|
|
19
|
+
tag: read(() => "clicky-ui@0.3.45", ""),
|
|
20
|
+
date: read(() => "2026-10-08T07:04:04.001Z", ""),
|
|
21
21
|
dirty: read(() => true, false),
|
|
22
22
|
mode: detectMode()
|
|
23
23
|
};
|
|
@@ -13,9 +13,9 @@ function detectMode() {
|
|
|
13
13
|
}
|
|
14
14
|
function getVersionInfo() {
|
|
15
15
|
return {
|
|
16
|
-
commit: read(() => "
|
|
17
|
-
tag: read(() => "clicky-ui@0.3.
|
|
18
|
-
date: read(() => "2026-10-
|
|
16
|
+
commit: read(() => "16ab56d2", ""),
|
|
17
|
+
tag: read(() => "clicky-ui@0.3.45", ""),
|
|
18
|
+
date: read(() => "2026-10-08T07:03:21.350Z", ""),
|
|
19
19
|
dirty: read(() => true, false),
|
|
20
20
|
mode: detectMode()
|
|
21
21
|
};
|
package/dist/data.cjs
CHANGED
|
@@ -76,6 +76,8 @@ const ExecutionTree = require("./data/ExecutionTree.cjs");
|
|
|
76
76
|
const GraphDiagram = require("./data/GraphDiagram.cjs");
|
|
77
77
|
const graphLayout = require("./data/graph-layout.cjs");
|
|
78
78
|
const graphColumnsLayout = require("./data/graph-columns-layout.cjs");
|
|
79
|
+
const AccessMark = require("./data/AccessMark.cjs");
|
|
80
|
+
const dataAccess = require("./data/data-access.cjs");
|
|
79
81
|
const TreeNode = require("./data/TreeNode.cjs");
|
|
80
82
|
const TreeGroupHeader = require("./data/TreeGroupHeader.cjs");
|
|
81
83
|
const Timeline = require("./data/Timeline.cjs");
|
|
@@ -111,12 +113,17 @@ const stacktraceParse = require("./data/diagnostics/stacktrace-parse.cjs");
|
|
|
111
113
|
const ErrorDetails = require("./data/diagnostics/ErrorDetails.cjs");
|
|
112
114
|
const errorDiagnostics = require("./data/diagnostics/error-diagnostics.cjs");
|
|
113
115
|
const HarPanel = require("./data/har/HarPanel.cjs");
|
|
116
|
+
const types = require("./data/call-graph/types.cjs");
|
|
117
|
+
const callGraphVocabulary = require("./data/call-graph/call-graph-vocabulary.cjs");
|
|
118
|
+
const callGraphModel = require("./data/call-graph/call-graph-model.cjs");
|
|
119
|
+
const callGraphExclude = require("./data/call-graph/call-graph-exclude.cjs");
|
|
114
120
|
const adapter = require("./data/cache-browser/adapter.cjs");
|
|
115
121
|
const CacheBrowser = require("./data/cache-browser/CacheBrowser.cjs");
|
|
116
122
|
const CacheDetailPanel = require("./data/cache-browser/CacheDetailPanel.cjs");
|
|
117
123
|
const CacheTree = require("./data/cache-browser/CacheTree.cjs");
|
|
118
124
|
const CacheStatsOverview = require("./data/cache-browser/CacheStatsOverview.cjs");
|
|
119
125
|
const CacheValue = require("./data/cache-browser/CacheValue.cjs");
|
|
126
|
+
const CallGraph = require("./data/call-graph/CallGraph.cjs");
|
|
120
127
|
const ClickyExportDialog = require("./data/clicky-export/ClickyExportDialog.cjs");
|
|
121
128
|
const FixtureEditor = require("./data/FixtureEditor/FixtureEditor.cjs");
|
|
122
129
|
const GitChangeList = require("./data/git/GitChangeList.cjs");
|
|
@@ -713,7 +720,7 @@ const filterState = require("./data/test-runner/filterState.cjs");
|
|
|
713
720
|
const verifyReport = require("./data/verification/verify-report.cjs");
|
|
714
721
|
const gitDates = require("./data/git/git-dates.cjs");
|
|
715
722
|
const frameworkIcon = require("./data/test-runner/frameworkIcon.cjs");
|
|
716
|
-
const types = require("./data/cache-browser/types.cjs");
|
|
723
|
+
const types$1 = require("./data/cache-browser/types.cjs");
|
|
717
724
|
const programmingCatalog = require("./icons/programmingCatalog.cjs");
|
|
718
725
|
const graphEdgeRouting = require("./data/graph-edge-routing.cjs");
|
|
719
726
|
const useClickyExport = require("./data/clicky-export/useClickyExport.cjs");
|
|
@@ -848,7 +855,10 @@ exports.pruneNullNodes = objectGraphNodes.pruneNullNodes;
|
|
|
848
855
|
exports.ExecutionTree = ExecutionTree.ExecutionTree;
|
|
849
856
|
exports.GraphDiagram = GraphDiagram.GraphDiagram;
|
|
850
857
|
exports.ringLayout = graphLayout.ringLayout;
|
|
858
|
+
exports.GROUP_MEMBER_WINDOW = graphColumnsLayout.GROUP_MEMBER_WINDOW;
|
|
851
859
|
exports.columnsLayout = graphColumnsLayout.columnsLayout;
|
|
860
|
+
exports.AccessMark = AccessMark.AccessMark;
|
|
861
|
+
exports.mergeAccess = dataAccess.mergeAccess;
|
|
852
862
|
exports.TreeNode = TreeNode.TreeNode;
|
|
853
863
|
exports.TreeGroupHeader = TreeGroupHeader.TreeGroupHeader;
|
|
854
864
|
exports.Timeline = Timeline.Timeline;
|
|
@@ -929,6 +939,29 @@ exports.parseDiagnosticsStackTrace = errorDiagnostics.parseDiagnosticsStackTrace
|
|
|
929
939
|
exports.parseInlineJsonContextValue = errorDiagnostics.parseInlineJsonContextValue;
|
|
930
940
|
exports.HarEntryDetails = HarPanel.HarEntryDetails;
|
|
931
941
|
exports.HarPanel = HarPanel.HarPanel;
|
|
942
|
+
exports.CALL_GRAPH_ACCESS = types.CALL_GRAPH_ACCESS;
|
|
943
|
+
exports.CALL_GRAPH_DATA_GLYPHS = callGraphVocabulary.CALL_GRAPH_DATA_GLYPHS;
|
|
944
|
+
exports.CALL_GRAPH_DATA_KIND_WORDS = callGraphVocabulary.DATA_KIND_WORDS;
|
|
945
|
+
exports.DATA_MEMBER_OWNER = callGraphVocabulary.DATA_MEMBER_OWNER;
|
|
946
|
+
exports.UIR_CALL_GRAPH_VOCABULARY = callGraphVocabulary.UIR_CALL_GRAPH_VOCABULARY;
|
|
947
|
+
exports.callsItself = callGraphVocabulary.callsItself;
|
|
948
|
+
exports.dataMemberAside = callGraphVocabulary.dataMemberAside;
|
|
949
|
+
exports.dataNodeBacking = callGraphVocabulary.dataNodeBacking;
|
|
950
|
+
exports.dataNodeGlyph = callGraphVocabulary.dataNodeGlyph;
|
|
951
|
+
exports.dataNodeStatus = callGraphVocabulary.dataNodeStatus;
|
|
952
|
+
exports.interfaceMethods = callGraphVocabulary.interfaceMethods;
|
|
953
|
+
exports.isDataMember = callGraphVocabulary.isDataMember;
|
|
954
|
+
exports.isDataNode = callGraphVocabulary.isDataNode;
|
|
955
|
+
exports.CALL_GRAPH_DEFAULT_DEPTH = callGraphModel.CALL_GRAPH_DEFAULT_DEPTH;
|
|
956
|
+
exports.CALL_GRAPH_MAX_DEPTH = callGraphModel.CALL_GRAPH_MAX_DEPTH;
|
|
957
|
+
exports.baseCallGraphAccess = callGraphModel.baseAccess;
|
|
958
|
+
exports.mergeCallGraph = callGraphModel.mergeGraph;
|
|
959
|
+
exports.toggleCallGraphAccess = callGraphModel.toggleAccess;
|
|
960
|
+
exports.CALL_GRAPH_EXCLUDE_EXTERNAL = callGraphExclude.EXCLUDE_EXTERNAL;
|
|
961
|
+
exports.callGraphGroupFacts = callGraphExclude.callGraphGroupFacts;
|
|
962
|
+
exports.formatCallGraphExclude = callGraphExclude.formatExclude;
|
|
963
|
+
exports.matchesCallGraphExclude = callGraphExclude.matchesExclude;
|
|
964
|
+
exports.parseCallGraphExclude = callGraphExclude.parseExclude;
|
|
932
965
|
exports.CacheAdapterRegistry = adapter.CacheAdapterRegistry;
|
|
933
966
|
exports.createCacheRegistry = adapter.createCacheRegistry;
|
|
934
967
|
exports.prefixAdapter = adapter.prefixAdapter;
|
|
@@ -938,6 +971,7 @@ exports.CacheNodeRow = CacheTree.CacheNodeRow;
|
|
|
938
971
|
exports.CacheTree = CacheTree.CacheTree;
|
|
939
972
|
exports.CacheStatsOverview = CacheStatsOverview.CacheStatsOverview;
|
|
940
973
|
exports.CacheValue = CacheValue.CacheValue;
|
|
974
|
+
exports.CallGraph = CallGraph.CallGraph;
|
|
941
975
|
exports.ClickyExportDialog = ClickyExportDialog.ClickyExportDialog;
|
|
942
976
|
exports.FixtureEditor = FixtureEditor.FixtureEditor;
|
|
943
977
|
exports.GitChangedFilesSummary = GitChangeList.GitChangedFilesSummary;
|
|
@@ -2070,7 +2104,7 @@ exports.emptyVerifySummary = verifyReport.emptyVerifySummary;
|
|
|
2070
2104
|
exports.summarizeVerifyNodes = verifyReport.summarizeVerifyNodes;
|
|
2071
2105
|
exports.formatGitCommitDateHeader = gitDates.formatGitCommitDateHeader;
|
|
2072
2106
|
exports.frameworkIcon = frameworkIcon.frameworkIcon;
|
|
2073
|
-
exports.isLeaf = types.isLeaf;
|
|
2107
|
+
exports.isLeaf = types$1.isLeaf;
|
|
2074
2108
|
exports.programmingIconCatalog = programmingCatalog.programmingIconCatalog;
|
|
2075
2109
|
exports.routeEdges = graphEdgeRouting.routeEdges;
|
|
2076
2110
|
exports.useClickyExport = useClickyExport.useClickyExport;
|
package/dist/data.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"data.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/data.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ export { AvatarBadge, type AvatarBadgeProps } from './data/AvatarBadge.js';
|
|
|
4
4
|
export { badgeVariants } from './data/badge-variants.js';
|
|
5
5
|
export { Badge, type BadgeProps, type BadgeShape, type BadgeSize, type BadgeStatus, type BadgeTone, type BadgeTruncate, type BadgeVariant, } from './data/Badge.js';
|
|
6
6
|
export { CodeBlock, type CodeBlockProps } from './data/CodeBlock.js';
|
|
7
|
-
export { CodeDiff, type CodeDiffProps, type CodeDiffView } from './data/CodeDiff.js';
|
|
7
|
+
export { CodeDiff, type CodeDiffProps, type CodeDiffView, type DiffLineTarget, type DiffLineWidget, type DiffSide, } from './data/CodeDiff.js';
|
|
8
8
|
export { CodeLine, type CodeLineProps } from './data/CodeLine.js';
|
|
9
9
|
export { computeLineDiff, parseUnifiedDiff, type DiffHunk, type DiffLine, type DiffLineType, } from './data/code-diff.js';
|
|
10
10
|
export { inferColumns } from './data/data-table-utils.js';
|
|
@@ -75,7 +75,9 @@ export { countObjectGraphNodes, pruneNullNodes, type ObjectGraphNode, } from './
|
|
|
75
75
|
export { ExecutionTree, type ExecutionNode, type ExecutionTreeProps } from './data/ExecutionTree.js';
|
|
76
76
|
export { GraphDiagram, type GraphDiagramEdge, type GraphDiagramEdgeFocus, type GraphDiagramGroup, type GraphDiagramLayout, type GraphDiagramNode, type GraphDiagramProps, } from './data/GraphDiagram.js';
|
|
77
77
|
export { ringLayout, routeEdges, type EdgeRoute, type GraphLayoutEdge, type GraphLayoutNode, type GraphLayoutPosition, type GraphLayoutResult, type RingLayoutOptions, type RouteEdgesDimensions, type RouteEdgesOptions, } from './data/graph-layout.js';
|
|
78
|
-
export { columnsLayout, type ColumnsLayoutNode, type ColumnsLayoutOptions, type ColumnsLayoutResult, type GraphLayoutGroupBox, } from './data/graph-columns-layout.js';
|
|
78
|
+
export { columnsLayout, GROUP_MEMBER_WINDOW, type ColumnsLayoutNode, type ColumnsLayoutOptions, type ColumnsLayoutResult, type GraphLayoutGroupBox, type GroupMemberWindow, } from './data/graph-columns-layout.js';
|
|
79
|
+
export { AccessMark, type AccessMarkProps } from './data/AccessMark.js';
|
|
80
|
+
export { mergeAccess, type DataAccess } from './data/data-access.js';
|
|
79
81
|
export { TreeNode, type TreeNodeProps, type TreeRowContext } from './data/TreeNode.js';
|
|
80
82
|
export { TreeGroupHeader, type TreeGroupHeaderProps } from './data/TreeGroupHeader.js';
|
|
81
83
|
export { Timeline, type TimelineItem, type TimelineProps } from './data/Timeline.js';
|
|
@@ -84,6 +86,7 @@ export * from './data/test-runner/index.js';
|
|
|
84
86
|
export * from './data/verification/index.js';
|
|
85
87
|
export * from './data/cache-browser/index.js';
|
|
86
88
|
export * from './data/query-browser/index.js';
|
|
89
|
+
export * from './data/call-graph/index.js';
|
|
87
90
|
export { debugCaptureHeaders, debugConsoleAvailable, debugConsoleOpen, DEBUG_CAPTURE_HEADER, registerDebugConsole, revealDebugConsole, DEBUG_REFRESH_INSPECTION_HEADER, setDebugCaptureLevel, setDebugConsoleOpen, setDebugRefreshInspection, subscribeToDebugConsole, type DebugConsoleRequest, } from './data/debugConsoleSignal.js';
|
|
88
91
|
export { useDebugAction } from './data/useDebugAction.js';
|
|
89
92
|
export * from './data/clicky-export/index.js';
|
package/dist/data.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"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"}
|