@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
package/dist/data.js
CHANGED
|
@@ -71,6 +71,8 @@ import { ExecutionTree } from "./data/ExecutionTree.js";
|
|
|
71
71
|
import { TreeNode } from "./data/TreeNode.js";
|
|
72
72
|
import { TreeGroupHeader } from "./data/TreeGroupHeader.js";
|
|
73
73
|
import { Timeline } from "./data/Timeline.js";
|
|
74
|
+
import { DEBUG_CAPTURE_HEADER, DEBUG_REFRESH_INSPECTION_HEADER, debugCaptureHeaders, debugConsoleAvailable, debugConsoleOpen, registerDebugConsole, revealDebugConsole, setDebugCaptureLevel, setDebugConsoleOpen, setDebugRefreshInspection, subscribeToDebugConsole } from "./data/debugConsoleSignal.js";
|
|
75
|
+
import { useDebugAction } from "./data/useDebugAction.js";
|
|
74
76
|
import { allGroupsTerminal, isTerminalStatus } from "./data/TaskSnapshot.js";
|
|
75
77
|
import { bucketTasks, logLevelColor, taskSegments, taskStatusBg, taskStatusColor, taskStatusIcon } from "./data/task-status.js";
|
|
76
78
|
import { TaskProgress } from "./data/TaskProgress.js";
|
|
@@ -104,10 +106,8 @@ import { CacheValue } from "./data/cache-browser/CacheValue.js";
|
|
|
104
106
|
import { ClickyExportDialog } from "./data/clicky-export/ClickyExportDialog.js";
|
|
105
107
|
import { FixtureEditor } from "./data/FixtureEditor/FixtureEditor.js";
|
|
106
108
|
import { GitChangedFilesSummary, GitCommitList, GitDiffPanel, GitFileList } from "./data/git/GitChangeList.js";
|
|
107
|
-
import { QUERY_INFO_CONTENT_TYPE, buildQueryInfoUrl, fetchQueryInfo } from "./data/query-info/queryInfo.js";
|
|
108
109
|
import { QueryBrowser } from "./data/query-browser/QueryBrowser.js";
|
|
109
110
|
import { QueryBrowserExecutionError } from "./data/query-browser/QueryBrowser.types.js";
|
|
110
|
-
import { QueryInfoDialog } from "./data/query-info/QueryInfoDialog.js";
|
|
111
111
|
import { STATUS_LABELS, aggregateStatusCounts, collapseSingleChildChains, collectFrameworks, filterTests, formatCount, formatTestDuration, hasFailed, hasPending, humanizeName, statusIconFor, statusToneFor, sum, sumNonTaskTests, testStatus, totalDuration } from "./data/test-runner/status.js";
|
|
112
112
|
import { TestAttempts, TestFailureDetail, TestOutput } from "./data/test-runner/TestFailureDetail.js";
|
|
113
113
|
import { TestDetailPanel } from "./data/test-runner/TestDetailPanel.js";
|
|
@@ -317,6 +317,7 @@ import { UiNetwork, UiNetworkFilled } from "./icons/components/UiNetwork.js";
|
|
|
317
317
|
import { UiNull } from "./icons/components/UiNull.js";
|
|
318
318
|
import { UiNumeric } from "./icons/components/UiNumeric.js";
|
|
319
319
|
import { UiObject } from "./icons/components/UiObject.js";
|
|
320
|
+
import { UiOpenScad } from "./icons/components/UiOpenScad.js";
|
|
320
321
|
import { UiOperator } from "./icons/components/UiOperator.js";
|
|
321
322
|
import { UiOrganization, UiOrganizationCheck, UiOrganizationCheckFilled, UiOrganizationCross, UiOrganizationCrossFilled, UiOrganizationFilled, UiOrganizationMinus, UiOrganizationMinusFilled, UiOrganizationPlus, UiOrganizationPlusFilled } from "./icons/components/UiOrganization.js";
|
|
322
323
|
import { UiPackage, UiPackageFilled } from "./icons/components/UiPackage.js";
|
|
@@ -452,7 +453,6 @@ import { formatGitCommitDateHeader } from "./data/git/git-dates.js";
|
|
|
452
453
|
import { frameworkIcon } from "./data/test-runner/frameworkIcon.js";
|
|
453
454
|
import { isLeaf } from "./data/cache-browser/types.js";
|
|
454
455
|
import { useClickyExport } from "./data/clicky-export/useClickyExport.js";
|
|
455
|
-
import { useQueryInfo } from "./data/query-info/useQueryInfo.js";
|
|
456
456
|
export {
|
|
457
457
|
AnsiHtml,
|
|
458
458
|
Avatar,
|
|
@@ -475,6 +475,8 @@ export {
|
|
|
475
475
|
CodeDiff,
|
|
476
476
|
CopyBadge,
|
|
477
477
|
DATA_TABLE_FILTER_LOOKUP_LIMIT,
|
|
478
|
+
DEBUG_CAPTURE_HEADER,
|
|
479
|
+
DEBUG_REFRESH_INSPECTION_HEADER,
|
|
478
480
|
DataTable,
|
|
479
481
|
DiagnosticsDetailPanel,
|
|
480
482
|
DiagnosticsTree,
|
|
@@ -514,10 +516,8 @@ export {
|
|
|
514
516
|
PromptBanner,
|
|
515
517
|
PromptDialog,
|
|
516
518
|
Properties,
|
|
517
|
-
QUERY_INFO_CONTENT_TYPE,
|
|
518
519
|
QueryBrowser,
|
|
519
520
|
QueryBrowserExecutionError,
|
|
520
|
-
QueryInfoDialog,
|
|
521
521
|
RUNTIME_PREFIXES,
|
|
522
522
|
RadialGauge,
|
|
523
523
|
STATUS_LABELS,
|
|
@@ -913,6 +913,7 @@ export {
|
|
|
913
913
|
UiNull,
|
|
914
914
|
UiNumeric,
|
|
915
915
|
UiObject,
|
|
916
|
+
UiOpenScad,
|
|
916
917
|
UiOperator,
|
|
917
918
|
UiOrganization,
|
|
918
919
|
UiOrganizationCheck,
|
|
@@ -1174,7 +1175,6 @@ export {
|
|
|
1174
1175
|
badgeVariants,
|
|
1175
1176
|
bucketTasks,
|
|
1176
1177
|
buildMarkdownPreviewUrl,
|
|
1177
|
-
buildQueryInfoUrl,
|
|
1178
1178
|
buildSchemaTree,
|
|
1179
1179
|
buildSchemaViewerTree,
|
|
1180
1180
|
buildStepBranchTree,
|
|
@@ -1199,12 +1199,14 @@ export {
|
|
|
1199
1199
|
createFenceMarkdown,
|
|
1200
1200
|
createTestRunnerRegistry,
|
|
1201
1201
|
cycleFilterState,
|
|
1202
|
+
debugCaptureHeaders,
|
|
1203
|
+
debugConsoleAvailable,
|
|
1204
|
+
debugConsoleOpen,
|
|
1202
1205
|
decodeFilterState,
|
|
1203
1206
|
deriveProgressBars,
|
|
1204
1207
|
detectDumpFormat,
|
|
1205
1208
|
emptyTestFilters,
|
|
1206
1209
|
encodeFilterState,
|
|
1207
|
-
fetchQueryInfo,
|
|
1208
1210
|
filterStateToRecord,
|
|
1209
1211
|
filterTests,
|
|
1210
1212
|
findNodeByRoutePath,
|
|
@@ -1268,9 +1270,11 @@ export {
|
|
|
1268
1270
|
processStateIcon,
|
|
1269
1271
|
pruneNullNodes,
|
|
1270
1272
|
recordToFilterState,
|
|
1273
|
+
registerDebugConsole,
|
|
1271
1274
|
resolveBreakdown,
|
|
1272
1275
|
resolveFixtureFenceSchema,
|
|
1273
1276
|
resolveSeries,
|
|
1277
|
+
revealDebugConsole,
|
|
1274
1278
|
schemaKeys,
|
|
1275
1279
|
segment,
|
|
1276
1280
|
serializeMultiFilterValue,
|
|
@@ -1279,6 +1283,9 @@ export {
|
|
|
1279
1283
|
serverFiltersToFilterBar,
|
|
1280
1284
|
serverTimingCounterSummary,
|
|
1281
1285
|
serverTimingMetricLabel,
|
|
1286
|
+
setDebugCaptureLevel,
|
|
1287
|
+
setDebugConsoleOpen,
|
|
1288
|
+
setDebugRefreshInspection,
|
|
1282
1289
|
setFallbackIconProvider,
|
|
1283
1290
|
shortFrameName,
|
|
1284
1291
|
slugify,
|
|
@@ -1287,6 +1294,7 @@ export {
|
|
|
1287
1294
|
statusIconFor,
|
|
1288
1295
|
statusToneFor,
|
|
1289
1296
|
stringifyFixtureYaml,
|
|
1297
|
+
subscribeToDebugConsole,
|
|
1290
1298
|
sum,
|
|
1291
1299
|
sumNonTaskTests,
|
|
1292
1300
|
tagActionsFromRecord,
|
|
@@ -1300,8 +1308,8 @@ export {
|
|
|
1300
1308
|
totalDuration,
|
|
1301
1309
|
updateFilterSelection,
|
|
1302
1310
|
useClickyExport,
|
|
1311
|
+
useDebugAction,
|
|
1303
1312
|
usePrompts,
|
|
1304
|
-
useQueryInfo,
|
|
1305
1313
|
useTagActions,
|
|
1306
1314
|
useTagActionsValue,
|
|
1307
1315
|
useTestRunner,
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const react = require("react");
|
|
5
|
+
const IconButton = require("../components/IconButton.cjs");
|
|
6
|
+
const Tabs = require("../layout/Tabs.cjs");
|
|
7
|
+
const debugClient = require("./debugClient.cjs");
|
|
8
|
+
const debugStore = require("./debugStore.cjs");
|
|
9
|
+
const ConsoleTab = require("./tabs/ConsoleTab.cjs");
|
|
10
|
+
const InspectionTab = require("./tabs/InspectionTab.cjs");
|
|
11
|
+
const NetworkTab = require("./tabs/NetworkTab.cjs");
|
|
12
|
+
const QueriesTab = require("./tabs/QueriesTab.cjs");
|
|
13
|
+
const types = require("./types.cjs");
|
|
14
|
+
const UiTrash = require("../icons/components/UiTrash.cjs");
|
|
15
|
+
const UiClose = require("../icons/components/UiClose.cjs");
|
|
16
|
+
function DebugConsole({
|
|
17
|
+
state,
|
|
18
|
+
store = debugStore.debugStore,
|
|
19
|
+
client,
|
|
20
|
+
onClose,
|
|
21
|
+
tab: controlledTab,
|
|
22
|
+
onTabChange
|
|
23
|
+
}) {
|
|
24
|
+
const [uncontrolledTab, setUncontrolledTab] = react.useState("queries");
|
|
25
|
+
const tab = controlledTab ?? uncontrolledTab;
|
|
26
|
+
const selectTab = (next) => {
|
|
27
|
+
setUncontrolledTab(next);
|
|
28
|
+
onTabChange == null ? void 0 : onTabChange(next);
|
|
29
|
+
};
|
|
30
|
+
const [selectedId, setSelectedId] = react.useState();
|
|
31
|
+
const selected = useSelectedRecord(state.records, selectedId);
|
|
32
|
+
const tabs = react.useMemo(
|
|
33
|
+
() => [
|
|
34
|
+
{ id: "queries", label: "Queries", count: state.records.length },
|
|
35
|
+
{ id: "network", label: "Network", count: (selected == null ? void 0 : selected.counts.harEntries) ?? 0 },
|
|
36
|
+
{ id: "console", label: "Console", count: state.logs.length },
|
|
37
|
+
{
|
|
38
|
+
id: "inspection",
|
|
39
|
+
label: "Inspection",
|
|
40
|
+
count: ((selected == null ? void 0 : selected.counts.inspections) ?? 0) + ((selected == null ? void 0 : selected.counts.probes) ?? 0)
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
[state.records.length, state.logs.length, selected]
|
|
44
|
+
);
|
|
45
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-full min-h-0 flex-col bg-background", children: [
|
|
46
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-density-3 border-border border-b px-density-3", children: [
|
|
47
|
+
/* @__PURE__ */ jsxRuntime.jsx(Tabs.Tabs, { tabs, value: tab, onChange: (id) => selectTab(id), className: "flex-1" }),
|
|
48
|
+
/* @__PURE__ */ jsxRuntime.jsx(LevelPicker, { level: state.level, onChange: (level) => store.setLevel(level) }),
|
|
49
|
+
/* @__PURE__ */ jsxRuntime.jsx(ConnectionDot, { connected: state.connected, error: state.streamError }),
|
|
50
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
51
|
+
IconButton.IconButton,
|
|
52
|
+
{
|
|
53
|
+
icon: UiTrash.UiTrash,
|
|
54
|
+
label: "Clear captures",
|
|
55
|
+
iconClassName: "size-4",
|
|
56
|
+
onClick: () => {
|
|
57
|
+
store.clear();
|
|
58
|
+
void (client ?? new debugClient.DebugClient()).clear().catch(() => {
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
),
|
|
63
|
+
onClose ? /* @__PURE__ */ jsxRuntime.jsx(IconButton.IconButton, { icon: UiClose.UiClose, label: "Close console", iconClassName: "size-4", onClick: onClose }) : null
|
|
64
|
+
] }),
|
|
65
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: [
|
|
66
|
+
tab === "queries" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
67
|
+
QueriesTab.QueriesTab,
|
|
68
|
+
{
|
|
69
|
+
records: state.records,
|
|
70
|
+
client,
|
|
71
|
+
onSelect: (record) => setSelectedId(record.id)
|
|
72
|
+
}
|
|
73
|
+
) : null,
|
|
74
|
+
tab === "network" ? /* @__PURE__ */ jsxRuntime.jsx(NetworkTab.NetworkTab, { record: selected, client }) : null,
|
|
75
|
+
tab === "console" ? /* @__PURE__ */ jsxRuntime.jsx(ConsoleTab.ConsoleTab, { lines: state.logs }) : null,
|
|
76
|
+
tab === "inspection" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
77
|
+
InspectionTab.InspectionTab,
|
|
78
|
+
{
|
|
79
|
+
record: selected,
|
|
80
|
+
client,
|
|
81
|
+
refreshInspection: state.refreshInspection,
|
|
82
|
+
onRefreshInspectionChange: (refresh) => store.setRefreshInspection(refresh)
|
|
83
|
+
}
|
|
84
|
+
) : null
|
|
85
|
+
] })
|
|
86
|
+
] });
|
|
87
|
+
}
|
|
88
|
+
function useSelectedRecord(records, selectedId) {
|
|
89
|
+
return react.useMemo(() => {
|
|
90
|
+
if (selectedId) {
|
|
91
|
+
const found = records.find((record) => record.id === selectedId);
|
|
92
|
+
if (found) return found;
|
|
93
|
+
}
|
|
94
|
+
return records[records.length - 1];
|
|
95
|
+
}, [records, selectedId]);
|
|
96
|
+
}
|
|
97
|
+
function LevelPicker({
|
|
98
|
+
level,
|
|
99
|
+
onChange
|
|
100
|
+
}) {
|
|
101
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-density-1 text-xs", children: [
|
|
102
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "Capture" }),
|
|
103
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
104
|
+
"select",
|
|
105
|
+
{
|
|
106
|
+
className: "rounded border border-border bg-background px-density-1 py-0.5 font-mono text-xs",
|
|
107
|
+
value: level,
|
|
108
|
+
title: types.LEVEL_HELP[level],
|
|
109
|
+
onChange: (event) => onChange(event.target.value),
|
|
110
|
+
children: types.SELECTABLE_LEVELS.map((option) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: option, title: types.LEVEL_HELP[option], children: option }, option))
|
|
111
|
+
}
|
|
112
|
+
)
|
|
113
|
+
] });
|
|
114
|
+
}
|
|
115
|
+
function ConnectionDot({
|
|
116
|
+
connected,
|
|
117
|
+
error
|
|
118
|
+
}) {
|
|
119
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
120
|
+
"span",
|
|
121
|
+
{
|
|
122
|
+
className: "flex items-center gap-density-1 text-muted-foreground text-xs",
|
|
123
|
+
title: error ?? (connected ? "Streaming" : "Not connected"),
|
|
124
|
+
children: [
|
|
125
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
126
|
+
"span",
|
|
127
|
+
{
|
|
128
|
+
"aria-hidden": true,
|
|
129
|
+
className: `inline-block size-2 rounded-full ${connected ? "bg-green-500" : "bg-muted-foreground/40"}`
|
|
130
|
+
}
|
|
131
|
+
),
|
|
132
|
+
connected ? "live" : "offline"
|
|
133
|
+
]
|
|
134
|
+
}
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
exports.DebugConsole = DebugConsole;
|
|
138
|
+
//# sourceMappingURL=DebugConsole.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DebugConsole.cjs","sources":["../../src/devtools/DebugConsole.tsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { IconButton } from \"../components/IconButton\";\nimport { UiClose, UiTrash } from \"../icons\";\nimport { Tabs, type TabItem } from \"../layout/Tabs\";\nimport { DebugClient } from \"./debugClient\";\nimport { debugStore, type DebugStore, type DebugStoreState } from \"./debugStore\";\nimport { ConsoleTab } from \"./tabs/ConsoleTab\";\nimport { InspectionTab } from \"./tabs/InspectionTab\";\nimport { NetworkTab } from \"./tabs/NetworkTab\";\nimport { QueriesTab } from \"./tabs/QueriesTab\";\nimport {\n LEVEL_HELP,\n SELECTABLE_LEVELS,\n type DebugLevel,\n type DebugTab,\n type ExecutionSummary,\n} from \"./types\";\n\nexport type { DebugTab };\n\n/**\n * The console itself: a header that says what is being captured and at what\n * cost, and one of four tabs below it.\n *\n * Three tabs are scoped to a selected capture and one is not. Queries is the\n * list; Network and Inspection explain the row you picked from it; Console is\n * the process tail, which belongs to the server rather than to any one request.\n */\n\nexport type DebugConsoleProps = {\n state: DebugStoreState;\n store?: DebugStore | undefined;\n client?: DebugClient | undefined;\n onClose?: (() => void) | undefined;\n /** Controlled tab, so the host can deep-link into one. */\n tab?: DebugTab | undefined;\n onTabChange?: ((tab: DebugTab) => void) | undefined;\n};\n\nexport function DebugConsole({\n state,\n store = debugStore,\n client,\n onClose,\n tab: controlledTab,\n onTabChange,\n}: DebugConsoleProps) {\n const [uncontrolledTab, setUncontrolledTab] = useState<DebugTab>(\"queries\");\n const tab = controlledTab ?? uncontrolledTab;\n const selectTab = (next: DebugTab) => {\n setUncontrolledTab(next);\n onTabChange?.(next);\n };\n\n const [selectedId, setSelectedId] = useState<string | undefined>();\n const selected = useSelectedRecord(state.records, selectedId);\n\n const tabs: TabItem[] = useMemo(\n () => [\n { id: \"queries\", label: \"Queries\", count: state.records.length },\n { id: \"network\", label: \"Network\", count: selected?.counts.harEntries ?? 0 },\n { id: \"console\", label: \"Console\", count: state.logs.length },\n {\n id: \"inspection\",\n label: \"Inspection\",\n count: (selected?.counts.inspections ?? 0) + (selected?.counts.probes ?? 0),\n },\n ],\n [state.records.length, state.logs.length, selected],\n );\n\n return (\n <div className=\"flex h-full min-h-0 flex-col bg-background\">\n <div className=\"flex shrink-0 items-center gap-density-3 border-border border-b px-density-3\">\n <Tabs tabs={tabs} value={tab} onChange={(id) => selectTab(id as DebugTab)} className=\"flex-1\" />\n\n <LevelPicker level={state.level} onChange={(level) => store.setLevel(level)} />\n\n <ConnectionDot connected={state.connected} error={state.streamError} />\n\n <IconButton\n icon={UiTrash}\n label=\"Clear captures\"\n iconClassName=\"size-4\"\n onClick={() => {\n store.clear();\n void (client ?? new DebugClient()).clear().catch(() => {\n // The server's buffer outliving the client's view is a cosmetic\n // mismatch, not a reason to fail the click the user just made.\n });\n }}\n />\n {onClose ? (\n <IconButton icon={UiClose} label=\"Close console\" iconClassName=\"size-4\" onClick={onClose} />\n ) : null}\n </div>\n\n {/* A bounded flex column. Every tab below hands its height to a component\n that scrolls internally (DataTable, LogsTable, HarPanel), and each of\n those sizes itself as `flex-1 min-h-0` — which needs a flex parent with\n a definite height, or it resolves to content height and the console\n body grows instead of scrolling. */}\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden\">\n {tab === \"queries\" ? (\n <QueriesTab\n records={state.records}\n client={client}\n onSelect={(record) => setSelectedId(record.id)}\n />\n ) : null}\n {tab === \"network\" ? <NetworkTab record={selected} client={client} /> : null}\n {tab === \"console\" ? <ConsoleTab lines={state.logs} /> : null}\n {tab === \"inspection\" ? (\n <InspectionTab\n record={selected}\n client={client}\n refreshInspection={state.refreshInspection}\n onRefreshInspectionChange={(refresh) => store.setRefreshInspection(refresh)}\n />\n ) : null}\n </div>\n </div>\n );\n}\n\n/**\n * The selected capture, falling back to the most recent one.\n *\n * Without the fallback, Network and Inspection open empty on a console that is\n * plainly full of rows, which reads as a broken tab rather than as \"pick one\".\n */\nfunction useSelectedRecord(\n records: ExecutionSummary[],\n selectedId: string | undefined,\n): ExecutionSummary | undefined {\n return useMemo(() => {\n if (selectedId) {\n const found = records.find((record) => record.id === selectedId);\n if (found) return found;\n }\n return records[records.length - 1];\n }, [records, selectedId]);\n}\n\nfunction LevelPicker({\n level,\n onChange,\n}: {\n level: DebugLevel;\n onChange: (level: DebugLevel) => void;\n}) {\n return (\n <label className=\"flex items-center gap-density-1 text-xs\">\n <span className=\"text-muted-foreground\">Capture</span>\n <select\n className=\"rounded border border-border bg-background px-density-1 py-0.5 font-mono text-xs\"\n value={level}\n title={LEVEL_HELP[level]}\n onChange={(event) => onChange(event.target.value as DebugLevel)}\n >\n {SELECTABLE_LEVELS.map((option) => (\n <option key={option} value={option} title={LEVEL_HELP[option]}>\n {option}\n </option>\n ))}\n </select>\n </label>\n );\n}\n\nfunction ConnectionDot({\n connected,\n error,\n}: {\n connected: boolean;\n error?: string | undefined;\n}) {\n return (\n <span\n className=\"flex items-center gap-density-1 text-muted-foreground text-xs\"\n title={error ?? (connected ? \"Streaming\" : \"Not connected\")}\n >\n <span\n aria-hidden\n className={`inline-block size-2 rounded-full ${connected ? \"bg-green-500\" : \"bg-muted-foreground/40\"}`}\n />\n {connected ? \"live\" : \"offline\"}\n </span>\n );\n}\n"],"names":["debugStore","useState","useMemo","jsxs","jsx","Tabs","IconButton","UiTrash","DebugClient","UiClose","QueriesTab","NetworkTab","ConsoleTab","InspectionTab","LEVEL_HELP","SELECTABLE_LEVELS"],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { DebugClient } from './debugClient';
|
|
2
|
+
import { DebugStore, DebugStoreState } from './debugStore';
|
|
3
|
+
import { DebugTab } from './types';
|
|
4
|
+
export type { DebugTab };
|
|
5
|
+
/**
|
|
6
|
+
* The console itself: a header that says what is being captured and at what
|
|
7
|
+
* cost, and one of four tabs below it.
|
|
8
|
+
*
|
|
9
|
+
* Three tabs are scoped to a selected capture and one is not. Queries is the
|
|
10
|
+
* list; Network and Inspection explain the row you picked from it; Console is
|
|
11
|
+
* the process tail, which belongs to the server rather than to any one request.
|
|
12
|
+
*/
|
|
13
|
+
export type DebugConsoleProps = {
|
|
14
|
+
state: DebugStoreState;
|
|
15
|
+
store?: DebugStore | undefined;
|
|
16
|
+
client?: DebugClient | undefined;
|
|
17
|
+
onClose?: (() => void) | undefined;
|
|
18
|
+
/** Controlled tab, so the host can deep-link into one. */
|
|
19
|
+
tab?: DebugTab | undefined;
|
|
20
|
+
onTabChange?: ((tab: DebugTab) => void) | undefined;
|
|
21
|
+
};
|
|
22
|
+
export declare function DebugConsole({ state, store, client, onClose, tab: controlledTab, onTabChange, }: DebugConsoleProps): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
//# sourceMappingURL=DebugConsole.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DebugConsole.d.ts","sourceRoot":"","sources":["../../src/devtools/DebugConsole.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAc,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAKjF,OAAO,EAIL,KAAK,QAAQ,EAEd,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,QAAQ,EAAE,CAAC;AAEzB;;;;;;;GAOG;AAEH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC/B,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACnC,0DAA0D;IAC1D,GAAG,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACrD,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,KAAkB,EAClB,MAAM,EACN,OAAO,EACP,GAAG,EAAE,aAAa,EAClB,WAAW,GACZ,EAAE,iBAAiB,2CA6EnB"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useMemo } from "react";
|
|
3
|
+
import { IconButton } from "../components/IconButton.js";
|
|
4
|
+
import { Tabs } from "../layout/Tabs.js";
|
|
5
|
+
import { DebugClient } from "./debugClient.js";
|
|
6
|
+
import { debugStore } from "./debugStore.js";
|
|
7
|
+
import { ConsoleTab } from "./tabs/ConsoleTab.js";
|
|
8
|
+
import { InspectionTab } from "./tabs/InspectionTab.js";
|
|
9
|
+
import { NetworkTab } from "./tabs/NetworkTab.js";
|
|
10
|
+
import { QueriesTab } from "./tabs/QueriesTab.js";
|
|
11
|
+
import { LEVEL_HELP, SELECTABLE_LEVELS } from "./types.js";
|
|
12
|
+
import { UiTrash } from "../icons/components/UiTrash.js";
|
|
13
|
+
import { UiClose } from "../icons/components/UiClose.js";
|
|
14
|
+
function DebugConsole({
|
|
15
|
+
state,
|
|
16
|
+
store = debugStore,
|
|
17
|
+
client,
|
|
18
|
+
onClose,
|
|
19
|
+
tab: controlledTab,
|
|
20
|
+
onTabChange
|
|
21
|
+
}) {
|
|
22
|
+
const [uncontrolledTab, setUncontrolledTab] = useState("queries");
|
|
23
|
+
const tab = controlledTab ?? uncontrolledTab;
|
|
24
|
+
const selectTab = (next) => {
|
|
25
|
+
setUncontrolledTab(next);
|
|
26
|
+
onTabChange == null ? void 0 : onTabChange(next);
|
|
27
|
+
};
|
|
28
|
+
const [selectedId, setSelectedId] = useState();
|
|
29
|
+
const selected = useSelectedRecord(state.records, selectedId);
|
|
30
|
+
const tabs = useMemo(
|
|
31
|
+
() => [
|
|
32
|
+
{ id: "queries", label: "Queries", count: state.records.length },
|
|
33
|
+
{ id: "network", label: "Network", count: (selected == null ? void 0 : selected.counts.harEntries) ?? 0 },
|
|
34
|
+
{ id: "console", label: "Console", count: state.logs.length },
|
|
35
|
+
{
|
|
36
|
+
id: "inspection",
|
|
37
|
+
label: "Inspection",
|
|
38
|
+
count: ((selected == null ? void 0 : selected.counts.inspections) ?? 0) + ((selected == null ? void 0 : selected.counts.probes) ?? 0)
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
[state.records.length, state.logs.length, selected]
|
|
42
|
+
);
|
|
43
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex h-full min-h-0 flex-col bg-background", children: [
|
|
44
|
+
/* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-density-3 border-border border-b px-density-3", children: [
|
|
45
|
+
/* @__PURE__ */ jsx(Tabs, { tabs, value: tab, onChange: (id) => selectTab(id), className: "flex-1" }),
|
|
46
|
+
/* @__PURE__ */ jsx(LevelPicker, { level: state.level, onChange: (level) => store.setLevel(level) }),
|
|
47
|
+
/* @__PURE__ */ jsx(ConnectionDot, { connected: state.connected, error: state.streamError }),
|
|
48
|
+
/* @__PURE__ */ jsx(
|
|
49
|
+
IconButton,
|
|
50
|
+
{
|
|
51
|
+
icon: UiTrash,
|
|
52
|
+
label: "Clear captures",
|
|
53
|
+
iconClassName: "size-4",
|
|
54
|
+
onClick: () => {
|
|
55
|
+
store.clear();
|
|
56
|
+
void (client ?? new DebugClient()).clear().catch(() => {
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
),
|
|
61
|
+
onClose ? /* @__PURE__ */ jsx(IconButton, { icon: UiClose, label: "Close console", iconClassName: "size-4", onClick: onClose }) : null
|
|
62
|
+
] }),
|
|
63
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: [
|
|
64
|
+
tab === "queries" ? /* @__PURE__ */ jsx(
|
|
65
|
+
QueriesTab,
|
|
66
|
+
{
|
|
67
|
+
records: state.records,
|
|
68
|
+
client,
|
|
69
|
+
onSelect: (record) => setSelectedId(record.id)
|
|
70
|
+
}
|
|
71
|
+
) : null,
|
|
72
|
+
tab === "network" ? /* @__PURE__ */ jsx(NetworkTab, { record: selected, client }) : null,
|
|
73
|
+
tab === "console" ? /* @__PURE__ */ jsx(ConsoleTab, { lines: state.logs }) : null,
|
|
74
|
+
tab === "inspection" ? /* @__PURE__ */ jsx(
|
|
75
|
+
InspectionTab,
|
|
76
|
+
{
|
|
77
|
+
record: selected,
|
|
78
|
+
client,
|
|
79
|
+
refreshInspection: state.refreshInspection,
|
|
80
|
+
onRefreshInspectionChange: (refresh) => store.setRefreshInspection(refresh)
|
|
81
|
+
}
|
|
82
|
+
) : null
|
|
83
|
+
] })
|
|
84
|
+
] });
|
|
85
|
+
}
|
|
86
|
+
function useSelectedRecord(records, selectedId) {
|
|
87
|
+
return useMemo(() => {
|
|
88
|
+
if (selectedId) {
|
|
89
|
+
const found = records.find((record) => record.id === selectedId);
|
|
90
|
+
if (found) return found;
|
|
91
|
+
}
|
|
92
|
+
return records[records.length - 1];
|
|
93
|
+
}, [records, selectedId]);
|
|
94
|
+
}
|
|
95
|
+
function LevelPicker({
|
|
96
|
+
level,
|
|
97
|
+
onChange
|
|
98
|
+
}) {
|
|
99
|
+
return /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-density-1 text-xs", children: [
|
|
100
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "Capture" }),
|
|
101
|
+
/* @__PURE__ */ jsx(
|
|
102
|
+
"select",
|
|
103
|
+
{
|
|
104
|
+
className: "rounded border border-border bg-background px-density-1 py-0.5 font-mono text-xs",
|
|
105
|
+
value: level,
|
|
106
|
+
title: LEVEL_HELP[level],
|
|
107
|
+
onChange: (event) => onChange(event.target.value),
|
|
108
|
+
children: SELECTABLE_LEVELS.map((option) => /* @__PURE__ */ jsx("option", { value: option, title: LEVEL_HELP[option], children: option }, option))
|
|
109
|
+
}
|
|
110
|
+
)
|
|
111
|
+
] });
|
|
112
|
+
}
|
|
113
|
+
function ConnectionDot({
|
|
114
|
+
connected,
|
|
115
|
+
error
|
|
116
|
+
}) {
|
|
117
|
+
return /* @__PURE__ */ jsxs(
|
|
118
|
+
"span",
|
|
119
|
+
{
|
|
120
|
+
className: "flex items-center gap-density-1 text-muted-foreground text-xs",
|
|
121
|
+
title: error ?? (connected ? "Streaming" : "Not connected"),
|
|
122
|
+
children: [
|
|
123
|
+
/* @__PURE__ */ jsx(
|
|
124
|
+
"span",
|
|
125
|
+
{
|
|
126
|
+
"aria-hidden": true,
|
|
127
|
+
className: `inline-block size-2 rounded-full ${connected ? "bg-green-500" : "bg-muted-foreground/40"}`
|
|
128
|
+
}
|
|
129
|
+
),
|
|
130
|
+
connected ? "live" : "offline"
|
|
131
|
+
]
|
|
132
|
+
}
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
export {
|
|
136
|
+
DebugConsole
|
|
137
|
+
};
|
|
138
|
+
//# sourceMappingURL=DebugConsole.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DebugConsole.js","sources":["../../src/devtools/DebugConsole.tsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { IconButton } from \"../components/IconButton\";\nimport { UiClose, UiTrash } from \"../icons\";\nimport { Tabs, type TabItem } from \"../layout/Tabs\";\nimport { DebugClient } from \"./debugClient\";\nimport { debugStore, type DebugStore, type DebugStoreState } from \"./debugStore\";\nimport { ConsoleTab } from \"./tabs/ConsoleTab\";\nimport { InspectionTab } from \"./tabs/InspectionTab\";\nimport { NetworkTab } from \"./tabs/NetworkTab\";\nimport { QueriesTab } from \"./tabs/QueriesTab\";\nimport {\n LEVEL_HELP,\n SELECTABLE_LEVELS,\n type DebugLevel,\n type DebugTab,\n type ExecutionSummary,\n} from \"./types\";\n\nexport type { DebugTab };\n\n/**\n * The console itself: a header that says what is being captured and at what\n * cost, and one of four tabs below it.\n *\n * Three tabs are scoped to a selected capture and one is not. Queries is the\n * list; Network and Inspection explain the row you picked from it; Console is\n * the process tail, which belongs to the server rather than to any one request.\n */\n\nexport type DebugConsoleProps = {\n state: DebugStoreState;\n store?: DebugStore | undefined;\n client?: DebugClient | undefined;\n onClose?: (() => void) | undefined;\n /** Controlled tab, so the host can deep-link into one. */\n tab?: DebugTab | undefined;\n onTabChange?: ((tab: DebugTab) => void) | undefined;\n};\n\nexport function DebugConsole({\n state,\n store = debugStore,\n client,\n onClose,\n tab: controlledTab,\n onTabChange,\n}: DebugConsoleProps) {\n const [uncontrolledTab, setUncontrolledTab] = useState<DebugTab>(\"queries\");\n const tab = controlledTab ?? uncontrolledTab;\n const selectTab = (next: DebugTab) => {\n setUncontrolledTab(next);\n onTabChange?.(next);\n };\n\n const [selectedId, setSelectedId] = useState<string | undefined>();\n const selected = useSelectedRecord(state.records, selectedId);\n\n const tabs: TabItem[] = useMemo(\n () => [\n { id: \"queries\", label: \"Queries\", count: state.records.length },\n { id: \"network\", label: \"Network\", count: selected?.counts.harEntries ?? 0 },\n { id: \"console\", label: \"Console\", count: state.logs.length },\n {\n id: \"inspection\",\n label: \"Inspection\",\n count: (selected?.counts.inspections ?? 0) + (selected?.counts.probes ?? 0),\n },\n ],\n [state.records.length, state.logs.length, selected],\n );\n\n return (\n <div className=\"flex h-full min-h-0 flex-col bg-background\">\n <div className=\"flex shrink-0 items-center gap-density-3 border-border border-b px-density-3\">\n <Tabs tabs={tabs} value={tab} onChange={(id) => selectTab(id as DebugTab)} className=\"flex-1\" />\n\n <LevelPicker level={state.level} onChange={(level) => store.setLevel(level)} />\n\n <ConnectionDot connected={state.connected} error={state.streamError} />\n\n <IconButton\n icon={UiTrash}\n label=\"Clear captures\"\n iconClassName=\"size-4\"\n onClick={() => {\n store.clear();\n void (client ?? new DebugClient()).clear().catch(() => {\n // The server's buffer outliving the client's view is a cosmetic\n // mismatch, not a reason to fail the click the user just made.\n });\n }}\n />\n {onClose ? (\n <IconButton icon={UiClose} label=\"Close console\" iconClassName=\"size-4\" onClick={onClose} />\n ) : null}\n </div>\n\n {/* A bounded flex column. Every tab below hands its height to a component\n that scrolls internally (DataTable, LogsTable, HarPanel), and each of\n those sizes itself as `flex-1 min-h-0` — which needs a flex parent with\n a definite height, or it resolves to content height and the console\n body grows instead of scrolling. */}\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden\">\n {tab === \"queries\" ? (\n <QueriesTab\n records={state.records}\n client={client}\n onSelect={(record) => setSelectedId(record.id)}\n />\n ) : null}\n {tab === \"network\" ? <NetworkTab record={selected} client={client} /> : null}\n {tab === \"console\" ? <ConsoleTab lines={state.logs} /> : null}\n {tab === \"inspection\" ? (\n <InspectionTab\n record={selected}\n client={client}\n refreshInspection={state.refreshInspection}\n onRefreshInspectionChange={(refresh) => store.setRefreshInspection(refresh)}\n />\n ) : null}\n </div>\n </div>\n );\n}\n\n/**\n * The selected capture, falling back to the most recent one.\n *\n * Without the fallback, Network and Inspection open empty on a console that is\n * plainly full of rows, which reads as a broken tab rather than as \"pick one\".\n */\nfunction useSelectedRecord(\n records: ExecutionSummary[],\n selectedId: string | undefined,\n): ExecutionSummary | undefined {\n return useMemo(() => {\n if (selectedId) {\n const found = records.find((record) => record.id === selectedId);\n if (found) return found;\n }\n return records[records.length - 1];\n }, [records, selectedId]);\n}\n\nfunction LevelPicker({\n level,\n onChange,\n}: {\n level: DebugLevel;\n onChange: (level: DebugLevel) => void;\n}) {\n return (\n <label className=\"flex items-center gap-density-1 text-xs\">\n <span className=\"text-muted-foreground\">Capture</span>\n <select\n className=\"rounded border border-border bg-background px-density-1 py-0.5 font-mono text-xs\"\n value={level}\n title={LEVEL_HELP[level]}\n onChange={(event) => onChange(event.target.value as DebugLevel)}\n >\n {SELECTABLE_LEVELS.map((option) => (\n <option key={option} value={option} title={LEVEL_HELP[option]}>\n {option}\n </option>\n ))}\n </select>\n </label>\n );\n}\n\nfunction ConnectionDot({\n connected,\n error,\n}: {\n connected: boolean;\n error?: string | undefined;\n}) {\n return (\n <span\n className=\"flex items-center gap-density-1 text-muted-foreground text-xs\"\n title={error ?? (connected ? \"Streaming\" : \"Not connected\")}\n >\n <span\n aria-hidden\n className={`inline-block size-2 rounded-full ${connected ? \"bg-green-500\" : \"bg-muted-foreground/40\"}`}\n />\n {connected ? \"live\" : \"offline\"}\n </span>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAuCO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA,KAAK;AAAA,EACL;AACF,GAAsB;AACpB,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAmB,SAAS;AAC1E,QAAM,MAAM,iBAAiB;AAC7B,QAAM,YAAY,CAAC,SAAmB;AACpC,uBAAmB,IAAI;AACvB,+CAAc;AAAA,EAChB;AAEA,QAAM,CAAC,YAAY,aAAa,IAAI,SAAA;AACpC,QAAM,WAAW,kBAAkB,MAAM,SAAS,UAAU;AAE5D,QAAM,OAAkB;AAAA,IACtB,MAAM;AAAA,MACJ,EAAE,IAAI,WAAW,OAAO,WAAW,OAAO,MAAM,QAAQ,OAAA;AAAA,MACxD,EAAE,IAAI,WAAW,OAAO,WAAW,QAAO,qCAAU,OAAO,eAAc,EAAA;AAAA,MACzE,EAAE,IAAI,WAAW,OAAO,WAAW,OAAO,MAAM,KAAK,OAAA;AAAA,MACrD;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,SAAQ,qCAAU,OAAO,gBAAe,OAAM,qCAAU,OAAO,WAAU;AAAA,MAAA;AAAA,IAC3E;AAAA,IAEF,CAAC,MAAM,QAAQ,QAAQ,MAAM,KAAK,QAAQ,QAAQ;AAAA,EAAA;AAGpD,SACE,qBAAC,OAAA,EAAI,WAAU,8CACb,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAU,gFACb,UAAA;AAAA,MAAA,oBAAC,MAAA,EAAK,MAAY,OAAO,KAAK,UAAU,CAAC,OAAO,UAAU,EAAc,GAAG,WAAU,SAAA,CAAS;AAAA,MAE9F,oBAAC,aAAA,EAAY,OAAO,MAAM,OAAO,UAAU,CAAC,UAAU,MAAM,SAAS,KAAK,EAAA,CAAG;AAAA,0BAE5E,eAAA,EAAc,WAAW,MAAM,WAAW,OAAO,MAAM,aAAa;AAAA,MAErE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAM;AAAA,UACN,OAAM;AAAA,UACN,eAAc;AAAA,UACd,SAAS,MAAM;AACb,kBAAM,MAAA;AACN,kBAAM,UAAU,IAAI,YAAA,GAAe,MAAA,EAAQ,MAAM,MAAM;AAAA,YAGvD,CAAC;AAAA,UACH;AAAA,QAAA;AAAA,MAAA;AAAA,MAED,UACC,oBAAC,YAAA,EAAW,MAAM,SAAS,OAAM,iBAAgB,eAAc,UAAS,SAAS,QAAA,CAAS,IACxF;AAAA,IAAA,GACN;AAAA,IAOA,qBAAC,OAAA,EAAI,WAAU,gDACZ,UAAA;AAAA,MAAA,QAAQ,YACP;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAS,MAAM;AAAA,UACf;AAAA,UACA,UAAU,CAAC,WAAW,cAAc,OAAO,EAAE;AAAA,QAAA;AAAA,MAAA,IAE7C;AAAA,MACH,QAAQ,YAAY,oBAAC,cAAW,QAAQ,UAAU,QAAgB,IAAK;AAAA,MACvE,QAAQ,YAAY,oBAAC,cAAW,OAAO,MAAM,MAAM,IAAK;AAAA,MACxD,QAAQ,eACP;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,QAAQ;AAAA,UACR;AAAA,UACA,mBAAmB,MAAM;AAAA,UACzB,2BAA2B,CAAC,YAAY,MAAM,qBAAqB,OAAO;AAAA,QAAA;AAAA,MAAA,IAE1E;AAAA,IAAA,EAAA,CACN;AAAA,EAAA,GACF;AAEJ;AAQA,SAAS,kBACP,SACA,YAC8B;AAC9B,SAAO,QAAQ,MAAM;AACnB,QAAI,YAAY;AACd,YAAM,QAAQ,QAAQ,KAAK,CAAC,WAAW,OAAO,OAAO,UAAU;AAC/D,UAAI,MAAO,QAAO;AAAA,IACpB;AACA,WAAO,QAAQ,QAAQ,SAAS,CAAC;AAAA,EACnC,GAAG,CAAC,SAAS,UAAU,CAAC;AAC1B;AAEA,SAAS,YAAY;AAAA,EACnB;AAAA,EACA;AACF,GAGG;AACD,SACE,qBAAC,SAAA,EAAM,WAAU,2CACf,UAAA;AAAA,IAAA,oBAAC,QAAA,EAAK,WAAU,yBAAwB,UAAA,WAAO;AAAA,IAC/C;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO;AAAA,QACP,OAAO,WAAW,KAAK;AAAA,QACvB,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,KAAmB;AAAA,QAE7D,UAAA,kBAAkB,IAAI,CAAC,+BACrB,UAAA,EAAoB,OAAO,QAAQ,OAAO,WAAW,MAAM,GACzD,UAAA,OAAA,GADU,MAEb,CACD;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GACF;AAEJ;AAEA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA;AACF,GAGG;AACD,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,UAAU,YAAY,cAAc;AAAA,MAE3C,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,eAAW;AAAA,YACX,WAAW,oCAAoC,YAAY,iBAAiB,wBAAwB;AAAA,UAAA;AAAA,QAAA;AAAA,QAErG,YAAY,SAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAG5B;"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const react = require("react");
|
|
5
|
+
const debugConsoleSignal = require("../data/debugConsoleSignal.cjs");
|
|
6
|
+
const utils = require("../lib/utils.cjs");
|
|
7
|
+
const debugStore = require("./debugStore.cjs");
|
|
8
|
+
const UiDebug = require("../icons/components/UiDebug.cjs");
|
|
9
|
+
function DebugConsoleButton({
|
|
10
|
+
label = "Debug console",
|
|
11
|
+
className,
|
|
12
|
+
store = debugStore.debugStore
|
|
13
|
+
}) {
|
|
14
|
+
const open = react.useSyncExternalStore(debugConsoleSignal.subscribeToDebugConsole, debugConsoleSignal.debugConsoleOpen, () => false);
|
|
15
|
+
const state = react.useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot);
|
|
16
|
+
const failures = state.records.filter(hasFailed).length;
|
|
17
|
+
const badge = failures > 0 ? failures : state.records.length;
|
|
18
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
19
|
+
"button",
|
|
20
|
+
{
|
|
21
|
+
type: "button",
|
|
22
|
+
"aria-label": label,
|
|
23
|
+
"aria-pressed": open,
|
|
24
|
+
title: triggerTitle(state.records.length, failures, open),
|
|
25
|
+
onClick: () => debugConsoleSignal.revealDebugConsole({ toggle: true }),
|
|
26
|
+
className: utils.cn(
|
|
27
|
+
"relative inline-flex size-9 shrink-0 items-center justify-center rounded-md bg-transparent text-foreground transition-colors hover:bg-accent",
|
|
28
|
+
open && "bg-accent",
|
|
29
|
+
className
|
|
30
|
+
),
|
|
31
|
+
children: [
|
|
32
|
+
/* @__PURE__ */ jsxRuntime.jsx(UiDebug.UiDebug, { className: "size-5", "aria-hidden": true }),
|
|
33
|
+
badge > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
34
|
+
"span",
|
|
35
|
+
{
|
|
36
|
+
"aria-hidden": true,
|
|
37
|
+
className: utils.cn(
|
|
38
|
+
"-right-0.5 -top-0.5 absolute min-w-4 rounded-full px-1 text-[10px] leading-4 tabular-nums",
|
|
39
|
+
failures > 0 ? "bg-destructive text-destructive-foreground" : "bg-muted text-muted-foreground"
|
|
40
|
+
),
|
|
41
|
+
children: badge > 99 ? "99+" : badge
|
|
42
|
+
}
|
|
43
|
+
) : null
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
function hasFailed(record) {
|
|
49
|
+
return Boolean(record.error) || record.status !== void 0 && record.status >= 400;
|
|
50
|
+
}
|
|
51
|
+
function triggerTitle(records, failures, open) {
|
|
52
|
+
const action = open ? "Hide" : "Show";
|
|
53
|
+
if (records === 0) return `${action} the debug console`;
|
|
54
|
+
const captures = `${records} capture${records === 1 ? "" : "s"}`;
|
|
55
|
+
if (failures === 0) return `${action} the debug console — ${captures}`;
|
|
56
|
+
return `${action} the debug console — ${captures}, ${failures} failed`;
|
|
57
|
+
}
|
|
58
|
+
exports.DebugConsoleButton = DebugConsoleButton;
|
|
59
|
+
//# sourceMappingURL=DebugConsoleButton.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DebugConsoleButton.cjs","sources":["../../src/devtools/DebugConsoleButton.tsx"],"sourcesContent":["import { useSyncExternalStore } from \"react\";\nimport {\n debugConsoleOpen,\n revealDebugConsole,\n subscribeToDebugConsole,\n} from \"../data/debugConsoleSignal\";\nimport { UiDebug } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport { debugStore, type DebugStore } from \"./debugStore\";\n\n/**\n * The console's trigger, styled as navbar chrome for AppShell's actions slot.\n *\n * It replaced a collapsed status bar pinned under the page. The bar cost a\n * strip of every screen to say something only a developer wants, and it sat\n * where a page's own footer belongs; the navbar is where an app's other global\n * affordances already are, beside the chat trigger.\n *\n * The badge is what the bar was actually for. A trigger that says nothing gives\n * no reason to press it — \"3 errors\" does.\n */\n\nexport type DebugConsoleButtonProps = {\n label?: string | undefined;\n className?: string | undefined;\n /** The capture store to count. Defaults to the shared one the dock streams into. */\n store?: DebugStore | undefined;\n};\n\nexport function DebugConsoleButton({\n label = \"Debug console\",\n className,\n store = debugStore,\n}: DebugConsoleButtonProps) {\n const open = useSyncExternalStore(subscribeToDebugConsole, debugConsoleOpen, () => false);\n const state = useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot);\n const failures = state.records.filter(hasFailed).length;\n const badge = failures > 0 ? failures : state.records.length;\n\n return (\n <button\n type=\"button\"\n aria-label={label}\n aria-pressed={open}\n title={triggerTitle(state.records.length, failures, open)}\n onClick={() => revealDebugConsole({ toggle: true })}\n className={cn(\n \"relative inline-flex size-9 shrink-0 items-center justify-center rounded-md bg-transparent text-foreground transition-colors hover:bg-accent\",\n open && \"bg-accent\",\n className,\n )}\n >\n <UiDebug className=\"size-5\" aria-hidden />\n {badge > 0 ? (\n <span\n aria-hidden\n className={cn(\n \"-right-0.5 -top-0.5 absolute min-w-4 rounded-full px-1 text-[10px] leading-4 tabular-nums\",\n failures > 0\n ? \"bg-destructive text-destructive-foreground\"\n : \"bg-muted text-muted-foreground\",\n )}\n >\n {badge > 99 ? \"99+\" : badge}\n </span>\n ) : null}\n </button>\n );\n}\n\n/**\n * A failed capture is either one the transport reported an error for or one\n * whose status came back 4xx/5xx — a record can carry the second without the\n * first when the handler wrote the status itself.\n */\nfunction hasFailed(record: { error?: string | undefined; status?: number | undefined }): boolean {\n return Boolean(record.error) || (record.status !== undefined && record.status >= 400);\n}\n\nfunction triggerTitle(records: number, failures: number, open: boolean): string {\n const action = open ? \"Hide\" : \"Show\";\n if (records === 0) return `${action} the debug console`;\n const captures = `${records} capture${records === 1 ? \"\" : \"s\"}`;\n if (failures === 0) return `${action} the debug console — ${captures}`;\n return `${action} the debug console — ${captures}, ${failures} failed`;\n}\n"],"names":["debugStore","useSyncExternalStore","subscribeToDebugConsole","debugConsoleOpen","jsxs","revealDebugConsole","cn","jsx","UiDebug"],"mappings":";;;;;;;;AA6BO,SAAS,mBAAmB;AAAA,EACjC,QAAQ;AAAA,EACR;AAAA,EACA,QAAQA,WAAAA;AACV,GAA4B;AAC1B,QAAM,OAAOC,MAAAA,qBAAqBC,mBAAAA,yBAAyBC,mBAAAA,kBAAkB,MAAM,KAAK;AACxF,QAAM,QAAQF,MAAAA,qBAAqB,MAAM,WAAW,MAAM,aAAa,MAAM,WAAW;AACxF,QAAM,WAAW,MAAM,QAAQ,OAAO,SAAS,EAAE;AACjD,QAAM,QAAQ,WAAW,IAAI,WAAW,MAAM,QAAQ;AAEtD,SACEG,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAY;AAAA,MACZ,gBAAc;AAAA,MACd,OAAO,aAAa,MAAM,QAAQ,QAAQ,UAAU,IAAI;AAAA,MACxD,SAAS,MAAMC,mBAAAA,mBAAmB,EAAE,QAAQ,MAAM;AAAA,MAClD,WAAWC,MAAAA;AAAAA,QACT;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MAAA;AAAA,MAGF,UAAA;AAAA,QAAAC,2BAAAA,IAACC,QAAAA,SAAA,EAAQ,WAAU,UAAS,eAAW,MAAC;AAAA,QACvC,QAAQ,IACPD,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,eAAW;AAAA,YACX,WAAWD,MAAAA;AAAAA,cACT;AAAA,cACA,WAAW,IACP,+CACA;AAAA,YAAA;AAAA,YAGL,UAAA,QAAQ,KAAK,QAAQ;AAAA,UAAA;AAAA,QAAA,IAEtB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGV;AAOA,SAAS,UAAU,QAA8E;AAC/F,SAAO,QAAQ,OAAO,KAAK,KAAM,OAAO,WAAW,UAAa,OAAO,UAAU;AACnF;AAEA,SAAS,aAAa,SAAiB,UAAkB,MAAuB;AAC9E,QAAM,SAAS,OAAO,SAAS;AAC/B,MAAI,YAAY,EAAG,QAAO,GAAG,MAAM;AACnC,QAAM,WAAW,GAAG,OAAO,WAAW,YAAY,IAAI,KAAK,GAAG;AAC9D,MAAI,aAAa,EAAG,QAAO,GAAG,MAAM,wBAAwB,QAAQ;AACpE,SAAO,GAAG,MAAM,wBAAwB,QAAQ,KAAK,QAAQ;AAC/D;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { DebugStore } from './debugStore';
|
|
2
|
+
/**
|
|
3
|
+
* The console's trigger, styled as navbar chrome for AppShell's actions slot.
|
|
4
|
+
*
|
|
5
|
+
* It replaced a collapsed status bar pinned under the page. The bar cost a
|
|
6
|
+
* strip of every screen to say something only a developer wants, and it sat
|
|
7
|
+
* where a page's own footer belongs; the navbar is where an app's other global
|
|
8
|
+
* affordances already are, beside the chat trigger.
|
|
9
|
+
*
|
|
10
|
+
* The badge is what the bar was actually for. A trigger that says nothing gives
|
|
11
|
+
* no reason to press it — "3 errors" does.
|
|
12
|
+
*/
|
|
13
|
+
export type DebugConsoleButtonProps = {
|
|
14
|
+
label?: string | undefined;
|
|
15
|
+
className?: string | undefined;
|
|
16
|
+
/** The capture store to count. Defaults to the shared one the dock streams into. */
|
|
17
|
+
store?: DebugStore | undefined;
|
|
18
|
+
};
|
|
19
|
+
export declare function DebugConsoleButton({ label, className, store, }: DebugConsoleButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
//# sourceMappingURL=DebugConsoleButton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DebugConsoleButton.d.ts","sourceRoot":"","sources":["../../src/devtools/DebugConsoleButton.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAE3D;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,oFAAoF;IACpF,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;CAChC,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,EACjC,KAAuB,EACvB,SAAS,EACT,KAAkB,GACnB,EAAE,uBAAuB,2CAmCzB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useSyncExternalStore } from "react";
|
|
3
|
+
import { subscribeToDebugConsole, debugConsoleOpen, revealDebugConsole } from "../data/debugConsoleSignal.js";
|
|
4
|
+
import { cn } from "../lib/utils.js";
|
|
5
|
+
import { debugStore } from "./debugStore.js";
|
|
6
|
+
import { UiDebug } from "../icons/components/UiDebug.js";
|
|
7
|
+
function DebugConsoleButton({
|
|
8
|
+
label = "Debug console",
|
|
9
|
+
className,
|
|
10
|
+
store = debugStore
|
|
11
|
+
}) {
|
|
12
|
+
const open = useSyncExternalStore(subscribeToDebugConsole, debugConsoleOpen, () => false);
|
|
13
|
+
const state = useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot);
|
|
14
|
+
const failures = state.records.filter(hasFailed).length;
|
|
15
|
+
const badge = failures > 0 ? failures : state.records.length;
|
|
16
|
+
return /* @__PURE__ */ jsxs(
|
|
17
|
+
"button",
|
|
18
|
+
{
|
|
19
|
+
type: "button",
|
|
20
|
+
"aria-label": label,
|
|
21
|
+
"aria-pressed": open,
|
|
22
|
+
title: triggerTitle(state.records.length, failures, open),
|
|
23
|
+
onClick: () => revealDebugConsole({ toggle: true }),
|
|
24
|
+
className: cn(
|
|
25
|
+
"relative inline-flex size-9 shrink-0 items-center justify-center rounded-md bg-transparent text-foreground transition-colors hover:bg-accent",
|
|
26
|
+
open && "bg-accent",
|
|
27
|
+
className
|
|
28
|
+
),
|
|
29
|
+
children: [
|
|
30
|
+
/* @__PURE__ */ jsx(UiDebug, { className: "size-5", "aria-hidden": true }),
|
|
31
|
+
badge > 0 ? /* @__PURE__ */ jsx(
|
|
32
|
+
"span",
|
|
33
|
+
{
|
|
34
|
+
"aria-hidden": true,
|
|
35
|
+
className: cn(
|
|
36
|
+
"-right-0.5 -top-0.5 absolute min-w-4 rounded-full px-1 text-[10px] leading-4 tabular-nums",
|
|
37
|
+
failures > 0 ? "bg-destructive text-destructive-foreground" : "bg-muted text-muted-foreground"
|
|
38
|
+
),
|
|
39
|
+
children: badge > 99 ? "99+" : badge
|
|
40
|
+
}
|
|
41
|
+
) : null
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
function hasFailed(record) {
|
|
47
|
+
return Boolean(record.error) || record.status !== void 0 && record.status >= 400;
|
|
48
|
+
}
|
|
49
|
+
function triggerTitle(records, failures, open) {
|
|
50
|
+
const action = open ? "Hide" : "Show";
|
|
51
|
+
if (records === 0) return `${action} the debug console`;
|
|
52
|
+
const captures = `${records} capture${records === 1 ? "" : "s"}`;
|
|
53
|
+
if (failures === 0) return `${action} the debug console — ${captures}`;
|
|
54
|
+
return `${action} the debug console — ${captures}, ${failures} failed`;
|
|
55
|
+
}
|
|
56
|
+
export {
|
|
57
|
+
DebugConsoleButton
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=DebugConsoleButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DebugConsoleButton.js","sources":["../../src/devtools/DebugConsoleButton.tsx"],"sourcesContent":["import { useSyncExternalStore } from \"react\";\nimport {\n debugConsoleOpen,\n revealDebugConsole,\n subscribeToDebugConsole,\n} from \"../data/debugConsoleSignal\";\nimport { UiDebug } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport { debugStore, type DebugStore } from \"./debugStore\";\n\n/**\n * The console's trigger, styled as navbar chrome for AppShell's actions slot.\n *\n * It replaced a collapsed status bar pinned under the page. The bar cost a\n * strip of every screen to say something only a developer wants, and it sat\n * where a page's own footer belongs; the navbar is where an app's other global\n * affordances already are, beside the chat trigger.\n *\n * The badge is what the bar was actually for. A trigger that says nothing gives\n * no reason to press it — \"3 errors\" does.\n */\n\nexport type DebugConsoleButtonProps = {\n label?: string | undefined;\n className?: string | undefined;\n /** The capture store to count. Defaults to the shared one the dock streams into. */\n store?: DebugStore | undefined;\n};\n\nexport function DebugConsoleButton({\n label = \"Debug console\",\n className,\n store = debugStore,\n}: DebugConsoleButtonProps) {\n const open = useSyncExternalStore(subscribeToDebugConsole, debugConsoleOpen, () => false);\n const state = useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot);\n const failures = state.records.filter(hasFailed).length;\n const badge = failures > 0 ? failures : state.records.length;\n\n return (\n <button\n type=\"button\"\n aria-label={label}\n aria-pressed={open}\n title={triggerTitle(state.records.length, failures, open)}\n onClick={() => revealDebugConsole({ toggle: true })}\n className={cn(\n \"relative inline-flex size-9 shrink-0 items-center justify-center rounded-md bg-transparent text-foreground transition-colors hover:bg-accent\",\n open && \"bg-accent\",\n className,\n )}\n >\n <UiDebug className=\"size-5\" aria-hidden />\n {badge > 0 ? (\n <span\n aria-hidden\n className={cn(\n \"-right-0.5 -top-0.5 absolute min-w-4 rounded-full px-1 text-[10px] leading-4 tabular-nums\",\n failures > 0\n ? \"bg-destructive text-destructive-foreground\"\n : \"bg-muted text-muted-foreground\",\n )}\n >\n {badge > 99 ? \"99+\" : badge}\n </span>\n ) : null}\n </button>\n );\n}\n\n/**\n * A failed capture is either one the transport reported an error for or one\n * whose status came back 4xx/5xx — a record can carry the second without the\n * first when the handler wrote the status itself.\n */\nfunction hasFailed(record: { error?: string | undefined; status?: number | undefined }): boolean {\n return Boolean(record.error) || (record.status !== undefined && record.status >= 400);\n}\n\nfunction triggerTitle(records: number, failures: number, open: boolean): string {\n const action = open ? \"Hide\" : \"Show\";\n if (records === 0) return `${action} the debug console`;\n const captures = `${records} capture${records === 1 ? \"\" : \"s\"}`;\n if (failures === 0) return `${action} the debug console — ${captures}`;\n return `${action} the debug console — ${captures}, ${failures} failed`;\n}\n"],"names":[],"mappings":";;;;;;AA6BO,SAAS,mBAAmB;AAAA,EACjC,QAAQ;AAAA,EACR;AAAA,EACA,QAAQ;AACV,GAA4B;AAC1B,QAAM,OAAO,qBAAqB,yBAAyB,kBAAkB,MAAM,KAAK;AACxF,QAAM,QAAQ,qBAAqB,MAAM,WAAW,MAAM,aAAa,MAAM,WAAW;AACxF,QAAM,WAAW,MAAM,QAAQ,OAAO,SAAS,EAAE;AACjD,QAAM,QAAQ,WAAW,IAAI,WAAW,MAAM,QAAQ;AAEtD,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAY;AAAA,MACZ,gBAAc;AAAA,MACd,OAAO,aAAa,MAAM,QAAQ,QAAQ,UAAU,IAAI;AAAA,MACxD,SAAS,MAAM,mBAAmB,EAAE,QAAQ,MAAM;AAAA,MAClD,WAAW;AAAA,QACT;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MAAA;AAAA,MAGF,UAAA;AAAA,QAAA,oBAAC,SAAA,EAAQ,WAAU,UAAS,eAAW,MAAC;AAAA,QACvC,QAAQ,IACP;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,eAAW;AAAA,YACX,WAAW;AAAA,cACT;AAAA,cACA,WAAW,IACP,+CACA;AAAA,YAAA;AAAA,YAGL,UAAA,QAAQ,KAAK,QAAQ;AAAA,UAAA;AAAA,QAAA,IAEtB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGV;AAOA,SAAS,UAAU,QAA8E;AAC/F,SAAO,QAAQ,OAAO,KAAK,KAAM,OAAO,WAAW,UAAa,OAAO,UAAU;AACnF;AAEA,SAAS,aAAa,SAAiB,UAAkB,MAAuB;AAC9E,QAAM,SAAS,OAAO,SAAS;AAC/B,MAAI,YAAY,EAAG,QAAO,GAAG,MAAM;AACnC,QAAM,WAAW,GAAG,OAAO,WAAW,YAAY,IAAI,KAAK,GAAG;AAC9D,MAAI,aAAa,EAAG,QAAO,GAAG,MAAM,wBAAwB,QAAQ;AACpE,SAAO,GAAG,MAAM,wBAAwB,QAAQ,KAAK,QAAQ;AAC/D;"}
|