@kortix/ui 0.14.8 → 0.14.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/_vendor/kortix-shared.js +63 -3
- package/dist/_vendor/shared/app-config.d.ts +175 -0
- package/dist/_vendor/shared/channel-message.d.ts +34 -5
- package/dist/_vendor/shared/index.d.ts +1 -0
- package/dist/_vendor/shared/space-slug.d.ts +37 -0
- package/dist/access/access/access-detail-shell.js +1 -1
- package/dist/access/access/principal-picker.d.ts +11 -0
- package/dist/access/access/principal-picker.js +3 -2
- package/dist/apps/app-preview-pool.d.ts +7 -2
- package/dist/apps/app-preview-pool.js +11 -5
- package/dist/apps/app-shared.d.ts +22 -15
- package/dist/apps/app-shared.js +37 -19
- package/dist/apps/index.d.ts +2 -2
- package/dist/apps/index.js +2 -2
- package/dist/artifacts/artifact-frame.d.ts +16 -0
- package/dist/artifacts/artifact-frame.js +51 -0
- package/dist/artifacts/artifact-session.d.ts +18 -0
- package/dist/artifacts/artifact-session.js +101 -0
- package/dist/artifacts/frame-policy.d.ts +30 -0
- package/dist/artifacts/frame-policy.js +61 -0
- package/dist/artifacts/index.d.ts +3 -0
- package/dist/artifacts/index.js +5 -0
- package/dist/browser/sandbox-browser-chrome.d.ts +4 -1
- package/dist/browser/sandbox-browser-chrome.js +2 -2
- package/dist/customize/agents/agent-grant-pages.d.ts +5 -1
- package/dist/customize/agents/agent-grant-pages.js +30 -4
- package/dist/customize/agents/agent-page.js +3 -1
- package/dist/customize/agents/agent-policy-sets.d.ts +43 -0
- package/dist/customize/agents/agent-policy-sets.js +72 -0
- package/dist/customize/agents/agent-triggers-section.js +2 -1
- package/dist/customize/connectors/add-mcp/add-mcp-server-dialog.d.ts +6 -1
- package/dist/customize/connectors/add-mcp/add-mcp-server-dialog.js +10 -4
- package/dist/customize/connectors/agent-access.d.ts +35 -0
- package/dist/customize/connectors/agent-access.js +77 -0
- package/dist/customize/connectors/catalog/browse-sections.d.ts +2 -29
- package/dist/customize/connectors/catalog/browse-sections.js +7 -74
- package/dist/customize/connectors/catalog/catalog-entry.d.ts +18 -37
- package/dist/customize/connectors/catalog/catalog-entry.js +28 -40
- package/dist/customize/connectors/catalog/connector-browse.d.ts +3 -32
- package/dist/customize/connectors/catalog/connector-browse.js +19 -50
- package/dist/customize/connectors/catalog/use-catalog.d.ts +20 -59
- package/dist/customize/connectors/catalog/use-catalog.js +48 -175
- package/dist/customize/connectors/connector-identity.d.ts +9 -11
- package/dist/customize/connectors/connector-identity.js +13 -42
- package/dist/customize/connectors/connector-moves-banner.d.ts +2 -1
- package/dist/customize/connectors/connector-moves-banner.js +4 -6
- package/dist/customize/connectors/connector-routes.d.ts +21 -9
- package/dist/customize/connectors/connector-routes.js +29 -20
- package/dist/customize/connectors/connectors-page.js +53 -82
- package/dist/customize/connectors/detail/app-page.js +226 -98
- package/dist/customize/connectors/detail/computer-app-page.d.ts +16 -0
- package/dist/customize/connectors/detail/computer-app-page.js +39 -0
- package/dist/customize/connectors/detail/connector-accounts.js +3 -1
- package/dist/customize/connectors/detail/connector-advanced-tools.d.ts +4 -1
- package/dist/customize/connectors/detail/connector-advanced-tools.js +2 -2
- package/dist/customize/connectors/detail/connector-agents.d.ts +14 -0
- package/dist/customize/connectors/detail/connector-agents.js +69 -0
- package/dist/customize/connectors/detail/connector-detail-tabs.js +2 -1
- package/dist/customize/connectors/detail/connector-move-row.d.ts +8 -5
- package/dist/customize/connectors/detail/connector-move-row.js +23 -14
- package/dist/customize/connectors/detail/connector-page.d.ts +4 -1
- package/dist/customize/connectors/detail/connector-page.js +14 -10
- package/dist/customize/connectors/detail/connector-policy-sets.d.ts +28 -0
- package/dist/customize/connectors/detail/connector-policy-sets.js +203 -0
- package/dist/customize/connectors/detail/connector-settings.d.ts +4 -1
- package/dist/customize/connectors/detail/connector-settings.js +7 -3
- package/dist/customize/connectors/detail/connector-status.d.ts +19 -6
- package/dist/customize/connectors/detail/connector-status.js +34 -10
- package/dist/customize/connectors/detail/connector-tabs.d.ts +4 -1
- package/dist/customize/connectors/detail/connector-tabs.js +8 -2
- package/dist/customize/connectors/detail/connector-tools.d.ts +3 -3
- package/dist/customize/connectors/detail/connector-tools.js +105 -48
- package/dist/customize/connectors/detail/email-inboxes.d.ts +43 -0
- package/dist/customize/connectors/detail/email-inboxes.js +184 -0
- package/dist/customize/connectors/detail/provider-info.d.ts +1 -1
- package/dist/customize/connectors/detail/provider-info.js +2 -2
- package/dist/customize/connectors/detail/status-badge.d.ts +1 -1
- package/dist/customize/connectors/detail/status-badge.js +4 -5
- package/dist/customize/connectors/detail/use-connector-detail.d.ts +6 -0
- package/dist/customize/connectors/detail/use-connector-detail.js +14 -4
- package/dist/customize/connectors/install/install-dialog.d.ts +23 -0
- package/dist/customize/connectors/install/install-dialog.js +40 -0
- package/dist/customize/connectors/install/install.d.ts +13 -2
- package/dist/customize/connectors/install/install.js +9 -4
- package/dist/customize/connectors/install/use-install.d.ts +19 -2
- package/dist/customize/connectors/install/use-install.js +65 -37
- package/dist/customize/connectors/install/way-kind.d.ts +5 -0
- package/dist/customize/connectors/install/way-kind.js +16 -0
- package/dist/customize/connectors/provider-label.d.ts +2 -1
- package/dist/customize/connectors/provider-label.js +13 -3
- package/dist/customize/connectors/tools/pattern-rule-draft.d.ts +4 -0
- package/dist/customize/connectors/tools/pattern-rule-draft.js +12 -3
- package/dist/customize/connectors/tools/policy-sets.d.ts +27 -0
- package/dist/customize/connectors/tools/policy-sets.js +41 -0
- package/dist/customize/connectors/tools/tool-groups.d.ts +32 -9
- package/dist/customize/connectors/tools/tool-groups.js +78 -16
- package/dist/customize/connectors/tools/tool-policy-control.d.ts +11 -10
- package/dist/customize/connectors/tools/tool-policy-control.js +15 -16
- package/dist/customize/connectors/tools/tool-policy-labels.d.ts +6 -5
- package/dist/customize/connectors/tools/tool-policy-labels.js +17 -16
- package/dist/customize/connectors/tools/tool-policy.d.ts +50 -4
- package/dist/customize/connectors/tools/tool-policy.js +74 -8
- package/dist/customize/connectors/use-agent-access.d.ts +85 -0
- package/dist/customize/connectors/use-agent-access.js +72 -0
- package/dist/customize/migrate-to-v2/index.d.ts +1 -2
- package/dist/customize/migrate-to-v2/index.js +1 -2
- package/dist/customize/migrate-to-v2/migration-prompt.d.ts +12 -25
- package/dist/customize/migrate-to-v2/migration-prompt.js +34 -236
- package/dist/customize/migrate-to-v2/upgrade-defs.d.ts +1 -1
- package/dist/customize/migrate-to-v2/upgrade-defs.js +7 -6
- package/dist/customize/migrate-to-v2/upgrade-view.js +7 -7
- package/dist/customize/migrate-to-v2/use-run-upgrade.d.ts +3 -3
- package/dist/customize/providers/provider-accordion.js +17 -2
- package/dist/customize/sections/component/channel-access-panel.d.ts +16 -0
- package/dist/customize/sections/component/channel-access-panel.js +146 -0
- package/dist/customize/sections/component/channel-connect-hero.d.ts +3 -2
- package/dist/customize/sections/component/channel-connect-hero.js +3 -2
- package/dist/customize/sections/component/channel-hero-frame.d.ts +31 -0
- package/dist/customize/sections/component/channel-hero-frame.js +40 -0
- package/dist/customize/sections/component/channel-mocks.d.ts +6 -0
- package/dist/customize/sections/component/channel-mocks.js +46 -0
- package/dist/customize/sections/component/channel-row.d.ts +13 -3
- package/dist/customize/sections/component/channel-row.js +10 -4
- package/dist/customize/sections/component/email-connect-form.d.ts +27 -0
- package/dist/customize/sections/component/email-connect-form.js +183 -0
- package/dist/customize/sections/component/slack-connect-card.d.ts +7 -0
- package/dist/customize/sections/component/slack-connect-card.js +2 -3
- package/dist/customize/sections/component/teams-connect-card.d.ts +7 -0
- package/dist/customize/sections/component/teams-connect-card.js +2 -3
- package/dist/customize/sections/component/telegram-channel-row.js +16 -25
- package/dist/customize/sections/connectors-view.d.ts +1 -15
- package/dist/customize/sections/connectors-view.js +81 -314
- package/dist/customize/sections/view/agent-editor-catalog.js +5 -0
- package/dist/customize/sections/view/channels-view.d.ts +5 -1
- package/dist/customize/sections/view/channels-view.js +61 -75
- package/dist/customize/sections/view/gateway/gateway-overview.js +10 -2
- package/dist/customize/settings/tabs/experimental-tab.js +35 -16
- package/dist/customize/shared/catalog/catalog-empty-state.d.ts +1 -12
- package/dist/customize/shared/catalog/catalog-empty-state.js +3 -3
- package/dist/customize/shared/channels-switch-dialog.d.ts +18 -0
- package/dist/customize/shared/channels-switch-dialog.js +30 -0
- package/dist/customize/shared/feature-gate-screen.js +27 -9
- package/dist/customize/shared/use-customize-prefetch.d.ts +2 -3
- package/dist/customize/shared/use-customize-prefetch.js +9 -27
- package/dist/customize/triggers/schedule/post-to-field.d.ts +18 -0
- package/dist/customize/triggers/schedule/post-to-field.js +49 -0
- package/dist/customize/triggers/schedule/schedule-copy.d.ts +10 -6
- package/dist/customize/triggers/schedule/schedule-copy.js +42 -11
- package/dist/customize/triggers/schedule/schedule-detail-sheet.js +2 -1
- package/dist/customize/triggers/schedule/trigger-composer-logic.d.ts +22 -0
- package/dist/customize/triggers/schedule/trigger-composer-logic.js +25 -0
- package/dist/customize/triggers/schedule/trigger-composer.d.ts +5 -0
- package/dist/customize/triggers/schedule/trigger-composer.js +23 -14
- package/dist/customize/triggers/schedule/trigger-edit-logic.js +3 -0
- package/dist/customize/triggers/schedule/trigger-filter.js +1 -1
- package/dist/customize/triggers/schedule/trigger-runs-logic.d.ts +2 -2
- package/dist/customize/triggers/schedule/trigger-runs-panel.js +1 -0
- package/dist/customize/triggers/schedule/trigger-toast.js +2 -1
- package/dist/customize/triggers/schedule-view.js +5 -2
- package/dist/files/index.d.ts +1 -0
- package/dist/files/index.js +1 -0
- package/dist/files/project/change-request-recovery.d.ts +1 -26
- package/dist/files/project/change-request-recovery.js +1 -59
- package/dist/files/project/components/change-request-detail-dialog.js +13 -3
- package/dist/files/project/components/drive-explorer.js +15 -15
- package/dist/files/project/components/drive-toolbar.d.ts +16 -2
- package/dist/files/project/components/drive-toolbar.js +14 -5
- package/dist/files/project/hooks/use-change-request-recovery.js +3 -19
- package/dist/files/project/hooks/use-change-requests.d.ts +1 -0
- package/dist/files/project/hooks/use-change-requests.js +11 -2
- package/dist/files/renderers/image-frame.d.ts +46 -0
- package/dist/files/renderers/image-frame.js +59 -0
- package/dist/files/renderers/image-renderer.d.ts +11 -1
- package/dist/files/renderers/image-renderer.js +13 -3
- package/dist/files/renderers/pdf/pdf-clipboard.d.ts +2 -0
- package/dist/files/renderers/pdf/pdf-clipboard.js +21 -0
- package/dist/files/renderers/pdf/pdf-viewer.js +4 -2
- package/dist/files/renderers/show-content-renderer.d.ts +9 -1
- package/dist/files/renderers/show-content-renderer.js +56 -14
- package/dist/files/runtime/file-source.js +2 -0
- package/dist/files/runtime/hooks/use-binary-blob.d.ts +10 -1
- package/dist/files/runtime/hooks/use-binary-blob.js +10 -4
- package/dist/files/runtime/hooks/use-shared-image.d.ts +41 -0
- package/dist/files/runtime/hooks/use-shared-image.js +177 -0
- package/dist/files/viewer/file-content-renderer.d.ts +22 -1
- package/dist/files/viewer/file-content-renderer.js +50 -7
- package/dist/files/viewer/file-header.d.ts +7 -3
- package/dist/files/viewer/file-header.js +20 -11
- package/dist/files/viewer/file-preview-modal.d.ts +1 -1
- package/dist/files/viewer/file-preview-modal.js +10 -22
- package/dist/files/viewer/file-source.d.ts +13 -0
- package/dist/files/viewer/use-file-content-state.d.ts +2 -0
- package/dist/files/viewer/use-file-content-state.js +28 -10
- package/dist/files/viewer/viewer-actions.d.ts +3 -1
- package/dist/files/viewer/viewer-actions.js +2 -2
- package/dist/hooks/use-media-query.d.ts +1 -0
- package/dist/hooks/use-mobile.d.ts +5 -0
- package/dist/hooks/use-mobile.js +8 -0
- package/dist/i18n/en.d.ts +873 -85
- package/dist/i18n/en.js +888 -100
- package/dist/i18n/ui-catalog/localize-ui-catalog.js +4 -0
- package/dist/i18n/ui-catalog/remaining-ui-translation-keys.generated.js +15 -3
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/internal/account-hub/account-settings-sidebar.js +1 -1
- package/dist/internal/account-hub/hub-sheet.d.ts +9 -1
- package/dist/internal/account-hub/hub-sheet.js +21 -5
- package/dist/internal/account-hub/sections.d.ts +1 -1
- package/dist/internal/account-hub/sections.js +2 -1
- package/dist/internal/auth/auth-card-shell.js +3 -3
- package/dist/internal/components/agent-mark.js +5 -2
- package/dist/internal/connector-logo/connector-logo-source.d.ts +63 -0
- package/dist/internal/connector-logo/connector-logo-source.js +48 -0
- package/dist/internal/connector-logo/connector-logo.d.ts +39 -0
- package/dist/internal/connector-logo/connector-logo.js +56 -0
- package/dist/internal/connector-logo/connector-mark-files.d.ts +11 -0
- package/dist/internal/connector-logo/connector-mark-files.js +35 -0
- package/dist/internal/files/file-read-retry.d.ts +13 -0
- package/dist/internal/files/file-read-retry.js +23 -3
- package/dist/internal/files/session-drive-files.d.ts +5 -1
- package/dist/internal/files/session-drive-files.js +7 -2
- package/dist/internal/hooks/channels/use-channels-installations.d.ts +32 -5
- package/dist/internal/hooks/channels/use-channels-installations.js +55 -7
- package/dist/internal/hooks/channels/use-email-inboxes.d.ts +19 -0
- package/dist/internal/hooks/channels/use-email-inboxes.js +48 -0
- package/dist/internal/hooks/connectors/use-add-account.js +1 -1
- package/dist/internal/hooks/index.d.ts +1 -1
- package/dist/internal/hooks/index.js +1 -1
- package/dist/internal/hooks/projects/use-new-project-session.d.ts +9 -0
- package/dist/internal/hooks/projects/use-new-project-session.js +28 -12
- package/dist/internal/hooks/use-auto-scroll.d.ts +8 -1
- package/dist/internal/hooks/use-auto-scroll.js +4 -4
- package/dist/internal/icons/telegram.d.ts +5 -0
- package/dist/internal/icons/telegram.js +6 -1
- package/dist/internal/layout/nav-hover-card.d.ts +35 -0
- package/dist/internal/layout/nav-hover-card.js +84 -0
- package/dist/internal/layout/project-nav-row.d.ts +3 -1
- package/dist/internal/layout/project-nav-row.js +3 -2
- package/dist/internal/layout/project-page-header.d.ts +4 -2
- package/dist/internal/layout/project-page-header.js +4 -3
- package/dist/internal/layout/project-settings-nav.js +59 -2
- package/dist/internal/lib/browser-error-noise.d.ts +1 -1
- package/dist/internal/lib/browser-error-noise.js +1 -1
- package/dist/internal/lib/browser-noise/rules/injected-scripts.d.ts +7 -0
- package/dist/internal/lib/browser-noise/rules/injected-scripts.js +15 -0
- package/dist/internal/lib/manifest-version.d.ts +1 -1
- package/dist/internal/lib/manifest-version.js +2 -2
- package/dist/internal/lib/memory-href.d.ts +16 -0
- package/dist/internal/lib/memory-href.js +46 -0
- package/dist/internal/lib/use-project-feature-flags.js +9 -9
- package/dist/internal/lib/utils/heic-convert.d.ts +1 -1
- package/dist/internal/lib/utils/heic-convert.js +3 -4
- package/dist/internal/lib/web-notifications.d.ts +20 -0
- package/dist/internal/lib/web-notifications.js +48 -4
- package/dist/internal/notifications/notification-bell.d.ts +4 -1
- package/dist/internal/notifications/notification-bell.js +2 -2
- package/dist/internal/selection/selection-bar.d.ts +2 -1
- package/dist/internal/selection/selection-bar.js +1 -1
- package/dist/internal/stores/file-preview-store.d.ts +29 -2
- package/dist/internal/stores/file-preview-store.js +19 -1
- package/dist/internal/stores/kortix-computer-store.js +3 -0
- package/dist/internal/stores/sidebar-nav-store.d.ts +1 -1
- package/dist/internal/stores/sidebar-nav-store.js +3 -1
- package/dist/lib/routes.d.ts +13 -1
- package/dist/lib/routes.js +13 -0
- package/dist/markdown/index.d.ts +2 -1
- package/dist/markdown/index.js +2 -1
- package/dist/markdown/setup-links/approval-decision.d.ts +1 -0
- package/dist/markdown/setup-links/approval-decision.js +6 -2
- package/dist/markdown/setup-links/connector-handshake.d.ts +3 -1
- package/dist/markdown/setup-links/connector-handshake.js +12 -10
- package/dist/markdown/setup-links/secret-intake-form.d.ts +0 -10
- package/dist/markdown/setup-links/secret-intake-form.js +1 -1
- package/dist/markdown/setup-links/show-connect-hero.d.ts +28 -0
- package/dist/markdown/setup-links/show-connect-hero.js +91 -0
- package/dist/markdown/unified-markdown.js +5 -5
- package/dist/primitives/badge.d.ts +1 -1
- package/dist/primitives/badge.js +2 -0
- package/dist/primitives/disclosure.js +14 -2
- package/dist/primitives/empty-art.d.ts +12 -0
- package/dist/primitives/empty-art.js +11 -0
- package/dist/primitives/mermaid-renderer.d.ts +2 -0
- package/dist/primitives/mermaid-renderer.js +21 -15
- package/dist/primitives/resizable.js +6 -1
- package/dist/primitives/resize-seam.d.ts +11 -0
- package/dist/primitives/resize-seam.js +12 -0
- package/dist/primitives/sidebar-panel.js +4 -7
- package/dist/primitives/tabs.d.ts +14 -1
- package/dist/primitives/tabs.js +1 -1
- package/dist/providers/ui-provider.d.ts +9 -0
- package/dist/session/composer/ComposerAboveCard.d.ts +1 -1
- package/dist/session/composer/ComposerAboveCard.js +2 -2
- package/dist/session/composer/ComposerCard.d.ts +1 -1
- package/dist/session/composer/ComposerCard.js +3 -3
- package/dist/session/composer/agent-selector.d.ts +13 -1
- package/dist/session/composer/agent-selector.js +25 -5
- package/dist/session/composer/composer-agent-access.d.ts +15 -0
- package/dist/session/composer/composer-agent-access.js +27 -0
- package/dist/session/composer/composer-chat-input.d.ts +8 -2
- package/dist/session/composer/composer-chat-input.js +8 -6
- package/dist/session/composer/composer-logic.d.ts +16 -0
- package/dist/session/composer/composer-logic.js +12 -0
- package/dist/session/composer/composer-underbar.d.ts +3 -1
- package/dist/session/composer/composer-underbar.js +4 -3
- package/dist/session/composer/composer.d.ts +15 -1
- package/dist/session/composer/composer.js +19 -1
- package/dist/session/composer/draft/composer-draft.d.ts +6 -2
- package/dist/session/composer/draft/composer-draft.js +5 -1
- package/dist/session/composer/reasoning-effort-selector.js +1 -1
- package/dist/session/models/chatgpt-connection-button.d.ts +11 -0
- package/dist/session/models/chatgpt-connection-button.js +54 -0
- package/dist/session/models/model-selector.js +5 -2
- package/dist/session/models/use-model-connection-gate.d.ts +5 -5
- package/dist/session/models/use-model-connection-gate.js +5 -5
- package/dist/session/outcomes/jump-to-outcome.d.ts +10 -0
- package/dist/session/outcomes/jump-to-outcome.js +11 -0
- package/dist/session/outcomes/session-outcomes-bridge.d.ts +14 -0
- package/dist/session/outcomes/session-outcomes-bridge.js +12 -0
- package/dist/session/outcomes/session-outcomes-provider.d.ts +3 -1
- package/dist/session/outcomes/session-outcomes-provider.js +33 -3
- package/dist/session/panel/easy/app-preview.d.ts +10 -0
- package/dist/session/panel/easy/app-preview.js +31 -12
- package/dist/session/panel/easy/change-requests-card.d.ts +7 -0
- package/dist/session/panel/easy/change-requests-card.js +17 -0
- package/dist/session/panel/easy/easy-panel-logic.js +7 -1
- package/dist/session/panel/easy/easy-panel.js +5 -2
- package/dist/session/panel/easy/file-preview.js +1 -1
- package/dist/session/panel/easy/outputs-card.d.ts +2 -1
- package/dist/session/panel/easy/outputs-card.js +3 -2
- package/dist/session/panel/mobile-tool-drawer.js +7 -1
- package/dist/session/panel/session-audit-panel.js +9 -2
- package/dist/session/panel/session-detail-panel.js +9 -3
- package/dist/session/panel/session-files-explorer.d.ts +9 -0
- package/dist/session/panel/session-files-explorer.js +12 -3
- package/dist/session/panel/session-panel-provider.d.ts +15 -1
- package/dist/session/panel/session-panel-provider.js +32 -7
- package/dist/session/panel/shared/derive-panels.d.ts +8 -1
- package/dist/session/panel/shared/derive-panels.js +12 -2
- package/dist/session/panel/shared/output-priority.js +2 -0
- package/dist/session/participants/session-participants.d.ts +5 -1
- package/dist/session/participants/session-participants.js +9 -2
- package/dist/session/prompts/approval-request.d.ts +5 -0
- package/dist/session/prompts/approval-request.js +7 -1
- package/dist/session/prompts/session-approval-review.d.ts +9 -0
- package/dist/session/prompts/session-approval-review.js +18 -0
- package/dist/session/status/session-error-banner.js +2 -49
- package/dist/session/status/session-starting-loader.d.ts +14 -2
- package/dist/session/status/session-starting-loader.js +16 -4
- package/dist/session/thread/after-first-prompt.d.ts +7 -0
- package/dist/session/thread/after-first-prompt.js +8 -0
- package/dist/session/thread/detect-command.d.ts +12 -0
- package/dist/session/thread/detect-command.js +20 -0
- package/dist/session/thread/session-chat.d.ts +3 -1
- package/dist/session/thread/session-chat.js +377 -252
- package/dist/session/thread/session-thread.d.ts +3 -1
- package/dist/session/thread/session-thread.js +9 -2
- package/dist/session/thread/thread-boot-rows.d.ts +36 -0
- package/dist/session/thread/thread-boot-rows.js +89 -0
- package/dist/session/thread/transcript-rows.d.ts +31 -0
- package/dist/session/thread/transcript-rows.js +3 -0
- package/dist/session/thread/transcript.d.ts +0 -9
- package/dist/session/thread/transcript.js +104 -19
- package/dist/session/tool/shared/infrastructure-contexts.d.ts +28 -0
- package/dist/session/tool/shared/infrastructure-contexts.js +31 -3
- package/dist/session/tool/tool-part-renderer.d.ts +5 -4
- package/dist/session/tool/tool-part-renderer.js +8 -3
- package/dist/session/tool/tools/bash-tool.js +7 -6
- package/dist/session/tool/tools/channel-send-card.d.ts +1 -2
- package/dist/session/tool/tools/channel-send.d.ts +2 -1
- package/dist/session/tool/tools/codemode-tool.js +1 -1
- package/dist/session/tool/tools/connector-tools.js +1 -1
- package/dist/session/tool/tools/image-gen-tool.d.ts +1 -1
- package/dist/session/tool/tools/image-gen-tool.js +240 -53
- package/dist/session/tool/tools/show-tool.js +19 -8
- package/dist/session/turn/channel-brand.d.ts +8 -3
- package/dist/session/turn/channel-brand.js +20 -4
- package/dist/session/turn/message-author.d.ts +8 -0
- package/dist/session/turn/message-author.js +24 -0
- package/dist/session/turn/message-row.d.ts +52 -0
- package/dist/session/turn/message-row.js +44 -0
- package/dist/session/turn/plan-anchor.d.ts +1 -1
- package/dist/session/turn/plan-anchor.js +1 -1
- package/dist/session/turn/user-message.d.ts +7 -1
- package/dist/session/turn/user-message.js +21 -7
- package/dist/styles.css +1 -1
- package/dist/workspace/home/access-requests-bell.d.ts +9 -2
- package/dist/workspace/home/access-requests-bell.js +20 -6
- package/dist/workspace/home/first-chat.d.ts +8 -21
- package/dist/workspace/home/first-chat.js +22 -72
- package/dist/workspace/index.d.ts +6 -0
- package/dist/workspace/index.js +6 -0
- package/dist/workspace/layout/project-home.d.ts +14 -2
- package/dist/workspace/layout/project-home.js +60 -21
- package/dist/workspace/layout/use-project-home-send.d.ts +9 -1
- package/dist/workspace/layout/use-project-home-send.js +82 -3
- package/dist/workspace/memory/body-doc.d.ts +17 -0
- package/dist/workspace/memory/body-doc.js +208 -0
- package/dist/workspace/memory/body-extensions.d.ts +38 -0
- package/dist/workspace/memory/body-extensions.js +103 -0
- package/dist/workspace/memory/company-memory-page.d.ts +8 -0
- package/dist/workspace/memory/company-memory-page.js +16 -0
- package/dist/workspace/memory/memory-all.d.ts +20 -0
- package/dist/workspace/memory/memory-all.js +27 -0
- package/dist/workspace/memory/memory-body.d.ts +19 -0
- package/dist/workspace/memory/memory-body.js +139 -0
- package/dist/workspace/memory/memory-empty.d.ts +13 -0
- package/dist/workspace/memory/memory-empty.js +28 -0
- package/dist/workspace/memory/memory-history.d.ts +27 -0
- package/dist/workspace/memory/memory-history.js +108 -0
- package/dist/workspace/memory/memory-labels.d.ts +16 -0
- package/dist/workspace/memory/memory-labels.js +47 -0
- package/dist/workspace/memory/memory-page-list.d.ts +34 -0
- package/dist/workspace/memory/memory-page-list.js +156 -0
- package/dist/workspace/memory/memory-reader.d.ts +58 -0
- package/dist/workspace/memory/memory-reader.js +123 -0
- package/dist/workspace/memory/memory-view.d.ts +21 -0
- package/dist/workspace/memory/memory-view.js +124 -0
- package/dist/workspace/memory/remember-popover.d.ts +19 -0
- package/dist/workspace/memory/remember-popover.js +61 -0
- package/dist/workspace/memory/remember-this.d.ts +12 -0
- package/dist/workspace/memory/remember-this.js +89 -0
- package/dist/workspace/memory/source-mark.d.ts +18 -0
- package/dist/workspace/memory/source-mark.js +79 -0
- package/dist/workspace/memory/used-memory-chip.d.ts +14 -0
- package/dist/workspace/memory/used-memory-chip.js +61 -0
- package/dist/workspace/new/advanced-fields.d.ts +2 -1
- package/dist/workspace/new/advanced-fields.js +2 -2
- package/dist/workspace/new/source-param.d.ts +1 -1
- package/dist/workspace/new/source-param.js +3 -1
- package/dist/workspace/new/use-create-workspace.d.ts +8 -10
- package/dist/workspace/new/use-create-workspace.js +3 -3
- package/dist/workspace/projects/onboarding/app-logo.d.ts +7 -2
- package/dist/workspace/projects/onboarding/app-logo.js +6 -13
- package/dist/workspace/projects/policies-panel.js +5 -3
- package/dist/workspace/review/review-actions.d.ts +4 -2
- package/dist/workspace/review/review-actions.js +8 -2
- package/dist/workspace/review/review-center.js +11 -7
- package/dist/workspace/review/review-detail.d.ts +10 -0
- package/dist/workspace/review/review-detail.js +101 -13
- package/dist/workspace/saved-session-skeleton.d.ts +2 -2
- package/dist/workspace/saved-session-skeleton.js +3 -3
- package/dist/workspace/session-workspace.js +15 -13
- package/dist/workspace/sessions/project-sessions-view.js +3 -2
- package/dist/workspace/sessions/sessions-toolbar.d.ts +3 -1
- package/dist/workspace/sessions/sessions-toolbar.js +2 -2
- package/dist/workspace/sidebar/footer/project-apps-nav.d.ts +5 -0
- package/dist/workspace/sidebar/footer/project-apps-nav.js +41 -2
- package/dist/workspace/sidebar/footer/project-artifacts-nav.d.ts +6 -0
- package/dist/workspace/sidebar/footer/project-artifacts-nav.js +22 -0
- package/dist/workspace/sidebar/footer/project-manifest-upgrade-alert.js +13 -13
- package/dist/workspace/sidebar/footer/project-memory-nav.d.ts +7 -0
- package/dist/workspace/sidebar/footer/project-memory-nav.js +19 -0
- package/dist/workspace/sidebar/nav-row-meta.js +14 -2
- package/dist/workspace/sidebar/project-nav-items.js +3 -0
- package/dist/workspace/sidebar/project-session-list.js +68 -56
- package/dist/workspace/sidebar/project-sidebar.js +9 -2
- package/dist/workspace/sidebar/project-spaces-nav.d.ts +8 -0
- package/dist/workspace/sidebar/project-spaces-nav.js +69 -0
- package/dist/workspace/sidebar/session-group-order.d.ts +9 -0
- package/dist/workspace/sidebar/session-group-order.js +25 -0
- package/dist/workspace/sidebar/session-group-sections.d.ts +62 -0
- package/dist/workspace/sidebar/session-group-sections.js +267 -0
- package/dist/workspace/sidebar/session-list-chrome.d.ts +28 -0
- package/dist/workspace/sidebar/session-list-chrome.js +50 -0
- package/dist/workspace/spaces/channel-glyph.d.ts +5 -0
- package/dist/workspace/spaces/channel-glyph.js +6 -0
- package/dist/workspace/spaces/channel-setup.d.ts +16 -0
- package/dist/workspace/spaces/channel-setup.js +105 -0
- package/dist/workspace/spaces/channels-onboarding.d.ts +13 -0
- package/dist/workspace/spaces/channels-onboarding.js +37 -0
- package/dist/workspace/spaces/create-channel-dialog.d.ts +16 -0
- package/dist/workspace/spaces/create-channel-dialog.js +158 -0
- package/dist/workspace/spaces/private-channels-not-in.d.ts +9 -0
- package/dist/workspace/spaces/private-channels-not-in.js +69 -0
- package/dist/workspace/spaces/space-agents.d.ts +10 -0
- package/dist/workspace/spaces/space-agents.js +10 -0
- package/dist/workspace/spaces/space-details-dialog.d.ts +20 -0
- package/dist/workspace/spaces/space-details-dialog.js +176 -0
- package/dist/workspace/spaces/space-link-label.d.ts +49 -0
- package/dist/workspace/spaces/space-link-label.js +73 -0
- package/dist/workspace/spaces/space-links.d.ts +19 -0
- package/dist/workspace/spaces/space-links.js +230 -0
- package/dist/workspace/spaces/space-members.d.ts +46 -0
- package/dist/workspace/spaces/space-members.js +182 -0
- package/dist/workspace/spaces/space-roster.d.ts +15 -0
- package/dist/workspace/spaces/space-roster.js +44 -0
- package/dist/workspace/spaces/space-threads-tab.d.ts +56 -0
- package/dist/workspace/spaces/space-threads-tab.js +156 -0
- package/dist/workspace/spaces/space-timeline-view.d.ts +254 -0
- package/dist/workspace/spaces/space-timeline-view.js +235 -0
- package/dist/workspace/spaces/space-timeline.d.ts +106 -0
- package/dist/workspace/spaces/space-timeline.js +183 -0
- package/dist/workspace/spaces/space-triggers.d.ts +13 -0
- package/dist/workspace/spaces/space-triggers.js +78 -0
- package/dist/workspace/spaces/space-view.d.ts +37 -0
- package/dist/workspace/spaces/space-view.js +436 -0
- package/package.json +27 -36
- package/skills/kortix-ui/SKILL.md +3 -3
- package/skills/kortix-ui/references/custom-dashboard.md +3 -3
- package/skills/kortix-ui/references/modules.md +28 -4
- package/skills/kortix-ui/references/theming.md +1 -1
- package/dist/customize/connectors/catalog/merge-search.d.ts +0 -10
- package/dist/customize/connectors/catalog/merge-search.js +0 -26
- package/dist/customize/connectors/detail/find-easy-connect-app.d.ts +0 -29
- package/dist/customize/connectors/detail/find-easy-connect-app.js +0 -22
- package/dist/customize/migrate-to-v2/use-migrate-to-v2.d.ts +0 -9
- package/dist/customize/migrate-to-v2/use-migrate-to-v2.js +0 -24
- package/dist/customize/sections/connector-connection-header.d.ts +0 -36
- package/dist/customize/sections/connector-connection-header.js +0 -33
- package/dist/customize/sections/connector-connection-modal.d.ts +0 -34
- package/dist/customize/sections/connector-connection-modal.js +0 -72
- package/dist/customize/sections/discover-catalogue-card.d.ts +0 -19
- package/dist/customize/sections/discover-catalogue-card.js +0 -26
- package/dist/customize/sections/discover-catalogue-detail.d.ts +0 -15
- package/dist/customize/sections/discover-catalogue-detail.js +0 -24
- package/dist/customize/sections/discover-catalogue.d.ts +0 -17
- package/dist/customize/sections/discover-catalogue.js +0 -132
- package/dist/customize/sections/llm-provider/provider-access-menu.d.ts +0 -10
- package/dist/customize/sections/llm-provider/provider-access-menu.js +0 -23
- package/dist/files/project/components/drive-empty-art.d.ts +0 -2
- package/dist/files/project/components/drive-empty-art.js +0 -5
- package/dist/internal/hooks/use-media-query.d.ts +0 -2
- package/dist/internal/share/public-share-link-button.d.ts +0 -14
- package/dist/internal/share/public-share-link-button.js +0 -17
- package/dist/markdown/setup-links/app-credentials-form.d.ts +0 -12
- package/dist/markdown/setup-links/app-credentials-form.js +0 -115
- /package/dist/{internal/hooks → hooks}/use-media-query.js +0 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { ChatsCircleIcon, FunnelSimpleIcon, MagnifyingGlassIcon, XIcon } from '@phosphor-icons/react';
|
|
4
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
5
|
+
import { useTranslations } from '../../i18n/index.js';
|
|
6
|
+
import { Close } from '../../icons/close.js';
|
|
7
|
+
import { AgentMark } from '../../internal/components/agent-mark.js';
|
|
8
|
+
import { useSessionNeedsYouCounts } from '../../internal/hooks/use-review-session-summary.js';
|
|
9
|
+
import { useDebounce } from '../../internal/hooks/use-debounced-value.js';
|
|
10
|
+
import { Button } from '../../primitives/button.js';
|
|
11
|
+
import { DropdownMenu, DropdownMenuContent, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, } from '../../primitives/dropdown-menu.js';
|
|
12
|
+
import { EmptyArt } from '../../primitives/empty-art.js';
|
|
13
|
+
import { EmptyState } from '../../primitives/empty-state.js';
|
|
14
|
+
import { InputGroupSearch, InputGroupSearchIcon, InputGroupSearchInput, } from '../../primitives/input-group.js';
|
|
15
|
+
import { UserAvatar } from '../../primitives/user-avatar.js';
|
|
16
|
+
import { useUiViewerId } from '../../providers/ui-provider.js';
|
|
17
|
+
import { participantLabel } from '../../session/participants/session-participants.js';
|
|
18
|
+
import { SessionStatusMark } from '../sidebar/session-status-mark.js';
|
|
19
|
+
import { agentLabel, spaceRoster, THREAD_ACTIVITIES, THREAD_STATUSES, threadActivitySince, threadFiltersFromParams, threadStatus, } from './space-timeline.js';
|
|
20
|
+
import { SpaceThreadList, useSpaceThreads } from './space-timeline-view.js';
|
|
21
|
+
/** Milliseconds between the last keystroke and the server search. */
|
|
22
|
+
const SEARCH_DEBOUNCE_MS = 250;
|
|
23
|
+
/** Shorter queries do not search: one letter matches nearly every thread. */
|
|
24
|
+
const SEARCH_MIN_CHARS = 2;
|
|
25
|
+
/** The URL keys of the search and the filters. */
|
|
26
|
+
const FILTER_PARAMS = ['q', 'status', 'by', 'agent', 'active'];
|
|
27
|
+
/** The radio value of a facet's "Any" row (Radix needs a non-empty value). */
|
|
28
|
+
const ANY = 'any';
|
|
29
|
+
/** The session list's mark for each Status value, so a row and its filter look the same. */
|
|
30
|
+
const STATUS_MARK = {
|
|
31
|
+
working: 'running',
|
|
32
|
+
'needs-you': 'needs-you',
|
|
33
|
+
failed: 'failed',
|
|
34
|
+
done: 'done',
|
|
35
|
+
};
|
|
36
|
+
const STATUS_KEY = { working: 'working', 'needs-you': 'needsYou', failed: 'failed', done: 'done' };
|
|
37
|
+
/**
|
|
38
|
+
* The Threads tab of a channel or DM: a search over titles and first prompts,
|
|
39
|
+
* one Filter menu (Status, Started by, Agent, Activity), the active filters
|
|
40
|
+
* as removable tokens, and the rows. Search, person, agent and activity run
|
|
41
|
+
* on the server; Status reads the loaded rows, as on the Sessions page. The
|
|
42
|
+
* URL holds every value (`?q=&status=&by=&agent=&active=`).
|
|
43
|
+
*/
|
|
44
|
+
export function SpaceThreadsTab({ projectId, space, threads, selectedId, onOpenThread, params, setParams, }) {
|
|
45
|
+
const t = useTranslations('spaces.view');
|
|
46
|
+
const tf = useTranslations('spaces.view.threadFilter');
|
|
47
|
+
const viewerId = useUiViewerId();
|
|
48
|
+
const filters = threadFiltersFromParams(params, space.kind);
|
|
49
|
+
const setParam = (key, value) => setParams((next) => (value ? next.set(key, value) : next.delete(key)));
|
|
50
|
+
const updatedAfter = useMemo(() => (filters.active ? threadActivitySince(filters.active, new Date()) : undefined), [filters.active]);
|
|
51
|
+
const filtered = useProjectThreads(projectId, space, filters, updatedAfter);
|
|
52
|
+
const needsYou = useSessionNeedsYouCounts(projectId);
|
|
53
|
+
const rows = useMemo(() => filters.status
|
|
54
|
+
? filtered.sessions.filter((session) => threadStatus(session, needsYou[session.session_id]) === filters.status)
|
|
55
|
+
: filtered.sessions, [filtered.sessions, filters.status, needsYou]);
|
|
56
|
+
const roster = useMemo(() => spaceRoster(threads.sessions, space.dm_agent_name), [threads.sessions, space.dm_agent_name]);
|
|
57
|
+
const people = roster.people.filter((person) => person.id !== viewerId);
|
|
58
|
+
const personName = (id) => {
|
|
59
|
+
const person = roster.people.find((candidate) => candidate.id === id);
|
|
60
|
+
const row = filtered.sessions.find((session) => session.created_by === id);
|
|
61
|
+
return (participantLabel({ name: person?.name ?? row?.owner_name ?? null, email: person?.email ?? row?.owner_email ?? null }) ||
|
|
62
|
+
t('authorFallback'));
|
|
63
|
+
};
|
|
64
|
+
const statusLabel = (status) => tf(`statusValue.${STATUS_KEY[status]}`);
|
|
65
|
+
const activityLabel = (active) => tf(`activityValue.${active}`);
|
|
66
|
+
const byLabel = (by) => (by === 'me' || by === viewerId ? tf('me') : personName(by));
|
|
67
|
+
const tokens = [];
|
|
68
|
+
if (filters.status) {
|
|
69
|
+
tokens.push({
|
|
70
|
+
key: 'status',
|
|
71
|
+
facet: tf('status'),
|
|
72
|
+
label: statusLabel(filters.status),
|
|
73
|
+
icon: _jsx(SessionStatusMark, { status: STATUS_MARK[filters.status] }),
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
if (filters.by)
|
|
77
|
+
tokens.push({ key: 'by', facet: tf('startedBy'), label: byLabel(filters.by) });
|
|
78
|
+
if (filters.agent) {
|
|
79
|
+
tokens.push({
|
|
80
|
+
key: 'agent',
|
|
81
|
+
facet: tf('agent'),
|
|
82
|
+
label: agentLabel(filters.agent),
|
|
83
|
+
icon: _jsx(AgentMark, { slug: filters.agent, size: 14 }),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
if (filters.active)
|
|
87
|
+
tokens.push({ key: 'active', facet: tf('activity'), label: activityLabel(filters.active) });
|
|
88
|
+
const filtering = tokens.length > 0 || filters.q.length >= SEARCH_MIN_CHARS;
|
|
89
|
+
const clearAll = () => setParams((next) => FILTER_PARAMS.forEach((key) => next.delete(key)));
|
|
90
|
+
return (_jsxs("div", { className: "flex min-h-0 flex-1 flex-col", children: [_jsxs("div", { className: "flex shrink-0 flex-wrap items-center gap-2 px-5 pt-3 pb-1", children: [_jsx(FilterSearch, { value: filters.q, placeholder: tf('search'), minChars: SEARCH_MIN_CHARS, onSearch: (q) => setParam('q', q || null) }), _jsx(ThreadFilterMenu, { kind: space.kind, filters: filters, people: people, agents: roster.agents, statusLabel: statusLabel, activityLabel: activityLabel, byLabel: byLabel, onChange: setParam }), _jsx(FilterTokens, { tokens: tokens, onRemove: (key) => setParam(key, null), onClear: clearAll })] }), _jsx("div", { className: "min-h-0 flex-1 overflow-y-auto", children: _jsx(SpaceThreadList, { projectId: projectId, threads: filtered, sessions: rows, selectedId: selectedId, onOpenThread: onOpenThread, empty: filtering ? (_jsx(EmptyState, { className: "min-h-full", media: _jsx(EmptyArt, { icon: MagnifyingGlassIcon }), title: tf('noMatch'), description: tf('noMatchHint'), action: _jsxs(Button, { variant: "outline", size: "sm", className: "gap-1.5", onClick: clearAll, children: [_jsx(XIcon, { className: "size-3.5 shrink-0" }), tf('clearFilters')] }) })) : (_jsx(EmptyState, { className: "min-h-full", media: _jsx(EmptyArt, { icon: ChatsCircleIcon }), title: t('threadsEmptyTitle'), description: t('threadsEmpty') })) }) })] }));
|
|
91
|
+
}
|
|
92
|
+
/** The space's threads under the server-side filters. No filter: the Chat tab's cache entry. */
|
|
93
|
+
function useProjectThreads(projectId, space, filters, updatedAfter) {
|
|
94
|
+
const by = filters.by;
|
|
95
|
+
return useSpaceThreads(projectId, space.space_id, {
|
|
96
|
+
q: filters.q.length >= SEARCH_MIN_CHARS ? filters.q : undefined,
|
|
97
|
+
startedBy: by === 'me' ? 'me' : undefined,
|
|
98
|
+
createdBy: by && by !== 'me' ? by : undefined,
|
|
99
|
+
agent: filters.agent ?? undefined,
|
|
100
|
+
updatedAfter,
|
|
101
|
+
keepPreviousData: true,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
/** One quiet menu: a submenu per facet, each a single choice with "Any" first. A DM has no person or agent facet. */
|
|
105
|
+
function ThreadFilterMenu({ kind, filters, people, agents, statusLabel, activityLabel, byLabel, onChange, }) {
|
|
106
|
+
const tf = useTranslations('spaces.view.threadFilter');
|
|
107
|
+
const pick = (key) => (value) => onChange(key, value === ANY ? null : value);
|
|
108
|
+
return (_jsxs(FilterMenu, { children: [_jsx(Facet, { label: tf('status'), value: filters.status ? statusLabel(filters.status) : tf('any'), children: _jsxs(DropdownMenuRadioGroup, { value: filters.status ?? ANY, onValueChange: pick('status'), children: [_jsx(DropdownMenuRadioItem, { value: ANY, children: tf('any') }), THREAD_STATUSES.map((status) => (_jsxs(DropdownMenuRadioItem, { value: status, children: [_jsx(SessionStatusMark, { status: STATUS_MARK[status] }), statusLabel(status)] }, status)))] }) }), kind === 'channel' ? (_jsx(Facet, { label: tf('startedBy'), value: filters.by ? byLabel(filters.by) : tf('anyone'), wide: true, children: _jsxs(DropdownMenuRadioGroup, { value: filters.by ?? ANY, onValueChange: pick('by'), children: [_jsx(DropdownMenuRadioItem, { value: ANY, children: tf('anyone') }), _jsx(DropdownMenuRadioItem, { value: "me", children: tf('me') }), people.length > 0 ? _jsx(DropdownMenuSeparator, {}) : null, people.map((person) => {
|
|
109
|
+
const name = participantLabel(person);
|
|
110
|
+
return (_jsxs(DropdownMenuRadioItem, { value: person.id, children: [_jsx(UserAvatar, { size: "xs", name: name, email: person.email ?? '', avatarUrl: person.avatarUrl }), _jsx("span", { className: "min-w-0 truncate", children: name })] }, person.id));
|
|
111
|
+
})] }) })) : null, kind === 'channel' && (agents.length > 0 || filters.agent) ? (_jsx(Facet, { label: tf('agent'), value: filters.agent ? agentLabel(filters.agent) : tf('anyAgent'), wide: true, children: _jsxs(DropdownMenuRadioGroup, { value: filters.agent ?? ANY, onValueChange: pick('agent'), children: [_jsx(DropdownMenuRadioItem, { value: ANY, children: tf('anyAgent') }), agents.map((agent) => (_jsxs(DropdownMenuRadioItem, { value: agent, children: [_jsx(AgentMark, { slug: agent, size: 14 }), _jsx("span", { className: "min-w-0 truncate", children: agentLabel(agent) })] }, agent)))] }) })) : null, _jsx(Facet, { label: tf('activity'), value: filters.active ? activityLabel(filters.active) : tf('anyTime'), children: _jsxs(DropdownMenuRadioGroup, { value: filters.active ?? ANY, onValueChange: pick('active'), children: [_jsx(DropdownMenuRadioItem, { value: ANY, children: tf('anyTime') }), THREAD_ACTIVITIES.map((active) => (_jsx(DropdownMenuRadioItem, { value: active, children: activityLabel(active) }, active)))] }) })] }));
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* The search field of a channel tab's toolbar (Threads, Links). The text is
|
|
115
|
+
* local while typing; `onSearch` gets the settled query ('' below `minChars`),
|
|
116
|
+
* and Esc clears it. A new `value` (Clear, the back button) replaces the text.
|
|
117
|
+
*/
|
|
118
|
+
export function FilterSearch({ value, placeholder, minChars = 1, onSearch, }) {
|
|
119
|
+
const [text, setText] = useState(value);
|
|
120
|
+
const [seen, setSeen] = useState(value);
|
|
121
|
+
if (value !== seen) {
|
|
122
|
+
setSeen(value);
|
|
123
|
+
setText(value);
|
|
124
|
+
}
|
|
125
|
+
const debounced = useDebounce(text.trim(), SEARCH_DEBOUNCE_MS);
|
|
126
|
+
useEffect(() => {
|
|
127
|
+
const q = debounced.length >= minChars ? debounced : '';
|
|
128
|
+
if (q !== value)
|
|
129
|
+
onSearch(q);
|
|
130
|
+
// Only a settled keystroke searches; a new `value` resets `text` above.
|
|
131
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
132
|
+
}, [debounced]);
|
|
133
|
+
return (_jsxs(InputGroupSearch, { className: "max-w-64 min-w-40 flex-1", children: [_jsx(InputGroupSearchIcon, { children: _jsx(MagnifyingGlassIcon, {}) }), _jsx(InputGroupSearchInput, { size: "xs", type: "search", placeholder: placeholder, "aria-label": placeholder, value: text, onChange: (event) => setText(event.target.value), onKeyDown: (event) => {
|
|
134
|
+
if (event.key !== 'Escape' || !text)
|
|
135
|
+
return;
|
|
136
|
+
event.stopPropagation();
|
|
137
|
+
setText('');
|
|
138
|
+
onSearch('');
|
|
139
|
+
} })] }));
|
|
140
|
+
}
|
|
141
|
+
/** The quiet "Filter" button and its menu; the children are `Facet` rows. */
|
|
142
|
+
export function FilterMenu({ children }) {
|
|
143
|
+
const tf = useTranslations('spaces.view.threadFilter');
|
|
144
|
+
return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(Button, { variant: "ghost", size: "sm", className: "text-muted-foreground hover:text-foreground", children: [_jsx(FunnelSimpleIcon, { className: "size-4 shrink-0" }), tf('filter')] }) }), _jsx(DropdownMenuContent, { align: "start", className: "w-56 p-1", children: children })] }));
|
|
145
|
+
}
|
|
146
|
+
/** The active filters as removable tokens, then Clear. */
|
|
147
|
+
export function FilterTokens({ tokens, onRemove, onClear, }) {
|
|
148
|
+
const tf = useTranslations('spaces.view.threadFilter');
|
|
149
|
+
if (tokens.length === 0)
|
|
150
|
+
return null;
|
|
151
|
+
return (_jsxs(_Fragment, { children: [tokens.map((token) => (_jsxs(Button, { variant: "secondary", size: "xs", "aria-label": tf('remove', { facet: token.facet, value: token.label }), onClick: () => onRemove(token.key), className: "max-w-48 gap-1.5", children: [token.icon, _jsx("span", { className: "min-w-0 truncate", children: token.label }), _jsx(Close, { className: "text-muted-foreground size-3.5 shrink-0" })] }, token.key))), _jsx(Button, { variant: "ghost", size: "xs", onClick: onClear, className: "text-muted-foreground", children: tf('clear') })] }));
|
|
152
|
+
}
|
|
153
|
+
/** A facet row: its name, its current value muted on the right, its choices in a submenu. */
|
|
154
|
+
export function Facet({ label, value, wide, children }) {
|
|
155
|
+
return (_jsxs(DropdownMenuSub, { children: [_jsxs(DropdownMenuSubTrigger, { children: [_jsx("span", { className: "min-w-0 flex-1 truncate", children: label }), _jsx("span", { className: "text-muted-foreground max-w-24 truncate text-xs", children: value })] }), _jsx(DropdownMenuSubContent, { className: wide ? 'max-h-80 w-56 overflow-y-auto p-1' : 'w-48 p-1', children: children })] }));
|
|
156
|
+
}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import type { ProjectSession, ProjectSpace } from '@kortix/sdk';
|
|
2
|
+
import { type UseProjectSessionsOptions } from '@kortix/sdk/react';
|
|
3
|
+
import { type ReactNode } from 'react';
|
|
4
|
+
/**
|
|
5
|
+
* The space's threads: top-level sessions only (`parent: 'root'`, a child
|
|
6
|
+
* thread is part of its parent). Polls page one every 5 s while an agent works
|
|
7
|
+
* so the "is working" line settles, else every 15 s so a member's new thread
|
|
8
|
+
* shows up. Active threads sort first, so page one holds them; older pages the
|
|
9
|
+
* viewer loaded are not re-read on each tick. `filters` narrow it on the
|
|
10
|
+
* server (the Threads tab); without them it is the Chat tab's list, one cache
|
|
11
|
+
* entry for both tabs.
|
|
12
|
+
*/
|
|
13
|
+
export declare function useSpaceThreads(projectId: string, spaceId: string | undefined, filters?: Pick<UseProjectSessionsOptions, 'q' | 'startedBy' | 'createdBy' | 'agent' | 'updatedAfter' | 'keepPreviousData'>): {
|
|
14
|
+
isScanning: boolean;
|
|
15
|
+
sessions: ProjectSession[];
|
|
16
|
+
data: import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>;
|
|
17
|
+
error: Error;
|
|
18
|
+
isError: true;
|
|
19
|
+
isPending: false;
|
|
20
|
+
isLoading: false;
|
|
21
|
+
isLoadingError: false;
|
|
22
|
+
isRefetchError: true;
|
|
23
|
+
isSuccess: false;
|
|
24
|
+
isPlaceholderData: false;
|
|
25
|
+
status: "error";
|
|
26
|
+
fetchNextPage: (options?: import("@tanstack/react-query").FetchNextPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
|
|
27
|
+
fetchPreviousPage: (options?: import("@tanstack/react-query").FetchPreviousPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
|
|
28
|
+
hasNextPage: boolean;
|
|
29
|
+
hasPreviousPage: boolean;
|
|
30
|
+
isFetchNextPageError: boolean;
|
|
31
|
+
isFetchingNextPage: boolean;
|
|
32
|
+
isFetchPreviousPageError: boolean;
|
|
33
|
+
isFetchingPreviousPage: boolean;
|
|
34
|
+
dataUpdatedAt: number;
|
|
35
|
+
errorUpdatedAt: number;
|
|
36
|
+
failureCount: number;
|
|
37
|
+
failureReason: Error | null;
|
|
38
|
+
errorUpdateCount: number;
|
|
39
|
+
isFetched: boolean;
|
|
40
|
+
isFetchedAfterMount: boolean;
|
|
41
|
+
isFetching: boolean;
|
|
42
|
+
isInitialLoading: boolean;
|
|
43
|
+
isPaused: boolean;
|
|
44
|
+
isRefetching: boolean;
|
|
45
|
+
isStale: boolean;
|
|
46
|
+
isEnabled: boolean;
|
|
47
|
+
refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
|
|
48
|
+
fetchStatus: import("@tanstack/react-query").FetchStatus;
|
|
49
|
+
} | {
|
|
50
|
+
isScanning: boolean;
|
|
51
|
+
sessions: ProjectSession[];
|
|
52
|
+
data: import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>;
|
|
53
|
+
error: null;
|
|
54
|
+
isError: false;
|
|
55
|
+
isPending: false;
|
|
56
|
+
isLoading: false;
|
|
57
|
+
isLoadingError: false;
|
|
58
|
+
isRefetchError: false;
|
|
59
|
+
isFetchNextPageError: false;
|
|
60
|
+
isFetchPreviousPageError: false;
|
|
61
|
+
isSuccess: true;
|
|
62
|
+
isPlaceholderData: false;
|
|
63
|
+
status: "success";
|
|
64
|
+
fetchNextPage: (options?: import("@tanstack/react-query").FetchNextPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
|
|
65
|
+
fetchPreviousPage: (options?: import("@tanstack/react-query").FetchPreviousPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
|
|
66
|
+
hasNextPage: boolean;
|
|
67
|
+
hasPreviousPage: boolean;
|
|
68
|
+
isFetchingNextPage: boolean;
|
|
69
|
+
isFetchingPreviousPage: boolean;
|
|
70
|
+
dataUpdatedAt: number;
|
|
71
|
+
errorUpdatedAt: number;
|
|
72
|
+
failureCount: number;
|
|
73
|
+
failureReason: Error | null;
|
|
74
|
+
errorUpdateCount: number;
|
|
75
|
+
isFetched: boolean;
|
|
76
|
+
isFetchedAfterMount: boolean;
|
|
77
|
+
isFetching: boolean;
|
|
78
|
+
isInitialLoading: boolean;
|
|
79
|
+
isPaused: boolean;
|
|
80
|
+
isRefetching: boolean;
|
|
81
|
+
isStale: boolean;
|
|
82
|
+
isEnabled: boolean;
|
|
83
|
+
refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
|
|
84
|
+
fetchStatus: import("@tanstack/react-query").FetchStatus;
|
|
85
|
+
} | {
|
|
86
|
+
isScanning: boolean;
|
|
87
|
+
sessions: ProjectSession[];
|
|
88
|
+
data: undefined;
|
|
89
|
+
error: Error;
|
|
90
|
+
isError: true;
|
|
91
|
+
isPending: false;
|
|
92
|
+
isLoading: false;
|
|
93
|
+
isLoadingError: true;
|
|
94
|
+
isRefetchError: false;
|
|
95
|
+
isFetchNextPageError: false;
|
|
96
|
+
isFetchPreviousPageError: false;
|
|
97
|
+
isSuccess: false;
|
|
98
|
+
isPlaceholderData: false;
|
|
99
|
+
status: "error";
|
|
100
|
+
fetchNextPage: (options?: import("@tanstack/react-query").FetchNextPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
|
|
101
|
+
fetchPreviousPage: (options?: import("@tanstack/react-query").FetchPreviousPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
|
|
102
|
+
hasNextPage: boolean;
|
|
103
|
+
hasPreviousPage: boolean;
|
|
104
|
+
isFetchingNextPage: boolean;
|
|
105
|
+
isFetchingPreviousPage: boolean;
|
|
106
|
+
dataUpdatedAt: number;
|
|
107
|
+
errorUpdatedAt: number;
|
|
108
|
+
failureCount: number;
|
|
109
|
+
failureReason: Error | null;
|
|
110
|
+
errorUpdateCount: number;
|
|
111
|
+
isFetched: boolean;
|
|
112
|
+
isFetchedAfterMount: boolean;
|
|
113
|
+
isFetching: boolean;
|
|
114
|
+
isInitialLoading: boolean;
|
|
115
|
+
isPaused: boolean;
|
|
116
|
+
isRefetching: boolean;
|
|
117
|
+
isStale: boolean;
|
|
118
|
+
isEnabled: boolean;
|
|
119
|
+
refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
|
|
120
|
+
fetchStatus: import("@tanstack/react-query").FetchStatus;
|
|
121
|
+
} | {
|
|
122
|
+
isScanning: boolean;
|
|
123
|
+
sessions: ProjectSession[];
|
|
124
|
+
data: undefined;
|
|
125
|
+
error: null;
|
|
126
|
+
isError: false;
|
|
127
|
+
isPending: true;
|
|
128
|
+
isLoading: true;
|
|
129
|
+
isLoadingError: false;
|
|
130
|
+
isRefetchError: false;
|
|
131
|
+
isFetchNextPageError: false;
|
|
132
|
+
isFetchPreviousPageError: false;
|
|
133
|
+
isSuccess: false;
|
|
134
|
+
isPlaceholderData: false;
|
|
135
|
+
status: "pending";
|
|
136
|
+
fetchNextPage: (options?: import("@tanstack/react-query").FetchNextPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
|
|
137
|
+
fetchPreviousPage: (options?: import("@tanstack/react-query").FetchPreviousPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
|
|
138
|
+
hasNextPage: boolean;
|
|
139
|
+
hasPreviousPage: boolean;
|
|
140
|
+
isFetchingNextPage: boolean;
|
|
141
|
+
isFetchingPreviousPage: boolean;
|
|
142
|
+
dataUpdatedAt: number;
|
|
143
|
+
errorUpdatedAt: number;
|
|
144
|
+
failureCount: number;
|
|
145
|
+
failureReason: Error | null;
|
|
146
|
+
errorUpdateCount: number;
|
|
147
|
+
isFetched: boolean;
|
|
148
|
+
isFetchedAfterMount: boolean;
|
|
149
|
+
isFetching: boolean;
|
|
150
|
+
isInitialLoading: boolean;
|
|
151
|
+
isPaused: boolean;
|
|
152
|
+
isRefetching: boolean;
|
|
153
|
+
isStale: boolean;
|
|
154
|
+
isEnabled: boolean;
|
|
155
|
+
refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
|
|
156
|
+
fetchStatus: import("@tanstack/react-query").FetchStatus;
|
|
157
|
+
} | {
|
|
158
|
+
isScanning: boolean;
|
|
159
|
+
sessions: ProjectSession[];
|
|
160
|
+
data: undefined;
|
|
161
|
+
error: null;
|
|
162
|
+
isError: false;
|
|
163
|
+
isPending: true;
|
|
164
|
+
isLoadingError: false;
|
|
165
|
+
isRefetchError: false;
|
|
166
|
+
isFetchNextPageError: false;
|
|
167
|
+
isFetchPreviousPageError: false;
|
|
168
|
+
isSuccess: false;
|
|
169
|
+
isPlaceholderData: false;
|
|
170
|
+
status: "pending";
|
|
171
|
+
fetchNextPage: (options?: import("@tanstack/react-query").FetchNextPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
|
|
172
|
+
fetchPreviousPage: (options?: import("@tanstack/react-query").FetchPreviousPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
|
|
173
|
+
hasNextPage: boolean;
|
|
174
|
+
hasPreviousPage: boolean;
|
|
175
|
+
isFetchingNextPage: boolean;
|
|
176
|
+
isFetchingPreviousPage: boolean;
|
|
177
|
+
dataUpdatedAt: number;
|
|
178
|
+
errorUpdatedAt: number;
|
|
179
|
+
failureCount: number;
|
|
180
|
+
failureReason: Error | null;
|
|
181
|
+
errorUpdateCount: number;
|
|
182
|
+
isFetched: boolean;
|
|
183
|
+
isFetchedAfterMount: boolean;
|
|
184
|
+
isFetching: boolean;
|
|
185
|
+
isLoading: boolean;
|
|
186
|
+
isInitialLoading: boolean;
|
|
187
|
+
isPaused: boolean;
|
|
188
|
+
isRefetching: boolean;
|
|
189
|
+
isStale: boolean;
|
|
190
|
+
isEnabled: boolean;
|
|
191
|
+
refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
|
|
192
|
+
fetchStatus: import("@tanstack/react-query").FetchStatus;
|
|
193
|
+
} | {
|
|
194
|
+
isScanning: boolean;
|
|
195
|
+
sessions: ProjectSession[];
|
|
196
|
+
data: import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>;
|
|
197
|
+
isError: false;
|
|
198
|
+
error: null;
|
|
199
|
+
isPending: false;
|
|
200
|
+
isLoading: false;
|
|
201
|
+
isLoadingError: false;
|
|
202
|
+
isRefetchError: false;
|
|
203
|
+
isSuccess: true;
|
|
204
|
+
isPlaceholderData: true;
|
|
205
|
+
isFetchNextPageError: false;
|
|
206
|
+
isFetchPreviousPageError: false;
|
|
207
|
+
status: "success";
|
|
208
|
+
fetchNextPage: (options?: import("@tanstack/react-query").FetchNextPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
|
|
209
|
+
fetchPreviousPage: (options?: import("@tanstack/react-query").FetchPreviousPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
|
|
210
|
+
hasNextPage: boolean;
|
|
211
|
+
hasPreviousPage: boolean;
|
|
212
|
+
isFetchingNextPage: boolean;
|
|
213
|
+
isFetchingPreviousPage: boolean;
|
|
214
|
+
dataUpdatedAt: number;
|
|
215
|
+
errorUpdatedAt: number;
|
|
216
|
+
failureCount: number;
|
|
217
|
+
failureReason: Error | null;
|
|
218
|
+
errorUpdateCount: number;
|
|
219
|
+
isFetched: boolean;
|
|
220
|
+
isFetchedAfterMount: boolean;
|
|
221
|
+
isFetching: boolean;
|
|
222
|
+
isInitialLoading: boolean;
|
|
223
|
+
isPaused: boolean;
|
|
224
|
+
isRefetching: boolean;
|
|
225
|
+
isStale: boolean;
|
|
226
|
+
isEnabled: boolean;
|
|
227
|
+
refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
|
|
228
|
+
fetchStatus: import("@tanstack/react-query").FetchStatus;
|
|
229
|
+
};
|
|
230
|
+
export type SpaceThreads = ReturnType<typeof useSpaceThreads>;
|
|
231
|
+
/**
|
|
232
|
+
* The Chat tab: the welcome block, then one row per thread, oldest at the top,
|
|
233
|
+
* grouped under day dividers. The column is reversed, so it opens scrolled to
|
|
234
|
+
* the newest thread and stays there as threads arrive.
|
|
235
|
+
*/
|
|
236
|
+
export declare function SpaceTimeline({ projectId, space, threads, selectedId, onOpenThread, }: {
|
|
237
|
+
projectId: string;
|
|
238
|
+
space: ProjectSpace;
|
|
239
|
+
threads: SpaceThreads;
|
|
240
|
+
selectedId: string | null;
|
|
241
|
+
onOpenThread: (sessionId: string) => void;
|
|
242
|
+
}): import("react").JSX.Element;
|
|
243
|
+
/**
|
|
244
|
+
* The Threads tab's rows, last activity first. `sessions` are the rows to
|
|
245
|
+
* show (the tab filters `threads`); `empty` is drawn when there are none.
|
|
246
|
+
*/
|
|
247
|
+
export declare function SpaceThreadList({ projectId, threads, sessions, empty, selectedId, onOpenThread, }: {
|
|
248
|
+
projectId: string;
|
|
249
|
+
threads: SpaceThreads;
|
|
250
|
+
sessions: readonly ProjectSession[];
|
|
251
|
+
empty: ReactNode;
|
|
252
|
+
selectedId: string | null;
|
|
253
|
+
onOpenThread: (sessionId: string) => void;
|
|
254
|
+
}): import("react").JSX.Element | null;
|