@flanksource/clicky-ui 0.3.25 → 0.3.27
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/FixtureEditor/fixture-frontmatter.cjs +4 -0
- package/dist/data/FixtureEditor/fixture-frontmatter.cjs.map +1 -1
- package/dist/data/FixtureEditor/fixture-frontmatter.d.ts.map +1 -1
- package/dist/data/FixtureEditor/fixture-frontmatter.js +4 -0
- package/dist/data/FixtureEditor/fixture-frontmatter.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/PromptRunEditor/index.cjs +2 -3
- package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.js +2 -3
- package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
- package/dist/data/ai/PromptRunEditor/model.cjs +1 -0
- package/dist/data/ai/PromptRunEditor/model.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/model.d.ts +1 -1
- package/dist/data/ai/PromptRunEditor/model.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/model.js +1 -0
- package/dist/data/ai/PromptRunEditor/model.js.map +1 -1
- package/dist/data/ai/RuntimeModePicker.cjs +11 -9
- package/dist/data/ai/RuntimeModePicker.cjs.map +1 -1
- package/dist/data/ai/RuntimeModePicker.d.ts.map +1 -1
- package/dist/data/ai/RuntimeModePicker.js +12 -10
- package/dist/data/ai/RuntimeModePicker.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +5 -0
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +5 -0
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.cjs +4 -0
- package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts +2 -0
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.js +4 -0
- package/dist/data/ai/SpecRuntimeEditor.model.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 +4 -2
- 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 +4 -2
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/Chat.runtime.cjs +14 -3
- package/dist/data/chat/Chat.runtime.cjs.map +1 -1
- package/dist/data/chat/Chat.runtime.d.ts.map +1 -1
- package/dist/data/chat/Chat.runtime.js +15 -4
- package/dist/data/chat/Chat.runtime.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 +22 -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/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/runtime/RuntimeBar.cjs +26 -41
- package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBar.js +28 -43
- package/dist/data/runtime/RuntimeBar.js.map +1 -1
- package/dist/data/runtime/RuntimeBar.model.cjs +65 -0
- package/dist/data/runtime/RuntimeBar.model.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBar.model.d.ts +11 -3
- package/dist/data/runtime/RuntimeBar.model.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBar.model.js +65 -0
- package/dist/data/runtime/RuntimeBar.model.js.map +1 -1
- package/dist/data/runtime/model-capabilities.cjs +8 -5
- package/dist/data/runtime/model-capabilities.cjs.map +1 -1
- package/dist/data/runtime/model-capabilities.d.ts +6 -1
- package/dist/data/runtime/model-capabilities.d.ts.map +1 -1
- package/dist/data/runtime/model-capabilities.js +8 -5
- package/dist/data/runtime/model-capabilities.js.map +1 -1
- package/dist/data/runtime/runtime-mode.cjs +17 -0
- package/dist/data/runtime/runtime-mode.cjs.map +1 -1
- package/dist/data/runtime/runtime-mode.d.ts +6 -0
- package/dist/data/runtime/runtime-mode.d.ts.map +1 -1
- package/dist/data/runtime/runtime-mode.js +17 -0
- package/dist/data/runtime/runtime-mode.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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profileWizardQueryStep.cjs","sources":["../../../src/profiles/wizard/profileWizardQueryStep.tsx"],"sourcesContent":["import type { QueryBrowserResult } from \"../../data/query-browser/QueryBrowser.types\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useCallback, useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport {\n browserBaseUrl,\n fetchJSON,\n mergeProviderOptions,\n queryBrowserOptionsSchema,\n useInspection,\n type BrowserDescriptor,\n} from \"../connections/connectionBrowserModel\";\nimport { ConnectionQueryWorkspace } from \"../connections/connectionQueryWorkspace\";\nimport { profileApiPath } from \"../profileApi\";\nimport { profileSamplePayload } from \"../query/profileSamplePayload\";\nimport type { EsSearch } from \"../elasticsearch/esQueryBuilderModel\";\nimport {\n profileWizardErrorMessage,\n withProfileLimits,\n type ProfileColumn,\n type ProfileWizardDraft,\n} from \"./profileWizardModel\";\nimport { supportsQueryBuilder } from \"../connections/connectionQueryWorkspaceModel\";\nimport { defaultParamValues, paramRoles } from \"../elasticsearch/esQueryBuilderForm\";\n\ntype SampleResult = QueryBrowserResult & {\n columns: ProfileColumn[];\n renderedQuery: string;\n};\n\n/** What a sample yields: the discovered column shape plus the rows it came\n * from, so the editor can preview the configured columns against real data. */\nexport type ProfileSample = {\n columns: ProfileColumn[];\n rows: Record<string, unknown>[];\n sourceDraft: ProfileWizardDraft;\n};\n\ntype ProfileWizardQueryStepProps = {\n connectionID: string;\n draft: ProfileWizardDraft;\n discovered: ProfileColumn[];\n onDraftChange: (draft: ProfileWizardDraft) => void;\n onSample: (sample: ProfileSample) => void;\n};\n\nexport function ProfileWizardQueryStep({\n connectionID,\n draft,\n discovered,\n onDraftChange,\n onSample,\n}: ProfileWizardQueryStepProps) {\n const baseUrl = browserBaseUrl(connectionID);\n const descriptor = useQuery({\n queryKey: [\"profile-wizard-descriptor\", connectionID],\n queryFn: () => fetchJSON<BrowserDescriptor>(baseUrl),\n retry: 0,\n });\n const providerOptions = useMemo(\n () => ({ ...draft.provider?.options }),\n [draft.provider?.options],\n );\n const [query, setQuery] = useState(draft.query ?? \"\");\n const [liveOptions, setLiveOptions] = useState(providerOptions);\n const [catalogOptions, setCatalogOptions] = useState<Record<string, unknown>>(\n {},\n );\n const [selectedDatabase, setSelectedDatabase] = useState(\"\");\n\n // The starter query is for a source whose artifact is the query. Where the\n // workspace builds filters instead, the specification is the artifact and a\n // query seeded beside it would be the pair the server rejects.\n const rawArtifact =\n descriptor.data !== undefined && !supportsQueryBuilder(descriptor.data);\n useEffect(() => {\n if (rawArtifact && !query && descriptor.data?.defaultQuery) {\n setQuery(descriptor.data.defaultQuery);\n onDraftChange({ ...draft, query: descriptor.data.defaultQuery });\n }\n }, [descriptor.data?.defaultQuery, draft, onDraftChange, query, rawArtifact]);\n\n const explicitTargetKind = liveOptions.targetKind ?? providerOptions.targetKind;\n const inspection = useInspection({\n cacheKey: \"profile-wizard-inspection\",\n id: connectionID,\n baseUrl,\n enabled: descriptor.data?.catalog === true,\n database: selectedDatabase,\n fallbackDatabase: String(providerOptions.database ?? \"\"),\n target: String(liveOptions.index ?? providerOptions.index ?? \"\"),\n ...(typeof explicitTargetKind === \"string\"\n ? { targetKind: explicitTargetKind }\n : {}),\n });\n const browserOptions = useMemo(\n () =>\n mergeProviderOptions({\n layers: [\n descriptor.data?.initialOptions,\n providerOptions,\n catalogOptions,\n ],\n database: inspection.sqlDatabase,\n keepTargetKind: true,\n }),\n [\n catalogOptions,\n descriptor.data?.initialOptions,\n inspection.sqlDatabase,\n providerOptions,\n ],\n );\n const effectiveOptions = useCallback(\n (options: Record<string, unknown>) =>\n mergeProviderOptions({\n layers: [providerOptions, catalogOptions, options],\n database: inspection.sqlDatabase,\n }),\n [catalogOptions, inspection.sqlDatabase, providerOptions],\n );\n\n if (descriptor.isLoading) {\n return <QueryStepMessage>Loading connection browser…</QueryStepMessage>;\n }\n if (descriptor.isError) {\n return (\n <QueryStepMessage error>\n {profileWizardErrorMessage(\n descriptor.error,\n \"Unable to load this connection browser\",\n )}\n </QueryStepMessage>\n );\n }\n if (!descriptor.data) {\n return (\n <QueryStepMessage>\n This saved connection does not expose a query browser.\n </QueryStepMessage>\n );\n }\n\n return (\n <div className=\"flex min-h-[32rem] flex-1 flex-col gap-3\">\n <div className=\"flex items-center justify-between gap-4 rounded-lg border bg-muted/30 px-4 py-3\">\n <div>\n <p className=\"text-sm font-medium\">Explore the source, then run a sample</p>\n <p className=\"text-xs text-muted-foreground\">\n Sampling discovers fields without saving the profile.\n </p>\n </div>\n <span className=\"shrink-0 rounded-full bg-background px-3 py-1 text-xs font-medium text-muted-foreground\">\n {discovered.length\n ? `${discovered.length} fields discovered`\n : \"No sample yet\"}\n </span>\n </div>\n <ConnectionQueryWorkspace\n id={`profile-wizard:${connectionID}`}\n title=\"Profile query\"\n descriptor={descriptor.data}\n inspection={inspection}\n onDatabaseChange={setSelectedDatabase}\n query={query}\n options={browserOptions}\n optionsSchema={queryBrowserOptionsSchema(descriptor.data)}\n search={providerOptions.search as EsSearch | undefined}\n onSearchChange={(transition) => {\n // Built from the merged options so a delete actually removes the key\n // rather than being reinstated by a lower layer on the next merge.\n const options = effectiveOptions(liveOptions);\n if (transition.search) options.search = transition.search;\n else delete options.search;\n setQuery(transition.query);\n onDraftChange({\n ...draft,\n query: transition.query,\n provider: { ...draft.provider, options },\n });\n }}\n params={draft.params ?? []}\n onParamMappingChange={(edit) => {\n const options = effectiveOptions(liveOptions);\n options.search = edit.search;\n setQuery(\"\");\n onDraftChange({\n ...draft,\n query: \"\",\n params: edit.params,\n provider: { ...draft.provider, options },\n });\n }}\n paramValues={defaultParamValues(draft.params)}\n paramRoles={paramRoles(draft.params)}\n {...(draft.limits ? { limits: draft.limits } : {})}\n onLimitsChange={(limits) => onDraftChange(withProfileLimits(draft, limits))}\n compileBaseUrl={baseUrl}\n className=\"min-h-0 flex-1\"\n onQueryChange={(nextQuery) => {\n setQuery(nextQuery);\n onDraftChange({ ...draft, query: nextQuery });\n }}\n onOptionsChange={(options) => {\n setLiveOptions(options);\n onDraftChange({\n ...draft,\n provider: {\n ...draft.provider,\n options: effectiveOptions(options),\n },\n });\n }}\n onCatalogSelect={(node) => {\n const nextQuery = node.query ?? query;\n const nextOptions = node.options ?? {};\n setQuery(nextQuery);\n setCatalogOptions(nextOptions);\n setLiveOptions({ ...browserOptions, ...nextOptions });\n onDraftChange({\n ...draft,\n query: nextQuery,\n provider: {\n ...draft.provider,\n options: effectiveOptions({ ...browserOptions, ...nextOptions }),\n },\n });\n }}\n execute={async (request) => {\n const nextDraft = {\n ...draft,\n query: request.query,\n provider: {\n ...draft.provider,\n options: effectiveOptions(request.options),\n },\n };\n onDraftChange(nextDraft);\n const result = await fetchJSON<SampleResult>(profileApiPath(\"profile/sample\"), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(profileSamplePayload(nextDraft, request)),\n });\n onSample({\n columns: result.columns ?? [],\n rows: result.rows ?? [],\n sourceDraft: nextDraft,\n });\n return result;\n }}\n />\n </div>\n );\n}\n\nfunction QueryStepMessage({\n children,\n error = false,\n}: {\n children: ReactNode;\n error?: boolean;\n}) {\n return (\n <div\n className={`grid min-h-96 flex-1 place-items-center rounded-xl border border-dashed p-8 text-sm ${error ? \"border-destructive/40 text-destructive\" : \"text-muted-foreground\"}`}\n >\n {children}\n </div>\n );\n}\n"],"names":["browserBaseUrl","useQuery","fetchJSON","useMemo","_a","useState","supportsQueryBuilder","useEffect","useInspection","mergeProviderOptions","useCallback","jsx","profileWizardErrorMessage","jsxs","ConnectionQueryWorkspace","queryBrowserOptionsSchema","defaultParamValues","paramRoles","withProfileLimits","profileApiPath","profileSamplePayload"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"profileWizardQueryStep.cjs","sources":["../../../src/profiles/wizard/profileWizardQueryStep.tsx"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { debugCaptureHeaders } from \"../../data/debugConsoleSignal\";\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport {\n browserBaseUrl,\n fetchJSON,\n mergeProviderOptions,\n queryBrowserOptionsSchema,\n type BrowserDescriptor,\n} from \"../connections/connectionBrowserModel\";\nimport { ConnectionQueryWorkspace } from \"../connections/connectionQueryWorkspace\";\nimport { useInspection } from \"../connections/useInspection\";\nimport { profileApiPath } from \"../profileApi\";\nimport { profileSamplePayload } from \"../query/profileSamplePayload\";\nimport { lookupProfileSampleFilterValues } from \"../query/profileSampleFilterLookup\";\nimport {\n profileSampleFilterColumns,\n profileSampleQueryResult,\n type ProfileSampleResponse,\n} from \"../query/profileSampleResult\";\nimport type { EsSearch } from \"../elasticsearch/esQueryBuilderModel\";\nimport {\n profileWizardErrorMessage,\n withProfileLimits,\n type ProfileColumn,\n type ProfileWizardDraft,\n} from \"./profileWizardModel\";\nimport { supportsQueryBuilder } from \"../connections/connectionQueryWorkspaceModel\";\nimport {\n defaultParamValues,\n paramRoles,\n} from \"../elasticsearch/esQueryBuilderForm\";\n\n/** What a sample yields: the discovered column shape plus the rows it came\n * from, so the editor can preview the configured columns against real data. */\nexport type ProfileSample = {\n columns: ProfileColumn[];\n rows: Record<string, unknown>[];\n sourceDraft: ProfileWizardDraft;\n};\n\ntype ProfileWizardQueryStepProps = {\n connectionID: string;\n draft: ProfileWizardDraft;\n discovered: ProfileColumn[];\n onDraftChange: (draft: ProfileWizardDraft) => void;\n onSample: (sample: ProfileSample) => void;\n};\n\nexport function ProfileWizardQueryStep({\n connectionID,\n draft,\n discovered,\n onDraftChange,\n onSample,\n}: ProfileWizardQueryStepProps) {\n const baseUrl = browserBaseUrl(connectionID);\n const descriptor = useQuery({\n queryKey: [\"profile-wizard-descriptor\", connectionID],\n queryFn: () => fetchJSON<BrowserDescriptor>(baseUrl),\n retry: 0,\n });\n const providerOptions = useMemo(\n () => ({ ...draft.provider?.options }),\n [draft.provider?.options],\n );\n const [query, setQuery] = useState(draft.query ?? \"\");\n const [liveOptions, setLiveOptions] = useState(providerOptions);\n const [catalogOptions, setCatalogOptions] = useState<Record<string, unknown>>(\n {},\n );\n const [selectedDatabase, setSelectedDatabase] = useState(\"\");\n const filterColumns = useRef<ProfileColumn[]>([]);\n\n // The starter query is for a source whose artifact is the query. Where the\n // workspace builds filters instead, the specification is the artifact and a\n // query seeded beside it would be the pair the server rejects.\n const rawArtifact =\n descriptor.data !== undefined && !supportsQueryBuilder(descriptor.data);\n useEffect(() => {\n if (rawArtifact && !query && descriptor.data?.defaultQuery) {\n setQuery(descriptor.data.defaultQuery);\n onDraftChange({ ...draft, query: descriptor.data.defaultQuery });\n }\n }, [descriptor.data?.defaultQuery, draft, onDraftChange, query, rawArtifact]);\n\n const explicitTargetKind =\n liveOptions.targetKind ?? providerOptions.targetKind;\n const targetOption =\n descriptor.data?.target?.kind === \"index\"\n ? descriptor.data.target.option\n : \"\";\n const inspection = useInspection({\n cacheKey: \"profile-wizard-inspection\",\n id: connectionID,\n baseUrl,\n enabled: descriptor.data?.catalog === true,\n database: selectedDatabase,\n fallbackDatabase: String(providerOptions.database ?? \"\"),\n target: targetOption\n ? String(liveOptions[targetOption] ?? providerOptions[targetOption] ?? \"\")\n : \"\",\n ...(typeof explicitTargetKind === \"string\"\n ? { targetKind: explicitTargetKind }\n : {}),\n });\n const browserOptions = useMemo(\n () =>\n mergeProviderOptions({\n layers: [\n descriptor.data?.initialOptions,\n providerOptions,\n catalogOptions,\n ],\n database: inspection.sqlDatabase,\n keepTargetKind: true,\n }),\n [\n catalogOptions,\n descriptor.data?.initialOptions,\n inspection.sqlDatabase,\n providerOptions,\n ],\n );\n const effectiveOptions = useCallback(\n (options: Record<string, unknown>) =>\n mergeProviderOptions({\n layers: [providerOptions, catalogOptions, options],\n database: inspection.sqlDatabase,\n }),\n [catalogOptions, inspection.sqlDatabase, providerOptions],\n );\n\n if (descriptor.isLoading) {\n return <QueryStepMessage>Loading connection browser…</QueryStepMessage>;\n }\n if (descriptor.isError) {\n return (\n <QueryStepMessage error>\n {profileWizardErrorMessage(\n descriptor.error,\n \"Unable to load this connection browser\",\n )}\n </QueryStepMessage>\n );\n }\n if (!descriptor.data) {\n return (\n <QueryStepMessage>\n This saved connection does not expose a query browser.\n </QueryStepMessage>\n );\n }\n\n return (\n <div className=\"flex min-h-[32rem] flex-1 flex-col gap-3\">\n <div className=\"flex items-center justify-between gap-4 rounded-lg border bg-muted/30 px-4 py-3\">\n <div>\n <p className=\"text-sm font-medium\">\n Explore the source, then run a sample\n </p>\n <p className=\"text-xs text-muted-foreground\">\n Sampling discovers fields without saving the profile.\n </p>\n </div>\n <span className=\"shrink-0 rounded-full bg-background px-3 py-1 text-xs font-medium text-muted-foreground\">\n {discovered.length\n ? `${discovered.length} fields discovered`\n : \"No sample yet\"}\n </span>\n </div>\n <ConnectionQueryWorkspace\n id={`profile-wizard:${connectionID}`}\n title=\"Profile query\"\n descriptor={descriptor.data}\n inspection={inspection}\n onDatabaseChange={setSelectedDatabase}\n query={query}\n options={browserOptions}\n optionsSchema={queryBrowserOptionsSchema(descriptor.data)}\n search={providerOptions.search as EsSearch | undefined}\n onSearchChange={(transition) => {\n // Built from the merged options so a delete actually removes the key\n // rather than being reinstated by a lower layer on the next merge.\n const options = effectiveOptions(liveOptions);\n if (transition.search) options.search = transition.search;\n else delete options.search;\n setQuery(transition.query);\n onDraftChange({\n ...draft,\n query: transition.query,\n provider: { ...draft.provider, options },\n });\n }}\n params={draft.params ?? []}\n onParamMappingChange={(edit) => {\n const options = effectiveOptions(liveOptions);\n options.search = edit.search;\n setQuery(\"\");\n onDraftChange({\n ...draft,\n query: \"\",\n params: edit.params,\n provider: { ...draft.provider, options },\n });\n }}\n paramValues={defaultParamValues(draft.params)}\n paramRoles={paramRoles(draft.params)}\n {...(draft.limits ? { limits: draft.limits } : {})}\n onLimitsChange={(limits) =>\n onDraftChange(withProfileLimits(draft, limits))\n }\n compileBaseUrl={baseUrl}\n className=\"min-h-0 flex-1\"\n onQueryChange={(nextQuery) => {\n setQuery(nextQuery);\n onDraftChange({ ...draft, query: nextQuery });\n }}\n onOptionsChange={(options) => {\n setLiveOptions(options);\n onDraftChange({\n ...draft,\n provider: {\n ...draft.provider,\n options: effectiveOptions(options),\n },\n });\n }}\n onCatalogSelect={(node) => {\n const nextQuery = node.query ?? query;\n const nextOptions = node.options ?? {};\n setQuery(nextQuery);\n setCatalogOptions(nextOptions);\n setLiveOptions({ ...browserOptions, ...nextOptions });\n onDraftChange({\n ...draft,\n query: nextQuery,\n provider: {\n ...draft.provider,\n options: effectiveOptions({ ...browserOptions, ...nextOptions }),\n },\n });\n }}\n lookupFilterValues={(request) =>\n lookupProfileSampleFilterValues({\n draft: {\n ...draft,\n query: request.query,\n provider: {\n ...draft.provider,\n options: effectiveOptions(request.options),\n },\n },\n params: defaultParamValues(draft.params),\n filterColumns: filterColumns.current,\n request,\n })\n }\n execute={async (request) => {\n const nextDraft = {\n ...draft,\n query: request.query,\n provider: {\n ...draft.provider,\n options: effectiveOptions(request.options),\n },\n };\n onDraftChange(nextDraft);\n const result = await fetchJSON<ProfileSampleResponse>(\n profileApiPath(\"profile/sample\"),\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...debugCaptureHeaders(),\n },\n body: JSON.stringify(\n profileSamplePayload({\n draft: nextDraft,\n request,\n params: defaultParamValues(nextDraft.params),\n filterColumns: filterColumns.current,\n }),\n ),\n },\n );\n filterColumns.current = profileSampleFilterColumns(result);\n onSample({\n columns: result.columns ?? [],\n rows: result.rows ?? [],\n sourceDraft: nextDraft,\n });\n return profileSampleQueryResult(result);\n }}\n />\n </div>\n );\n}\n\nfunction QueryStepMessage({\n children,\n error = false,\n}: {\n children: ReactNode;\n error?: boolean;\n}) {\n return (\n <div\n className={`grid min-h-96 flex-1 place-items-center rounded-xl border border-dashed p-8 text-sm ${error ? \"border-destructive/40 text-destructive\" : \"text-muted-foreground\"}`}\n >\n {children}\n </div>\n );\n}\n"],"names":["browserBaseUrl","useQuery","fetchJSON","useMemo","_a","useState","useRef","supportsQueryBuilder","useEffect","useInspection","mergeProviderOptions","useCallback","jsx","profileWizardErrorMessage","jsxs","ConnectionQueryWorkspace","queryBrowserOptionsSchema","defaultParamValues","paramRoles","withProfileLimits","lookupProfileSampleFilterValues","profileApiPath","debugCaptureHeaders","profileSamplePayload","profileSampleFilterColumns","profileSampleQueryResult"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profileWizardQueryStep.d.ts","sourceRoot":"","sources":["../../../src/profiles/wizard/profileWizardQueryStep.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"profileWizardQueryStep.d.ts","sourceRoot":"","sources":["../../../src/profiles/wizard/profileWizardQueryStep.tsx"],"names":[],"mappings":"AA4BA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAO9B;gFACgF;AAChF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,WAAW,EAAE,kBAAkB,CAAC;CACjC,CAAC;AAEF,KAAK,2BAA2B,GAAG;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,aAAa,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACnD,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;CAC3C,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,EACrC,YAAY,EACZ,KAAK,EACL,UAAU,EACV,aAAa,EACb,QAAQ,GACT,EAAE,2BAA2B,2CAkP7B"}
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useQuery } from "@tanstack/react-query";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { debugCaptureHeaders } from "../../data/debugConsoleSignal.js";
|
|
4
|
+
import { useMemo, useState, useRef, useEffect, useCallback } from "react";
|
|
5
|
+
import { browserBaseUrl, fetchJSON, mergeProviderOptions, queryBrowserOptionsSchema } from "../connections/connectionBrowserModel.js";
|
|
5
6
|
import { ConnectionQueryWorkspace } from "../connections/connectionQueryWorkspace.js";
|
|
7
|
+
import { useInspection } from "../connections/useInspection.js";
|
|
6
8
|
import { profileApiPath } from "../profileApi.js";
|
|
7
9
|
import { profileSamplePayload } from "../query/profileSamplePayload.js";
|
|
10
|
+
import { lookupProfileSampleFilterValues } from "../query/profileSampleFilterLookup.js";
|
|
11
|
+
import { profileSampleFilterColumns, profileSampleQueryResult } from "../query/profileSampleResult.js";
|
|
8
12
|
import { profileWizardErrorMessage, withProfileLimits } from "./profileWizardModel.js";
|
|
9
13
|
import { supportsQueryBuilder } from "../connections/connectionQueryWorkspaceModel.js";
|
|
10
|
-
import {
|
|
14
|
+
import { defaultParamValues, paramRoles } from "../elasticsearch/esQueryBuilderForm.js";
|
|
11
15
|
function ProfileWizardQueryStep({
|
|
12
16
|
connectionID,
|
|
13
17
|
draft,
|
|
@@ -15,7 +19,7 @@ function ProfileWizardQueryStep({
|
|
|
15
19
|
onDraftChange,
|
|
16
20
|
onSample
|
|
17
21
|
}) {
|
|
18
|
-
var _a, _b, _c, _d;
|
|
22
|
+
var _a, _b, _c, _d, _e, _f;
|
|
19
23
|
const baseUrl = browserBaseUrl(connectionID);
|
|
20
24
|
const descriptor = useQuery({
|
|
21
25
|
queryKey: ["profile-wizard-descriptor", connectionID],
|
|
@@ -35,6 +39,7 @@ function ProfileWizardQueryStep({
|
|
|
35
39
|
{}
|
|
36
40
|
);
|
|
37
41
|
const [selectedDatabase, setSelectedDatabase] = useState("");
|
|
42
|
+
const filterColumns = useRef([]);
|
|
38
43
|
const rawArtifact = descriptor.data !== void 0 && !supportsQueryBuilder(descriptor.data);
|
|
39
44
|
useEffect(() => {
|
|
40
45
|
var _a2;
|
|
@@ -44,14 +49,15 @@ function ProfileWizardQueryStep({
|
|
|
44
49
|
}
|
|
45
50
|
}, [(_b = descriptor.data) == null ? void 0 : _b.defaultQuery, draft, onDraftChange, query, rawArtifact]);
|
|
46
51
|
const explicitTargetKind = liveOptions.targetKind ?? providerOptions.targetKind;
|
|
52
|
+
const targetOption = ((_d = (_c = descriptor.data) == null ? void 0 : _c.target) == null ? void 0 : _d.kind) === "index" ? descriptor.data.target.option : "";
|
|
47
53
|
const inspection = useInspection({
|
|
48
54
|
cacheKey: "profile-wizard-inspection",
|
|
49
55
|
id: connectionID,
|
|
50
56
|
baseUrl,
|
|
51
|
-
enabled: ((
|
|
57
|
+
enabled: ((_e = descriptor.data) == null ? void 0 : _e.catalog) === true,
|
|
52
58
|
database: selectedDatabase,
|
|
53
59
|
fallbackDatabase: String(providerOptions.database ?? ""),
|
|
54
|
-
target: String(liveOptions
|
|
60
|
+
target: targetOption ? String(liveOptions[targetOption] ?? providerOptions[targetOption] ?? "") : "",
|
|
55
61
|
...typeof explicitTargetKind === "string" ? { targetKind: explicitTargetKind } : {}
|
|
56
62
|
});
|
|
57
63
|
const browserOptions = useMemo(
|
|
@@ -69,7 +75,7 @@ function ProfileWizardQueryStep({
|
|
|
69
75
|
},
|
|
70
76
|
[
|
|
71
77
|
catalogOptions,
|
|
72
|
-
(
|
|
78
|
+
(_f = descriptor.data) == null ? void 0 : _f.initialOptions,
|
|
73
79
|
inspection.sqlDatabase,
|
|
74
80
|
providerOptions
|
|
75
81
|
]
|
|
@@ -171,6 +177,19 @@ function ProfileWizardQueryStep({
|
|
|
171
177
|
}
|
|
172
178
|
});
|
|
173
179
|
},
|
|
180
|
+
lookupFilterValues: (request) => lookupProfileSampleFilterValues({
|
|
181
|
+
draft: {
|
|
182
|
+
...draft,
|
|
183
|
+
query: request.query,
|
|
184
|
+
provider: {
|
|
185
|
+
...draft.provider,
|
|
186
|
+
options: effectiveOptions(request.options)
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
params: defaultParamValues(draft.params),
|
|
190
|
+
filterColumns: filterColumns.current,
|
|
191
|
+
request
|
|
192
|
+
}),
|
|
174
193
|
execute: async (request) => {
|
|
175
194
|
const nextDraft = {
|
|
176
195
|
...draft,
|
|
@@ -181,17 +200,31 @@ function ProfileWizardQueryStep({
|
|
|
181
200
|
}
|
|
182
201
|
};
|
|
183
202
|
onDraftChange(nextDraft);
|
|
184
|
-
const result = await fetchJSON(
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
203
|
+
const result = await fetchJSON(
|
|
204
|
+
profileApiPath("profile/sample"),
|
|
205
|
+
{
|
|
206
|
+
method: "POST",
|
|
207
|
+
headers: {
|
|
208
|
+
"Content-Type": "application/json",
|
|
209
|
+
...debugCaptureHeaders()
|
|
210
|
+
},
|
|
211
|
+
body: JSON.stringify(
|
|
212
|
+
profileSamplePayload({
|
|
213
|
+
draft: nextDraft,
|
|
214
|
+
request,
|
|
215
|
+
params: defaultParamValues(nextDraft.params),
|
|
216
|
+
filterColumns: filterColumns.current
|
|
217
|
+
})
|
|
218
|
+
)
|
|
219
|
+
}
|
|
220
|
+
);
|
|
221
|
+
filterColumns.current = profileSampleFilterColumns(result);
|
|
189
222
|
onSample({
|
|
190
223
|
columns: result.columns ?? [],
|
|
191
224
|
rows: result.rows ?? [],
|
|
192
225
|
sourceDraft: nextDraft
|
|
193
226
|
});
|
|
194
|
-
return result;
|
|
227
|
+
return profileSampleQueryResult(result);
|
|
195
228
|
}
|
|
196
229
|
}
|
|
197
230
|
)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profileWizardQueryStep.js","sources":["../../../src/profiles/wizard/profileWizardQueryStep.tsx"],"sourcesContent":["import type { QueryBrowserResult } from \"../../data/query-browser/QueryBrowser.types\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useCallback, useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport {\n browserBaseUrl,\n fetchJSON,\n mergeProviderOptions,\n queryBrowserOptionsSchema,\n useInspection,\n type BrowserDescriptor,\n} from \"../connections/connectionBrowserModel\";\nimport { ConnectionQueryWorkspace } from \"../connections/connectionQueryWorkspace\";\nimport { profileApiPath } from \"../profileApi\";\nimport { profileSamplePayload } from \"../query/profileSamplePayload\";\nimport type { EsSearch } from \"../elasticsearch/esQueryBuilderModel\";\nimport {\n profileWizardErrorMessage,\n withProfileLimits,\n type ProfileColumn,\n type ProfileWizardDraft,\n} from \"./profileWizardModel\";\nimport { supportsQueryBuilder } from \"../connections/connectionQueryWorkspaceModel\";\nimport { defaultParamValues, paramRoles } from \"../elasticsearch/esQueryBuilderForm\";\n\ntype SampleResult = QueryBrowserResult & {\n columns: ProfileColumn[];\n renderedQuery: string;\n};\n\n/** What a sample yields: the discovered column shape plus the rows it came\n * from, so the editor can preview the configured columns against real data. */\nexport type ProfileSample = {\n columns: ProfileColumn[];\n rows: Record<string, unknown>[];\n sourceDraft: ProfileWizardDraft;\n};\n\ntype ProfileWizardQueryStepProps = {\n connectionID: string;\n draft: ProfileWizardDraft;\n discovered: ProfileColumn[];\n onDraftChange: (draft: ProfileWizardDraft) => void;\n onSample: (sample: ProfileSample) => void;\n};\n\nexport function ProfileWizardQueryStep({\n connectionID,\n draft,\n discovered,\n onDraftChange,\n onSample,\n}: ProfileWizardQueryStepProps) {\n const baseUrl = browserBaseUrl(connectionID);\n const descriptor = useQuery({\n queryKey: [\"profile-wizard-descriptor\", connectionID],\n queryFn: () => fetchJSON<BrowserDescriptor>(baseUrl),\n retry: 0,\n });\n const providerOptions = useMemo(\n () => ({ ...draft.provider?.options }),\n [draft.provider?.options],\n );\n const [query, setQuery] = useState(draft.query ?? \"\");\n const [liveOptions, setLiveOptions] = useState(providerOptions);\n const [catalogOptions, setCatalogOptions] = useState<Record<string, unknown>>(\n {},\n );\n const [selectedDatabase, setSelectedDatabase] = useState(\"\");\n\n // The starter query is for a source whose artifact is the query. Where the\n // workspace builds filters instead, the specification is the artifact and a\n // query seeded beside it would be the pair the server rejects.\n const rawArtifact =\n descriptor.data !== undefined && !supportsQueryBuilder(descriptor.data);\n useEffect(() => {\n if (rawArtifact && !query && descriptor.data?.defaultQuery) {\n setQuery(descriptor.data.defaultQuery);\n onDraftChange({ ...draft, query: descriptor.data.defaultQuery });\n }\n }, [descriptor.data?.defaultQuery, draft, onDraftChange, query, rawArtifact]);\n\n const explicitTargetKind = liveOptions.targetKind ?? providerOptions.targetKind;\n const inspection = useInspection({\n cacheKey: \"profile-wizard-inspection\",\n id: connectionID,\n baseUrl,\n enabled: descriptor.data?.catalog === true,\n database: selectedDatabase,\n fallbackDatabase: String(providerOptions.database ?? \"\"),\n target: String(liveOptions.index ?? providerOptions.index ?? \"\"),\n ...(typeof explicitTargetKind === \"string\"\n ? { targetKind: explicitTargetKind }\n : {}),\n });\n const browserOptions = useMemo(\n () =>\n mergeProviderOptions({\n layers: [\n descriptor.data?.initialOptions,\n providerOptions,\n catalogOptions,\n ],\n database: inspection.sqlDatabase,\n keepTargetKind: true,\n }),\n [\n catalogOptions,\n descriptor.data?.initialOptions,\n inspection.sqlDatabase,\n providerOptions,\n ],\n );\n const effectiveOptions = useCallback(\n (options: Record<string, unknown>) =>\n mergeProviderOptions({\n layers: [providerOptions, catalogOptions, options],\n database: inspection.sqlDatabase,\n }),\n [catalogOptions, inspection.sqlDatabase, providerOptions],\n );\n\n if (descriptor.isLoading) {\n return <QueryStepMessage>Loading connection browser…</QueryStepMessage>;\n }\n if (descriptor.isError) {\n return (\n <QueryStepMessage error>\n {profileWizardErrorMessage(\n descriptor.error,\n \"Unable to load this connection browser\",\n )}\n </QueryStepMessage>\n );\n }\n if (!descriptor.data) {\n return (\n <QueryStepMessage>\n This saved connection does not expose a query browser.\n </QueryStepMessage>\n );\n }\n\n return (\n <div className=\"flex min-h-[32rem] flex-1 flex-col gap-3\">\n <div className=\"flex items-center justify-between gap-4 rounded-lg border bg-muted/30 px-4 py-3\">\n <div>\n <p className=\"text-sm font-medium\">Explore the source, then run a sample</p>\n <p className=\"text-xs text-muted-foreground\">\n Sampling discovers fields without saving the profile.\n </p>\n </div>\n <span className=\"shrink-0 rounded-full bg-background px-3 py-1 text-xs font-medium text-muted-foreground\">\n {discovered.length\n ? `${discovered.length} fields discovered`\n : \"No sample yet\"}\n </span>\n </div>\n <ConnectionQueryWorkspace\n id={`profile-wizard:${connectionID}`}\n title=\"Profile query\"\n descriptor={descriptor.data}\n inspection={inspection}\n onDatabaseChange={setSelectedDatabase}\n query={query}\n options={browserOptions}\n optionsSchema={queryBrowserOptionsSchema(descriptor.data)}\n search={providerOptions.search as EsSearch | undefined}\n onSearchChange={(transition) => {\n // Built from the merged options so a delete actually removes the key\n // rather than being reinstated by a lower layer on the next merge.\n const options = effectiveOptions(liveOptions);\n if (transition.search) options.search = transition.search;\n else delete options.search;\n setQuery(transition.query);\n onDraftChange({\n ...draft,\n query: transition.query,\n provider: { ...draft.provider, options },\n });\n }}\n params={draft.params ?? []}\n onParamMappingChange={(edit) => {\n const options = effectiveOptions(liveOptions);\n options.search = edit.search;\n setQuery(\"\");\n onDraftChange({\n ...draft,\n query: \"\",\n params: edit.params,\n provider: { ...draft.provider, options },\n });\n }}\n paramValues={defaultParamValues(draft.params)}\n paramRoles={paramRoles(draft.params)}\n {...(draft.limits ? { limits: draft.limits } : {})}\n onLimitsChange={(limits) => onDraftChange(withProfileLimits(draft, limits))}\n compileBaseUrl={baseUrl}\n className=\"min-h-0 flex-1\"\n onQueryChange={(nextQuery) => {\n setQuery(nextQuery);\n onDraftChange({ ...draft, query: nextQuery });\n }}\n onOptionsChange={(options) => {\n setLiveOptions(options);\n onDraftChange({\n ...draft,\n provider: {\n ...draft.provider,\n options: effectiveOptions(options),\n },\n });\n }}\n onCatalogSelect={(node) => {\n const nextQuery = node.query ?? query;\n const nextOptions = node.options ?? {};\n setQuery(nextQuery);\n setCatalogOptions(nextOptions);\n setLiveOptions({ ...browserOptions, ...nextOptions });\n onDraftChange({\n ...draft,\n query: nextQuery,\n provider: {\n ...draft.provider,\n options: effectiveOptions({ ...browserOptions, ...nextOptions }),\n },\n });\n }}\n execute={async (request) => {\n const nextDraft = {\n ...draft,\n query: request.query,\n provider: {\n ...draft.provider,\n options: effectiveOptions(request.options),\n },\n };\n onDraftChange(nextDraft);\n const result = await fetchJSON<SampleResult>(profileApiPath(\"profile/sample\"), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(profileSamplePayload(nextDraft, request)),\n });\n onSample({\n columns: result.columns ?? [],\n rows: result.rows ?? [],\n sourceDraft: nextDraft,\n });\n return result;\n }}\n />\n </div>\n );\n}\n\nfunction QueryStepMessage({\n children,\n error = false,\n}: {\n children: ReactNode;\n error?: boolean;\n}) {\n return (\n <div\n className={`grid min-h-96 flex-1 place-items-center rounded-xl border border-dashed p-8 text-sm ${error ? \"border-destructive/40 text-destructive\" : \"text-muted-foreground\"}`}\n >\n {children}\n </div>\n );\n}\n"],"names":["_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"profileWizardQueryStep.js","sources":["../../../src/profiles/wizard/profileWizardQueryStep.tsx"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { debugCaptureHeaders } from \"../../data/debugConsoleSignal\";\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport {\n browserBaseUrl,\n fetchJSON,\n mergeProviderOptions,\n queryBrowserOptionsSchema,\n type BrowserDescriptor,\n} from \"../connections/connectionBrowserModel\";\nimport { ConnectionQueryWorkspace } from \"../connections/connectionQueryWorkspace\";\nimport { useInspection } from \"../connections/useInspection\";\nimport { profileApiPath } from \"../profileApi\";\nimport { profileSamplePayload } from \"../query/profileSamplePayload\";\nimport { lookupProfileSampleFilterValues } from \"../query/profileSampleFilterLookup\";\nimport {\n profileSampleFilterColumns,\n profileSampleQueryResult,\n type ProfileSampleResponse,\n} from \"../query/profileSampleResult\";\nimport type { EsSearch } from \"../elasticsearch/esQueryBuilderModel\";\nimport {\n profileWizardErrorMessage,\n withProfileLimits,\n type ProfileColumn,\n type ProfileWizardDraft,\n} from \"./profileWizardModel\";\nimport { supportsQueryBuilder } from \"../connections/connectionQueryWorkspaceModel\";\nimport {\n defaultParamValues,\n paramRoles,\n} from \"../elasticsearch/esQueryBuilderForm\";\n\n/** What a sample yields: the discovered column shape plus the rows it came\n * from, so the editor can preview the configured columns against real data. */\nexport type ProfileSample = {\n columns: ProfileColumn[];\n rows: Record<string, unknown>[];\n sourceDraft: ProfileWizardDraft;\n};\n\ntype ProfileWizardQueryStepProps = {\n connectionID: string;\n draft: ProfileWizardDraft;\n discovered: ProfileColumn[];\n onDraftChange: (draft: ProfileWizardDraft) => void;\n onSample: (sample: ProfileSample) => void;\n};\n\nexport function ProfileWizardQueryStep({\n connectionID,\n draft,\n discovered,\n onDraftChange,\n onSample,\n}: ProfileWizardQueryStepProps) {\n const baseUrl = browserBaseUrl(connectionID);\n const descriptor = useQuery({\n queryKey: [\"profile-wizard-descriptor\", connectionID],\n queryFn: () => fetchJSON<BrowserDescriptor>(baseUrl),\n retry: 0,\n });\n const providerOptions = useMemo(\n () => ({ ...draft.provider?.options }),\n [draft.provider?.options],\n );\n const [query, setQuery] = useState(draft.query ?? \"\");\n const [liveOptions, setLiveOptions] = useState(providerOptions);\n const [catalogOptions, setCatalogOptions] = useState<Record<string, unknown>>(\n {},\n );\n const [selectedDatabase, setSelectedDatabase] = useState(\"\");\n const filterColumns = useRef<ProfileColumn[]>([]);\n\n // The starter query is for a source whose artifact is the query. Where the\n // workspace builds filters instead, the specification is the artifact and a\n // query seeded beside it would be the pair the server rejects.\n const rawArtifact =\n descriptor.data !== undefined && !supportsQueryBuilder(descriptor.data);\n useEffect(() => {\n if (rawArtifact && !query && descriptor.data?.defaultQuery) {\n setQuery(descriptor.data.defaultQuery);\n onDraftChange({ ...draft, query: descriptor.data.defaultQuery });\n }\n }, [descriptor.data?.defaultQuery, draft, onDraftChange, query, rawArtifact]);\n\n const explicitTargetKind =\n liveOptions.targetKind ?? providerOptions.targetKind;\n const targetOption =\n descriptor.data?.target?.kind === \"index\"\n ? descriptor.data.target.option\n : \"\";\n const inspection = useInspection({\n cacheKey: \"profile-wizard-inspection\",\n id: connectionID,\n baseUrl,\n enabled: descriptor.data?.catalog === true,\n database: selectedDatabase,\n fallbackDatabase: String(providerOptions.database ?? \"\"),\n target: targetOption\n ? String(liveOptions[targetOption] ?? providerOptions[targetOption] ?? \"\")\n : \"\",\n ...(typeof explicitTargetKind === \"string\"\n ? { targetKind: explicitTargetKind }\n : {}),\n });\n const browserOptions = useMemo(\n () =>\n mergeProviderOptions({\n layers: [\n descriptor.data?.initialOptions,\n providerOptions,\n catalogOptions,\n ],\n database: inspection.sqlDatabase,\n keepTargetKind: true,\n }),\n [\n catalogOptions,\n descriptor.data?.initialOptions,\n inspection.sqlDatabase,\n providerOptions,\n ],\n );\n const effectiveOptions = useCallback(\n (options: Record<string, unknown>) =>\n mergeProviderOptions({\n layers: [providerOptions, catalogOptions, options],\n database: inspection.sqlDatabase,\n }),\n [catalogOptions, inspection.sqlDatabase, providerOptions],\n );\n\n if (descriptor.isLoading) {\n return <QueryStepMessage>Loading connection browser…</QueryStepMessage>;\n }\n if (descriptor.isError) {\n return (\n <QueryStepMessage error>\n {profileWizardErrorMessage(\n descriptor.error,\n \"Unable to load this connection browser\",\n )}\n </QueryStepMessage>\n );\n }\n if (!descriptor.data) {\n return (\n <QueryStepMessage>\n This saved connection does not expose a query browser.\n </QueryStepMessage>\n );\n }\n\n return (\n <div className=\"flex min-h-[32rem] flex-1 flex-col gap-3\">\n <div className=\"flex items-center justify-between gap-4 rounded-lg border bg-muted/30 px-4 py-3\">\n <div>\n <p className=\"text-sm font-medium\">\n Explore the source, then run a sample\n </p>\n <p className=\"text-xs text-muted-foreground\">\n Sampling discovers fields without saving the profile.\n </p>\n </div>\n <span className=\"shrink-0 rounded-full bg-background px-3 py-1 text-xs font-medium text-muted-foreground\">\n {discovered.length\n ? `${discovered.length} fields discovered`\n : \"No sample yet\"}\n </span>\n </div>\n <ConnectionQueryWorkspace\n id={`profile-wizard:${connectionID}`}\n title=\"Profile query\"\n descriptor={descriptor.data}\n inspection={inspection}\n onDatabaseChange={setSelectedDatabase}\n query={query}\n options={browserOptions}\n optionsSchema={queryBrowserOptionsSchema(descriptor.data)}\n search={providerOptions.search as EsSearch | undefined}\n onSearchChange={(transition) => {\n // Built from the merged options so a delete actually removes the key\n // rather than being reinstated by a lower layer on the next merge.\n const options = effectiveOptions(liveOptions);\n if (transition.search) options.search = transition.search;\n else delete options.search;\n setQuery(transition.query);\n onDraftChange({\n ...draft,\n query: transition.query,\n provider: { ...draft.provider, options },\n });\n }}\n params={draft.params ?? []}\n onParamMappingChange={(edit) => {\n const options = effectiveOptions(liveOptions);\n options.search = edit.search;\n setQuery(\"\");\n onDraftChange({\n ...draft,\n query: \"\",\n params: edit.params,\n provider: { ...draft.provider, options },\n });\n }}\n paramValues={defaultParamValues(draft.params)}\n paramRoles={paramRoles(draft.params)}\n {...(draft.limits ? { limits: draft.limits } : {})}\n onLimitsChange={(limits) =>\n onDraftChange(withProfileLimits(draft, limits))\n }\n compileBaseUrl={baseUrl}\n className=\"min-h-0 flex-1\"\n onQueryChange={(nextQuery) => {\n setQuery(nextQuery);\n onDraftChange({ ...draft, query: nextQuery });\n }}\n onOptionsChange={(options) => {\n setLiveOptions(options);\n onDraftChange({\n ...draft,\n provider: {\n ...draft.provider,\n options: effectiveOptions(options),\n },\n });\n }}\n onCatalogSelect={(node) => {\n const nextQuery = node.query ?? query;\n const nextOptions = node.options ?? {};\n setQuery(nextQuery);\n setCatalogOptions(nextOptions);\n setLiveOptions({ ...browserOptions, ...nextOptions });\n onDraftChange({\n ...draft,\n query: nextQuery,\n provider: {\n ...draft.provider,\n options: effectiveOptions({ ...browserOptions, ...nextOptions }),\n },\n });\n }}\n lookupFilterValues={(request) =>\n lookupProfileSampleFilterValues({\n draft: {\n ...draft,\n query: request.query,\n provider: {\n ...draft.provider,\n options: effectiveOptions(request.options),\n },\n },\n params: defaultParamValues(draft.params),\n filterColumns: filterColumns.current,\n request,\n })\n }\n execute={async (request) => {\n const nextDraft = {\n ...draft,\n query: request.query,\n provider: {\n ...draft.provider,\n options: effectiveOptions(request.options),\n },\n };\n onDraftChange(nextDraft);\n const result = await fetchJSON<ProfileSampleResponse>(\n profileApiPath(\"profile/sample\"),\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...debugCaptureHeaders(),\n },\n body: JSON.stringify(\n profileSamplePayload({\n draft: nextDraft,\n request,\n params: defaultParamValues(nextDraft.params),\n filterColumns: filterColumns.current,\n }),\n ),\n },\n );\n filterColumns.current = profileSampleFilterColumns(result);\n onSample({\n columns: result.columns ?? [],\n rows: result.rows ?? [],\n sourceDraft: nextDraft,\n });\n return profileSampleQueryResult(result);\n }}\n />\n </div>\n );\n}\n\nfunction QueryStepMessage({\n children,\n error = false,\n}: {\n children: ReactNode;\n error?: boolean;\n}) {\n return (\n <div\n className={`grid min-h-96 flex-1 place-items-center rounded-xl border border-dashed p-8 text-sm ${error ? \"border-destructive/40 text-destructive\" : \"text-muted-foreground\"}`}\n >\n {children}\n </div>\n );\n}\n"],"names":["_a"],"mappings":"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"}
|
|
@@ -41,8 +41,10 @@ function SourceStep({
|
|
|
41
41
|
selected,
|
|
42
42
|
selectedType,
|
|
43
43
|
onSearchChange,
|
|
44
|
-
onSelect
|
|
44
|
+
onSelect,
|
|
45
|
+
onProviderTypeChange
|
|
45
46
|
}) {
|
|
47
|
+
const selectedChoice = choices.find((choice) => choice.value === selected);
|
|
46
48
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto grid max-w-4xl gap-5 lg:grid-cols-[1fr_18rem]", children: [
|
|
47
49
|
/* @__PURE__ */ jsxRuntime.jsxs("section", { className: "overflow-hidden rounded-xl border bg-card", children: [
|
|
48
50
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-b p-4", children: /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "grid gap-1.5 text-sm font-medium", children: [
|
|
@@ -71,7 +73,13 @@ function SourceStep({
|
|
|
71
73
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "block text-sm font-medium", children: choice.name }),
|
|
72
74
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "block text-xs text-muted-foreground", children: "Saved connection" })
|
|
73
75
|
] }),
|
|
74
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
76
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
77
|
+
"span",
|
|
78
|
+
{
|
|
79
|
+
className: `rounded-full px-2.5 py-1 text-xs font-medium ${choice.providerTypes.length === 0 ? "bg-destructive/10 text-destructive" : "bg-muted"}`,
|
|
80
|
+
children: choice.providerTypes.length === 0 ? `${choice.connectionType} · not queryable` : choice.providerTypes.join(" / ")
|
|
81
|
+
}
|
|
82
|
+
)
|
|
75
83
|
]
|
|
76
84
|
},
|
|
77
85
|
choice.value
|
|
@@ -93,6 +101,29 @@ function SourceStep({
|
|
|
93
101
|
selected ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
94
102
|
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mt-3 font-semibold", children: profileWizardModel.profileConnectionID(selected) }),
|
|
95
103
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-sm text-muted-foreground", children: selectedType }),
|
|
104
|
+
selectedChoice && selectedChoice.providerTypes.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs("p", { role: "alert", className: "mt-4 text-sm leading-6 text-destructive", children: [
|
|
105
|
+
"No query provider reads ",
|
|
106
|
+
selectedChoice.connectionType,
|
|
107
|
+
" ",
|
|
108
|
+
"connections, so this one cannot back a profile."
|
|
109
|
+
] }) : null,
|
|
110
|
+
selectedChoice && selectedChoice.providerTypes.length > 1 ? (
|
|
111
|
+
// A connection type several providers can read is a real choice —
|
|
112
|
+
// a Google Cloud connection is queried very differently by Cloud
|
|
113
|
+
// Logging than by BigQuery — so it is asked rather than guessed.
|
|
114
|
+
/* @__PURE__ */ jsxRuntime.jsxs("label", { className: "mt-4 grid gap-1.5 text-sm font-medium", children: [
|
|
115
|
+
"Read it with",
|
|
116
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
117
|
+
"select",
|
|
118
|
+
{
|
|
119
|
+
value: selectedType,
|
|
120
|
+
className: "rounded-md border border-input bg-background px-3 py-2 outline-none focus:border-primary focus:ring-2 focus:ring-primary/15",
|
|
121
|
+
onChange: (event) => onProviderTypeChange(event.target.value),
|
|
122
|
+
children: selectedChoice.providerTypes.map((type) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: type, children: type }, type))
|
|
123
|
+
}
|
|
124
|
+
)
|
|
125
|
+
] })
|
|
126
|
+
) : null,
|
|
96
127
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-5 text-sm leading-6 text-muted-foreground", children: "The next step loads this connection's catalog, query language, and sampling controls." })
|
|
97
128
|
] }) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-3 text-sm leading-6 text-muted-foreground", children: "Choose a connection to begin. Connection credentials stay on the server and are never copied into the profile." })
|
|
98
129
|
] })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profileWizardSteps.cjs","sources":["../../../src/profiles/wizard/profileWizardSteps.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { ProfileFieldManager } from \"../fields/profileFieldManager\";\nimport {\n profileConnectionID,\n profileWizardErrorMessage,\n profileWizardSteps,\n type ProfileColumn,\n type ProfileWizardDraft,\n} from \"./profileWizardModel\";\n\nexport type ConnectionChoice = {\n value: string;\n label: string;\n name: string;\n providerType: string;\n};\n\nexport function WizardProgress({\n stepIndex,\n onStepChange,\n}: {\n stepIndex: number;\n onStepChange: (index: number) => void;\n}) {\n return (\n <ol className=\"grid grid-cols-4 gap-2\" aria-label=\"Profile builder progress\">\n {profileWizardSteps.map((step, index) => (\n <li key={step.id}>\n <button\n type=\"button\"\n disabled={index > stepIndex}\n aria-current={index === stepIndex ? \"step\" : undefined}\n className={`flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-left ${index === stepIndex ? \"bg-primary/10 text-foreground\" : \"text-muted-foreground\"}`}\n onClick={() => onStepChange(index)}\n >\n <span\n className={`grid size-6 shrink-0 place-items-center rounded-full text-xs font-semibold ${index <= stepIndex ? \"bg-primary text-primary-foreground\" : \"bg-muted\"}`}\n >\n {index + 1}\n </span>\n <span className=\"hidden min-w-0 md:block\">\n <span className=\"block truncate text-xs font-medium\">{step.label}</span>\n <span className=\"block truncate text-[10px]\">{step.description}</span>\n </span>\n </button>\n </li>\n ))}\n </ol>\n );\n}\n\nexport function SourceStep({\n choices,\n loading,\n error,\n truncated,\n total,\n search,\n selected,\n selectedType,\n onSearchChange,\n onSelect,\n}: {\n choices: ConnectionChoice[];\n loading: boolean;\n error: unknown;\n truncated?: boolean;\n total?: number;\n search: string;\n selected: string;\n selectedType: string;\n onSearchChange: (search: string) => void;\n onSelect: (choice: ConnectionChoice) => void;\n}) {\n return (\n <div className=\"mx-auto grid max-w-4xl gap-5 lg:grid-cols-[1fr_18rem]\">\n <section className=\"overflow-hidden rounded-xl border bg-card\">\n <div className=\"border-b p-4\">\n <label className=\"grid gap-1.5 text-sm font-medium\">\n Find a saved connection\n <input\n type=\"search\"\n value={search}\n autoFocus\n placeholder=\"Search connections\"\n className=\"rounded-md border border-input bg-background px-3 py-2.5 outline-none focus:border-primary focus:ring-2 focus:ring-primary/15\"\n onChange={(event) => onSearchChange(event.target.value)}\n />\n </label>\n </div>\n <div className=\"max-h-[26rem] overflow-auto p-2\">\n {choices.map((choice) => (\n <button\n key={choice.value}\n type=\"button\"\n className={`flex w-full items-center justify-between rounded-lg border px-4 py-3 text-left transition-colors ${selected === choice.value ? \"border-primary bg-primary/8\" : \"border-transparent hover:bg-muted/60\"}`}\n onClick={() => onSelect(choice)}\n >\n <span>\n <span className=\"block text-sm font-medium\">{choice.name}</span>\n <span className=\"block text-xs text-muted-foreground\">\n Saved connection\n </span>\n </span>\n <span className=\"rounded-full bg-muted px-2.5 py-1 text-xs font-medium\">\n {choice.providerType}\n </span>\n </button>\n ))}\n {loading ? (\n <p className=\"p-8 text-center text-sm text-muted-foreground\">\n Loading connections…\n </p>\n ) : null}\n {error ? (\n <p className=\"p-8 text-center text-sm text-destructive\">\n {profileWizardErrorMessage(error, \"Unable to load connections\")}\n </p>\n ) : null}\n {!loading && !error && choices.length === 0 ? (\n <p className=\"p-8 text-center text-sm text-muted-foreground\">\n No saved connections match this search.\n </p>\n ) : null}\n </div>\n {truncated ? (\n <p className=\"border-t px-4 py-2 text-xs text-muted-foreground\">\n Showing the first {choices.length} of {total ?? \"many\"}. Search to narrow the list.\n </p>\n ) : null}\n </section>\n <aside className=\"rounded-xl border bg-muted/25 p-5\">\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Selected source\n </p>\n {selected ? (\n <>\n <h3 className=\"mt-3 font-semibold\">{profileConnectionID(selected)}</h3>\n <p className=\"mt-1 text-sm text-muted-foreground\">{selectedType}</p>\n <p className=\"mt-5 text-sm leading-6 text-muted-foreground\">\n The next step loads this connection's catalog, query language,\n and sampling controls.\n </p>\n </>\n ) : (\n <p className=\"mt-3 text-sm leading-6 text-muted-foreground\">\n Choose a connection to begin. Connection credentials stay on the\n server and are never copied into the profile.\n </p>\n )}\n </aside>\n </div>\n );\n}\n\nexport function FieldsStep({\n draft,\n discovered,\n activeField,\n onDraftChange,\n onActiveFieldChange,\n}: {\n draft: ProfileWizardDraft;\n discovered: ProfileColumn[];\n activeField: string;\n onDraftChange: (draft: ProfileWizardDraft) => void;\n onActiveFieldChange: (name: string) => void;\n}) {\n return (\n <div className=\"grid gap-5\">\n <section className=\"grid gap-4 rounded-xl border bg-muted/25 p-4 md:grid-cols-2\">\n <label className=\"grid gap-1.5 text-sm font-medium\">\n Profile name <span className=\"text-destructive\">*</span>\n <input\n value={draft.profile ?? \"\"}\n placeholder=\"e.g. service-logs\"\n className=\"rounded-md border border-input bg-background px-3 py-2 outline-none focus:border-primary focus:ring-2 focus:ring-primary/15\"\n onChange={(event) =>\n onDraftChange({ ...draft, profile: event.target.value })\n }\n />\n </label>\n <label className=\"grid gap-1.5 text-sm font-medium\">\n Namespace <span className=\"font-normal text-muted-foreground\">Optional</span>\n <input\n value={draft.namespace ?? \"\"}\n placeholder=\"e.g. observability\"\n className=\"rounded-md border border-input bg-background px-3 py-2 outline-none focus:border-primary focus:ring-2 focus:ring-primary/15\"\n onChange={(event) =>\n onDraftChange({ ...draft, namespace: event.target.value })\n }\n />\n </label>\n </section>\n <ProfileFieldManager\n discovered={discovered}\n configured={draft.columns ?? []}\n activeName={activeField}\n onConfiguredChange={(columns) => onDraftChange({ ...draft, columns })}\n onActiveNameChange={onActiveFieldChange}\n />\n </div>\n );\n}\n\nexport function ReviewStep({\n draft,\n discovered,\n}: {\n draft: ProfileWizardDraft;\n discovered: ProfileColumn[];\n}) {\n const connection = profileConnectionID(draft.provider?.connection ?? \"\");\n return (\n <div className=\"mx-auto grid max-w-5xl gap-4 lg:grid-cols-2\">\n <ReviewCard label=\"Profile\" value={draft.profile || \"Unnamed\"}>\n {draft.namespace ? `Namespace: ${draft.namespace}` : \"Default namespace\"}\n </ReviewCard>\n <ReviewCard label=\"Source\" value={connection || \"Not selected\"}>\n {draft.provider?.type || \"Unknown provider\"}\n </ReviewCard>\n <section className=\"rounded-xl border bg-card p-5 lg:col-span-2\">\n <div className=\"flex items-center justify-between gap-4\">\n <div>\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Fields\n </p>\n <h3 className=\"mt-1 font-semibold\">\n {draft.columns?.length ?? 0} of {discovered.length} included\n </h3>\n </div>\n <span className=\"rounded-full bg-primary/10 px-3 py-1 text-xs font-medium text-primary\">\n {draft.columns?.filter((field) => field.hidden).length ?? 0} hidden\n </span>\n </div>\n <div className=\"mt-4 flex flex-wrap gap-2\">\n {(draft.columns ?? []).slice(0, 16).map((field) => (\n <span\n key={field.name}\n className=\"rounded-md border bg-muted/30 px-2.5 py-1.5 font-mono text-xs\"\n >\n {field.label || field.name}\n <span className=\"ml-2 text-muted-foreground\">\n {field.type || \"auto\"}\n </span>\n </span>\n ))}\n {(draft.columns?.length ?? 0) > 16 ? (\n <span className=\"px-2 py-1.5 text-xs text-muted-foreground\">\n +{(draft.columns?.length ?? 0) - 16} more\n </span>\n ) : null}\n </div>\n </section>\n <section className=\"rounded-xl border bg-card p-5 lg:col-span-2\">\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Query\n </p>\n <pre className=\"mt-3 max-h-72 overflow-auto whitespace-pre-wrap rounded-lg bg-muted/50 p-4 font-mono text-xs leading-6\">\n {draft.query}\n </pre>\n </section>\n </div>\n );\n}\n\nfunction ReviewCard({\n label,\n value,\n children,\n}: {\n label: string;\n value: ReactNode;\n children: ReactNode;\n}) {\n return (\n <section className=\"rounded-xl border bg-card p-5\">\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {label}\n </p>\n <h3 className=\"mt-2 text-lg font-semibold\">{value}</h3>\n <p className=\"mt-1 text-sm text-muted-foreground\">{children}</p>\n </section>\n );\n}\n"],"names":["jsx","profileWizardSteps","jsxs","profileWizardErrorMessage","Fragment","profileConnectionID","ProfileFieldManager"],"mappings":";;;;;AAiBO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AACF,GAGG;AACD,SACEA,2BAAAA,IAAC,MAAA,EAAG,WAAU,0BAAyB,cAAW,4BAC/C,UAAAC,mBAAAA,mBAAmB,IAAI,CAAC,MAAM,UAC7BD,2BAAAA,IAAC,MAAA,EACC,UAAAE,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,UAAU,QAAQ;AAAA,MAClB,gBAAc,UAAU,YAAY,SAAS;AAAA,MAC7C,WAAW,mEAAmE,UAAU,YAAY,kCAAkC,uBAAuB;AAAA,MAC7J,SAAS,MAAM,aAAa,KAAK;AAAA,MAEjC,UAAA;AAAA,QAAAF,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW,8EAA8E,SAAS,YAAY,uCAAuC,UAAU;AAAA,YAE9J,UAAA,QAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,QAEXE,2BAAAA,KAAC,QAAA,EAAK,WAAU,2BACd,UAAA;AAAA,UAAAF,2BAAAA,IAAC,QAAA,EAAK,WAAU,sCAAsC,UAAA,KAAK,OAAM;AAAA,UACjEA,2BAAAA,IAAC,QAAA,EAAK,WAAU,8BAA8B,eAAK,YAAA,CAAY;AAAA,QAAA,EAAA,CACjE;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,EACF,GAjBO,KAAK,EAkBd,CACD,GACH;AAEJ;AAEO,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAWG;AACD,SACEE,2BAAAA,KAAC,OAAA,EAAI,WAAU,yDACb,UAAA;AAAA,IAAAA,2BAAAA,KAAC,WAAA,EAAQ,WAAU,6CACjB,UAAA;AAAA,MAAAF,2BAAAA,IAAC,SAAI,WAAU,gBACb,UAAAE,2BAAAA,KAAC,SAAA,EAAM,WAAU,oCAAmC,UAAA;AAAA,QAAA;AAAA,QAElDF,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,OAAO;AAAA,YACP,WAAS;AAAA,YACT,aAAY;AAAA,YACZ,WAAU;AAAA,YACV,UAAU,CAAC,UAAU,eAAe,MAAM,OAAO,KAAK;AAAA,UAAA;AAAA,QAAA;AAAA,MACxD,EAAA,CACF,EAAA,CACF;AAAA,MACAE,2BAAAA,KAAC,OAAA,EAAI,WAAU,mCACZ,UAAA;AAAA,QAAA,QAAQ,IAAI,CAAC,WACZA,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YAEC,MAAK;AAAA,YACL,WAAW,oGAAoG,aAAa,OAAO,QAAQ,gCAAgC,sCAAsC;AAAA,YACjN,SAAS,MAAM,SAAS,MAAM;AAAA,YAE9B,UAAA;AAAA,cAAAA,gCAAC,QAAA,EACC,UAAA;AAAA,gBAAAF,2BAAAA,IAAC,QAAA,EAAK,WAAU,6BAA6B,UAAA,OAAO,MAAK;AAAA,gBACzDA,2BAAAA,IAAC,QAAA,EAAK,WAAU,uCAAsC,UAAA,mBAAA,CAEtD;AAAA,cAAA,GACF;AAAA,cACAA,2BAAAA,IAAC,QAAA,EAAK,WAAU,yDACb,iBAAO,aAAA,CACV;AAAA,YAAA;AAAA,UAAA;AAAA,UAbK,OAAO;AAAA,QAAA,CAef;AAAA,QACA,UACCA,2BAAAA,IAAC,KAAA,EAAE,WAAU,iDAAgD,kCAE7D,IACE;AAAA,QACH,uCACE,KAAA,EAAE,WAAU,4CACV,UAAAG,mBAAAA,0BAA0B,OAAO,4BAA4B,EAAA,CAChE,IACE;AAAA,QACH,CAAC,WAAW,CAAC,SAAS,QAAQ,WAAW,IACxCH,2BAAAA,IAAC,KAAA,EAAE,WAAU,iDAAgD,UAAA,0CAAA,CAE7D,IACE;AAAA,MAAA,GACN;AAAA,MACC,YACCE,2BAAAA,KAAC,KAAA,EAAE,WAAU,oDAAmD,UAAA;AAAA,QAAA;AAAA,QAC3C,QAAQ;AAAA,QAAO;AAAA,QAAK,SAAS;AAAA,QAAO;AAAA,MAAA,EAAA,CACzD,IACE;AAAA,IAAA,GACN;AAAA,IACAA,2BAAAA,KAAC,SAAA,EAAM,WAAU,qCACf,UAAA;AAAA,MAAAF,2BAAAA,IAAC,KAAA,EAAE,WAAU,uEAAsE,UAAA,mBAEnF;AAAA,MACC,WACCE,2BAAAA,KAAAE,qBAAA,EACE,UAAA;AAAA,QAAAJ,+BAAC,MAAA,EAAG,WAAU,sBAAsB,UAAAK,mBAAAA,oBAAoB,QAAQ,GAAE;AAAA,QAClEL,2BAAAA,IAAC,KAAA,EAAE,WAAU,sCAAsC,UAAA,cAAa;AAAA,QAChEA,2BAAAA,IAAC,KAAA,EAAE,WAAU,gDAA+C,UAAA,wFAAA,CAG5D;AAAA,MAAA,EAAA,CACF,IAEAA,2BAAAA,IAAC,KAAA,EAAE,WAAU,gDAA+C,UAAA,iHAAA,CAG5D;AAAA,IAAA,EAAA,CAEJ;AAAA,EAAA,GACF;AAEJ;AAEO,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,SACEE,2BAAAA,KAAC,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,IAAAA,2BAAAA,KAAC,WAAA,EAAQ,WAAU,+DACjB,UAAA;AAAA,MAAAA,2BAAAA,KAAC,SAAA,EAAM,WAAU,oCAAmC,UAAA;AAAA,QAAA;AAAA,QACrCF,2BAAAA,IAAC,QAAA,EAAK,WAAU,oBAAmB,UAAA,KAAC;AAAA,QACjDA,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO,MAAM,WAAW;AAAA,YACxB,aAAY;AAAA,YACZ,WAAU;AAAA,YACV,UAAU,CAAC,UACT,cAAc,EAAE,GAAG,OAAO,SAAS,MAAM,OAAO,MAAA,CAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MAE3D,GACF;AAAA,MACAE,2BAAAA,KAAC,SAAA,EAAM,WAAU,oCAAmC,UAAA;AAAA,QAAA;AAAA,QACxCF,2BAAAA,IAAC,QAAA,EAAK,WAAU,qCAAoC,UAAA,YAAQ;AAAA,QACtEA,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO,MAAM,aAAa;AAAA,YAC1B,aAAY;AAAA,YACZ,WAAU;AAAA,YACV,UAAU,CAAC,UACT,cAAc,EAAE,GAAG,OAAO,WAAW,MAAM,OAAO,MAAA,CAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MAE7D,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IACAA,2BAAAA;AAAAA,MAACM,oBAAAA;AAAAA,MAAA;AAAA,QACC;AAAA,QACA,YAAY,MAAM,WAAW,CAAA;AAAA,QAC7B,YAAY;AAAA,QACZ,oBAAoB,CAAC,YAAY,cAAc,EAAE,GAAG,OAAO,SAAS;AAAA,QACpE,oBAAoB;AAAA,MAAA;AAAA,IAAA;AAAA,EACtB,GACF;AAEJ;AAEO,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AACF,GAGG;;AACD,QAAM,aAAaD,mBAAAA,sBAAoB,WAAM,aAAN,mBAAgB,eAAc,EAAE;AACvE,SACEH,2BAAAA,KAAC,OAAA,EAAI,WAAU,+CACb,UAAA;AAAA,IAAAF,2BAAAA,IAAC,YAAA,EAAW,OAAM,WAAU,OAAO,MAAM,WAAW,WACjD,UAAA,MAAM,YAAY,cAAc,MAAM,SAAS,KAAK,qBACvD;AAAA,IACAA,2BAAAA,IAAC,YAAA,EAAW,OAAM,UAAS,OAAO,cAAc,gBAC7C,YAAA,WAAM,aAAN,mBAAgB,SAAQ,mBAAA,CAC3B;AAAA,IACAE,2BAAAA,KAAC,WAAA,EAAQ,WAAU,+CACjB,UAAA;AAAA,MAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,2CACb,UAAA;AAAA,QAAAA,gCAAC,OAAA,EACC,UAAA;AAAA,UAAAF,2BAAAA,IAAC,KAAA,EAAE,WAAU,uEAAsE,UAAA,UAEnF;AAAA,UACAE,2BAAAA,KAAC,MAAA,EAAG,WAAU,sBACX,UAAA;AAAA,cAAA,WAAM,YAAN,mBAAe,WAAU;AAAA,YAAE;AAAA,YAAK,WAAW;AAAA,YAAO;AAAA,UAAA,EAAA,CACrD;AAAA,QAAA,GACF;AAAA,QACAA,2BAAAA,KAAC,QAAA,EAAK,WAAU,yEACb,UAAA;AAAA,YAAA,WAAM,YAAN,mBAAe,OAAO,CAAC,UAAU,MAAM,QAAQ,WAAU;AAAA,UAAE;AAAA,QAAA,EAAA,CAC9D;AAAA,MAAA,GACF;AAAA,MACAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,6BACX,UAAA;AAAA,SAAA,MAAM,WAAW,CAAA,GAAI,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,UACvCA,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YAEC,WAAU;AAAA,YAET,UAAA;AAAA,cAAA,MAAM,SAAS,MAAM;AAAA,6CACrB,QAAA,EAAK,WAAU,8BACb,UAAA,MAAM,QAAQ,OAAA,CACjB;AAAA,YAAA;AAAA,UAAA;AAAA,UANK,MAAM;AAAA,QAAA,CAQd;AAAA,WACC,WAAM,YAAN,mBAAe,WAAU,KAAK,KAC9BA,2BAAAA,KAAC,QAAA,EAAK,WAAU,6CAA4C,UAAA;AAAA,UAAA;AAAA,aACvD,WAAM,YAAN,mBAAe,WAAU,KAAK;AAAA,UAAG;AAAA,QAAA,EAAA,CACtC,IACE;AAAA,MAAA,EAAA,CACN;AAAA,IAAA,GACF;AAAA,IACAA,2BAAAA,KAAC,WAAA,EAAQ,WAAU,+CACjB,UAAA;AAAA,MAAAF,2BAAAA,IAAC,KAAA,EAAE,WAAU,uEAAsE,UAAA,SAEnF;AAAA,MACAA,2BAAAA,IAAC,OAAA,EAAI,WAAU,0GACZ,gBAAM,MAAA,CACT;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;AAEA,SAAS,WAAW;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,SACEE,2BAAAA,KAAC,WAAA,EAAQ,WAAU,iCACjB,UAAA;AAAA,IAAAF,2BAAAA,IAAC,KAAA,EAAE,WAAU,uEACV,UAAA,OACH;AAAA,IACAA,2BAAAA,IAAC,MAAA,EAAG,WAAU,8BAA8B,UAAA,OAAM;AAAA,IAClDA,2BAAAA,IAAC,KAAA,EAAE,WAAU,sCAAsC,SAAA,CAAS;AAAA,EAAA,GAC9D;AAEJ;;;;;"}
|
|
1
|
+
{"version":3,"file":"profileWizardSteps.cjs","sources":["../../../src/profiles/wizard/profileWizardSteps.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { ProfileFieldManager } from \"../fields/profileFieldManager\";\nimport {\n profileConnectionID,\n profileWizardErrorMessage,\n profileWizardSteps,\n type ProfileColumn,\n type ProfileWizardDraft,\n} from \"./profileWizardModel\";\n\nexport type ConnectionChoice = {\n value: string;\n label: string;\n name: string;\n /** The saved connection's own type, e.g. `aws`. */\n connectionType: string;\n /**\n * The query providers that can read it, most specific first — `aws` yields\n * `[\"cloudwatch\"]`. More than one is a genuine choice the reader has to make\n * (`google_cloud` is read by both `gcpcloudlogging` and `bigquery`); none\n * means no provider reads this connection type at all.\n */\n providerTypes: string[];\n};\n\nexport function WizardProgress({\n stepIndex,\n onStepChange,\n}: {\n stepIndex: number;\n onStepChange: (index: number) => void;\n}) {\n return (\n <ol className=\"grid grid-cols-4 gap-2\" aria-label=\"Profile builder progress\">\n {profileWizardSteps.map((step, index) => (\n <li key={step.id}>\n <button\n type=\"button\"\n disabled={index > stepIndex}\n aria-current={index === stepIndex ? \"step\" : undefined}\n className={`flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-left ${index === stepIndex ? \"bg-primary/10 text-foreground\" : \"text-muted-foreground\"}`}\n onClick={() => onStepChange(index)}\n >\n <span\n className={`grid size-6 shrink-0 place-items-center rounded-full text-xs font-semibold ${index <= stepIndex ? \"bg-primary text-primary-foreground\" : \"bg-muted\"}`}\n >\n {index + 1}\n </span>\n <span className=\"hidden min-w-0 md:block\">\n <span className=\"block truncate text-xs font-medium\">{step.label}</span>\n <span className=\"block truncate text-[10px]\">{step.description}</span>\n </span>\n </button>\n </li>\n ))}\n </ol>\n );\n}\n\nexport function SourceStep({\n choices,\n loading,\n error,\n truncated,\n total,\n search,\n selected,\n selectedType,\n onSearchChange,\n onSelect,\n onProviderTypeChange,\n}: {\n choices: ConnectionChoice[];\n loading: boolean;\n error: unknown;\n truncated?: boolean;\n total?: number;\n search: string;\n selected: string;\n selectedType: string;\n onSearchChange: (search: string) => void;\n onSelect: (choice: ConnectionChoice) => void;\n onProviderTypeChange: (type: string) => void;\n}) {\n const selectedChoice = choices.find((choice) => choice.value === selected);\n return (\n <div className=\"mx-auto grid max-w-4xl gap-5 lg:grid-cols-[1fr_18rem]\">\n <section className=\"overflow-hidden rounded-xl border bg-card\">\n <div className=\"border-b p-4\">\n <label className=\"grid gap-1.5 text-sm font-medium\">\n Find a saved connection\n <input\n type=\"search\"\n value={search}\n autoFocus\n placeholder=\"Search connections\"\n className=\"rounded-md border border-input bg-background px-3 py-2.5 outline-none focus:border-primary focus:ring-2 focus:ring-primary/15\"\n onChange={(event) => onSearchChange(event.target.value)}\n />\n </label>\n </div>\n <div className=\"max-h-[26rem] overflow-auto p-2\">\n {choices.map((choice) => (\n <button\n key={choice.value}\n type=\"button\"\n className={`flex w-full items-center justify-between rounded-lg border px-4 py-3 text-left transition-colors ${selected === choice.value ? \"border-primary bg-primary/8\" : \"border-transparent hover:bg-muted/60\"}`}\n onClick={() => onSelect(choice)}\n >\n <span>\n <span className=\"block text-sm font-medium\">{choice.name}</span>\n <span className=\"block text-xs text-muted-foreground\">\n Saved connection\n </span>\n </span>\n <span\n className={`rounded-full px-2.5 py-1 text-xs font-medium ${choice.providerTypes.length === 0 ? \"bg-destructive/10 text-destructive\" : \"bg-muted\"}`}\n >\n {choice.providerTypes.length === 0\n ? `${choice.connectionType} · not queryable`\n : choice.providerTypes.join(\" / \")}\n </span>\n </button>\n ))}\n {loading ? (\n <p className=\"p-8 text-center text-sm text-muted-foreground\">\n Loading connections…\n </p>\n ) : null}\n {error ? (\n <p className=\"p-8 text-center text-sm text-destructive\">\n {profileWizardErrorMessage(error, \"Unable to load connections\")}\n </p>\n ) : null}\n {!loading && !error && choices.length === 0 ? (\n <p className=\"p-8 text-center text-sm text-muted-foreground\">\n No saved connections match this search.\n </p>\n ) : null}\n </div>\n {truncated ? (\n <p className=\"border-t px-4 py-2 text-xs text-muted-foreground\">\n Showing the first {choices.length} of {total ?? \"many\"}. Search to narrow the list.\n </p>\n ) : null}\n </section>\n <aside className=\"rounded-xl border bg-muted/25 p-5\">\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Selected source\n </p>\n {selected ? (\n <>\n <h3 className=\"mt-3 font-semibold\">{profileConnectionID(selected)}</h3>\n <p className=\"mt-1 text-sm text-muted-foreground\">{selectedType}</p>\n {selectedChoice && selectedChoice.providerTypes.length === 0 ? (\n <p role=\"alert\" className=\"mt-4 text-sm leading-6 text-destructive\">\n No query provider reads {selectedChoice.connectionType}{\" \"}\n connections, so this one cannot back a profile.\n </p>\n ) : null}\n {selectedChoice && selectedChoice.providerTypes.length > 1 ? (\n // A connection type several providers can read is a real choice —\n // a Google Cloud connection is queried very differently by Cloud\n // Logging than by BigQuery — so it is asked rather than guessed.\n <label className=\"mt-4 grid gap-1.5 text-sm font-medium\">\n Read it with\n <select\n value={selectedType}\n className=\"rounded-md border border-input bg-background px-3 py-2 outline-none focus:border-primary focus:ring-2 focus:ring-primary/15\"\n onChange={(event) => onProviderTypeChange(event.target.value)}\n >\n {selectedChoice.providerTypes.map((type) => (\n <option key={type} value={type}>\n {type}\n </option>\n ))}\n </select>\n </label>\n ) : null}\n <p className=\"mt-5 text-sm leading-6 text-muted-foreground\">\n The next step loads this connection's catalog, query language,\n and sampling controls.\n </p>\n </>\n ) : (\n <p className=\"mt-3 text-sm leading-6 text-muted-foreground\">\n Choose a connection to begin. Connection credentials stay on the\n server and are never copied into the profile.\n </p>\n )}\n </aside>\n </div>\n );\n}\n\nexport function FieldsStep({\n draft,\n discovered,\n activeField,\n onDraftChange,\n onActiveFieldChange,\n}: {\n draft: ProfileWizardDraft;\n discovered: ProfileColumn[];\n activeField: string;\n onDraftChange: (draft: ProfileWizardDraft) => void;\n onActiveFieldChange: (name: string) => void;\n}) {\n return (\n <div className=\"grid gap-5\">\n <section className=\"grid gap-4 rounded-xl border bg-muted/25 p-4 md:grid-cols-2\">\n <label className=\"grid gap-1.5 text-sm font-medium\">\n Profile name <span className=\"text-destructive\">*</span>\n <input\n value={draft.profile ?? \"\"}\n placeholder=\"e.g. service-logs\"\n className=\"rounded-md border border-input bg-background px-3 py-2 outline-none focus:border-primary focus:ring-2 focus:ring-primary/15\"\n onChange={(event) =>\n onDraftChange({ ...draft, profile: event.target.value })\n }\n />\n </label>\n <label className=\"grid gap-1.5 text-sm font-medium\">\n Namespace <span className=\"font-normal text-muted-foreground\">Optional</span>\n <input\n value={draft.namespace ?? \"\"}\n placeholder=\"e.g. observability\"\n className=\"rounded-md border border-input bg-background px-3 py-2 outline-none focus:border-primary focus:ring-2 focus:ring-primary/15\"\n onChange={(event) =>\n onDraftChange({ ...draft, namespace: event.target.value })\n }\n />\n </label>\n </section>\n <ProfileFieldManager\n discovered={discovered}\n configured={draft.columns ?? []}\n activeName={activeField}\n onConfiguredChange={(columns) => onDraftChange({ ...draft, columns })}\n onActiveNameChange={onActiveFieldChange}\n />\n </div>\n );\n}\n\nexport function ReviewStep({\n draft,\n discovered,\n}: {\n draft: ProfileWizardDraft;\n discovered: ProfileColumn[];\n}) {\n const connection = profileConnectionID(draft.provider?.connection ?? \"\");\n return (\n <div className=\"mx-auto grid max-w-5xl gap-4 lg:grid-cols-2\">\n <ReviewCard label=\"Profile\" value={draft.profile || \"Unnamed\"}>\n {draft.namespace ? `Namespace: ${draft.namespace}` : \"Default namespace\"}\n </ReviewCard>\n <ReviewCard label=\"Source\" value={connection || \"Not selected\"}>\n {draft.provider?.type || \"Unknown provider\"}\n </ReviewCard>\n <section className=\"rounded-xl border bg-card p-5 lg:col-span-2\">\n <div className=\"flex items-center justify-between gap-4\">\n <div>\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Fields\n </p>\n <h3 className=\"mt-1 font-semibold\">\n {draft.columns?.length ?? 0} of {discovered.length} included\n </h3>\n </div>\n <span className=\"rounded-full bg-primary/10 px-3 py-1 text-xs font-medium text-primary\">\n {draft.columns?.filter((field) => field.hidden).length ?? 0} hidden\n </span>\n </div>\n <div className=\"mt-4 flex flex-wrap gap-2\">\n {(draft.columns ?? []).slice(0, 16).map((field) => (\n <span\n key={field.name}\n className=\"rounded-md border bg-muted/30 px-2.5 py-1.5 font-mono text-xs\"\n >\n {field.label || field.name}\n <span className=\"ml-2 text-muted-foreground\">\n {field.type || \"auto\"}\n </span>\n </span>\n ))}\n {(draft.columns?.length ?? 0) > 16 ? (\n <span className=\"px-2 py-1.5 text-xs text-muted-foreground\">\n +{(draft.columns?.length ?? 0) - 16} more\n </span>\n ) : null}\n </div>\n </section>\n <section className=\"rounded-xl border bg-card p-5 lg:col-span-2\">\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Query\n </p>\n <pre className=\"mt-3 max-h-72 overflow-auto whitespace-pre-wrap rounded-lg bg-muted/50 p-4 font-mono text-xs leading-6\">\n {draft.query}\n </pre>\n </section>\n </div>\n );\n}\n\nfunction ReviewCard({\n label,\n value,\n children,\n}: {\n label: string;\n value: ReactNode;\n children: ReactNode;\n}) {\n return (\n <section className=\"rounded-xl border bg-card p-5\">\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {label}\n </p>\n <h3 className=\"mt-2 text-lg font-semibold\">{value}</h3>\n <p className=\"mt-1 text-sm text-muted-foreground\">{children}</p>\n </section>\n );\n}\n"],"names":["jsx","profileWizardSteps","jsxs","profileWizardErrorMessage","Fragment","profileConnectionID","ProfileFieldManager"],"mappings":"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"}
|
|
@@ -3,13 +3,21 @@ export type ConnectionChoice = {
|
|
|
3
3
|
value: string;
|
|
4
4
|
label: string;
|
|
5
5
|
name: string;
|
|
6
|
-
|
|
6
|
+
/** The saved connection's own type, e.g. `aws`. */
|
|
7
|
+
connectionType: string;
|
|
8
|
+
/**
|
|
9
|
+
* The query providers that can read it, most specific first — `aws` yields
|
|
10
|
+
* `["cloudwatch"]`. More than one is a genuine choice the reader has to make
|
|
11
|
+
* (`google_cloud` is read by both `gcpcloudlogging` and `bigquery`); none
|
|
12
|
+
* means no provider reads this connection type at all.
|
|
13
|
+
*/
|
|
14
|
+
providerTypes: string[];
|
|
7
15
|
};
|
|
8
16
|
export declare function WizardProgress({ stepIndex, onStepChange, }: {
|
|
9
17
|
stepIndex: number;
|
|
10
18
|
onStepChange: (index: number) => void;
|
|
11
19
|
}): import("react/jsx-runtime").JSX.Element;
|
|
12
|
-
export declare function SourceStep({ choices, loading, error, truncated, total, search, selected, selectedType, onSearchChange, onSelect, }: {
|
|
20
|
+
export declare function SourceStep({ choices, loading, error, truncated, total, search, selected, selectedType, onSearchChange, onSelect, onProviderTypeChange, }: {
|
|
13
21
|
choices: ConnectionChoice[];
|
|
14
22
|
loading: boolean;
|
|
15
23
|
error: unknown;
|
|
@@ -20,6 +28,7 @@ export declare function SourceStep({ choices, loading, error, truncated, total,
|
|
|
20
28
|
selectedType: string;
|
|
21
29
|
onSearchChange: (search: string) => void;
|
|
22
30
|
onSelect: (choice: ConnectionChoice) => void;
|
|
31
|
+
onProviderTypeChange: (type: string) => void;
|
|
23
32
|
}): import("react/jsx-runtime").JSX.Element;
|
|
24
33
|
export declare function FieldsStep({ draft, discovered, activeField, onDraftChange, onActiveFieldChange, }: {
|
|
25
34
|
draft: ProfileWizardDraft;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profileWizardSteps.d.ts","sourceRoot":"","sources":["../../../src/profiles/wizard/profileWizardSteps.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,
|
|
1
|
+
{"version":3,"file":"profileWizardSteps.d.ts","sourceRoot":"","sources":["../../../src/profiles/wizard/profileWizardSteps.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,YAAY,GACb,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC,2CA0BA;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,OAAO,EACP,KAAK,EACL,SAAS,EACT,KAAK,EACL,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,oBAAoB,GACrB,EAAE;IACD,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC7C,oBAAoB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C,2CA8GA;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,UAAU,EACV,WAAW,EACX,aAAa,EACb,mBAAmB,GACpB,EAAE;IACD,KAAK,EAAE,kBAAkB,CAAC;IAC1B,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACnD,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C,2CAoCA;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,UAAU,GACX,EAAE;IACD,KAAK,EAAE,kBAAkB,CAAC;IAC1B,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B,2CAqDA"}
|
|
@@ -39,8 +39,10 @@ function SourceStep({
|
|
|
39
39
|
selected,
|
|
40
40
|
selectedType,
|
|
41
41
|
onSearchChange,
|
|
42
|
-
onSelect
|
|
42
|
+
onSelect,
|
|
43
|
+
onProviderTypeChange
|
|
43
44
|
}) {
|
|
45
|
+
const selectedChoice = choices.find((choice) => choice.value === selected);
|
|
44
46
|
return /* @__PURE__ */ jsxs("div", { className: "mx-auto grid max-w-4xl gap-5 lg:grid-cols-[1fr_18rem]", children: [
|
|
45
47
|
/* @__PURE__ */ jsxs("section", { className: "overflow-hidden rounded-xl border bg-card", children: [
|
|
46
48
|
/* @__PURE__ */ jsx("div", { className: "border-b p-4", children: /* @__PURE__ */ jsxs("label", { className: "grid gap-1.5 text-sm font-medium", children: [
|
|
@@ -69,7 +71,13 @@ function SourceStep({
|
|
|
69
71
|
/* @__PURE__ */ jsx("span", { className: "block text-sm font-medium", children: choice.name }),
|
|
70
72
|
/* @__PURE__ */ jsx("span", { className: "block text-xs text-muted-foreground", children: "Saved connection" })
|
|
71
73
|
] }),
|
|
72
|
-
/* @__PURE__ */ jsx(
|
|
74
|
+
/* @__PURE__ */ jsx(
|
|
75
|
+
"span",
|
|
76
|
+
{
|
|
77
|
+
className: `rounded-full px-2.5 py-1 text-xs font-medium ${choice.providerTypes.length === 0 ? "bg-destructive/10 text-destructive" : "bg-muted"}`,
|
|
78
|
+
children: choice.providerTypes.length === 0 ? `${choice.connectionType} · not queryable` : choice.providerTypes.join(" / ")
|
|
79
|
+
}
|
|
80
|
+
)
|
|
73
81
|
]
|
|
74
82
|
},
|
|
75
83
|
choice.value
|
|
@@ -91,6 +99,29 @@ function SourceStep({
|
|
|
91
99
|
selected ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
92
100
|
/* @__PURE__ */ jsx("h3", { className: "mt-3 font-semibold", children: profileConnectionID(selected) }),
|
|
93
101
|
/* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-muted-foreground", children: selectedType }),
|
|
102
|
+
selectedChoice && selectedChoice.providerTypes.length === 0 ? /* @__PURE__ */ jsxs("p", { role: "alert", className: "mt-4 text-sm leading-6 text-destructive", children: [
|
|
103
|
+
"No query provider reads ",
|
|
104
|
+
selectedChoice.connectionType,
|
|
105
|
+
" ",
|
|
106
|
+
"connections, so this one cannot back a profile."
|
|
107
|
+
] }) : null,
|
|
108
|
+
selectedChoice && selectedChoice.providerTypes.length > 1 ? (
|
|
109
|
+
// A connection type several providers can read is a real choice —
|
|
110
|
+
// a Google Cloud connection is queried very differently by Cloud
|
|
111
|
+
// Logging than by BigQuery — so it is asked rather than guessed.
|
|
112
|
+
/* @__PURE__ */ jsxs("label", { className: "mt-4 grid gap-1.5 text-sm font-medium", children: [
|
|
113
|
+
"Read it with",
|
|
114
|
+
/* @__PURE__ */ jsx(
|
|
115
|
+
"select",
|
|
116
|
+
{
|
|
117
|
+
value: selectedType,
|
|
118
|
+
className: "rounded-md border border-input bg-background px-3 py-2 outline-none focus:border-primary focus:ring-2 focus:ring-primary/15",
|
|
119
|
+
onChange: (event) => onProviderTypeChange(event.target.value),
|
|
120
|
+
children: selectedChoice.providerTypes.map((type) => /* @__PURE__ */ jsx("option", { value: type, children: type }, type))
|
|
121
|
+
}
|
|
122
|
+
)
|
|
123
|
+
] })
|
|
124
|
+
) : null,
|
|
94
125
|
/* @__PURE__ */ jsx("p", { className: "mt-5 text-sm leading-6 text-muted-foreground", children: "The next step loads this connection's catalog, query language, and sampling controls." })
|
|
95
126
|
] }) : /* @__PURE__ */ jsx("p", { className: "mt-3 text-sm leading-6 text-muted-foreground", children: "Choose a connection to begin. Connection credentials stay on the server and are never copied into the profile." })
|
|
96
127
|
] })
|