@flanksource/clicky-ui 0.3.24 → 0.3.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE.md +1 -0
- package/dist/ai.cjs +4 -0
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +6 -2
- package/dist/ai.js.map +1 -1
- package/dist/chat.cjs +8 -0
- package/dist/chat.cjs.map +1 -1
- package/dist/chat.js +9 -1
- package/dist/chat.js.map +1 -1
- package/dist/comments/CommentCard.cjs +89 -14
- package/dist/comments/CommentCard.cjs.map +1 -1
- package/dist/comments/CommentCard.d.ts.map +1 -1
- package/dist/comments/CommentCard.js +90 -15
- package/dist/comments/CommentCard.js.map +1 -1
- package/dist/comments/CommentComposer.cjs +25 -2
- package/dist/comments/CommentComposer.cjs.map +1 -1
- package/dist/comments/CommentComposer.d.ts.map +1 -1
- package/dist/comments/CommentComposer.js +25 -2
- package/dist/comments/CommentComposer.js.map +1 -1
- package/dist/comments/CommentProvider.cjs +21 -14
- package/dist/comments/CommentProvider.cjs.map +1 -1
- package/dist/comments/CommentProvider.d.ts +1 -1
- package/dist/comments/CommentProvider.d.ts.map +1 -1
- package/dist/comments/CommentProvider.js +21 -14
- package/dist/comments/CommentProvider.js.map +1 -1
- package/dist/comments/CommentSidePanel.cjs +1 -1
- package/dist/comments/CommentSidePanel.cjs.map +1 -1
- package/dist/comments/CommentSidePanel.js +1 -1
- package/dist/comments/CommentSidePanel.js.map +1 -1
- package/dist/comments/comment-types.cjs.map +1 -1
- package/dist/comments/comment-types.d.ts +6 -0
- package/dist/comments/comment-types.d.ts.map +1 -1
- package/dist/comments/comment-types.js.map +1 -1
- package/dist/components/DimensionField.cjs +56 -0
- package/dist/components/DimensionField.cjs.map +1 -0
- package/dist/components/DimensionField.d.ts +17 -0
- package/dist/components/DimensionField.d.ts.map +1 -0
- package/dist/components/DimensionField.js +56 -0
- package/dist/components/DimensionField.js.map +1 -0
- package/dist/components.cjs +4 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +2 -0
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +4 -0
- package/dist/components.js.map +1 -1
- package/dist/data/Clicky.cjs +4 -5
- package/dist/data/Clicky.cjs.map +1 -1
- package/dist/data/Clicky.d.ts.map +1 -1
- package/dist/data/Clicky.js +4 -5
- package/dist/data/Clicky.js.map +1 -1
- package/dist/data/TaskExecDetails.cjs +8 -3
- package/dist/data/TaskExecDetails.cjs.map +1 -1
- package/dist/data/TaskExecDetails.d.ts +4 -0
- package/dist/data/TaskExecDetails.d.ts.map +1 -1
- package/dist/data/TaskExecDetails.js +9 -4
- package/dist/data/TaskExecDetails.js.map +1 -1
- package/dist/data/TaskManagerButton.cjs +101 -7
- package/dist/data/TaskManagerButton.cjs.map +1 -1
- package/dist/data/TaskManagerButton.d.ts +6 -1
- package/dist/data/TaskManagerButton.d.ts.map +1 -1
- package/dist/data/TaskManagerButton.js +103 -9
- package/dist/data/TaskManagerButton.js.map +1 -1
- package/dist/data/TaskProcessDetails.cjs +2 -0
- package/dist/data/TaskProcessDetails.cjs.map +1 -1
- package/dist/data/TaskProcessDetails.d.ts.map +1 -1
- package/dist/data/TaskProcessDetails.js +2 -0
- package/dist/data/TaskProcessDetails.js.map +1 -1
- package/dist/data/TaskProgress.cjs +14 -4
- package/dist/data/TaskProgress.cjs.map +1 -1
- package/dist/data/TaskProgress.js +14 -4
- package/dist/data/TaskProgress.js.map +1 -1
- package/dist/data/TaskSnapshot.cjs.map +1 -1
- package/dist/data/TaskSnapshot.d.ts +1 -0
- package/dist/data/TaskSnapshot.d.ts.map +1 -1
- package/dist/data/TaskSnapshot.js.map +1 -1
- package/dist/data/ai/ChatWindow.cjs +18 -23
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts +1 -1
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.js +19 -24
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/ChatWindow.preferences.cjs +12 -21
- package/dist/data/ai/ChatWindow.preferences.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.preferences.d.ts +3 -2
- package/dist/data/ai/ChatWindow.preferences.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.preferences.js +12 -21
- package/dist/data/ai/ChatWindow.preferences.js.map +1 -1
- package/dist/data/ai/ChatWindow.tool-catalog.cjs +21 -38
- package/dist/data/ai/ChatWindow.tool-catalog.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.tool-catalog.d.ts +5 -5
- package/dist/data/ai/ChatWindow.tool-catalog.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.tool-catalog.js +21 -38
- package/dist/data/ai/ChatWindow.tool-catalog.js.map +1 -1
- package/dist/data/ai/ChatWindow.types.d.ts +2 -2
- package/dist/data/ai/ChatWindow.types.d.ts.map +1 -1
- package/dist/data/ai/ChatWindowManager.cjs +2 -2
- package/dist/data/ai/ChatWindowManager.cjs.map +1 -1
- package/dist/data/ai/ChatWindowManager.js +2 -2
- package/dist/data/ai/ChatWindowManager.js.map +1 -1
- package/dist/data/ai/ChatWindowRequestBody.cjs +4 -2
- package/dist/data/ai/ChatWindowRequestBody.cjs.map +1 -1
- package/dist/data/ai/ChatWindowRequestBody.d.ts +15 -3
- package/dist/data/ai/ChatWindowRequestBody.d.ts.map +1 -1
- package/dist/data/ai/ChatWindowRequestBody.js +4 -2
- package/dist/data/ai/ChatWindowRequestBody.js.map +1 -1
- package/dist/data/ai/ToolPreferences.cjs +5 -5
- package/dist/data/ai/ToolPreferences.cjs.map +1 -1
- package/dist/data/ai/ToolPreferences.d.ts +6 -5
- package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.js +5 -5
- package/dist/data/ai/ToolPreferences.js.map +1 -1
- package/dist/data/ai/ToolPreferences.model.cjs +61 -37
- package/dist/data/ai/ToolPreferences.model.cjs.map +1 -1
- package/dist/data/ai/ToolPreferences.model.d.ts +32 -13
- package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.model.js +62 -38
- package/dist/data/ai/ToolPreferences.model.js.map +1 -1
- package/dist/data/ai/ToolPreferencesList.cjs +17 -20
- package/dist/data/ai/ToolPreferencesList.cjs.map +1 -1
- package/dist/data/ai/ToolPreferencesList.d.ts +16 -7
- package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferencesList.js +18 -21
- package/dist/data/ai/ToolPreferencesList.js.map +1 -1
- package/dist/data/ai/chat-window-context.cjs +1 -1
- package/dist/data/ai/chat-window-context.cjs.map +1 -1
- package/dist/data/ai/chat-window-context.d.ts +7 -7
- package/dist/data/ai/chat-window-context.d.ts.map +1 -1
- package/dist/data/ai/chat-window-context.js +1 -1
- package/dist/data/ai/chat-window-context.js.map +1 -1
- package/dist/data/ai/index.d.ts +3 -1
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/chat/Chat.cjs +8 -4
- package/dist/data/chat/Chat.cjs.map +1 -1
- package/dist/data/chat/Chat.d.ts.map +1 -1
- package/dist/data/chat/Chat.js +8 -4
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.cjs +11 -7
- package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -1
- package/dist/data/chat/ChatRuntimeToolbar.js +11 -7
- package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
- package/dist/data/chat/ContextMeter.cjs +64 -27
- package/dist/data/chat/ContextMeter.cjs.map +1 -1
- package/dist/data/chat/ContextMeter.d.ts +11 -4
- package/dist/data/chat/ContextMeter.d.ts.map +1 -1
- package/dist/data/chat/ContextMeter.js +64 -27
- package/dist/data/chat/ContextMeter.js.map +1 -1
- package/dist/data/chat/clickyOperationsToTools.cjs +2 -1
- package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -1
- package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -1
- package/dist/data/chat/clickyOperationsToTools.js +2 -1
- package/dist/data/chat/clickyOperationsToTools.js.map +1 -1
- package/dist/data/chat/index.d.ts +2 -1
- package/dist/data/chat/index.d.ts.map +1 -1
- package/dist/data/chat/tool-policy.cjs +132 -0
- package/dist/data/chat/tool-policy.cjs.map +1 -0
- package/dist/data/chat/tool-policy.d.ts +81 -0
- package/dist/data/chat/tool-policy.d.ts.map +1 -0
- package/dist/data/chat/tool-policy.js +132 -0
- package/dist/data/chat/tool-policy.js.map +1 -0
- package/dist/data/chat/types.cjs +20 -0
- package/dist/data/chat/types.cjs.map +1 -1
- package/dist/data/chat/types.d.ts +41 -2
- package/dist/data/chat/types.d.ts.map +1 -1
- package/dist/data/chat/types.js +20 -0
- package/dist/data/chat/types.js.map +1 -1
- package/dist/data/chat/usage-snapshot.cjs +10 -1
- package/dist/data/chat/usage-snapshot.cjs.map +1 -1
- package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
- package/dist/data/chat/usage-snapshot.js +10 -1
- package/dist/data/chat/usage-snapshot.js.map +1 -1
- package/dist/data/debugConsoleSignal.cjs +64 -0
- package/dist/data/debugConsoleSignal.cjs.map +1 -0
- package/dist/data/debugConsoleSignal.d.ts +83 -0
- package/dist/data/debugConsoleSignal.d.ts.map +1 -0
- package/dist/data/debugConsoleSignal.js +64 -0
- package/dist/data/debugConsoleSignal.js.map +1 -0
- package/dist/data/har/HarPanel.cjs +20 -14
- package/dist/data/har/HarPanel.cjs.map +1 -1
- package/dist/data/har/HarPanel.d.ts.map +1 -1
- package/dist/data/har/HarPanel.js +20 -14
- package/dist/data/har/HarPanel.js.map +1 -1
- package/dist/data/har/types.d.ts +18 -0
- package/dist/data/har/types.d.ts.map +1 -1
- package/dist/data/query-browser/QueryBrowser.cjs +4 -42
- package/dist/data/query-browser/QueryBrowser.cjs.map +1 -1
- package/dist/data/query-browser/QueryBrowser.d.ts.map +1 -1
- package/dist/data/query-browser/QueryBrowser.js +5 -43
- package/dist/data/query-browser/QueryBrowser.js.map +1 -1
- package/dist/data/query-browser/QueryBrowser.types.cjs.map +1 -1
- package/dist/data/query-browser/QueryBrowser.types.d.ts +0 -1
- package/dist/data/query-browser/QueryBrowser.types.d.ts.map +1 -1
- package/dist/data/query-browser/QueryBrowser.types.js.map +1 -1
- package/dist/data/useDebugAction.cjs +29 -0
- package/dist/data/useDebugAction.cjs.map +1 -0
- package/dist/data/useDebugAction.d.ts +16 -0
- package/dist/data/useDebugAction.d.ts.map +1 -0
- package/dist/data/useDebugAction.js +29 -0
- package/dist/data/useDebugAction.js.map +1 -0
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +16 -8
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +3 -2
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +16 -8
- package/dist/devtools/DebugConsole.cjs +138 -0
- package/dist/devtools/DebugConsole.cjs.map +1 -0
- package/dist/devtools/DebugConsole.d.ts +23 -0
- package/dist/devtools/DebugConsole.d.ts.map +1 -0
- package/dist/devtools/DebugConsole.js +138 -0
- package/dist/devtools/DebugConsole.js.map +1 -0
- package/dist/devtools/DebugConsoleButton.cjs +59 -0
- package/dist/devtools/DebugConsoleButton.cjs.map +1 -0
- package/dist/devtools/DebugConsoleButton.d.ts +20 -0
- package/dist/devtools/DebugConsoleButton.d.ts.map +1 -0
- package/dist/devtools/DebugConsoleButton.js +59 -0
- package/dist/devtools/DebugConsoleButton.js.map +1 -0
- package/dist/devtools/DebugConsoleDock.cjs +112 -0
- package/dist/devtools/DebugConsoleDock.cjs.map +1 -0
- package/dist/devtools/DebugConsoleDock.d.ts +26 -0
- package/dist/devtools/DebugConsoleDock.d.ts.map +1 -0
- package/dist/devtools/DebugConsoleDock.js +112 -0
- package/dist/devtools/DebugConsoleDock.js.map +1 -0
- package/dist/devtools/ExecutionDetail.cjs +135 -0
- package/dist/devtools/ExecutionDetail.cjs.map +1 -0
- package/dist/devtools/ExecutionDetail.d.ts +19 -0
- package/dist/devtools/ExecutionDetail.d.ts.map +1 -0
- package/dist/devtools/ExecutionDetail.js +135 -0
- package/dist/devtools/ExecutionDetail.js.map +1 -0
- package/dist/devtools/debugClient.cjs +172 -0
- package/dist/devtools/debugClient.cjs.map +1 -0
- package/dist/devtools/debugClient.d.ts +98 -0
- package/dist/devtools/debugClient.d.ts.map +1 -0
- package/dist/devtools/debugClient.js +172 -0
- package/dist/devtools/debugClient.js.map +1 -0
- package/dist/devtools/debugStore.cjs +115 -0
- package/dist/devtools/debugStore.cjs.map +1 -0
- package/dist/devtools/debugStore.d.ts +83 -0
- package/dist/devtools/debugStore.d.ts.map +1 -0
- package/dist/devtools/debugStore.js +115 -0
- package/dist/devtools/debugStore.js.map +1 -0
- package/dist/devtools/dockState.cjs +51 -0
- package/dist/devtools/dockState.cjs.map +1 -0
- package/dist/devtools/dockState.d.ts +31 -0
- package/dist/devtools/dockState.d.ts.map +1 -0
- package/dist/devtools/dockState.js +51 -0
- package/dist/devtools/dockState.js.map +1 -0
- package/dist/devtools/tabs/ConsoleTab.cjs +36 -0
- package/dist/devtools/tabs/ConsoleTab.cjs.map +1 -0
- package/dist/devtools/tabs/ConsoleTab.d.ts +19 -0
- package/dist/devtools/tabs/ConsoleTab.d.ts.map +1 -0
- package/dist/devtools/tabs/ConsoleTab.js +36 -0
- package/dist/devtools/tabs/ConsoleTab.js.map +1 -0
- package/dist/devtools/tabs/InspectionCaches.cjs +150 -0
- package/dist/devtools/tabs/InspectionCaches.cjs.map +1 -0
- package/dist/devtools/tabs/InspectionCaches.d.ts +23 -0
- package/dist/devtools/tabs/InspectionCaches.d.ts.map +1 -0
- package/dist/devtools/tabs/InspectionCaches.js +150 -0
- package/dist/devtools/tabs/InspectionCaches.js.map +1 -0
- package/dist/devtools/tabs/InspectionTab.cjs +316 -0
- package/dist/devtools/tabs/InspectionTab.cjs.map +1 -0
- package/dist/devtools/tabs/InspectionTab.d.ts +27 -0
- package/dist/devtools/tabs/InspectionTab.d.ts.map +1 -0
- package/dist/devtools/tabs/InspectionTab.js +316 -0
- package/dist/devtools/tabs/InspectionTab.js.map +1 -0
- package/dist/devtools/tabs/NetworkTab.cjs +91 -0
- package/dist/devtools/tabs/NetworkTab.cjs.map +1 -0
- package/dist/devtools/tabs/NetworkTab.d.ts +20 -0
- package/dist/devtools/tabs/NetworkTab.d.ts.map +1 -0
- package/dist/devtools/tabs/NetworkTab.js +91 -0
- package/dist/devtools/tabs/NetworkTab.js.map +1 -0
- package/dist/devtools/tabs/QueriesTab.cjs +85 -0
- package/dist/devtools/tabs/QueriesTab.cjs.map +1 -0
- package/dist/devtools/tabs/QueriesTab.d.ts +24 -0
- package/dist/devtools/tabs/QueriesTab.d.ts.map +1 -0
- package/dist/devtools/tabs/QueriesTab.js +85 -0
- package/dist/devtools/tabs/QueriesTab.js.map +1 -0
- package/dist/devtools/types.cjs +26 -0
- package/dist/devtools/types.cjs.map +1 -0
- package/dist/devtools/types.d.ts +235 -0
- package/dist/devtools/types.d.ts.map +1 -0
- package/dist/devtools/types.js +26 -0
- package/dist/devtools/types.js.map +1 -0
- package/dist/devtools/useDebugStream.cjs +46 -0
- package/dist/devtools/useDebugStream.cjs.map +1 -0
- package/dist/devtools/useDebugStream.d.ts +23 -0
- package/dist/devtools/useDebugStream.d.ts.map +1 -0
- package/dist/devtools/useDebugStream.js +46 -0
- package/dist/devtools/useDebugStream.js.map +1 -0
- package/dist/devtools.cjs +51 -0
- package/dist/devtools.cjs.map +1 -0
- package/dist/devtools.d.ts +37 -0
- package/dist/devtools.d.ts.map +1 -0
- package/dist/devtools.js +51 -0
- package/dist/devtools.js.map +1 -0
- package/dist/icons/components/UiOpenScad.cjs +10 -0
- package/dist/icons/components/UiOpenScad.cjs.map +1 -0
- package/dist/icons/components/UiOpenScad.d.ts +9 -0
- package/dist/icons/components/UiOpenScad.d.ts.map +1 -0
- package/dist/icons/components/UiOpenScad.js +10 -0
- package/dist/icons/components/UiOpenScad.js.map +1 -0
- package/dist/icons/index.d.ts +1 -0
- package/dist/icons/index.d.ts.map +1 -1
- package/dist/icons/registry.cjs +2 -0
- package/dist/icons/registry.cjs.map +1 -1
- package/dist/icons/registry.d.ts.map +1 -1
- package/dist/icons/registry.js +2 -0
- package/dist/icons/registry.js.map +1 -1
- package/dist/icons.cjs +2 -0
- package/dist/icons.cjs.map +1 -1
- package/dist/icons.js +2 -0
- package/dist/icons.js.map +1 -1
- package/dist/index.cjs +20 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +20 -8
- package/dist/index.js.map +1 -1
- package/dist/layout/AppShell.cjs +15 -10
- package/dist/layout/AppShell.cjs.map +1 -1
- package/dist/layout/AppShell.d.ts +11 -0
- package/dist/layout/AppShell.d.ts.map +1 -1
- package/dist/layout/AppShell.js +15 -10
- package/dist/layout/AppShell.js.map +1 -1
- package/dist/layout/AppShell.nav.cjs +170 -49
- package/dist/layout/AppShell.nav.cjs.map +1 -1
- package/dist/layout/AppShell.nav.d.ts.map +1 -1
- package/dist/layout/AppShell.nav.js +170 -49
- package/dist/layout/AppShell.nav.js.map +1 -1
- package/dist/overlay/CellActions.cjs +18 -124
- package/dist/overlay/CellActions.cjs.map +1 -1
- package/dist/overlay/CellActions.d.ts +1 -1
- package/dist/overlay/CellActions.d.ts.map +1 -1
- package/dist/overlay/CellActions.js +18 -124
- package/dist/overlay/CellActions.js.map +1 -1
- package/dist/overlay/ContextMenu.cjs +144 -0
- package/dist/overlay/ContextMenu.cjs.map +1 -0
- package/dist/overlay/ContextMenu.d.ts +8 -0
- package/dist/overlay/ContextMenu.d.ts.map +1 -0
- package/dist/overlay/ContextMenu.js +144 -0
- package/dist/overlay/ContextMenu.js.map +1 -0
- package/dist/profiles/connections/connectionBrowserModel.cjs +14 -65
- package/dist/profiles/connections/connectionBrowserModel.cjs.map +1 -1
- package/dist/profiles/connections/connectionBrowserModel.d.ts +35 -35
- package/dist/profiles/connections/connectionBrowserModel.d.ts.map +1 -1
- package/dist/profiles/connections/connectionBrowserModel.js +14 -65
- package/dist/profiles/connections/connectionBrowserModel.js.map +1 -1
- package/dist/profiles/connections/connectionQueryWorkspace.cjs +29 -9
- package/dist/profiles/connections/connectionQueryWorkspace.cjs.map +1 -1
- package/dist/profiles/connections/connectionQueryWorkspace.d.ts +3 -2
- package/dist/profiles/connections/connectionQueryWorkspace.d.ts.map +1 -1
- package/dist/profiles/connections/connectionQueryWorkspace.js +30 -10
- package/dist/profiles/connections/connectionQueryWorkspace.js.map +1 -1
- package/dist/profiles/connections/connectionQueryWorkspaceModel.cjs +15 -0
- package/dist/profiles/connections/connectionQueryWorkspaceModel.cjs.map +1 -1
- package/dist/profiles/connections/connectionQueryWorkspaceModel.d.ts +22 -1
- package/dist/profiles/connections/connectionQueryWorkspaceModel.d.ts.map +1 -1
- package/dist/profiles/connections/connectionQueryWorkspaceModel.js +15 -0
- package/dist/profiles/connections/connectionQueryWorkspaceModel.js.map +1 -1
- package/dist/profiles/connections/index.d.ts +1 -0
- package/dist/profiles/connections/index.d.ts.map +1 -1
- package/dist/profiles/connections/inspectionStatus.cjs +44 -0
- package/dist/profiles/connections/inspectionStatus.cjs.map +1 -0
- package/dist/profiles/connections/inspectionStatus.d.ts +5 -0
- package/dist/profiles/connections/inspectionStatus.d.ts.map +1 -0
- package/dist/profiles/connections/inspectionStatus.js +44 -0
- package/dist/profiles/connections/inspectionStatus.js.map +1 -0
- package/dist/profiles/connections/useInspection.cjs +123 -0
- package/dist/profiles/connections/useInspection.cjs.map +1 -0
- package/dist/profiles/connections/useInspection.d.ts +35 -0
- package/dist/profiles/connections/useInspection.d.ts.map +1 -0
- package/dist/profiles/connections/useInspection.js +123 -0
- package/dist/profiles/connections/useInspection.js.map +1 -0
- package/dist/profiles/editor/profileBuilderWorkspace.cjs +55 -23
- package/dist/profiles/editor/profileBuilderWorkspace.cjs.map +1 -1
- package/dist/profiles/editor/profileBuilderWorkspace.d.ts.map +1 -1
- package/dist/profiles/editor/profileBuilderWorkspace.js +56 -24
- package/dist/profiles/editor/profileBuilderWorkspace.js.map +1 -1
- package/dist/profiles/elasticsearch/esQueryBuilder.cjs +12 -3
- package/dist/profiles/elasticsearch/esQueryBuilder.cjs.map +1 -1
- package/dist/profiles/elasticsearch/esQueryBuilder.d.ts +2 -2
- package/dist/profiles/elasticsearch/esQueryBuilder.d.ts.map +1 -1
- package/dist/profiles/elasticsearch/esQueryBuilder.js +12 -3
- package/dist/profiles/elasticsearch/esQueryBuilder.js.map +1 -1
- package/dist/profiles/fields/profileFieldEditor.cjs +137 -22
- package/dist/profiles/fields/profileFieldEditor.cjs.map +1 -1
- package/dist/profiles/fields/profileFieldEditor.d.ts.map +1 -1
- package/dist/profiles/fields/profileFieldEditor.js +137 -22
- package/dist/profiles/fields/profileFieldEditor.js.map +1 -1
- package/dist/profiles/fields/profileFieldFilterEditor.cjs +171 -82
- package/dist/profiles/fields/profileFieldFilterEditor.cjs.map +1 -1
- package/dist/profiles/fields/profileFieldFilterEditor.d.ts +0 -9
- package/dist/profiles/fields/profileFieldFilterEditor.d.ts.map +1 -1
- package/dist/profiles/fields/profileFieldFilterEditor.js +174 -85
- package/dist/profiles/fields/profileFieldFilterEditor.js.map +1 -1
- package/dist/profiles/fields/profileFieldIcons.cjs +6 -3
- package/dist/profiles/fields/profileFieldIcons.cjs.map +1 -1
- package/dist/profiles/fields/profileFieldIcons.js +6 -3
- package/dist/profiles/fields/profileFieldIcons.js.map +1 -1
- package/dist/profiles/query/profileSampleFilterLookup.cjs +34 -0
- package/dist/profiles/query/profileSampleFilterLookup.cjs.map +1 -0
- package/dist/profiles/query/profileSampleFilterLookup.d.ts +12 -0
- package/dist/profiles/query/profileSampleFilterLookup.d.ts.map +1 -0
- package/dist/profiles/query/profileSampleFilterLookup.js +34 -0
- package/dist/profiles/query/profileSampleFilterLookup.js.map +1 -0
- package/dist/profiles/query/profileSamplePayload.cjs +6 -4
- package/dist/profiles/query/profileSamplePayload.cjs.map +1 -1
- package/dist/profiles/query/profileSamplePayload.d.ts +11 -4
- package/dist/profiles/query/profileSamplePayload.d.ts.map +1 -1
- package/dist/profiles/query/profileSamplePayload.js +6 -4
- package/dist/profiles/query/profileSamplePayload.js.map +1 -1
- package/dist/profiles/query/profileSampleResult.cjs +26 -0
- package/dist/profiles/query/profileSampleResult.cjs.map +1 -0
- package/dist/profiles/query/profileSampleResult.d.ts +11 -0
- package/dist/profiles/query/profileSampleResult.d.ts.map +1 -0
- package/dist/profiles/query/profileSampleResult.js +26 -0
- package/dist/profiles/query/profileSampleResult.js.map +1 -0
- package/dist/profiles/query/queryTargetPicker.cjs +5 -3
- package/dist/profiles/query/queryTargetPicker.cjs.map +1 -1
- package/dist/profiles/query/queryTargetPicker.d.ts +3 -2
- package/dist/profiles/query/queryTargetPicker.d.ts.map +1 -1
- package/dist/profiles/query/queryTargetPicker.js +5 -3
- package/dist/profiles/query/queryTargetPicker.js.map +1 -1
- package/dist/profiles/wizard/profileWizard.cjs +14 -5
- package/dist/profiles/wizard/profileWizard.cjs.map +1 -1
- package/dist/profiles/wizard/profileWizard.d.ts.map +1 -1
- package/dist/profiles/wizard/profileWizard.js +15 -6
- package/dist/profiles/wizard/profileWizard.js.map +1 -1
- package/dist/profiles/wizard/profileWizardModel.cjs +35 -6
- package/dist/profiles/wizard/profileWizardModel.cjs.map +1 -1
- package/dist/profiles/wizard/profileWizardModel.d.ts +29 -4
- package/dist/profiles/wizard/profileWizardModel.d.ts.map +1 -1
- package/dist/profiles/wizard/profileWizardModel.js +35 -6
- package/dist/profiles/wizard/profileWizardModel.js.map +1 -1
- package/dist/profiles/wizard/profileWizardQueryStep.cjs +44 -11
- package/dist/profiles/wizard/profileWizardQueryStep.cjs.map +1 -1
- package/dist/profiles/wizard/profileWizardQueryStep.d.ts.map +1 -1
- package/dist/profiles/wizard/profileWizardQueryStep.js +46 -13
- package/dist/profiles/wizard/profileWizardQueryStep.js.map +1 -1
- package/dist/profiles/wizard/profileWizardSteps.cjs +33 -2
- package/dist/profiles/wizard/profileWizardSteps.cjs.map +1 -1
- package/dist/profiles/wizard/profileWizardSteps.d.ts +11 -2
- package/dist/profiles/wizard/profileWizardSteps.d.ts.map +1 -1
- package/dist/profiles/wizard/profileWizardSteps.js +33 -2
- package/dist/profiles/wizard/profileWizardSteps.js.map +1 -1
- package/dist/profiles.cjs +8 -2
- package/dist/profiles.cjs.map +1 -1
- package/dist/profiles.js +10 -4
- package/dist/profiles.js.map +1 -1
- package/dist/rpc/FilterForm.cjs +21 -237
- package/dist/rpc/FilterForm.cjs.map +1 -1
- package/dist/rpc/FilterForm.d.ts +3 -1
- package/dist/rpc/FilterForm.d.ts.map +1 -1
- package/dist/rpc/FilterForm.js +21 -237
- package/dist/rpc/FilterForm.js.map +1 -1
- package/dist/rpc/FilterFormFields.cjs +240 -0
- package/dist/rpc/FilterFormFields.cjs.map +1 -0
- package/dist/rpc/FilterFormFields.d.ts +12 -0
- package/dist/rpc/FilterFormFields.d.ts.map +1 -0
- package/dist/rpc/FilterFormFields.js +240 -0
- package/dist/rpc/FilterFormFields.js.map +1 -0
- package/dist/rpc/router.cjs +3 -2
- package/dist/rpc/router.cjs.map +1 -1
- package/dist/rpc/router.d.ts.map +1 -1
- package/dist/rpc/router.js +3 -2
- package/dist/rpc/router.js.map +1 -1
- package/dist/rpc/types.cjs.map +1 -1
- package/dist/rpc/types.d.ts +3 -1
- package/dist/rpc/types.d.ts.map +1 -1
- package/dist/rpc/types.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +6 -1
- package/dist/data/query-info/QueryInfoDialog.cjs +0 -106
- package/dist/data/query-info/QueryInfoDialog.cjs.map +0 -1
- package/dist/data/query-info/QueryInfoDialog.d.ts +0 -16
- package/dist/data/query-info/QueryInfoDialog.d.ts.map +0 -1
- package/dist/data/query-info/QueryInfoDialog.js +0 -106
- package/dist/data/query-info/QueryInfoDialog.js.map +0 -1
- package/dist/data/query-info/index.d.ts +0 -4
- package/dist/data/query-info/index.d.ts.map +0 -1
- package/dist/data/query-info/queryInfo.cjs +0 -42
- package/dist/data/query-info/queryInfo.cjs.map +0 -1
- package/dist/data/query-info/queryInfo.d.ts +0 -45
- package/dist/data/query-info/queryInfo.d.ts.map +0 -1
- package/dist/data/query-info/queryInfo.js +0 -42
- package/dist/data/query-info/queryInfo.js.map +0 -1
- package/dist/data/query-info/useQueryInfo.cjs +0 -48
- package/dist/data/query-info/useQueryInfo.cjs.map +0 -1
- package/dist/data/query-info/useQueryInfo.d.ts +0 -26
- package/dist/data/query-info/useQueryInfo.d.ts.map +0 -1
- package/dist/data/query-info/useQueryInfo.js +0 -48
- package/dist/data/query-info/useQueryInfo.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profileWizardSteps.js","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":[],"mappings":";;;AAiBO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AACF,GAGG;AACD,SACE,oBAAC,MAAA,EAAG,WAAU,0BAAyB,cAAW,4BAC/C,UAAA,mBAAmB,IAAI,CAAC,MAAM,UAC7B,oBAAC,MAAA,EACC,UAAA;AAAA,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,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW,8EAA8E,SAAS,YAAY,uCAAuC,UAAU;AAAA,YAE9J,UAAA,QAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,QAEX,qBAAC,QAAA,EAAK,WAAU,2BACd,UAAA;AAAA,UAAA,oBAAC,QAAA,EAAK,WAAU,sCAAsC,UAAA,KAAK,OAAM;AAAA,UACjE,oBAAC,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,SACE,qBAAC,OAAA,EAAI,WAAU,yDACb,UAAA;AAAA,IAAA,qBAAC,WAAA,EAAQ,WAAU,6CACjB,UAAA;AAAA,MAAA,oBAAC,SAAI,WAAU,gBACb,UAAA,qBAAC,SAAA,EAAM,WAAU,oCAAmC,UAAA;AAAA,QAAA;AAAA,QAElD;AAAA,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,MACA,qBAAC,OAAA,EAAI,WAAU,mCACZ,UAAA;AAAA,QAAA,QAAQ,IAAI,CAAC,WACZ;AAAA,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,cAAA,qBAAC,QAAA,EACC,UAAA;AAAA,gBAAA,oBAAC,QAAA,EAAK,WAAU,6BAA6B,UAAA,OAAO,MAAK;AAAA,gBACzD,oBAAC,QAAA,EAAK,WAAU,uCAAsC,UAAA,mBAAA,CAEtD;AAAA,cAAA,GACF;AAAA,cACA,oBAAC,QAAA,EAAK,WAAU,yDACb,iBAAO,aAAA,CACV;AAAA,YAAA;AAAA,UAAA;AAAA,UAbK,OAAO;AAAA,QAAA,CAef;AAAA,QACA,UACC,oBAAC,KAAA,EAAE,WAAU,iDAAgD,kCAE7D,IACE;AAAA,QACH,4BACE,KAAA,EAAE,WAAU,4CACV,UAAA,0BAA0B,OAAO,4BAA4B,EAAA,CAChE,IACE;AAAA,QACH,CAAC,WAAW,CAAC,SAAS,QAAQ,WAAW,IACxC,oBAAC,KAAA,EAAE,WAAU,iDAAgD,UAAA,0CAAA,CAE7D,IACE;AAAA,MAAA,GACN;AAAA,MACC,YACC,qBAAC,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,IACA,qBAAC,SAAA,EAAM,WAAU,qCACf,UAAA;AAAA,MAAA,oBAAC,KAAA,EAAE,WAAU,uEAAsE,UAAA,mBAEnF;AAAA,MACC,WACC,qBAAA,UAAA,EACE,UAAA;AAAA,QAAA,oBAAC,MAAA,EAAG,WAAU,sBAAsB,UAAA,oBAAoB,QAAQ,GAAE;AAAA,QAClE,oBAAC,KAAA,EAAE,WAAU,sCAAsC,UAAA,cAAa;AAAA,QAChE,oBAAC,KAAA,EAAE,WAAU,gDAA+C,UAAA,wFAAA,CAG5D;AAAA,MAAA,EAAA,CACF,IAEA,oBAAC,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,SACE,qBAAC,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,IAAA,qBAAC,WAAA,EAAQ,WAAU,+DACjB,UAAA;AAAA,MAAA,qBAAC,SAAA,EAAM,WAAU,oCAAmC,UAAA;AAAA,QAAA;AAAA,QACrC,oBAAC,QAAA,EAAK,WAAU,oBAAmB,UAAA,KAAC;AAAA,QACjD;AAAA,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,MACA,qBAAC,SAAA,EAAM,WAAU,oCAAmC,UAAA;AAAA,QAAA;AAAA,QACxC,oBAAC,QAAA,EAAK,WAAU,qCAAoC,UAAA,YAAQ;AAAA,QACtE;AAAA,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,IACA;AAAA,MAAC;AAAA,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,aAAa,sBAAoB,WAAM,aAAN,mBAAgB,eAAc,EAAE;AACvE,SACE,qBAAC,OAAA,EAAI,WAAU,+CACb,UAAA;AAAA,IAAA,oBAAC,YAAA,EAAW,OAAM,WAAU,OAAO,MAAM,WAAW,WACjD,UAAA,MAAM,YAAY,cAAc,MAAM,SAAS,KAAK,qBACvD;AAAA,IACA,oBAAC,YAAA,EAAW,OAAM,UAAS,OAAO,cAAc,gBAC7C,YAAA,WAAM,aAAN,mBAAgB,SAAQ,mBAAA,CAC3B;AAAA,IACA,qBAAC,WAAA,EAAQ,WAAU,+CACjB,UAAA;AAAA,MAAA,qBAAC,OAAA,EAAI,WAAU,2CACb,UAAA;AAAA,QAAA,qBAAC,OAAA,EACC,UAAA;AAAA,UAAA,oBAAC,KAAA,EAAE,WAAU,uEAAsE,UAAA,UAEnF;AAAA,UACA,qBAAC,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,QACA,qBAAC,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,MACA,qBAAC,OAAA,EAAI,WAAU,6BACX,UAAA;AAAA,SAAA,MAAM,WAAW,CAAA,GAAI,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,UACvC;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,WAAU;AAAA,YAET,UAAA;AAAA,cAAA,MAAM,SAAS,MAAM;AAAA,kCACrB,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,KAC9B,qBAAC,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,IACA,qBAAC,WAAA,EAAQ,WAAU,+CACjB,UAAA;AAAA,MAAA,oBAAC,KAAA,EAAE,WAAU,uEAAsE,UAAA,SAEnF;AAAA,MACA,oBAAC,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,SACE,qBAAC,WAAA,EAAQ,WAAU,iCACjB,UAAA;AAAA,IAAA,oBAAC,KAAA,EAAE,WAAU,uEACV,UAAA,OACH;AAAA,IACA,oBAAC,MAAA,EAAG,WAAU,8BAA8B,UAAA,OAAM;AAAA,IAClD,oBAAC,KAAA,EAAE,WAAU,sCAAsC,SAAA,CAAS;AAAA,EAAA,GAC9D;AAEJ;"}
|
|
1
|
+
{"version":3,"file":"profileWizardSteps.js","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":[],"mappings":"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"}
|
package/dist/profiles.cjs
CHANGED
|
@@ -48,6 +48,7 @@ const esQueryCompile = require("./profiles/elasticsearch/esQueryCompile.cjs");
|
|
|
48
48
|
const esQueryBuilderModel = require("./profiles/elasticsearch/esQueryBuilderModel.cjs");
|
|
49
49
|
const esQueryOperandModel = require("./profiles/elasticsearch/esQueryOperandModel.cjs");
|
|
50
50
|
const esQueryBuilderForm = require("./profiles/elasticsearch/esQueryBuilderForm.cjs");
|
|
51
|
+
const useInspection = require("./profiles/connections/useInspection.cjs");
|
|
51
52
|
const esQueryBuilderExtension = require("./profiles/elasticsearch/esQueryBuilderExtension.cjs");
|
|
52
53
|
const esParamOperandExtension = require("./profiles/elasticsearch/esParamOperandExtension.cjs");
|
|
53
54
|
const esQueryGroupModel = require("./profiles/elasticsearch/esQueryGroupModel.cjs");
|
|
@@ -120,6 +121,7 @@ exports.PROFILE_FILTER_MAX_LIMIT = profileWizardModel.PROFILE_FILTER_MAX_LIMIT;
|
|
|
120
121
|
exports.applyPatch = profileWizardModel.applyPatch;
|
|
121
122
|
exports.applyVisibleFieldSelection = profileWizardModel.applyVisibleFieldSelection;
|
|
122
123
|
exports.availableProfileFields = profileWizardModel.availableProfileFields;
|
|
124
|
+
exports.connectionTypeFromLabel = profileWizardModel.connectionTypeFromLabel;
|
|
123
125
|
exports.filterProfileFields = profileWizardModel.filterProfileFields;
|
|
124
126
|
exports.inferredFilterKind = profileWizardModel.inferredFilterKind;
|
|
125
127
|
exports.paramHasOptions = profileWizardModel.paramHasOptions;
|
|
@@ -130,7 +132,7 @@ exports.profileWizardErrorMessage = profileWizardModel.profileWizardErrorMessage
|
|
|
130
132
|
exports.profileWizardHasQuery = profileWizardModel.profileWizardHasQuery;
|
|
131
133
|
exports.profileWizardStepReady = profileWizardModel.profileWizardStepReady;
|
|
132
134
|
exports.profileWizardSteps = profileWizardModel.profileWizardSteps;
|
|
133
|
-
exports.
|
|
135
|
+
exports.providerTypesForConnectionType = profileWizardModel.providerTypesForConnectionType;
|
|
134
136
|
exports.renameProfileField = profileWizardModel.renameProfileField;
|
|
135
137
|
exports.reorderProfileColumns = profileWizardModel.reorderProfileColumns;
|
|
136
138
|
exports.withProfileLimits = profileWizardModel.withProfileLimits;
|
|
@@ -184,7 +186,6 @@ exports.openSearchIndexOptions = connectionBrowserModel.openSearchIndexOptions;
|
|
|
184
186
|
exports.openSearchTargetKind = connectionBrowserModel.openSearchTargetKind;
|
|
185
187
|
exports.queryBrowserOptionsSchema = connectionBrowserModel.queryBrowserOptionsSchema;
|
|
186
188
|
exports.savedConnectionID = connectionBrowserModel.savedConnectionID;
|
|
187
|
-
exports.useInspection = connectionBrowserModel.useInspection;
|
|
188
189
|
exports.withTarget = connectionBrowserModel.withTarget;
|
|
189
190
|
exports.celDecoder = celPath.celDecoder;
|
|
190
191
|
exports.celFieldAccess = celPath.celFieldAccess;
|
|
@@ -246,12 +247,17 @@ exports.paramRoles = esQueryBuilderForm.paramRoles;
|
|
|
246
247
|
exports.selectTimeField = esQueryBuilderForm.selectTimeField;
|
|
247
248
|
exports.timeFieldFormatRequired = esQueryBuilderForm.timeFieldFormatRequired;
|
|
248
249
|
exports.timeFieldMappings = esQueryBuilderForm.timeFieldMappings;
|
|
250
|
+
exports.effectiveInspectionDatabase = useInspection.effectiveInspectionDatabase;
|
|
251
|
+
exports.inspectionURL = useInspection.inspectionURL;
|
|
252
|
+
exports.useInspection = useInspection.useInspection;
|
|
249
253
|
exports.esQueryBuilderFormExtensions = esQueryBuilderExtension.esQueryBuilderFormExtensions;
|
|
250
254
|
exports.extendEsParamOperand = esParamOperandExtension.extendEsParamOperand;
|
|
251
255
|
exports.groupOperatorOptions = esQueryGroupModel.groupOperatorOptions;
|
|
252
256
|
exports.isGroupOperator = esQueryGroupModel.isGroupOperator;
|
|
253
257
|
exports.initialNavigatorTab = connectionQueryWorkspaceModel.initialNavigatorTab;
|
|
258
|
+
exports.logsResultSort = connectionQueryWorkspaceModel.logsResultSort;
|
|
254
259
|
exports.navigatorTabs = connectionQueryWorkspaceModel.navigatorTabs;
|
|
260
|
+
exports.structuredSearchRequest = connectionQueryWorkspaceModel.structuredSearchRequest;
|
|
255
261
|
exports.supportsQueryBuilder = connectionQueryWorkspaceModel.supportsQueryBuilder;
|
|
256
262
|
exports.kubernetesWorkloadTargetValue = kubernetesWorkloadTarget.kubernetesWorkloadTargetValue;
|
|
257
263
|
exports.withKubernetesWorkloadTarget = kubernetesWorkloadTarget.withKubernetesWorkloadTarget;
|
package/dist/profiles.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiles.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"profiles.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/profiles.js
CHANGED
|
@@ -15,7 +15,7 @@ import { FieldsStep, ReviewStep, SourceStep, WizardProgress } from "./profiles/w
|
|
|
15
15
|
import { JsonPathProfileProvider } from "./profiles/query/jsonPathSampleRow.js";
|
|
16
16
|
import { JsonPathSampleRowsContext, evaluateJsonPath, sampleRequestProfile, useJsonPathSample, useJsonPathSampleRows } from "./profiles/query/jsonPathSample.js";
|
|
17
17
|
import { KubernetesWorkloadTargetPicker } from "./profiles/query/kubernetesWorkloadTargetPicker.js";
|
|
18
|
-
import { PARAM_TYPES_WITH_OPTIONS, PROFILE_COLUMN_FORMAT_OPTIONS, PROFILE_COLUMN_UNIT_OPTIONS, PROFILE_FILTER_DEFAULT_LIMIT, PROFILE_FILTER_KIND_OPTIONS, PROFILE_FILTER_MAX_LIMIT, applyPatch, applyVisibleFieldSelection, availableProfileFields, filterProfileFields, inferredFilterKind, paramHasOptions, patchColumnFilter, patchProfileField, profileConnectionID, profileWizardErrorMessage, profileWizardHasQuery, profileWizardStepReady, profileWizardSteps,
|
|
18
|
+
import { PARAM_TYPES_WITH_OPTIONS, PROFILE_COLUMN_FORMAT_OPTIONS, PROFILE_COLUMN_UNIT_OPTIONS, PROFILE_FILTER_DEFAULT_LIMIT, PROFILE_FILTER_KIND_OPTIONS, PROFILE_FILTER_MAX_LIMIT, applyPatch, applyVisibleFieldSelection, availableProfileFields, connectionTypeFromLabel, filterProfileFields, inferredFilterKind, paramHasOptions, patchColumnFilter, patchProfileField, profileConnectionID, profileWizardErrorMessage, profileWizardHasQuery, profileWizardStepReady, profileWizardSteps, providerTypesForConnectionType, renameProfileField, reorderProfileColumns, withProfileLimits } from "./profiles/wizard/profileWizardModel.js";
|
|
19
19
|
import { PROCESSOR_CEL_SCOPES, PROCESSOR_CONFIG_KEYS, effectiveConfig, effectiveType, pagingBlock, reorder, resolveConfig, validateProcessor } from "./profiles/processor/processorConfig.js";
|
|
20
20
|
import { PROFILE_FIELD_TYPES } from "./profiles/fields/profileFieldTypes.js";
|
|
21
21
|
import { ParamMappingPill } from "./profiles/elasticsearch/esParamMappingPill.js";
|
|
@@ -37,7 +37,7 @@ import { QueryTargetPicker } from "./profiles/query/queryTargetPicker.js";
|
|
|
37
37
|
import { ValueCombobox, ValuesCombobox } from "./profiles/elasticsearch/esValueCombobox.js";
|
|
38
38
|
import { addParamMapping, bindParamOperand, paramMappings, reconcileParamMappings, reconcileSearchParamMappings, removeParamMapping } from "./profiles/elasticsearch/esParamMappingModel.js";
|
|
39
39
|
import { applyRowLimit } from "./profiles/query/queryRowLimitsModel.js";
|
|
40
|
-
import { browserBaseUrl, completionForInspection, fetchJSON, mergeProviderOptions, openSearchIndexOptions, openSearchTargetKind, queryBrowserOptionsSchema, savedConnectionID,
|
|
40
|
+
import { browserBaseUrl, completionForInspection, fetchJSON, mergeProviderOptions, openSearchIndexOptions, openSearchTargetKind, queryBrowserOptionsSchema, savedConnectionID, withTarget } from "./profiles/connections/connectionBrowserModel.js";
|
|
41
41
|
import { celDecoder, celFieldAccess, celPathFor, decodedKind } from "./profiles/cel/celPath.js";
|
|
42
42
|
import { celEditorFormExtensions } from "./profiles/cel/celEditorExtension.js";
|
|
43
43
|
import { changeConditionOperator, esBuilderVocabulary, esQualifiersFromSchema, fieldFamily, fieldWarning, operatorCatalogFromSchema, operatorsForField, qualifiersForOperator, sortableFields } from "./profiles/elasticsearch/esQueryOperators.js";
|
|
@@ -46,10 +46,11 @@ import { compileRequestBody, errorMessage, useCompiledSearch } from "./profiles/
|
|
|
46
46
|
import { conditionAt, defaultOperatorForFamily, emptyCondition, emptyGroup, fieldForParam, insertAt, isEmptySpec, isParamValue, normalizeOccur, paramName, removeAt, toBuilderMode, toRawMode, updateAt } from "./profiles/elasticsearch/esQueryBuilderModel.js";
|
|
47
47
|
import { conditionOperandPatch, multipleConditionValues } from "./profiles/elasticsearch/esQueryOperandModel.js";
|
|
48
48
|
import { defaultParamValues, esQueryFields, paramNames, paramRoles, selectTimeField, timeFieldFormatRequired, timeFieldMappings } from "./profiles/elasticsearch/esQueryBuilderForm.js";
|
|
49
|
+
import { effectiveInspectionDatabase, inspectionURL, useInspection } from "./profiles/connections/useInspection.js";
|
|
49
50
|
import { esQueryBuilderFormExtensions } from "./profiles/elasticsearch/esQueryBuilderExtension.js";
|
|
50
51
|
import { extendEsParamOperand } from "./profiles/elasticsearch/esParamOperandExtension.js";
|
|
51
52
|
import { groupOperatorOptions, isGroupOperator } from "./profiles/elasticsearch/esQueryGroupModel.js";
|
|
52
|
-
import { initialNavigatorTab, navigatorTabs, supportsQueryBuilder } from "./profiles/connections/connectionQueryWorkspaceModel.js";
|
|
53
|
+
import { initialNavigatorTab, logsResultSort, navigatorTabs, structuredSearchRequest, supportsQueryBuilder } from "./profiles/connections/connectionQueryWorkspaceModel.js";
|
|
53
54
|
import { kubernetesWorkloadTargetValue, withKubernetesWorkloadTarget } from "./profiles/query/kubernetesWorkloadTarget.js";
|
|
54
55
|
import { makeFieldValueLookup, valueLookupField } from "./profiles/elasticsearch/esFieldValues.js";
|
|
55
56
|
import { mapTimestampColumn, profileColumnTypeLabel } from "./profiles/fields/profileColumnModel.js";
|
|
@@ -145,11 +146,13 @@ export {
|
|
|
145
146
|
conditionAt,
|
|
146
147
|
conditionOperandPatch,
|
|
147
148
|
configureProfiles,
|
|
149
|
+
connectionTypeFromLabel,
|
|
148
150
|
coverage,
|
|
149
151
|
decodedKind,
|
|
150
152
|
defaultOperatorForFamily,
|
|
151
153
|
defaultParamValues,
|
|
152
154
|
effectiveConfig,
|
|
155
|
+
effectiveInspectionDatabase,
|
|
153
156
|
effectiveType,
|
|
154
157
|
emptyCondition,
|
|
155
158
|
emptyGroup,
|
|
@@ -171,12 +174,14 @@ export {
|
|
|
171
174
|
inferredFilterKind,
|
|
172
175
|
initialNavigatorTab,
|
|
173
176
|
insertAt,
|
|
177
|
+
inspectionURL,
|
|
174
178
|
isClean,
|
|
175
179
|
isEmptySpec,
|
|
176
180
|
isGroupOperator,
|
|
177
181
|
isIdentifier,
|
|
178
182
|
isParamValue,
|
|
179
183
|
kubernetesWorkloadTargetValue,
|
|
184
|
+
logsResultSort,
|
|
180
185
|
makeFieldValueLookup,
|
|
181
186
|
mapTimestampColumn,
|
|
182
187
|
mergeProfileProjection,
|
|
@@ -238,8 +243,8 @@ export {
|
|
|
238
243
|
profileYamlFilename,
|
|
239
244
|
providerConnectionSchema,
|
|
240
245
|
providerOptionsSchema,
|
|
241
|
-
providerTypeFromConnectionLabel,
|
|
242
246
|
providerTypes,
|
|
247
|
+
providerTypesForConnectionType,
|
|
243
248
|
pruneEmpty,
|
|
244
249
|
qualifiersForOperator,
|
|
245
250
|
queryBrowserOptionsSchema,
|
|
@@ -259,6 +264,7 @@ export {
|
|
|
259
264
|
selectTimeField,
|
|
260
265
|
sortableFields,
|
|
261
266
|
stepHelp,
|
|
267
|
+
structuredSearchRequest,
|
|
262
268
|
supportsQueryBuilder,
|
|
263
269
|
timeFieldFormatRequired,
|
|
264
270
|
timeFieldMappings,
|
package/dist/profiles.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiles.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"profiles.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/rpc/FilterForm.cjs
CHANGED
|
@@ -4,11 +4,10 @@ const jsxRuntime = require("react/jsx-runtime");
|
|
|
4
4
|
const react = require("react");
|
|
5
5
|
const reactQuery = require("@tanstack/react-query");
|
|
6
6
|
const button = require("../components/button.cjs");
|
|
7
|
-
const
|
|
8
|
-
const TimeRange = require("../components/TimeRange.cjs");
|
|
9
|
-
const utils = require("../lib/utils.cjs");
|
|
7
|
+
const FilterBar = require("../components/FilterBar.cjs");
|
|
10
8
|
const formMetadata = require("./formMetadata.cjs");
|
|
11
9
|
const useOperations = require("./useOperations.cjs");
|
|
10
|
+
const FilterFormFields = require("./FilterFormFields.cjs");
|
|
12
11
|
function FilterForm({
|
|
13
12
|
client,
|
|
14
13
|
path,
|
|
@@ -24,6 +23,7 @@ function FilterForm({
|
|
|
24
23
|
emptyMessage = "This operation does not require input.",
|
|
25
24
|
isSubmitting = false,
|
|
26
25
|
className,
|
|
26
|
+
presentation = "form",
|
|
27
27
|
onSubmit
|
|
28
28
|
}) {
|
|
29
29
|
var _a;
|
|
@@ -77,7 +77,7 @@ function FilterForm({
|
|
|
77
77
|
values
|
|
78
78
|
]
|
|
79
79
|
);
|
|
80
|
-
const hasFields = formConfig.filters.length > 0 || formConfig.timeRange != null;
|
|
80
|
+
const hasFields = formConfig.filters.length > 0 || formConfig.search != null || formConfig.timeRange != null;
|
|
81
81
|
async function handleSubmit(event) {
|
|
82
82
|
event == null ? void 0 : event.preventDefault();
|
|
83
83
|
const missingRequired = parameters.filter((param) => {
|
|
@@ -128,8 +128,23 @@ function FilterForm({
|
|
|
128
128
|
void onSubmit(submittedValues);
|
|
129
129
|
}, [autoSubmit, debouncedValues, lockedValues, onSubmit, parameters]);
|
|
130
130
|
return /* @__PURE__ */ jsxRuntime.jsxs("form", { className: "space-y-3", onSubmit: handleSubmit, children: [
|
|
131
|
-
hasFields ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
132
|
-
|
|
131
|
+
hasFields ? presentation === "filter-bar" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
132
|
+
FilterBar.FilterBar,
|
|
133
|
+
{
|
|
134
|
+
autoSubmit,
|
|
135
|
+
filters: formConfig.filters,
|
|
136
|
+
overflowMode: "wrap",
|
|
137
|
+
...formConfig.search ? { search: formConfig.search } : {},
|
|
138
|
+
...formConfig.timeRange ? { timeRange: formConfig.timeRange } : {},
|
|
139
|
+
...!autoSubmit ? {
|
|
140
|
+
onApply: () => void handleSubmit(),
|
|
141
|
+
applyLabel: submitLabel,
|
|
142
|
+
isPending: isSubmitting
|
|
143
|
+
} : {},
|
|
144
|
+
...className ? { className } : {}
|
|
145
|
+
}
|
|
146
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
147
|
+
FilterFormFields.ParameterGrid,
|
|
133
148
|
{
|
|
134
149
|
autoSubmit,
|
|
135
150
|
filters: formConfig.filters,
|
|
@@ -146,236 +161,5 @@ function FilterForm({
|
|
|
146
161
|
error && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-md border border-destructive/40 bg-destructive/5 p-3 text-sm text-destructive", children: error })
|
|
147
162
|
] });
|
|
148
163
|
}
|
|
149
|
-
function ParameterGrid({
|
|
150
|
-
filters,
|
|
151
|
-
timeRange,
|
|
152
|
-
autoSubmit,
|
|
153
|
-
isSubmitting,
|
|
154
|
-
submitLabel,
|
|
155
|
-
submittingLabel,
|
|
156
|
-
className
|
|
157
|
-
}) {
|
|
158
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: utils.cn("space-y-3", className), children: [
|
|
159
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "divide-y divide-border border-y border-border", children: [
|
|
160
|
-
filters.map((filter) => /* @__PURE__ */ jsxRuntime.jsx(ParameterRow, { filter }, filter.key)),
|
|
161
|
-
timeRange && /* @__PURE__ */ jsxRuntime.jsx(TimeRangeRow, { timeRange })
|
|
162
|
-
] }),
|
|
163
|
-
!autoSubmit && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsxRuntime.jsx(button.Button, { type: "submit", disabled: isSubmitting, children: isSubmitting ? submittingLabel : submitLabel }) })
|
|
164
|
-
] });
|
|
165
|
-
}
|
|
166
|
-
function ParameterRow({ filter }) {
|
|
167
|
-
const id = `clicky-param-${filter.key.replace(/[^a-zA-Z0-9_-]/g, "-")}`;
|
|
168
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
169
|
-
"div",
|
|
170
|
-
{
|
|
171
|
-
title: filter.description,
|
|
172
|
-
className: utils.cn(
|
|
173
|
-
"grid grid-cols-1 gap-2 py-2 sm:grid-cols-[minmax(8rem,14rem)_minmax(0,1fr)] sm:items-center",
|
|
174
|
-
filter.disabled && "opacity-60"
|
|
175
|
-
),
|
|
176
|
-
children: [
|
|
177
|
-
/* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: id, className: "text-sm font-medium text-muted-foreground", children: filter.label }),
|
|
178
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0", children: renderParameterInput(filter, id) })
|
|
179
|
-
]
|
|
180
|
-
}
|
|
181
|
-
);
|
|
182
|
-
}
|
|
183
|
-
function renderParameterInput(filter, id) {
|
|
184
|
-
if (filter.kind === "date-range") {
|
|
185
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
186
|
-
TimeRange.TimeRange,
|
|
187
|
-
{
|
|
188
|
-
kind: filter.timeEnabled === false ? "date" : "time",
|
|
189
|
-
label: filter.label,
|
|
190
|
-
align: "left",
|
|
191
|
-
from: filter.from ?? "",
|
|
192
|
-
to: filter.to ?? "",
|
|
193
|
-
onApply: filter.onApply,
|
|
194
|
-
...filter.disabled !== void 0 ? { disabled: filter.disabled } : {},
|
|
195
|
-
...filter.presets ? { presets: filter.presets } : {},
|
|
196
|
-
...filter.timeEnabled !== void 0 ? { timeEnabled: filter.timeEnabled } : {},
|
|
197
|
-
...filter.timeZone ? { timeZone: filter.timeZone } : {},
|
|
198
|
-
...filter.timeZones ? { timeZones: filter.timeZones } : {},
|
|
199
|
-
...filter.fromPlaceholder ? { fromPlaceholder: filter.fromPlaceholder } : {},
|
|
200
|
-
...filter.toPlaceholder ? { toPlaceholder: filter.toPlaceholder } : {}
|
|
201
|
-
}
|
|
202
|
-
);
|
|
203
|
-
}
|
|
204
|
-
if (filter.kind === "enum") {
|
|
205
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
206
|
-
"select",
|
|
207
|
-
{
|
|
208
|
-
id,
|
|
209
|
-
"aria-label": filter.label,
|
|
210
|
-
className: inputClassName,
|
|
211
|
-
value: filter.value,
|
|
212
|
-
disabled: filter.disabled,
|
|
213
|
-
onChange: (event) => filter.onChange(event.target.value),
|
|
214
|
-
children: [
|
|
215
|
-
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "", children: filter.placeholder ?? "" }),
|
|
216
|
-
filter.options.map((option) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: option.value, children: option.label ?? option.value }, option.value))
|
|
217
|
-
]
|
|
218
|
-
}
|
|
219
|
-
);
|
|
220
|
-
}
|
|
221
|
-
if (filter.kind === "boolean") {
|
|
222
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-8 items-center", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
223
|
-
"input",
|
|
224
|
-
{
|
|
225
|
-
id,
|
|
226
|
-
type: "checkbox",
|
|
227
|
-
"aria-label": filter.label,
|
|
228
|
-
className: "h-4 w-4 accent-primary disabled:cursor-not-allowed",
|
|
229
|
-
checked: filter.value,
|
|
230
|
-
disabled: filter.disabled,
|
|
231
|
-
onChange: (event) => filter.onChange(event.target.checked)
|
|
232
|
-
}
|
|
233
|
-
) });
|
|
234
|
-
}
|
|
235
|
-
if (filter.kind === "lookup") {
|
|
236
|
-
const listId = `${id}-options`;
|
|
237
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
238
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
239
|
-
"input",
|
|
240
|
-
{
|
|
241
|
-
id,
|
|
242
|
-
type: filter.inputType === "number" ? "number" : "text",
|
|
243
|
-
"aria-label": filter.label,
|
|
244
|
-
className: inputClassName,
|
|
245
|
-
...filter.placeholder !== void 0 ? { placeholder: filter.placeholder } : {},
|
|
246
|
-
value: filter.value,
|
|
247
|
-
list: listId,
|
|
248
|
-
disabled: filter.disabled,
|
|
249
|
-
onChange: (event) => filter.onChange(event.target.value)
|
|
250
|
-
}
|
|
251
|
-
),
|
|
252
|
-
/* @__PURE__ */ jsxRuntime.jsx("datalist", { id: listId, children: filter.options.map((option) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
253
|
-
"option",
|
|
254
|
-
{
|
|
255
|
-
value: option.value,
|
|
256
|
-
label: option.label ?? option.value,
|
|
257
|
-
disabled: option.disabled
|
|
258
|
-
},
|
|
259
|
-
option.value
|
|
260
|
-
)) })
|
|
261
|
-
] });
|
|
262
|
-
}
|
|
263
|
-
if (filter.kind === "lookup-multi") {
|
|
264
|
-
const listId = `${id}-options`;
|
|
265
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
266
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
267
|
-
"input",
|
|
268
|
-
{
|
|
269
|
-
id,
|
|
270
|
-
type: "text",
|
|
271
|
-
"aria-label": filter.label,
|
|
272
|
-
className: inputClassName,
|
|
273
|
-
...filter.placeholder !== void 0 ? { placeholder: filter.placeholder } : {},
|
|
274
|
-
value: filter.value.join(", "),
|
|
275
|
-
list: listId,
|
|
276
|
-
disabled: filter.disabled,
|
|
277
|
-
onChange: (event) => filter.onChange(splitCommaValues(event.target.value))
|
|
278
|
-
}
|
|
279
|
-
),
|
|
280
|
-
/* @__PURE__ */ jsxRuntime.jsx("datalist", { id: listId, children: filter.options.map((option) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
281
|
-
"option",
|
|
282
|
-
{
|
|
283
|
-
value: option.value,
|
|
284
|
-
label: option.label ?? option.value,
|
|
285
|
-
disabled: option.disabled
|
|
286
|
-
},
|
|
287
|
-
option.value
|
|
288
|
-
)) })
|
|
289
|
-
] });
|
|
290
|
-
}
|
|
291
|
-
if (filter.kind === "multi") {
|
|
292
|
-
return /* @__PURE__ */ jsxRuntime.jsx(MultiParameterInput, { filter, id });
|
|
293
|
-
}
|
|
294
|
-
if (filter.kind === "text") {
|
|
295
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
296
|
-
"input",
|
|
297
|
-
{
|
|
298
|
-
id,
|
|
299
|
-
type: "text",
|
|
300
|
-
"aria-label": filter.label,
|
|
301
|
-
className: inputClassName,
|
|
302
|
-
...filter.placeholder !== void 0 ? { placeholder: filter.placeholder } : {},
|
|
303
|
-
value: filter.value,
|
|
304
|
-
disabled: filter.disabled,
|
|
305
|
-
onChange: (event) => filter.onChange(event.target.value)
|
|
306
|
-
}
|
|
307
|
-
);
|
|
308
|
-
}
|
|
309
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
310
|
-
"input",
|
|
311
|
-
{
|
|
312
|
-
id,
|
|
313
|
-
type: "text",
|
|
314
|
-
"aria-label": filter.label,
|
|
315
|
-
className: inputClassName,
|
|
316
|
-
value: JSON.stringify(filter.value),
|
|
317
|
-
disabled: true,
|
|
318
|
-
readOnly: true
|
|
319
|
-
}
|
|
320
|
-
);
|
|
321
|
-
}
|
|
322
|
-
function MultiParameterInput({
|
|
323
|
-
filter,
|
|
324
|
-
id
|
|
325
|
-
}) {
|
|
326
|
-
const moreCount = filter.truncated && filter.total ? Math.max(filter.total - filter.options.length, 0) : 0;
|
|
327
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
328
|
-
Combobox.Combobox,
|
|
329
|
-
{
|
|
330
|
-
multiple: true,
|
|
331
|
-
id,
|
|
332
|
-
ariaLabel: filter.label,
|
|
333
|
-
value: Object.keys(filter.value),
|
|
334
|
-
options: filter.options.map((option) => ({
|
|
335
|
-
value: option.value,
|
|
336
|
-
label: typeof option.label === "string" ? option.label : option.title ?? option.value,
|
|
337
|
-
...option.disabled !== void 0 ? { disabled: option.disabled } : {},
|
|
338
|
-
...option.title !== void 0 ? { title: option.title } : {}
|
|
339
|
-
})),
|
|
340
|
-
onChange: (values) => {
|
|
341
|
-
const next = {};
|
|
342
|
-
for (const value of values)
|
|
343
|
-
next[value] = filter.value[value] ?? "include";
|
|
344
|
-
filter.onChange(next);
|
|
345
|
-
},
|
|
346
|
-
allowCustomValue: filter.allowCustomValue ?? false,
|
|
347
|
-
...filter.placeholder !== void 0 ? { placeholder: filter.placeholder } : {},
|
|
348
|
-
...filter.disabled !== void 0 ? { disabled: filter.disabled } : {},
|
|
349
|
-
...filter.className !== void 0 ? { className: filter.className } : {},
|
|
350
|
-
...moreCount > 0 ? { footer: `… and ${moreCount.toLocaleString()} more` } : {}
|
|
351
|
-
}
|
|
352
|
-
);
|
|
353
|
-
}
|
|
354
|
-
function TimeRangeRow({ timeRange }) {
|
|
355
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-2 py-2 sm:grid-cols-[minmax(8rem,14rem)_minmax(0,1fr)] sm:items-center", children: [
|
|
356
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm font-medium text-muted-foreground", children: "Time range" }),
|
|
357
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
358
|
-
TimeRange.TimeRange,
|
|
359
|
-
{
|
|
360
|
-
kind: timeRange.timeEnabled ? "time" : "date",
|
|
361
|
-
label: "Time range",
|
|
362
|
-
align: "left",
|
|
363
|
-
from: timeRange.from ?? "",
|
|
364
|
-
to: timeRange.to ?? "",
|
|
365
|
-
onApply: timeRange.onApply,
|
|
366
|
-
...timeRange.presets ? { presets: timeRange.presets } : {},
|
|
367
|
-
...timeRange.timeEnabled !== void 0 ? { timeEnabled: timeRange.timeEnabled } : {},
|
|
368
|
-
...timeRange.timeZone ? { timeZone: timeRange.timeZone } : {},
|
|
369
|
-
...timeRange.timeZones ? { timeZones: timeRange.timeZones } : {},
|
|
370
|
-
...timeRange.fromPlaceholder ? { fromPlaceholder: timeRange.fromPlaceholder } : {},
|
|
371
|
-
...timeRange.toPlaceholder ? { toPlaceholder: timeRange.toPlaceholder } : {}
|
|
372
|
-
}
|
|
373
|
-
) })
|
|
374
|
-
] });
|
|
375
|
-
}
|
|
376
|
-
function splitCommaValues(value) {
|
|
377
|
-
return value.split(",").map((item) => item.trim()).filter(Boolean);
|
|
378
|
-
}
|
|
379
|
-
const inputClassName = "h-8 w-full min-w-0 rounded-md border border-input bg-background px-2 text-sm text-foreground outline-none placeholder:text-placeholder disabled:cursor-not-allowed disabled:bg-muted/40 focus-visible:ring-2 focus-visible:ring-ring";
|
|
380
164
|
exports.FilterForm = FilterForm;
|
|
381
165
|
//# sourceMappingURL=FilterForm.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterForm.cjs","sources":["../../src/rpc/FilterForm.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState, type FormEvent } from \"react\";\nimport { keepPreviousData, useQuery } from \"@tanstack/react-query\";\nimport { Button } from \"../components/button\";\nimport type {\n FilterBarFilter,\n FilterBarMultiFilter,\n FilterBarRangeProps,\n} from \"../components/FilterBar\";\nimport { Combobox } from \"../components/Combobox\";\nimport { TimeRange } from \"../components/TimeRange\";\nimport { cn } from \"../lib/utils\";\nimport {\n packLookupParameterValues,\n parametersToFormConfig,\n pruneParameterValues,\n buildInitialParameterValues,\n titleCase,\n useDebouncedRecord,\n type ParameterValues,\n} from \"./formMetadata\";\nimport type { OpenAPIParameter } from \"./types\";\nimport { useOpenAPI, type OperationsApiClient } from \"./useOperations\";\n\nexport type FilterFormProps = {\n client: OperationsApiClient;\n path: string;\n method: string;\n parameters?: OpenAPIParameter[];\n initialValues?: ParameterValues | undefined;\n lockedValues?: ParameterValues | undefined;\n hideLocked?: boolean | undefined;\n enableLookup?: boolean | undefined;\n autoSubmit?: boolean | undefined;\n submitLabel?: string | undefined;\n submittingLabel?: string | undefined;\n emptyMessage?: string | undefined;\n isSubmitting?: boolean | undefined;\n className?: string | undefined;\n onSubmit: (values: ParameterValues) => void | Promise<void>;\n};\n\nexport function FilterForm({\n client,\n path,\n method,\n parameters = [],\n initialValues = {},\n lockedValues = {},\n hideLocked = false,\n enableLookup = method.toUpperCase() === \"GET\",\n autoSubmit = false,\n submitLabel = \"Execute request\",\n submittingLabel = \"Executing…\",\n emptyMessage = \"This operation does not require input.\",\n isSubmitting = false,\n className,\n onSubmit,\n}: FilterFormProps) {\n const resetKey = useMemo(\n () =>\n `${method}:${path}:${JSON.stringify(initialValues)}:${JSON.stringify(lockedValues)}`,\n [initialValues, lockedValues, method, path],\n );\n const [values, setValues] = useState<ParameterValues>(() =>\n buildInitialParameterValues(\n parameters,\n method,\n lockedValues,\n initialValues,\n ),\n );\n const [error, setError] = useState(\"\");\n const debouncedValues = useDebouncedRecord(values, 250);\n const lastAutoSubmitted = useRef<string | null>(null);\n const lookupParameters = useMemo(\n () => packLookupParameterValues(debouncedValues, parameters),\n [debouncedValues, parameters],\n );\n\n const lookupQuery = useQuery({\n queryKey: [\"filter-form-lookup\", method, path, lookupParameters],\n queryFn: async () =>\n (await client.lookupFilters?.(path, method, lookupParameters, {\n Accept: \"application/json+clicky\",\n })) ?? { filters: {} },\n enabled:\n enableLookup &&\n !!client.lookupFilters &&\n parameters.some((param) => param.in === \"query\"),\n placeholderData: keepPreviousData,\n staleTime: 30_000,\n retry: 0,\n });\n\n // Shapes come from the spec so a control keeps its identity while the lookup\n // that fills it is in flight; see parametersToFormConfig.\n const { data: spec } = useOpenAPI(client);\n const filterShapes = spec?.components?.[\"x-clicky-filters\"];\n\n const formConfig = useMemo(\n () =>\n parametersToFormConfig(parameters, values, setValues, {\n lookup: lookupQuery.data,\n components: filterShapes,\n lockedValues,\n hideLocked,\n }),\n [\n filterShapes,\n hideLocked,\n lockedValues,\n lookupQuery.data,\n parameters,\n values,\n ],\n );\n\n const hasFields =\n formConfig.filters.length > 0 || formConfig.timeRange != null;\n\n async function handleSubmit(event?: FormEvent) {\n event?.preventDefault();\n\n const missingRequired = parameters.filter((param) => {\n if (!param.required) return false;\n const value = lockedValues[param.name] ?? values[param.name] ?? \"\";\n return value.trim() === \"\";\n });\n\n if (missingRequired.length > 0) {\n setError(\n `Missing required fields: ${missingRequired.map((param) => titleCase(param.name)).join(\", \")}`,\n );\n return;\n }\n\n setError(\"\");\n await onSubmit(pruneParameterValues(values));\n }\n\n useEffect(() => {\n setValues(\n buildInitialParameterValues(\n parameters,\n method,\n lockedValues,\n initialValues,\n ),\n );\n setError(\"\");\n lastAutoSubmitted.current = null;\n }, [resetKey]);\n\n useEffect(() => {\n if (!autoSubmit) {\n return;\n }\n\n const missingRequired = parameters.filter((param) => {\n if (!param.required) return false;\n const value =\n lockedValues[param.name] ?? debouncedValues[param.name] ?? \"\";\n return value.trim() === \"\";\n });\n if (missingRequired.length > 0) {\n return;\n }\n\n const submittedValues = pruneParameterValues(debouncedValues);\n const signature = JSON.stringify(submittedValues);\n if (lastAutoSubmitted.current === signature) {\n return;\n }\n\n lastAutoSubmitted.current = signature;\n setError(\"\");\n void onSubmit(submittedValues);\n }, [autoSubmit, debouncedValues, lockedValues, onSubmit, parameters]);\n\n return (\n <form className=\"space-y-3\" onSubmit={handleSubmit}>\n {hasFields ? (\n <ParameterGrid\n autoSubmit={autoSubmit}\n filters={formConfig.filters}\n isSubmitting={isSubmitting}\n submitLabel={submitLabel}\n submittingLabel={submittingLabel}\n {...(formConfig.timeRange ? { timeRange: formConfig.timeRange } : {})}\n {...(className ? { className } : {})}\n />\n ) : (\n <div className=\"flex items-center justify-between gap-4\">\n <p className=\"text-sm text-muted-foreground\">{emptyMessage}</p>\n <Button type=\"button\" onClick={handleSubmit} disabled={isSubmitting}>\n {isSubmitting ? submittingLabel : submitLabel}\n </Button>\n </div>\n )}\n\n {error && (\n <div className=\"rounded-md border border-destructive/40 bg-destructive/5 p-3 text-sm text-destructive\">\n {error}\n </div>\n )}\n </form>\n );\n}\n\ntype ParameterGridProps = {\n filters: FilterBarFilter[];\n timeRange?: FilterBarRangeProps | undefined;\n autoSubmit: boolean;\n isSubmitting: boolean;\n submitLabel: string;\n submittingLabel: string;\n className?: string | undefined;\n};\n\nfunction ParameterGrid({\n filters,\n timeRange,\n autoSubmit,\n isSubmitting,\n submitLabel,\n submittingLabel,\n className,\n}: ParameterGridProps) {\n return (\n <div className={cn(\"space-y-3\", className)}>\n <div className=\"divide-y divide-border border-y border-border\">\n {filters.map((filter) => (\n <ParameterRow key={filter.key} filter={filter} />\n ))}\n {timeRange && <TimeRangeRow timeRange={timeRange} />}\n </div>\n\n {!autoSubmit && (\n <div className=\"flex justify-end\">\n <Button type=\"submit\" disabled={isSubmitting}>\n {isSubmitting ? submittingLabel : submitLabel}\n </Button>\n </div>\n )}\n </div>\n );\n}\n\nfunction ParameterRow({ filter }: { filter: FilterBarFilter }) {\n const id = `clicky-param-${filter.key.replace(/[^a-zA-Z0-9_-]/g, \"-\")}`;\n\n return (\n <div\n title={filter.description}\n className={cn(\n \"grid grid-cols-1 gap-2 py-2 sm:grid-cols-[minmax(8rem,14rem)_minmax(0,1fr)] sm:items-center\",\n filter.disabled && \"opacity-60\",\n )}\n >\n <label htmlFor={id} className=\"text-sm font-medium text-muted-foreground\">\n {filter.label}\n </label>\n <div className=\"min-w-0\">{renderParameterInput(filter, id)}</div>\n </div>\n );\n}\n\nfunction renderParameterInput(filter: FilterBarFilter, id: string) {\n if (filter.kind === \"date-range\") {\n return (\n <TimeRange\n kind={filter.timeEnabled === false ? \"date\" : \"time\"}\n label={filter.label}\n align=\"left\"\n from={filter.from ?? \"\"}\n to={filter.to ?? \"\"}\n onApply={filter.onApply}\n {...(filter.disabled !== undefined\n ? { disabled: filter.disabled }\n : {})}\n {...(filter.presets ? { presets: filter.presets } : {})}\n {...(filter.timeEnabled !== undefined\n ? { timeEnabled: filter.timeEnabled }\n : {})}\n {...(filter.timeZone ? { timeZone: filter.timeZone } : {})}\n {...(filter.timeZones ? { timeZones: filter.timeZones } : {})}\n {...(filter.fromPlaceholder\n ? { fromPlaceholder: filter.fromPlaceholder }\n : {})}\n {...(filter.toPlaceholder\n ? { toPlaceholder: filter.toPlaceholder }\n : {})}\n />\n );\n }\n\n if (filter.kind === \"enum\") {\n return (\n <select\n id={id}\n aria-label={filter.label}\n className={inputClassName}\n value={filter.value}\n disabled={filter.disabled}\n onChange={(event) => filter.onChange(event.target.value)}\n >\n <option value=\"\">{filter.placeholder ?? \"\"}</option>\n {filter.options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label ?? option.value}\n </option>\n ))}\n </select>\n );\n }\n\n if (filter.kind === \"boolean\") {\n return (\n <div className=\"flex h-8 items-center\">\n <input\n id={id}\n type=\"checkbox\"\n aria-label={filter.label}\n className=\"h-4 w-4 accent-primary disabled:cursor-not-allowed\"\n checked={filter.value}\n disabled={filter.disabled}\n onChange={(event) => filter.onChange(event.target.checked)}\n />\n </div>\n );\n }\n\n if (filter.kind === \"lookup\") {\n const listId = `${id}-options`;\n return (\n <>\n <input\n id={id}\n type={filter.inputType === \"number\" ? \"number\" : \"text\"}\n aria-label={filter.label}\n className={inputClassName}\n {...(filter.placeholder !== undefined\n ? { placeholder: filter.placeholder }\n : {})}\n value={filter.value}\n list={listId}\n disabled={filter.disabled}\n onChange={(event) => filter.onChange(event.target.value)}\n />\n <datalist id={listId}>\n {filter.options.map((option) => (\n <option\n key={option.value}\n value={option.value}\n label={option.label ?? option.value}\n disabled={option.disabled}\n />\n ))}\n </datalist>\n </>\n );\n }\n\n if (filter.kind === \"lookup-multi\") {\n const listId = `${id}-options`;\n return (\n <>\n <input\n id={id}\n type=\"text\"\n aria-label={filter.label}\n className={inputClassName}\n {...(filter.placeholder !== undefined\n ? { placeholder: filter.placeholder }\n : {})}\n value={filter.value.join(\", \")}\n list={listId}\n disabled={filter.disabled}\n onChange={(event) =>\n filter.onChange(splitCommaValues(event.target.value))\n }\n />\n <datalist id={listId}>\n {filter.options.map((option) => (\n <option\n key={option.value}\n value={option.value}\n label={option.label ?? option.value}\n disabled={option.disabled}\n />\n ))}\n </datalist>\n </>\n );\n }\n\n if (filter.kind === \"multi\") {\n return <MultiParameterInput filter={filter} id={id} />;\n }\n\n if (filter.kind === \"text\") {\n return (\n <input\n id={id}\n type=\"text\"\n aria-label={filter.label}\n className={inputClassName}\n {...(filter.placeholder !== undefined\n ? { placeholder: filter.placeholder }\n : {})}\n value={filter.value}\n disabled={filter.disabled}\n onChange={(event) => filter.onChange(event.target.value)}\n />\n );\n }\n\n return (\n <input\n id={id}\n type=\"text\"\n aria-label={filter.label}\n className={inputClassName}\n value={JSON.stringify(filter.value)}\n disabled\n readOnly\n />\n );\n}\n\nfunction MultiParameterInput({\n filter,\n id,\n}: {\n filter: FilterBarMultiFilter;\n id: string;\n}) {\n const moreCount =\n filter.truncated && filter.total\n ? Math.max(filter.total - filter.options.length, 0)\n : 0;\n return (\n <Combobox\n multiple\n id={id}\n ariaLabel={filter.label}\n value={Object.keys(filter.value)}\n options={filter.options.map((option) => ({\n value: option.value,\n label:\n typeof option.label === \"string\"\n ? option.label\n : (option.title ?? option.value),\n ...(option.disabled !== undefined ? { disabled: option.disabled } : {}),\n ...(option.title !== undefined ? { title: option.title } : {}),\n }))}\n onChange={(values) => {\n const next: FilterBarMultiFilter[\"value\"] = {};\n for (const value of values)\n next[value] = filter.value[value] ?? \"include\";\n filter.onChange(next);\n }}\n allowCustomValue={filter.allowCustomValue ?? false}\n {...(filter.placeholder !== undefined\n ? { placeholder: filter.placeholder }\n : {})}\n {...(filter.disabled !== undefined ? { disabled: filter.disabled } : {})}\n {...(filter.className !== undefined\n ? { className: filter.className }\n : {})}\n {...(moreCount > 0\n ? { footer: `… and ${moreCount.toLocaleString()} more` }\n : {})}\n />\n );\n}\n\n// TimeRangeRow renders the paired from/to parameters as the native TimeRange\n// popover picker (relative-time presets + a date picker) rather than two bare\n// text inputs, matching how FilterBar renders its own range control.\nfunction TimeRangeRow({ timeRange }: { timeRange: FilterBarRangeProps }) {\n return (\n <div className=\"grid grid-cols-1 gap-2 py-2 sm:grid-cols-[minmax(8rem,14rem)_minmax(0,1fr)] sm:items-center\">\n <div className=\"text-sm font-medium text-muted-foreground\">\n Time range\n </div>\n <div className=\"min-w-0\">\n <TimeRange\n kind={timeRange.timeEnabled ? \"time\" : \"date\"}\n label=\"Time range\"\n align=\"left\"\n from={timeRange.from ?? \"\"}\n to={timeRange.to ?? \"\"}\n onApply={timeRange.onApply}\n {...(timeRange.presets ? { presets: timeRange.presets } : {})}\n {...(timeRange.timeEnabled !== undefined\n ? { timeEnabled: timeRange.timeEnabled }\n : {})}\n {...(timeRange.timeZone ? { timeZone: timeRange.timeZone } : {})}\n {...(timeRange.timeZones ? { timeZones: timeRange.timeZones } : {})}\n {...(timeRange.fromPlaceholder\n ? { fromPlaceholder: timeRange.fromPlaceholder }\n : {})}\n {...(timeRange.toPlaceholder\n ? { toPlaceholder: timeRange.toPlaceholder }\n : {})}\n />\n </div>\n </div>\n );\n}\n\nfunction splitCommaValues(value: string) {\n return value\n .split(\",\")\n .map((item) => item.trim())\n .filter(Boolean);\n}\n\nconst inputClassName =\n \"h-8 w-full min-w-0 rounded-md border border-input bg-background px-2 text-sm text-foreground outline-none placeholder:text-placeholder disabled:cursor-not-allowed disabled:bg-muted/40 focus-visible:ring-2 focus-visible:ring-ring\";\n"],"names":["useMemo","useState","buildInitialParameterValues","useDebouncedRecord","useRef","packLookupParameterValues","useQuery","_a","keepPreviousData","useOpenAPI","parametersToFormConfig","titleCase","pruneParameterValues","useEffect","jsxs","jsx","Button","cn","TimeRange","Fragment","Combobox"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FilterForm.cjs","sources":["../../src/rpc/FilterForm.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState, type FormEvent } from \"react\";\nimport { keepPreviousData, useQuery } from \"@tanstack/react-query\";\nimport { Button } from \"../components/button\";\nimport { FilterBar } from \"../components/FilterBar\";\nimport {\n packLookupParameterValues,\n parametersToFormConfig,\n pruneParameterValues,\n buildInitialParameterValues,\n titleCase,\n useDebouncedRecord,\n type ParameterValues,\n} from \"./formMetadata\";\nimport type { OpenAPIParameter } from \"./types\";\nimport { useOpenAPI, type OperationsApiClient } from \"./useOperations\";\nimport { ParameterGrid } from \"./FilterFormFields\";\n\nexport type FilterFormProps = {\n client: OperationsApiClient;\n path: string;\n method: string;\n parameters?: OpenAPIParameter[];\n initialValues?: ParameterValues | undefined;\n lockedValues?: ParameterValues | undefined;\n hideLocked?: boolean | undefined;\n enableLookup?: boolean | undefined;\n autoSubmit?: boolean | undefined;\n submitLabel?: string | undefined;\n submittingLabel?: string | undefined;\n emptyMessage?: string | undefined;\n isSubmitting?: boolean | undefined;\n className?: string | undefined;\n /** Renders operation controls as form rows or the shared table FilterBar. */\n presentation?: \"form\" | \"filter-bar\" | undefined;\n onSubmit: (values: ParameterValues) => void | Promise<void>;\n};\n\nexport function FilterForm({\n client,\n path,\n method,\n parameters = [],\n initialValues = {},\n lockedValues = {},\n hideLocked = false,\n enableLookup = method.toUpperCase() === \"GET\",\n autoSubmit = false,\n submitLabel = \"Execute request\",\n submittingLabel = \"Executing…\",\n emptyMessage = \"This operation does not require input.\",\n isSubmitting = false,\n className,\n presentation = \"form\",\n onSubmit,\n}: FilterFormProps) {\n const resetKey = useMemo(\n () =>\n `${method}:${path}:${JSON.stringify(initialValues)}:${JSON.stringify(lockedValues)}`,\n [initialValues, lockedValues, method, path],\n );\n const [values, setValues] = useState<ParameterValues>(() =>\n buildInitialParameterValues(\n parameters,\n method,\n lockedValues,\n initialValues,\n ),\n );\n const [error, setError] = useState(\"\");\n const debouncedValues = useDebouncedRecord(values, 250);\n const lastAutoSubmitted = useRef<string | null>(null);\n const lookupParameters = useMemo(\n () => packLookupParameterValues(debouncedValues, parameters),\n [debouncedValues, parameters],\n );\n\n const lookupQuery = useQuery({\n queryKey: [\"filter-form-lookup\", method, path, lookupParameters],\n queryFn: async () =>\n (await client.lookupFilters?.(path, method, lookupParameters, {\n Accept: \"application/json+clicky\",\n })) ?? { filters: {} },\n enabled:\n enableLookup &&\n !!client.lookupFilters &&\n parameters.some((param) => param.in === \"query\"),\n placeholderData: keepPreviousData,\n staleTime: 30_000,\n retry: 0,\n });\n\n // Shapes come from the spec so a control keeps its identity while the lookup\n // that fills it is in flight; see parametersToFormConfig.\n const { data: spec } = useOpenAPI(client);\n const filterShapes = spec?.components?.[\"x-clicky-filters\"];\n\n const formConfig = useMemo(\n () =>\n parametersToFormConfig(parameters, values, setValues, {\n lookup: lookupQuery.data,\n components: filterShapes,\n lockedValues,\n hideLocked,\n }),\n [\n filterShapes,\n hideLocked,\n lockedValues,\n lookupQuery.data,\n parameters,\n values,\n ],\n );\n\n const hasFields =\n formConfig.filters.length > 0 ||\n formConfig.search != null ||\n formConfig.timeRange != null;\n\n async function handleSubmit(event?: FormEvent) {\n event?.preventDefault();\n\n const missingRequired = parameters.filter((param) => {\n if (!param.required) return false;\n const value = lockedValues[param.name] ?? values[param.name] ?? \"\";\n return value.trim() === \"\";\n });\n\n if (missingRequired.length > 0) {\n setError(\n `Missing required fields: ${missingRequired.map((param) => titleCase(param.name)).join(\", \")}`,\n );\n return;\n }\n\n setError(\"\");\n await onSubmit(pruneParameterValues(values));\n }\n\n useEffect(() => {\n setValues(\n buildInitialParameterValues(\n parameters,\n method,\n lockedValues,\n initialValues,\n ),\n );\n setError(\"\");\n lastAutoSubmitted.current = null;\n }, [resetKey]);\n\n useEffect(() => {\n if (!autoSubmit) {\n return;\n }\n\n const missingRequired = parameters.filter((param) => {\n if (!param.required) return false;\n const value =\n lockedValues[param.name] ?? debouncedValues[param.name] ?? \"\";\n return value.trim() === \"\";\n });\n if (missingRequired.length > 0) {\n return;\n }\n\n const submittedValues = pruneParameterValues(debouncedValues);\n const signature = JSON.stringify(submittedValues);\n if (lastAutoSubmitted.current === signature) {\n return;\n }\n\n lastAutoSubmitted.current = signature;\n setError(\"\");\n void onSubmit(submittedValues);\n }, [autoSubmit, debouncedValues, lockedValues, onSubmit, parameters]);\n\n return (\n <form className=\"space-y-3\" onSubmit={handleSubmit}>\n {hasFields ? (\n presentation === \"filter-bar\" ? (\n <FilterBar\n autoSubmit={autoSubmit}\n filters={formConfig.filters}\n overflowMode=\"wrap\"\n {...(formConfig.search ? { search: formConfig.search } : {})}\n {...(formConfig.timeRange\n ? { timeRange: formConfig.timeRange }\n : {})}\n {...(!autoSubmit\n ? {\n onApply: () => void handleSubmit(),\n applyLabel: submitLabel,\n isPending: isSubmitting,\n }\n : {})}\n {...(className ? { className } : {})}\n />\n ) : (\n <ParameterGrid\n autoSubmit={autoSubmit}\n filters={formConfig.filters}\n isSubmitting={isSubmitting}\n submitLabel={submitLabel}\n submittingLabel={submittingLabel}\n {...(formConfig.timeRange\n ? { timeRange: formConfig.timeRange }\n : {})}\n {...(className ? { className } : {})}\n />\n )\n ) : (\n <div className=\"flex items-center justify-between gap-4\">\n <p className=\"text-sm text-muted-foreground\">{emptyMessage}</p>\n <Button type=\"button\" onClick={handleSubmit} disabled={isSubmitting}>\n {isSubmitting ? submittingLabel : submitLabel}\n </Button>\n </div>\n )}\n\n {error && (\n <div className=\"rounded-md border border-destructive/40 bg-destructive/5 p-3 text-sm text-destructive\">\n {error}\n </div>\n )}\n </form>\n );\n}\n"],"names":["useMemo","useState","buildInitialParameterValues","useDebouncedRecord","useRef","packLookupParameterValues","useQuery","_a","keepPreviousData","useOpenAPI","parametersToFormConfig","titleCase","pruneParameterValues","useEffect","jsxs","jsx","FilterBar","ParameterGrid","Button"],"mappings":"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"}
|
package/dist/rpc/FilterForm.d.ts
CHANGED
|
@@ -16,7 +16,9 @@ export type FilterFormProps = {
|
|
|
16
16
|
emptyMessage?: string | undefined;
|
|
17
17
|
isSubmitting?: boolean | undefined;
|
|
18
18
|
className?: string | undefined;
|
|
19
|
+
/** Renders operation controls as form rows or the shared table FilterBar. */
|
|
20
|
+
presentation?: "form" | "filter-bar" | undefined;
|
|
19
21
|
onSubmit: (values: ParameterValues) => void | Promise<void>;
|
|
20
22
|
};
|
|
21
|
-
export declare function FilterForm({ client, path, method, parameters, initialValues, lockedValues, hideLocked, enableLookup, autoSubmit, submitLabel, submittingLabel, emptyMessage, isSubmitting, className, onSubmit, }: FilterFormProps): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export declare function FilterForm({ client, path, method, parameters, initialValues, lockedValues, hideLocked, enableLookup, autoSubmit, submitLabel, submittingLabel, emptyMessage, isSubmitting, className, presentation, onSubmit, }: FilterFormProps): import("react/jsx-runtime").JSX.Element;
|
|
22
24
|
//# sourceMappingURL=FilterForm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterForm.d.ts","sourceRoot":"","sources":["../../src/rpc/FilterForm.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FilterForm.d.ts","sourceRoot":"","sources":["../../src/rpc/FilterForm.tsx"],"names":[],"mappings":"AAIA,OAAO,EAOL,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAc,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGvE,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAChC,aAAa,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IAC5C,YAAY,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IAC3C,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;IACjD,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D,CAAC;AAEF,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,IAAI,EACJ,MAAM,EACN,UAAe,EACf,aAAkB,EAClB,YAAiB,EACjB,UAAkB,EAClB,YAA6C,EAC7C,UAAkB,EAClB,WAA+B,EAC/B,eAA8B,EAC9B,YAAuD,EACvD,YAAoB,EACpB,SAAS,EACT,YAAqB,EACrB,QAAQ,GACT,EAAE,eAAe,2CA8KjB"}
|