@vertesia/ui 1.0.0 → 1.1.0-dev.20260427.060440Z
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/lib/esm/core/components/ComboBox.js +23 -24
- package/lib/esm/core/components/ComboBox.js.map +1 -1
- package/lib/esm/core/components/FormItem.js +2 -2
- package/lib/esm/core/components/FormItem.js.map +1 -1
- package/lib/esm/core/components/SidePanel.js +1 -1
- package/lib/esm/core/components/SidePanel.js.map +1 -1
- package/lib/esm/core/components/shadcn/collaspible.js +3 -4
- package/lib/esm/core/components/shadcn/collaspible.js.map +1 -1
- package/lib/esm/core/components/shadcn/dropdown.js +37 -12
- package/lib/esm/core/components/shadcn/dropdown.js.map +1 -1
- package/lib/esm/core/components/shadcn/filters/comboBox/DateCombobox.js +6 -6
- package/lib/esm/core/components/shadcn/filters/comboBox/DateCombobox.js.map +1 -1
- package/lib/esm/core/components/shadcn/filters/filterBar.js +5 -3
- package/lib/esm/core/components/shadcn/filters/filterBar.js.map +1 -1
- package/lib/esm/core/components/shadcn/radioGroup.js +1 -2
- package/lib/esm/core/components/shadcn/radioGroup.js.map +1 -1
- package/lib/esm/core/components/shadcn/switch.js +0 -1
- package/lib/esm/core/components/shadcn/switch.js.map +1 -1
- package/lib/esm/core/components/shadcn/tabs.js +2 -2
- package/lib/esm/core/components/shadcn/tabs.js.map +1 -1
- package/lib/esm/core/components/shadcn/tooltip.js +17 -1
- package/lib/esm/core/components/shadcn/tooltip.js.map +1 -1
- package/lib/esm/core/hooks/PortalContainerProvider.js +9 -3
- package/lib/esm/core/hooks/PortalContainerProvider.js.map +1 -1
- package/lib/esm/env/index.js +5 -8
- package/lib/esm/env/index.js.map +1 -1
- package/lib/esm/features/agent/chat/AgentRightPanel.js +21 -11
- package/lib/esm/features/agent/chat/AgentRightPanel.js.map +1 -1
- package/lib/esm/features/agent/chat/AskUserWidget.js +2 -6
- package/lib/esm/features/agent/chat/AskUserWidget.js.map +1 -1
- package/lib/esm/features/agent/chat/DocumentPanel.js +8 -5
- package/lib/esm/features/agent/chat/DocumentPanel.js.map +1 -1
- package/lib/esm/features/agent/chat/DocumentTabBar.js +5 -13
- package/lib/esm/features/agent/chat/DocumentTabBar.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentConversation.js +57 -26
- package/lib/esm/features/agent/chat/ModernAgentConversation.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +20 -16
- package/lib/esm/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/Header.js +56 -45
- package/lib/esm/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/MessageItem.js +1 -1
- package/lib/esm/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
- package/lib/esm/features/agent/chat/SlidingThinkingIndicator.js +3 -9
- package/lib/esm/features/agent/chat/SlidingThinkingIndicator.js.map +1 -1
- package/lib/esm/features/agent/chat/hooks/useAgentStream.js +9 -5
- package/lib/esm/features/agent/chat/hooks/useAgentStream.js.map +1 -1
- package/lib/esm/features/agent/chat/hooks/useDocumentPanel.js +4 -0
- package/lib/esm/features/agent/chat/hooks/useDocumentPanel.js.map +1 -1
- package/lib/esm/features/facets/AgentRunnerFacetsNav.js +1 -1
- package/lib/esm/features/facets/AgentRunnerFacetsNav.js.map +1 -1
- package/lib/esm/features/facets/DocumentsFacetsNav.js +3 -2
- package/lib/esm/features/facets/DocumentsFacetsNav.js.map +1 -1
- package/lib/esm/features/facets/RunsFacetsNav.js +8 -1
- package/lib/esm/features/facets/RunsFacetsNav.js.map +1 -1
- package/lib/esm/features/facets/WorkflowExecutionsFacetsNav.js +1 -1
- package/lib/esm/features/facets/WorkflowExecutionsFacetsNav.js.map +1 -1
- package/lib/esm/features/facets/index.js +1 -0
- package/lib/esm/features/facets/index.js.map +1 -1
- package/lib/esm/features/facets/utils/VInteractionFacet.js +5 -5
- package/lib/esm/features/facets/utils/VInteractionFacet.js.map +1 -1
- package/lib/esm/features/index.js +1 -0
- package/lib/esm/features/index.js.map +1 -1
- package/lib/esm/features/oauth/OAuthProviderConnectButton.js +85 -0
- package/lib/esm/features/oauth/OAuthProviderConnectButton.js.map +1 -0
- package/lib/esm/features/oauth/RemoteMcpConnectionButton.js +119 -0
- package/lib/esm/features/oauth/RemoteMcpConnectionButton.js.map +1 -0
- package/lib/esm/features/oauth/index.js +4 -0
- package/lib/esm/features/oauth/index.js.map +1 -0
- package/lib/esm/features/oauth/useOAuthPopup.js +89 -0
- package/lib/esm/features/oauth/useOAuthPopup.js.map +1 -0
- package/lib/esm/features/store/collections/BrowseCollectionView.js.map +1 -1
- package/lib/esm/features/store/collections/EditCollectionView.js +9 -2
- package/lib/esm/features/store/collections/EditCollectionView.js.map +1 -1
- package/lib/esm/features/store/objects/components/ContentOverview.js +19 -7
- package/lib/esm/features/store/objects/components/ContentOverview.js.map +1 -1
- package/lib/esm/features/store/objects/components/useContentPanelHooks.js +35 -15
- package/lib/esm/features/store/objects/components/useContentPanelHooks.js.map +1 -1
- package/lib/esm/features/store/objects/selection/ObjectsActionContext.js +3 -3
- package/lib/esm/features/store/objects/selection/ObjectsActionContext.js.map +1 -1
- package/lib/esm/features/store/objects/selection/SelectionActions.js +4 -3
- package/lib/esm/features/store/objects/selection/SelectionActions.js.map +1 -1
- package/lib/esm/features/store/objects/selection/actions/ExportPropertiesAction.js +11 -3
- package/lib/esm/features/store/objects/selection/actions/ExportPropertiesAction.js.map +1 -1
- package/lib/esm/features/store/objects/upload/DocumentUploadModal.js +1 -5
- package/lib/esm/features/store/objects/upload/DocumentUploadModal.js.map +1 -1
- package/lib/esm/features/user/UserInfo.js +33 -10
- package/lib/esm/features/user/UserInfo.js.map +1 -1
- package/lib/esm/i18n/locales/ar.json +81 -98
- package/lib/esm/i18n/locales/de.json +44 -73
- package/lib/esm/i18n/locales/en.json +31 -61
- package/lib/esm/i18n/locales/es.json +55 -79
- package/lib/esm/i18n/locales/fr.json +55 -81
- package/lib/esm/i18n/locales/it.json +55 -79
- package/lib/esm/i18n/locales/ja.json +46 -75
- package/lib/esm/i18n/locales/ko.json +44 -73
- package/lib/esm/i18n/locales/pt.json +55 -79
- package/lib/esm/i18n/locales/ru.json +58 -81
- package/lib/esm/i18n/locales/tr.json +46 -75
- package/lib/esm/i18n/locales/zh-TW.json +46 -75
- package/lib/esm/i18n/locales/zh.json +46 -75
- package/lib/esm/session/UserSession.js +2 -4
- package/lib/esm/session/UserSession.js.map +1 -1
- package/lib/esm/session/UserSessionProvider.js +22 -17
- package/lib/esm/session/UserSessionProvider.js.map +1 -1
- package/lib/esm/session/auth/composable.js +20 -2
- package/lib/esm/session/auth/composable.js.map +1 -1
- package/lib/esm/session/auth/domainRouting.js +7 -0
- package/lib/esm/session/auth/domainRouting.js.map +1 -0
- package/lib/esm/shell/login/InviteAcceptModal.js +1 -0
- package/lib/esm/shell/login/InviteAcceptModal.js.map +1 -1
- package/lib/esm/widgets/form/Form.js +2 -2
- package/lib/esm/widgets/form/Form.js.map +1 -1
- package/lib/esm/widgets/markdown/MarkdownRenderer.js +2 -1
- package/lib/esm/widgets/markdown/MarkdownRenderer.js.map +1 -1
- package/lib/esm/widgets/markdown/preprocessMathDelimiters.js +226 -0
- package/lib/esm/widgets/markdown/preprocessMathDelimiters.js.map +1 -0
- package/lib/esm/widgets/monacoEditor/MonacoEditor.js +40 -5
- package/lib/esm/widgets/monacoEditor/MonacoEditor.js.map +1 -1
- package/lib/esm/widgets/monacoEditor/foldingProviders.js +132 -0
- package/lib/esm/widgets/monacoEditor/foldingProviders.js.map +1 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/types/core/components/ComboBox.d.ts +12 -2
- package/lib/types/core/components/ComboBox.d.ts.map +1 -1
- package/lib/types/core/components/FormItem.d.ts +5 -2
- package/lib/types/core/components/FormItem.d.ts.map +1 -1
- package/lib/types/core/components/SidePanel.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/badge.d.ts +2 -2
- package/lib/types/core/components/shadcn/collaspible.d.ts +3 -3
- package/lib/types/core/components/shadcn/collaspible.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/dropdown.d.ts +11 -3
- package/lib/types/core/components/shadcn/dropdown.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/filters/filterBar.d.ts +2 -1
- package/lib/types/core/components/shadcn/filters/filterBar.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/input.d.ts +1 -1
- package/lib/types/core/components/shadcn/radioGroup.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/switch.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/tabs.d.ts +4 -2
- package/lib/types/core/components/shadcn/tabs.d.ts.map +1 -1
- package/lib/types/core/components/shadcn/text.d.ts +1 -1
- package/lib/types/core/components/shadcn/tooltip.d.ts +1 -1
- package/lib/types/core/components/shadcn/tooltip.d.ts.map +1 -1
- package/lib/types/core/hooks/PortalContainerProvider.d.ts +1 -0
- package/lib/types/core/hooks/PortalContainerProvider.d.ts.map +1 -1
- package/lib/types/env/index.d.ts +2 -2
- package/lib/types/env/index.d.ts.map +1 -1
- package/lib/types/features/agent/chat/AgentChart.d.ts +1 -1
- package/lib/types/features/agent/chat/AgentChart.d.ts.map +1 -1
- package/lib/types/features/agent/chat/AgentRightPanel.d.ts +7 -2
- package/lib/types/features/agent/chat/AgentRightPanel.d.ts.map +1 -1
- package/lib/types/features/agent/chat/DocumentPanel.d.ts +2 -2
- package/lib/types/features/agent/chat/DocumentPanel.d.ts.map +1 -1
- package/lib/types/features/agent/chat/DocumentTabBar.d.ts +1 -2
- package/lib/types/features/agent/chat/DocumentTabBar.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentConversation.d.ts +5 -3
- package/lib/types/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts +4 -2
- package/lib/types/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/Header.d.ts +4 -4
- package/lib/types/features/agent/chat/ModernAgentOutput/Header.d.ts.map +1 -1
- package/lib/types/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
- package/lib/types/features/agent/chat/VegaLiteChart.d.ts +1 -1
- package/lib/types/features/agent/chat/VegaLiteChart.d.ts.map +1 -1
- package/lib/types/features/agent/chat/hooks/useAgentStream.d.ts +4 -2
- package/lib/types/features/agent/chat/hooks/useAgentStream.d.ts.map +1 -1
- package/lib/types/features/agent/chat/hooks/useDocumentPanel.d.ts +1 -0
- package/lib/types/features/agent/chat/hooks/useDocumentPanel.d.ts.map +1 -1
- package/lib/types/features/facets/DocumentsFacetsNav.d.ts.map +1 -1
- package/lib/types/features/facets/RunsFacetsNav.d.ts.map +1 -1
- package/lib/types/features/facets/index.d.ts +1 -0
- package/lib/types/features/facets/index.d.ts.map +1 -1
- package/lib/types/features/index.d.ts +1 -0
- package/lib/types/features/index.d.ts.map +1 -1
- package/lib/types/features/oauth/OAuthProviderConnectButton.d.ts +11 -0
- package/lib/types/features/oauth/OAuthProviderConnectButton.d.ts.map +1 -0
- package/lib/types/features/oauth/RemoteMcpConnectionButton.d.ts +25 -0
- package/lib/types/features/oauth/RemoteMcpConnectionButton.d.ts.map +1 -0
- package/lib/types/features/oauth/index.d.ts +4 -0
- package/lib/types/features/oauth/index.d.ts.map +1 -0
- package/lib/types/features/oauth/useOAuthPopup.d.ts +12 -0
- package/lib/types/features/oauth/useOAuthPopup.d.ts.map +1 -0
- package/lib/types/features/store/collections/BrowseCollectionView.d.ts.map +1 -1
- package/lib/types/features/store/collections/EditCollectionView.d.ts.map +1 -1
- package/lib/types/features/store/objects/components/useContentPanelHooks.d.ts.map +1 -1
- package/lib/types/features/store/objects/selection/ObjectsActionContext.d.ts +3 -3
- package/lib/types/features/store/objects/selection/ObjectsActionContext.d.ts.map +1 -1
- package/lib/types/features/store/objects/selection/ObjectsActionSpec.d.ts +2 -1
- package/lib/types/features/store/objects/selection/ObjectsActionSpec.d.ts.map +1 -1
- package/lib/types/features/store/objects/selection/SelectionActions.d.ts +3 -3
- package/lib/types/features/store/objects/selection/SelectionActions.d.ts.map +1 -1
- package/lib/types/features/store/objects/selection/actions/ExportPropertiesAction.d.ts.map +1 -1
- package/lib/types/features/user/UserInfo.d.ts +2 -1
- package/lib/types/features/user/UserInfo.d.ts.map +1 -1
- package/lib/types/session/UserSession.d.ts.map +1 -1
- package/lib/types/session/UserSessionProvider.d.ts +0 -1
- package/lib/types/session/UserSessionProvider.d.ts.map +1 -1
- package/lib/types/session/auth/composable.d.ts +4 -0
- package/lib/types/session/auth/composable.d.ts.map +1 -1
- package/lib/types/session/auth/domainRouting.d.ts +8 -0
- package/lib/types/session/auth/domainRouting.d.ts.map +1 -0
- package/lib/types/shell/login/InviteAcceptModal.d.ts.map +1 -1
- package/lib/types/widgets/markdown/MarkdownRenderer.d.ts.map +1 -1
- package/lib/types/widgets/markdown/preprocessMathDelimiters.d.ts +24 -0
- package/lib/types/widgets/markdown/preprocessMathDelimiters.d.ts.map +1 -0
- package/lib/types/widgets/monacoEditor/MonacoEditor.d.ts +2 -1
- package/lib/types/widgets/monacoEditor/MonacoEditor.d.ts.map +1 -1
- package/lib/types/widgets/monacoEditor/foldingProviders.d.ts +2 -0
- package/lib/types/widgets/monacoEditor/foldingProviders.d.ts.map +1 -0
- package/lib/vertesia-ui-core.js +1 -1
- package/lib/vertesia-ui-core.js.map +1 -1
- package/lib/vertesia-ui-env.js +1 -1
- package/lib/vertesia-ui-env.js.map +1 -1
- package/lib/vertesia-ui-features.js +1 -1
- package/lib/vertesia-ui-features.js.map +1 -1
- package/lib/vertesia-ui-i18n.js +1 -1
- package/lib/vertesia-ui-i18n.js.map +1 -1
- package/lib/vertesia-ui-layout.js +1 -1
- package/lib/vertesia-ui-layout.js.map +1 -1
- package/lib/vertesia-ui-session.js +1 -1
- package/lib/vertesia-ui-session.js.map +1 -1
- package/lib/vertesia-ui-shell.js +1 -1
- package/lib/vertesia-ui-shell.js.map +1 -1
- package/lib/vertesia-ui-widgets.js +1 -1
- package/lib/vertesia-ui-widgets.js.map +1 -1
- package/package.json +15 -15
- package/src/core/components/ComboBox.tsx +66 -29
- package/src/core/components/FormItem.tsx +9 -6
- package/src/core/components/SidePanel.tsx +5 -3
- package/src/core/components/shadcn/collaspible.tsx +5 -7
- package/src/core/components/shadcn/dropdown.tsx +68 -13
- package/src/core/components/shadcn/filters/comboBox/DateCombobox.tsx +6 -6
- package/src/core/components/shadcn/filters/filterBar.tsx +5 -3
- package/src/core/components/shadcn/radioGroup.tsx +1 -3
- package/src/core/components/shadcn/switch.tsx +0 -2
- package/src/core/components/shadcn/tabs.tsx +15 -2
- package/src/core/components/shadcn/tooltip.tsx +20 -3
- package/src/core/hooks/PortalContainerProvider.tsx +11 -3
- package/src/env/index.ts +7 -10
- package/src/features/agent/chat/AgentRightPanel.tsx +43 -23
- package/src/features/agent/chat/DocumentPanel.tsx +21 -19
- package/src/features/agent/chat/DocumentTabBar.tsx +21 -32
- package/src/features/agent/chat/ModernAgentConversation.tsx +72 -27
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +21 -9
- package/src/features/agent/chat/ModernAgentOutput/Header.tsx +136 -115
- package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +0 -3
- package/src/features/agent/chat/hooks/useAgentStream.ts +13 -7
- package/src/features/agent/chat/hooks/useDocumentPanel.ts +8 -0
- package/src/features/facets/AgentRunnerFacetsNav.tsx +1 -1
- package/src/features/facets/DocumentsFacetsNav.tsx +3 -1
- package/src/features/facets/RunsFacetsNav.tsx +9 -1
- package/src/features/facets/WorkflowExecutionsFacetsNav.tsx +1 -1
- package/src/features/facets/index.ts +1 -0
- package/src/features/facets/utils/VInteractionFacet.tsx +12 -12
- package/src/features/index.ts +1 -0
- package/src/features/oauth/OAuthProviderConnectButton.tsx +125 -0
- package/src/features/oauth/RemoteMcpConnectionButton.tsx +274 -0
- package/src/features/oauth/index.ts +3 -0
- package/src/features/oauth/useOAuthPopup.ts +125 -0
- package/src/features/store/collections/BrowseCollectionView.tsx +3 -3
- package/src/features/store/collections/EditCollectionView.tsx +10 -1
- package/src/features/store/objects/components/ContentOverview.tsx +108 -87
- package/src/features/store/objects/components/useContentPanelHooks.ts +50 -15
- package/src/features/store/objects/selection/ObjectsActionContext.tsx +5 -5
- package/src/features/store/objects/selection/ObjectsActionSpec.ts +2 -1
- package/src/features/store/objects/selection/SelectionActions.tsx +6 -5
- package/src/features/store/objects/selection/actions/ExportPropertiesAction.tsx +12 -3
- package/src/features/user/UserInfo.tsx +82 -10
- package/src/i18n/locales/ar.json +81 -98
- package/src/i18n/locales/de.json +44 -73
- package/src/i18n/locales/en.json +31 -61
- package/src/i18n/locales/es.json +55 -79
- package/src/i18n/locales/fr.json +55 -81
- package/src/i18n/locales/it.json +55 -79
- package/src/i18n/locales/ja.json +46 -75
- package/src/i18n/locales/ko.json +44 -73
- package/src/i18n/locales/pt.json +55 -79
- package/src/i18n/locales/ru.json +58 -81
- package/src/i18n/locales/tr.json +46 -75
- package/src/i18n/locales/zh-TW.json +46 -75
- package/src/i18n/locales/zh.json +46 -75
- package/src/session/UserSession.ts +2 -5
- package/src/session/UserSessionProvider.tsx +23 -18
- package/src/session/auth/auth-flow.md +1 -1
- package/src/session/auth/composable.ts +21 -2
- package/src/session/auth/domainRouting.test.ts +26 -0
- package/src/session/auth/domainRouting.ts +13 -0
- package/src/shell/login/InviteAcceptModal.tsx +1 -0
- package/src/widgets/form/Form.tsx +2 -2
- package/src/widgets/markdown/MarkdownRenderer.tsx +2 -1
- package/src/widgets/markdown/markdown.css +12 -0
- package/src/widgets/markdown/preprocessMathDelimiters.test.ts +87 -0
- package/src/widgets/markdown/preprocessMathDelimiters.ts +229 -0
- package/src/widgets/monacoEditor/MonacoEditor.tsx +47 -4
- package/src/widgets/monacoEditor/foldingProviders.ts +122 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vertesia-ui-shell.js","sources":["esm/i18n/instance.js","esm/i18n/index.js","esm/shell/login/InviteAcceptModal.js","esm/shell/login/EnterpriseSigninButton.js","esm/shell/login/GitHubSignInButton.js","esm/shell/login/GoogleSignInButton.js","esm/shell/login/MicrosoftSigninButton.js","esm/shell/login/SignupForm.js","esm/shell/login/SigninScreen.js","esm/shell/login/TerminalLogin.js","esm/shell/login/SignInModal.js","esm/shell/login/UserInfo.js","esm/shell/login/UserSessionMenu.js","esm/shell/utils.js","esm/shell/SplashScreen.js","esm/shell/VertesiaShell.js","esm/shell/apps/AppInstallationProvider.js","esm/shell/apps/AppProjectSelector.js","esm/shell/apps/StandaloneApp.js"],"sourcesContent":["import i18next from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport ar from './locales/ar.json';\nimport de from './locales/de.json';\nimport en from './locales/en.json';\nimport es from './locales/es.json';\nimport fr from './locales/fr.json';\nimport it from './locales/it.json';\nimport ja from './locales/ja.json';\nimport ko from './locales/ko.json';\nimport pt from './locales/pt.json';\nimport ru from './locales/ru.json';\nimport tr from './locales/tr.json';\nimport zh from './locales/zh.json';\nimport zhTW from './locales/zh-TW.json';\nexport const NAMESPACE = 'vertesia.ui';\n// Scoped instance — does NOT touch the global i18next singleton\nconst i18nInstance = i18next.createInstance();\nvoid i18nInstance.use(initReactI18next).init({\n resources: {\n ar: { [NAMESPACE]: ar },\n de: { [NAMESPACE]: de },\n en: { [NAMESPACE]: en },\n es: { [NAMESPACE]: es },\n fr: { [NAMESPACE]: fr },\n it: { [NAMESPACE]: it },\n ja: { [NAMESPACE]: ja },\n ko: { [NAMESPACE]: ko },\n pt: { [NAMESPACE]: pt },\n ru: { [NAMESPACE]: ru },\n tr: { [NAMESPACE]: tr },\n zh: { [NAMESPACE]: zh },\n 'zh-TW': { [NAMESPACE]: zhTW },\n },\n fallbackLng: 'en',\n ns: [NAMESPACE],\n defaultNS: NAMESPACE,\n interpolation: {\n escapeValue: false, // React already escapes\n },\n react: {\n useSuspense: false, // Translations are bundled, no async loading\n },\n});\nexport { i18nInstance };\n//# sourceMappingURL=instance.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useEffect } from 'react';\nimport { I18nextProvider, useTranslation } from 'react-i18next';\nimport { i18nInstance, NAMESPACE } from './instance.js';\nfunction detectLanguage(lng) {\n return lng ?? navigator.language?.split('-')[0] ?? 'en';\n}\nexport function I18nProvider({ lng, children }) {\n // Set language synchronously on first render to avoid flash of wrong language\n const language = detectLanguage(lng);\n if (i18nInstance.language !== language) {\n void i18nInstance.changeLanguage(language);\n }\n // Also react to prop changes\n useEffect(() => {\n const lang = detectLanguage(lng);\n if (i18nInstance.language !== lang) {\n void i18nInstance.changeLanguage(lang);\n }\n }, [lng]);\n return (_jsx(I18nextProvider, { i18n: i18nInstance, children: children }));\n}\n/**\n * Hook for components inside @vertesia/ui to get translation functions.\n * Always binds to the 'vertesia.ui' namespace on the scoped instance.\n */\nexport function useUITranslation() {\n return useTranslation(NAMESPACE, { i18n: i18nInstance });\n}\nexport { i18nInstance, NAMESPACE } from './instance.js';\n//# sourceMappingURL=index.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Button, Modal, ModalBody, ModalTitle } from \"@vertesia/ui/core\";\nimport { useEffect, useState } from \"react\";\nimport { useUserSession } from \"@vertesia/ui/session\";\nimport { useUITranslation } from '../../i18n/index.js';\nexport function InviteAcceptModal() {\n const session = useUserSession();\n const { client, account } = session;\n const { t } = useUITranslation();\n const [showModal, setShowModal] = useState(false);\n const [invites, setInvites] = useState([]);\n useEffect(() => {\n client.account.listInvites().then(invites => {\n if (invites.length > 0) {\n // Filter out legacy invites that do not have account data\n const notLegacyInvites = invites.filter(i => i.data.account);\n if (notLegacyInvites.length === 0) {\n console.log(\"No valid invites found, closing modal\");\n return;\n }\n // If we have valid invites, show the modal\n console.log(\"Found valid invites\", notLegacyInvites.length);\n setShowModal(true);\n setInvites(notLegacyInvites);\n }\n else {\n console.log(\"No invites found, closing modal\");\n setShowModal(false);\n }\n }).catch(err => {\n console.error(\"Error fetching invites\", err);\n });\n }, [account?.id]);\n const closeModal = () => setShowModal(false);\n const accept = async (invite) => {\n await client.account.acceptInvite(invite.id);\n await session.fetchAccounts();\n await session.fetchProjects(invite.data.account.id);\n const remainingInvites = invites.filter(i => i.id !== invite.id);\n const notLegacyInvites = remainingInvites.filter(i => i.data.account);\n if (notLegacyInvites.length > 0) {\n setInvites(notLegacyInvites);\n }\n else {\n closeModal();\n }\n };\n const reject = async (invite) => {\n await client.account.rejectInvite(invite.id);\n const remainingInvites = invites.filter(i => i.id !== invite.id);\n setInvites(remainingInvites);\n if (remainingInvites.length === 0) {\n closeModal();\n }\n };\n const inviteList = invites.map(invite => {\n if (!invite.data.account) {\n console.warn(\"Invite has no account data\", invite);\n return null; // Skip rendering this invite\n }\n return (_jsxs(\"div\", { className: \"flex flex-row w-full justify-between border rounded-sm px-2 py-2 \", children: [_jsxs(\"div\", { className: \"flex flex-col\", children: [_jsx(\"div\", { className: \"w-full font-semibold\", children: invite.data.account.name ?? invite.data.account }), invite.data.project && _jsxs(\"div\", { className: \"w-full text-base\", children: [\"- \", invite.data.project.name] }), _jsxs(\"div\", { className: \"text-xs\", children: [\"Role: \", invite.data.role] }), invite.data.invited_by && _jsxs(\"div\", { className: \"text-xs\", children: [\"by \", invite.data.invited_by.name ?? invite.data.invited_by] })] }), _jsxs(\"div\", { className: \"flex flex-col gap-4\", children: [_jsx(Button, { size: 'xs', onClick: () => accept(invite), children: t('login.accept') }), \" \", _jsx(Button, { size: 'xs', variant: \"secondary\", onClick: () => reject(invite), children: t('login.reject') })] })] }, invite.id));\n });\n return (_jsx(\"div\", { children: _jsxs(Modal, { isOpen: showModal, onClose: closeModal, children: [_jsx(ModalTitle, { children: t('login.reviewInvites') }), _jsxs(ModalBody, { children: [_jsx(\"div\", { className: \"text-sm pb-4\", children: \"You have received the following invites to join other accounts. Please review and accept or declined them.\" }), inviteList] })] }) }));\n}\n//# sourceMappingURL=InviteAcceptModal.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Button, Input, Spinner, useToast } from \"@vertesia/ui/core\";\nimport { Env } from \"@vertesia/ui/env\";\nimport { useUITranslation } from \"@vertesia/ui/i18n\";\nimport { getFirebaseAuth, setFirebaseTenant, useUXTracking } from \"@vertesia/ui/session\";\nimport { GoogleAuthProvider, OAuthProvider, signInWithRedirect } from \"firebase/auth\";\nimport { useState } from \"react\";\nfunction getProvider(redirectTo) {\n if (!Env.firebase) {\n throw new Error(\"Firebase configuration is not available in the environment\");\n }\n const providerType = Env.firebase.providerType;\n switch (providerType) {\n case \"oidc\":\n return new OAuthProvider(\"oidc.main\");\n case \"google\": {\n let redirectPath = redirectTo || window.location.pathname || '/';\n if (redirectPath[0] !== '/') {\n redirectPath = '/' + redirectPath;\n }\n const provider = new GoogleAuthProvider();\n provider.addScope('profile');\n provider.addScope('email');\n provider.setCustomParameters({\n prompt: 'select_account',\n redirect_uri: window.location.origin + redirectPath\n });\n return provider;\n }\n case \"microsoft\":\n return new OAuthProvider(\"microsoft.com\");\n case \"github\":\n return new OAuthProvider(\"github.com\");\n default:\n return new OAuthProvider(\"oidc.main\");\n }\n}\nexport default function EnterpriseSigninButton({ redirectTo }) {\n const { t } = useUITranslation();\n const [isLoading, setIsLoading] = useState(false);\n const { trackEvent } = useUXTracking();\n const [email, setEmail] = useState(\"\");\n const toast = useToast();\n const signIn = async () => {\n if (!email)\n return;\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(email)) {\n toast({\n title: t('auth.invalidEmail'),\n status: \"error\",\n duration: 5000,\n });\n return;\n }\n // Env.firebase.tenantEmail = email;\n setIsLoading(true);\n setFirebaseTenant(email).then((data) => {\n if (!data) {\n toast({\n title: t('auth.tenantNotFound'),\n status: \"error\",\n duration: 5000,\n });\n setIsLoading(false);\n return;\n }\n localStorage.setItem(\"tenantName\", data.name ?? \"\");\n const provider = getProvider(redirectTo);\n trackEvent(\"enterprise_signin\", {\n firebaseTenantName: data.name,\n });\n Env.logger.info('Enterprise single sign-in', {\n vertesia: {\n email: email,\n firebaseTenantName: data.name,\n firebaseTenantId: data.firebaseTenantId,\n },\n });\n signInWithRedirect(getFirebaseAuth(), provider);\n setIsLoading(false);\n });\n };\n return (_jsxs(_Fragment, { children: [_jsx(Input, { value: email, onChange: setEmail, placeholder: t('auth.enterEnterpriseEmail'), type: \"email\" }), isLoading ? (_jsx(\"div\", { className: \"w-full flex justify-center\", children: _jsx(Spinner, {}) })) : (_jsx(Button, { variant: \"outline\", onClick: signIn, className: \"w-full mt-2 py-4 flex rounded-lg hover:shadow-sm transition duration-150 text-center\", children: _jsx(\"span\", { className: \"text-sm font-semibold\", children: t('auth.continueWithEnterprise') }) }))] }));\n}\n//# sourceMappingURL=EnterpriseSigninButton.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { GithubAuthProvider, signInWithRedirect } from \"firebase/auth\";\nimport { getFirebaseAuth } from \"@vertesia/ui/session\";\nimport { Button } from \"@vertesia/ui/core\";\nimport { useUITranslation } from \"@vertesia/ui/i18n\";\nexport default function GitHubSignInButton({}) {\n const { t } = useUITranslation();\n const signIn = () => {\n localStorage.removeItem(\"tenantName\");\n const provider = new GithubAuthProvider();\n provider.addScope(\"profile\");\n provider.addScope(\"email\");\n /*provider.setCustomParameters({\n redirect_uri: redirectPath,\n });*/\n signInWithRedirect(getFirebaseAuth(), provider);\n };\n return (_jsxs(Button, { variant: \"outline\", onClick: signIn, className: \"w-full py-5 flex rounded-lg hover:shadow-sm transition duration-150 text-center mb-2\", children: [_jsx(\"img\", { className: \"size-6 bg-white rounded-full\", src: \"https://www.svgrepo.com/show/503359/github.svg\", loading: \"lazy\", alt: \"github logo\" }), _jsx(\"span\", { className: \"text-sm font-semibold\", children: t('auth.continueWithGithub') })] }));\n}\n//# sourceMappingURL=GitHubSignInButton.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { GoogleAuthProvider, signInWithRedirect } from \"firebase/auth\";\nimport { getFirebaseAuth } from \"@vertesia/ui/session\";\nimport { Button } from \"@vertesia/ui/core\";\nimport { useUITranslation } from \"@vertesia/ui/i18n\";\nexport default function GoogleSignInButton({ redirectTo }) {\n const { t } = useUITranslation();\n const signIn = () => {\n localStorage.removeItem(\"tenantName\");\n let redirectPath = redirectTo || window.location.pathname || '/';\n if (redirectPath[0] !== '/') {\n redirectPath = '/' + redirectPath;\n }\n const provider = new GoogleAuthProvider();\n provider.addScope('profile');\n provider.addScope('email');\n // always ask to select the google account\n //console.log('redirectPath', window.location.origin + redirectPath)\n provider.setCustomParameters({\n prompt: 'select_account',\n redirect_uri: window.location.origin + redirectPath\n });\n signInWithRedirect(getFirebaseAuth(), provider);\n };\n return (_jsxs(Button, { variant: \"outline\", onClick: signIn, className: \"w-full py-5 flex rounded-lg hover:shadow-sm transition duration-150 text-center mb-2\", children: [_jsx(\"img\", { className: \"size-6\", src: \"https://www.svgrepo.com/show/475656/google-color.svg\", loading: \"lazy\", alt: \"google logo\" }), _jsx(\"span\", { className: \"text-sm font-semibold\", children: t('auth.continueWithGoogle') })] }));\n}\n//# sourceMappingURL=GoogleSignInButton.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { OAuthProvider, signInWithRedirect } from \"firebase/auth\";\nimport { getFirebaseAuth } from \"@vertesia/ui/session\";\nimport { Button } from \"@vertesia/ui/core\";\nimport { useUITranslation } from \"@vertesia/ui/i18n\";\nexport default function MicrosoftSignInButton({ redirectTo: _redirectTo }) {\n const { t } = useUITranslation();\n const signIn = () => {\n localStorage.removeItem(\"tenantName\");\n const provider = new OAuthProvider('microsoft.com');\n provider.addScope('profile');\n provider.addScope('email');\n signInWithRedirect(getFirebaseAuth(), provider);\n };\n return (_jsxs(Button, { variant: \"outline\", onClick: signIn, className: \"w-full py-5 flex rounded-lg hover:shadow-sm transition duration-150 text-center\", children: [_jsx(\"img\", { className: \"size-6\", src: \"https://learn.microsoft.com/en-us/entra/identity-platform/media/howto-add-branding-in-apps/ms-symbollockup_mssymbol_19.svg\", loading: \"lazy\", alt: \"microsoft logo\" }), _jsx(\"span\", { className: \"text-sm font-semibold\", children: t('auth.continueWithMicrosoft') })] }));\n}\n//# sourceMappingURL=MicrosoftSigninButton.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Button, Input, RadioGroup, SelectBox } from \"@vertesia/ui/core\";\nimport { useEffect, useState } from \"react\";\nimport { getFirebaseAuth } from \"@vertesia/ui/session\";\nimport { useUITranslation } from '../../i18n/index.js';\nexport default function SignupForm({ onSignup, goBack }) {\n const { t } = useUITranslation();\n const [accountType, setAccountType] = useState(undefined);\n const [companySize, setCompanySize] = useState(undefined);\n const [companyName, setCompanyName] = useState(undefined);\n const [companyWebsite, setCompanyWebsite] = useState(undefined);\n const [projectMaturity, setProjectMaturity] = useState(undefined);\n const [fbUser, setFbUser] = useState(undefined);\n const [error, setError] = useState(undefined);\n const isCompany = accountType === \"company\";\n const companySizeOptions = [\n { id: 1, label: t('signup.size1to10') },\n { id: 11, label: t('signup.size11to100') },\n { id: 101, label: t('signup.size101to1000') },\n { id: 1001, label: t('signup.size1001to5000') },\n { id: 5001, label: t('signup.size5000plus') },\n ];\n const accountTypeOptions = [\n {\n id: \"personal\",\n label: t('signup.personal'),\n description: t('signup.personalDescription'),\n },\n {\n id: \"company\",\n label: t('signup.company'),\n description: t('signup.companyDescription'),\n },\n ];\n const projectMaturityOptions = [\n { id: \"testing\", label: t('signup.justTesting') },\n { id: \"exploring\", label: t('signup.activelyExploring') },\n { id: \"using\", label: t('signup.alreadyUsing') },\n { id: \"migrating\", label: t('signup.migratingLLMs') },\n { id: \"other\", label: t('signup.other') },\n ];\n useEffect(() => {\n const user = getFirebaseAuth().currentUser;\n if (!user) {\n console.error('No user found');\n return;\n }\n setFbUser(user);\n }, [fbUser]);\n const isValid = () => {\n if (!accountType) {\n setError(t('signup.pleaseSelectAccountType'));\n return false;\n }\n if (isCompany && !companyName) {\n setError(t('signup.pleaseEnterOrgName'));\n return false;\n }\n if (isCompany && !companySize) {\n setError(t('signup.pleaseSelectCompanySize'));\n return false;\n }\n return true;\n };\n const onSubmit = async () => {\n if (!isValid())\n return;\n if (!accountType)\n return;\n const signupData = {\n accountType: accountType,\n companyName: companyName,\n companySize: companySize?.id,\n companyWebsite: companyWebsite,\n maturity: projectMaturity,\n };\n window.localStorage.setItem(\"composableSignupData\", JSON.stringify(signupData));\n const fbToken = await getFirebaseAuth().currentUser?.getIdToken();\n console.log('Got firebase token', getFirebaseAuth(), fbToken);\n if (!fbToken) {\n console.error('No firebase token found');\n return;\n }\n onSignup(signupData, fbToken);\n };\n return (_jsxs(\"div\", { className: \"flex flex-col space-y-2\", children: [_jsxs(\"div\", { className: \"prose\", children: [_jsx(\"p\", { className: \"prose text-sm text-muted pt-4\", children: t('signup.welcomeMessage', { name: fbUser?.displayName, email: fbUser?.email }) }), error &&\n _jsx(\"div\", { className: \"text-destructive\", children: error })] }), _jsx(FormItem, { label: t('signup.accountType'), children: _jsx(RadioGroup, { options: accountTypeOptions, selected: accountTypeOptions.find((option) => option.id === accountType), onSelect: (option) => setAccountType(option.id) }) }), isCompany &&\n _jsxs(_Fragment, { children: [_jsx(FormItem, { label: t('signup.companySize'), children: _jsx(SelectBox, { className: \"w-full border border-accent bg-muted\", value: companySize, options: companySizeOptions, onChange: setCompanySize, optionLabel: (option) => option?.label, placeholder: t('signup.selectCompanySize') }) }), _jsx(FormItem, { label: t('signup.companyName'), children: _jsx(Input, { value: companyName, onChange: setCompanyName, type: \"text\", required: true }) }), _jsx(FormItem, { label: t('signup.companyWebsite'), children: _jsx(Input, { value: companyWebsite, onChange: setCompanyWebsite, type: \"text\" }) })] }), _jsx(FormItem, { label: t('signup.projectMaturity'), children: _jsx(SelectBox, { className: \"w-full border border-accent bg-muted\", options: projectMaturityOptions, value: projectMaturityOptions.find((option) => option.id === projectMaturity), optionLabel: (option) => option?.label, placeholder: t('signup.selectProjectMaturity'), onChange: (option) => setProjectMaturity(option?.id) }) }), _jsxs(\"div\", { className: \"pt-8 flex flex-col\", children: [_jsx(Button, { variant: \"primary\", onClick: onSubmit, size: \"xl\", children: _jsx(\"span\", { className: \"text-lg\", children: t('signup.signUp') }) }), _jsx(Button, { variant: \"ghost\", size: \"xl\", className: \"mt-4\", onClick: goBack, children: _jsx(\"span\", { className: \"\", children: t('signup.wrongAccountGoBack') }) })] })] }));\n}\nfunction FormItem({ label, children }) {\n return (_jsxs(\"div\", { className: \"flex flex-col space-y-2 pt-4\", children: [_jsx(\"div\", { className: \"text-sm text-muted\", children: label }), children] }));\n}\n//# sourceMappingURL=SignupForm.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Button, useSafeLayoutEffect } from \"@vertesia/ui/core\";\nimport { Env } from \"@vertesia/ui/env\";\nimport { useUITranslation } from \"@vertesia/ui/i18n\";\nimport { UserNotFoundError, useUserSession, useUXTracking } from \"@vertesia/ui/session\";\nimport { RegionTag } from \"@vertesia/ui/layout\";\nimport clsx from \"clsx\";\nimport { useEffect, useState } from \"react\";\nimport EnterpriseSigninButton from \"./EnterpriseSigninButton\";\nimport GitHubSignInButton from \"./GitHubSignInButton\";\nimport GoogleSignInButton from \"./GoogleSignInButton\";\nimport MicrosoftSignInButton from \"./MicrosoftSigninButton\";\nimport SignupForm from \"./SignupForm\";\nexport function SigninScreen({ allowedPrefix, isNested = false, lightLogo, darkLogo }) {\n const [allow, setAllow] = useState(false);\n useSafeLayoutEffect(() => {\n allowedPrefix && setAllow(window.location.href.startsWith(allowedPrefix));\n }, []);\n return allow ? null : _jsx(SigninScreenImpl, { isNested: isNested, lightLogo: lightLogo, darkLogo: darkLogo });\n}\nfunction SigninScreenImpl({ isNested = false, lightLogo, darkLogo }) {\n const { t } = useUITranslation();\n const { isLoading, user, authError } = useUserSession();\n return !isLoading && !user ? (_jsx(\"div\", { style: { zIndex: 999998 }, className: (isNested ? \"absolute\" : \"fixed\") + \"overflow-y-auto \", children: _jsxs(\"div\", { className: clsx(\"flex flex-col items-center justify-center py-14 px-4\"), children: [_jsx(StandardSigninPanel, { authError: authError, lightLogo: lightLogo, darkLogo: darkLogo }), _jsxs(\"div\", { className: \"flex gap-x-6 mt-10 justify-center items-center text-muted\", children: [_jsx(\"a\", { href: \"https://vertesiahq.com/privacy\", className: \"text-sm\", children: t('auth.privacyPolicy') }), _jsx(\"a\", { href: \"https://vertesiahq.com/terms\", className: \"text-sm\", children: t('auth.termsOfService') }), _jsx(RegionTag, {})] })] }) })) : null;\n}\nfunction StandardSigninPanel({ authError, darkLogo, lightLogo }) {\n const { t } = useUITranslation();\n const [signupData, setSignupData] = useState(undefined);\n const [collectSignupData, setCollectSignupData] = useState(false);\n const { signOut } = useUserSession();\n const { trackEvent } = useUXTracking();\n history.replaceState({}, '', '/');\n const goBack = () => {\n console.log(\"Going back, signing out\");\n setSignupData(undefined);\n setCollectSignupData(false);\n signOut();\n };\n const goToSignup = () => {\n setSignupData(undefined);\n setCollectSignupData(true);\n };\n useEffect(() => {\n if (authError instanceof UserNotFoundError) {\n console.log(\"User not found, redirecting to signup\");\n goToSignup();\n }\n }, [authError]);\n const onSignup = (data, fbToken) => {\n console.log(\"Got Signup data\", data);\n setSignupData(data);\n const payload = {\n signupData: data,\n firebaseToken: fbToken,\n };\n fetch(Env.endpoints.studio + \"/auth/signup\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(payload),\n }).then((res) => {\n console.log(\"Signup successful\", payload, res);\n trackEvent(\"sign_up\");\n window.location.href = \"/\";\n });\n };\n return (_jsxs(_Fragment, { children: [lightLogo && _jsx(\"img\", { src: lightLogo, alt: 'logo', className: 'h-15 block dark:hidden' }), darkLogo && _jsx(\"img\", { src: darkLogo, alt: 'logo', className: 'h-15 hidden dark:block' }), signupData && (_jsxs(\"div\", { className: \"my-6\", children: [t('auth.needToMakeChange'), \" \", _jsxs(Button, { onClick: goToSignup, children: [\" \", t('auth.goBack')] })] })), _jsx(\"div\", { className: \"flex flex-col space-y-2\", children: collectSignupData && !localStorage.getItem('tenantName') ? (_jsx(SignupForm, { onSignup: onSignup, goBack: goBack })) : (_jsxs(\"div\", { className: \"flex flex-col\", children: [_jsx(\"div\", { className: \"my-4\", children: _jsx(\"h2\", { className: \"text-2xl font-bold text-center\", children: t('auth.logInOrSignUp') }) }), _jsxs(\"div\", { className: \"max-w-2xl text-center my-2 px-2\", children: [t('auth.firstTimeMessage'), _jsx(\"br\", {}), t('auth.firstTimeDetails')] }), _jsxs(\"div\", { className: \"flex items-center flex-col\", children: [_jsxs(\"div\", { className: \"py-4 w-70\", children: [_jsx(GoogleSignInButton, {}), _jsx(GitHubSignInButton, {}), _jsx(MicrosoftSignInButton, {})] }), _jsxs(\"div\", { className: \"flex items-center flex-row w-70 text-muted\", children: [_jsx(\"hr\", { className: \"w-full\" }), _jsx(\"div\", { className: \"px-2 text-xs\", children: t('auth.or') }), _jsx(\"hr\", { className: \"w-full\" })] }), _jsx(\"div\", { className: \"py-4 w-70\", children: _jsx(EnterpriseSigninButton, {}) })] }), authError && !(authError instanceof UserNotFoundError) && (_jsx(\"div\", { className: \"text-center\", children: _jsxs(\"div\", { className: \"\", children: [t('auth.signInError'), _jsx(\"br\", {}), t('auth.signInErrorContact'), _jsx(\"a\", { className: 'text-info mx-1', href: \"mailto:support@vertesiahq.com\", children: \"support@vertesiahq.com\" }), t('auth.signInErrorPersists'), _jsx(\"pre\", { className: \"mt-2\", children: t('auth.error', { message: authError.message }) })] }) }))] })) })] }));\n}\n//# sourceMappingURL=SigninScreen.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Button, Center, ErrorBox, Input, SelectBox, Spinner, useFetch, useToast } from '@vertesia/ui/core';\nimport { Env } from \"@vertesia/ui/env\";\nimport { useLocation } from \"@vertesia/ui/router\";\nimport { fetchComposableTokenFromFirebaseToken, useUserSession } from '@vertesia/ui/session';\nimport { useState } from 'react';\nimport { useUITranslation } from '../../i18n/index.js';\nconst LOOPBACK_HOSTS = new Set(['127.0.0.1', 'localhost']);\nfunction parseRedirectUri(rawRedirect) {\n if (!rawRedirect) {\n return null;\n }\n let decoded;\n try {\n decoded = decodeURIComponent(rawRedirect);\n }\n catch {\n return null;\n }\n let parsed;\n try {\n parsed = new URL(decoded);\n }\n catch {\n return null;\n }\n if (parsed.protocol !== 'http:') {\n return null;\n }\n if (!parsed.port) {\n return null;\n }\n if (parsed.username || parsed.password) {\n return null;\n }\n if (!LOOPBACK_HOSTS.has(parsed.hostname)) {\n return null;\n }\n return parsed.toString();\n}\nfunction getClientInfo(location) {\n const params = new URLSearchParams(location.search);\n const redirect = parseRedirectUri(params.get('redirect_uri'));\n const code = params.get('code');\n if (!redirect || !code) {\n return null;\n }\n const profile = params.get('profile') ?? \"default\";\n const project = params.get('project') ?? undefined;\n const account = params.get('account') ?? undefined;\n return { redirect, code, profile, project, account };\n}\nexport function TerminalLogin() {\n const [payload, setPayload] = useState();\n const [error, setError] = useState();\n const location = useLocation();\n const clientInfo = getClientInfo(location);\n const toast = useToast();\n const { t } = useUITranslation();\n const onAccept = async (data) => {\n if (!clientInfo)\n return;\n if (!data.profile) {\n toast({\n title: t('login.terminal.profileRequired'),\n description: t('login.terminal.profileRequiredDesc'),\n status: 'error',\n duration: 2000\n });\n return;\n }\n if (!data.account) {\n toast({\n title: t('login.terminal.accountRequired'),\n description: t('login.terminal.accountRequiredDesc'),\n status: 'error',\n duration: 2000\n });\n return;\n }\n if (!data.project) {\n toast({\n title: t('login.terminal.projectRequired'),\n description: t('login.terminal.projectRequiredDesc'),\n status: 'error',\n duration: 2000\n });\n return;\n }\n // expire in 1 day\n let payload;\n try {\n const token = await fetchComposableTokenFromFirebaseToken(data.account, data.project, 24 * 3600);\n if (token) {\n payload = {\n ...data,\n studio_server_url: Env.endpoints.studio,\n zeno_server_url: Env.endpoints.zeno,\n token,\n };\n await fetch(clientInfo.redirect, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(payload)\n });\n setPayload(payload);\n }\n else {\n toast({\n title: t('login.terminal.failedToGetToken'),\n status: 'error',\n duration: 5000\n });\n }\n }\n catch (err) {\n if (payload) {\n setError(err);\n setPayload(payload);\n }\n else {\n toast({\n title: t('login.terminal.errorAuthorizingClient'),\n description: err.message,\n status: 'error',\n duration: 5000\n });\n }\n }\n };\n const getPageContent = () => {\n if (!clientInfo) {\n return _jsx(ErrorBox, { title: t('login.terminal.invalidRequest'), children: t('login.terminal.invalidRequestDesc') });\n }\n return payload\n ? _jsx(AuthDoneScreen, { payload: payload, error: error })\n : _jsx(AuthAcceptScreen, { clientInfo: clientInfo, onAccept: onAccept });\n };\n const page = getPageContent();\n return (_jsx(\"div\", { className: \"w-full flex flex-col items-center gap-4 mt-24\", children: page }));\n}\nfunction AuthAcceptScreen({ onAccept, clientInfo }) {\n const { client, user } = useUserSession();\n const { data: allProjects, error } = useFetch(() => user ? client.projects.list() : Promise.resolve([]), [user]);\n const { t } = useUITranslation();\n if (error) {\n return _jsx(ErrorBox, { title: t('login.terminal.errorLoadingProjects'), children: error.message });\n }\n const getEnvironmentName = () => {\n if (Env.isLocalDev) {\n return t('login.terminal.envLocalDev');\n }\n else if (Env.isDev) {\n return t('login.terminal.envStaging');\n }\n return t('login.terminal.envProduction');\n };\n const envName = getEnvironmentName();\n return user && allProjects ? (_jsxs(_Fragment, { children: [_jsxs(\"div\", { className: 'w-1/3', children: [_jsxs(\"div\", { className: \"mb-4 text-xl font-semibold text-info\", children: [\"Authorizing client on \", envName, \" environment.\"] }), _jsxs(\"div\", { className: 'mb-2 text-md text-muted-foreground', children: [_jsx(\"div\", { children: t('login.terminal.clientWantsAuth') }), _jsxs(\"div\", { children: [\"The client app code is \", _jsx(\"b\", { className: \"text-foreground\", children: clientInfo.code }), \". You can check if the code is correct in the terminal.\"] })] }), _jsxs(\"div\", { className: 'mb-2 text-sm text-muted-foreground', children: [_jsx(\"div\", { children: t('login.terminal.chooseAccountProject') }), _jsx(\"div\", { children: t('login.terminal.profileNameNote') })] })] }), _jsx(ProfileForm, { onAccept: onAccept, allProjects: allProjects, data: clientInfo })] })) : _jsx(Spinner, { size: 'lg' });\n}\nfunction AuthDoneScreen({ payload, error }) {\n const toast = useToast();\n const { t } = useUITranslation();\n const onCopy = () => {\n if (payload) {\n navigator.clipboard.writeText(JSON.stringify(payload));\n toast({\n title: t('login.terminal.authPayloadCopied'),\n description: error ? t('login.terminal.authPayloadCopiedWithError', { error: error.message }) : t('login.terminal.authPayloadCopiedSuccess'),\n status: 'success',\n duration: 5000\n });\n }\n };\n return (_jsxs(\"div\", { children: [error ?\n _jsx(\"div\", { children: _jsx(ErrorBox, { title: t('login.terminal.failedToSendToken'), children: t('login.terminal.failedToSendTokenDesc', { error: error.message }) }) })\n : _jsx(\"div\", { children: t('login.terminal.clientAuthenticated') }), _jsx(Center, { className: \"mt-4\", children: _jsx(Button, { variant: 'secondary', onClick: onCopy, children: t('login.terminal.copyAuthPayload') }) })] }));\n}\nfunction ProfileForm({ allProjects, data, onAccept }) {\n const { accounts, account, project } = useUserSession();\n const { t } = useUITranslation();\n const [currentData, setCurrentData] = useState(() => ({\n profile: data.profile,\n account: data.account ?? account?.id,\n project: data.project ?? project?.id,\n }));\n const onChangeProfile = (value) => {\n setCurrentData({ ...currentData, profile: value });\n };\n const onChangeAccount = (value) => {\n setCurrentData({ ...currentData, account: value.id, project: undefined });\n };\n const onChangeProject = (value) => {\n setCurrentData({ ...currentData, project: value.id });\n };\n const projects = allProjects.filter(p => p.account === currentData.account);\n return (_jsxs(\"div\", { className: 'w-1/3', children: [_jsxs(\"div\", { className: \"mb-4 flex flex-col gap-2\", children: [_jsx(\"span\", { className: \"font-semibold text-muted-foreground\", children: t('login.terminal.profileName') }), _jsx(Input, { type: 'text', value: currentData.profile, onChange: onChangeProfile })] }), _jsxs(\"div\", { className: \"mb-4 flex flex-col gap-2\", children: [_jsx(\"span\", { className: \"font-semibold text-muted-foreground\", children: t('login.terminal.account') }), _jsx(SelectAccount, { value: currentData.account, onChange: onChangeAccount, accounts: accounts || [] })] }), _jsxs(\"div\", { className: \"mb-4 flex flex-col gap-2\", children: [_jsx(\"span\", { className: \"font-semibold text-muted-foreground\", children: t('login.terminal.project') }), _jsx(SelectProject, { value: currentData.project, onChange: onChangeProject, projects: projects })] }), _jsx(\"div\", { className: 'mb-4 text-sm text-attention', children: t('login.terminal.browserPermissionNote') }), _jsx(\"div\", { children: _jsx(Button, { size: 'xl', onClick: () => onAccept(currentData), children: t('login.terminal.authorizeClient') }) })] }));\n}\nfunction SelectAccount({ value, accounts, onChange }) {\n const { t } = useUITranslation();\n const _onChange = (value) => {\n onChange(value);\n };\n return _jsx(SelectBox, { options: accounts, value: accounts?.find(a => a.id === value), onChange: _onChange, by: \"id\", optionLabel: (option) => option.name, placeholder: t('login.terminal.selectAccount') });\n}\nfunction SelectProject({ value, projects, onChange }) {\n const { t } = useUITranslation();\n const _onChange = (value) => {\n onChange(value);\n };\n return (_jsx(SelectBox, { by: \"id\", value: projects.find(p => p.id === value), options: projects, optionLabel: (option) => option.name, placeholder: t('login.terminal.selectProject'), onChange: _onChange }));\n}\n//# sourceMappingURL=TerminalLogin.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Button, Modal, ModalBody, ModalFooter, ModalTitle } from \"@vertesia/ui/core\";\nimport GitHubSignInButton from \"./GitHubSignInButton\";\nimport GoogleSignInButton from \"./GoogleSignInButton\";\nimport MicrosoftSignInButton from \"./MicrosoftSigninButton\";\nexport default function SignInModal({ isOpen, onClose }) {\n return (_jsxs(Modal, { isOpen: isOpen, onClose: onClose, children: [_jsx(ModalTitle, { children: \"Sign In\" }), _jsxs(ModalBody, { className: \"flex justify-center\", children: [_jsx(GoogleSignInButton, {}), _jsx(GitHubSignInButton, {}), _jsx(MicrosoftSignInButton, {})] }), _jsx(ModalFooter, { align: \"right\", children: _jsx(Button, { variant: \"ghost\", onClick: onClose, children: \"Cancel\" }) })] }));\n}\n//# sourceMappingURL=SignInModal.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { getTenantIdFromProject } from \"@vertesia/common\";\nimport { Tabs, TabsBar, TabsPanel, VTooltip } from \"@vertesia/ui/core\";\nimport { Env } from \"@vertesia/ui/env\";\nimport { useUserSession } from \"@vertesia/ui/session\";\n// Package version is now passed as prop from the consuming application\nimport { Check, CopyIcon } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { useUITranslation } from '../../i18n/index.js';\nexport function InfoItems({ title, value }) {\n function copyToClipboard(value) {\n navigator.clipboard.writeText(value);\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), 2000);\n }\n const [isCopied, setIsCopied] = useState(false);\n return (_jsxs(\"div\", { className: \"w-full flex justify-between items-center mb-1\", children: [_jsxs(\"div\", { className: \"flex flex-col w-[calc(100%-3rem)]\", children: [_jsx(\"div\", { className: 'text-sm px-2 dark:text-slate-200', children: title }), _jsx(VTooltip, { description: value, size: \"xs\", placement: \"left\", children: _jsxs(\"div\", { className: 'text-xs truncate text-muted w-full text-left px-2', children: [value, \" \"] }) })] }), isCopied ?\n _jsx(Check, { className: \"size-4 cursor-pointer text-success\" })\n :\n _jsx(CopyIcon, { className: \"size-4 cursor-pointer text-gray-400 dark:text-slate-400\", onClick: () => copyToClipboard(value) })] }));\n}\nexport default function InfoList() {\n const { t } = useUITranslation();\n const session = useUserSession();\n const { account, project, client, authToken } = session;\n const server = new URL(client.baseUrl).hostname;\n const store = new URL(client.store.baseUrl).hostname;\n const tenantId = project ? getTenantIdFromProject(project) : '';\n const tabs = [\n {\n name: 'user',\n label: t('user.user'),\n content: _jsxs(\"div\", { className: \"space-y-1 p-2\", children: [_jsx(InfoItems, { title: t('user.organizationId'), value: account?.id ?? t('user.unknown') }), _jsx(InfoItems, { title: t('user.projectId'), value: project?.id ?? t('user.unknown') }), _jsx(InfoItems, { title: t('user.userId'), value: authToken?.sub ?? t('user.unknown') }), _jsx(InfoItems, { title: t('user.organizationRoles'), value: authToken?.account_roles?.join(',') ?? t('user.unknown') }), _jsx(InfoItems, { title: t('user.projectRoles'), value: authToken?.project_roles?.join(',') ?? t('user.unknown') })] })\n },\n {\n name: 'environment',\n label: t('user.environment'),\n content: _jsxs(\"div\", { className: \"space-y-1 p-2\", children: [_jsx(InfoItems, { title: t('user.tenantId'), value: tenantId }), _jsx(InfoItems, { title: t('user.environment'), value: Env.type }), _jsx(InfoItems, { title: t('user.server'), value: server }), _jsx(InfoItems, { title: t('user.store'), value: store }), _jsx(InfoItems, { title: t('user.appVersion'), value: Env.version }), _jsx(InfoItems, { title: t('user.sdkVersion'), value: Env.sdkVersion || t('user.unknown') })] })\n }\n ];\n return (_jsx(\"div\", { className: \"w-full\", children: _jsxs(Tabs, { defaultValue: \"user\", tabs: tabs, fullWidth: true, updateHash: false, children: [_jsx(TabsBar, {}), _jsx(TabsPanel, {})] }) }));\n}\n//# sourceMappingURL=UserInfo.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Permission } from \"@vertesia/common\";\nimport { Avatar, Button, MenuList, ModeToggle, Popover, PopoverContent, PopoverTrigger, Spinner } from \"@vertesia/ui/core\";\nimport { useUserSession } from \"@vertesia/ui/session\";\nimport clsx from \"clsx\";\nimport { useState } from \"react\";\nimport SignInModal from \"./SignInModal\";\nimport InfoList from \"./UserInfo\";\nimport { useNavigate } from \"@vertesia/ui/router\";\nimport { useUserPermissions } from \"@vertesia/ui/features\";\nexport function UserSessionMenu({}) {\n const { user, isLoading } = useUserSession();\n const [showModal, setShowModal] = useState(false);\n if (isLoading) {\n return _jsx(Spinner, {});\n }\n else if (!user) {\n return _jsxs(_Fragment, { children: [_jsx(Button, { onClick: () => setShowModal(true), children: \"Sign In\" }), _jsx(SignInModal, { isOpen: showModal, onClose: () => setShowModal(false) })] });\n }\n else {\n return (_jsx(\"div\", { className: \"px-3\", children: _jsx(UserSessionPopup, { asMenuTrigger: true }) }));\n }\n}\nfunction UserSessionPopup({ className, asMenuTrigger = false }) {\n const session = useUserSession();\n const navigate = useNavigate();\n const perms = useUserPermissions();\n const { user } = session;\n if (!session || !user)\n return null;\n const isProjectManager = perms.hasPermission(Permission.project_admin);\n return (_jsxs(Popover, { click: true, children: [_jsx(PopoverTrigger, { children: _jsx(\"div\", { className: clsx(className, \"flex items-center justify-start\", asMenuTrigger && \"cursor-pointer\"), children: _jsx(Avatar, { size: 'sm', color: 'bg-amber-500', shape: 'circle', \n /*src={picture} */\n name: user?.name }) }) }), _jsx(PopoverContent, { align: \"start\", className: \"w-[280px] mx-2 my-1 p-0\", children: _jsxs(\"div\", { className: 'divide-y divide-gray-200 dark:divide-slate-700', children: [_jsxs(\"div\", { className: 'py-2 pl-2', children: [_jsx(\"p\", { className: \"px-4 dark:text-white mb-1\", children: user?.name ?? 'Unknown' }), _jsx(\"p\", { className: \"px-4 text-xs text-gray-500\", children: user?.email ?? '' })] }), _jsx(\"div\", { className: \"w-full p-1\", children: _jsx(InfoList, {}) }), _jsx(\"div\", { className: 'py-2 pl-2', children: _jsx(ModeToggle, {}) }), _jsx(\"div\", { className: 'py-2', children: _jsxs(MenuList, { children: [isProjectManager && (_jsx(MenuList.Item, { className: 'px-2', onClick: () => navigate('/settings', { replace: true }), children: \"Settings\" })), _jsx(MenuList.Item, { className: 'px-2', onClick: () => session.logout(), children: \"Sign out\" })] }) })] }) })] }));\n}\n//# sourceMappingURL=UserSessionMenu.js.map","export function isVertesiaEmail(email) {\n return email ? (email.endsWith('@vertesiahq.com') ||\n email.endsWith('@becomposable.com') ||\n email.endsWith('@composableprompts.com')) : false;\n}\n//# sourceMappingURL=utils.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { useEffect, useState } from \"react\";\nimport { useUserSession } from \"@vertesia/ui/session\";\nexport function SplashScreen({ icon: Icon }) {\n const { isLoading } = useUserSession();\n const [show, setShow] = useState(true);\n useEffect(() => {\n if (!isLoading) {\n setShow(false);\n }\n }, [isLoading]);\n return (_jsx(AnimatePresence, { children: show && (_jsx(motion.div, { style: { zIndex: 999999, position: 'fixed', inset: 0 }, className: 'fixed inset-x-0 inset-y-0', initial: { opacity: 1 }, exit: { opacity: 0 }, transition: { ease: 'easeIn', duration: 0.5 }, children: _jsx(\"div\", { style: { display: 'flex', width: '100%', height: '100%', alignItems: 'center', justifyContent: 'center' }, className: \"flex w-full h-full items-center justify-center\", children: _jsx(\"div\", { className: \"animate-[spin_4s_linear_infinite]\", children: _jsx(\"div\", { className: 'animate-pulse rounded-full bg-transparent', children: Icon || _jsx(LoadingIcon, {}) }) }) }) })) }));\n}\nfunction LoadingIcon() {\n const stopColor1 = \"currentColor\";\n const stopColor2 = \"currentColor\";\n // const stopColor1 = \"#4F46E5\";\n // const stopColor2 = \"#4F46E5\";\n return (_jsxs(\"svg\", { width: \"32\", height: \"32\", className: \"w-8 h-8 text-indigo-600\", viewBox: \"0 0 50 50\", xmlns: \"http://www.w3.org/2000/svg\", children: [_jsx(\"defs\", { children: _jsxs(\"linearGradient\", { id: \"spinner-gradient\", x1: \"1\", y1: \"0\", x2: \"0\", y2: \"1\", children: [_jsx(\"stop\", { offset: \"0%\", stopColor: stopColor1, stopOpacity: \"1\" }), _jsx(\"stop\", { offset: \"100%\", stopColor: stopColor2, stopOpacity: \"0\" })] }) }), _jsx(\"circle\", { cx: \"25\", cy: \"25\", r: \"20\", stroke: \"url(#spinner-gradient)\", strokeWidth: \"5\", fill: \"none\", strokeLinecap: \"round\" })] }));\n}\n//# sourceMappingURL=SplashScreen.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { ThemeProvider, ToastProvider } from \"@vertesia/ui/core\";\nimport { UserPermissionProvider, TypeRegistryProvider } from \"@vertesia/ui/features\";\nimport { UserSessionProvider } from \"@vertesia/ui/session\";\nimport { SplashScreen } from \"./SplashScreen\";\nimport { SigninScreen } from \"./login/SigninScreen\";\nexport function VertesiaShell({ children, lightLogo, darkLogo, loadingIcon }) {\n return (_jsx(ToastProvider, { children: _jsx(UserSessionProvider, { children: _jsx(TypeRegistryProvider, { children: _jsxs(ThemeProvider, { defaultTheme: \"system\", storageKey: \"vite-ui-theme\", children: [_jsx(SplashScreen, { icon: loadingIcon }), _jsx(SigninScreen, { allowedPrefix: \"/shared/\", lightLogo: lightLogo, darkLogo: darkLogo }), _jsx(UserPermissionProvider, { children: children })] }) }) }) }));\n}\n//# sourceMappingURL=VertesiaShell.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createContext, useContext } from \"react\";\nexport const AppInstallationContext = createContext(null);\nexport function AppInstallationProvider({ installation, children }) {\n return (_jsx(AppInstallationContext.Provider, { value: installation, children: children }));\n}\n/**\n * Get the current app installation obejct when called in an app context otheriwse returns null\n */\nexport function useAppInstallation() {\n return useContext(AppInstallationContext);\n}\n//# sourceMappingURL=AppInstallationProvider.js.map","import { jsxs as _jsxs, jsx as _jsx } from \"react/jsx-runtime\";\nimport { SelectBox, useFetch } from \"@vertesia/ui/core\";\nimport { LastSelectedAccountId_KEY, LastSelectedProjectId_KEY, useUserSession } from \"@vertesia/ui/session\";\nimport { useState } from \"react\";\nexport function AppProjectSelector({ app, onChange, placeholder }) {\n const { client, project } = useUserSession();\n const { data: projects, error } = useFetch(() => {\n return client.apps.getAppInstallationProjects(app);\n }, [app.id, app.name]);\n const _onChange = (project) => {\n if (onChange) {\n if (!onChange(project)) {\n // if onChange returns true then the defualt on change is called\n return;\n }\n }\n // default on change\n localStorage.setItem(LastSelectedAccountId_KEY, project.account);\n localStorage.setItem(LastSelectedProjectId_KEY + '-' + project.account, project.id);\n window.location.reload();\n };\n if (error) {\n return _jsxs(\"span\", { className: 'text-red-600', children: [\"Error: failed to fetch projects: \", error.message] });\n }\n return _jsx(SelectProject, { placeholder: placeholder, initialValue: project?.id, projects: projects || [], onChange: _onChange });\n}\nfunction SelectProject({ initialValue, projects, onChange, placeholder = \"Select Project\" }) {\n const [value, setValue] = useState();\n const _onChange = (value) => {\n setValue(value);\n onChange(value);\n };\n let actualValue = !value && initialValue ? projects.find(p => p.id === initialValue) : value;\n return (_jsx(SelectBox, { by: \"id\", value: actualValue, options: projects, optionLabel: (option) => option.name, placeholder: placeholder, onChange: _onChange }));\n}\n//# sourceMappingURL=AppProjectSelector.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Center, useFetch, SelectBox } from \"@vertesia/ui/core\";\nimport { LastSelectedAccountId_KEY, LastSelectedProjectId_KEY, useUserSession } from \"@vertesia/ui/session\";\nimport { LockIcon } from \"lucide-react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useUITranslation } from '../../i18n/index.js';\nimport { AppInstallationProvider } from \"./AppInstallationProvider\";\nexport function StandaloneApp({ name, AccessDenied = AccessDeniedMessage, children }) {\n return name ? (_jsx(StandaloneAppImpl, { name: name, AccessDenied: AccessDenied, children: children })) : (_jsx(UnknownAppName, {}));\n}\nexport function StandaloneAppImpl({ name, AccessDenied = AccessDeniedMessage, children }) {\n const { authToken, client } = useUserSession();\n const [installation, setInstallation] = useState(null);\n const [state, setState] = useState(\"loading\");\n useEffect(() => {\n if (!authToken) {\n setState(\"loading\");\n }\n else {\n const isAppVisible = authToken.apps.includes(name);\n if (isAppVisible) {\n client.apps.getAppInstallationByName(name).then(inst => {\n if (!inst) {\n console.log(`App ${name} not found!`);\n setState(\"error\");\n }\n else {\n setState(\"loaded\");\n setInstallation(inst);\n }\n });\n }\n else {\n setState(\"error\");\n }\n }\n }, [name, authToken]);\n if (state === \"loading\") {\n return null;\n }\n else if (state === \"error\") {\n return _jsx(AccessDenied, { name: name });\n }\n else if (installation) {\n return _jsx(AppInstallationProvider, { installation: installation, children: children });\n }\n}\nfunction AccessDeniedMessage({ name }) {\n const { project, accounts, client } = useUserSession();\n const { t } = useUITranslation();\n const [selectedAccountId, setSelectedAccountId] = useState();\n // Fetch all projects where the app is installed across all organizations\n const { data: allProjects } = useFetch(() => {\n return client.apps.getAppInstallationProjects({ name });\n }, [name]);\n // Group projects by organization\n const { projectsByOrg, orgOptions } = useMemo(() => {\n if (!allProjects || !accounts)\n return { projectsByOrg: {}, orgOptions: [] };\n const grouped = {};\n for (const p of allProjects) {\n if (!grouped[p.account]) {\n grouped[p.account] = [];\n }\n grouped[p.account].push(p);\n }\n // Only show orgs that have projects with the app installed\n const orgsWithProjects = accounts.filter(a => grouped[a.id]?.length > 0);\n return { projectsByOrg: grouped, orgOptions: orgsWithProjects };\n }, [allProjects, accounts]);\n // Auto-select first org if not selected\n useEffect(() => {\n if (!selectedAccountId && orgOptions.length > 0) {\n setSelectedAccountId(orgOptions[0].id);\n }\n }, [orgOptions, selectedAccountId]);\n const onProjectChange = (selected) => {\n localStorage.setItem(LastSelectedAccountId_KEY, selected.account);\n localStorage.setItem(LastSelectedProjectId_KEY + '-' + selected.account, selected.id);\n window.location.reload();\n };\n const filteredProjects = selectedAccountId ? (projectsByOrg[selectedAccountId] || []) : [];\n const selectedOrg = orgOptions.find(a => a.id === selectedAccountId);\n return (_jsxs(Center, { className: \"pt-10 flex flex-col items-center text-center text-gray-700\", children: [_jsx(LockIcon, { className: \"w-10 h-10 mb-4 text-gray-500\" }), _jsx(\"div\", { className: \"text-xl font-semibold\", children: t('shell.accessDenied') }), _jsxs(\"div\", { className: \"mt-2 text-sm text-gray-500\", children: [\"You don't have permission to view the \", _jsx(\"span\", { className: \"font-semibold\", children: name }), \" app in project: \", _jsxs(\"span\", { className: \"font-semibold\", children: [\"\\u00AB\", project?.name, \"\\u00BB\"] }), \".\"] }), orgOptions.length === 0 && allProjects !== undefined && (_jsx(\"div\", { className: \"mt-4 text-sm text-gray-500\", children: \"This app is not installed in any project you have access to.\" })), orgOptions.length > 0 && (_jsxs(\"div\", { className: \"mt-4 flex flex-row gap-4 items-end\", children: [orgOptions.length > 1 && (_jsxs(\"div\", { children: [_jsx(\"div\", { className: \"text-sm text-gray-500 mb-2\", children: t('shell.organization') }), _jsx(SelectBox, { by: \"id\", value: selectedOrg, options: orgOptions, optionLabel: (option) => option.name, placeholder: t('shell.selectOrganization'), onChange: (org) => setSelectedAccountId(org.id) })] })), _jsxs(\"div\", { children: [orgOptions.length > 1 && _jsx(\"div\", { className: \"text-sm text-gray-500 mb-2\", children: t('login.terminal.project') }), _jsx(SelectBox, { by: \"id\", value: undefined, options: filteredProjects, optionLabel: (option) => option.name, placeholder: t('shell.selectProject'), onChange: onProjectChange })] })] }))] }));\n}\nfunction UnknownAppName() {\n const { t } = useUITranslation();\n return (_jsxs(Center, { className: \"pt-10 flex flex-col items-center text-center text-gray-700\", children: [_jsx(LockIcon, { className: \"w-10 h-10 mb-4 text-gray-500\" }), _jsx(\"div\", { className: \"text-xl font-semibold\", children: t('shell.applicationNotRegistered') }), _jsxs(\"div\", { className: \"mt-2 text-sm text-gray-500\", children: [\"Before starting to code a Vertesia application you must register an application manifest in Vertesia Studio then install it in one or more projects.\", _jsx(\"p\", {}), \"Then use the created app name as a parameter to \", _jsx(\"code\", { children: \"<StandaloneApp name=\\\"your-app-name\\\">\" }), \" in the \", _jsx(\"code\", { children: \"src/main.tsx\" }), \" file.\"] })] }));\n}\n//# sourceMappingURL=StandaloneApp.js.map"],"names":["NAMESPACE","i18nInstance","i18next","createInstance","useUITranslation","useTranslation","i18n","InviteAcceptModal","session","useUserSession","client","account","t","showModal","setShowModal","useState","invites","setInvites","useEffect","listInvites","then","length","notLegacyInvites","filter","i","data","console","log","catch","err","error","id","closeModal","inviteList","map","invite","_jsxs","className","children","_jsx","name","project","role","invited_by","Button","size","onClick","async","acceptInvite","fetchAccounts","fetchProjects","accept","variant","rejectInvite","remainingInvites","reject","warn","Modal","isOpen","onClose","ModalTitle","ModalBody","EnterpriseSigninButton","redirectTo","isLoading","setIsLoading","trackEvent","useUXTracking","email","setEmail","toast","useToast","_Fragment","Input","value","onChange","placeholder","type","Spinner","test","setFirebaseTenant","title","status","duration","localStorage","setItem","provider","Env","firebase","Error","providerType","OAuthProvider","redirectPath","window","location","pathname","GoogleAuthProvider","addScope","setCustomParameters","prompt","redirect_uri","origin","getProvider","firebaseTenantName","logger","info","vertesia","firebaseTenantId","signInWithRedirect","getFirebaseAuth","GitHubSignInButton","removeItem","GithubAuthProvider","src","loading","alt","GoogleSignInButton","MicrosoftSignInButton","_redirectTo","SignupForm","onSignup","goBack","accountType","setAccountType","undefined","companySize","setCompanySize","companyName","setCompanyName","companyWebsite","setCompanyWebsite","projectMaturity","setProjectMaturity","fbUser","setFbUser","setError","isCompany","companySizeOptions","label","accountTypeOptions","description","projectMaturityOptions","user","currentUser","displayName","FormItem","RadioGroup","options","selected","find","option","onSelect","SelectBox","optionLabel","required","signupData","maturity","JSON","stringify","fbToken","getIdToken","SigninScreen","allowedPrefix","isNested","lightLogo","darkLogo","allow","setAllow","useSafeLayoutEffect","href","startsWith","SigninScreenImpl","authError","style","zIndex","clsx","StandardSigninPanel","RegionTag","setSignupData","collectSignupData","setCollectSignupData","signOut","history","replaceState","goToSignup","UserNotFoundError","getItem","payload","firebaseToken","fetch","endpoints","studio","method","headers","body","res","message","use","initReactI18next","init","resources","ar","de","en","es","fr","it","ja","ko","pt","ru","tr","zh","fallbackLng","ns","defaultNS","interpolation","escapeValue","react","useSuspense","LOOPBACK_HOSTS","Set","getClientInfo","params","URLSearchParams","search","redirect","rawRedirect","decoded","parsed","decodeURIComponent","URL","protocol","port","username","password","has","hostname","toString","parseRedirectUri","get","code","profile","TerminalLogin","setPayload","clientInfo","useLocation","onAccept","token","fetchComposableTokenFromFirebaseToken","studio_server_url","zeno_server_url","zeno","page","AuthDoneScreen","AuthAcceptScreen","ErrorBox","allProjects","useFetch","projects","list","Promise","resolve","envName","isLocalDev","isDev","ProfileForm","Center","navigator","clipboard","writeText","accounts","currentData","setCurrentData","p","SelectAccount","SelectProject","a","by","SignInModal","ModalFooter","align","InfoItems","isCopied","setIsCopied","VTooltip","placement","Check","CopyIcon","setTimeout","copyToClipboard","InfoList","authToken","server","baseUrl","store","tenantId","getTenantIdFromProject","tabs","content","sub","account_roles","join","project_roles","version","sdkVersion","Tabs","defaultValue","fullWidth","updateHash","TabsBar","TabsPanel","UserSessionMenu","UserSessionPopup","asMenuTrigger","navigate","useNavigate","perms","useUserPermissions","isProjectManager","hasPermission","Permission","project_admin","Popover","click","PopoverTrigger","Avatar","color","shape","PopoverContent","ModeToggle","MenuList","Item","replace","logout","isVertesiaEmail","endsWith","SplashScreen","icon","Icon","show","setShow","AnimatePresence","motion","div","position","inset","initial","opacity","exit","transition","ease","display","width","height","alignItems","justifyContent","LoadingIcon","viewBox","xmlns","x1","y1","x2","y2","offset","stopColor","stopOpacity","cx","cy","r","stroke","strokeWidth","fill","strokeLinecap","VertesiaShell","loadingIcon","ToastProvider","UserSessionProvider","TypeRegistryProvider","ThemeProvider","defaultTheme","storageKey","UserPermissionProvider","AppInstallationContext","createContext","AppInstallationProvider","installation","Provider","useAppInstallation","useContext","AppProjectSelector","app","apps","getAppInstallationProjects","initialValue","LastSelectedAccountId_KEY","LastSelectedProjectId_KEY","reload","setValue","actualValue","StandaloneApp","AccessDenied","AccessDeniedMessage","StandaloneAppImpl","UnknownAppName","setInstallation","state","setState","includes","getAppInstallationByName","inst","selectedAccountId","setSelectedAccountId","projectsByOrg","orgOptions","useMemo","grouped","push","orgsWithProjects","filteredProjects","selectedOrg","LockIcon","org"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vertesia-ui-shell.js","sources":["esm/i18n/instance.js","esm/i18n/index.js","esm/shell/login/InviteAcceptModal.js","esm/shell/login/EnterpriseSigninButton.js","esm/shell/login/GitHubSignInButton.js","esm/shell/login/GoogleSignInButton.js","esm/shell/login/MicrosoftSigninButton.js","esm/shell/login/SignupForm.js","esm/shell/login/SigninScreen.js","esm/shell/login/TerminalLogin.js","esm/shell/login/SignInModal.js","esm/shell/login/UserInfo.js","esm/shell/login/UserSessionMenu.js","esm/shell/utils.js","esm/shell/SplashScreen.js","esm/shell/VertesiaShell.js","esm/shell/apps/AppInstallationProvider.js","esm/shell/apps/AppProjectSelector.js","esm/shell/apps/StandaloneApp.js"],"sourcesContent":["import i18next from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport ar from './locales/ar.json';\nimport de from './locales/de.json';\nimport en from './locales/en.json';\nimport es from './locales/es.json';\nimport fr from './locales/fr.json';\nimport it from './locales/it.json';\nimport ja from './locales/ja.json';\nimport ko from './locales/ko.json';\nimport pt from './locales/pt.json';\nimport ru from './locales/ru.json';\nimport tr from './locales/tr.json';\nimport zh from './locales/zh.json';\nimport zhTW from './locales/zh-TW.json';\nexport const NAMESPACE = 'vertesia.ui';\n// Scoped instance — does NOT touch the global i18next singleton\nconst i18nInstance = i18next.createInstance();\nvoid i18nInstance.use(initReactI18next).init({\n resources: {\n ar: { [NAMESPACE]: ar },\n de: { [NAMESPACE]: de },\n en: { [NAMESPACE]: en },\n es: { [NAMESPACE]: es },\n fr: { [NAMESPACE]: fr },\n it: { [NAMESPACE]: it },\n ja: { [NAMESPACE]: ja },\n ko: { [NAMESPACE]: ko },\n pt: { [NAMESPACE]: pt },\n ru: { [NAMESPACE]: ru },\n tr: { [NAMESPACE]: tr },\n zh: { [NAMESPACE]: zh },\n 'zh-TW': { [NAMESPACE]: zhTW },\n },\n fallbackLng: 'en',\n ns: [NAMESPACE],\n defaultNS: NAMESPACE,\n interpolation: {\n escapeValue: false, // React already escapes\n },\n react: {\n useSuspense: false, // Translations are bundled, no async loading\n },\n});\nexport { i18nInstance };\n//# sourceMappingURL=instance.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useEffect } from 'react';\nimport { I18nextProvider, useTranslation } from 'react-i18next';\nimport { i18nInstance, NAMESPACE } from './instance.js';\nfunction detectLanguage(lng) {\n return lng ?? navigator.language?.split('-')[0] ?? 'en';\n}\nexport function I18nProvider({ lng, children }) {\n // Set language synchronously on first render to avoid flash of wrong language\n const language = detectLanguage(lng);\n if (i18nInstance.language !== language) {\n void i18nInstance.changeLanguage(language);\n }\n // Also react to prop changes\n useEffect(() => {\n const lang = detectLanguage(lng);\n if (i18nInstance.language !== lang) {\n void i18nInstance.changeLanguage(lang);\n }\n }, [lng]);\n return (_jsx(I18nextProvider, { i18n: i18nInstance, children: children }));\n}\n/**\n * Hook for components inside @vertesia/ui to get translation functions.\n * Always binds to the 'vertesia.ui' namespace on the scoped instance.\n */\nexport function useUITranslation() {\n return useTranslation(NAMESPACE, { i18n: i18nInstance });\n}\nexport { i18nInstance, NAMESPACE } from './instance.js';\n//# sourceMappingURL=index.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Button, Modal, ModalBody, ModalTitle } from \"@vertesia/ui/core\";\nimport { useEffect, useState } from \"react\";\nimport { useUserSession } from \"@vertesia/ui/session\";\nimport { useUITranslation } from '../../i18n/index.js';\nexport function InviteAcceptModal() {\n const session = useUserSession();\n const { client, account } = session;\n const { t } = useUITranslation();\n const [showModal, setShowModal] = useState(false);\n const [invites, setInvites] = useState([]);\n useEffect(() => {\n client.account.listInvites().then(invites => {\n if (invites.length > 0) {\n // Filter out legacy invites that do not have account data\n const notLegacyInvites = invites.filter(i => i.data.account);\n if (notLegacyInvites.length === 0) {\n console.log(\"No valid invites found, closing modal\");\n return;\n }\n // If we have valid invites, show the modal\n console.log(\"Found valid invites\", notLegacyInvites.length);\n setShowModal(true);\n setInvites(notLegacyInvites);\n }\n else {\n console.log(\"No invites found, closing modal\");\n setShowModal(false);\n }\n }).catch(err => {\n console.error(\"Error fetching invites\", err);\n });\n }, [account?.id]);\n const closeModal = () => setShowModal(false);\n const accept = async (invite) => {\n await client.account.acceptInvite(invite.id);\n await session.authCallback;\n await session.fetchAccounts();\n await session.fetchProjects(invite.data.account.id);\n const remainingInvites = invites.filter(i => i.id !== invite.id);\n const notLegacyInvites = remainingInvites.filter(i => i.data.account);\n if (notLegacyInvites.length > 0) {\n setInvites(notLegacyInvites);\n }\n else {\n closeModal();\n }\n };\n const reject = async (invite) => {\n await client.account.rejectInvite(invite.id);\n const remainingInvites = invites.filter(i => i.id !== invite.id);\n setInvites(remainingInvites);\n if (remainingInvites.length === 0) {\n closeModal();\n }\n };\n const inviteList = invites.map(invite => {\n if (!invite.data.account) {\n console.warn(\"Invite has no account data\", invite);\n return null; // Skip rendering this invite\n }\n return (_jsxs(\"div\", { className: \"flex flex-row w-full justify-between border rounded-sm px-2 py-2 \", children: [_jsxs(\"div\", { className: \"flex flex-col\", children: [_jsx(\"div\", { className: \"w-full font-semibold\", children: invite.data.account.name ?? invite.data.account }), invite.data.project && _jsxs(\"div\", { className: \"w-full text-base\", children: [\"- \", invite.data.project.name] }), _jsxs(\"div\", { className: \"text-xs\", children: [\"Role: \", invite.data.role] }), invite.data.invited_by && _jsxs(\"div\", { className: \"text-xs\", children: [\"by \", invite.data.invited_by.name ?? invite.data.invited_by] })] }), _jsxs(\"div\", { className: \"flex flex-col gap-4\", children: [_jsx(Button, { size: 'xs', onClick: () => accept(invite), children: t('login.accept') }), \" \", _jsx(Button, { size: 'xs', variant: \"secondary\", onClick: () => reject(invite), children: t('login.reject') })] })] }, invite.id));\n });\n return (_jsx(\"div\", { children: _jsxs(Modal, { isOpen: showModal, onClose: closeModal, children: [_jsx(ModalTitle, { children: t('login.reviewInvites') }), _jsxs(ModalBody, { children: [_jsx(\"div\", { className: \"text-sm pb-4\", children: \"You have received the following invites to join other accounts. Please review and accept or declined them.\" }), inviteList] })] }) }));\n}\n//# sourceMappingURL=InviteAcceptModal.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Button, Input, Spinner, useToast } from \"@vertesia/ui/core\";\nimport { Env } from \"@vertesia/ui/env\";\nimport { useUITranslation } from \"@vertesia/ui/i18n\";\nimport { getFirebaseAuth, setFirebaseTenant, useUXTracking } from \"@vertesia/ui/session\";\nimport { GoogleAuthProvider, OAuthProvider, signInWithRedirect } from \"firebase/auth\";\nimport { useState } from \"react\";\nfunction getProvider(redirectTo) {\n if (!Env.firebase) {\n throw new Error(\"Firebase configuration is not available in the environment\");\n }\n const providerType = Env.firebase.providerType;\n switch (providerType) {\n case \"oidc\":\n return new OAuthProvider(\"oidc.main\");\n case \"google\": {\n let redirectPath = redirectTo || window.location.pathname || '/';\n if (redirectPath[0] !== '/') {\n redirectPath = '/' + redirectPath;\n }\n const provider = new GoogleAuthProvider();\n provider.addScope('profile');\n provider.addScope('email');\n provider.setCustomParameters({\n prompt: 'select_account',\n redirect_uri: window.location.origin + redirectPath\n });\n return provider;\n }\n case \"microsoft\":\n return new OAuthProvider(\"microsoft.com\");\n case \"github\":\n return new OAuthProvider(\"github.com\");\n default:\n return new OAuthProvider(\"oidc.main\");\n }\n}\nexport default function EnterpriseSigninButton({ redirectTo }) {\n const { t } = useUITranslation();\n const [isLoading, setIsLoading] = useState(false);\n const { trackEvent } = useUXTracking();\n const [email, setEmail] = useState(\"\");\n const toast = useToast();\n const signIn = async () => {\n if (!email)\n return;\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(email)) {\n toast({\n title: t('auth.invalidEmail'),\n status: \"error\",\n duration: 5000,\n });\n return;\n }\n // Env.firebase.tenantEmail = email;\n setIsLoading(true);\n setFirebaseTenant(email).then((data) => {\n if (!data) {\n toast({\n title: t('auth.tenantNotFound'),\n status: \"error\",\n duration: 5000,\n });\n setIsLoading(false);\n return;\n }\n localStorage.setItem(\"tenantName\", data.name ?? \"\");\n const provider = getProvider(redirectTo);\n trackEvent(\"enterprise_signin\", {\n firebaseTenantName: data.name,\n });\n Env.logger.info('Enterprise single sign-in', {\n vertesia: {\n email: email,\n firebaseTenantName: data.name,\n firebaseTenantId: data.firebaseTenantId,\n },\n });\n signInWithRedirect(getFirebaseAuth(), provider);\n setIsLoading(false);\n });\n };\n return (_jsxs(_Fragment, { children: [_jsx(Input, { value: email, onChange: setEmail, placeholder: t('auth.enterEnterpriseEmail'), type: \"email\" }), isLoading ? (_jsx(\"div\", { className: \"w-full flex justify-center\", children: _jsx(Spinner, {}) })) : (_jsx(Button, { variant: \"outline\", onClick: signIn, className: \"w-full mt-2 py-4 flex rounded-lg hover:shadow-sm transition duration-150 text-center\", children: _jsx(\"span\", { className: \"text-sm font-semibold\", children: t('auth.continueWithEnterprise') }) }))] }));\n}\n//# sourceMappingURL=EnterpriseSigninButton.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { GithubAuthProvider, signInWithRedirect } from \"firebase/auth\";\nimport { getFirebaseAuth } from \"@vertesia/ui/session\";\nimport { Button } from \"@vertesia/ui/core\";\nimport { useUITranslation } from \"@vertesia/ui/i18n\";\nexport default function GitHubSignInButton({}) {\n const { t } = useUITranslation();\n const signIn = () => {\n localStorage.removeItem(\"tenantName\");\n const provider = new GithubAuthProvider();\n provider.addScope(\"profile\");\n provider.addScope(\"email\");\n /*provider.setCustomParameters({\n redirect_uri: redirectPath,\n });*/\n signInWithRedirect(getFirebaseAuth(), provider);\n };\n return (_jsxs(Button, { variant: \"outline\", onClick: signIn, className: \"w-full py-5 flex rounded-lg hover:shadow-sm transition duration-150 text-center mb-2\", children: [_jsx(\"img\", { className: \"size-6 bg-white rounded-full\", src: \"https://www.svgrepo.com/show/503359/github.svg\", loading: \"lazy\", alt: \"github logo\" }), _jsx(\"span\", { className: \"text-sm font-semibold\", children: t('auth.continueWithGithub') })] }));\n}\n//# sourceMappingURL=GitHubSignInButton.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { GoogleAuthProvider, signInWithRedirect } from \"firebase/auth\";\nimport { getFirebaseAuth } from \"@vertesia/ui/session\";\nimport { Button } from \"@vertesia/ui/core\";\nimport { useUITranslation } from \"@vertesia/ui/i18n\";\nexport default function GoogleSignInButton({ redirectTo }) {\n const { t } = useUITranslation();\n const signIn = () => {\n localStorage.removeItem(\"tenantName\");\n let redirectPath = redirectTo || window.location.pathname || '/';\n if (redirectPath[0] !== '/') {\n redirectPath = '/' + redirectPath;\n }\n const provider = new GoogleAuthProvider();\n provider.addScope('profile');\n provider.addScope('email');\n // always ask to select the google account\n //console.log('redirectPath', window.location.origin + redirectPath)\n provider.setCustomParameters({\n prompt: 'select_account',\n redirect_uri: window.location.origin + redirectPath\n });\n signInWithRedirect(getFirebaseAuth(), provider);\n };\n return (_jsxs(Button, { variant: \"outline\", onClick: signIn, className: \"w-full py-5 flex rounded-lg hover:shadow-sm transition duration-150 text-center mb-2\", children: [_jsx(\"img\", { className: \"size-6\", src: \"https://www.svgrepo.com/show/475656/google-color.svg\", loading: \"lazy\", alt: \"google logo\" }), _jsx(\"span\", { className: \"text-sm font-semibold\", children: t('auth.continueWithGoogle') })] }));\n}\n//# sourceMappingURL=GoogleSignInButton.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { OAuthProvider, signInWithRedirect } from \"firebase/auth\";\nimport { getFirebaseAuth } from \"@vertesia/ui/session\";\nimport { Button } from \"@vertesia/ui/core\";\nimport { useUITranslation } from \"@vertesia/ui/i18n\";\nexport default function MicrosoftSignInButton({ redirectTo: _redirectTo }) {\n const { t } = useUITranslation();\n const signIn = () => {\n localStorage.removeItem(\"tenantName\");\n const provider = new OAuthProvider('microsoft.com');\n provider.addScope('profile');\n provider.addScope('email');\n signInWithRedirect(getFirebaseAuth(), provider);\n };\n return (_jsxs(Button, { variant: \"outline\", onClick: signIn, className: \"w-full py-5 flex rounded-lg hover:shadow-sm transition duration-150 text-center\", children: [_jsx(\"img\", { className: \"size-6\", src: \"https://learn.microsoft.com/en-us/entra/identity-platform/media/howto-add-branding-in-apps/ms-symbollockup_mssymbol_19.svg\", loading: \"lazy\", alt: \"microsoft logo\" }), _jsx(\"span\", { className: \"text-sm font-semibold\", children: t('auth.continueWithMicrosoft') })] }));\n}\n//# sourceMappingURL=MicrosoftSigninButton.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Button, Input, RadioGroup, SelectBox } from \"@vertesia/ui/core\";\nimport { useEffect, useState } from \"react\";\nimport { getFirebaseAuth } from \"@vertesia/ui/session\";\nimport { useUITranslation } from '../../i18n/index.js';\nexport default function SignupForm({ onSignup, goBack }) {\n const { t } = useUITranslation();\n const [accountType, setAccountType] = useState(undefined);\n const [companySize, setCompanySize] = useState(undefined);\n const [companyName, setCompanyName] = useState(undefined);\n const [companyWebsite, setCompanyWebsite] = useState(undefined);\n const [projectMaturity, setProjectMaturity] = useState(undefined);\n const [fbUser, setFbUser] = useState(undefined);\n const [error, setError] = useState(undefined);\n const isCompany = accountType === \"company\";\n const companySizeOptions = [\n { id: 1, label: t('signup.size1to10') },\n { id: 11, label: t('signup.size11to100') },\n { id: 101, label: t('signup.size101to1000') },\n { id: 1001, label: t('signup.size1001to5000') },\n { id: 5001, label: t('signup.size5000plus') },\n ];\n const accountTypeOptions = [\n {\n id: \"personal\",\n label: t('signup.personal'),\n description: t('signup.personalDescription'),\n },\n {\n id: \"company\",\n label: t('signup.company'),\n description: t('signup.companyDescription'),\n },\n ];\n const projectMaturityOptions = [\n { id: \"testing\", label: t('signup.justTesting') },\n { id: \"exploring\", label: t('signup.activelyExploring') },\n { id: \"using\", label: t('signup.alreadyUsing') },\n { id: \"migrating\", label: t('signup.migratingLLMs') },\n { id: \"other\", label: t('signup.other') },\n ];\n useEffect(() => {\n const user = getFirebaseAuth().currentUser;\n if (!user) {\n console.error('No user found');\n return;\n }\n setFbUser(user);\n }, [fbUser]);\n const isValid = () => {\n if (!accountType) {\n setError(t('signup.pleaseSelectAccountType'));\n return false;\n }\n if (isCompany && !companyName) {\n setError(t('signup.pleaseEnterOrgName'));\n return false;\n }\n if (isCompany && !companySize) {\n setError(t('signup.pleaseSelectCompanySize'));\n return false;\n }\n return true;\n };\n const onSubmit = async () => {\n if (!isValid())\n return;\n if (!accountType)\n return;\n const signupData = {\n accountType: accountType,\n companyName: companyName,\n companySize: companySize?.id,\n companyWebsite: companyWebsite,\n maturity: projectMaturity,\n };\n window.localStorage.setItem(\"composableSignupData\", JSON.stringify(signupData));\n const fbToken = await getFirebaseAuth().currentUser?.getIdToken();\n console.log('Got firebase token', getFirebaseAuth(), fbToken);\n if (!fbToken) {\n console.error('No firebase token found');\n return;\n }\n onSignup(signupData, fbToken);\n };\n return (_jsxs(\"div\", { className: \"flex flex-col space-y-2\", children: [_jsxs(\"div\", { className: \"prose\", children: [_jsx(\"p\", { className: \"prose text-sm text-muted pt-4\", children: t('signup.welcomeMessage', { name: fbUser?.displayName, email: fbUser?.email }) }), error &&\n _jsx(\"div\", { className: \"text-destructive\", children: error })] }), _jsx(FormItem, { label: t('signup.accountType'), children: _jsx(RadioGroup, { options: accountTypeOptions, selected: accountTypeOptions.find((option) => option.id === accountType), onSelect: (option) => setAccountType(option.id) }) }), isCompany &&\n _jsxs(_Fragment, { children: [_jsx(FormItem, { label: t('signup.companySize'), children: _jsx(SelectBox, { className: \"w-full border border-accent bg-muted\", value: companySize, options: companySizeOptions, onChange: setCompanySize, optionLabel: (option) => option?.label, placeholder: t('signup.selectCompanySize') }) }), _jsx(FormItem, { label: t('signup.companyName'), children: _jsx(Input, { value: companyName, onChange: setCompanyName, type: \"text\", required: true }) }), _jsx(FormItem, { label: t('signup.companyWebsite'), children: _jsx(Input, { value: companyWebsite, onChange: setCompanyWebsite, type: \"text\" }) })] }), _jsx(FormItem, { label: t('signup.projectMaturity'), children: _jsx(SelectBox, { className: \"w-full border border-accent bg-muted\", options: projectMaturityOptions, value: projectMaturityOptions.find((option) => option.id === projectMaturity), optionLabel: (option) => option?.label, placeholder: t('signup.selectProjectMaturity'), onChange: (option) => setProjectMaturity(option?.id) }) }), _jsxs(\"div\", { className: \"pt-8 flex flex-col\", children: [_jsx(Button, { variant: \"primary\", onClick: onSubmit, size: \"xl\", children: _jsx(\"span\", { className: \"text-lg\", children: t('signup.signUp') }) }), _jsx(Button, { variant: \"ghost\", size: \"xl\", className: \"mt-4\", onClick: goBack, children: _jsx(\"span\", { className: \"\", children: t('signup.wrongAccountGoBack') }) })] })] }));\n}\nfunction FormItem({ label, children }) {\n return (_jsxs(\"div\", { className: \"flex flex-col space-y-2 pt-4\", children: [_jsx(\"div\", { className: \"text-sm text-muted\", children: label }), children] }));\n}\n//# sourceMappingURL=SignupForm.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Button, useSafeLayoutEffect } from \"@vertesia/ui/core\";\nimport { Env } from \"@vertesia/ui/env\";\nimport { useUITranslation } from \"@vertesia/ui/i18n\";\nimport { UserNotFoundError, useUserSession, useUXTracking } from \"@vertesia/ui/session\";\nimport { RegionTag } from \"@vertesia/ui/layout\";\nimport clsx from \"clsx\";\nimport { useEffect, useState } from \"react\";\nimport EnterpriseSigninButton from \"./EnterpriseSigninButton\";\nimport GitHubSignInButton from \"./GitHubSignInButton\";\nimport GoogleSignInButton from \"./GoogleSignInButton\";\nimport MicrosoftSignInButton from \"./MicrosoftSigninButton\";\nimport SignupForm from \"./SignupForm\";\nexport function SigninScreen({ allowedPrefix, isNested = false, lightLogo, darkLogo }) {\n const [allow, setAllow] = useState(false);\n useSafeLayoutEffect(() => {\n allowedPrefix && setAllow(window.location.href.startsWith(allowedPrefix));\n }, []);\n return allow ? null : _jsx(SigninScreenImpl, { isNested: isNested, lightLogo: lightLogo, darkLogo: darkLogo });\n}\nfunction SigninScreenImpl({ isNested = false, lightLogo, darkLogo }) {\n const { t } = useUITranslation();\n const { isLoading, user, authError } = useUserSession();\n return !isLoading && !user ? (_jsx(\"div\", { style: { zIndex: 999998 }, className: (isNested ? \"absolute\" : \"fixed\") + \"overflow-y-auto \", children: _jsxs(\"div\", { className: clsx(\"flex flex-col items-center justify-center py-14 px-4\"), children: [_jsx(StandardSigninPanel, { authError: authError, lightLogo: lightLogo, darkLogo: darkLogo }), _jsxs(\"div\", { className: \"flex gap-x-6 mt-10 justify-center items-center text-muted\", children: [_jsx(\"a\", { href: \"https://vertesiahq.com/privacy\", className: \"text-sm\", children: t('auth.privacyPolicy') }), _jsx(\"a\", { href: \"https://vertesiahq.com/terms\", className: \"text-sm\", children: t('auth.termsOfService') }), _jsx(RegionTag, {})] })] }) })) : null;\n}\nfunction StandardSigninPanel({ authError, darkLogo, lightLogo }) {\n const { t } = useUITranslation();\n const [signupData, setSignupData] = useState(undefined);\n const [collectSignupData, setCollectSignupData] = useState(false);\n const { signOut } = useUserSession();\n const { trackEvent } = useUXTracking();\n history.replaceState({}, '', '/');\n const goBack = () => {\n console.log(\"Going back, signing out\");\n setSignupData(undefined);\n setCollectSignupData(false);\n signOut();\n };\n const goToSignup = () => {\n setSignupData(undefined);\n setCollectSignupData(true);\n };\n useEffect(() => {\n if (authError instanceof UserNotFoundError) {\n console.log(\"User not found, redirecting to signup\");\n goToSignup();\n }\n }, [authError]);\n const onSignup = (data, fbToken) => {\n console.log(\"Got Signup data\", data);\n setSignupData(data);\n const payload = {\n signupData: data,\n firebaseToken: fbToken,\n };\n fetch(Env.endpoints.studio + \"/auth/signup\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(payload),\n }).then((res) => {\n console.log(\"Signup successful\", payload, res);\n trackEvent(\"sign_up\");\n window.location.href = \"/\";\n });\n };\n return (_jsxs(_Fragment, { children: [lightLogo && _jsx(\"img\", { src: lightLogo, alt: 'logo', className: 'h-15 block dark:hidden' }), darkLogo && _jsx(\"img\", { src: darkLogo, alt: 'logo', className: 'h-15 hidden dark:block' }), signupData && (_jsxs(\"div\", { className: \"my-6\", children: [t('auth.needToMakeChange'), \" \", _jsxs(Button, { onClick: goToSignup, children: [\" \", t('auth.goBack')] })] })), _jsx(\"div\", { className: \"flex flex-col space-y-2\", children: collectSignupData && !localStorage.getItem('tenantName') ? (_jsx(SignupForm, { onSignup: onSignup, goBack: goBack })) : (_jsxs(\"div\", { className: \"flex flex-col\", children: [_jsx(\"div\", { className: \"my-4\", children: _jsx(\"h2\", { className: \"text-2xl font-bold text-center\", children: t('auth.logInOrSignUp') }) }), _jsxs(\"div\", { className: \"max-w-2xl text-center my-2 px-2\", children: [t('auth.firstTimeMessage'), _jsx(\"br\", {}), t('auth.firstTimeDetails')] }), _jsxs(\"div\", { className: \"flex items-center flex-col\", children: [_jsxs(\"div\", { className: \"py-4 w-70\", children: [_jsx(GoogleSignInButton, {}), _jsx(GitHubSignInButton, {}), _jsx(MicrosoftSignInButton, {})] }), _jsxs(\"div\", { className: \"flex items-center flex-row w-70 text-muted\", children: [_jsx(\"hr\", { className: \"w-full\" }), _jsx(\"div\", { className: \"px-2 text-xs\", children: t('auth.or') }), _jsx(\"hr\", { className: \"w-full\" })] }), _jsx(\"div\", { className: \"py-4 w-70\", children: _jsx(EnterpriseSigninButton, {}) })] }), authError && !(authError instanceof UserNotFoundError) && (_jsx(\"div\", { className: \"text-center\", children: _jsxs(\"div\", { className: \"\", children: [t('auth.signInError'), _jsx(\"br\", {}), t('auth.signInErrorContact'), _jsx(\"a\", { className: 'text-info mx-1', href: \"mailto:support@vertesiahq.com\", children: \"support@vertesiahq.com\" }), t('auth.signInErrorPersists'), _jsx(\"pre\", { className: \"mt-2\", children: t('auth.error', { message: authError.message }) })] }) }))] })) })] }));\n}\n//# sourceMappingURL=SigninScreen.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Button, Center, ErrorBox, Input, SelectBox, Spinner, useFetch, useToast } from '@vertesia/ui/core';\nimport { Env } from \"@vertesia/ui/env\";\nimport { useLocation } from \"@vertesia/ui/router\";\nimport { fetchComposableTokenFromFirebaseToken, useUserSession } from '@vertesia/ui/session';\nimport { useState } from 'react';\nimport { useUITranslation } from '../../i18n/index.js';\nconst LOOPBACK_HOSTS = new Set(['127.0.0.1', 'localhost']);\nfunction parseRedirectUri(rawRedirect) {\n if (!rawRedirect) {\n return null;\n }\n let decoded;\n try {\n decoded = decodeURIComponent(rawRedirect);\n }\n catch {\n return null;\n }\n let parsed;\n try {\n parsed = new URL(decoded);\n }\n catch {\n return null;\n }\n if (parsed.protocol !== 'http:') {\n return null;\n }\n if (!parsed.port) {\n return null;\n }\n if (parsed.username || parsed.password) {\n return null;\n }\n if (!LOOPBACK_HOSTS.has(parsed.hostname)) {\n return null;\n }\n return parsed.toString();\n}\nfunction getClientInfo(location) {\n const params = new URLSearchParams(location.search);\n const redirect = parseRedirectUri(params.get('redirect_uri'));\n const code = params.get('code');\n if (!redirect || !code) {\n return null;\n }\n const profile = params.get('profile') ?? \"default\";\n const project = params.get('project') ?? undefined;\n const account = params.get('account') ?? undefined;\n return { redirect, code, profile, project, account };\n}\nexport function TerminalLogin() {\n const [payload, setPayload] = useState();\n const [error, setError] = useState();\n const location = useLocation();\n const clientInfo = getClientInfo(location);\n const toast = useToast();\n const { t } = useUITranslation();\n const onAccept = async (data) => {\n if (!clientInfo)\n return;\n if (!data.profile) {\n toast({\n title: t('login.terminal.profileRequired'),\n description: t('login.terminal.profileRequiredDesc'),\n status: 'error',\n duration: 2000\n });\n return;\n }\n if (!data.account) {\n toast({\n title: t('login.terminal.accountRequired'),\n description: t('login.terminal.accountRequiredDesc'),\n status: 'error',\n duration: 2000\n });\n return;\n }\n if (!data.project) {\n toast({\n title: t('login.terminal.projectRequired'),\n description: t('login.terminal.projectRequiredDesc'),\n status: 'error',\n duration: 2000\n });\n return;\n }\n // expire in 1 day\n let payload;\n try {\n const token = await fetchComposableTokenFromFirebaseToken(data.account, data.project, 24 * 3600);\n if (token) {\n payload = {\n ...data,\n studio_server_url: Env.endpoints.studio,\n zeno_server_url: Env.endpoints.zeno,\n token,\n };\n await fetch(clientInfo.redirect, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(payload)\n });\n setPayload(payload);\n }\n else {\n toast({\n title: t('login.terminal.failedToGetToken'),\n status: 'error',\n duration: 5000\n });\n }\n }\n catch (err) {\n if (payload) {\n setError(err);\n setPayload(payload);\n }\n else {\n toast({\n title: t('login.terminal.errorAuthorizingClient'),\n description: err.message,\n status: 'error',\n duration: 5000\n });\n }\n }\n };\n const getPageContent = () => {\n if (!clientInfo) {\n return _jsx(ErrorBox, { title: t('login.terminal.invalidRequest'), children: t('login.terminal.invalidRequestDesc') });\n }\n return payload\n ? _jsx(AuthDoneScreen, { payload: payload, error: error })\n : _jsx(AuthAcceptScreen, { clientInfo: clientInfo, onAccept: onAccept });\n };\n const page = getPageContent();\n return (_jsx(\"div\", { className: \"w-full flex flex-col items-center gap-4 mt-24\", children: page }));\n}\nfunction AuthAcceptScreen({ onAccept, clientInfo }) {\n const { client, user } = useUserSession();\n const { data: allProjects, error } = useFetch(() => user ? client.projects.list() : Promise.resolve([]), [user]);\n const { t } = useUITranslation();\n if (error) {\n return _jsx(ErrorBox, { title: t('login.terminal.errorLoadingProjects'), children: error.message });\n }\n const getEnvironmentName = () => {\n if (Env.isLocalDev) {\n return t('login.terminal.envLocalDev');\n }\n else if (Env.isDev) {\n return t('login.terminal.envStaging');\n }\n return t('login.terminal.envProduction');\n };\n const envName = getEnvironmentName();\n return user && allProjects ? (_jsxs(_Fragment, { children: [_jsxs(\"div\", { className: 'w-1/3', children: [_jsxs(\"div\", { className: \"mb-4 text-xl font-semibold text-info\", children: [\"Authorizing client on \", envName, \" environment.\"] }), _jsxs(\"div\", { className: 'mb-2 text-md text-muted-foreground', children: [_jsx(\"div\", { children: t('login.terminal.clientWantsAuth') }), _jsxs(\"div\", { children: [\"The client app code is \", _jsx(\"b\", { className: \"text-foreground\", children: clientInfo.code }), \". You can check if the code is correct in the terminal.\"] })] }), _jsxs(\"div\", { className: 'mb-2 text-sm text-muted-foreground', children: [_jsx(\"div\", { children: t('login.terminal.chooseAccountProject') }), _jsx(\"div\", { children: t('login.terminal.profileNameNote') })] })] }), _jsx(ProfileForm, { onAccept: onAccept, allProjects: allProjects, data: clientInfo })] })) : _jsx(Spinner, { size: 'lg' });\n}\nfunction AuthDoneScreen({ payload, error }) {\n const toast = useToast();\n const { t } = useUITranslation();\n const onCopy = () => {\n if (payload) {\n navigator.clipboard.writeText(JSON.stringify(payload));\n toast({\n title: t('login.terminal.authPayloadCopied'),\n description: error ? t('login.terminal.authPayloadCopiedWithError', { error: error.message }) : t('login.terminal.authPayloadCopiedSuccess'),\n status: 'success',\n duration: 5000\n });\n }\n };\n return (_jsxs(\"div\", { children: [error ?\n _jsx(\"div\", { children: _jsx(ErrorBox, { title: t('login.terminal.failedToSendToken'), children: t('login.terminal.failedToSendTokenDesc', { error: error.message }) }) })\n : _jsx(\"div\", { children: t('login.terminal.clientAuthenticated') }), _jsx(Center, { className: \"mt-4\", children: _jsx(Button, { variant: 'secondary', onClick: onCopy, children: t('login.terminal.copyAuthPayload') }) })] }));\n}\nfunction ProfileForm({ allProjects, data, onAccept }) {\n const { accounts, account, project } = useUserSession();\n const { t } = useUITranslation();\n const [currentData, setCurrentData] = useState(() => ({\n profile: data.profile,\n account: data.account ?? account?.id,\n project: data.project ?? project?.id,\n }));\n const onChangeProfile = (value) => {\n setCurrentData({ ...currentData, profile: value });\n };\n const onChangeAccount = (value) => {\n setCurrentData({ ...currentData, account: value.id, project: undefined });\n };\n const onChangeProject = (value) => {\n setCurrentData({ ...currentData, project: value.id });\n };\n const projects = allProjects.filter(p => p.account === currentData.account);\n return (_jsxs(\"div\", { className: 'w-1/3', children: [_jsxs(\"div\", { className: \"mb-4 flex flex-col gap-2\", children: [_jsx(\"span\", { className: \"font-semibold text-muted-foreground\", children: t('login.terminal.profileName') }), _jsx(Input, { type: 'text', value: currentData.profile, onChange: onChangeProfile })] }), _jsxs(\"div\", { className: \"mb-4 flex flex-col gap-2\", children: [_jsx(\"span\", { className: \"font-semibold text-muted-foreground\", children: t('login.terminal.account') }), _jsx(SelectAccount, { value: currentData.account, onChange: onChangeAccount, accounts: accounts || [] })] }), _jsxs(\"div\", { className: \"mb-4 flex flex-col gap-2\", children: [_jsx(\"span\", { className: \"font-semibold text-muted-foreground\", children: t('login.terminal.project') }), _jsx(SelectProject, { value: currentData.project, onChange: onChangeProject, projects: projects })] }), _jsx(\"div\", { className: 'mb-4 text-sm text-attention', children: t('login.terminal.browserPermissionNote') }), _jsx(\"div\", { children: _jsx(Button, { size: 'xl', onClick: () => onAccept(currentData), children: t('login.terminal.authorizeClient') }) })] }));\n}\nfunction SelectAccount({ value, accounts, onChange }) {\n const { t } = useUITranslation();\n const _onChange = (value) => {\n onChange(value);\n };\n return _jsx(SelectBox, { options: accounts, value: accounts?.find(a => a.id === value), onChange: _onChange, by: \"id\", optionLabel: (option) => option.name, placeholder: t('login.terminal.selectAccount') });\n}\nfunction SelectProject({ value, projects, onChange }) {\n const { t } = useUITranslation();\n const _onChange = (value) => {\n onChange(value);\n };\n return (_jsx(SelectBox, { by: \"id\", value: projects.find(p => p.id === value), options: projects, optionLabel: (option) => option.name, placeholder: t('login.terminal.selectProject'), onChange: _onChange }));\n}\n//# sourceMappingURL=TerminalLogin.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Button, Modal, ModalBody, ModalFooter, ModalTitle } from \"@vertesia/ui/core\";\nimport GitHubSignInButton from \"./GitHubSignInButton\";\nimport GoogleSignInButton from \"./GoogleSignInButton\";\nimport MicrosoftSignInButton from \"./MicrosoftSigninButton\";\nexport default function SignInModal({ isOpen, onClose }) {\n return (_jsxs(Modal, { isOpen: isOpen, onClose: onClose, children: [_jsx(ModalTitle, { children: \"Sign In\" }), _jsxs(ModalBody, { className: \"flex justify-center\", children: [_jsx(GoogleSignInButton, {}), _jsx(GitHubSignInButton, {}), _jsx(MicrosoftSignInButton, {})] }), _jsx(ModalFooter, { align: \"right\", children: _jsx(Button, { variant: \"ghost\", onClick: onClose, children: \"Cancel\" }) })] }));\n}\n//# sourceMappingURL=SignInModal.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { getTenantIdFromProject } from \"@vertesia/common\";\nimport { Tabs, TabsBar, TabsPanel, VTooltip } from \"@vertesia/ui/core\";\nimport { Env } from \"@vertesia/ui/env\";\nimport { useUserSession } from \"@vertesia/ui/session\";\n// Package version is now passed as prop from the consuming application\nimport { Check, CopyIcon } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { useUITranslation } from '../../i18n/index.js';\nexport function InfoItems({ title, value }) {\n function copyToClipboard(value) {\n navigator.clipboard.writeText(value);\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), 2000);\n }\n const [isCopied, setIsCopied] = useState(false);\n return (_jsxs(\"div\", { className: \"w-full flex justify-between items-center mb-1\", children: [_jsxs(\"div\", { className: \"flex flex-col w-[calc(100%-3rem)]\", children: [_jsx(\"div\", { className: 'text-sm px-2 dark:text-slate-200', children: title }), _jsx(VTooltip, { description: value, size: \"xs\", placement: \"left\", children: _jsxs(\"div\", { className: 'text-xs truncate text-muted w-full text-left px-2', children: [value, \" \"] }) })] }), isCopied ?\n _jsx(Check, { className: \"size-4 cursor-pointer text-success\" })\n :\n _jsx(CopyIcon, { className: \"size-4 cursor-pointer text-gray-400 dark:text-slate-400\", onClick: () => copyToClipboard(value) })] }));\n}\nexport default function InfoList() {\n const { t } = useUITranslation();\n const session = useUserSession();\n const { account, project, client, authToken } = session;\n const server = new URL(client.baseUrl).hostname;\n const store = new URL(client.store.baseUrl).hostname;\n const tenantId = project ? getTenantIdFromProject(project) : '';\n const tabs = [\n {\n name: 'user',\n label: t('user.user'),\n content: _jsxs(\"div\", { className: \"space-y-1 p-2\", children: [_jsx(InfoItems, { title: t('user.organizationId'), value: account?.id ?? t('user.unknown') }), _jsx(InfoItems, { title: t('user.projectId'), value: project?.id ?? t('user.unknown') }), _jsx(InfoItems, { title: t('user.userId'), value: authToken?.sub ?? t('user.unknown') }), _jsx(InfoItems, { title: t('user.organizationRoles'), value: authToken?.account_roles?.join(',') ?? t('user.unknown') }), _jsx(InfoItems, { title: t('user.projectRoles'), value: authToken?.project_roles?.join(',') ?? t('user.unknown') })] })\n },\n {\n name: 'environment',\n label: t('user.environment'),\n content: _jsxs(\"div\", { className: \"space-y-1 p-2\", children: [_jsx(InfoItems, { title: t('user.tenantId'), value: tenantId }), _jsx(InfoItems, { title: t('user.environment'), value: Env.type }), _jsx(InfoItems, { title: t('user.server'), value: server }), _jsx(InfoItems, { title: t('user.store'), value: store }), _jsx(InfoItems, { title: t('user.appVersion'), value: Env.version }), _jsx(InfoItems, { title: t('user.sdkVersion'), value: Env.sdkVersion || t('user.unknown') })] })\n }\n ];\n return (_jsx(\"div\", { className: \"w-full\", children: _jsxs(Tabs, { defaultValue: \"user\", tabs: tabs, fullWidth: true, updateHash: false, children: [_jsx(TabsBar, {}), _jsx(TabsPanel, {})] }) }));\n}\n//# sourceMappingURL=UserInfo.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Permission } from \"@vertesia/common\";\nimport { Avatar, Button, MenuList, ModeToggle, Popover, PopoverContent, PopoverTrigger, Spinner } from \"@vertesia/ui/core\";\nimport { useUserSession } from \"@vertesia/ui/session\";\nimport clsx from \"clsx\";\nimport { useState } from \"react\";\nimport SignInModal from \"./SignInModal\";\nimport InfoList from \"./UserInfo\";\nimport { useNavigate } from \"@vertesia/ui/router\";\nimport { useUserPermissions } from \"@vertesia/ui/features\";\nexport function UserSessionMenu({}) {\n const { user, isLoading } = useUserSession();\n const [showModal, setShowModal] = useState(false);\n if (isLoading) {\n return _jsx(Spinner, {});\n }\n else if (!user) {\n return _jsxs(_Fragment, { children: [_jsx(Button, { onClick: () => setShowModal(true), children: \"Sign In\" }), _jsx(SignInModal, { isOpen: showModal, onClose: () => setShowModal(false) })] });\n }\n else {\n return (_jsx(\"div\", { className: \"px-3\", children: _jsx(UserSessionPopup, { asMenuTrigger: true }) }));\n }\n}\nfunction UserSessionPopup({ className, asMenuTrigger = false }) {\n const session = useUserSession();\n const navigate = useNavigate();\n const perms = useUserPermissions();\n const { user } = session;\n if (!session || !user)\n return null;\n const isProjectManager = perms.hasPermission(Permission.project_admin);\n return (_jsxs(Popover, { click: true, children: [_jsx(PopoverTrigger, { children: _jsx(\"div\", { className: clsx(className, \"flex items-center justify-start\", asMenuTrigger && \"cursor-pointer\"), children: _jsx(Avatar, { size: 'sm', color: 'bg-amber-500', shape: 'circle', \n /*src={picture} */\n name: user?.name }) }) }), _jsx(PopoverContent, { align: \"start\", className: \"w-[280px] mx-2 my-1 p-0\", children: _jsxs(\"div\", { className: 'divide-y divide-gray-200 dark:divide-slate-700', children: [_jsxs(\"div\", { className: 'py-2 pl-2', children: [_jsx(\"p\", { className: \"px-4 dark:text-white mb-1\", children: user?.name ?? 'Unknown' }), _jsx(\"p\", { className: \"px-4 text-xs text-gray-500\", children: user?.email ?? '' })] }), _jsx(\"div\", { className: \"w-full p-1\", children: _jsx(InfoList, {}) }), _jsx(\"div\", { className: 'py-2 pl-2', children: _jsx(ModeToggle, {}) }), _jsx(\"div\", { className: 'py-2', children: _jsxs(MenuList, { children: [isProjectManager && (_jsx(MenuList.Item, { className: 'px-2', onClick: () => navigate('/settings', { replace: true }), children: \"Settings\" })), _jsx(MenuList.Item, { className: 'px-2', onClick: () => session.logout(), children: \"Sign out\" })] }) })] }) })] }));\n}\n//# sourceMappingURL=UserSessionMenu.js.map","export function isVertesiaEmail(email) {\n return email ? (email.endsWith('@vertesiahq.com') ||\n email.endsWith('@becomposable.com') ||\n email.endsWith('@composableprompts.com')) : false;\n}\n//# sourceMappingURL=utils.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { useEffect, useState } from \"react\";\nimport { useUserSession } from \"@vertesia/ui/session\";\nexport function SplashScreen({ icon: Icon }) {\n const { isLoading } = useUserSession();\n const [show, setShow] = useState(true);\n useEffect(() => {\n if (!isLoading) {\n setShow(false);\n }\n }, [isLoading]);\n return (_jsx(AnimatePresence, { children: show && (_jsx(motion.div, { style: { zIndex: 999999, position: 'fixed', inset: 0 }, className: 'fixed inset-x-0 inset-y-0', initial: { opacity: 1 }, exit: { opacity: 0 }, transition: { ease: 'easeIn', duration: 0.5 }, children: _jsx(\"div\", { style: { display: 'flex', width: '100%', height: '100%', alignItems: 'center', justifyContent: 'center' }, className: \"flex w-full h-full items-center justify-center\", children: _jsx(\"div\", { className: \"animate-[spin_4s_linear_infinite]\", children: _jsx(\"div\", { className: 'animate-pulse rounded-full bg-transparent', children: Icon || _jsx(LoadingIcon, {}) }) }) }) })) }));\n}\nfunction LoadingIcon() {\n const stopColor1 = \"currentColor\";\n const stopColor2 = \"currentColor\";\n // const stopColor1 = \"#4F46E5\";\n // const stopColor2 = \"#4F46E5\";\n return (_jsxs(\"svg\", { width: \"32\", height: \"32\", className: \"w-8 h-8 text-indigo-600\", viewBox: \"0 0 50 50\", xmlns: \"http://www.w3.org/2000/svg\", children: [_jsx(\"defs\", { children: _jsxs(\"linearGradient\", { id: \"spinner-gradient\", x1: \"1\", y1: \"0\", x2: \"0\", y2: \"1\", children: [_jsx(\"stop\", { offset: \"0%\", stopColor: stopColor1, stopOpacity: \"1\" }), _jsx(\"stop\", { offset: \"100%\", stopColor: stopColor2, stopOpacity: \"0\" })] }) }), _jsx(\"circle\", { cx: \"25\", cy: \"25\", r: \"20\", stroke: \"url(#spinner-gradient)\", strokeWidth: \"5\", fill: \"none\", strokeLinecap: \"round\" })] }));\n}\n//# sourceMappingURL=SplashScreen.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { ThemeProvider, ToastProvider } from \"@vertesia/ui/core\";\nimport { UserPermissionProvider, TypeRegistryProvider } from \"@vertesia/ui/features\";\nimport { UserSessionProvider } from \"@vertesia/ui/session\";\nimport { SplashScreen } from \"./SplashScreen\";\nimport { SigninScreen } from \"./login/SigninScreen\";\nexport function VertesiaShell({ children, lightLogo, darkLogo, loadingIcon }) {\n return (_jsx(ToastProvider, { children: _jsx(UserSessionProvider, { children: _jsx(TypeRegistryProvider, { children: _jsxs(ThemeProvider, { defaultTheme: \"system\", storageKey: \"vite-ui-theme\", children: [_jsx(SplashScreen, { icon: loadingIcon }), _jsx(SigninScreen, { allowedPrefix: \"/shared/\", lightLogo: lightLogo, darkLogo: darkLogo }), _jsx(UserPermissionProvider, { children: children })] }) }) }) }));\n}\n//# sourceMappingURL=VertesiaShell.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createContext, useContext } from \"react\";\nexport const AppInstallationContext = createContext(null);\nexport function AppInstallationProvider({ installation, children }) {\n return (_jsx(AppInstallationContext.Provider, { value: installation, children: children }));\n}\n/**\n * Get the current app installation obejct when called in an app context otheriwse returns null\n */\nexport function useAppInstallation() {\n return useContext(AppInstallationContext);\n}\n//# sourceMappingURL=AppInstallationProvider.js.map","import { jsxs as _jsxs, jsx as _jsx } from \"react/jsx-runtime\";\nimport { SelectBox, useFetch } from \"@vertesia/ui/core\";\nimport { LastSelectedAccountId_KEY, LastSelectedProjectId_KEY, useUserSession } from \"@vertesia/ui/session\";\nimport { useState } from \"react\";\nexport function AppProjectSelector({ app, onChange, placeholder }) {\n const { client, project } = useUserSession();\n const { data: projects, error } = useFetch(() => {\n return client.apps.getAppInstallationProjects(app);\n }, [app.id, app.name]);\n const _onChange = (project) => {\n if (onChange) {\n if (!onChange(project)) {\n // if onChange returns true then the defualt on change is called\n return;\n }\n }\n // default on change\n localStorage.setItem(LastSelectedAccountId_KEY, project.account);\n localStorage.setItem(LastSelectedProjectId_KEY + '-' + project.account, project.id);\n window.location.reload();\n };\n if (error) {\n return _jsxs(\"span\", { className: 'text-red-600', children: [\"Error: failed to fetch projects: \", error.message] });\n }\n return _jsx(SelectProject, { placeholder: placeholder, initialValue: project?.id, projects: projects || [], onChange: _onChange });\n}\nfunction SelectProject({ initialValue, projects, onChange, placeholder = \"Select Project\" }) {\n const [value, setValue] = useState();\n const _onChange = (value) => {\n setValue(value);\n onChange(value);\n };\n let actualValue = !value && initialValue ? projects.find(p => p.id === initialValue) : value;\n return (_jsx(SelectBox, { by: \"id\", value: actualValue, options: projects, optionLabel: (option) => option.name, placeholder: placeholder, onChange: _onChange }));\n}\n//# sourceMappingURL=AppProjectSelector.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Center, useFetch, SelectBox } from \"@vertesia/ui/core\";\nimport { LastSelectedAccountId_KEY, LastSelectedProjectId_KEY, useUserSession } from \"@vertesia/ui/session\";\nimport { LockIcon } from \"lucide-react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useUITranslation } from '../../i18n/index.js';\nimport { AppInstallationProvider } from \"./AppInstallationProvider\";\nexport function StandaloneApp({ name, AccessDenied = AccessDeniedMessage, children }) {\n return name ? (_jsx(StandaloneAppImpl, { name: name, AccessDenied: AccessDenied, children: children })) : (_jsx(UnknownAppName, {}));\n}\nexport function StandaloneAppImpl({ name, AccessDenied = AccessDeniedMessage, children }) {\n const { authToken, client } = useUserSession();\n const [installation, setInstallation] = useState(null);\n const [state, setState] = useState(\"loading\");\n useEffect(() => {\n if (!authToken) {\n setState(\"loading\");\n }\n else {\n const isAppVisible = authToken.apps.includes(name);\n if (isAppVisible) {\n client.apps.getAppInstallationByName(name).then(inst => {\n if (!inst) {\n console.log(`App ${name} not found!`);\n setState(\"error\");\n }\n else {\n setState(\"loaded\");\n setInstallation(inst);\n }\n });\n }\n else {\n setState(\"error\");\n }\n }\n }, [name, authToken]);\n if (state === \"loading\") {\n return null;\n }\n else if (state === \"error\") {\n return _jsx(AccessDenied, { name: name });\n }\n else if (installation) {\n return _jsx(AppInstallationProvider, { installation: installation, children: children });\n }\n}\nfunction AccessDeniedMessage({ name }) {\n const { project, accounts, client } = useUserSession();\n const { t } = useUITranslation();\n const [selectedAccountId, setSelectedAccountId] = useState();\n // Fetch all projects where the app is installed across all organizations\n const { data: allProjects } = useFetch(() => {\n return client.apps.getAppInstallationProjects({ name });\n }, [name]);\n // Group projects by organization\n const { projectsByOrg, orgOptions } = useMemo(() => {\n if (!allProjects || !accounts)\n return { projectsByOrg: {}, orgOptions: [] };\n const grouped = {};\n for (const p of allProjects) {\n if (!grouped[p.account]) {\n grouped[p.account] = [];\n }\n grouped[p.account].push(p);\n }\n // Only show orgs that have projects with the app installed\n const orgsWithProjects = accounts.filter(a => grouped[a.id]?.length > 0);\n return { projectsByOrg: grouped, orgOptions: orgsWithProjects };\n }, [allProjects, accounts]);\n // Auto-select first org if not selected\n useEffect(() => {\n if (!selectedAccountId && orgOptions.length > 0) {\n setSelectedAccountId(orgOptions[0].id);\n }\n }, [orgOptions, selectedAccountId]);\n const onProjectChange = (selected) => {\n localStorage.setItem(LastSelectedAccountId_KEY, selected.account);\n localStorage.setItem(LastSelectedProjectId_KEY + '-' + selected.account, selected.id);\n window.location.reload();\n };\n const filteredProjects = selectedAccountId ? (projectsByOrg[selectedAccountId] || []) : [];\n const selectedOrg = orgOptions.find(a => a.id === selectedAccountId);\n return (_jsxs(Center, { className: \"pt-10 flex flex-col items-center text-center text-gray-700\", children: [_jsx(LockIcon, { className: \"w-10 h-10 mb-4 text-gray-500\" }), _jsx(\"div\", { className: \"text-xl font-semibold\", children: t('shell.accessDenied') }), _jsxs(\"div\", { className: \"mt-2 text-sm text-gray-500\", children: [\"You don't have permission to view the \", _jsx(\"span\", { className: \"font-semibold\", children: name }), \" app in project: \", _jsxs(\"span\", { className: \"font-semibold\", children: [\"\\u00AB\", project?.name, \"\\u00BB\"] }), \".\"] }), orgOptions.length === 0 && allProjects !== undefined && (_jsx(\"div\", { className: \"mt-4 text-sm text-gray-500\", children: \"This app is not installed in any project you have access to.\" })), orgOptions.length > 0 && (_jsxs(\"div\", { className: \"mt-4 flex flex-row gap-4 items-end\", children: [orgOptions.length > 1 && (_jsxs(\"div\", { children: [_jsx(\"div\", { className: \"text-sm text-gray-500 mb-2\", children: t('shell.organization') }), _jsx(SelectBox, { by: \"id\", value: selectedOrg, options: orgOptions, optionLabel: (option) => option.name, placeholder: t('shell.selectOrganization'), onChange: (org) => setSelectedAccountId(org.id) })] })), _jsxs(\"div\", { children: [orgOptions.length > 1 && _jsx(\"div\", { className: \"text-sm text-gray-500 mb-2\", children: t('login.terminal.project') }), _jsx(SelectBox, { by: \"id\", value: undefined, options: filteredProjects, optionLabel: (option) => option.name, placeholder: t('shell.selectProject'), onChange: onProjectChange })] })] }))] }));\n}\nfunction UnknownAppName() {\n const { t } = useUITranslation();\n return (_jsxs(Center, { className: \"pt-10 flex flex-col items-center text-center text-gray-700\", children: [_jsx(LockIcon, { className: \"w-10 h-10 mb-4 text-gray-500\" }), _jsx(\"div\", { className: \"text-xl font-semibold\", children: t('shell.applicationNotRegistered') }), _jsxs(\"div\", { className: \"mt-2 text-sm text-gray-500\", children: [\"Before starting to code a Vertesia application you must register an application manifest in Vertesia Studio then install it in one or more projects.\", _jsx(\"p\", {}), \"Then use the created app name as a parameter to \", _jsx(\"code\", { children: \"<StandaloneApp name=\\\"your-app-name\\\">\" }), \" in the \", _jsx(\"code\", { children: \"src/main.tsx\" }), \" file.\"] })] }));\n}\n//# sourceMappingURL=StandaloneApp.js.map"],"names":["NAMESPACE","i18nInstance","i18next","createInstance","useUITranslation","useTranslation","i18n","InviteAcceptModal","session","useUserSession","client","account","t","showModal","setShowModal","useState","invites","setInvites","useEffect","listInvites","then","length","notLegacyInvites","filter","i","data","console","log","catch","err","error","id","closeModal","inviteList","map","invite","_jsxs","className","children","_jsx","name","project","role","invited_by","Button","size","onClick","async","acceptInvite","authCallback","fetchAccounts","fetchProjects","accept","variant","rejectInvite","remainingInvites","reject","warn","Modal","isOpen","onClose","ModalTitle","ModalBody","EnterpriseSigninButton","redirectTo","isLoading","setIsLoading","trackEvent","useUXTracking","email","setEmail","toast","useToast","_Fragment","Input","value","onChange","placeholder","type","Spinner","test","setFirebaseTenant","title","status","duration","localStorage","setItem","provider","Env","firebase","Error","providerType","OAuthProvider","redirectPath","window","location","pathname","GoogleAuthProvider","addScope","setCustomParameters","prompt","redirect_uri","origin","getProvider","firebaseTenantName","logger","info","vertesia","firebaseTenantId","signInWithRedirect","getFirebaseAuth","GitHubSignInButton","removeItem","GithubAuthProvider","src","loading","alt","GoogleSignInButton","MicrosoftSignInButton","_redirectTo","SignupForm","onSignup","goBack","accountType","setAccountType","undefined","companySize","setCompanySize","companyName","setCompanyName","companyWebsite","setCompanyWebsite","projectMaturity","setProjectMaturity","fbUser","setFbUser","setError","isCompany","companySizeOptions","label","accountTypeOptions","description","projectMaturityOptions","user","currentUser","displayName","FormItem","RadioGroup","options","selected","find","option","onSelect","SelectBox","optionLabel","required","signupData","maturity","JSON","stringify","fbToken","getIdToken","SigninScreen","allowedPrefix","isNested","lightLogo","darkLogo","allow","setAllow","useSafeLayoutEffect","href","startsWith","SigninScreenImpl","authError","style","zIndex","clsx","StandardSigninPanel","RegionTag","setSignupData","collectSignupData","setCollectSignupData","signOut","history","replaceState","goToSignup","UserNotFoundError","getItem","payload","firebaseToken","fetch","endpoints","studio","method","headers","body","res","message","use","initReactI18next","init","resources","ar","de","en","es","fr","it","ja","ko","pt","ru","tr","zh","fallbackLng","ns","defaultNS","interpolation","escapeValue","react","useSuspense","LOOPBACK_HOSTS","Set","getClientInfo","params","URLSearchParams","search","redirect","rawRedirect","decoded","parsed","decodeURIComponent","URL","protocol","port","username","password","has","hostname","toString","parseRedirectUri","get","code","profile","TerminalLogin","setPayload","clientInfo","useLocation","onAccept","token","fetchComposableTokenFromFirebaseToken","studio_server_url","zeno_server_url","zeno","page","AuthDoneScreen","AuthAcceptScreen","ErrorBox","allProjects","useFetch","projects","list","Promise","resolve","envName","isLocalDev","isDev","ProfileForm","Center","navigator","clipboard","writeText","accounts","currentData","setCurrentData","p","SelectAccount","SelectProject","a","by","SignInModal","ModalFooter","align","InfoItems","isCopied","setIsCopied","VTooltip","placement","Check","CopyIcon","setTimeout","copyToClipboard","InfoList","authToken","server","baseUrl","store","tenantId","getTenantIdFromProject","tabs","content","sub","account_roles","join","project_roles","version","sdkVersion","Tabs","defaultValue","fullWidth","updateHash","TabsBar","TabsPanel","UserSessionMenu","UserSessionPopup","asMenuTrigger","navigate","useNavigate","perms","useUserPermissions","isProjectManager","hasPermission","Permission","project_admin","Popover","click","PopoverTrigger","Avatar","color","shape","PopoverContent","ModeToggle","MenuList","Item","replace","logout","isVertesiaEmail","endsWith","SplashScreen","icon","Icon","show","setShow","AnimatePresence","motion","div","position","inset","initial","opacity","exit","transition","ease","display","width","height","alignItems","justifyContent","LoadingIcon","viewBox","xmlns","x1","y1","x2","y2","offset","stopColor","stopOpacity","cx","cy","r","stroke","strokeWidth","fill","strokeLinecap","VertesiaShell","loadingIcon","ToastProvider","UserSessionProvider","TypeRegistryProvider","ThemeProvider","defaultTheme","storageKey","UserPermissionProvider","AppInstallationContext","createContext","AppInstallationProvider","installation","Provider","useAppInstallation","useContext","AppProjectSelector","app","apps","getAppInstallationProjects","initialValue","LastSelectedAccountId_KEY","LastSelectedProjectId_KEY","reload","setValue","actualValue","StandaloneApp","AccessDenied","AccessDeniedMessage","StandaloneAppImpl","UnknownAppName","setInstallation","state","setState","includes","getAppInstallationByName","inst","selectedAccountId","setSelectedAccountId","projectsByOrg","orgOptions","useMemo","grouped","push","orgsWithProjects","filteredProjects","selectedOrg","LockIcon","org"],"mappings":"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"}
|