@kortix/ui 0.14.8 → 0.14.10
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 +116 -3
- package/dist/_vendor/shared/app-config.d.ts +175 -0
- package/dist/_vendor/shared/artifact-comments.d.ts +235 -0
- package/dist/_vendor/shared/channel-descriptors.d.ts +96 -0
- package/dist/_vendor/shared/channel-message.d.ts +45 -5
- package/dist/_vendor/shared/index.d.ts +2 -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 +30 -7
- 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 +55 -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 +21 -28
- 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 +10 -0
- package/dist/customize/sections/view/channels-view.d.ts +6 -1
- package/dist/customize/sections/view/channels-view.js +72 -81
- package/dist/customize/sections/view/gateway/gateway-overview.js +10 -2
- package/dist/customize/settings/rail.js +9 -0
- package/dist/customize/settings/settings-tabs.d.ts +1 -1
- package/dist/customize/settings/settings-tabs.js +1 -0
- package/dist/customize/settings/tabs/chrome-connections-tab.d.ts +6 -0
- package/dist/customize/settings/tabs/chrome-connections-tab.js +99 -0
- package/dist/customize/settings/tabs/experimental-tab.js +35 -16
- package/dist/customize/shared/catalog/catalog-empty-state.d.ts +4 -15
- package/dist/customize/shared/catalog/catalog-empty-state.js +9 -7
- 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 +48 -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 +1062 -85
- package/dist/i18n/en.js +1078 -101
- 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/apps-and-extensions/apps-modal.d.ts +9 -0
- package/dist/internal/apps-and-extensions/apps-modal.js +107 -0
- package/dist/internal/auth/auth-card-shell.js +3 -3
- package/dist/internal/chrome/browser-icon.d.ts +24 -0
- package/dist/internal/chrome/browser-icon.js +58 -0
- package/dist/internal/chrome/chrome-card-state.d.ts +16 -0
- package/dist/internal/chrome/chrome-card-state.js +9 -0
- package/dist/internal/chrome/chrome-connect.d.ts +69 -0
- package/dist/internal/chrome/chrome-connect.js +178 -0
- package/dist/internal/chrome/chrome-mock.d.ts +4 -0
- package/dist/internal/chrome/chrome-mock.js +15 -0
- package/dist/internal/chrome/chrome-names.d.ts +15 -0
- package/dist/internal/chrome/chrome-names.js +35 -0
- package/dist/internal/chrome/extension.d.ts +47 -0
- package/dist/internal/chrome/extension.js +91 -0
- package/dist/internal/chrome/use-chrome-offered.d.ts +11 -0
- package/dist/internal/chrome/use-chrome-offered.js +22 -0
- package/dist/internal/components/agent-mark.js +5 -2
- package/dist/internal/connector-logo/connector-logo-source.d.ts +64 -0
- package/dist/internal/connector-logo/connector-logo-source.js +49 -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/edge.d.ts +5 -0
- package/dist/internal/icons/edge.js +10 -0
- 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/extensions.js +17 -3
- 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/detect-os.d.ts +43 -0
- package/dist/internal/lib/detect-os.js +70 -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 +13 -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/apps-modal-store.d.ts +8 -0
- package/dist/internal/stores/apps-modal-store.js +6 -0
- package/dist/internal/stores/composer-prefill-store.d.ts +12 -5
- 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 +9 -3
- 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/empty-state.d.ts +2 -2
- package/dist/primitives/empty-state.js +6 -5
- 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-audit-shared.js +3 -1
- 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 +8 -2
- package/dist/session/participants/session-participants.js +11 -4
- package/dist/session/prompts/approval-request.d.ts +5 -0
- package/dist/session/prompts/approval-request.js +9 -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 +15 -1
- package/dist/session/thread/session-thread.js +20 -3
- package/dist/session/thread/session-transcript-class.d.ts +5 -1
- package/dist/session/thread/session-transcript-class.js +5 -1
- 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 +241 -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 +14 -6
- package/dist/session/turn/user-message.js +35 -15
- 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/session-label-badges.js +2 -1
- 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-chrome-nav.d.ts +10 -0
- package/dist/workspace/sidebar/footer/project-chrome-nav.js +56 -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 +13 -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 +67 -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 +29 -5
- 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
|
@@ -25,6 +25,8 @@ const DISPLAY_PROPERTIES = new Set([
|
|
|
25
25
|
'title',
|
|
26
26
|
'tooltip',
|
|
27
27
|
]);
|
|
28
|
+
/** Structural keys: a discriminant or an address, never copy. Translating one breaks the shape (2026-10-28: Italian turned `kind: 'steps'` into 'passaggi' and the /it/slack build crashed). */
|
|
29
|
+
const STRUCTURAL_PROPERTIES = new Set(['kind', 'type', 'id', 'href', 'variant', 'icon', 'tone', 'status']);
|
|
28
30
|
export function translateUiCatalogText(value, tI18nComplete, translationKeys) {
|
|
29
31
|
if (value.length === 0)
|
|
30
32
|
return value;
|
|
@@ -41,6 +43,8 @@ export function localizeUiCatalog(value, tI18nComplete, translationKeys) {
|
|
|
41
43
|
if (!value || typeof value !== 'object' || '$$typeof' in value)
|
|
42
44
|
return value;
|
|
43
45
|
return Object.fromEntries(Object.entries(value).map(([key, entry]) => {
|
|
46
|
+
if (STRUCTURAL_PROPERTIES.has(key))
|
|
47
|
+
return [key, entry];
|
|
44
48
|
if (typeof entry === 'string' && DISPLAY_PROPERTIES.has(key)) {
|
|
45
49
|
return [key, translateUiCatalogText(entry, tI18nComplete, translationKeys)];
|
|
46
50
|
}
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
// Generated from the final user-visible i18n audit. Keys are SHA-256(message)[0:12].
|
|
2
2
|
export const REMAINING_UI_TRANSLATION_KEYS = {
|
|
3
|
+
"Connector events": 'text0ba357fa63f8',
|
|
4
|
+
"Connector event": 'textca395c4d19b2',
|
|
5
|
+
"connector event": 'text6064256ee716',
|
|
6
|
+
"New connector event": 'text85a6c98e5584',
|
|
7
|
+
"Search connector events": 'text165d9237c163',
|
|
8
|
+
"No connector events yet": 'texta9caf7909165',
|
|
9
|
+
"Have an agent run when one of your Kortix Apps emits an event.": 'text451ef98453d2',
|
|
10
|
+
"App event": 'text5441e7146193',
|
|
11
|
+
"New App event": 'text064694999e1f',
|
|
12
|
+
"Search App events": 'text1934aa0740bb',
|
|
13
|
+
"No App events yet": 'text25db7e5609e5',
|
|
14
|
+
"An App starts agents by emitting events. Add a trigger with on: { event, app } in kortix.yaml.": 'text9f8f92588517',
|
|
3
15
|
Drive: 'text6312b4b9baf1',
|
|
4
16
|
Drives: 'text729fe0e7b138',
|
|
5
17
|
'{label} has finished.': 'text27d628c8b427',
|
|
@@ -201,9 +213,9 @@ export const REMAINING_UI_TRANSLATION_KEYS = {
|
|
|
201
213
|
'Every tool runs without asking. Only the rules below can stop one.': 'texta63fb2eebd02',
|
|
202
214
|
'Everything an owner can do except deleting the account or transferring ownership. Also Manager on every project.': 'textc8ef36aed650',
|
|
203
215
|
Expired: 'text424a2551d356',
|
|
204
|
-
'
|
|
216
|
+
'Moves kortix.toml or a version 2 kortix.yaml to version 3: the project registers skills, tools, commands and extensions, and each agent enables them by name. Refreshes platform-managed skills and opens a change request for review.': 'text7823a1f3af93',
|
|
205
217
|
Extensions: 'textfe3436af86b4',
|
|
206
|
-
'
|
|
218
|
+
'Upgrade manifest to v3 (kortix.yaml)': 'text08edd5b6dcdc',
|
|
207
219
|
Failed: 'text031a8f0f659d',
|
|
208
220
|
Favicon: 'text4295528943df',
|
|
209
221
|
'Fetching deals updated ≤ 7d': 'text5bae674104b6',
|
|
@@ -778,7 +790,7 @@ export const REMAINING_UI_TRANSLATION_KEYS = {
|
|
|
778
790
|
'What does an agent actually run on?': 'text7b84ea95f8ae',
|
|
779
791
|
'Its own machine. Every session boots an isolated Linux cloud computer with your repo and your tools already on it, on its own git branch — the session id, the sandbox id and the branch name are one and the same string. The agent can install, run and break anything inside it; only what it commits survives, because the machine is destroyed with everything on it.': 'text97bbd1c3b346',
|
|
780
792
|
'What stops it doing something I did not want?': 'textc145665dd580',
|
|
781
|
-
'You set allow, ask or block per action, and a rule can match on a glob, a regular expression, or the arguments of the call itself. Be aware that nothing is switched on for you: a project with no policy declared runs every action, so this is a thing you configure rather than a thing you inherit. Session work reaches main through a change request, and merge is default-deny for an agent
|
|
793
|
+
'You set allow, ask or block per action, and a rule can match on a glob, a regular expression, or the arguments of the call itself. Be aware that nothing is switched on for you: a project with no policy declared runs every action, so this is a thing you configure rather than a thing you inherit. Session work reaches main through a change request, and merge is default-deny for an agent unless an admin grants it.': 'texta9fe46474f33',
|
|
782
794
|
'Can I see everything an agent did?': 'text3a8d0e57770e',
|
|
783
795
|
'It is all recorded, on every plan. Recording is never gated — actions, approvals and the session transcript are captured whatever you pay. Reading, exporting and streaming that audit trail out to your own SIEM is an Enterprise entitlement, so on the lower plans the record exists but the export does not.': 'text36814e8d3c88',
|
|
784
796
|
'Is my company data yours?': 'text618ad8d1c91a',
|
package/dist/index.d.ts
CHANGED
|
@@ -25,11 +25,11 @@ export { Message, MessageAvatar, MessageContent, MessageFooter, MessageGroup, Me
|
|
|
25
25
|
export { Marker, MarkerContent, MarkerIcon, markerVariants, } from './primitives/marker.js';
|
|
26
26
|
export { useDebounce } from './hooks/use-debounce.js';
|
|
27
27
|
export { useIsMobile } from './hooks/use-mobile.js';
|
|
28
|
-
export { useMediaQuery } from './
|
|
28
|
+
export { useMediaQuery } from './hooks/use-media-query.js';
|
|
29
29
|
export { useSlashFocus } from './internal/hooks/use-slash-focus.js';
|
|
30
30
|
export { faviconUrlForHostname } from './lib/favicon.js';
|
|
31
31
|
export { setUiHostEnv } from './lib/host-env.js';
|
|
32
|
-
export { defaultUiRoutes, setUiRoutes, uiRoutes, type UiRoutes } from './lib/routes.js';
|
|
32
|
+
export { decodeSpaceSegment, defaultUiRoutes, setUiRoutes, uiRoutes, type UiRoutes } from './lib/routes.js';
|
|
33
33
|
export { DEFAULT_ICON_WEIGHT, ICON_WEIGHTS, SHIPPED_ICON_WEIGHTS } from './lib/icon-config.js';
|
|
34
34
|
export { lazyClient } from './lib/lazy-client.js';
|
|
35
35
|
export { spring } from './lib/springs.js';
|
package/dist/index.js
CHANGED
|
@@ -34,11 +34,11 @@ export { Message, MessageAvatar, MessageContent, MessageFooter, MessageGroup, Me
|
|
|
34
34
|
export { Marker, MarkerContent, MarkerIcon, markerVariants, } from './primitives/marker.js';
|
|
35
35
|
export { useDebounce } from './hooks/use-debounce.js';
|
|
36
36
|
export { useIsMobile } from './hooks/use-mobile.js';
|
|
37
|
-
export { useMediaQuery } from './
|
|
37
|
+
export { useMediaQuery } from './hooks/use-media-query.js';
|
|
38
38
|
export { useSlashFocus } from './internal/hooks/use-slash-focus.js';
|
|
39
39
|
export { faviconUrlForHostname } from './lib/favicon.js';
|
|
40
40
|
export { setUiHostEnv } from './lib/host-env.js';
|
|
41
|
-
export { defaultUiRoutes, setUiRoutes, uiRoutes } from './lib/routes.js';
|
|
41
|
+
export { decodeSpaceSegment, defaultUiRoutes, setUiRoutes, uiRoutes } from './lib/routes.js';
|
|
42
42
|
export { DEFAULT_ICON_WEIGHT, ICON_WEIGHTS, SHIPPED_ICON_WEIGHTS } from './lib/icon-config.js';
|
|
43
43
|
export { lazyClient } from './lib/lazy-client.js';
|
|
44
44
|
export { spring } from './lib/springs.js';
|
|
@@ -47,7 +47,7 @@ const ROW_CLASS = 'text-sidebar-foreground/75 font-medium hover:bg-hover hover:t
|
|
|
47
47
|
// stay put. Same two targets the user menu's Help group lists first.
|
|
48
48
|
const FOOTER_LINKS = [
|
|
49
49
|
{ label: 'Docs', href: '/docs', icon: BookOpenIcon },
|
|
50
|
-
{ label: 'Support', href: '/
|
|
50
|
+
{ label: 'Support', href: '/contact', icon: QuestionIcon },
|
|
51
51
|
];
|
|
52
52
|
function NavRow({ entry }) {
|
|
53
53
|
const { isMobile, setOpenMobile } = useSidebar();
|
|
@@ -18,7 +18,8 @@
|
|
|
18
18
|
* footer (`AccessDialog`) goes in `body` alone and draws its own sticky
|
|
19
19
|
* footer: it reads `useInAccountHubSheetBody()`.
|
|
20
20
|
*/
|
|
21
|
-
import { type ReactNode } from 'react';
|
|
21
|
+
import { type ComponentProps, type ReactNode } from 'react';
|
|
22
|
+
import { SelectionBar } from '../selection/selection-bar.js';
|
|
22
23
|
export interface AccountHubSheetContent {
|
|
23
24
|
title: ReactNode;
|
|
24
25
|
description?: ReactNode;
|
|
@@ -29,6 +30,13 @@ export interface AccountHubSheet {
|
|
|
29
30
|
open: (content: AccountHubSheetContent) => void;
|
|
30
31
|
close: () => void;
|
|
31
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* A pane's bulk-action bar: the shared `SelectionBar`, pinned to the bottom of
|
|
35
|
+
* the hub's page column. The column scrolls, so `sticky` would stop under a
|
|
36
|
+
* short list: this renders into a slot that overlays the column's bottom edge
|
|
37
|
+
* and never scrolls. Render it only while something is selected.
|
|
38
|
+
*/
|
|
39
|
+
export declare function AccountHubSelectionBar(props: ComponentProps<typeof SelectionBar>): import("react").ReactPortal | null;
|
|
32
40
|
/** True inside the hub sheet's body: a form there draws the sheet layout, not a modal. */
|
|
33
41
|
export declare function useInAccountHubSheetBody(): boolean;
|
|
34
42
|
/** Opens and closes the hub's split sheet. Throws outside the hub shell. */
|
|
@@ -19,10 +19,25 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
19
19
|
* footer (`AccessDialog`) goes in `body` alone and draws its own sticky
|
|
20
20
|
* footer: it reads `useInAccountHubSheetBody()`.
|
|
21
21
|
*/
|
|
22
|
-
import { createContext, useCallback, useContext, useMemo, useState } from 'react';
|
|
22
|
+
import { createContext, useCallback, useContext, useMemo, useState, } from 'react';
|
|
23
|
+
import { createPortal } from 'react-dom';
|
|
24
|
+
import { SelectionBar } from '../selection/selection-bar.js';
|
|
23
25
|
import { SplitSheet, SplitSheetBody, SplitSheetContent, SplitSheetDescription, SplitSheetFooter, SplitSheetHeader, SplitSheetMain, SplitSheetTitle, } from '../../primitives/split-sheet.js';
|
|
24
26
|
const AccountHubSheetContext = createContext(null);
|
|
25
27
|
const SheetBodyContext = createContext(false);
|
|
28
|
+
const BottomBarSlotContext = createContext(null);
|
|
29
|
+
/**
|
|
30
|
+
* A pane's bulk-action bar: the shared `SelectionBar`, pinned to the bottom of
|
|
31
|
+
* the hub's page column. The column scrolls, so `sticky` would stop under a
|
|
32
|
+
* short list: this renders into a slot that overlays the column's bottom edge
|
|
33
|
+
* and never scrolls. Render it only while something is selected.
|
|
34
|
+
*/
|
|
35
|
+
export function AccountHubSelectionBar(props) {
|
|
36
|
+
const slot = useContext(BottomBarSlotContext);
|
|
37
|
+
if (!slot)
|
|
38
|
+
return null;
|
|
39
|
+
return createPortal(_jsx("div", { className: "pointer-events-auto w-full max-w-xl", children: _jsx(SelectionBar, { ...props }) }), slot);
|
|
40
|
+
}
|
|
26
41
|
/** True inside the hub sheet's body: a form there draws the sheet layout, not a modal. */
|
|
27
42
|
export function useInAccountHubSheetBody() {
|
|
28
43
|
return useContext(SheetBodyContext);
|
|
@@ -39,8 +54,9 @@ export function AccountHubSheetProvider({ children }) {
|
|
|
39
54
|
const [content, setContent] = useState(null);
|
|
40
55
|
const close = useCallback(() => setContent(null), []);
|
|
41
56
|
const sheet = useMemo(() => ({ open: setContent, close }), [close]);
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
57
|
+
const [barSlot, setBarSlot] = useState(null);
|
|
58
|
+
return (_jsx(AccountHubSheetContext.Provider, { value: sheet, children: _jsx(BottomBarSlotContext.Provider, { value: barSlot, children: _jsxs(SplitSheet, { open: content !== null, onOpenChange: (next) => {
|
|
59
|
+
if (!next)
|
|
60
|
+
close();
|
|
61
|
+
}, size: "md", children: [_jsx(SplitSheetMain, { children: children }), _jsx("div", { ref: setBarSlot, className: "pointer-events-none z-10 col-start-1 row-start-1 flex justify-center self-end px-4 pb-4 empty:hidden" }), content ? (_jsxs(SplitSheetContent, { children: [_jsxs(SplitSheetHeader, { children: [_jsx(SplitSheetTitle, { children: content.title }), content.description ? (_jsx(SplitSheetDescription, { children: content.description })) : null] }), _jsx(SplitSheetBody, { children: _jsx(SheetBodyContext.Provider, { value: true, children: content.body }) }), content.footer ? _jsx(SplitSheetFooter, { children: content.footer }) : null] })) : null] }) }) }));
|
|
46
62
|
}
|
|
@@ -43,7 +43,7 @@ export declare function localizedAccountPaneMeta(tI18nComplete: UiTranslator): P
|
|
|
43
43
|
* next step up, and the usage ledger needs the room a table with seven
|
|
44
44
|
* columns takes.
|
|
45
45
|
*/
|
|
46
|
-
/** `fluid`: the whole pane,
|
|
46
|
+
/** `fluid`: the whole pane, for the members and project tables — no centred column. */
|
|
47
47
|
export type AccountPaneWidth = 'default' | 'wide' | 'full' | 'fluid';
|
|
48
48
|
export declare function paneWidth(section: AccountSection): AccountPaneWidth;
|
|
49
49
|
/**
|
|
@@ -127,7 +127,6 @@ export function localizedAccountPaneMeta(tI18nComplete) {
|
|
|
127
127
|
}
|
|
128
128
|
const WIDE_SECTIONS = [
|
|
129
129
|
'groups',
|
|
130
|
-
'access-projects',
|
|
131
130
|
'roles',
|
|
132
131
|
'identity',
|
|
133
132
|
'help',
|
|
@@ -135,7 +134,9 @@ const WIDE_SECTIONS = [
|
|
|
135
134
|
'billing',
|
|
136
135
|
];
|
|
137
136
|
const PANE_WIDTH = {
|
|
137
|
+
// The Members table and the project tables share one width: the whole pane.
|
|
138
138
|
members: 'fluid',
|
|
139
|
+
'access-projects': 'fluid',
|
|
139
140
|
...Object.fromEntries(WIDE_SECTIONS.map((section) => [section, 'wide'])),
|
|
140
141
|
transactions: 'full',
|
|
141
142
|
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** @internal Kortix apps only. No semver: it may change in any release. */
|
|
2
|
+
/** Opens the dialog from `?apps=1` and removes the parameter. */
|
|
3
|
+
export declare function useAppsDeepLink(): void;
|
|
4
|
+
export declare function AppsModal({ chrome, onOpenComputer, onOpenMcp, }: {
|
|
5
|
+
/** The project's `chrome` flag: the Kortix in Chrome card shows only with it on. */
|
|
6
|
+
chrome: boolean;
|
|
7
|
+
onOpenComputer: () => void;
|
|
8
|
+
onOpenMcp: () => void;
|
|
9
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* "Apps and extensions": every way to use Kortix outside this tab, in one
|
|
5
|
+
* dialog. Chrome first, then the computer, then the developer surfaces. Each
|
|
6
|
+
* row opens the dialog that already owns the flow (computer, MCP, Settings →
|
|
7
|
+
* Kortix in Chrome); nothing here pairs or connects by itself.
|
|
8
|
+
*
|
|
9
|
+
* It is mounted once, in the project sidebar, next to its only triggers: the
|
|
10
|
+
* workspace menu row, the sidebar row and `?apps=1`. Outside a project there is
|
|
11
|
+
* no workspace menu and no sidebar, so `?apps=1` there does nothing.
|
|
12
|
+
*/
|
|
13
|
+
import { useChromeConnections } from '@kortix/sdk/react';
|
|
14
|
+
import { ArrowUpRightIcon, DownloadSimpleIcon, LaptopIcon, MonitorIcon, PlugsConnectedIcon, TerminalWindowIcon, } from '@phosphor-icons/react';
|
|
15
|
+
import { useEffect, useId } from 'react';
|
|
16
|
+
import { Button } from '../../primitives/button.js';
|
|
17
|
+
import { Modal, ModalContent, ModalDescription, ModalTitle } from '../../primitives/modal.js';
|
|
18
|
+
import { ChromeCopyLink, ChromeInstallActions, ChromeOnlineDot, useChromeConnect, } from '../chrome/chrome-connect.js';
|
|
19
|
+
import { BrowserLogoTile } from '../chrome/browser-icon.js';
|
|
20
|
+
import { ChromeMock } from '../chrome/chrome-mock.js';
|
|
21
|
+
import { chromeCardState } from '../chrome/chrome-card-state.js';
|
|
22
|
+
import { chromeCounts } from '../chrome/chrome-names.js';
|
|
23
|
+
import { SolidCheckIcon } from '../icons/solid-check-icon.js';
|
|
24
|
+
import { detectPlatform, isMobilePlatform } from '../lib/detect-os.js';
|
|
25
|
+
import { useOwnsPairedComputer } from '../tunnel/computer-connect.js';
|
|
26
|
+
import { errorToast } from '../../primitives/toast.js';
|
|
27
|
+
import { useCopy } from '../hooks/use-copy.js';
|
|
28
|
+
import { useTranslations } from '../../i18n/index.js';
|
|
29
|
+
import { desktopDownloadUrl, isDesktop } from '../lib/desktop.js';
|
|
30
|
+
import { useUiHostConfig, useUiPathname, useUiRouter, useUiSearchParams, } from '../../providers/ui-provider.js';
|
|
31
|
+
import { useDeploymentCliInstallCommand } from '../lib/use-deployment-cli-install-command.js';
|
|
32
|
+
import { useAppsModalStore } from '../stores/apps-modal-store.js';
|
|
33
|
+
import { useSettingsPanelStore } from '../stores/settings-panel-store.js';
|
|
34
|
+
/** Opens the dialog from `?apps=1` and removes the parameter. */
|
|
35
|
+
export function useAppsDeepLink() {
|
|
36
|
+
const params = useUiSearchParams();
|
|
37
|
+
const pathname = useUiPathname();
|
|
38
|
+
const router = useUiRouter();
|
|
39
|
+
const wanted = params.get('apps') === '1';
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
if (!wanted)
|
|
42
|
+
return;
|
|
43
|
+
useAppsModalStore.getState().setOpen(true);
|
|
44
|
+
const next = new URLSearchParams(params.toString());
|
|
45
|
+
next.delete('apps');
|
|
46
|
+
const query = next.toString();
|
|
47
|
+
router.replace(query ? `${pathname}?${query}` : pathname, { scroll: false });
|
|
48
|
+
}, [wanted, params, pathname, router]);
|
|
49
|
+
}
|
|
50
|
+
export function AppsModal({ chrome, onOpenComputer, onOpenMcp, }) {
|
|
51
|
+
const t = useTranslations('appsModal');
|
|
52
|
+
const open = useAppsModalStore((state) => state.open);
|
|
53
|
+
const setOpen = useAppsModalStore((state) => state.setOpen);
|
|
54
|
+
useAppsDeepLink();
|
|
55
|
+
// Close first, then hand over: one dialog on screen at a time.
|
|
56
|
+
const hand = (next) => () => {
|
|
57
|
+
setOpen(false);
|
|
58
|
+
next();
|
|
59
|
+
};
|
|
60
|
+
return (_jsx(Modal, { open: open, onOpenChange: setOpen, children: _jsx(ModalContent, { className: "max-h-[90dvh] space-y-0 overflow-y-auto lg:max-w-2xl", children: _jsxs("div", { className: "flex flex-col gap-6 p-5 lg:p-8", children: [_jsxs("header", { className: "space-y-1.5 pr-10", children: [_jsx(ModalTitle, { className: "text-xl font-medium text-balance", children: t('title') }), _jsx(ModalDescription, { className: "text-muted-foreground text-sm text-pretty", children: t('subtitle') })] }), open ? (_jsxs(_Fragment, { children: [chrome ? _jsx(ChromeSection, { onManage: () => setOpen(false) }) : null, _jsx(ComputerSection, { onOpenComputer: hand(onOpenComputer) }), _jsx(DevelopersSection, { onOpenMcp: hand(onOpenMcp) })] })) : null] }) }) }));
|
|
61
|
+
}
|
|
62
|
+
/** The hero decides from THIS browser first. Other browsers are one line plus Manage. */
|
|
63
|
+
function ChromeSection({ onManage }) {
|
|
64
|
+
const t = useTranslations('appsModal.chrome');
|
|
65
|
+
const state = useChromeConnect();
|
|
66
|
+
const { environment, checking, installed, signedIn, connected } = state;
|
|
67
|
+
const connections = useChromeConnections();
|
|
68
|
+
const { count, online } = chromeCounts(connections.data ?? []);
|
|
69
|
+
const cardState = chromeCardState({
|
|
70
|
+
thisBrowserConnected: Boolean(connected),
|
|
71
|
+
environment,
|
|
72
|
+
checking,
|
|
73
|
+
installed: installed || signedIn,
|
|
74
|
+
});
|
|
75
|
+
const manage = (_jsx(Button, { size: "sm", variant: "secondary", "aria-label": t('manageLabel'), onClick: () => {
|
|
76
|
+
onManage();
|
|
77
|
+
useSettingsPanelStore.getState().openSettings('chrome');
|
|
78
|
+
}, children: t('manage') }));
|
|
79
|
+
return (_jsxs("section", { "aria-labelledby": "apps-modal-browser", className: "space-y-3", children: [_jsx("h3", { id: "apps-modal-browser", className: "text-muted-foreground text-xs font-medium", children: t('group') }), _jsxs("div", { className: "grid items-center gap-4 sm:grid-cols-2", children: [_jsxs("div", { className: "flex min-w-0 flex-col gap-4", children: [_jsxs("div", { className: "space-y-1.5", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(BrowserLogoTile, { brand: "chrome", className: "size-7", iconClassName: "size-4" }), _jsx("h4", { className: "text-base font-medium", children: t('name') })] }), _jsx("p", { className: "text-muted-foreground text-sm text-pretty", children: t('description') })] }), cardState === 'connected' && connected ? (_jsxs("div", { className: "flex flex-wrap items-center gap-x-3 gap-y-2", children: [manage, _jsxs("span", { className: "flex min-w-0 items-center gap-1.5 text-xs", children: [_jsx(ChromeOnlineDot, { online: connected.online }), _jsx("span", { className: "truncate", children: connected.name }), count > 1 ? (_jsxs("span", { className: "text-muted-foreground shrink-0", children: ["\u00B7 ", t('summary', { count, online })] })) : null] })] })) : (_jsxs(_Fragment, { children: [cardState === 'unsupported' ? (_jsxs("div", { className: "space-y-2", children: [_jsx("p", { className: "text-muted-foreground text-xs text-pretty", children: t('unsupported') }), _jsx(ChromeCopyLink, {})] })) : (_jsx(ChromeInstallActions, { state: state })), count > 0 ? (_jsxs("div", { className: "flex flex-wrap items-center gap-x-3 gap-y-2", children: [_jsx("span", { className: "text-muted-foreground text-xs", children: t('summary', { count, online }) }), manage] })) : null] }))] }), _jsx(ChromeMock, {})] })] }));
|
|
80
|
+
}
|
|
81
|
+
function ComputerSection({ onOpenComputer }) {
|
|
82
|
+
const t = useTranslations('appsModal.computer');
|
|
83
|
+
const { owned } = useOwnsPairedComputer();
|
|
84
|
+
const live = owned.some((machine) => machine.isLive);
|
|
85
|
+
const inShell = typeof window !== 'undefined' && isDesktop();
|
|
86
|
+
const platform = typeof navigator === 'undefined' ? null : detectPlatform(navigator.userAgent);
|
|
87
|
+
const download = platform && !isMobilePlatform(platform) ? desktopDownloadUrl(platform) : desktopDownloadUrl();
|
|
88
|
+
return (_jsxs(Group, { title: t('title'), children: [_jsx(AppRow, { icon: LaptopIcon, name: t('thisComputer'), description: live ? (_jsxs("span", { className: "flex items-center gap-1.5", children: [_jsx(ChromeOnlineDot, { online: true }), t('connected')] })) : (t('thisComputerDescription')), action: _jsx(Button, { size: "sm", variant: "secondary", "aria-label": t(live ? 'manageLabel' : 'connectLabel'), onClick: onOpenComputer, children: live ? t('manage') : t('connect') }) }), _jsx(AppRow, { icon: MonitorIcon, name: t('desktop'), description: inShell ? t('desktopRunning') : t('desktopDescription'), action: inShell ? null : (_jsx(Button, { asChild: true, size: "sm", variant: "secondary", className: "gap-1.5", children: _jsxs("a", { href: download, children: [_jsx(DownloadSimpleIcon, { className: "size-3.5 shrink-0" }), t('download')] }) })) })] }));
|
|
89
|
+
}
|
|
90
|
+
function DevelopersSection({ onOpenMcp }) {
|
|
91
|
+
const t = useTranslations('appsModal.developers');
|
|
92
|
+
const command = useDeploymentCliInstallCommand(useUiHostConfig().deploymentVersion);
|
|
93
|
+
const { copy, copied } = useCopy({ toast: false });
|
|
94
|
+
const copyCommand = async () => {
|
|
95
|
+
if (!(await copy(command)))
|
|
96
|
+
errorToast(t('copyFailed'));
|
|
97
|
+
};
|
|
98
|
+
return (_jsxs(Group, { title: t('title'), children: [_jsx(AppRow, { icon: TerminalWindowIcon, name: t('cli'), description: t('cliDescription'), action: _jsxs(Button, { size: "sm", variant: "secondary", className: "gap-1.5", onClick: copyCommand, children: [copied ? _jsx(SolidCheckIcon, { className: "size-3.5" }) : null, copied ? t('copied') : t('copy')] }) }), _jsx(AppRow, { icon: PlugsConnectedIcon, name: t('mcp'), description: t('mcpDescription'), action: _jsxs(Button, { size: "sm", variant: "secondary", className: "gap-1.5", "aria-label": t('connectLabel'), onClick: onOpenMcp, children: [t('connect'), _jsx(ArrowUpRightIcon, { className: "size-3.5 shrink-0" })] }) })] }));
|
|
99
|
+
}
|
|
100
|
+
/** A muted label over plain rows: no card, no border, one rule between rows. */
|
|
101
|
+
function Group({ title, children }) {
|
|
102
|
+
const id = useId();
|
|
103
|
+
return (_jsxs("section", { "aria-labelledby": id, className: "min-w-0 space-y-1", children: [_jsx("h3", { id: id, className: "text-muted-foreground text-xs font-medium", children: title }), _jsx("ul", { className: "divide-border divide-y", children: children })] }));
|
|
104
|
+
}
|
|
105
|
+
function AppRow({ icon: RowIcon, name, description, action, }) {
|
|
106
|
+
return (_jsxs("li", { className: "flex items-center gap-3 py-3", children: [_jsx("span", { className: "bg-muted flex size-9 shrink-0 items-center justify-center rounded-sm", children: _jsx(RowIcon, { className: "size-5" }) }), _jsxs("div", { className: "min-w-0 flex-1 space-y-0.5", children: [_jsx("p", { className: "text-sm font-medium", children: name }), _jsx("div", { className: "text-muted-foreground line-clamp-2 text-xs text-pretty", children: description })] }), action] }));
|
|
107
|
+
}
|
|
@@ -23,9 +23,9 @@ export function AuthLegalFooter({ variant = 'default' }) {
|
|
|
23
23
|
if (openExternalRoute(href))
|
|
24
24
|
event.preventDefault();
|
|
25
25
|
};
|
|
26
|
-
const terms = (_jsx(Link, { href: "/legal/terms", onClick: (event) => onLegalClick(event, '/legal/terms'), className: "hover:text-
|
|
27
|
-
const privacy = (_jsx(Link, { href: "/legal?tab=privacy", onClick: (event) => onLegalClick(event, '/legal?tab=privacy'), className: "hover:text-
|
|
28
|
-
return (_jsx("footer", { className: "text-muted-foreground
|
|
26
|
+
const terms = (_jsx(Link, { href: "/legal/terms", onClick: (event) => onLegalClick(event, '/legal/terms'), className: "hover:text-foreground transition-colors", children: t('termsOfService') }));
|
|
27
|
+
const privacy = (_jsx(Link, { href: "/legal?tab=privacy", onClick: (event) => onLegalClick(event, '/legal?tab=privacy'), className: "hover:text-foreground transition-colors", children: t('privacyPolicy') }));
|
|
28
|
+
return (_jsx("footer", { className: "text-muted-foreground mx-auto max-w-[380px] px-6 pb-10 text-center text-sm text-balance", children: variant === 'continue'
|
|
29
29
|
? t.rich('byContinuingYouAgree', {
|
|
30
30
|
termsOfService: () => terms,
|
|
31
31
|
privacyPolicy: () => privacy,
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** @internal Kortix apps only. No semver: it may change in any release. */
|
|
2
|
+
type BrowserKey = 'chrome' | 'brave' | 'arc' | 'opera' | 'vivaldi' | 'edge';
|
|
3
|
+
/** Maps the API's `brand` string (Chrome, Edge, Brave, Arc, Dia, …) to a mark. Any other Chromium browser gets Chrome. */
|
|
4
|
+
export declare function browserKey(brand: string | null | undefined): BrowserKey;
|
|
5
|
+
/**
|
|
6
|
+
* The browser's mark. `tone="brand"` paints the official color; `tone="current"`
|
|
7
|
+
* paints `currentColor`, for the monochrome sidebar and settings rail.
|
|
8
|
+
*/
|
|
9
|
+
export declare function BrowserIcon({ brand, tone, className, }: {
|
|
10
|
+
brand?: string | null;
|
|
11
|
+
tone?: 'brand' | 'current';
|
|
12
|
+
className?: string;
|
|
13
|
+
}): import("react").JSX.Element;
|
|
14
|
+
/** The browser mark on a white tile. `className` sets the tile size and radius. */
|
|
15
|
+
export declare function BrowserLogoTile({ brand, className, iconClassName, }: {
|
|
16
|
+
brand?: string | null;
|
|
17
|
+
className?: string;
|
|
18
|
+
iconClassName?: string;
|
|
19
|
+
}): import("react").JSX.Element;
|
|
20
|
+
/** Monochrome Chrome mark with the `Icon` call shape the settings rail expects. */
|
|
21
|
+
export declare function ChromeRailIcon({ className }: {
|
|
22
|
+
className?: string;
|
|
23
|
+
}): import("react").JSX.Element;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Edge } from '../icons/edge.js';
|
|
3
|
+
import { cn } from '../lib/utils.js';
|
|
4
|
+
/** A third-party logo tile is white in both themes (color.md). */
|
|
5
|
+
const LOGO_TILE_BACKGROUND = 'bg-white';
|
|
6
|
+
/**
|
|
7
|
+
* Official brand colors, from simple-icons (CC0). The SVG files in
|
|
8
|
+
* `public/browser-icons/` are the same set. Edge is not in simple-icons 13:
|
|
9
|
+
* it renders the house full-colour `Edge` mark instead.
|
|
10
|
+
*/
|
|
11
|
+
const CHROME_BLUE = '#4285F4';
|
|
12
|
+
const BRAVE_ORANGE = '#FB542B';
|
|
13
|
+
const ARC_PINK = '#FCBFBD';
|
|
14
|
+
const OPERA_RED = '#FF1B2D';
|
|
15
|
+
const VIVALDI_RED = '#EF3939';
|
|
16
|
+
const BROWSER_BRAND_HEX = {
|
|
17
|
+
chrome: CHROME_BLUE,
|
|
18
|
+
brave: BRAVE_ORANGE,
|
|
19
|
+
arc: ARC_PINK,
|
|
20
|
+
opera: OPERA_RED,
|
|
21
|
+
vivaldi: VIVALDI_RED,
|
|
22
|
+
};
|
|
23
|
+
const BROWSER_KEYS = ['brave', 'arc', 'opera', 'vivaldi', 'edge', 'chrome'];
|
|
24
|
+
/** Maps the API's `brand` string (Chrome, Edge, Brave, Arc, Dia, …) to a mark. Any other Chromium browser gets Chrome. */
|
|
25
|
+
export function browserKey(brand) {
|
|
26
|
+
const name = (brand ?? '').toLowerCase();
|
|
27
|
+
return BROWSER_KEYS.find((key) => name.includes(key)) ?? 'chrome';
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The browser's mark. `tone="brand"` paints the official color; `tone="current"`
|
|
31
|
+
* paints `currentColor`, for the monochrome sidebar and settings rail.
|
|
32
|
+
*/
|
|
33
|
+
export function BrowserIcon({ brand, tone = 'brand', className, }) {
|
|
34
|
+
const key = browserKey(brand);
|
|
35
|
+
if (key === 'edge' && tone === 'brand')
|
|
36
|
+
return _jsx(Edge, { className: className });
|
|
37
|
+
const file = key === 'edge' ? 'chrome' : key;
|
|
38
|
+
const url = `url(/browser-icons/${file}.svg)`;
|
|
39
|
+
return (_jsx("span", { "aria-hidden": "true", className: cn('inline-block size-4 shrink-0', tone === 'current' && 'bg-current', className), style: {
|
|
40
|
+
backgroundColor: tone === 'brand' && key !== 'edge' ? BROWSER_BRAND_HEX[key] : undefined,
|
|
41
|
+
maskImage: url,
|
|
42
|
+
WebkitMaskImage: url,
|
|
43
|
+
maskSize: 'contain',
|
|
44
|
+
WebkitMaskSize: 'contain',
|
|
45
|
+
maskRepeat: 'no-repeat',
|
|
46
|
+
WebkitMaskRepeat: 'no-repeat',
|
|
47
|
+
maskPosition: 'center',
|
|
48
|
+
WebkitMaskPosition: 'center',
|
|
49
|
+
} }));
|
|
50
|
+
}
|
|
51
|
+
/** The browser mark on a white tile. `className` sets the tile size and radius. */
|
|
52
|
+
export function BrowserLogoTile({ brand, className, iconClassName, }) {
|
|
53
|
+
return (_jsx("span", { className: cn(LOGO_TILE_BACKGROUND, 'ring-border flex size-9 shrink-0 items-center justify-center rounded-sm ring-1 ring-inset', className), children: _jsx(BrowserIcon, { brand: brand, className: cn('size-5', iconClassName) }) }));
|
|
54
|
+
}
|
|
55
|
+
/** Monochrome Chrome mark with the `Icon` call shape the settings rail expects. */
|
|
56
|
+
export function ChromeRailIcon({ className }) {
|
|
57
|
+
return _jsx(BrowserIcon, { brand: "chrome", tone: "current", className: className });
|
|
58
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** @internal Kortix apps only. No semver: it may change in any release. */
|
|
2
|
+
/**
|
|
3
|
+
* Which call to action the Chrome card shows. Pure, so the three states
|
|
4
|
+
* (not installed, installed, connected) are testable without a browser.
|
|
5
|
+
*/
|
|
6
|
+
export type ChromeCardState = 'connected' | 'unsupported' | 'checking' | 'installed' | 'notInstalled';
|
|
7
|
+
export declare function chromeCardState(input: {
|
|
8
|
+
/** THIS browser is connected. Other connected browsers do not count. */
|
|
9
|
+
thisBrowserConnected: boolean;
|
|
10
|
+
/** `unsupported`: Safari, Firefox, the desktop shell. */
|
|
11
|
+
environment: 'checking' | 'supported' | 'unsupported';
|
|
12
|
+
/** The first ping has not answered yet. */
|
|
13
|
+
checking: boolean;
|
|
14
|
+
/** The extension answered a ping, or a browser connected. */
|
|
15
|
+
installed: boolean;
|
|
16
|
+
}): ChromeCardState;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function chromeCardState(input) {
|
|
2
|
+
if (input.thisBrowserConnected)
|
|
3
|
+
return 'connected';
|
|
4
|
+
if (input.environment === 'unsupported')
|
|
5
|
+
return 'unsupported';
|
|
6
|
+
if (input.checking)
|
|
7
|
+
return 'checking';
|
|
8
|
+
return input.installed ? 'installed' : 'notInstalled';
|
|
9
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/** @internal Kortix apps only. No semver: it may change in any release. */
|
|
2
|
+
import { type ChromeConnection } from '@kortix/sdk';
|
|
3
|
+
type Environment = 'checking' | 'supported' | 'unsupported';
|
|
4
|
+
/**
|
|
5
|
+
* The live state of the three steps: the extension is installed (ping every
|
|
6
|
+
* 2 s), the extension is signed in, and the new browser shows in the list
|
|
7
|
+
* (poll every 3 s). Mount it only while the steps are on screen.
|
|
8
|
+
*/
|
|
9
|
+
export type ChromeConnectState = ReturnType<typeof useChromeConnect>;
|
|
10
|
+
/**
|
|
11
|
+
* `fresh`: the person adds ANOTHER browser. This browser's own extension state
|
|
12
|
+
* does not count: no ping, and only a browser that was not in the list when the
|
|
13
|
+
* dialog opened completes it.
|
|
14
|
+
*/
|
|
15
|
+
export declare function useChromeConnect({ fresh }?: {
|
|
16
|
+
fresh?: boolean;
|
|
17
|
+
}): {
|
|
18
|
+
environment: Environment;
|
|
19
|
+
/** The first ping has not answered yet. */
|
|
20
|
+
checking: boolean;
|
|
21
|
+
installed: boolean;
|
|
22
|
+
signedIn: boolean;
|
|
23
|
+
connected: ChromeConnection | undefined;
|
|
24
|
+
connect: import("@tanstack/react-query").UseMutationResult<import("./extension.js").ExtensionConnectResult, Error, void, unknown>;
|
|
25
|
+
};
|
|
26
|
+
/** The Chrome mark on a small white tile, for a button label. */
|
|
27
|
+
export declare function ChromeButtonMark(): import("react").JSX.Element;
|
|
28
|
+
export declare function ChromeOnlineDot({ online, className }: {
|
|
29
|
+
online: boolean;
|
|
30
|
+
className?: string;
|
|
31
|
+
}): import("react").JSX.Element;
|
|
32
|
+
/** Copies the link that opens Settings → Kortix in Chrome, for a browser that cannot run the extension. */
|
|
33
|
+
export declare function ChromeCopyLink({ size, className }: {
|
|
34
|
+
size?: 'sm' | 'lg';
|
|
35
|
+
className?: string;
|
|
36
|
+
}): import("react").JSX.Element;
|
|
37
|
+
/**
|
|
38
|
+
* The action that moves this browser forward: Connect once the extension is
|
|
39
|
+
* there, otherwise Connect plus "How to install" (or "Add to Chrome" once the
|
|
40
|
+
* Web Store listing is public). Renders nothing for a connected browser.
|
|
41
|
+
*/
|
|
42
|
+
export declare function ChromeInstallActions({ state, size, className, showGuide, }: {
|
|
43
|
+
state: ChromeConnectState;
|
|
44
|
+
size?: 'sm' | 'lg';
|
|
45
|
+
className?: string;
|
|
46
|
+
/** The "How to install" link. Off where the page already links the docs. */
|
|
47
|
+
showGuide?: boolean;
|
|
48
|
+
}): import("react").JSX.Element | null;
|
|
49
|
+
/**
|
|
50
|
+
* The three steps and the one action that moves them. Used in the connect
|
|
51
|
+
* dialog and, with no browser connected yet, inline in Settings → Kortix in
|
|
52
|
+
* Chrome (`showActions={false}`: the page header holds the action there).
|
|
53
|
+
*/
|
|
54
|
+
export declare function ChromeConnectSteps({ state, onDone, showActions, }: {
|
|
55
|
+
state: ChromeConnectState;
|
|
56
|
+
onDone?: () => void;
|
|
57
|
+
showActions?: boolean;
|
|
58
|
+
}): import("react").JSX.Element;
|
|
59
|
+
/**
|
|
60
|
+
* "Add Kortix to Chrome": add the Kortix extension to Chrome, sign it in, and
|
|
61
|
+
* watch the browser appear. `fresh`: add ANOTHER browser. Same frame as
|
|
62
|
+
* `ComputerConnectModal`.
|
|
63
|
+
*/
|
|
64
|
+
export declare function ChromeConnectModal({ open, onOpenChange, fresh, }: {
|
|
65
|
+
open: boolean;
|
|
66
|
+
onOpenChange: (open: boolean) => void;
|
|
67
|
+
fresh?: boolean;
|
|
68
|
+
}): import("react").JSX.Element;
|
|
69
|
+
export {};
|