@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.
Files changed (567) hide show
  1. package/README.md +2 -2
  2. package/dist/_vendor/kortix-shared.js +116 -3
  3. package/dist/_vendor/shared/app-config.d.ts +175 -0
  4. package/dist/_vendor/shared/artifact-comments.d.ts +235 -0
  5. package/dist/_vendor/shared/channel-descriptors.d.ts +96 -0
  6. package/dist/_vendor/shared/channel-message.d.ts +45 -5
  7. package/dist/_vendor/shared/index.d.ts +2 -0
  8. package/dist/_vendor/shared/space-slug.d.ts +37 -0
  9. package/dist/access/access/access-detail-shell.js +1 -1
  10. package/dist/access/access/principal-picker.d.ts +11 -0
  11. package/dist/access/access/principal-picker.js +3 -2
  12. package/dist/apps/app-preview-pool.d.ts +7 -2
  13. package/dist/apps/app-preview-pool.js +30 -7
  14. package/dist/apps/app-shared.d.ts +22 -15
  15. package/dist/apps/app-shared.js +37 -19
  16. package/dist/apps/index.d.ts +2 -2
  17. package/dist/apps/index.js +2 -2
  18. package/dist/artifacts/artifact-frame.d.ts +16 -0
  19. package/dist/artifacts/artifact-frame.js +55 -0
  20. package/dist/artifacts/artifact-session.d.ts +18 -0
  21. package/dist/artifacts/artifact-session.js +101 -0
  22. package/dist/artifacts/frame-policy.d.ts +30 -0
  23. package/dist/artifacts/frame-policy.js +61 -0
  24. package/dist/artifacts/index.d.ts +3 -0
  25. package/dist/artifacts/index.js +5 -0
  26. package/dist/browser/sandbox-browser-chrome.d.ts +4 -1
  27. package/dist/browser/sandbox-browser-chrome.js +2 -2
  28. package/dist/customize/agents/agent-grant-pages.d.ts +5 -1
  29. package/dist/customize/agents/agent-grant-pages.js +30 -4
  30. package/dist/customize/agents/agent-page.js +3 -1
  31. package/dist/customize/agents/agent-policy-sets.d.ts +43 -0
  32. package/dist/customize/agents/agent-policy-sets.js +72 -0
  33. package/dist/customize/agents/agent-triggers-section.js +2 -1
  34. package/dist/customize/connectors/add-mcp/add-mcp-server-dialog.d.ts +6 -1
  35. package/dist/customize/connectors/add-mcp/add-mcp-server-dialog.js +10 -4
  36. package/dist/customize/connectors/agent-access.d.ts +35 -0
  37. package/dist/customize/connectors/agent-access.js +77 -0
  38. package/dist/customize/connectors/catalog/browse-sections.d.ts +2 -29
  39. package/dist/customize/connectors/catalog/browse-sections.js +7 -74
  40. package/dist/customize/connectors/catalog/catalog-entry.d.ts +18 -37
  41. package/dist/customize/connectors/catalog/catalog-entry.js +28 -40
  42. package/dist/customize/connectors/catalog/connector-browse.d.ts +3 -32
  43. package/dist/customize/connectors/catalog/connector-browse.js +19 -50
  44. package/dist/customize/connectors/catalog/use-catalog.d.ts +20 -59
  45. package/dist/customize/connectors/catalog/use-catalog.js +48 -175
  46. package/dist/customize/connectors/connector-identity.d.ts +9 -11
  47. package/dist/customize/connectors/connector-identity.js +13 -42
  48. package/dist/customize/connectors/connector-moves-banner.d.ts +2 -1
  49. package/dist/customize/connectors/connector-moves-banner.js +4 -6
  50. package/dist/customize/connectors/connector-routes.d.ts +21 -9
  51. package/dist/customize/connectors/connector-routes.js +29 -20
  52. package/dist/customize/connectors/connectors-page.js +53 -82
  53. package/dist/customize/connectors/detail/app-page.js +226 -98
  54. package/dist/customize/connectors/detail/computer-app-page.d.ts +16 -0
  55. package/dist/customize/connectors/detail/computer-app-page.js +39 -0
  56. package/dist/customize/connectors/detail/connector-accounts.js +3 -1
  57. package/dist/customize/connectors/detail/connector-advanced-tools.d.ts +4 -1
  58. package/dist/customize/connectors/detail/connector-advanced-tools.js +2 -2
  59. package/dist/customize/connectors/detail/connector-agents.d.ts +14 -0
  60. package/dist/customize/connectors/detail/connector-agents.js +69 -0
  61. package/dist/customize/connectors/detail/connector-detail-tabs.js +2 -1
  62. package/dist/customize/connectors/detail/connector-move-row.d.ts +8 -5
  63. package/dist/customize/connectors/detail/connector-move-row.js +23 -14
  64. package/dist/customize/connectors/detail/connector-page.d.ts +4 -1
  65. package/dist/customize/connectors/detail/connector-page.js +14 -10
  66. package/dist/customize/connectors/detail/connector-policy-sets.d.ts +28 -0
  67. package/dist/customize/connectors/detail/connector-policy-sets.js +203 -0
  68. package/dist/customize/connectors/detail/connector-settings.d.ts +4 -1
  69. package/dist/customize/connectors/detail/connector-settings.js +7 -3
  70. package/dist/customize/connectors/detail/connector-status.d.ts +19 -6
  71. package/dist/customize/connectors/detail/connector-status.js +34 -10
  72. package/dist/customize/connectors/detail/connector-tabs.d.ts +4 -1
  73. package/dist/customize/connectors/detail/connector-tabs.js +8 -2
  74. package/dist/customize/connectors/detail/connector-tools.d.ts +3 -3
  75. package/dist/customize/connectors/detail/connector-tools.js +105 -48
  76. package/dist/customize/connectors/detail/email-inboxes.d.ts +43 -0
  77. package/dist/customize/connectors/detail/email-inboxes.js +184 -0
  78. package/dist/customize/connectors/detail/provider-info.d.ts +1 -1
  79. package/dist/customize/connectors/detail/provider-info.js +2 -2
  80. package/dist/customize/connectors/detail/status-badge.d.ts +1 -1
  81. package/dist/customize/connectors/detail/status-badge.js +4 -5
  82. package/dist/customize/connectors/detail/use-connector-detail.d.ts +6 -0
  83. package/dist/customize/connectors/detail/use-connector-detail.js +14 -4
  84. package/dist/customize/connectors/install/install-dialog.d.ts +23 -0
  85. package/dist/customize/connectors/install/install-dialog.js +40 -0
  86. package/dist/customize/connectors/install/install.d.ts +13 -2
  87. package/dist/customize/connectors/install/install.js +9 -4
  88. package/dist/customize/connectors/install/use-install.d.ts +19 -2
  89. package/dist/customize/connectors/install/use-install.js +65 -37
  90. package/dist/customize/connectors/install/way-kind.d.ts +5 -0
  91. package/dist/customize/connectors/install/way-kind.js +16 -0
  92. package/dist/customize/connectors/provider-label.d.ts +2 -1
  93. package/dist/customize/connectors/provider-label.js +13 -3
  94. package/dist/customize/connectors/tools/pattern-rule-draft.d.ts +4 -0
  95. package/dist/customize/connectors/tools/pattern-rule-draft.js +12 -3
  96. package/dist/customize/connectors/tools/policy-sets.d.ts +27 -0
  97. package/dist/customize/connectors/tools/policy-sets.js +41 -0
  98. package/dist/customize/connectors/tools/tool-groups.d.ts +32 -9
  99. package/dist/customize/connectors/tools/tool-groups.js +78 -16
  100. package/dist/customize/connectors/tools/tool-policy-control.d.ts +11 -10
  101. package/dist/customize/connectors/tools/tool-policy-control.js +15 -16
  102. package/dist/customize/connectors/tools/tool-policy-labels.d.ts +6 -5
  103. package/dist/customize/connectors/tools/tool-policy-labels.js +17 -16
  104. package/dist/customize/connectors/tools/tool-policy.d.ts +50 -4
  105. package/dist/customize/connectors/tools/tool-policy.js +74 -8
  106. package/dist/customize/connectors/use-agent-access.d.ts +85 -0
  107. package/dist/customize/connectors/use-agent-access.js +72 -0
  108. package/dist/customize/migrate-to-v2/index.d.ts +1 -2
  109. package/dist/customize/migrate-to-v2/index.js +1 -2
  110. package/dist/customize/migrate-to-v2/migration-prompt.d.ts +12 -25
  111. package/dist/customize/migrate-to-v2/migration-prompt.js +34 -236
  112. package/dist/customize/migrate-to-v2/upgrade-defs.d.ts +1 -1
  113. package/dist/customize/migrate-to-v2/upgrade-defs.js +7 -6
  114. package/dist/customize/migrate-to-v2/upgrade-view.js +7 -7
  115. package/dist/customize/migrate-to-v2/use-run-upgrade.d.ts +3 -3
  116. package/dist/customize/providers/provider-accordion.js +17 -2
  117. package/dist/customize/sections/component/channel-access-panel.d.ts +16 -0
  118. package/dist/customize/sections/component/channel-access-panel.js +146 -0
  119. package/dist/customize/sections/component/channel-connect-hero.d.ts +3 -2
  120. package/dist/customize/sections/component/channel-connect-hero.js +3 -2
  121. package/dist/customize/sections/component/channel-hero-frame.d.ts +31 -0
  122. package/dist/customize/sections/component/channel-hero-frame.js +40 -0
  123. package/dist/customize/sections/component/channel-mocks.d.ts +6 -0
  124. package/dist/customize/sections/component/channel-mocks.js +46 -0
  125. package/dist/customize/sections/component/channel-row.d.ts +13 -3
  126. package/dist/customize/sections/component/channel-row.js +10 -4
  127. package/dist/customize/sections/component/email-connect-form.d.ts +27 -0
  128. package/dist/customize/sections/component/email-connect-form.js +183 -0
  129. package/dist/customize/sections/component/slack-connect-card.d.ts +7 -0
  130. package/dist/customize/sections/component/slack-connect-card.js +2 -3
  131. package/dist/customize/sections/component/teams-connect-card.d.ts +7 -0
  132. package/dist/customize/sections/component/teams-connect-card.js +2 -3
  133. package/dist/customize/sections/component/telegram-channel-row.js +21 -28
  134. package/dist/customize/sections/connectors-view.d.ts +1 -15
  135. package/dist/customize/sections/connectors-view.js +81 -314
  136. package/dist/customize/sections/view/agent-editor-catalog.js +10 -0
  137. package/dist/customize/sections/view/channels-view.d.ts +6 -1
  138. package/dist/customize/sections/view/channels-view.js +72 -81
  139. package/dist/customize/sections/view/gateway/gateway-overview.js +10 -2
  140. package/dist/customize/settings/rail.js +9 -0
  141. package/dist/customize/settings/settings-tabs.d.ts +1 -1
  142. package/dist/customize/settings/settings-tabs.js +1 -0
  143. package/dist/customize/settings/tabs/chrome-connections-tab.d.ts +6 -0
  144. package/dist/customize/settings/tabs/chrome-connections-tab.js +99 -0
  145. package/dist/customize/settings/tabs/experimental-tab.js +35 -16
  146. package/dist/customize/shared/catalog/catalog-empty-state.d.ts +4 -15
  147. package/dist/customize/shared/catalog/catalog-empty-state.js +9 -7
  148. package/dist/customize/shared/channels-switch-dialog.d.ts +18 -0
  149. package/dist/customize/shared/channels-switch-dialog.js +30 -0
  150. package/dist/customize/shared/feature-gate-screen.js +27 -9
  151. package/dist/customize/shared/use-customize-prefetch.d.ts +2 -3
  152. package/dist/customize/shared/use-customize-prefetch.js +9 -27
  153. package/dist/customize/triggers/schedule/post-to-field.d.ts +18 -0
  154. package/dist/customize/triggers/schedule/post-to-field.js +49 -0
  155. package/dist/customize/triggers/schedule/schedule-copy.d.ts +10 -6
  156. package/dist/customize/triggers/schedule/schedule-copy.js +42 -11
  157. package/dist/customize/triggers/schedule/schedule-detail-sheet.js +2 -1
  158. package/dist/customize/triggers/schedule/trigger-composer-logic.d.ts +22 -0
  159. package/dist/customize/triggers/schedule/trigger-composer-logic.js +25 -0
  160. package/dist/customize/triggers/schedule/trigger-composer.d.ts +5 -0
  161. package/dist/customize/triggers/schedule/trigger-composer.js +23 -14
  162. package/dist/customize/triggers/schedule/trigger-edit-logic.js +3 -0
  163. package/dist/customize/triggers/schedule/trigger-filter.js +1 -1
  164. package/dist/customize/triggers/schedule/trigger-runs-logic.d.ts +2 -2
  165. package/dist/customize/triggers/schedule/trigger-runs-panel.js +1 -0
  166. package/dist/customize/triggers/schedule/trigger-toast.js +2 -1
  167. package/dist/customize/triggers/schedule-view.js +5 -2
  168. package/dist/files/index.d.ts +1 -0
  169. package/dist/files/index.js +1 -0
  170. package/dist/files/project/change-request-recovery.d.ts +1 -26
  171. package/dist/files/project/change-request-recovery.js +1 -59
  172. package/dist/files/project/components/change-request-detail-dialog.js +13 -3
  173. package/dist/files/project/components/drive-explorer.js +15 -15
  174. package/dist/files/project/components/drive-toolbar.d.ts +16 -2
  175. package/dist/files/project/components/drive-toolbar.js +14 -5
  176. package/dist/files/project/hooks/use-change-request-recovery.js +3 -19
  177. package/dist/files/project/hooks/use-change-requests.d.ts +1 -0
  178. package/dist/files/project/hooks/use-change-requests.js +11 -2
  179. package/dist/files/renderers/image-frame.d.ts +48 -0
  180. package/dist/files/renderers/image-frame.js +59 -0
  181. package/dist/files/renderers/image-renderer.d.ts +11 -1
  182. package/dist/files/renderers/image-renderer.js +13 -3
  183. package/dist/files/renderers/pdf/pdf-clipboard.d.ts +2 -0
  184. package/dist/files/renderers/pdf/pdf-clipboard.js +21 -0
  185. package/dist/files/renderers/pdf/pdf-viewer.js +4 -2
  186. package/dist/files/renderers/show-content-renderer.d.ts +9 -1
  187. package/dist/files/renderers/show-content-renderer.js +56 -14
  188. package/dist/files/runtime/file-source.js +2 -0
  189. package/dist/files/runtime/hooks/use-binary-blob.d.ts +10 -1
  190. package/dist/files/runtime/hooks/use-binary-blob.js +10 -4
  191. package/dist/files/runtime/hooks/use-shared-image.d.ts +41 -0
  192. package/dist/files/runtime/hooks/use-shared-image.js +177 -0
  193. package/dist/files/viewer/file-content-renderer.d.ts +22 -1
  194. package/dist/files/viewer/file-content-renderer.js +50 -7
  195. package/dist/files/viewer/file-header.d.ts +7 -3
  196. package/dist/files/viewer/file-header.js +20 -11
  197. package/dist/files/viewer/file-preview-modal.d.ts +1 -1
  198. package/dist/files/viewer/file-preview-modal.js +10 -22
  199. package/dist/files/viewer/file-source.d.ts +13 -0
  200. package/dist/files/viewer/use-file-content-state.d.ts +2 -0
  201. package/dist/files/viewer/use-file-content-state.js +28 -10
  202. package/dist/files/viewer/viewer-actions.d.ts +3 -1
  203. package/dist/files/viewer/viewer-actions.js +2 -2
  204. package/dist/hooks/use-media-query.d.ts +1 -0
  205. package/dist/hooks/use-mobile.d.ts +5 -0
  206. package/dist/hooks/use-mobile.js +8 -0
  207. package/dist/i18n/en.d.ts +1062 -85
  208. package/dist/i18n/en.js +1078 -101
  209. package/dist/i18n/ui-catalog/localize-ui-catalog.js +4 -0
  210. package/dist/i18n/ui-catalog/remaining-ui-translation-keys.generated.js +15 -3
  211. package/dist/index.d.ts +2 -2
  212. package/dist/index.js +2 -2
  213. package/dist/internal/account-hub/account-settings-sidebar.js +1 -1
  214. package/dist/internal/account-hub/hub-sheet.d.ts +9 -1
  215. package/dist/internal/account-hub/hub-sheet.js +21 -5
  216. package/dist/internal/account-hub/sections.d.ts +1 -1
  217. package/dist/internal/account-hub/sections.js +2 -1
  218. package/dist/internal/apps-and-extensions/apps-modal.d.ts +9 -0
  219. package/dist/internal/apps-and-extensions/apps-modal.js +107 -0
  220. package/dist/internal/auth/auth-card-shell.js +3 -3
  221. package/dist/internal/chrome/browser-icon.d.ts +24 -0
  222. package/dist/internal/chrome/browser-icon.js +58 -0
  223. package/dist/internal/chrome/chrome-card-state.d.ts +16 -0
  224. package/dist/internal/chrome/chrome-card-state.js +9 -0
  225. package/dist/internal/chrome/chrome-connect.d.ts +69 -0
  226. package/dist/internal/chrome/chrome-connect.js +178 -0
  227. package/dist/internal/chrome/chrome-mock.d.ts +4 -0
  228. package/dist/internal/chrome/chrome-mock.js +15 -0
  229. package/dist/internal/chrome/chrome-names.d.ts +15 -0
  230. package/dist/internal/chrome/chrome-names.js +35 -0
  231. package/dist/internal/chrome/extension.d.ts +47 -0
  232. package/dist/internal/chrome/extension.js +91 -0
  233. package/dist/internal/chrome/use-chrome-offered.d.ts +11 -0
  234. package/dist/internal/chrome/use-chrome-offered.js +22 -0
  235. package/dist/internal/components/agent-mark.js +5 -2
  236. package/dist/internal/connector-logo/connector-logo-source.d.ts +64 -0
  237. package/dist/internal/connector-logo/connector-logo-source.js +49 -0
  238. package/dist/internal/connector-logo/connector-logo.d.ts +39 -0
  239. package/dist/internal/connector-logo/connector-logo.js +56 -0
  240. package/dist/internal/connector-logo/connector-mark-files.d.ts +11 -0
  241. package/dist/internal/connector-logo/connector-mark-files.js +35 -0
  242. package/dist/internal/files/file-read-retry.d.ts +13 -0
  243. package/dist/internal/files/file-read-retry.js +23 -3
  244. package/dist/internal/files/session-drive-files.d.ts +5 -1
  245. package/dist/internal/files/session-drive-files.js +7 -2
  246. package/dist/internal/hooks/channels/use-channels-installations.d.ts +32 -5
  247. package/dist/internal/hooks/channels/use-channels-installations.js +55 -7
  248. package/dist/internal/hooks/channels/use-email-inboxes.d.ts +19 -0
  249. package/dist/internal/hooks/channels/use-email-inboxes.js +48 -0
  250. package/dist/internal/hooks/connectors/use-add-account.js +1 -1
  251. package/dist/internal/hooks/index.d.ts +1 -1
  252. package/dist/internal/hooks/index.js +1 -1
  253. package/dist/internal/hooks/projects/use-new-project-session.d.ts +9 -0
  254. package/dist/internal/hooks/projects/use-new-project-session.js +28 -12
  255. package/dist/internal/hooks/use-auto-scroll.d.ts +8 -1
  256. package/dist/internal/hooks/use-auto-scroll.js +4 -4
  257. package/dist/internal/icons/edge.d.ts +5 -0
  258. package/dist/internal/icons/edge.js +10 -0
  259. package/dist/internal/icons/telegram.d.ts +5 -0
  260. package/dist/internal/icons/telegram.js +6 -1
  261. package/dist/internal/layout/nav-hover-card.d.ts +35 -0
  262. package/dist/internal/layout/nav-hover-card.js +84 -0
  263. package/dist/internal/layout/project-nav-row.d.ts +3 -1
  264. package/dist/internal/layout/project-nav-row.js +3 -2
  265. package/dist/internal/layout/project-page-header.d.ts +4 -2
  266. package/dist/internal/layout/project-page-header.js +4 -3
  267. package/dist/internal/layout/project-settings-nav.js +59 -2
  268. package/dist/internal/lib/browser-error-noise.d.ts +1 -1
  269. package/dist/internal/lib/browser-error-noise.js +1 -1
  270. package/dist/internal/lib/browser-noise/rules/extensions.js +17 -3
  271. package/dist/internal/lib/browser-noise/rules/injected-scripts.d.ts +7 -0
  272. package/dist/internal/lib/browser-noise/rules/injected-scripts.js +15 -0
  273. package/dist/internal/lib/detect-os.d.ts +43 -0
  274. package/dist/internal/lib/detect-os.js +70 -0
  275. package/dist/internal/lib/manifest-version.d.ts +1 -1
  276. package/dist/internal/lib/manifest-version.js +2 -2
  277. package/dist/internal/lib/memory-href.d.ts +16 -0
  278. package/dist/internal/lib/memory-href.js +46 -0
  279. package/dist/internal/lib/use-project-feature-flags.js +13 -9
  280. package/dist/internal/lib/utils/heic-convert.d.ts +1 -1
  281. package/dist/internal/lib/utils/heic-convert.js +3 -4
  282. package/dist/internal/lib/web-notifications.d.ts +20 -0
  283. package/dist/internal/lib/web-notifications.js +48 -4
  284. package/dist/internal/notifications/notification-bell.d.ts +4 -1
  285. package/dist/internal/notifications/notification-bell.js +2 -2
  286. package/dist/internal/selection/selection-bar.d.ts +2 -1
  287. package/dist/internal/selection/selection-bar.js +1 -1
  288. package/dist/internal/stores/apps-modal-store.d.ts +8 -0
  289. package/dist/internal/stores/apps-modal-store.js +6 -0
  290. package/dist/internal/stores/composer-prefill-store.d.ts +12 -5
  291. package/dist/internal/stores/file-preview-store.d.ts +29 -2
  292. package/dist/internal/stores/file-preview-store.js +19 -1
  293. package/dist/internal/stores/kortix-computer-store.js +3 -0
  294. package/dist/internal/stores/sidebar-nav-store.d.ts +1 -1
  295. package/dist/internal/stores/sidebar-nav-store.js +3 -1
  296. package/dist/lib/routes.d.ts +13 -1
  297. package/dist/lib/routes.js +13 -0
  298. package/dist/markdown/index.d.ts +2 -1
  299. package/dist/markdown/index.js +2 -1
  300. package/dist/markdown/setup-links/approval-decision.d.ts +1 -0
  301. package/dist/markdown/setup-links/approval-decision.js +9 -3
  302. package/dist/markdown/setup-links/connector-handshake.d.ts +3 -1
  303. package/dist/markdown/setup-links/connector-handshake.js +12 -10
  304. package/dist/markdown/setup-links/secret-intake-form.d.ts +0 -10
  305. package/dist/markdown/setup-links/secret-intake-form.js +1 -1
  306. package/dist/markdown/setup-links/show-connect-hero.d.ts +28 -0
  307. package/dist/markdown/setup-links/show-connect-hero.js +91 -0
  308. package/dist/markdown/unified-markdown.js +5 -5
  309. package/dist/primitives/badge.d.ts +1 -1
  310. package/dist/primitives/badge.js +2 -0
  311. package/dist/primitives/disclosure.js +14 -2
  312. package/dist/primitives/empty-art.d.ts +12 -0
  313. package/dist/primitives/empty-art.js +11 -0
  314. package/dist/primitives/empty-state.d.ts +2 -2
  315. package/dist/primitives/empty-state.js +6 -5
  316. package/dist/primitives/mermaid-renderer.d.ts +2 -0
  317. package/dist/primitives/mermaid-renderer.js +21 -15
  318. package/dist/primitives/resizable.js +6 -1
  319. package/dist/primitives/resize-seam.d.ts +11 -0
  320. package/dist/primitives/resize-seam.js +12 -0
  321. package/dist/primitives/sidebar-panel.js +4 -7
  322. package/dist/primitives/tabs.d.ts +14 -1
  323. package/dist/primitives/tabs.js +1 -1
  324. package/dist/providers/ui-provider.d.ts +9 -0
  325. package/dist/session/composer/ComposerAboveCard.d.ts +1 -1
  326. package/dist/session/composer/ComposerAboveCard.js +2 -2
  327. package/dist/session/composer/ComposerCard.d.ts +1 -1
  328. package/dist/session/composer/ComposerCard.js +3 -3
  329. package/dist/session/composer/agent-selector.d.ts +13 -1
  330. package/dist/session/composer/agent-selector.js +25 -5
  331. package/dist/session/composer/composer-agent-access.d.ts +15 -0
  332. package/dist/session/composer/composer-agent-access.js +27 -0
  333. package/dist/session/composer/composer-chat-input.d.ts +8 -2
  334. package/dist/session/composer/composer-chat-input.js +8 -6
  335. package/dist/session/composer/composer-logic.d.ts +16 -0
  336. package/dist/session/composer/composer-logic.js +12 -0
  337. package/dist/session/composer/composer-underbar.d.ts +3 -1
  338. package/dist/session/composer/composer-underbar.js +4 -3
  339. package/dist/session/composer/composer.d.ts +15 -1
  340. package/dist/session/composer/composer.js +19 -1
  341. package/dist/session/composer/draft/composer-draft.d.ts +6 -2
  342. package/dist/session/composer/draft/composer-draft.js +5 -1
  343. package/dist/session/composer/reasoning-effort-selector.js +1 -1
  344. package/dist/session/models/chatgpt-connection-button.d.ts +11 -0
  345. package/dist/session/models/chatgpt-connection-button.js +54 -0
  346. package/dist/session/models/model-selector.js +5 -2
  347. package/dist/session/models/use-model-connection-gate.d.ts +5 -5
  348. package/dist/session/models/use-model-connection-gate.js +5 -5
  349. package/dist/session/outcomes/jump-to-outcome.d.ts +10 -0
  350. package/dist/session/outcomes/jump-to-outcome.js +11 -0
  351. package/dist/session/outcomes/session-outcomes-bridge.d.ts +14 -0
  352. package/dist/session/outcomes/session-outcomes-bridge.js +12 -0
  353. package/dist/session/outcomes/session-outcomes-provider.d.ts +3 -1
  354. package/dist/session/outcomes/session-outcomes-provider.js +33 -3
  355. package/dist/session/panel/easy/app-preview.d.ts +10 -0
  356. package/dist/session/panel/easy/app-preview.js +31 -12
  357. package/dist/session/panel/easy/change-requests-card.d.ts +7 -0
  358. package/dist/session/panel/easy/change-requests-card.js +17 -0
  359. package/dist/session/panel/easy/easy-panel-logic.js +7 -1
  360. package/dist/session/panel/easy/easy-panel.js +5 -2
  361. package/dist/session/panel/easy/file-preview.js +1 -1
  362. package/dist/session/panel/easy/outputs-card.d.ts +2 -1
  363. package/dist/session/panel/easy/outputs-card.js +3 -2
  364. package/dist/session/panel/mobile-tool-drawer.js +7 -1
  365. package/dist/session/panel/session-audit-panel.js +9 -2
  366. package/dist/session/panel/session-audit-shared.js +3 -1
  367. package/dist/session/panel/session-detail-panel.js +9 -3
  368. package/dist/session/panel/session-files-explorer.d.ts +9 -0
  369. package/dist/session/panel/session-files-explorer.js +12 -3
  370. package/dist/session/panel/session-panel-provider.d.ts +15 -1
  371. package/dist/session/panel/session-panel-provider.js +32 -7
  372. package/dist/session/panel/shared/derive-panels.d.ts +8 -1
  373. package/dist/session/panel/shared/derive-panels.js +12 -2
  374. package/dist/session/panel/shared/output-priority.js +2 -0
  375. package/dist/session/participants/session-participants.d.ts +8 -2
  376. package/dist/session/participants/session-participants.js +11 -4
  377. package/dist/session/prompts/approval-request.d.ts +5 -0
  378. package/dist/session/prompts/approval-request.js +9 -1
  379. package/dist/session/prompts/session-approval-review.d.ts +9 -0
  380. package/dist/session/prompts/session-approval-review.js +18 -0
  381. package/dist/session/status/session-error-banner.js +2 -49
  382. package/dist/session/status/session-starting-loader.d.ts +14 -2
  383. package/dist/session/status/session-starting-loader.js +16 -4
  384. package/dist/session/thread/after-first-prompt.d.ts +7 -0
  385. package/dist/session/thread/after-first-prompt.js +8 -0
  386. package/dist/session/thread/detect-command.d.ts +12 -0
  387. package/dist/session/thread/detect-command.js +20 -0
  388. package/dist/session/thread/session-chat.d.ts +3 -1
  389. package/dist/session/thread/session-chat.js +377 -252
  390. package/dist/session/thread/session-thread.d.ts +15 -1
  391. package/dist/session/thread/session-thread.js +20 -3
  392. package/dist/session/thread/session-transcript-class.d.ts +5 -1
  393. package/dist/session/thread/session-transcript-class.js +5 -1
  394. package/dist/session/thread/thread-boot-rows.d.ts +36 -0
  395. package/dist/session/thread/thread-boot-rows.js +89 -0
  396. package/dist/session/thread/transcript-rows.d.ts +31 -0
  397. package/dist/session/thread/transcript-rows.js +3 -0
  398. package/dist/session/thread/transcript.d.ts +0 -9
  399. package/dist/session/thread/transcript.js +104 -19
  400. package/dist/session/tool/shared/infrastructure-contexts.d.ts +28 -0
  401. package/dist/session/tool/shared/infrastructure-contexts.js +31 -3
  402. package/dist/session/tool/tool-part-renderer.d.ts +5 -4
  403. package/dist/session/tool/tool-part-renderer.js +8 -3
  404. package/dist/session/tool/tools/bash-tool.js +7 -6
  405. package/dist/session/tool/tools/channel-send-card.d.ts +1 -2
  406. package/dist/session/tool/tools/channel-send.d.ts +2 -1
  407. package/dist/session/tool/tools/codemode-tool.js +1 -1
  408. package/dist/session/tool/tools/connector-tools.js +1 -1
  409. package/dist/session/tool/tools/image-gen-tool.d.ts +1 -1
  410. package/dist/session/tool/tools/image-gen-tool.js +241 -53
  411. package/dist/session/tool/tools/show-tool.js +19 -8
  412. package/dist/session/turn/channel-brand.d.ts +8 -3
  413. package/dist/session/turn/channel-brand.js +20 -4
  414. package/dist/session/turn/message-author.d.ts +8 -0
  415. package/dist/session/turn/message-author.js +24 -0
  416. package/dist/session/turn/message-row.d.ts +52 -0
  417. package/dist/session/turn/message-row.js +44 -0
  418. package/dist/session/turn/plan-anchor.d.ts +1 -1
  419. package/dist/session/turn/plan-anchor.js +1 -1
  420. package/dist/session/turn/user-message.d.ts +14 -6
  421. package/dist/session/turn/user-message.js +35 -15
  422. package/dist/styles.css +1 -1
  423. package/dist/workspace/home/access-requests-bell.d.ts +9 -2
  424. package/dist/workspace/home/access-requests-bell.js +20 -6
  425. package/dist/workspace/home/first-chat.d.ts +8 -21
  426. package/dist/workspace/home/first-chat.js +22 -72
  427. package/dist/workspace/index.d.ts +6 -0
  428. package/dist/workspace/index.js +6 -0
  429. package/dist/workspace/layout/project-home.d.ts +14 -2
  430. package/dist/workspace/layout/project-home.js +60 -21
  431. package/dist/workspace/layout/use-project-home-send.d.ts +9 -1
  432. package/dist/workspace/layout/use-project-home-send.js +82 -3
  433. package/dist/workspace/memory/body-doc.d.ts +17 -0
  434. package/dist/workspace/memory/body-doc.js +208 -0
  435. package/dist/workspace/memory/body-extensions.d.ts +38 -0
  436. package/dist/workspace/memory/body-extensions.js +103 -0
  437. package/dist/workspace/memory/company-memory-page.d.ts +8 -0
  438. package/dist/workspace/memory/company-memory-page.js +16 -0
  439. package/dist/workspace/memory/memory-all.d.ts +20 -0
  440. package/dist/workspace/memory/memory-all.js +27 -0
  441. package/dist/workspace/memory/memory-body.d.ts +19 -0
  442. package/dist/workspace/memory/memory-body.js +139 -0
  443. package/dist/workspace/memory/memory-empty.d.ts +13 -0
  444. package/dist/workspace/memory/memory-empty.js +28 -0
  445. package/dist/workspace/memory/memory-history.d.ts +27 -0
  446. package/dist/workspace/memory/memory-history.js +108 -0
  447. package/dist/workspace/memory/memory-labels.d.ts +16 -0
  448. package/dist/workspace/memory/memory-labels.js +47 -0
  449. package/dist/workspace/memory/memory-page-list.d.ts +34 -0
  450. package/dist/workspace/memory/memory-page-list.js +156 -0
  451. package/dist/workspace/memory/memory-reader.d.ts +58 -0
  452. package/dist/workspace/memory/memory-reader.js +123 -0
  453. package/dist/workspace/memory/memory-view.d.ts +21 -0
  454. package/dist/workspace/memory/memory-view.js +124 -0
  455. package/dist/workspace/memory/remember-popover.d.ts +19 -0
  456. package/dist/workspace/memory/remember-popover.js +61 -0
  457. package/dist/workspace/memory/remember-this.d.ts +12 -0
  458. package/dist/workspace/memory/remember-this.js +89 -0
  459. package/dist/workspace/memory/source-mark.d.ts +18 -0
  460. package/dist/workspace/memory/source-mark.js +79 -0
  461. package/dist/workspace/memory/used-memory-chip.d.ts +14 -0
  462. package/dist/workspace/memory/used-memory-chip.js +61 -0
  463. package/dist/workspace/new/advanced-fields.d.ts +2 -1
  464. package/dist/workspace/new/advanced-fields.js +2 -2
  465. package/dist/workspace/new/source-param.d.ts +1 -1
  466. package/dist/workspace/new/source-param.js +3 -1
  467. package/dist/workspace/new/use-create-workspace.d.ts +8 -10
  468. package/dist/workspace/new/use-create-workspace.js +3 -3
  469. package/dist/workspace/projects/onboarding/app-logo.d.ts +7 -2
  470. package/dist/workspace/projects/onboarding/app-logo.js +6 -13
  471. package/dist/workspace/projects/policies-panel.js +5 -3
  472. package/dist/workspace/review/review-actions.d.ts +4 -2
  473. package/dist/workspace/review/review-actions.js +8 -2
  474. package/dist/workspace/review/review-center.js +11 -7
  475. package/dist/workspace/review/review-detail.d.ts +10 -0
  476. package/dist/workspace/review/review-detail.js +101 -13
  477. package/dist/workspace/saved-session-skeleton.d.ts +2 -2
  478. package/dist/workspace/saved-session-skeleton.js +3 -3
  479. package/dist/workspace/session-workspace.js +15 -13
  480. package/dist/workspace/sessions/project-sessions-view.js +3 -2
  481. package/dist/workspace/sessions/session-label-badges.js +2 -1
  482. package/dist/workspace/sessions/sessions-toolbar.d.ts +3 -1
  483. package/dist/workspace/sessions/sessions-toolbar.js +2 -2
  484. package/dist/workspace/sidebar/footer/project-apps-nav.d.ts +5 -0
  485. package/dist/workspace/sidebar/footer/project-apps-nav.js +41 -2
  486. package/dist/workspace/sidebar/footer/project-artifacts-nav.d.ts +6 -0
  487. package/dist/workspace/sidebar/footer/project-artifacts-nav.js +22 -0
  488. package/dist/workspace/sidebar/footer/project-chrome-nav.d.ts +10 -0
  489. package/dist/workspace/sidebar/footer/project-chrome-nav.js +56 -0
  490. package/dist/workspace/sidebar/footer/project-manifest-upgrade-alert.js +13 -13
  491. package/dist/workspace/sidebar/footer/project-memory-nav.d.ts +7 -0
  492. package/dist/workspace/sidebar/footer/project-memory-nav.js +19 -0
  493. package/dist/workspace/sidebar/nav-row-meta.js +14 -2
  494. package/dist/workspace/sidebar/project-nav-items.js +3 -0
  495. package/dist/workspace/sidebar/project-session-list.js +68 -56
  496. package/dist/workspace/sidebar/project-sidebar.js +13 -2
  497. package/dist/workspace/sidebar/project-spaces-nav.d.ts +8 -0
  498. package/dist/workspace/sidebar/project-spaces-nav.js +69 -0
  499. package/dist/workspace/sidebar/session-group-order.d.ts +9 -0
  500. package/dist/workspace/sidebar/session-group-order.js +25 -0
  501. package/dist/workspace/sidebar/session-group-sections.d.ts +62 -0
  502. package/dist/workspace/sidebar/session-group-sections.js +267 -0
  503. package/dist/workspace/sidebar/session-list-chrome.d.ts +28 -0
  504. package/dist/workspace/sidebar/session-list-chrome.js +50 -0
  505. package/dist/workspace/spaces/channel-glyph.d.ts +5 -0
  506. package/dist/workspace/spaces/channel-glyph.js +6 -0
  507. package/dist/workspace/spaces/channel-setup.d.ts +16 -0
  508. package/dist/workspace/spaces/channel-setup.js +105 -0
  509. package/dist/workspace/spaces/channels-onboarding.d.ts +13 -0
  510. package/dist/workspace/spaces/channels-onboarding.js +37 -0
  511. package/dist/workspace/spaces/create-channel-dialog.d.ts +16 -0
  512. package/dist/workspace/spaces/create-channel-dialog.js +158 -0
  513. package/dist/workspace/spaces/private-channels-not-in.d.ts +9 -0
  514. package/dist/workspace/spaces/private-channels-not-in.js +69 -0
  515. package/dist/workspace/spaces/space-agents.d.ts +10 -0
  516. package/dist/workspace/spaces/space-agents.js +10 -0
  517. package/dist/workspace/spaces/space-details-dialog.d.ts +20 -0
  518. package/dist/workspace/spaces/space-details-dialog.js +176 -0
  519. package/dist/workspace/spaces/space-link-label.d.ts +49 -0
  520. package/dist/workspace/spaces/space-link-label.js +73 -0
  521. package/dist/workspace/spaces/space-links.d.ts +19 -0
  522. package/dist/workspace/spaces/space-links.js +230 -0
  523. package/dist/workspace/spaces/space-members.d.ts +46 -0
  524. package/dist/workspace/spaces/space-members.js +182 -0
  525. package/dist/workspace/spaces/space-roster.d.ts +15 -0
  526. package/dist/workspace/spaces/space-roster.js +44 -0
  527. package/dist/workspace/spaces/space-threads-tab.d.ts +56 -0
  528. package/dist/workspace/spaces/space-threads-tab.js +156 -0
  529. package/dist/workspace/spaces/space-timeline-view.d.ts +254 -0
  530. package/dist/workspace/spaces/space-timeline-view.js +235 -0
  531. package/dist/workspace/spaces/space-timeline.d.ts +106 -0
  532. package/dist/workspace/spaces/space-timeline.js +183 -0
  533. package/dist/workspace/spaces/space-triggers.d.ts +13 -0
  534. package/dist/workspace/spaces/space-triggers.js +78 -0
  535. package/dist/workspace/spaces/space-view.d.ts +37 -0
  536. package/dist/workspace/spaces/space-view.js +436 -0
  537. package/package.json +67 -36
  538. package/skills/kortix-ui/SKILL.md +3 -3
  539. package/skills/kortix-ui/references/custom-dashboard.md +3 -3
  540. package/skills/kortix-ui/references/modules.md +29 -5
  541. package/skills/kortix-ui/references/theming.md +1 -1
  542. package/dist/customize/connectors/catalog/merge-search.d.ts +0 -10
  543. package/dist/customize/connectors/catalog/merge-search.js +0 -26
  544. package/dist/customize/connectors/detail/find-easy-connect-app.d.ts +0 -29
  545. package/dist/customize/connectors/detail/find-easy-connect-app.js +0 -22
  546. package/dist/customize/migrate-to-v2/use-migrate-to-v2.d.ts +0 -9
  547. package/dist/customize/migrate-to-v2/use-migrate-to-v2.js +0 -24
  548. package/dist/customize/sections/connector-connection-header.d.ts +0 -36
  549. package/dist/customize/sections/connector-connection-header.js +0 -33
  550. package/dist/customize/sections/connector-connection-modal.d.ts +0 -34
  551. package/dist/customize/sections/connector-connection-modal.js +0 -72
  552. package/dist/customize/sections/discover-catalogue-card.d.ts +0 -19
  553. package/dist/customize/sections/discover-catalogue-card.js +0 -26
  554. package/dist/customize/sections/discover-catalogue-detail.d.ts +0 -15
  555. package/dist/customize/sections/discover-catalogue-detail.js +0 -24
  556. package/dist/customize/sections/discover-catalogue.d.ts +0 -17
  557. package/dist/customize/sections/discover-catalogue.js +0 -132
  558. package/dist/customize/sections/llm-provider/provider-access-menu.d.ts +0 -10
  559. package/dist/customize/sections/llm-provider/provider-access-menu.js +0 -23
  560. package/dist/files/project/components/drive-empty-art.d.ts +0 -2
  561. package/dist/files/project/components/drive-empty-art.js +0 -5
  562. package/dist/internal/hooks/use-media-query.d.ts +0 -2
  563. package/dist/internal/share/public-share-link-button.d.ts +0 -14
  564. package/dist/internal/share/public-share-link-button.js +0 -17
  565. package/dist/markdown/setup-links/app-credentials-form.d.ts +0 -12
  566. package/dist/markdown/setup-links/app-credentials-form.js +0 -115
  567. /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
- 'Converts the v1 kortix.toml into the governance-first kortix.yaml, refreshes platform-managed skills to the latest marketplace baseline, and opens a change request for review.': 'textc3d1545dd522',
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
- 'Migrate manifest to v2 (kortix.yaml)': 'textd85a383e851d',
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 — an admin has to grant it in kortix.yaml, and that grant is itself an edit somebody else has to merge.': 'texta9fe46474f33',
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 './internal/hooks/use-media-query.js';
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 './internal/hooks/use-media-query.js';
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: '/support', icon: QuestionIcon },
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
- return (_jsx(AccountHubSheetContext.Provider, { value: sheet, children: _jsxs(SplitSheet, { open: content !== null, onOpenChange: (next) => {
43
- if (!next)
44
- close();
45
- }, size: "md", children: [_jsx(SplitSheetMain, { children: children }), 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] }) }));
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, Linear's members table — no centred column. */
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-muted-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-muted-foreground transition-colors", children: t('privacyPolicy') }));
28
- return (_jsx("footer", { className: "text-muted-foreground/60 mx-auto max-w-[380px] px-6 pb-10 text-center text-sm text-balance", children: variant === 'continue'
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 {};