@flanksource/clicky-ui 0.3.24 → 0.3.26
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/NOTICE.md +1 -0
- package/dist/ai.cjs +4 -0
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +6 -2
- package/dist/ai.js.map +1 -1
- package/dist/chat.cjs +8 -0
- package/dist/chat.cjs.map +1 -1
- package/dist/chat.js +9 -1
- package/dist/chat.js.map +1 -1
- package/dist/comments/CommentCard.cjs +89 -14
- package/dist/comments/CommentCard.cjs.map +1 -1
- package/dist/comments/CommentCard.d.ts.map +1 -1
- package/dist/comments/CommentCard.js +90 -15
- package/dist/comments/CommentCard.js.map +1 -1
- package/dist/comments/CommentComposer.cjs +25 -2
- package/dist/comments/CommentComposer.cjs.map +1 -1
- package/dist/comments/CommentComposer.d.ts.map +1 -1
- package/dist/comments/CommentComposer.js +25 -2
- package/dist/comments/CommentComposer.js.map +1 -1
- package/dist/comments/CommentProvider.cjs +21 -14
- package/dist/comments/CommentProvider.cjs.map +1 -1
- package/dist/comments/CommentProvider.d.ts +1 -1
- package/dist/comments/CommentProvider.d.ts.map +1 -1
- package/dist/comments/CommentProvider.js +21 -14
- package/dist/comments/CommentProvider.js.map +1 -1
- package/dist/comments/CommentSidePanel.cjs +1 -1
- package/dist/comments/CommentSidePanel.cjs.map +1 -1
- package/dist/comments/CommentSidePanel.js +1 -1
- package/dist/comments/CommentSidePanel.js.map +1 -1
- package/dist/comments/comment-types.cjs.map +1 -1
- package/dist/comments/comment-types.d.ts +6 -0
- package/dist/comments/comment-types.d.ts.map +1 -1
- package/dist/comments/comment-types.js.map +1 -1
- package/dist/components/DimensionField.cjs +56 -0
- package/dist/components/DimensionField.cjs.map +1 -0
- package/dist/components/DimensionField.d.ts +17 -0
- package/dist/components/DimensionField.d.ts.map +1 -0
- package/dist/components/DimensionField.js +56 -0
- package/dist/components/DimensionField.js.map +1 -0
- package/dist/components.cjs +4 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +2 -0
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +4 -0
- package/dist/components.js.map +1 -1
- package/dist/data/Clicky.cjs +4 -5
- package/dist/data/Clicky.cjs.map +1 -1
- package/dist/data/Clicky.d.ts.map +1 -1
- package/dist/data/Clicky.js +4 -5
- package/dist/data/Clicky.js.map +1 -1
- package/dist/data/TaskExecDetails.cjs +8 -3
- package/dist/data/TaskExecDetails.cjs.map +1 -1
- package/dist/data/TaskExecDetails.d.ts +4 -0
- package/dist/data/TaskExecDetails.d.ts.map +1 -1
- package/dist/data/TaskExecDetails.js +9 -4
- package/dist/data/TaskExecDetails.js.map +1 -1
- package/dist/data/TaskManagerButton.cjs +101 -7
- package/dist/data/TaskManagerButton.cjs.map +1 -1
- package/dist/data/TaskManagerButton.d.ts +6 -1
- package/dist/data/TaskManagerButton.d.ts.map +1 -1
- package/dist/data/TaskManagerButton.js +103 -9
- package/dist/data/TaskManagerButton.js.map +1 -1
- package/dist/data/TaskProcessDetails.cjs +2 -0
- package/dist/data/TaskProcessDetails.cjs.map +1 -1
- package/dist/data/TaskProcessDetails.d.ts.map +1 -1
- package/dist/data/TaskProcessDetails.js +2 -0
- package/dist/data/TaskProcessDetails.js.map +1 -1
- package/dist/data/TaskProgress.cjs +14 -4
- package/dist/data/TaskProgress.cjs.map +1 -1
- package/dist/data/TaskProgress.js +14 -4
- package/dist/data/TaskProgress.js.map +1 -1
- package/dist/data/TaskSnapshot.cjs.map +1 -1
- package/dist/data/TaskSnapshot.d.ts +1 -0
- package/dist/data/TaskSnapshot.d.ts.map +1 -1
- package/dist/data/TaskSnapshot.js.map +1 -1
- package/dist/data/ai/ChatWindow.cjs +18 -23
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts +1 -1
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.js +19 -24
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/ChatWindow.preferences.cjs +12 -21
- package/dist/data/ai/ChatWindow.preferences.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.preferences.d.ts +3 -2
- package/dist/data/ai/ChatWindow.preferences.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.preferences.js +12 -21
- package/dist/data/ai/ChatWindow.preferences.js.map +1 -1
- package/dist/data/ai/ChatWindow.tool-catalog.cjs +21 -38
- package/dist/data/ai/ChatWindow.tool-catalog.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.tool-catalog.d.ts +5 -5
- package/dist/data/ai/ChatWindow.tool-catalog.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.tool-catalog.js +21 -38
- package/dist/data/ai/ChatWindow.tool-catalog.js.map +1 -1
- package/dist/data/ai/ChatWindow.types.d.ts +2 -2
- package/dist/data/ai/ChatWindow.types.d.ts.map +1 -1
- package/dist/data/ai/ChatWindowManager.cjs +2 -2
- package/dist/data/ai/ChatWindowManager.cjs.map +1 -1
- package/dist/data/ai/ChatWindowManager.js +2 -2
- package/dist/data/ai/ChatWindowManager.js.map +1 -1
- package/dist/data/ai/ChatWindowRequestBody.cjs +4 -2
- package/dist/data/ai/ChatWindowRequestBody.cjs.map +1 -1
- package/dist/data/ai/ChatWindowRequestBody.d.ts +15 -3
- package/dist/data/ai/ChatWindowRequestBody.d.ts.map +1 -1
- package/dist/data/ai/ChatWindowRequestBody.js +4 -2
- package/dist/data/ai/ChatWindowRequestBody.js.map +1 -1
- package/dist/data/ai/ToolPreferences.cjs +5 -5
- package/dist/data/ai/ToolPreferences.cjs.map +1 -1
- package/dist/data/ai/ToolPreferences.d.ts +6 -5
- package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.js +5 -5
- package/dist/data/ai/ToolPreferences.js.map +1 -1
- package/dist/data/ai/ToolPreferences.model.cjs +61 -37
- package/dist/data/ai/ToolPreferences.model.cjs.map +1 -1
- package/dist/data/ai/ToolPreferences.model.d.ts +32 -13
- package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.model.js +62 -38
- package/dist/data/ai/ToolPreferences.model.js.map +1 -1
- package/dist/data/ai/ToolPreferencesList.cjs +17 -20
- package/dist/data/ai/ToolPreferencesList.cjs.map +1 -1
- package/dist/data/ai/ToolPreferencesList.d.ts +16 -7
- package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferencesList.js +18 -21
- package/dist/data/ai/ToolPreferencesList.js.map +1 -1
- package/dist/data/ai/chat-window-context.cjs +1 -1
- package/dist/data/ai/chat-window-context.cjs.map +1 -1
- package/dist/data/ai/chat-window-context.d.ts +7 -7
- package/dist/data/ai/chat-window-context.d.ts.map +1 -1
- package/dist/data/ai/chat-window-context.js +1 -1
- package/dist/data/ai/chat-window-context.js.map +1 -1
- package/dist/data/ai/index.d.ts +3 -1
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/chat/Chat.cjs +8 -4
- package/dist/data/chat/Chat.cjs.map +1 -1
- package/dist/data/chat/Chat.d.ts.map +1 -1
- package/dist/data/chat/Chat.js +8 -4
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.cjs +11 -7
- 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 +11 -7
- package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
- package/dist/data/chat/ContextMeter.cjs +64 -27
- package/dist/data/chat/ContextMeter.cjs.map +1 -1
- package/dist/data/chat/ContextMeter.d.ts +11 -4
- package/dist/data/chat/ContextMeter.d.ts.map +1 -1
- package/dist/data/chat/ContextMeter.js +64 -27
- package/dist/data/chat/ContextMeter.js.map +1 -1
- package/dist/data/chat/clickyOperationsToTools.cjs +2 -1
- package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -1
- package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -1
- package/dist/data/chat/clickyOperationsToTools.js +2 -1
- package/dist/data/chat/clickyOperationsToTools.js.map +1 -1
- package/dist/data/chat/index.d.ts +2 -1
- package/dist/data/chat/index.d.ts.map +1 -1
- package/dist/data/chat/tool-policy.cjs +132 -0
- package/dist/data/chat/tool-policy.cjs.map +1 -0
- package/dist/data/chat/tool-policy.d.ts +81 -0
- package/dist/data/chat/tool-policy.d.ts.map +1 -0
- package/dist/data/chat/tool-policy.js +132 -0
- package/dist/data/chat/tool-policy.js.map +1 -0
- package/dist/data/chat/types.cjs +20 -0
- package/dist/data/chat/types.cjs.map +1 -1
- package/dist/data/chat/types.d.ts +41 -2
- package/dist/data/chat/types.d.ts.map +1 -1
- package/dist/data/chat/types.js +20 -0
- package/dist/data/chat/types.js.map +1 -1
- package/dist/data/chat/usage-snapshot.cjs +10 -1
- package/dist/data/chat/usage-snapshot.cjs.map +1 -1
- package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
- package/dist/data/chat/usage-snapshot.js +10 -1
- package/dist/data/chat/usage-snapshot.js.map +1 -1
- package/dist/data/debugConsoleSignal.cjs +64 -0
- package/dist/data/debugConsoleSignal.cjs.map +1 -0
- package/dist/data/debugConsoleSignal.d.ts +83 -0
- package/dist/data/debugConsoleSignal.d.ts.map +1 -0
- package/dist/data/debugConsoleSignal.js +64 -0
- package/dist/data/debugConsoleSignal.js.map +1 -0
- package/dist/data/har/HarPanel.cjs +20 -14
- package/dist/data/har/HarPanel.cjs.map +1 -1
- package/dist/data/har/HarPanel.d.ts.map +1 -1
- package/dist/data/har/HarPanel.js +20 -14
- package/dist/data/har/HarPanel.js.map +1 -1
- package/dist/data/har/types.d.ts +18 -0
- package/dist/data/har/types.d.ts.map +1 -1
- package/dist/data/query-browser/QueryBrowser.cjs +4 -42
- package/dist/data/query-browser/QueryBrowser.cjs.map +1 -1
- package/dist/data/query-browser/QueryBrowser.d.ts.map +1 -1
- package/dist/data/query-browser/QueryBrowser.js +5 -43
- package/dist/data/query-browser/QueryBrowser.js.map +1 -1
- package/dist/data/query-browser/QueryBrowser.types.cjs.map +1 -1
- package/dist/data/query-browser/QueryBrowser.types.d.ts +0 -1
- package/dist/data/query-browser/QueryBrowser.types.d.ts.map +1 -1
- package/dist/data/query-browser/QueryBrowser.types.js.map +1 -1
- package/dist/data/useDebugAction.cjs +29 -0
- package/dist/data/useDebugAction.cjs.map +1 -0
- package/dist/data/useDebugAction.d.ts +16 -0
- package/dist/data/useDebugAction.d.ts.map +1 -0
- package/dist/data/useDebugAction.js +29 -0
- package/dist/data/useDebugAction.js.map +1 -0
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +16 -8
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +3 -2
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +16 -8
- package/dist/devtools/DebugConsole.cjs +138 -0
- package/dist/devtools/DebugConsole.cjs.map +1 -0
- package/dist/devtools/DebugConsole.d.ts +23 -0
- package/dist/devtools/DebugConsole.d.ts.map +1 -0
- package/dist/devtools/DebugConsole.js +138 -0
- package/dist/devtools/DebugConsole.js.map +1 -0
- package/dist/devtools/DebugConsoleButton.cjs +59 -0
- package/dist/devtools/DebugConsoleButton.cjs.map +1 -0
- package/dist/devtools/DebugConsoleButton.d.ts +20 -0
- package/dist/devtools/DebugConsoleButton.d.ts.map +1 -0
- package/dist/devtools/DebugConsoleButton.js +59 -0
- package/dist/devtools/DebugConsoleButton.js.map +1 -0
- package/dist/devtools/DebugConsoleDock.cjs +112 -0
- package/dist/devtools/DebugConsoleDock.cjs.map +1 -0
- package/dist/devtools/DebugConsoleDock.d.ts +26 -0
- package/dist/devtools/DebugConsoleDock.d.ts.map +1 -0
- package/dist/devtools/DebugConsoleDock.js +112 -0
- package/dist/devtools/DebugConsoleDock.js.map +1 -0
- package/dist/devtools/ExecutionDetail.cjs +135 -0
- package/dist/devtools/ExecutionDetail.cjs.map +1 -0
- package/dist/devtools/ExecutionDetail.d.ts +19 -0
- package/dist/devtools/ExecutionDetail.d.ts.map +1 -0
- package/dist/devtools/ExecutionDetail.js +135 -0
- package/dist/devtools/ExecutionDetail.js.map +1 -0
- package/dist/devtools/debugClient.cjs +172 -0
- package/dist/devtools/debugClient.cjs.map +1 -0
- package/dist/devtools/debugClient.d.ts +98 -0
- package/dist/devtools/debugClient.d.ts.map +1 -0
- package/dist/devtools/debugClient.js +172 -0
- package/dist/devtools/debugClient.js.map +1 -0
- package/dist/devtools/debugStore.cjs +115 -0
- package/dist/devtools/debugStore.cjs.map +1 -0
- package/dist/devtools/debugStore.d.ts +83 -0
- package/dist/devtools/debugStore.d.ts.map +1 -0
- package/dist/devtools/debugStore.js +115 -0
- package/dist/devtools/debugStore.js.map +1 -0
- package/dist/devtools/dockState.cjs +51 -0
- package/dist/devtools/dockState.cjs.map +1 -0
- package/dist/devtools/dockState.d.ts +31 -0
- package/dist/devtools/dockState.d.ts.map +1 -0
- package/dist/devtools/dockState.js +51 -0
- package/dist/devtools/dockState.js.map +1 -0
- package/dist/devtools/tabs/ConsoleTab.cjs +36 -0
- package/dist/devtools/tabs/ConsoleTab.cjs.map +1 -0
- package/dist/devtools/tabs/ConsoleTab.d.ts +19 -0
- package/dist/devtools/tabs/ConsoleTab.d.ts.map +1 -0
- package/dist/devtools/tabs/ConsoleTab.js +36 -0
- package/dist/devtools/tabs/ConsoleTab.js.map +1 -0
- package/dist/devtools/tabs/InspectionCaches.cjs +150 -0
- package/dist/devtools/tabs/InspectionCaches.cjs.map +1 -0
- package/dist/devtools/tabs/InspectionCaches.d.ts +23 -0
- package/dist/devtools/tabs/InspectionCaches.d.ts.map +1 -0
- package/dist/devtools/tabs/InspectionCaches.js +150 -0
- package/dist/devtools/tabs/InspectionCaches.js.map +1 -0
- package/dist/devtools/tabs/InspectionTab.cjs +316 -0
- package/dist/devtools/tabs/InspectionTab.cjs.map +1 -0
- package/dist/devtools/tabs/InspectionTab.d.ts +27 -0
- package/dist/devtools/tabs/InspectionTab.d.ts.map +1 -0
- package/dist/devtools/tabs/InspectionTab.js +316 -0
- package/dist/devtools/tabs/InspectionTab.js.map +1 -0
- package/dist/devtools/tabs/NetworkTab.cjs +91 -0
- package/dist/devtools/tabs/NetworkTab.cjs.map +1 -0
- package/dist/devtools/tabs/NetworkTab.d.ts +20 -0
- package/dist/devtools/tabs/NetworkTab.d.ts.map +1 -0
- package/dist/devtools/tabs/NetworkTab.js +91 -0
- package/dist/devtools/tabs/NetworkTab.js.map +1 -0
- package/dist/devtools/tabs/QueriesTab.cjs +85 -0
- package/dist/devtools/tabs/QueriesTab.cjs.map +1 -0
- package/dist/devtools/tabs/QueriesTab.d.ts +24 -0
- package/dist/devtools/tabs/QueriesTab.d.ts.map +1 -0
- package/dist/devtools/tabs/QueriesTab.js +85 -0
- package/dist/devtools/tabs/QueriesTab.js.map +1 -0
- package/dist/devtools/types.cjs +26 -0
- package/dist/devtools/types.cjs.map +1 -0
- package/dist/devtools/types.d.ts +235 -0
- package/dist/devtools/types.d.ts.map +1 -0
- package/dist/devtools/types.js +26 -0
- package/dist/devtools/types.js.map +1 -0
- package/dist/devtools/useDebugStream.cjs +46 -0
- package/dist/devtools/useDebugStream.cjs.map +1 -0
- package/dist/devtools/useDebugStream.d.ts +23 -0
- package/dist/devtools/useDebugStream.d.ts.map +1 -0
- package/dist/devtools/useDebugStream.js +46 -0
- package/dist/devtools/useDebugStream.js.map +1 -0
- package/dist/devtools.cjs +51 -0
- package/dist/devtools.cjs.map +1 -0
- package/dist/devtools.d.ts +37 -0
- package/dist/devtools.d.ts.map +1 -0
- package/dist/devtools.js +51 -0
- package/dist/devtools.js.map +1 -0
- package/dist/icons/components/UiOpenScad.cjs +10 -0
- package/dist/icons/components/UiOpenScad.cjs.map +1 -0
- package/dist/icons/components/UiOpenScad.d.ts +9 -0
- package/dist/icons/components/UiOpenScad.d.ts.map +1 -0
- package/dist/icons/components/UiOpenScad.js +10 -0
- package/dist/icons/components/UiOpenScad.js.map +1 -0
- package/dist/icons/index.d.ts +1 -0
- package/dist/icons/index.d.ts.map +1 -1
- package/dist/icons/registry.cjs +2 -0
- package/dist/icons/registry.cjs.map +1 -1
- package/dist/icons/registry.d.ts.map +1 -1
- package/dist/icons/registry.js +2 -0
- package/dist/icons/registry.js.map +1 -1
- package/dist/icons.cjs +2 -0
- package/dist/icons.cjs.map +1 -1
- package/dist/icons.js +2 -0
- package/dist/icons.js.map +1 -1
- package/dist/index.cjs +20 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +20 -8
- package/dist/index.js.map +1 -1
- package/dist/layout/AppShell.cjs +15 -10
- package/dist/layout/AppShell.cjs.map +1 -1
- package/dist/layout/AppShell.d.ts +11 -0
- package/dist/layout/AppShell.d.ts.map +1 -1
- package/dist/layout/AppShell.js +15 -10
- package/dist/layout/AppShell.js.map +1 -1
- package/dist/layout/AppShell.nav.cjs +170 -49
- package/dist/layout/AppShell.nav.cjs.map +1 -1
- package/dist/layout/AppShell.nav.d.ts.map +1 -1
- package/dist/layout/AppShell.nav.js +170 -49
- package/dist/layout/AppShell.nav.js.map +1 -1
- package/dist/overlay/CellActions.cjs +18 -124
- package/dist/overlay/CellActions.cjs.map +1 -1
- package/dist/overlay/CellActions.d.ts +1 -1
- package/dist/overlay/CellActions.d.ts.map +1 -1
- package/dist/overlay/CellActions.js +18 -124
- package/dist/overlay/CellActions.js.map +1 -1
- package/dist/overlay/ContextMenu.cjs +144 -0
- package/dist/overlay/ContextMenu.cjs.map +1 -0
- package/dist/overlay/ContextMenu.d.ts +8 -0
- package/dist/overlay/ContextMenu.d.ts.map +1 -0
- package/dist/overlay/ContextMenu.js +144 -0
- package/dist/overlay/ContextMenu.js.map +1 -0
- package/dist/profiles/connections/connectionBrowserModel.cjs +14 -65
- package/dist/profiles/connections/connectionBrowserModel.cjs.map +1 -1
- package/dist/profiles/connections/connectionBrowserModel.d.ts +35 -35
- package/dist/profiles/connections/connectionBrowserModel.d.ts.map +1 -1
- package/dist/profiles/connections/connectionBrowserModel.js +14 -65
- package/dist/profiles/connections/connectionBrowserModel.js.map +1 -1
- package/dist/profiles/connections/connectionQueryWorkspace.cjs +29 -9
- package/dist/profiles/connections/connectionQueryWorkspace.cjs.map +1 -1
- package/dist/profiles/connections/connectionQueryWorkspace.d.ts +3 -2
- package/dist/profiles/connections/connectionQueryWorkspace.d.ts.map +1 -1
- package/dist/profiles/connections/connectionQueryWorkspace.js +30 -10
- package/dist/profiles/connections/connectionQueryWorkspace.js.map +1 -1
- package/dist/profiles/connections/connectionQueryWorkspaceModel.cjs +15 -0
- package/dist/profiles/connections/connectionQueryWorkspaceModel.cjs.map +1 -1
- package/dist/profiles/connections/connectionQueryWorkspaceModel.d.ts +22 -1
- package/dist/profiles/connections/connectionQueryWorkspaceModel.d.ts.map +1 -1
- package/dist/profiles/connections/connectionQueryWorkspaceModel.js +15 -0
- package/dist/profiles/connections/connectionQueryWorkspaceModel.js.map +1 -1
- package/dist/profiles/connections/index.d.ts +1 -0
- package/dist/profiles/connections/index.d.ts.map +1 -1
- package/dist/profiles/connections/inspectionStatus.cjs +44 -0
- package/dist/profiles/connections/inspectionStatus.cjs.map +1 -0
- package/dist/profiles/connections/inspectionStatus.d.ts +5 -0
- package/dist/profiles/connections/inspectionStatus.d.ts.map +1 -0
- package/dist/profiles/connections/inspectionStatus.js +44 -0
- package/dist/profiles/connections/inspectionStatus.js.map +1 -0
- package/dist/profiles/connections/useInspection.cjs +123 -0
- package/dist/profiles/connections/useInspection.cjs.map +1 -0
- package/dist/profiles/connections/useInspection.d.ts +35 -0
- package/dist/profiles/connections/useInspection.d.ts.map +1 -0
- package/dist/profiles/connections/useInspection.js +123 -0
- package/dist/profiles/connections/useInspection.js.map +1 -0
- package/dist/profiles/editor/profileBuilderWorkspace.cjs +55 -23
- package/dist/profiles/editor/profileBuilderWorkspace.cjs.map +1 -1
- package/dist/profiles/editor/profileBuilderWorkspace.d.ts.map +1 -1
- package/dist/profiles/editor/profileBuilderWorkspace.js +56 -24
- package/dist/profiles/editor/profileBuilderWorkspace.js.map +1 -1
- package/dist/profiles/elasticsearch/esQueryBuilder.cjs +12 -3
- package/dist/profiles/elasticsearch/esQueryBuilder.cjs.map +1 -1
- package/dist/profiles/elasticsearch/esQueryBuilder.d.ts +2 -2
- package/dist/profiles/elasticsearch/esQueryBuilder.d.ts.map +1 -1
- package/dist/profiles/elasticsearch/esQueryBuilder.js +12 -3
- package/dist/profiles/elasticsearch/esQueryBuilder.js.map +1 -1
- package/dist/profiles/fields/profileFieldEditor.cjs +137 -22
- package/dist/profiles/fields/profileFieldEditor.cjs.map +1 -1
- package/dist/profiles/fields/profileFieldEditor.d.ts.map +1 -1
- package/dist/profiles/fields/profileFieldEditor.js +137 -22
- package/dist/profiles/fields/profileFieldEditor.js.map +1 -1
- package/dist/profiles/fields/profileFieldFilterEditor.cjs +171 -82
- package/dist/profiles/fields/profileFieldFilterEditor.cjs.map +1 -1
- package/dist/profiles/fields/profileFieldFilterEditor.d.ts +0 -9
- package/dist/profiles/fields/profileFieldFilterEditor.d.ts.map +1 -1
- package/dist/profiles/fields/profileFieldFilterEditor.js +174 -85
- package/dist/profiles/fields/profileFieldFilterEditor.js.map +1 -1
- package/dist/profiles/fields/profileFieldIcons.cjs +6 -3
- package/dist/profiles/fields/profileFieldIcons.cjs.map +1 -1
- package/dist/profiles/fields/profileFieldIcons.js +6 -3
- package/dist/profiles/fields/profileFieldIcons.js.map +1 -1
- package/dist/profiles/query/profileSampleFilterLookup.cjs +34 -0
- package/dist/profiles/query/profileSampleFilterLookup.cjs.map +1 -0
- package/dist/profiles/query/profileSampleFilterLookup.d.ts +12 -0
- package/dist/profiles/query/profileSampleFilterLookup.d.ts.map +1 -0
- package/dist/profiles/query/profileSampleFilterLookup.js +34 -0
- package/dist/profiles/query/profileSampleFilterLookup.js.map +1 -0
- package/dist/profiles/query/profileSamplePayload.cjs +6 -4
- package/dist/profiles/query/profileSamplePayload.cjs.map +1 -1
- package/dist/profiles/query/profileSamplePayload.d.ts +11 -4
- package/dist/profiles/query/profileSamplePayload.d.ts.map +1 -1
- package/dist/profiles/query/profileSamplePayload.js +6 -4
- package/dist/profiles/query/profileSamplePayload.js.map +1 -1
- package/dist/profiles/query/profileSampleResult.cjs +26 -0
- package/dist/profiles/query/profileSampleResult.cjs.map +1 -0
- package/dist/profiles/query/profileSampleResult.d.ts +11 -0
- package/dist/profiles/query/profileSampleResult.d.ts.map +1 -0
- package/dist/profiles/query/profileSampleResult.js +26 -0
- package/dist/profiles/query/profileSampleResult.js.map +1 -0
- package/dist/profiles/query/queryTargetPicker.cjs +5 -3
- package/dist/profiles/query/queryTargetPicker.cjs.map +1 -1
- package/dist/profiles/query/queryTargetPicker.d.ts +3 -2
- package/dist/profiles/query/queryTargetPicker.d.ts.map +1 -1
- package/dist/profiles/query/queryTargetPicker.js +5 -3
- package/dist/profiles/query/queryTargetPicker.js.map +1 -1
- package/dist/profiles/wizard/profileWizard.cjs +14 -5
- package/dist/profiles/wizard/profileWizard.cjs.map +1 -1
- package/dist/profiles/wizard/profileWizard.d.ts.map +1 -1
- package/dist/profiles/wizard/profileWizard.js +15 -6
- package/dist/profiles/wizard/profileWizard.js.map +1 -1
- package/dist/profiles/wizard/profileWizardModel.cjs +35 -6
- package/dist/profiles/wizard/profileWizardModel.cjs.map +1 -1
- package/dist/profiles/wizard/profileWizardModel.d.ts +29 -4
- package/dist/profiles/wizard/profileWizardModel.d.ts.map +1 -1
- package/dist/profiles/wizard/profileWizardModel.js +35 -6
- package/dist/profiles/wizard/profileWizardModel.js.map +1 -1
- package/dist/profiles/wizard/profileWizardQueryStep.cjs +44 -11
- package/dist/profiles/wizard/profileWizardQueryStep.cjs.map +1 -1
- package/dist/profiles/wizard/profileWizardQueryStep.d.ts.map +1 -1
- package/dist/profiles/wizard/profileWizardQueryStep.js +46 -13
- package/dist/profiles/wizard/profileWizardQueryStep.js.map +1 -1
- package/dist/profiles/wizard/profileWizardSteps.cjs +33 -2
- package/dist/profiles/wizard/profileWizardSteps.cjs.map +1 -1
- package/dist/profiles/wizard/profileWizardSteps.d.ts +11 -2
- package/dist/profiles/wizard/profileWizardSteps.d.ts.map +1 -1
- package/dist/profiles/wizard/profileWizardSteps.js +33 -2
- package/dist/profiles/wizard/profileWizardSteps.js.map +1 -1
- package/dist/profiles.cjs +8 -2
- package/dist/profiles.cjs.map +1 -1
- package/dist/profiles.js +10 -4
- package/dist/profiles.js.map +1 -1
- package/dist/rpc/FilterForm.cjs +21 -237
- package/dist/rpc/FilterForm.cjs.map +1 -1
- package/dist/rpc/FilterForm.d.ts +3 -1
- package/dist/rpc/FilterForm.d.ts.map +1 -1
- package/dist/rpc/FilterForm.js +21 -237
- package/dist/rpc/FilterForm.js.map +1 -1
- package/dist/rpc/FilterFormFields.cjs +240 -0
- package/dist/rpc/FilterFormFields.cjs.map +1 -0
- package/dist/rpc/FilterFormFields.d.ts +12 -0
- package/dist/rpc/FilterFormFields.d.ts.map +1 -0
- package/dist/rpc/FilterFormFields.js +240 -0
- package/dist/rpc/FilterFormFields.js.map +1 -0
- package/dist/rpc/router.cjs +3 -2
- package/dist/rpc/router.cjs.map +1 -1
- package/dist/rpc/router.d.ts.map +1 -1
- package/dist/rpc/router.js +3 -2
- package/dist/rpc/router.js.map +1 -1
- package/dist/rpc/types.cjs.map +1 -1
- package/dist/rpc/types.d.ts +3 -1
- package/dist/rpc/types.d.ts.map +1 -1
- package/dist/rpc/types.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +6 -1
- package/dist/data/query-info/QueryInfoDialog.cjs +0 -106
- package/dist/data/query-info/QueryInfoDialog.cjs.map +0 -1
- package/dist/data/query-info/QueryInfoDialog.d.ts +0 -16
- package/dist/data/query-info/QueryInfoDialog.d.ts.map +0 -1
- package/dist/data/query-info/QueryInfoDialog.js +0 -106
- package/dist/data/query-info/QueryInfoDialog.js.map +0 -1
- package/dist/data/query-info/index.d.ts +0 -4
- package/dist/data/query-info/index.d.ts.map +0 -1
- package/dist/data/query-info/queryInfo.cjs +0 -42
- package/dist/data/query-info/queryInfo.cjs.map +0 -1
- package/dist/data/query-info/queryInfo.d.ts +0 -45
- package/dist/data/query-info/queryInfo.d.ts.map +0 -1
- package/dist/data/query-info/queryInfo.js +0 -42
- package/dist/data/query-info/queryInfo.js.map +0 -1
- package/dist/data/query-info/useQueryInfo.cjs +0 -48
- package/dist/data/query-info/useQueryInfo.cjs.map +0 -1
- package/dist/data/query-info/useQueryInfo.d.ts +0 -26
- package/dist/data/query-info/useQueryInfo.d.ts.map +0 -1
- package/dist/data/query-info/useQueryInfo.js +0 -48
- package/dist/data/query-info/useQueryInfo.js.map +0 -1
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
2
3
|
import { Icon } from "../data/Icon.js";
|
|
3
4
|
import { cn } from "../lib/utils.js";
|
|
5
|
+
import { ContextMenu } from "../overlay/ContextMenu.js";
|
|
4
6
|
import { useRouter } from "../rpc/router.js";
|
|
5
7
|
function NavSections({
|
|
6
8
|
sections,
|
|
@@ -17,14 +19,14 @@ function NavSections({
|
|
|
17
19
|
collapsed ? "px-2" : "px-density-2"
|
|
18
20
|
),
|
|
19
21
|
children: sections.map((section, index) => {
|
|
20
|
-
var _a, _b;
|
|
22
|
+
var _a, _b, _c;
|
|
21
23
|
return /* @__PURE__ */ jsxs(
|
|
22
24
|
"div",
|
|
23
25
|
{
|
|
24
26
|
className: "flex flex-col",
|
|
25
27
|
children: [
|
|
26
28
|
section.label && (collapsed ? /* @__PURE__ */ jsx("div", { className: "mx-2 mb-1 mt-3 border-t border-sidebar-border first:mt-1" }) : /* @__PURE__ */ jsx("div", { className: "mb-0.5 mt-3 px-density-2 text-[10px] font-semibold uppercase tracking-[0.18em] text-sidebar-foreground/55 first:mt-1", children: section.label })),
|
|
27
|
-
(_a = section.items) == null ? void 0 : _a.map((item) => /* @__PURE__ */ jsx(
|
|
29
|
+
section.variant !== "tree" && ((_a = section.items) == null ? void 0 : _a.map((item) => /* @__PURE__ */ jsx(
|
|
28
30
|
NavItemRow,
|
|
29
31
|
{
|
|
30
32
|
item,
|
|
@@ -33,7 +35,7 @@ function NavSections({
|
|
|
33
35
|
...onNavigate ? { onNavigate } : {}
|
|
34
36
|
},
|
|
35
37
|
item.key
|
|
36
|
-
)),
|
|
38
|
+
))),
|
|
37
39
|
(_b = section.groups) == null ? void 0 : _b.map(
|
|
38
40
|
(group) => (
|
|
39
41
|
// A collapsed rail has no room for group headings, so the whole
|
|
@@ -60,7 +62,17 @@ function NavSections({
|
|
|
60
62
|
group.key
|
|
61
63
|
)
|
|
62
64
|
)
|
|
63
|
-
)
|
|
65
|
+
),
|
|
66
|
+
section.variant === "tree" && ((_c = section.items) == null ? void 0 : _c.map((item) => /* @__PURE__ */ jsx(
|
|
67
|
+
NavItemRow,
|
|
68
|
+
{
|
|
69
|
+
item,
|
|
70
|
+
collapsed,
|
|
71
|
+
renderLink,
|
|
72
|
+
...onNavigate ? { onNavigate } : {}
|
|
73
|
+
},
|
|
74
|
+
item.key
|
|
75
|
+
)))
|
|
64
76
|
]
|
|
65
77
|
},
|
|
66
78
|
section.label ?? `section-${index}`
|
|
@@ -83,7 +95,9 @@ function NavGroupRows({
|
|
|
83
95
|
groupState,
|
|
84
96
|
onNavigate
|
|
85
97
|
}) {
|
|
86
|
-
var _a;
|
|
98
|
+
var _a, _b;
|
|
99
|
+
const [contextTarget, setContextTarget] = useState(null);
|
|
100
|
+
const hasChildren = group.items.length > 0 || (((_a = group.groups) == null ? void 0 : _a.length) ?? 0) > 0;
|
|
87
101
|
const fallback = group.defaultCollapsed ?? false;
|
|
88
102
|
const collapsed = !group.forceExpanded && groupState.isCollapsed(group.key, fallback);
|
|
89
103
|
const toggle = () => groupState.toggle(group.key, fallback);
|
|
@@ -94,52 +108,118 @@ function NavGroupRows({
|
|
|
94
108
|
...typeof group.icon === "string" ? { name: group.icon } : { icon: group.icon }
|
|
95
109
|
}
|
|
96
110
|
) });
|
|
111
|
+
if (!hasChildren && !group.item) {
|
|
112
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
113
|
+
/* @__PURE__ */ jsxs(
|
|
114
|
+
"div",
|
|
115
|
+
{
|
|
116
|
+
ref: setContextTarget,
|
|
117
|
+
className: "flex items-center gap-2.5 rounded-md px-density-2 py-1.5 text-[13px] text-sidebar-foreground",
|
|
118
|
+
children: [
|
|
119
|
+
groupIcon,
|
|
120
|
+
/* @__PURE__ */ jsx("span", { className: "flex-1 truncate text-left", children: group.label }),
|
|
121
|
+
group.badge
|
|
122
|
+
]
|
|
123
|
+
}
|
|
124
|
+
),
|
|
125
|
+
group.contextMenu && /* @__PURE__ */ jsx(
|
|
126
|
+
ContextMenu,
|
|
127
|
+
{
|
|
128
|
+
contextTarget,
|
|
129
|
+
menuLabel: group.contextMenuLabel ?? `${group.label} actions`,
|
|
130
|
+
menuItems: group.contextMenu
|
|
131
|
+
}
|
|
132
|
+
)
|
|
133
|
+
] });
|
|
134
|
+
}
|
|
135
|
+
if (!hasChildren && group.item) {
|
|
136
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
|
|
137
|
+
/* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsx(
|
|
138
|
+
NavItemRow,
|
|
139
|
+
{
|
|
140
|
+
item: group.item,
|
|
141
|
+
collapsed: false,
|
|
142
|
+
renderLink,
|
|
143
|
+
...onNavigate ? { onNavigate } : {}
|
|
144
|
+
}
|
|
145
|
+
) }),
|
|
146
|
+
group.badge
|
|
147
|
+
] });
|
|
148
|
+
}
|
|
97
149
|
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
|
|
98
150
|
group.item ? (
|
|
99
151
|
// Folder AND leaf: the link and the disclosure are siblings. Nesting a
|
|
100
152
|
// button inside the anchor would be invalid DOM and would make the
|
|
101
153
|
// click target ambiguous.
|
|
102
|
-
/* @__PURE__ */ jsxs(
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
),
|
|
154
|
+
/* @__PURE__ */ jsxs(
|
|
155
|
+
"div",
|
|
156
|
+
{
|
|
157
|
+
ref: setContextTarget,
|
|
158
|
+
className: "group/nav flex items-center gap-1",
|
|
159
|
+
children: [
|
|
160
|
+
/* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsx(
|
|
161
|
+
NavItemRow,
|
|
162
|
+
{
|
|
163
|
+
item: group.item,
|
|
164
|
+
collapsed: false,
|
|
165
|
+
renderLink,
|
|
166
|
+
...onNavigate ? { onNavigate } : {}
|
|
167
|
+
}
|
|
168
|
+
) }),
|
|
169
|
+
group.badge,
|
|
170
|
+
/* @__PURE__ */ jsx(
|
|
171
|
+
"button",
|
|
172
|
+
{
|
|
173
|
+
type: "button",
|
|
174
|
+
onClick: toggle,
|
|
175
|
+
"aria-expanded": !collapsed,
|
|
176
|
+
"aria-label": `${collapsed ? "Expand" : "Collapse"} ${group.label}`,
|
|
177
|
+
className: "shrink-0 rounded-md px-1.5 py-1.5 text-sidebar-foreground/55 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
|
|
178
|
+
children: chevron
|
|
179
|
+
}
|
|
180
|
+
),
|
|
181
|
+
group.contextMenu && /* @__PURE__ */ jsx(
|
|
182
|
+
ContextMenu,
|
|
183
|
+
{
|
|
184
|
+
contextTarget,
|
|
185
|
+
menuLabel: group.contextMenuLabel ?? `${group.label} folder actions`,
|
|
186
|
+
menuItems: group.contextMenu
|
|
187
|
+
}
|
|
188
|
+
)
|
|
189
|
+
]
|
|
190
|
+
}
|
|
191
|
+
)
|
|
192
|
+
) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
193
|
+
/* @__PURE__ */ jsxs(
|
|
194
|
+
"button",
|
|
195
|
+
{
|
|
196
|
+
ref: setContextTarget,
|
|
197
|
+
type: "button",
|
|
198
|
+
onClick: toggle,
|
|
199
|
+
"aria-expanded": !collapsed,
|
|
200
|
+
className: cn(
|
|
201
|
+
"flex items-center gap-2.5 rounded-md px-density-2 py-1.5 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
|
|
202
|
+
variant === "tree" ? "text-[13px] text-sidebar-foreground" : "text-[11px] font-semibold uppercase tracking-[0.14em] text-sidebar-foreground/55"
|
|
203
|
+
),
|
|
204
|
+
children: [
|
|
205
|
+
groupIcon,
|
|
206
|
+
/* @__PURE__ */ jsx("span", { className: "flex-1 truncate text-left", children: group.label }),
|
|
207
|
+
group.badge,
|
|
208
|
+
chevron
|
|
209
|
+
]
|
|
210
|
+
}
|
|
211
|
+
),
|
|
212
|
+
group.contextMenu && /* @__PURE__ */ jsx(
|
|
213
|
+
ContextMenu,
|
|
214
|
+
{
|
|
215
|
+
contextTarget,
|
|
216
|
+
menuLabel: group.contextMenuLabel ?? `${group.label} actions`,
|
|
217
|
+
menuItems: group.contextMenu
|
|
218
|
+
}
|
|
219
|
+
)
|
|
220
|
+
] }),
|
|
141
221
|
!collapsed && /* @__PURE__ */ jsxs("div", { className: "ml-2 mt-0.5 flex flex-col gap-0.5 border-l border-sidebar-border pl-2", children: [
|
|
142
|
-
group.items.map((item) => /* @__PURE__ */ jsx(
|
|
222
|
+
variant !== "tree" && group.items.map((item) => /* @__PURE__ */ jsx(
|
|
143
223
|
NavItemRow,
|
|
144
224
|
{
|
|
145
225
|
item,
|
|
@@ -149,7 +229,7 @@ function NavGroupRows({
|
|
|
149
229
|
},
|
|
150
230
|
item.key
|
|
151
231
|
)),
|
|
152
|
-
(
|
|
232
|
+
(_b = group.groups) == null ? void 0 : _b.map((child) => /* @__PURE__ */ jsx(
|
|
153
233
|
NavGroupRows,
|
|
154
234
|
{
|
|
155
235
|
group: child,
|
|
@@ -159,6 +239,16 @@ function NavGroupRows({
|
|
|
159
239
|
...onNavigate ? { onNavigate } : {}
|
|
160
240
|
},
|
|
161
241
|
child.key
|
|
242
|
+
)),
|
|
243
|
+
variant === "tree" && group.items.map((item) => /* @__PURE__ */ jsx(
|
|
244
|
+
NavItemRow,
|
|
245
|
+
{
|
|
246
|
+
item,
|
|
247
|
+
collapsed: false,
|
|
248
|
+
renderLink,
|
|
249
|
+
...onNavigate ? { onNavigate } : {}
|
|
250
|
+
},
|
|
251
|
+
item.key
|
|
162
252
|
))
|
|
163
253
|
] })
|
|
164
254
|
] });
|
|
@@ -169,6 +259,7 @@ function NavItemRow({
|
|
|
169
259
|
renderLink,
|
|
170
260
|
onNavigate
|
|
171
261
|
}) {
|
|
262
|
+
const [contextTarget, setContextTarget] = useState(null);
|
|
172
263
|
const className = cn(
|
|
173
264
|
"flex w-full items-center gap-2.5 rounded-md px-density-2 py-1.5 text-left text-[13px] text-sidebar-foreground transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
|
|
174
265
|
collapsed && "justify-center px-0",
|
|
@@ -186,7 +277,7 @@ function NavItemRow({
|
|
|
186
277
|
] });
|
|
187
278
|
const title = collapsed && typeof item.label === "string" ? item.label : void 0;
|
|
188
279
|
if (item.external) {
|
|
189
|
-
|
|
280
|
+
const externalLink = /* @__PURE__ */ jsx(
|
|
190
281
|
"a",
|
|
191
282
|
{
|
|
192
283
|
href: item.to,
|
|
@@ -198,6 +289,18 @@ function NavItemRow({
|
|
|
198
289
|
children
|
|
199
290
|
}
|
|
200
291
|
);
|
|
292
|
+
if (!item.contextMenu) return externalLink;
|
|
293
|
+
return /* @__PURE__ */ jsxs("div", { ref: setContextTarget, className: "w-full", children: [
|
|
294
|
+
externalLink,
|
|
295
|
+
/* @__PURE__ */ jsx(
|
|
296
|
+
ContextMenu,
|
|
297
|
+
{
|
|
298
|
+
contextTarget,
|
|
299
|
+
menuLabel: item.contextMenuLabel ?? `${String(item.label)} actions`,
|
|
300
|
+
menuItems: item.contextMenu
|
|
301
|
+
}
|
|
302
|
+
)
|
|
303
|
+
] });
|
|
201
304
|
}
|
|
202
305
|
const link = renderLink({
|
|
203
306
|
key: item.key,
|
|
@@ -206,8 +309,26 @@ function NavItemRow({
|
|
|
206
309
|
children,
|
|
207
310
|
...title ? { title } : {}
|
|
208
311
|
});
|
|
209
|
-
if (!onNavigate) return link;
|
|
210
|
-
return /* @__PURE__ */
|
|
312
|
+
if (!onNavigate && !item.contextMenu) return link;
|
|
313
|
+
return /* @__PURE__ */ jsxs(
|
|
314
|
+
"div",
|
|
315
|
+
{
|
|
316
|
+
ref: item.contextMenu ? setContextTarget : void 0,
|
|
317
|
+
className: "w-full",
|
|
318
|
+
...onNavigate ? { onClick: onNavigate } : {},
|
|
319
|
+
children: [
|
|
320
|
+
link,
|
|
321
|
+
item.contextMenu && /* @__PURE__ */ jsx(
|
|
322
|
+
ContextMenu,
|
|
323
|
+
{
|
|
324
|
+
contextTarget,
|
|
325
|
+
menuLabel: item.contextMenuLabel ?? `${String(item.label)} actions`,
|
|
326
|
+
menuItems: item.contextMenu
|
|
327
|
+
}
|
|
328
|
+
)
|
|
329
|
+
]
|
|
330
|
+
}
|
|
331
|
+
);
|
|
211
332
|
}
|
|
212
333
|
export {
|
|
213
334
|
NavSections
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppShell.nav.js","sources":["../../src/layout/AppShell.nav.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Icon } from \"../data/Icon\";\nimport { cn } from \"../lib/utils\";\nimport type { RenderLink } from \"../rpc/EndpointList\";\nimport { useRouter } from \"../rpc/router\";\nimport type {\n AppShellNavGroup,\n AppShellNavItem,\n AppShellNavSection,\n} from \"./AppShell\";\n\n// Per-group collapsed state. Owned by AppShell (see `useGroupCollapsed` there)\n// and passed down, because AppShell renders NavSections twice — the desktop\n// rail and the mobile drawer — and per-render state behind one storage key\n// would desync: the rail stays mounted while the drawer is open, so a drawer\n// toggle would write localStorage the rail never reads back.\nexport interface GroupState {\n isCollapsed: (key: string, fallback: boolean) => boolean;\n toggle: (key: string, fallback: boolean) => void;\n}\n\nexport function NavSections({\n sections,\n collapsed,\n groupState,\n onNavigate,\n}: {\n sections: AppShellNavSection[];\n collapsed: boolean;\n groupState: GroupState;\n onNavigate?: () => void;\n}) {\n const { renderLink } = useRouter();\n return (\n <nav\n className={cn(\n \"flex flex-col gap-0.5\",\n collapsed ? \"px-2\" : \"px-density-2\",\n )}\n >\n {sections.map((section, index) => (\n <div\n key={section.label ?? `section-${index}`}\n className=\"flex flex-col\"\n >\n {section.label &&\n (collapsed ? (\n <div className=\"mx-2 mb-1 mt-3 border-t border-sidebar-border first:mt-1\" />\n ) : (\n <div className=\"mb-0.5 mt-3 px-density-2 text-[10px] font-semibold uppercase tracking-[0.18em] text-sidebar-foreground/55 first:mt-1\">\n {section.label}\n </div>\n ))}\n {section.items?.map((item) => (\n <NavItemRow\n key={item.key}\n item={item}\n collapsed={collapsed}\n renderLink={renderLink}\n {...(onNavigate ? { onNavigate } : {})}\n />\n ))}\n {section.groups?.map((group) =>\n // A collapsed rail has no room for group headings, so the whole\n // subtree flattens into the icon strip rather than hiding behind\n // toggles the user cannot see.\n collapsed\n ? flattenGroup(group).map((item) => (\n <NavItemRow\n key={item.key}\n item={item}\n collapsed\n renderLink={renderLink}\n {...(onNavigate ? { onNavigate } : {})}\n />\n ))\n : (\n <NavGroupRows\n key={group.key}\n group={group}\n variant={section.variant ?? \"list\"}\n renderLink={renderLink}\n groupState={groupState}\n {...(onNavigate ? { onNavigate } : {})}\n />\n ),\n )}\n </div>\n ))}\n </nav>\n );\n}\n\n// flattenGroup collects every destination in a group's subtree — its own row\n// (when it has one), its items, and everything under its nested groups.\nfunction flattenGroup(group: AppShellNavGroup): AppShellNavItem[] {\n return [\n ...(group.item ? [group.item] : []),\n ...group.items,\n ...(group.groups ?? []).flatMap(flattenGroup),\n ];\n}\n\nfunction NavGroupRows({\n group,\n variant,\n renderLink,\n groupState,\n onNavigate,\n}: {\n group: AppShellNavGroup;\n variant: \"list\" | \"tree\";\n renderLink: RenderLink;\n groupState: GroupState;\n onNavigate?: () => void;\n}) {\n const fallback = group.defaultCollapsed ?? false;\n const collapsed =\n !group.forceExpanded && groupState.isCollapsed(group.key, fallback);\n const toggle = () => groupState.toggle(group.key, fallback);\n const chevron = (\n <span aria-hidden className=\"text-[0.65rem] opacity-60\">\n {collapsed ? \"▸\" : \"▾\"}\n </span>\n );\n const groupIcon = group.icon && (\n <span className=\"flex h-4 w-4 shrink-0 items-center justify-center\">\n <Icon\n {...(typeof group.icon === \"string\"\n ? { name: group.icon }\n : { icon: group.icon })}\n />\n </span>\n );\n return (\n <div className=\"flex flex-col\">\n {group.item ? (\n // Folder AND leaf: the link and the disclosure are siblings. Nesting a\n // button inside the anchor would be invalid DOM and would make the\n // click target ambiguous.\n <div className=\"group/nav flex items-center gap-1\">\n <div className=\"min-w-0 flex-1\">\n <NavItemRow\n item={group.item}\n collapsed={false}\n renderLink={renderLink}\n {...(onNavigate ? { onNavigate } : {})}\n />\n </div>\n <button\n type=\"button\"\n onClick={toggle}\n aria-expanded={!collapsed}\n aria-label={`${collapsed ? \"Expand\" : \"Collapse\"} ${group.label}`}\n className=\"shrink-0 rounded-md px-1.5 py-1.5 text-sidebar-foreground/55 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\"\n >\n {chevron}\n </button>\n </div>\n ) : (\n <button\n type=\"button\"\n onClick={toggle}\n aria-expanded={!collapsed}\n className={cn(\n \"flex items-center gap-2.5 rounded-md px-density-2 py-1.5 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n variant === \"tree\"\n ? \"text-[13px] text-sidebar-foreground\"\n : \"text-[11px] font-semibold uppercase tracking-[0.14em] text-sidebar-foreground/55\",\n )}\n >\n {groupIcon}\n <span className=\"flex-1 truncate text-left\">{group.label}</span>\n {chevron}\n </button>\n )}\n {!collapsed && (\n <div className=\"ml-2 mt-0.5 flex flex-col gap-0.5 border-l border-sidebar-border pl-2\">\n {group.items.map((item) => (\n <NavItemRow\n key={item.key}\n item={item}\n collapsed={false}\n renderLink={renderLink}\n {...(onNavigate ? { onNavigate } : {})}\n />\n ))}\n {group.groups?.map((child) => (\n <NavGroupRows\n key={child.key}\n group={child}\n variant={variant}\n renderLink={renderLink}\n groupState={groupState}\n {...(onNavigate ? { onNavigate } : {})}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n\nfunction NavItemRow({\n item,\n collapsed,\n renderLink,\n onNavigate,\n}: {\n item: AppShellNavItem;\n collapsed: boolean;\n renderLink: RenderLink;\n onNavigate?: () => void;\n}) {\n const className = cn(\n \"flex w-full items-center gap-2.5 rounded-md px-density-2 py-1.5 text-left text-[13px] text-sidebar-foreground transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n collapsed && \"justify-center px-0\",\n item.active && \"bg-sidebar-accent font-medium text-sidebar-primary\",\n );\n const children: ReactNode = (\n <>\n {item.icon && (\n <span className=\"flex h-4 w-4 shrink-0 items-center justify-center\">\n <Icon\n {...(typeof item.icon === \"string\"\n ? { name: item.icon }\n : { icon: item.icon })}\n />\n </span>\n )}\n {!collapsed && <span className=\"flex-1 truncate\">{item.label}</span>}\n {!collapsed && item.badge}\n </>\n );\n const title =\n collapsed && typeof item.label === \"string\" ? item.label : undefined;\n\n if (item.external) {\n return (\n <a\n href={item.to}\n className={className}\n title={title}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={onNavigate}\n >\n {children}\n </a>\n );\n }\n const link = renderLink({\n key: item.key,\n to: item.to,\n className,\n children,\n ...(title ? { title } : {}),\n });\n\n if (!onNavigate) return link;\n return <div onClick={onNavigate}>{link}</div>;\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AppShell.nav.js","sources":["../../src/layout/AppShell.nav.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { Icon } from \"../data/Icon\";\nimport { cn } from \"../lib/utils\";\nimport { ContextMenu } from \"../overlay/ContextMenu\";\nimport type { RenderLink } from \"../rpc/EndpointList\";\nimport { useRouter } from \"../rpc/router\";\nimport type {\n AppShellNavGroup,\n AppShellNavItem,\n AppShellNavSection,\n} from \"./AppShell\";\n\n// Per-group collapsed state. Owned by AppShell (see `useGroupCollapsed` there)\n// and passed down, because AppShell renders NavSections twice — the desktop\n// rail and the mobile drawer — and per-render state behind one storage key\n// would desync: the rail stays mounted while the drawer is open, so a drawer\n// toggle would write localStorage the rail never reads back.\nexport interface GroupState {\n isCollapsed: (key: string, fallback: boolean) => boolean;\n toggle: (key: string, fallback: boolean) => void;\n}\n\nexport function NavSections({\n sections,\n collapsed,\n groupState,\n onNavigate,\n}: {\n sections: AppShellNavSection[];\n collapsed: boolean;\n groupState: GroupState;\n onNavigate?: () => void;\n}) {\n const { renderLink } = useRouter();\n return (\n <nav\n className={cn(\n \"flex flex-col gap-0.5\",\n collapsed ? \"px-2\" : \"px-density-2\",\n )}\n >\n {sections.map((section, index) => (\n <div\n key={section.label ?? `section-${index}`}\n className=\"flex flex-col\"\n >\n {section.label &&\n (collapsed ? (\n <div className=\"mx-2 mb-1 mt-3 border-t border-sidebar-border first:mt-1\" />\n ) : (\n <div className=\"mb-0.5 mt-3 px-density-2 text-[10px] font-semibold uppercase tracking-[0.18em] text-sidebar-foreground/55 first:mt-1\">\n {section.label}\n </div>\n ))}\n {section.variant !== \"tree\" &&\n section.items?.map((item) => (\n <NavItemRow\n key={item.key}\n item={item}\n collapsed={collapsed}\n renderLink={renderLink}\n {...(onNavigate ? { onNavigate } : {})}\n />\n ))}\n {section.groups?.map((group) =>\n // A collapsed rail has no room for group headings, so the whole\n // subtree flattens into the icon strip rather than hiding behind\n // toggles the user cannot see.\n collapsed ? (\n flattenGroup(group).map((item) => (\n <NavItemRow\n key={item.key}\n item={item}\n collapsed\n renderLink={renderLink}\n {...(onNavigate ? { onNavigate } : {})}\n />\n ))\n ) : (\n <NavGroupRows\n key={group.key}\n group={group}\n variant={section.variant ?? \"list\"}\n renderLink={renderLink}\n groupState={groupState}\n {...(onNavigate ? { onNavigate } : {})}\n />\n ),\n )}\n {section.variant === \"tree\" &&\n section.items?.map((item) => (\n <NavItemRow\n key={item.key}\n item={item}\n collapsed={collapsed}\n renderLink={renderLink}\n {...(onNavigate ? { onNavigate } : {})}\n />\n ))}\n </div>\n ))}\n </nav>\n );\n}\n\n// flattenGroup collects every destination in a group's subtree — its own row\n// (when it has one), its items, and everything under its nested groups.\nfunction flattenGroup(group: AppShellNavGroup): AppShellNavItem[] {\n return [\n ...(group.item ? [group.item] : []),\n ...group.items,\n ...(group.groups ?? []).flatMap(flattenGroup),\n ];\n}\n\nfunction NavGroupRows({\n group,\n variant,\n renderLink,\n groupState,\n onNavigate,\n}: {\n group: AppShellNavGroup;\n variant: \"list\" | \"tree\";\n renderLink: RenderLink;\n groupState: GroupState;\n onNavigate?: () => void;\n}) {\n const [contextTarget, setContextTarget] = useState<HTMLElement | null>(null);\n const hasChildren = group.items.length > 0 || (group.groups?.length ?? 0) > 0;\n const fallback = group.defaultCollapsed ?? false;\n const collapsed =\n !group.forceExpanded && groupState.isCollapsed(group.key, fallback);\n const toggle = () => groupState.toggle(group.key, fallback);\n const chevron = (\n <span aria-hidden className=\"text-[0.65rem] opacity-60\">\n {collapsed ? \"▸\" : \"▾\"}\n </span>\n );\n const groupIcon = group.icon && (\n <span className=\"flex h-4 w-4 shrink-0 items-center justify-center\">\n <Icon\n {...(typeof group.icon === \"string\"\n ? { name: group.icon }\n : { icon: group.icon })}\n />\n </span>\n );\n if (!hasChildren && !group.item) {\n return (\n <>\n <div\n ref={setContextTarget}\n className=\"flex items-center gap-2.5 rounded-md px-density-2 py-1.5 text-[13px] text-sidebar-foreground\"\n >\n {groupIcon}\n <span className=\"flex-1 truncate text-left\">{group.label}</span>\n {group.badge}\n </div>\n {group.contextMenu && (\n <ContextMenu\n contextTarget={contextTarget}\n menuLabel={group.contextMenuLabel ?? `${group.label} actions`}\n menuItems={group.contextMenu}\n />\n )}\n </>\n );\n }\n if (!hasChildren && group.item) {\n return (\n <div className=\"flex items-center gap-1\">\n <div className=\"min-w-0 flex-1\">\n <NavItemRow\n item={group.item}\n collapsed={false}\n renderLink={renderLink}\n {...(onNavigate ? { onNavigate } : {})}\n />\n </div>\n {group.badge}\n </div>\n );\n }\n return (\n <div className=\"flex flex-col\">\n {group.item ? (\n // Folder AND leaf: the link and the disclosure are siblings. Nesting a\n // button inside the anchor would be invalid DOM and would make the\n // click target ambiguous.\n <div\n ref={setContextTarget}\n className=\"group/nav flex items-center gap-1\"\n >\n <div className=\"min-w-0 flex-1\">\n <NavItemRow\n item={group.item}\n collapsed={false}\n renderLink={renderLink}\n {...(onNavigate ? { onNavigate } : {})}\n />\n </div>\n {group.badge}\n <button\n type=\"button\"\n onClick={toggle}\n aria-expanded={!collapsed}\n aria-label={`${collapsed ? \"Expand\" : \"Collapse\"} ${group.label}`}\n className=\"shrink-0 rounded-md px-1.5 py-1.5 text-sidebar-foreground/55 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\"\n >\n {chevron}\n </button>\n {group.contextMenu && (\n <ContextMenu\n contextTarget={contextTarget}\n menuLabel={\n group.contextMenuLabel ?? `${group.label} folder actions`\n }\n menuItems={group.contextMenu}\n />\n )}\n </div>\n ) : (\n <>\n <button\n ref={setContextTarget}\n type=\"button\"\n onClick={toggle}\n aria-expanded={!collapsed}\n className={cn(\n \"flex items-center gap-2.5 rounded-md px-density-2 py-1.5 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n variant === \"tree\"\n ? \"text-[13px] text-sidebar-foreground\"\n : \"text-[11px] font-semibold uppercase tracking-[0.14em] text-sidebar-foreground/55\",\n )}\n >\n {groupIcon}\n <span className=\"flex-1 truncate text-left\">{group.label}</span>\n {group.badge}\n {chevron}\n </button>\n {group.contextMenu && (\n <ContextMenu\n contextTarget={contextTarget}\n menuLabel={group.contextMenuLabel ?? `${group.label} actions`}\n menuItems={group.contextMenu}\n />\n )}\n </>\n )}\n {!collapsed && (\n <div className=\"ml-2 mt-0.5 flex flex-col gap-0.5 border-l border-sidebar-border pl-2\">\n {variant !== \"tree\" &&\n group.items.map((item) => (\n <NavItemRow\n key={item.key}\n item={item}\n collapsed={false}\n renderLink={renderLink}\n {...(onNavigate ? { onNavigate } : {})}\n />\n ))}\n {group.groups?.map((child) => (\n <NavGroupRows\n key={child.key}\n group={child}\n variant={variant}\n renderLink={renderLink}\n groupState={groupState}\n {...(onNavigate ? { onNavigate } : {})}\n />\n ))}\n {variant === \"tree\" &&\n group.items.map((item) => (\n <NavItemRow\n key={item.key}\n item={item}\n collapsed={false}\n renderLink={renderLink}\n {...(onNavigate ? { onNavigate } : {})}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n\nfunction NavItemRow({\n item,\n collapsed,\n renderLink,\n onNavigate,\n}: {\n item: AppShellNavItem;\n collapsed: boolean;\n renderLink: RenderLink;\n onNavigate?: () => void;\n}) {\n const [contextTarget, setContextTarget] = useState<HTMLElement | null>(null);\n const className = cn(\n \"flex w-full items-center gap-2.5 rounded-md px-density-2 py-1.5 text-left text-[13px] text-sidebar-foreground transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n collapsed && \"justify-center px-0\",\n item.active && \"bg-sidebar-accent font-medium text-sidebar-primary\",\n );\n const children: ReactNode = (\n <>\n {item.icon && (\n <span className=\"flex h-4 w-4 shrink-0 items-center justify-center\">\n <Icon\n {...(typeof item.icon === \"string\"\n ? { name: item.icon }\n : { icon: item.icon })}\n />\n </span>\n )}\n {!collapsed && <span className=\"flex-1 truncate\">{item.label}</span>}\n {!collapsed && item.badge}\n </>\n );\n const title =\n collapsed && typeof item.label === \"string\" ? item.label : undefined;\n\n if (item.external) {\n const externalLink = (\n <a\n href={item.to}\n className={className}\n title={title}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={onNavigate}\n >\n {children}\n </a>\n );\n if (!item.contextMenu) return externalLink;\n return (\n <div ref={setContextTarget} className=\"w-full\">\n {externalLink}\n <ContextMenu\n contextTarget={contextTarget}\n menuLabel={item.contextMenuLabel ?? `${String(item.label)} actions`}\n menuItems={item.contextMenu}\n />\n </div>\n );\n }\n const link = renderLink({\n key: item.key,\n to: item.to,\n className,\n children,\n ...(title ? { title } : {}),\n });\n\n if (!onNavigate && !item.contextMenu) return link;\n return (\n <div\n ref={item.contextMenu ? setContextTarget : undefined}\n className=\"w-full\"\n {...(onNavigate ? { onClick: onNavigate } : {})}\n >\n {link}\n {item.contextMenu && (\n <ContextMenu\n contextTarget={contextTarget}\n menuLabel={item.contextMenuLabel ?? `${String(item.label)} actions`}\n menuItems={item.contextMenu}\n />\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,150 +1,44 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
-
const react = require("
|
|
5
|
-
const react$1 = require("react");
|
|
4
|
+
const react = require("react");
|
|
6
5
|
const Icon = require("../data/Icon.cjs");
|
|
7
6
|
const utils = require("../lib/utils.cjs");
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
const modalStack = require("./modalStack.cjs");
|
|
11
|
-
function pointReference(x, y, contextElement) {
|
|
12
|
-
return {
|
|
13
|
-
contextElement,
|
|
14
|
-
getBoundingClientRect: () => ({
|
|
15
|
-
x,
|
|
16
|
-
y,
|
|
17
|
-
top: y,
|
|
18
|
-
left: x,
|
|
19
|
-
right: x,
|
|
20
|
-
bottom: y,
|
|
21
|
-
width: 0,
|
|
22
|
-
height: 0,
|
|
23
|
-
toJSON: () => ({})
|
|
24
|
-
})
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
function CellActionsRoot({
|
|
7
|
+
const ContextMenu = require("./ContextMenu.cjs");
|
|
8
|
+
function CellActions({
|
|
28
9
|
contextTarget,
|
|
29
10
|
menuLabel,
|
|
30
11
|
menuItems,
|
|
31
12
|
children,
|
|
32
13
|
className
|
|
33
14
|
}) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
const returnFocusRef = react$1.useRef(null);
|
|
37
|
-
const elementsRef = react$1.useRef([]);
|
|
38
|
-
const floatingZ = modalStack.useFloatingZIndex();
|
|
39
|
-
const tree = react.useFloatingTree();
|
|
40
|
-
const nodeId = react.useFloatingNodeId();
|
|
41
|
-
const closeMenu = react$1.useCallback(() => {
|
|
42
|
-
setOpen(false);
|
|
43
|
-
queueMicrotask(() => {
|
|
44
|
-
var _a;
|
|
45
|
-
return (_a = returnFocusRef.current) == null ? void 0 : _a.focus({ preventScroll: true });
|
|
46
|
-
});
|
|
47
|
-
}, []);
|
|
48
|
-
const { refs, floatingStyles, context } = react.useFloating({
|
|
49
|
-
...nodeId ? { nodeId } : {},
|
|
50
|
-
open,
|
|
51
|
-
onOpenChange: (next) => next ? setOpen(true) : closeMenu(),
|
|
52
|
-
placement: "right-start",
|
|
53
|
-
middleware: [react.offset(4), react.flip({ padding: 8 }), react.shift({ padding: 8 })],
|
|
54
|
-
whileElementsMounted: react.autoUpdate
|
|
55
|
-
});
|
|
56
|
-
const dismiss = react.useDismiss(context, { escapeKey: false });
|
|
57
|
-
const role = react.useRole(context, { role: "menu" });
|
|
58
|
-
const listNavigation = react.useListNavigation(context, {
|
|
59
|
-
listRef: elementsRef,
|
|
60
|
-
activeIndex,
|
|
61
|
-
onNavigate: setActiveIndex,
|
|
62
|
-
loop: true
|
|
63
|
-
});
|
|
64
|
-
const { getFloatingProps, getItemProps } = react.useInteractions([
|
|
65
|
-
dismiss,
|
|
66
|
-
role,
|
|
67
|
-
listNavigation
|
|
68
|
-
]);
|
|
69
|
-
const openAt = react$1.useCallback(
|
|
70
|
-
(x, y) => {
|
|
71
|
-
if (!contextTarget || menuItems.length === 0) return;
|
|
72
|
-
const active = document.activeElement;
|
|
73
|
-
returnFocusRef.current = active instanceof HTMLElement ? active : contextTarget;
|
|
74
|
-
refs.setPositionReference(pointReference(x, y, contextTarget));
|
|
75
|
-
setActiveIndex(null);
|
|
76
|
-
setOpen(true);
|
|
77
|
-
},
|
|
78
|
-
[contextTarget, menuItems.length, refs]
|
|
79
|
-
);
|
|
80
|
-
react$1.useEffect(() => {
|
|
81
|
-
if (!contextTarget || menuItems.length === 0) return;
|
|
15
|
+
react.useEffect(() => {
|
|
16
|
+
if (!contextTarget) return;
|
|
82
17
|
contextTarget.classList.add("group/cell-actions");
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
openAt(event.clientX, event.clientY);
|
|
87
|
-
};
|
|
88
|
-
const onKeyDown = (event) => {
|
|
89
|
-
if (event.key !== "ContextMenu" && !(event.key === "F10" && event.shiftKey)) return;
|
|
90
|
-
event.preventDefault();
|
|
91
|
-
event.stopPropagation();
|
|
92
|
-
const rect = contextTarget.getBoundingClientRect();
|
|
93
|
-
openAt(rect.left + 8, rect.top + Math.min(rect.height, 24));
|
|
94
|
-
};
|
|
95
|
-
contextTarget.addEventListener("contextmenu", onContextMenu);
|
|
96
|
-
contextTarget.addEventListener("keydown", onKeyDown);
|
|
97
|
-
return () => {
|
|
98
|
-
contextTarget.classList.remove("group/cell-actions");
|
|
99
|
-
contextTarget.removeEventListener("contextmenu", onContextMenu);
|
|
100
|
-
contextTarget.removeEventListener("keydown", onKeyDown);
|
|
101
|
-
};
|
|
102
|
-
}, [contextTarget, menuItems.length, openAt]);
|
|
103
|
-
react$1.useEffect(() => {
|
|
104
|
-
if (!tree) return;
|
|
105
|
-
tree.events.on("click", closeMenu);
|
|
106
|
-
return () => tree.events.off("click", closeMenu);
|
|
107
|
-
}, [closeMenu, tree]);
|
|
108
|
-
modalStack.useEscapeLayer(open, closeMenu);
|
|
109
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(react.FloatingNode, { id: nodeId, children: [
|
|
18
|
+
return () => contextTarget.classList.remove("group/cell-actions");
|
|
19
|
+
}, [contextTarget]);
|
|
20
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
110
21
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
111
22
|
"span",
|
|
112
23
|
{
|
|
113
|
-
className: utils.cn(
|
|
24
|
+
className: utils.cn(
|
|
25
|
+
"ms-1 inline-flex items-center gap-0.5 align-middle",
|
|
26
|
+
className
|
|
27
|
+
),
|
|
114
28
|
contentEditable: false,
|
|
115
29
|
children
|
|
116
30
|
}
|
|
117
31
|
),
|
|
118
|
-
|
|
119
|
-
|
|
32
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
33
|
+
ContextMenu.ContextMenu,
|
|
120
34
|
{
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
style: { ...floatingStyles, zIndex: floatingZ },
|
|
125
|
-
className: dropdownMenuContext.MENU_POPOVER_CLASS,
|
|
126
|
-
...getFloatingProps(),
|
|
127
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
128
|
-
dropdownMenuContext.MenuContext.Provider,
|
|
129
|
-
{
|
|
130
|
-
value: {
|
|
131
|
-
getItemProps,
|
|
132
|
-
activeIndex,
|
|
133
|
-
setActiveIndex,
|
|
134
|
-
setHasFocusInside: () => {
|
|
135
|
-
},
|
|
136
|
-
isOpen: open
|
|
137
|
-
},
|
|
138
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(react.FloatingList, { elementsRef, children: /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuSubmenu.MenuItemList, { items: menuItems }) })
|
|
139
|
-
}
|
|
140
|
-
)
|
|
35
|
+
contextTarget,
|
|
36
|
+
menuLabel,
|
|
37
|
+
menuItems
|
|
141
38
|
}
|
|
142
|
-
)
|
|
39
|
+
)
|
|
143
40
|
] });
|
|
144
41
|
}
|
|
145
|
-
function CellActions(props) {
|
|
146
|
-
return /* @__PURE__ */ jsxRuntime.jsx(react.FloatingTree, { children: /* @__PURE__ */ jsxRuntime.jsx(CellActionsRoot, { ...props }) });
|
|
147
|
-
}
|
|
148
42
|
function CellActionButton({
|
|
149
43
|
label,
|
|
150
44
|
icon,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CellActions.cjs","sources":["../../src/overlay/CellActions.tsx"],"sourcesContent":["import {\n autoUpdate,\n flip,\n FloatingFocusManager,\n FloatingList,\n FloatingNode,\n FloatingPortal,\n FloatingTree,\n offset,\n shift,\n useDismiss,\n useFloating,\n useFloatingNodeId,\n useFloatingTree,\n useInteractions,\n useListNavigation,\n useRole,\n type VirtualElement,\n} from \"@floating-ui/react\";\nimport {\n useCallback,\n useEffect,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { Icon, type StaticIconComponent } from \"../data/Icon\";\nimport { cn } from \"../lib/utils\";\nimport type { DropdownMenuItem } from \"./DropdownMenu\";\nimport { MenuItemList } from \"./DropdownMenuSubmenu\";\nimport { MENU_POPOVER_CLASS, MenuContext } from \"./dropdownMenuContext\";\nimport { useEscapeLayer, useFloatingZIndex } from \"./modalStack\";\n\nexport type CellActionsProps = {\n contextTarget: HTMLElement | null;\n menuLabel: string;\n menuItems: DropdownMenuItem[];\n children: ReactNode;\n className?: string;\n};\n\nexport type CellActionButtonProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"children\" | \"onClick\"\n> & {\n label: string;\n icon: StaticIconComponent;\n onSelect: () => void;\n};\n\nfunction pointReference(\n x: number,\n y: number,\n contextElement: HTMLElement,\n): VirtualElement {\n return {\n contextElement,\n getBoundingClientRect: () => ({\n x,\n y,\n top: y,\n left: x,\n right: x,\n bottom: y,\n width: 0,\n height: 0,\n toJSON: () => ({}),\n }),\n };\n}\n\nfunction CellActionsRoot({\n contextTarget,\n menuLabel,\n menuItems,\n children,\n className,\n}: CellActionsProps) {\n const [open, setOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState<number | null>(null);\n const returnFocusRef = useRef<HTMLElement | null>(null);\n const elementsRef = useRef<Array<HTMLElement | null>>([]);\n const floatingZ = useFloatingZIndex();\n const tree = useFloatingTree();\n const nodeId = useFloatingNodeId();\n\n const closeMenu = useCallback(() => {\n setOpen(false);\n queueMicrotask(() => returnFocusRef.current?.focus({ preventScroll: true }));\n }, []);\n\n const { refs, floatingStyles, context } = useFloating<HTMLDivElement>({\n ...(nodeId ? { nodeId } : {}),\n open,\n onOpenChange: (next) => (next ? setOpen(true) : closeMenu()),\n placement: \"right-start\",\n middleware: [offset(4), flip({ padding: 8 }), shift({ padding: 8 })],\n whileElementsMounted: autoUpdate,\n });\n\n const dismiss = useDismiss(context, { escapeKey: false });\n const role = useRole(context, { role: \"menu\" });\n const listNavigation = useListNavigation(context, {\n listRef: elementsRef,\n activeIndex,\n onNavigate: setActiveIndex,\n loop: true,\n });\n const { getFloatingProps, getItemProps } = useInteractions([\n dismiss,\n role,\n listNavigation,\n ]);\n\n const openAt = useCallback(\n (x: number, y: number) => {\n if (!contextTarget || menuItems.length === 0) return;\n const active = document.activeElement;\n returnFocusRef.current = active instanceof HTMLElement ? active : contextTarget;\n refs.setPositionReference(pointReference(x, y, contextTarget));\n setActiveIndex(null);\n setOpen(true);\n },\n [contextTarget, menuItems.length, refs],\n );\n\n useEffect(() => {\n if (!contextTarget || menuItems.length === 0) return;\n contextTarget.classList.add(\"group/cell-actions\");\n\n const onContextMenu = (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n openAt(event.clientX, event.clientY);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"ContextMenu\" && !(event.key === \"F10\" && event.shiftKey)) return;\n event.preventDefault();\n event.stopPropagation();\n const rect = contextTarget.getBoundingClientRect();\n openAt(rect.left + 8, rect.top + Math.min(rect.height, 24));\n };\n\n contextTarget.addEventListener(\"contextmenu\", onContextMenu);\n contextTarget.addEventListener(\"keydown\", onKeyDown);\n return () => {\n contextTarget.classList.remove(\"group/cell-actions\");\n contextTarget.removeEventListener(\"contextmenu\", onContextMenu);\n contextTarget.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [contextTarget, menuItems.length, openAt]);\n\n useEffect(() => {\n if (!tree) return;\n tree.events.on(\"click\", closeMenu);\n return () => tree.events.off(\"click\", closeMenu);\n }, [closeMenu, tree]);\n\n useEscapeLayer(open, closeMenu);\n\n return (\n <FloatingNode id={nodeId}>\n <span\n className={cn(\"ms-1 inline-flex items-center gap-0.5 align-middle\", className)}\n contentEditable={false}\n >\n {children}\n </span>\n {open && (\n <FloatingPortal>\n <FloatingFocusManager context={context} modal={false} returnFocus={false}>\n <div\n ref={refs.setFloating}\n role=\"menu\"\n aria-label={menuLabel}\n style={{ ...floatingStyles, zIndex: floatingZ }}\n className={MENU_POPOVER_CLASS}\n {...getFloatingProps()}\n >\n <MenuContext.Provider\n value={{\n getItemProps,\n activeIndex,\n setActiveIndex,\n setHasFocusInside: () => {},\n isOpen: open,\n }}\n >\n <FloatingList elementsRef={elementsRef}>\n <MenuItemList items={menuItems} />\n </FloatingList>\n </MenuContext.Provider>\n </div>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </FloatingNode>\n );\n}\n\nexport function CellActions(props: CellActionsProps) {\n return (\n <FloatingTree>\n <CellActionsRoot {...props} />\n </FloatingTree>\n );\n}\n\nexport function CellActionButton({\n label,\n icon,\n onSelect,\n className,\n title = label,\n onMouseDown,\n ...props\n}: CellActionButtonProps) {\n return (\n <button\n {...props}\n type=\"button\"\n title={title}\n aria-label={label}\n className={cn(\n \"inline-flex size-5 items-center justify-center rounded-full p-1 text-muted-foreground opacity-70 transition-colors transition-opacity hover:bg-primary/10 hover:text-primary hover:opacity-100 focus-visible:bg-primary/10 focus-visible:text-primary focus-visible:opacity-100 focus-visible:outline-none group-hover/cell-actions:opacity-95\",\n className,\n )}\n onMouseDown={(event) => {\n event.preventDefault();\n onMouseDown?.(event);\n }}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n onSelect();\n }}\n >\n <Icon icon={icon} className=\"text-sm\" />\n </button>\n );\n}\n"],"names":["useState","useRef","useFloatingZIndex","useFloatingTree","useFloatingNodeId","useCallback","useFloating","offset","flip","shift","autoUpdate","useDismiss","useRole","useListNavigation","useInteractions","useEffect","useEscapeLayer","jsxs","FloatingNode","jsx","cn","FloatingPortal","FloatingFocusManager","MENU_POPOVER_CLASS","MenuContext","FloatingList","MenuItemList","FloatingTree","Icon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CellActions.cjs","sources":["../../src/overlay/CellActions.tsx"],"sourcesContent":["import { useEffect, type ButtonHTMLAttributes, type ReactNode } from \"react\";\nimport { Icon, type StaticIconComponent } from \"../data/Icon\";\nimport { cn } from \"../lib/utils\";\nimport type { DropdownMenuItem } from \"./DropdownMenu\";\nimport { ContextMenu } from \"./ContextMenu\";\n\nexport type CellActionsProps = {\n contextTarget: HTMLElement | null;\n menuLabel: string;\n menuItems: DropdownMenuItem[];\n children: ReactNode;\n className?: string;\n};\n\nexport type CellActionButtonProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"children\" | \"onClick\"\n> & {\n label: string;\n icon: StaticIconComponent;\n onSelect: () => void;\n};\n\nexport function CellActions({\n contextTarget,\n menuLabel,\n menuItems,\n children,\n className,\n}: CellActionsProps) {\n useEffect(() => {\n if (!contextTarget) return;\n contextTarget.classList.add(\"group/cell-actions\");\n return () => contextTarget.classList.remove(\"group/cell-actions\");\n }, [contextTarget]);\n\n return (\n <>\n <span\n className={cn(\n \"ms-1 inline-flex items-center gap-0.5 align-middle\",\n className,\n )}\n contentEditable={false}\n >\n {children}\n </span>\n <ContextMenu\n contextTarget={contextTarget}\n menuLabel={menuLabel}\n menuItems={menuItems}\n />\n </>\n );\n}\n\nexport function CellActionButton({\n label,\n icon,\n onSelect,\n className,\n title = label,\n onMouseDown,\n ...props\n}: CellActionButtonProps) {\n return (\n <button\n {...props}\n type=\"button\"\n title={title}\n aria-label={label}\n className={cn(\n \"inline-flex size-5 items-center justify-center rounded-full p-1 text-muted-foreground opacity-70 transition-colors transition-opacity hover:bg-primary/10 hover:text-primary hover:opacity-100 focus-visible:bg-primary/10 focus-visible:text-primary focus-visible:opacity-100 focus-visible:outline-none group-hover/cell-actions:opacity-95\",\n className,\n )}\n onMouseDown={(event) => {\n event.preventDefault();\n onMouseDown?.(event);\n }}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n onSelect();\n }}\n >\n <Icon icon={icon} className=\"text-sm\" />\n </button>\n );\n}\n"],"names":["useEffect","jsxs","Fragment","jsx","cn","ContextMenu","Icon"],"mappings":";;;;;;;AAuBO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAqB;AACnBA,QAAAA,UAAU,MAAM;AACd,QAAI,CAAC,cAAe;AACpB,kBAAc,UAAU,IAAI,oBAAoB;AAChD,WAAO,MAAM,cAAc,UAAU,OAAO,oBAAoB;AAAA,EAClE,GAAG,CAAC,aAAa,CAAC;AAElB,SACEC,2BAAAA,KAAAC,qBAAA,EACE,UAAA;AAAA,IAAAC,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWC,MAAAA;AAAAA,UACT;AAAA,UACA;AAAA,QAAA;AAAA,QAEF,iBAAiB;AAAA,QAEhB;AAAA,MAAA;AAAA,IAAA;AAAA,IAEHD,2BAAAA;AAAAA,MAACE,YAAAA;AAAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AAEO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACL,GAA0B;AACxB,SACEF,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACJ,MAAK;AAAA,MACL;AAAA,MACA,cAAY;AAAA,MACZ,WAAWC,MAAAA;AAAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAEF,aAAa,CAAC,UAAU;AACtB,cAAM,eAAA;AACN,mDAAc;AAAA,MAChB;AAAA,MACA,SAAS,CAAC,UAAU;AAClB,cAAM,eAAA;AACN,cAAM,gBAAA;AACN,iBAAA;AAAA,MACF;AAAA,MAEA,UAAAD,2BAAAA,IAACG,KAAAA,MAAA,EAAK,MAAY,WAAU,UAAA,CAAU;AAAA,IAAA;AAAA,EAAA;AAG5C;;;"}
|
|
@@ -13,6 +13,6 @@ export type CellActionButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>
|
|
|
13
13
|
icon: StaticIconComponent;
|
|
14
14
|
onSelect: () => void;
|
|
15
15
|
};
|
|
16
|
-
export declare function CellActions(
|
|
16
|
+
export declare function CellActions({ contextTarget, menuLabel, menuItems, children, className, }: CellActionsProps): import("react/jsx-runtime").JSX.Element;
|
|
17
17
|
export declare function CellActionButton({ label, icon, onSelect, className, title, onMouseDown, ...props }: CellActionButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
18
18
|
//# sourceMappingURL=CellActions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CellActions.d.ts","sourceRoot":"","sources":["../../src/overlay/CellActions.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CellActions.d.ts","sourceRoot":"","sources":["../../src/overlay/CellActions.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,oBAAoB,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC7E,OAAO,EAAQ,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGvD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,aAAa,EAAE,WAAW,GAAG,IAAI,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,IAAI,CACtC,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,UAAU,GAAG,SAAS,CACvB,GAAG;IACF,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAC1B,aAAa,EACb,SAAS,EACT,SAAS,EACT,QAAQ,EACR,SAAS,GACV,EAAE,gBAAgB,2CAyBlB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,KAAa,EACb,WAAW,EACX,GAAG,KAAK,EACT,EAAE,qBAAqB,2CAwBvB"}
|