@kortix/ui 0.14.7 → 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 +64 -4
- 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/runtime-versions.d.ts +4 -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/access-dialog-share.js +4 -7
- package/dist/access/access/access-dialog.js +2 -1
- package/dist/access/access/principal-picker.d.ts +11 -0
- package/dist/access/access/principal-picker.js +9 -7
- 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-cover-card.d.ts +17 -0
- package/dist/customize/agents/agent-cover-card.js +13 -0
- 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 +8 -33
- 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/agents/agents-page.js +43 -49
- 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 -24
- package/dist/customize/migrate-to-v2/migration-prompt.js +34 -235
- 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 +63 -81
- 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/new-entity-menu.js +4 -1
- package/dist/customize/shared/use-customize-prefetch.d.ts +2 -3
- package/dist/customize/shared/use-customize-prefetch.js +9 -27
- package/dist/customize/skills/skills-page.js +4 -5
- 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/then-fields.js +1 -5
- 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 +9 -4
- 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 +906 -70
- package/dist/i18n/en.js +924 -88
- 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.d.ts +38 -0
- package/dist/internal/components/agent-mark.js +41 -0
- 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/pixel-mark.d.ts +33 -0
- package/dist/internal/lib/pixel-mark.js +152 -0
- package/dist/internal/lib/use-project-feature-flags.js +11 -11
- 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/genui/components/inline.d.ts +1 -1
- 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/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/entity-avatar.d.ts +4 -1
- package/dist/primitives/entity-avatar.js +4 -2
- 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/primitives/user-avatar.d.ts +3 -1
- package/dist/primitives/user-avatar.js +4 -2
- package/dist/providers/ui-provider.d.ts +10 -1
- 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 +19 -1
- package/dist/session/composer/agent-selector.js +42 -12
- 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/context-usage.d.ts +5 -0
- package/dist/session/composer/context-usage.js +6 -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/composer/token-progress.js +4 -4
- package/dist/session/header/export-transcript-modal.d.ts +3 -2
- package/dist/session/header/export-transcript-modal.js +6 -3
- 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.d.ts +3 -1
- package/dist/session/models/model-selector.js +7 -3
- 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/easy/plan-card.d.ts +2 -0
- package/dist/session/panel/easy/plan-card.js +2 -0
- 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/plan-surface.d.ts +1 -0
- package/dist/session/thread/plan-surface.js +1 -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-context-metrics.d.ts +15 -0
- package/dist/session/thread/session-context-metrics.js +10 -1
- package/dist/session/thread/session-context-modal.d.ts +4 -2
- package/dist/session/thread/session-context-modal.js +16 -9
- 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 +4 -9
- package/dist/session/thread/transcript.js +119 -21
- package/dist/session/thread/turn-share.d.ts +16 -0
- package/dist/session/thread/turn-share.js +162 -0
- 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/apply-patch-tool.d.ts +1 -0
- package/dist/session/tool/tools/apply-patch-tool.js +1 -0
- 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/pty-kill-tool.d.ts +1 -0
- package/dist/session/tool/tools/pty-kill-tool.js +1 -0
- package/dist/session/tool/tools/pty-read-tool.d.ts +2 -0
- package/dist/session/tool/tools/pty-read-tool.js +2 -0
- package/dist/session/tool/tools/pty-spawn-tool.d.ts +1 -0
- package/dist/session/tool/tools/pty-spawn-tool.js +1 -0
- package/dist/session/tool/tools/pty-write-tool.d.ts +1 -0
- package/dist/session/tool/tools/pty-write-tool.js +1 -0
- package/dist/session/tool/tools/show-tool.js +19 -8
- package/dist/session/tool/tools/todo-write-tool.d.ts +1 -0
- package/dist/session/tool/tools/todo-write-tool.js +1 -0
- 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-label.js +6 -2
- 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 +4 -1
- package/dist/session/turn/plan-anchor.js +4 -1
- package/dist/session/turn/plan-card.d.ts +7 -0
- package/dist/session/turn/plan-card.js +7 -0
- 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/terminal/session-terminal-connect-bar.js +2 -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-brief-hover-card.js +28 -1
- 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 +31 -32
- 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/agents/agent-nav.prototype.d.ts +0 -35
- package/dist/customize/agents/agent-nav.prototype.js +0 -95
- 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/{internal/hooks → hooks}/use-media-query.js +0 -0
|
@@ -33,6 +33,7 @@ import { hasWebPushSubscription } from '../notifications/web-push.js';
|
|
|
33
33
|
import { customToast, dismissToast, ToastCard, toastIcon, errorToast, infoToast, successToast, warningToast, } from '../../primitives/toast.js';
|
|
34
34
|
import { ClockIcon, GitPullRequestIcon } from '@phosphor-icons/react';
|
|
35
35
|
import { SessionFailedCard, SessionStackCard, } from '../notifications/session-toast-cards.js';
|
|
36
|
+
import { decodeSpaceSegment } from '../../lib/routes.js';
|
|
36
37
|
import { logger } from './logger.js';
|
|
37
38
|
import { softNavigate } from './navigation/router-bridge.js';
|
|
38
39
|
import { projectSessionHref } from './navigation/session-href.js';
|
|
@@ -43,6 +44,7 @@ import { openTabAndNavigate, useTabStore } from '../stores/tab-store.js';
|
|
|
43
44
|
import { useTurnAttentionStore } from '../stores/turn-attention-store.js';
|
|
44
45
|
import { useWebNotificationStore } from '../stores/web-notification-store.js';
|
|
45
46
|
import { listChangeRequests, normalizeAppPathname, } from '@kortix/sdk';
|
|
47
|
+
import { findCachedProjectSession, qk } from '@kortix/sdk/react';
|
|
46
48
|
// ============================================================================
|
|
47
49
|
// Server push preference
|
|
48
50
|
// ============================================================================
|
|
@@ -169,6 +171,32 @@ export function isTabHidden() {
|
|
|
169
171
|
return false;
|
|
170
172
|
return document.hidden || !document.hasFocus();
|
|
171
173
|
}
|
|
174
|
+
/**
|
|
175
|
+
* A finished turn opens in the thread panel of the channel or DM page on
|
|
176
|
+
* screen (`?thread=<id>`) only when it is one of that space's threads: the
|
|
177
|
+
* path's project is the session's, and the cached thread list of the space
|
|
178
|
+
* holds the session. Null otherwise, so any other session keeps its session
|
|
179
|
+
* page. Reads the query cache; never fetches.
|
|
180
|
+
*/
|
|
181
|
+
export function spacesThreadHref(location, session, cache) {
|
|
182
|
+
// An optional two-letter locale segment leads (`/de/projects/…`).
|
|
183
|
+
const match = /^(?:\/[a-z]{2})?\/projects\/([^/]+)\/(c|dm)\/([^/]+)\/?$/.exec(normalizeAppPathname(location.pathname));
|
|
184
|
+
if (!match || match[1] !== session.projectId)
|
|
185
|
+
return null;
|
|
186
|
+
const [, projectId, kind, segment] = match;
|
|
187
|
+
const name = decodeSpaceSegment(segment);
|
|
188
|
+
const space = cache
|
|
189
|
+
.getQueryData(qk.project.spaces(projectId))
|
|
190
|
+
?.find((candidate) => (kind === 'c' ? candidate.slug === name : candidate.dm_agent_name === name));
|
|
191
|
+
if (!space)
|
|
192
|
+
return null;
|
|
193
|
+
const thread = findCachedProjectSession(cache, projectId, (row) => row.session_id === session.sessionId && row.space_id === space.space_id);
|
|
194
|
+
if (!thread)
|
|
195
|
+
return null;
|
|
196
|
+
const params = new URLSearchParams(location.search);
|
|
197
|
+
params.set('thread', session.sessionId);
|
|
198
|
+
return `${location.pathname}?${params.toString()}`;
|
|
199
|
+
}
|
|
172
200
|
/**
|
|
173
201
|
* Check if the user is currently viewing a specific session.
|
|
174
202
|
* Checks the tab store (dashboard session tabs) and the current URL
|
|
@@ -199,6 +227,9 @@ export function isViewingSession(sessionId) {
|
|
|
199
227
|
const path = normalizeAppPathname(window.location.pathname);
|
|
200
228
|
if (path.includes(sessionId))
|
|
201
229
|
return true;
|
|
230
|
+
// A channel or DM page with the thread open in its panel.
|
|
231
|
+
if (new URLSearchParams(window.location.search).get('thread') === sessionId)
|
|
232
|
+
return true;
|
|
202
233
|
if (path.startsWith('/onboarding'))
|
|
203
234
|
return true;
|
|
204
235
|
}
|
|
@@ -392,7 +423,10 @@ const NOTIFICATION_TOAST_VARIANT = {
|
|
|
392
423
|
};
|
|
393
424
|
/** Open what the notification is about: its session, or its `href`. */
|
|
394
425
|
function openPayload(payload, forceNavigation) {
|
|
395
|
-
if (payload.
|
|
426
|
+
if (payload.threadHref) {
|
|
427
|
+
softNavigate(payload.threadHref);
|
|
428
|
+
}
|
|
429
|
+
else if (payload.sessionId) {
|
|
396
430
|
navigateToSession(payload.sessionId, payload.body, {
|
|
397
431
|
forceNavigation,
|
|
398
432
|
projectId: payload.projectId,
|
|
@@ -594,12 +628,22 @@ handoff) {
|
|
|
594
628
|
*/
|
|
595
629
|
export function notifyTaskCompleteFor({ sessionId, sessionTitle, projectId, notificationCenter }, tI18nComplete) {
|
|
596
630
|
noteTurnCompleteShown(sessionId);
|
|
597
|
-
|
|
598
|
-
|
|
631
|
+
// On a channel or DM page the turn is a thread: it says "thread" and opens
|
|
632
|
+
// in the page's panel. A default title ("New session - <time>") names nothing.
|
|
633
|
+
const cache = getSharedQueryClient();
|
|
634
|
+
const threadHref = typeof window === 'undefined' || !cache
|
|
635
|
+
? null
|
|
636
|
+
: spacesThreadHref(window.location, { sessionId, projectId }, cache);
|
|
637
|
+
const defaultTitle = !sessionTitle || /^New session(\s-\s|$)/.test(sessionTitle);
|
|
638
|
+
const name = threadHref && defaultTitle
|
|
639
|
+
? tI18nComplete.raw('untitledThread')
|
|
640
|
+
: sessionDisplayName(sessionTitle, sessionId);
|
|
641
|
+
const label = sessionTitle && !(threadHref && defaultTitle) ? `"${name.slice(0, 60)}"` : name;
|
|
599
642
|
const payload = {
|
|
600
643
|
type: 'completion',
|
|
601
644
|
entityLabel: name,
|
|
602
|
-
openSessionLabel: tI18nComplete.raw('textb205bb47f81a'),
|
|
645
|
+
openSessionLabel: threadHref ? tI18nComplete.raw('openThreadAction') : tI18nComplete.raw('textb205bb47f81a'),
|
|
646
|
+
threadHref: threadHref ?? undefined,
|
|
603
647
|
stackTitle: (count) => tI18nComplete('textc0589750863c', { count }),
|
|
604
648
|
title: tI18nComplete.raw('text107f1806b5d7'),
|
|
605
649
|
body: tI18nComplete('text27d628c8b427', { label }),
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** @internal Kortix apps only. No semver: it may change in any release. */
|
|
2
2
|
import type { InboxNotification } from '@kortix/sdk';
|
|
3
|
+
import { BellIcon } from '@phosphor-icons/react';
|
|
3
4
|
export interface NotificationPanelProps {
|
|
4
5
|
rows: readonly InboxNotification[];
|
|
5
6
|
state: 'loading' | 'error' | 'ready';
|
|
@@ -27,10 +28,12 @@ export declare function NotificationPanel({ rows, state, unreadCount, prompt, on
|
|
|
27
28
|
* sits. At full size it would tint the whole bell.
|
|
28
29
|
*/
|
|
29
30
|
export declare const BELL_REFLECTION_MASK = "radial-gradient(circle 12px at 100% 100%, #000 35%, transparent 100%)";
|
|
30
|
-
export declare function BellMark({ count, needsYou, surface, }: {
|
|
31
|
+
export declare function BellMark({ count, needsYou, surface, icon: Glyph, }: {
|
|
31
32
|
count: number;
|
|
32
33
|
needsYou: boolean;
|
|
33
34
|
surface?: 'bg-background' | 'bg-sidebar';
|
|
35
|
+
/** The glyph under the count: the bell, or another control's own mark. */
|
|
36
|
+
icon?: typeof BellIcon;
|
|
34
37
|
}): import("react").JSX.Element;
|
|
35
38
|
/**
|
|
36
39
|
* The bell and its popover. Renders nothing, and reads no inbox, while signed
|
|
@@ -79,11 +79,11 @@ export function NotificationPanel({ rows, state, unreadCount, prompt, onOpenRow,
|
|
|
79
79
|
* sits. At full size it would tint the whole bell.
|
|
80
80
|
*/
|
|
81
81
|
export const BELL_REFLECTION_MASK = 'radial-gradient(circle 12px at 100% 100%, #000 35%, transparent 100%)';
|
|
82
|
-
export function BellMark({ count, needsYou, surface = 'bg-background', }) {
|
|
82
|
+
export function BellMark({ count, needsYou, surface = 'bg-background', icon: Glyph = BellIcon, }) {
|
|
83
83
|
const tone = needsYou
|
|
84
84
|
? { reflection: 'text-kortix-yellow', disc: 'bg-kortix-yellow' }
|
|
85
85
|
: { reflection: 'text-kortix-blue', disc: 'bg-kortix-blue' };
|
|
86
|
-
return (_jsxs("span", { className: "relative size-4 shrink-0", children: [_jsx(
|
|
86
|
+
return (_jsxs("span", { className: "relative size-4 shrink-0", children: [_jsx(Glyph, { className: "size-4" }), count > 0 ? (_jsxs(_Fragment, { children: [_jsx(Glyph, { "aria-hidden": true, className: cn('absolute inset-0 size-4', tone.reflection), style: { maskImage: BELL_REFLECTION_MASK, WebkitMaskImage: BELL_REFLECTION_MASK } }), _jsx("span", { "aria-hidden": true, className: cn('absolute -right-2.5 -bottom-2 flex rounded-full p-px', surface), children: _jsx("span", { "data-slot": "bell-count", className: cn('text-background flex h-3.5 min-w-3.5 items-center justify-center rounded-full px-0.5 text-[9px] leading-none font-semibold tabular-nums', // audit:allow a numeral in a 13px disc on a 16px glyph; no type rung fits
|
|
87
87
|
tone.disc), children: badgeCount(count) }) })] })) : null] }));
|
|
88
88
|
}
|
|
89
89
|
/**
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
export interface SelectionBarAction {
|
|
3
3
|
id: string;
|
|
4
4
|
label: string;
|
|
5
|
-
|
|
5
|
+
/** `success` for an approving verb (Approve), `destructive` for a removing one. */
|
|
6
|
+
tone?: 'default' | 'success' | 'destructive';
|
|
6
7
|
disabled?: boolean;
|
|
7
8
|
onSelect: () => void;
|
|
8
9
|
}
|
|
@@ -31,7 +31,7 @@ export function SelectionBar({ selectedCount, allSelected, canSelectAll = true,
|
|
|
31
31
|
const selectLabel = allSelected ? t.raw('text83b12c2216ef') : t.raw('text1fc9a387654d');
|
|
32
32
|
// One action: a fixed-height button that reads its label. No glyph: a
|
|
33
33
|
// verb in a bulk bar is read, not recognised.
|
|
34
|
-
const action = (a) => (_jsx(Button, { type: "button", variant: "secondary", size: "sm", onClick: a.onSelect, disabled: busy || a.disabled, className: cn('h-8 shrink-0', a.tone === 'destructive' && 'text-destructive hover:text-destructive'), children: a.label }, a.id));
|
|
34
|
+
const action = (a) => (_jsx(Button, { type: "button", variant: "secondary", size: "sm", onClick: a.onSelect, disabled: busy || a.disabled, className: cn('h-8 shrink-0', a.tone === 'destructive' && 'text-destructive hover:text-destructive', a.tone === 'success' && 'text-kortix-green hover:text-kortix-green'), children: a.label }, a.id));
|
|
35
35
|
return (_jsxs(m.div, { initial: animateIn ? { opacity: 0, transform: reduceMotion ? REST : RISE } : false, animate: {
|
|
36
36
|
opacity: 1,
|
|
37
37
|
transform: REST,
|
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
/** @internal Kortix apps only. No semver: it may change in any release. */
|
|
2
|
+
/**
|
|
3
|
+
* What the full-screen viewer shows under a file opened with one: a generated
|
|
4
|
+
* image's prompt (`text`) and the model that made it.
|
|
5
|
+
*/
|
|
6
|
+
export interface FileCaption {
|
|
7
|
+
text: string;
|
|
8
|
+
model?: string | null;
|
|
9
|
+
/**
|
|
10
|
+
* The sha256 of the image's bytes (R38): the viewer draws those bytes from
|
|
11
|
+
* the shared store at once, with no read.
|
|
12
|
+
*/
|
|
13
|
+
sha256?: string;
|
|
14
|
+
}
|
|
15
|
+
/** One key per sandbox file, with or without the `/workspace/` prefix. */
|
|
16
|
+
export declare function fileCaptionKey(path: string): string;
|
|
2
17
|
interface FilePreviewState {
|
|
3
18
|
/** Whether the preview dialog is open */
|
|
4
19
|
isOpen: boolean;
|
|
@@ -6,10 +21,22 @@ interface FilePreviewState {
|
|
|
6
21
|
filePath: string | null;
|
|
7
22
|
/** Optional line number to highlight */
|
|
8
23
|
lineNumber?: number;
|
|
9
|
-
/**
|
|
10
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Captions of the files opened with one, by `fileCaptionKey`. Kept after
|
|
26
|
+
* the open: the session panel's viewer, the Files explorer and this dialog
|
|
27
|
+
* all read it for the path they show.
|
|
28
|
+
*/
|
|
29
|
+
captions: Record<string, FileCaption>;
|
|
30
|
+
/** Open the preview dialog with the given file; `caption` shows under it in the viewer. */
|
|
31
|
+
openPreview: (filePath: string, lineNumber?: number, caption?: FileCaption) => void;
|
|
11
32
|
/** Close the preview dialog */
|
|
12
33
|
closePreview: () => void;
|
|
13
34
|
}
|
|
14
35
|
export declare const useFilePreviewStore: import("zustand").UseBoundStore<import("zustand").StoreApi<FilePreviewState>>;
|
|
36
|
+
/**
|
|
37
|
+
* The caption the viewer shows under `filePath`, when it was opened with one.
|
|
38
|
+
* The live state on both snapshots: a static render (tests, a prerender)
|
|
39
|
+
* reads what was opened, not the store's initial state.
|
|
40
|
+
*/
|
|
41
|
+
export declare function useFileCaption(filePath: string): FileCaption | undefined;
|
|
15
42
|
export {};
|
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
import { getActivePanelSessionId, openFileInSessionPanel } from './session-browser-store.js';
|
|
2
|
+
import { useSyncExternalStore } from 'react';
|
|
2
3
|
import { create } from 'zustand';
|
|
4
|
+
/** One key per sandbox file, with or without the `/workspace/` prefix. */
|
|
5
|
+
export function fileCaptionKey(path) {
|
|
6
|
+
return path.trim().replace(/^\/?workspace\//, '').replace(/^\/+/, '');
|
|
7
|
+
}
|
|
3
8
|
export const useFilePreviewStore = create((set) => ({
|
|
4
9
|
isOpen: false,
|
|
5
10
|
filePath: null,
|
|
6
11
|
lineNumber: undefined,
|
|
7
|
-
|
|
12
|
+
captions: {},
|
|
13
|
+
openPreview: (filePath, lineNumber, caption) => {
|
|
14
|
+
if (caption)
|
|
15
|
+
set((s) => ({ captions: { ...s.captions, [fileCaptionKey(filePath)]: caption } }));
|
|
8
16
|
// Inside a session the file opens in the panel's detail layer — the THING,
|
|
9
17
|
// not the file manager around it (see easy-panel.tsx's handleOpenOutput).
|
|
10
18
|
// `…Silently` because Easy must never write `viewBySession`: that key is
|
|
@@ -22,3 +30,13 @@ export const useFilePreviewStore = create((set) => ({
|
|
|
22
30
|
set({ isOpen: false, filePath: null, lineNumber: undefined });
|
|
23
31
|
},
|
|
24
32
|
}));
|
|
33
|
+
/**
|
|
34
|
+
* The caption the viewer shows under `filePath`, when it was opened with one.
|
|
35
|
+
* The live state on both snapshots: a static render (tests, a prerender)
|
|
36
|
+
* reads what was opened, not the store's initial state.
|
|
37
|
+
*/
|
|
38
|
+
export function useFileCaption(filePath) {
|
|
39
|
+
const key = fileCaptionKey(filePath);
|
|
40
|
+
const read = () => useFilePreviewStore.getState().captions[key];
|
|
41
|
+
return useSyncExternalStore(useFilePreviewStore.subscribe, read, read);
|
|
42
|
+
}
|
|
@@ -110,6 +110,9 @@ export const useKortixComputerStore = create()(devtools((set, get) => ({
|
|
|
110
110
|
if (!open) {
|
|
111
111
|
// The person closed it: coming back must not reopen it.
|
|
112
112
|
forgetActivePanel(get());
|
|
113
|
+
// A tool closed while the computer boots stays closed after the
|
|
114
|
+
// boot→ready handoff: drop the intent it would replant.
|
|
115
|
+
update._bootQuickView = null;
|
|
113
116
|
update.panelSplit = null;
|
|
114
117
|
update.panelAspect = null;
|
|
115
118
|
update.isExpanded = false;
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* (`customize-sidebar-modal.tsx` syncs it). A row a project does not offer (a flag is off, a permission is denied)
|
|
9
9
|
* keeps its place here and simply does not render.
|
|
10
10
|
*/
|
|
11
|
-
export declare const SIDEBAR_NAV_ITEM_IDS: readonly ["customize", "apps", "files", "rooms", "goals"];
|
|
11
|
+
export declare const SIDEBAR_NAV_ITEM_IDS: readonly ["customize", "apps", "files", "rooms", "goals", "artifacts"];
|
|
12
12
|
export type SidebarNavItemId = (typeof SIDEBAR_NAV_ITEM_IDS)[number];
|
|
13
13
|
/**
|
|
14
14
|
* `never` moves the row into the More menu (`project-nav-items.tsx`), so its
|
|
@@ -13,7 +13,7 @@ import { registerPersistedStore, resetPersistedStore } from './persisted-store-r
|
|
|
13
13
|
*/
|
|
14
14
|
// Review (2026-10-17) and Reminders (2026-10-19) left the sidebar for Customize
|
|
15
15
|
// tabs. A saved layout that still names one drops the id in `normalizeSidebarNav`.
|
|
16
|
-
export const SIDEBAR_NAV_ITEM_IDS = ['customize', 'apps', 'files', 'rooms', 'goals'];
|
|
16
|
+
export const SIDEBAR_NAV_ITEM_IDS = ['customize', 'apps', 'files', 'rooms', 'goals', 'artifacts'];
|
|
17
17
|
/** The layout before anyone customizes it. */
|
|
18
18
|
export const SIDEBAR_NAV_DEFAULTS = [
|
|
19
19
|
{ id: 'customize', visibility: 'always' },
|
|
@@ -24,6 +24,8 @@ export const SIDEBAR_NAV_DEFAULTS = [
|
|
|
24
24
|
{ id: 'rooms', visibility: 'never' },
|
|
25
25
|
// Goals (2026-10-21, flag `goals`): objectives agents own until verified done.
|
|
26
26
|
{ id: 'goals', visibility: 'always' },
|
|
27
|
+
// Artifacts (2026-10-23, flag `artifacts`): published docs, slides, boards, dashboards.
|
|
28
|
+
{ id: 'artifacts', visibility: 'always' },
|
|
27
29
|
];
|
|
28
30
|
function isItemId(value) {
|
|
29
31
|
return SIDEBAR_NAV_ITEM_IDS.includes(value);
|
package/dist/lib/routes.d.ts
CHANGED
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
*
|
|
7
7
|
* A route that returns null is a page the host does not serve: every link to
|
|
8
8
|
* it is hidden and no navigation goes there. `project` and `session` are the
|
|
9
|
-
* two pages every session host serves, so they cannot be null.
|
|
9
|
+
* two pages every session host serves, so they cannot be null. `channel` and
|
|
10
|
+
* `dm` cannot be null either: the sidebar links them only while the project's
|
|
11
|
+
* `project_channels` flag is on.
|
|
10
12
|
*
|
|
11
13
|
* Defaults: apps/web's paths.
|
|
12
14
|
*/
|
|
@@ -24,6 +26,8 @@ export interface UiRoutes {
|
|
|
24
26
|
rooms: (projectId: string) => string | null;
|
|
25
27
|
/** The project's goals (flag `goals`); a goal is `<goals>/<scope>/<slug>`. */
|
|
26
28
|
goals: (projectId: string) => string | null;
|
|
29
|
+
/** The project's artifacts (flag `artifacts`); one is `<artifacts>/<artifact_id>`. */
|
|
30
|
+
artifacts: (projectId: string) => string | null;
|
|
27
31
|
members: (projectId: string) => string | null;
|
|
28
32
|
/** The project settings page, on its sandbox section. */
|
|
29
33
|
sandboxSettings: (projectId: string) => string | null;
|
|
@@ -33,11 +37,19 @@ export interface UiRoutes {
|
|
|
33
37
|
* capability root, for example `models` or `triggers?id=<slug>`.
|
|
34
38
|
*/
|
|
35
39
|
customize: (projectId: string, path?: string) => string | null;
|
|
40
|
+
/** A channel of the project, by slug (`project_channels` flag). */
|
|
41
|
+
channel: (projectId: string, slug: string) => string;
|
|
42
|
+
/** The caller's direct messages with one agent, by agent name (`project_channels` flag). */
|
|
43
|
+
dm: (projectId: string, agentName: string) => string;
|
|
44
|
+
/** The project's Company memory (`project_channels` flag); a page is `?page=<page_id>`. */
|
|
45
|
+
memory: (projectId: string) => string | null;
|
|
36
46
|
}
|
|
37
47
|
export declare const defaultUiRoutes: UiRoutes;
|
|
38
48
|
/** Replaces the routes the host passes. Omitted routes keep their default. */
|
|
39
49
|
export declare function setUiRoutes(overrides: Partial<UiRoutes>): void;
|
|
40
50
|
export declare function uiRoutes(): UiRoutes;
|
|
51
|
+
/** A channel slug or DM agent name from its URL segment; null when a hand-typed escape is malformed. */
|
|
52
|
+
export declare function decodeSpaceSegment(segment: string): string | null;
|
|
41
53
|
/**
|
|
42
54
|
* A capability page's URL for the customize pages themselves: they are mounted
|
|
43
55
|
* only by a host that serves them, so a null `customize` route falls back to
|
package/dist/lib/routes.js
CHANGED
|
@@ -7,9 +7,13 @@ const DEFAULT_ROUTES = {
|
|
|
7
7
|
apps: (p) => `/projects/${p}/apps`,
|
|
8
8
|
rooms: (p) => `/projects/${p}/rooms`,
|
|
9
9
|
goals: (p) => `/projects/${p}/goals`,
|
|
10
|
+
artifacts: (p) => `/projects/${p}/artifacts`,
|
|
10
11
|
members: (p) => `/projects/${p}/members`,
|
|
11
12
|
sandboxSettings: (p) => `/projects/${p}/config?section=sandbox`,
|
|
12
13
|
customize: (p, path) => `/projects/${p}/customize${path ? `/${path}` : ''}`,
|
|
14
|
+
channel: (p, slug) => `/projects/${p}/c/${slug}`,
|
|
15
|
+
dm: (p, agentName) => `/projects/${p}/dm/${encodeURIComponent(agentName)}`,
|
|
16
|
+
memory: (p) => `/projects/${p}/memory`,
|
|
13
17
|
};
|
|
14
18
|
export const defaultUiRoutes = DEFAULT_ROUTES;
|
|
15
19
|
let routes = DEFAULT_ROUTES;
|
|
@@ -20,6 +24,15 @@ export function setUiRoutes(overrides) {
|
|
|
20
24
|
export function uiRoutes() {
|
|
21
25
|
return routes;
|
|
22
26
|
}
|
|
27
|
+
/** A channel slug or DM agent name from its URL segment; null when a hand-typed escape is malformed. */
|
|
28
|
+
export function decodeSpaceSegment(segment) {
|
|
29
|
+
try {
|
|
30
|
+
return decodeURIComponent(segment);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
23
36
|
/**
|
|
24
37
|
* A capability page's URL for the customize pages themselves: they are mounted
|
|
25
38
|
* only by a host that serves them, so a null `customize` route falls back to
|
|
@@ -12,6 +12,6 @@ export declare const genuiBadgeClass: (tone: BadgeTone) => string;
|
|
|
12
12
|
export declare function GenuiBadge({ props }: GenuiComponentProps): import("react").JSX.Element;
|
|
13
13
|
export declare function GenuiCallout({ props }: GenuiComponentProps): import("react").JSX.Element;
|
|
14
14
|
/** Set inside an image gallery (layout.tsx): the tile sizes the image, which covers it. A `tile` shows its caption on hover. */
|
|
15
|
-
export declare const GenuiImageGridContext: import("react").Context<false | "
|
|
15
|
+
export declare const GenuiImageGridContext: import("react").Context<false | "tile" | "lead">;
|
|
16
16
|
export declare function GenuiImage({ props }: GenuiComponentProps): import("react").JSX.Element;
|
|
17
17
|
export declare function GenuiLink({ props }: GenuiComponentProps): import("react").JSX.Element;
|
package/dist/markdown/index.d.ts
CHANGED
|
@@ -10,7 +10,8 @@ export type { MarkdownPolicy, MarkdownTrust, MarkdownVariant } from './markdown-
|
|
|
10
10
|
export { UnifiedMarkdown } from './unified-markdown.js';
|
|
11
11
|
export type { UnifiedMarkdownProps } from './unified-markdown.js';
|
|
12
12
|
export { CopyOverlay } from './code/index.js';
|
|
13
|
-
export { HighlightedCode } from './code/code-block.js';
|
|
13
|
+
export { CodeHighlight, HighlightedCode } from './code/code-block.js';
|
|
14
|
+
export { INLINE_CODE } from './code/inline-chip.js';
|
|
14
15
|
export { CopyButton } from './copy-button.js';
|
|
15
16
|
export { MarkdownWithFrontmatter } from './markdown-frontmatter.js';
|
|
16
17
|
export { languageLabel, normalizeLanguage } from './unified-markdown-utils.js';
|
package/dist/markdown/index.js
CHANGED
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
export { markdownPolicy } from './markdown-policy.js';
|
|
9
9
|
export { UnifiedMarkdown } from './unified-markdown.js';
|
|
10
10
|
export { CopyOverlay } from './code/index.js';
|
|
11
|
-
export { HighlightedCode } from './code/code-block.js';
|
|
11
|
+
export { CodeHighlight, HighlightedCode } from './code/code-block.js';
|
|
12
|
+
export { INLINE_CODE } from './code/inline-chip.js';
|
|
12
13
|
export { CopyButton } from './copy-button.js';
|
|
13
14
|
export { MarkdownWithFrontmatter } from './markdown-frontmatter.js';
|
|
14
15
|
export { languageLabel, normalizeLanguage } from './unified-markdown-utils.js';
|
|
@@ -12,7 +12,7 @@ import { OutcomeTitle } from '../../internal/auth/auth-consent.js';
|
|
|
12
12
|
import { Rise, StepHeader } from '../../internal/auth/auth-primitives.js';
|
|
13
13
|
import { useTranslations } from '../../i18n/index.js';
|
|
14
14
|
import { getApprovalLink, resolveApproval } from '@kortix/sdk';
|
|
15
|
-
import { CheckCircleIcon, ClockIcon, EyeIcon, MinusCircleIcon, PencilSimpleIcon, UserIcon, WarningIcon, XCircleIcon, } from '@phosphor-icons/react';
|
|
15
|
+
import { CheckCircleIcon, ClockIcon, EyeIcon, MinusCircleIcon, PencilSimpleIcon, ShieldCheckIcon, UserIcon, WarningIcon, XCircleIcon, } from '@phosphor-icons/react';
|
|
16
16
|
import { UiLink as Link, useUiRouter } from '../../providers/ui-provider.js';
|
|
17
17
|
import { useEffect, useState } from 'react';
|
|
18
18
|
import { isApprovalExpiredError } from '../../internal/lib/approval-expired.js';
|
|
@@ -46,6 +46,7 @@ export function approvalIdentity(details) {
|
|
|
46
46
|
connector: details.connector_name ??
|
|
47
47
|
(details.connector ? details.connector.charAt(0).toUpperCase() + details.connector.slice(1) : null),
|
|
48
48
|
action: actionLabel(details.action),
|
|
49
|
+
slug: details.connector ?? null,
|
|
49
50
|
iconUrl: connectorLogoUrl(details),
|
|
50
51
|
};
|
|
51
52
|
}
|
|
@@ -202,6 +203,7 @@ export function ApprovalDecisionPanel({ details, outcome, busyDecision, error, o
|
|
|
202
203
|
const tI18nComplete = useTranslations('hardcodedUi.i18nComplete');
|
|
203
204
|
const tHardcodedUi = useTranslations('hardcodedUi');
|
|
204
205
|
const t = useTranslations('hardcodedUi.approvalPage');
|
|
206
|
+
const tSets = useTranslations('connectorPolicySets');
|
|
205
207
|
const priorityWord = useIssuePriorityWord();
|
|
206
208
|
const now = useClock();
|
|
207
209
|
const expiresAt = Date.parse(details.expires_at);
|
|
@@ -316,7 +318,9 @@ export function ApprovalDecisionPanel({ details, outcome, busyDecision, error, o
|
|
|
316
318
|
const risk = details.risk === 'destructive' ? (_jsx(FactRow, { icon: _jsx(WarningIcon, { "aria-hidden": true, className: "text-kortix-red size-4" }), children: t('riskDestructive') })) : details.risk === 'write' ? (_jsx(FactRow, { icon: _jsx(PencilSimpleIcon, { "aria-hidden": true, className: "text-foreground size-4" }), children: t('riskWrite', { action: (readable ?? details.action).toLowerCase() }) })) : details.risk === 'read' ? (_jsx(FactRow, { icon: _jsx(EyeIcon, { "aria-hidden": true, className: "text-foreground size-4" }), children: t('riskRead') })) : null;
|
|
317
319
|
const decidable = details.pending && !resolved && !!onDecision;
|
|
318
320
|
const footer = error || expired || decidable || waiting;
|
|
319
|
-
return (_jsxs(Rise, { children: [_jsxs("div", { className: "flex flex-col gap-3 px-5 pt-5 pb-4", children: [_jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-3", title: details.action, children: [_jsx(ConnectorAppMark, { name: connectorName ?? details.action, iconUrl: connectorLogoUrl(details), size: "md" }), _jsxs("div", { className: "flex min-w-0 flex-col", children: [_jsx("p", { className: "text-foreground truncate text-sm leading-5 font-medium", children: connectorName ?? readable ?? details.action }), connectorName ? (_jsx("p", { className: "text-muted-foreground truncate text-xs leading-4", children: readable ?? details.action })) : null] })] }), chip] }), _jsx("h2", { className: "text-foreground text-xl leading-snug font-semibold wrap-anywhere", children: headline }), _jsx(ApprovalAgentContext, { quote: true, context: details.approval_context })] }), showsPreview ? (_jsx("div", { className: "px-5", children: _jsx(ApprovalParameters, { native: true, action: details.action, argsPreview: details.args_preview, reviewComplete: details.review_complete !== false, resolvedPreview: details.resolved_preview, resolvedError: details.resolved_error, className: "overflow-hidden rounded-lg border" }) })) : null, _jsxs("div", { className: cn('flex flex-col gap-2 px-5 pb-4', showsPreview && 'pt-4'), children: [risk,
|
|
321
|
+
return (_jsxs(Rise, { children: [_jsxs("div", { className: "flex flex-col gap-3 px-5 pt-5 pb-4", children: [_jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-3", title: details.action, children: [_jsx(ConnectorAppMark, { name: connectorName ?? details.action, slug: details.connector, iconUrl: connectorLogoUrl(details), size: "md" }), _jsxs("div", { className: "flex min-w-0 flex-col", children: [_jsx("p", { className: "text-foreground truncate text-sm leading-5 font-medium", children: connectorName ?? readable ?? details.action }), connectorName ? (_jsx("p", { className: "text-muted-foreground truncate text-xs leading-4", children: readable ?? details.action })) : null] })] }), chip] }), _jsx("h2", { className: "text-foreground text-xl leading-snug font-semibold wrap-anywhere", children: headline }), _jsx(ApprovalAgentContext, { quote: true, context: details.approval_context })] }), showsPreview ? (_jsx("div", { className: "px-5", children: _jsx(ApprovalParameters, { native: true, action: details.action, argsPreview: details.args_preview, reviewComplete: details.review_complete !== false, resolvedPreview: details.resolved_preview, resolvedError: details.resolved_error, className: "overflow-hidden rounded-lg border" }) })) : null, _jsxs("div", { className: cn('flex flex-col gap-2 px-5 pb-4', showsPreview && 'pt-4'), children: [risk, details.policy_set ? (_jsx(FactRow, { muted: true, icon: _jsx(ShieldCheckIcon, { "aria-hidden": true, className: "text-muted-foreground size-4" }), children: details.agent
|
|
322
|
+
? tSets('approvalSetAgent', { agent: details.agent, set: details.policy_set })
|
|
323
|
+
: tSets('approvalSet', { set: details.policy_set }) })) : null, _jsxs(FactRow, { muted: true, icon: _jsx(UserIcon, { "aria-hidden": true, className: "text-muted-foreground size-4" }), children: [asked, expiresWhen ? ` · ${t('expiresAt', { when: expiresWhen })}` : null] })] }), footer ? (_jsxs("div", { className: "border-border flex flex-col gap-3 border-t px-5 pt-4 pb-5", children: [error ? (_jsx(Alert, { variant: "destructive", children: _jsx(AlertDescription, { children: error }) })) : null, expired ? (_jsxs(_Fragment, { children: [_jsx(Alert, { children: _jsx(AlertDescription, { children: tHardcodedUi('approvalPage.expiredHint') }) }), onDecision ? (_jsx(ApprovalDecisionActions, { onDecision: onDecision, disabled: true, sessionId: details.session_id, notePlaceholder: agent ? t('notePlaceholder', { agent }) : t('notePlaceholderAgent'), approveLabel: approveLabel, noteMinHeight: 80, className: "border-0 p-0" })) : null] })) : decidable && onDecision ? (_jsxs(_Fragment, { children: [reviewable ? null : (_jsx(Alert, { variant: "warning", children: _jsx(AlertDescription, { children: previewAuthorized
|
|
320
324
|
? tI18nComplete.raw('text7c4a3e7e2251')
|
|
321
325
|
: tI18nComplete.raw('textf7873b149941') }) })), _jsx(ApprovalDecisionActions, { onDecision: onDecision, busyDecision: busyDecision, approvable: reviewable, sessionId: details.session_id, notePlaceholder: agent ? t('notePlaceholder', { agent }) : t('notePlaceholderAgent'), approveLabel: approveLabel, noteMinHeight: 80, className: "border-0 p-0" })] })) : waiting ? (_jsx(ApprovalWaitingNotice, { dense: true, resolvers: resolvers })) : null] })) : null] }));
|
|
322
326
|
}
|
|
@@ -19,8 +19,10 @@ declare const TILE_SIZE: {
|
|
|
19
19
|
* not contain it: WebKit skips a rounded overflow clip for a composited child
|
|
20
20
|
* (the card animates in), and the logo's square corners painted past the edge.
|
|
21
21
|
*/
|
|
22
|
-
export declare function ConnectorAppMark({ name, iconUrl, size, }: {
|
|
22
|
+
export declare function ConnectorAppMark({ name: _name, slug, iconUrl, size, }: {
|
|
23
23
|
name: string;
|
|
24
|
+
/** The connector's slug, so a Kortix-built connector shows its own mark. */
|
|
25
|
+
slug?: string | null;
|
|
24
26
|
iconUrl: string | null | undefined;
|
|
25
27
|
size?: keyof typeof TILE_SIZE;
|
|
26
28
|
}): React.JSX.Element;
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import {
|
|
3
|
+
import { ConnectorLogo } from '../../internal/connector-logo/connector-logo.js';
|
|
4
4
|
import { KortixLogo } from '../../primitives/kortix-logo.js';
|
|
5
5
|
import { Skeleton } from '../../primitives/skeleton.js';
|
|
6
6
|
import { cn } from '../../lib/utils.js';
|
|
7
7
|
import { CheckIcon } from '@phosphor-icons/react';
|
|
8
|
-
import { useState } from 'react';
|
|
9
8
|
/**
|
|
10
9
|
* The logo tile is white in both themes. Catalogue logos are third-party art
|
|
11
10
|
* drawn for a white ground: on the dark `bg-popover` a black glyph (Notion,
|
|
@@ -13,6 +12,8 @@ import { useState } from 'react';
|
|
|
13
12
|
* exception, kept here as a named constant rather than inline.
|
|
14
13
|
*/
|
|
15
14
|
const LOGO_TILE_BACKGROUND = 'bg-white';
|
|
15
|
+
/** The Kortix tile is the light variant in both themes: white ground, black mark, no edge. */
|
|
16
|
+
const KORTIX_TILE_COLORS = 'bg-white text-black';
|
|
16
17
|
const TILE_SIZE = {
|
|
17
18
|
xl: 'size-14 rounded-xl',
|
|
18
19
|
lg: 'size-10 rounded-md',
|
|
@@ -41,15 +42,13 @@ function HandshakeTile({ size, className, children, }) {
|
|
|
41
42
|
* not contain it: WebKit skips a rounded overflow clip for a composited child
|
|
42
43
|
* (the card animates in), and the logo's square corners painted past the edge.
|
|
43
44
|
*/
|
|
44
|
-
export function ConnectorAppMark({ name, iconUrl, size = 'md', }) {
|
|
45
|
-
|
|
46
|
-
if (iconUrl === undefined) {
|
|
45
|
+
export function ConnectorAppMark({ name: _name, slug, iconUrl, size = 'md', }) {
|
|
46
|
+
if (iconUrl === undefined && !slug) {
|
|
47
47
|
return _jsx(Skeleton, { "aria-hidden": true, className: cn('shrink-0 py-0', TILE_SIZE[size]) });
|
|
48
48
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
return (_jsx(HandshakeTile, { size: size, className: LOGO_TILE_BACKGROUND, children: _jsx("img", { src: iconUrl, alt: "", referrerPolicy: "no-referrer", draggable: false, onError: () => setBroken(true), className: cn('size-full object-contain select-none', TILE_SIZE[size]) }) }));
|
|
49
|
+
// The one connector logo (`ConnectorLogo`), so a connect card, an approval and the
|
|
50
|
+
// connector's own page show the same mark.
|
|
51
|
+
return _jsx(ConnectorLogo, { source: { slug, icon: iconUrl ?? null }, size: size });
|
|
53
52
|
}
|
|
54
53
|
/** The Kortix glyph inside its tile, per tile size. */
|
|
55
54
|
const KORTIX_MARK_PX = { md: 14, lg: 18, xl: 24 };
|
|
@@ -67,5 +66,8 @@ const KORTIX_MARK_PX = { md: 14, lg: 18, xl: 24 };
|
|
|
67
66
|
* away and the app logo alone leads, which gives the title the room it needs.
|
|
68
67
|
*/
|
|
69
68
|
export function ConnectorHandshake({ name, iconUrl, connected = false, size = 'md', collapsible = true, mark, }) {
|
|
70
|
-
return (_jsxs("span", { className: cn('flex shrink-0 items-center', size === 'xl' ? 'gap-3' : 'gap-1.5'), "aria-hidden": true, children: [_jsx(HandshakeTile, { size: size, className: cn(
|
|
69
|
+
return (_jsxs("span", { className: cn('flex shrink-0 items-center', size === 'xl' ? 'gap-3' : 'gap-1.5'), "aria-hidden": true, children: [_jsx(HandshakeTile, { size: size, className: cn(KORTIX_TILE_COLORS, collapsible && 'hidden @md/connect:flex'), children: _jsx(KortixLogo, { variant: "icon", size: KORTIX_MARK_PX[size] }) }), _jsxs("svg", { width: size === 'xl' ? 36 : 24, height: size === 'xl' ? 9 : 6, viewBox: "0 0 24 6", className: cn('text-muted-foreground shrink-0', collapsible && 'hidden @md/connect:block'), fill: "currentColor", children: [_jsx("circle", { cx: "2", cy: "3", r: "1", opacity: "0.3" }), _jsx("circle", { cx: "7", cy: "3", r: "1.25", opacity: "0.7" }), _jsx("circle", { cx: "12", cy: "3", r: "1.75" }), _jsx("circle", { cx: "17", cy: "3", r: "1.25", opacity: "0.7" }), _jsx("circle", { cx: "22", cy: "3", r: "1", opacity: "0.3" })] }), _jsxs("span", { className: "relative flex", children: [mark ? (_jsx(HandshakeTile, { size: size, className: cn(LOGO_TILE_BACKGROUND, 'ring-border ring-1 ring-inset'), children: mark })) : (
|
|
70
|
+
// A white ground behind the bare logo, so a black glyph (GitHub,
|
|
71
|
+
// Notion) stays visible on a dark surface.
|
|
72
|
+
_jsx("span", { className: cn(iconUrl !== undefined && LOGO_TILE_BACKGROUND, 'flex', TILE_SIZE[size]), children: _jsx(ConnectorAppMark, { name: name, iconUrl: iconUrl, size: size }) })), connected ? (_jsx("span", { className: "bg-kortix-green ring-background absolute -right-1 -bottom-1 flex size-3.5 items-center justify-center rounded-full ring-2", children: _jsx(CheckIcon, { weight: "bold", className: "text-background size-2" }) })) : null] })] }));
|
|
71
73
|
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export type ShowConnectTarget = {
|
|
3
|
+
kind: 'kortix';
|
|
4
|
+
token: string;
|
|
5
|
+
} | {
|
|
6
|
+
kind: 'provider';
|
|
7
|
+
host: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* A `show` URL that is a connect step, not a page: a Kortix link, a provider's
|
|
11
|
+
* sign-in page, or any URL the agent titled "Connect <app>". A connection URL
|
|
12
|
+
* never falls back to the plain link card.
|
|
13
|
+
*/
|
|
14
|
+
export declare function showConnectTarget(url: string, title?: string): ShowConnectTarget | null;
|
|
15
|
+
/**
|
|
16
|
+
* The `show` panel for a connect URL (Paper, "Show tool · connect URL panel" 01):
|
|
17
|
+
* the Kortix ··· app handshake, one title, the agent's sentence, one action.
|
|
18
|
+
*
|
|
19
|
+
* A Kortix link opens the host's connect dialog in place and turns into the
|
|
20
|
+
* connected record once the account lands. A provider page opens in a sign-in
|
|
21
|
+
* window; its app comes from the agent's title, never the provider's favicon.
|
|
22
|
+
*/
|
|
23
|
+
export declare function ShowConnectHero({ url, target, title, description, }: {
|
|
24
|
+
url: string;
|
|
25
|
+
target: ShowConnectTarget;
|
|
26
|
+
title: string;
|
|
27
|
+
description: string;
|
|
28
|
+
}): React.JSX.Element;
|