@vertesia/ui 1.5.0-dev.20260910.052912Z → 1.6.0-dev.20260912.110338Z

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (389) hide show
  1. package/README.md +125 -0
  2. package/lib/boot/branding.d.ts +58 -0
  3. package/lib/boot/branding.d.ts.map +1 -0
  4. package/lib/boot/branding.js +62 -0
  5. package/lib/boot/branding.js.map +1 -0
  6. package/lib/boot/index.d.ts +27 -0
  7. package/lib/boot/index.d.ts.map +1 -0
  8. package/lib/boot/index.js +325 -0
  9. package/lib/boot/index.js.map +1 -0
  10. package/lib/boot/vite.d.ts +63 -0
  11. package/lib/boot/vite.d.ts.map +1 -0
  12. package/lib/boot/vite.js +108 -0
  13. package/lib/boot/vite.js.map +1 -0
  14. package/lib/core/components/Link.js +1 -1
  15. package/lib/core/components/Link.js.map +1 -1
  16. package/lib/core/components/Spinner.js +1 -1
  17. package/lib/core/components/Spinner.js.map +1 -1
  18. package/lib/core/components/TagsInput.js +7 -7
  19. package/lib/core/components/TagsInput.js.map +1 -1
  20. package/lib/core/components/shadcn/badge.js +1 -1
  21. package/lib/core/components/shadcn/badge.js.map +1 -1
  22. package/lib/core/components/shadcn/button.d.ts.map +1 -1
  23. package/lib/core/components/shadcn/button.js +3 -4
  24. package/lib/core/components/shadcn/button.js.map +1 -1
  25. package/lib/core/components/shadcn/filters/comboBox/DateCombobox.js +2 -2
  26. package/lib/core/components/shadcn/filters/comboBox/DateCombobox.js.map +1 -1
  27. package/lib/core/components/shadcn/filters/comboBox/SelectCombobox.js +1 -1
  28. package/lib/core/components/shadcn/filters/comboBox/SelectCombobox.js.map +1 -1
  29. package/lib/core/components/shadcn/filters/comboBox/StringListCombobox.js +1 -1
  30. package/lib/core/components/shadcn/filters/comboBox/StringListCombobox.js.map +1 -1
  31. package/lib/core/components/shadcn/filters/comboBox/TextCombobox.js +1 -1
  32. package/lib/core/components/shadcn/filters/comboBox/TextCombobox.js.map +1 -1
  33. package/lib/core/components/shadcn/filters/filter/dateFilter.js +1 -1
  34. package/lib/core/components/shadcn/filters/filter/dateFilter.js.map +1 -1
  35. package/lib/core/components/shadcn/filters/filter-styles.d.ts +1 -1
  36. package/lib/core/components/shadcn/filters/filter-styles.d.ts.map +1 -1
  37. package/lib/core/components/shadcn/filters/filter-styles.js +4 -4
  38. package/lib/core/components/shadcn/filters/filters.js +1 -1
  39. package/lib/core/components/shadcn/filters/filters.js.map +1 -1
  40. package/lib/core/components/shadcn/label.js +1 -1
  41. package/lib/core/components/shadcn/label.js.map +1 -1
  42. package/lib/core/components/shadcn/overflowTabs.js +2 -2
  43. package/lib/core/components/shadcn/overflowTabs.js.map +1 -1
  44. package/lib/core/components/shadcn/tabs.js +1 -1
  45. package/lib/core/components/shadcn/tabs.js.map +1 -1
  46. package/lib/env/index.d.ts +28 -1
  47. package/lib/env/index.d.ts.map +1 -1
  48. package/lib/env/index.js +51 -3
  49. package/lib/env/index.js.map +1 -1
  50. package/lib/features/activity-doc/ActivityDoc.js +1 -1
  51. package/lib/features/activity-doc/ActivityDoc.js.map +1 -1
  52. package/lib/features/agent/PayloadBuilder.d.ts +4 -0
  53. package/lib/features/agent/PayloadBuilder.d.ts.map +1 -1
  54. package/lib/features/agent/PayloadBuilder.js.map +1 -1
  55. package/lib/features/agent/chat/AgentRunFeedback.d.ts +59 -0
  56. package/lib/features/agent/chat/AgentRunFeedback.d.ts.map +1 -0
  57. package/lib/features/agent/chat/AgentRunFeedback.js +286 -0
  58. package/lib/features/agent/chat/AgentRunFeedback.js.map +1 -0
  59. package/lib/features/agent/chat/AskUserWidget.d.ts +1 -0
  60. package/lib/features/agent/chat/AskUserWidget.d.ts.map +1 -1
  61. package/lib/features/agent/chat/AskUserWidget.js +15 -4
  62. package/lib/features/agent/chat/AskUserWidget.js.map +1 -1
  63. package/lib/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
  64. package/lib/features/agent/chat/ModernAgentConversation.js +3 -2
  65. package/lib/features/agent/chat/ModernAgentConversation.js.map +1 -1
  66. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts +3 -1
  67. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
  68. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +16 -13
  69. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
  70. package/lib/features/agent/chat/ModernAgentOutput/Header.d.ts.map +1 -1
  71. package/lib/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
  72. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts +3 -1
  73. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
  74. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js +30 -8
  75. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
  76. package/lib/features/agent/chat/ModernAgentOutput/SummaryConversation.d.ts.map +1 -1
  77. package/lib/features/agent/chat/ModernAgentOutput/SummaryConversation.js +2 -0
  78. package/lib/features/agent/chat/ModernAgentOutput/SummaryConversation.js.map +1 -1
  79. package/lib/features/agent/chat/index.d.ts +1 -0
  80. package/lib/features/agent/chat/index.d.ts.map +1 -1
  81. package/lib/features/agent/chat/index.js +1 -0
  82. package/lib/features/agent/chat/index.js.map +1 -1
  83. package/lib/features/facets/AgentRunnerFacetsNav.d.ts +8 -0
  84. package/lib/features/facets/AgentRunnerFacetsNav.d.ts.map +1 -1
  85. package/lib/features/facets/AgentRunnerFacetsNav.js +12 -0
  86. package/lib/features/facets/AgentRunnerFacetsNav.js.map +1 -1
  87. package/lib/features/layout/GenericPageNavHeader.js +1 -1
  88. package/lib/features/layout/GenericPageNavHeader.js.map +1 -1
  89. package/lib/features/magic-pdf/AnnotatedImageSlider.js +1 -1
  90. package/lib/features/magic-pdf/AnnotatedImageSlider.js.map +1 -1
  91. package/lib/features/magic-pdf/GroundedExtractionView.js +3 -3
  92. package/lib/features/magic-pdf/GroundedExtractionView.js.map +1 -1
  93. package/lib/features/permissions/UserPermissionsProvider.d.ts +15 -1
  94. package/lib/features/permissions/UserPermissionsProvider.d.ts.map +1 -1
  95. package/lib/features/permissions/UserPermissionsProvider.js +20 -12
  96. package/lib/features/permissions/UserPermissionsProvider.js.map +1 -1
  97. package/lib/features/store/objects/DocumentPreviewPanel.js +5 -5
  98. package/lib/features/store/objects/DocumentPreviewPanel.js.map +1 -1
  99. package/lib/features/store/objects/components/DocumentInput.js +1 -1
  100. package/lib/features/store/objects/components/DocumentInput.js.map +1 -1
  101. package/lib/features/store/objects/selection/SelectionActions.js +1 -1
  102. package/lib/features/store/objects/selection/SelectionActions.js.map +1 -1
  103. package/lib/features/store/objects/upload/DocumentUploadModal.js +1 -1
  104. package/lib/features/store/objects/upload/DocumentUploadModal.js.map +1 -1
  105. package/lib/features/store/types/TypeRegistry.d.ts +130 -0
  106. package/lib/features/store/types/TypeRegistry.d.ts.map +1 -1
  107. package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts +130 -0
  108. package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts.map +1 -1
  109. package/lib/features/user/UserInfo.js +1 -1
  110. package/lib/features/user/UserInfo.js.map +1 -1
  111. package/lib/i18n/index.d.ts +5 -4
  112. package/lib/i18n/index.d.ts.map +1 -1
  113. package/lib/i18n/index.js +16 -2
  114. package/lib/i18n/index.js.map +1 -1
  115. package/lib/i18n/locales/ar.json +30 -0
  116. package/lib/i18n/locales/de.json +30 -0
  117. package/lib/i18n/locales/en.json +30 -0
  118. package/lib/i18n/locales/es.json +30 -0
  119. package/lib/i18n/locales/fr.json +30 -0
  120. package/lib/i18n/locales/it.json +30 -0
  121. package/lib/i18n/locales/ja.json +30 -0
  122. package/lib/i18n/locales/ko.json +30 -0
  123. package/lib/i18n/locales/pt.json +30 -0
  124. package/lib/i18n/locales/ru.json +30 -0
  125. package/lib/i18n/locales/tr.json +30 -0
  126. package/lib/i18n/locales/zh-TW.json +30 -0
  127. package/lib/i18n/locales/zh.json +30 -0
  128. package/lib/layout/ErrorPage.js +1 -1
  129. package/lib/layout/ErrorPage.js.map +1 -1
  130. package/lib/layout/Navbar.d.ts.map +1 -1
  131. package/lib/layout/Navbar.js +3 -2
  132. package/lib/layout/Navbar.js.map +1 -1
  133. package/lib/router/RouteComponent.d.ts.map +1 -1
  134. package/lib/router/RouteComponent.js +15 -12
  135. package/lib/router/RouteComponent.js.map +1 -1
  136. package/lib/session/UserSession.d.ts.map +1 -1
  137. package/lib/session/UserSession.js +6 -3
  138. package/lib/session/UserSession.js.map +1 -1
  139. package/lib/session/UserSessionProvider.d.ts +2 -1
  140. package/lib/session/UserSessionProvider.d.ts.map +1 -1
  141. package/lib/session/UserSessionProvider.js +10 -1
  142. package/lib/session/UserSessionProvider.js.map +1 -1
  143. package/lib/session/auth/composable.d.ts.map +1 -1
  144. package/lib/session/auth/composable.js +88 -3
  145. package/lib/session/auth/composable.js.map +1 -1
  146. package/lib/session/auth/domainRouting.d.ts +22 -12
  147. package/lib/session/auth/domainRouting.d.ts.map +1 -1
  148. package/lib/session/auth/domainRouting.js +35 -21
  149. package/lib/session/auth/domainRouting.js.map +1 -1
  150. package/lib/session/auth/useAuthState.d.ts +9 -4
  151. package/lib/session/auth/useAuthState.d.ts.map +1 -1
  152. package/lib/session/auth/useAuthState.js +9 -4
  153. package/lib/session/auth/useAuthState.js.map +1 -1
  154. package/lib/session/index.d.ts.map +1 -1
  155. package/lib/session/index.js +3 -1
  156. package/lib/session/index.js.map +1 -1
  157. package/lib/shell/AuthScreenPreview.d.ts +12 -0
  158. package/lib/shell/AuthScreenPreview.d.ts.map +1 -0
  159. package/lib/shell/AuthScreenPreview.js +140 -0
  160. package/lib/shell/AuthScreenPreview.js.map +1 -0
  161. package/lib/shell/BrandedAuthScreens.d.ts +19 -0
  162. package/lib/shell/BrandedAuthScreens.d.ts.map +1 -0
  163. package/lib/shell/BrandedAuthScreens.js +64 -0
  164. package/lib/shell/BrandedAuthScreens.js.map +1 -0
  165. package/lib/shell/SplashScreen.d.ts +13 -2
  166. package/lib/shell/SplashScreen.d.ts.map +1 -1
  167. package/lib/shell/SplashScreen.js +21 -20
  168. package/lib/shell/SplashScreen.js.map +1 -1
  169. package/lib/shell/VertesiaShell.d.ts +15 -4
  170. package/lib/shell/VertesiaShell.d.ts.map +1 -1
  171. package/lib/shell/VertesiaShell.js +8 -3
  172. package/lib/shell/VertesiaShell.js.map +1 -1
  173. package/lib/shell/apps/StandaloneApp.js +5 -1
  174. package/lib/shell/apps/StandaloneApp.js.map +1 -1
  175. package/lib/shell/index.d.ts +6 -0
  176. package/lib/shell/index.d.ts.map +1 -1
  177. package/lib/shell/index.js +5 -0
  178. package/lib/shell/index.js.map +1 -1
  179. package/lib/shell/login/SignInFlow.d.ts +68 -0
  180. package/lib/shell/login/SignInFlow.d.ts.map +1 -0
  181. package/lib/shell/login/SignInFlow.js +108 -0
  182. package/lib/shell/login/SignInFlow.js.map +1 -0
  183. package/lib/shell/login/SignInPageShell.d.ts +13 -0
  184. package/lib/shell/login/SignInPageShell.d.ts.map +1 -0
  185. package/lib/shell/login/SignInPageShell.js +14 -0
  186. package/lib/shell/login/SignInPageShell.js.map +1 -0
  187. package/lib/shell/login/SignInPrimitives.d.ts +3 -3
  188. package/lib/shell/login/SignInPrimitives.d.ts.map +1 -1
  189. package/lib/shell/login/SignInPrimitives.js +13 -11
  190. package/lib/shell/login/SignInPrimitives.js.map +1 -1
  191. package/lib/shell/login/SignInRestrictedEnvStep.d.ts +5 -0
  192. package/lib/shell/login/SignInRestrictedEnvStep.d.ts.map +1 -1
  193. package/lib/shell/login/SignInRestrictedEnvStep.js +8 -4
  194. package/lib/shell/login/SignInRestrictedEnvStep.js.map +1 -1
  195. package/lib/shell/login/SigninScreen.d.ts +38 -3
  196. package/lib/shell/login/SigninScreen.d.ts.map +1 -1
  197. package/lib/shell/login/SigninScreen.js +33 -86
  198. package/lib/shell/login/SigninScreen.js.map +1 -1
  199. package/lib/shell/login/SignupForm.d.ts +3 -1
  200. package/lib/shell/login/SignupForm.d.ts.map +1 -1
  201. package/lib/shell/login/SignupForm.js +7 -3
  202. package/lib/shell/login/SignupForm.js.map +1 -1
  203. package/lib/shell/login/signInUtils.d.ts +11 -0
  204. package/lib/shell/login/signInUtils.d.ts.map +1 -1
  205. package/lib/shell/login/signInUtils.js +29 -5
  206. package/lib/shell/login/signInUtils.js.map +1 -1
  207. package/lib/vertesia-ui-boot.js +237 -0
  208. package/lib/vertesia-ui-boot.js.map +1 -0
  209. package/lib/vertesia-ui-core.js +46 -46
  210. package/lib/vertesia-ui-core.js.map +1 -1
  211. package/lib/vertesia-ui-env.js +1 -1
  212. package/lib/vertesia-ui-env.js.map +1 -1
  213. package/lib/vertesia-ui-features.js +222 -208
  214. package/lib/vertesia-ui-features.js.map +1 -1
  215. package/lib/vertesia-ui-i18n.B3NFclwl.chunk.js +5 -0
  216. package/lib/vertesia-ui-i18n.B3NFclwl.chunk.js.map +1 -0
  217. package/lib/vertesia-ui-i18n.BWSrNIxc.chunk.js +5 -0
  218. package/lib/vertesia-ui-i18n.BWSrNIxc.chunk.js.map +1 -0
  219. package/lib/vertesia-ui-i18n.BWvWeB1p.chunk.js +5 -0
  220. package/lib/vertesia-ui-i18n.BWvWeB1p.chunk.js.map +1 -0
  221. package/lib/vertesia-ui-i18n.BZCXvTC1.chunk.js +5 -0
  222. package/lib/vertesia-ui-i18n.BZCXvTC1.chunk.js.map +1 -0
  223. package/lib/vertesia-ui-i18n.BbJMvFZW.chunk.js +5 -0
  224. package/lib/vertesia-ui-i18n.BbJMvFZW.chunk.js.map +1 -0
  225. package/lib/vertesia-ui-i18n.CE5ldwpt.chunk.js +5 -0
  226. package/lib/vertesia-ui-i18n.CE5ldwpt.chunk.js.map +1 -0
  227. package/lib/vertesia-ui-i18n.CMC0IShY.chunk.js +5 -0
  228. package/lib/vertesia-ui-i18n.CMC0IShY.chunk.js.map +1 -0
  229. package/lib/vertesia-ui-i18n.CkcRqBKU.chunk.js +5 -0
  230. package/lib/vertesia-ui-i18n.CkcRqBKU.chunk.js.map +1 -0
  231. package/lib/vertesia-ui-i18n.D-Mq1sw_.chunk.js +5 -0
  232. package/lib/vertesia-ui-i18n.D-Mq1sw_.chunk.js.map +1 -0
  233. package/lib/vertesia-ui-i18n.DkK68-A-.chunk.js +5 -0
  234. package/lib/vertesia-ui-i18n.DkK68-A-.chunk.js.map +1 -0
  235. package/lib/vertesia-ui-i18n.XE_dcCg6.chunk.js +5 -0
  236. package/lib/vertesia-ui-i18n.XE_dcCg6.chunk.js.map +1 -0
  237. package/lib/vertesia-ui-i18n.js +2 -2
  238. package/lib/vertesia-ui-i18n.js.map +1 -1
  239. package/lib/vertesia-ui-i18n.qgNqMPvK.chunk.js +5 -0
  240. package/lib/vertesia-ui-i18n.qgNqMPvK.chunk.js.map +1 -0
  241. package/lib/vertesia-ui-layout.js +13 -13
  242. package/lib/vertesia-ui-layout.js.map +1 -1
  243. package/lib/vertesia-ui-rich-text.js +68 -68
  244. package/lib/vertesia-ui-rich-text.js.map +1 -1
  245. package/lib/vertesia-ui-router.js +1 -1
  246. package/lib/vertesia-ui-router.js.map +1 -1
  247. package/lib/vertesia-ui-session.js +1 -1
  248. package/lib/vertesia-ui-session.js.map +1 -1
  249. package/lib/vertesia-ui-shell.js +58 -33
  250. package/lib/vertesia-ui-shell.js.map +1 -1
  251. package/lib/vertesia-ui-widgets.js +94 -94
  252. package/lib/vertesia-ui-widgets.js.map +1 -1
  253. package/lib/widgets/json-view/JSONCode.js +1 -1
  254. package/lib/widgets/json-view/JSONCode.js.map +1 -1
  255. package/lib/widgets/upload/DropZone.d.ts.map +1 -1
  256. package/lib/widgets/upload/DropZone.js +1 -1
  257. package/lib/widgets/upload/DropZone.js.map +1 -1
  258. package/llms.txt +6 -2
  259. package/package.json +44 -35
  260. package/src/__tests__/a11y.test.tsx +25 -0
  261. package/src/__tests__/theme.test.ts +91 -0
  262. package/src/boot/branding.test.ts +72 -0
  263. package/src/boot/branding.ts +108 -0
  264. package/src/boot/index.test.ts +216 -0
  265. package/src/boot/index.ts +356 -0
  266. package/src/boot/vite.test.ts +93 -0
  267. package/src/boot/vite.ts +118 -0
  268. package/src/core/components/Link.tsx +1 -1
  269. package/src/core/components/Spinner.tsx +1 -1
  270. package/src/core/components/TagsInput.tsx +7 -7
  271. package/src/core/components/shadcn/badge.tsx +1 -1
  272. package/src/core/components/shadcn/button.tsx +3 -5
  273. package/src/core/components/shadcn/filters/comboBox/DateCombobox.tsx +2 -2
  274. package/src/core/components/shadcn/filters/comboBox/SelectCombobox.tsx +1 -1
  275. package/src/core/components/shadcn/filters/comboBox/StringListCombobox.tsx +1 -1
  276. package/src/core/components/shadcn/filters/comboBox/TextCombobox.tsx +1 -1
  277. package/src/core/components/shadcn/filters/filter/dateFilter.tsx +1 -1
  278. package/src/core/components/shadcn/filters/filter-styles.ts +4 -4
  279. package/src/core/components/shadcn/filters/filters.tsx +1 -1
  280. package/src/core/components/shadcn/label.tsx +1 -1
  281. package/src/core/components/shadcn/overflowTabs.tsx +2 -2
  282. package/src/core/components/shadcn/tabs.tsx +1 -1
  283. package/src/css/utilities.css +7 -0
  284. package/src/env/index.test.ts +100 -0
  285. package/src/env/index.ts +66 -3
  286. package/src/features/activity-doc/ActivityDoc.tsx +1 -1
  287. package/src/features/agent/PayloadBuilder.tsx +4 -0
  288. package/src/features/agent/chat/AgentRunFeedback.test.tsx +330 -0
  289. package/src/features/agent/chat/AgentRunFeedback.tsx +452 -0
  290. package/src/features/agent/chat/AskUserWidget.test.tsx +24 -2
  291. package/src/features/agent/chat/AskUserWidget.tsx +19 -4
  292. package/src/features/agent/chat/ModernAgentConversation.tsx +46 -42
  293. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.test.tsx +207 -0
  294. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +50 -31
  295. package/src/features/agent/chat/ModernAgentOutput/Header.tsx +4 -0
  296. package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +42 -8
  297. package/src/features/agent/chat/ModernAgentOutput/SummaryConversation.ts +2 -0
  298. package/src/features/agent/chat/ModernAgentOutput/utils.test.ts +14 -0
  299. package/src/features/agent/chat/hooks/useFileProcessing.test.tsx +0 -5
  300. package/src/features/agent/chat/index.ts +6 -0
  301. package/src/features/facets/AgentRunnerFacetsNav.tsx +26 -0
  302. package/src/features/layout/GenericPageNavHeader.test.tsx +36 -0
  303. package/src/features/layout/GenericPageNavHeader.tsx +1 -1
  304. package/src/features/magic-pdf/AnnotatedImageSlider.tsx +1 -1
  305. package/src/features/magic-pdf/GroundedExtractionView.tsx +3 -3
  306. package/src/features/permissions/UserPermissionsProvider.test.tsx +50 -1
  307. package/src/features/permissions/UserPermissionsProvider.tsx +82 -44
  308. package/src/features/store/objects/DocumentPreviewPanel.tsx +10 -10
  309. package/src/features/store/objects/components/DocumentInput.tsx +1 -1
  310. package/src/features/store/objects/selection/SelectionActions.tsx +4 -1
  311. package/src/features/store/objects/upload/DocumentUploadModal.tsx +1 -1
  312. package/src/features/user/UserInfo.tsx +1 -1
  313. package/src/i18n/index.tsx +25 -2
  314. package/src/i18n/locales/ar.json +30 -0
  315. package/src/i18n/locales/de.json +30 -0
  316. package/src/i18n/locales/en.json +30 -0
  317. package/src/i18n/locales/es.json +30 -0
  318. package/src/i18n/locales/fr.json +30 -0
  319. package/src/i18n/locales/it.json +30 -0
  320. package/src/i18n/locales/ja.json +30 -0
  321. package/src/i18n/locales/ko.json +30 -0
  322. package/src/i18n/locales/pt.json +30 -0
  323. package/src/i18n/locales/ru.json +30 -0
  324. package/src/i18n/locales/tr.json +30 -0
  325. package/src/i18n/locales/zh-TW.json +30 -0
  326. package/src/i18n/locales/zh.json +30 -0
  327. package/src/layout/ErrorPage.tsx +1 -1
  328. package/src/layout/Navbar.test.tsx +58 -0
  329. package/src/layout/Navbar.tsx +5 -2
  330. package/src/router/RouteComponent.test.tsx +65 -1
  331. package/src/router/RouteComponent.tsx +18 -15
  332. package/src/session/UserSession.test.ts +65 -0
  333. package/src/session/UserSession.ts +6 -4
  334. package/src/session/UserSessionProvider.strict-mode.test.tsx +44 -0
  335. package/src/session/UserSessionProvider.test.ts +62 -1
  336. package/src/session/UserSessionProvider.tsx +9 -1
  337. package/src/session/auth/composable.renewal.test.ts +170 -0
  338. package/src/session/auth/composable.test.ts +23 -1
  339. package/src/session/auth/composable.ts +101 -2
  340. package/src/session/auth/domainRouting.test.ts +35 -65
  341. package/src/session/auth/domainRouting.ts +51 -34
  342. package/src/session/auth/useAuthState.ts +11 -4
  343. package/src/session/index.ts +3 -1
  344. package/src/shell/AuthScreenPreview.test.tsx +44 -0
  345. package/src/shell/AuthScreenPreview.tsx +228 -0
  346. package/src/shell/BrandedAuthScreens.test.tsx +181 -0
  347. package/src/shell/BrandedAuthScreens.tsx +117 -0
  348. package/src/shell/SplashScreen.test.tsx +37 -0
  349. package/src/shell/SplashScreen.tsx +45 -40
  350. package/src/shell/VertesiaShell.tsx +49 -22
  351. package/src/shell/apps/StandaloneApp.tsx +5 -1
  352. package/src/shell/index.tsx +6 -0
  353. package/src/shell/login/SignInFlow.tsx +213 -0
  354. package/src/shell/login/SignInPageShell.tsx +62 -0
  355. package/src/shell/login/SignInPrimitives.tsx +14 -11
  356. package/src/shell/login/SignInRestrictedEnvStep.tsx +19 -7
  357. package/src/shell/login/SigninScreen.test.tsx +104 -0
  358. package/src/shell/login/SigninScreen.tsx +115 -145
  359. package/src/shell/login/SignupForm.tsx +8 -3
  360. package/src/shell/login/signInUtils.ts +30 -5
  361. package/src/widgets/json-view/JSONCode.test.tsx +2 -2
  362. package/src/widgets/json-view/JSONCode.tsx +1 -1
  363. package/src/widgets/markdown/markdown.css +21 -21
  364. package/src/widgets/upload/DropZone.tsx +2 -4
  365. package/lib/vertesia-ui-i18n.BfN7iOHb.chunk.js +0 -5
  366. package/lib/vertesia-ui-i18n.BfN7iOHb.chunk.js.map +0 -1
  367. package/lib/vertesia-ui-i18n.BjH2zEZw.chunk.js +0 -5
  368. package/lib/vertesia-ui-i18n.BjH2zEZw.chunk.js.map +0 -1
  369. package/lib/vertesia-ui-i18n.BjSwAZXl.chunk.js +0 -5
  370. package/lib/vertesia-ui-i18n.BjSwAZXl.chunk.js.map +0 -1
  371. package/lib/vertesia-ui-i18n.C7PUm5Au.chunk.js +0 -5
  372. package/lib/vertesia-ui-i18n.C7PUm5Au.chunk.js.map +0 -1
  373. package/lib/vertesia-ui-i18n.CF_1mUS5.chunk.js +0 -5
  374. package/lib/vertesia-ui-i18n.CF_1mUS5.chunk.js.map +0 -1
  375. package/lib/vertesia-ui-i18n.ChfUl3_-.chunk.js +0 -5
  376. package/lib/vertesia-ui-i18n.ChfUl3_-.chunk.js.map +0 -1
  377. package/lib/vertesia-ui-i18n.D-Sk-5d1.chunk.js +0 -5
  378. package/lib/vertesia-ui-i18n.D-Sk-5d1.chunk.js.map +0 -1
  379. package/lib/vertesia-ui-i18n.D4rnu1_S.chunk.js +0 -5
  380. package/lib/vertesia-ui-i18n.D4rnu1_S.chunk.js.map +0 -1
  381. package/lib/vertesia-ui-i18n.DDf0-laK.chunk.js +0 -5
  382. package/lib/vertesia-ui-i18n.DDf0-laK.chunk.js.map +0 -1
  383. package/lib/vertesia-ui-i18n.DN79y06J.chunk.js +0 -5
  384. package/lib/vertesia-ui-i18n.DN79y06J.chunk.js.map +0 -1
  385. package/lib/vertesia-ui-i18n.DWLIciYQ.chunk.js +0 -5
  386. package/lib/vertesia-ui-i18n.DWLIciYQ.chunk.js.map +0 -1
  387. package/lib/vertesia-ui-i18n.DvF_YaAJ.chunk.js +0 -5
  388. package/lib/vertesia-ui-i18n.DvF_YaAJ.chunk.js.map +0 -1
  389. package/src/session/auth/authState.test.ts +0 -35
@@ -0,0 +1,140 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /** Developer-only visual fixtures. Mount outside the authenticated application tree. */
3
+ import { I18nProvider, useUITranslation } from '@vertesia/ui/i18n';
4
+ import { AppBrandingProvider, BrandedAuthLoadingScreen, BrandedPermissionLoadingScreen, BrandedSignInScreen, } from './BrandedAuthScreens';
5
+ import { SignInFlowSteps } from './login/SignInFlow';
6
+ import SignInRecoveryStep from './login/SignInRecoveryStep';
7
+ import { SignInRestrictedEnvView } from './login/SignInRestrictedEnvStep';
8
+ import SignInTenantBlockedStep from './login/SignInTenantBlockedStep';
9
+ import { SignInErrorNotice } from './login/SigninScreen';
10
+ import SignupForm from './login/SignupForm';
11
+ export const AUTH_PREVIEW_SCREENS = [
12
+ 'email',
13
+ 'providers',
14
+ 'tenant',
15
+ 'returning',
16
+ 'pending',
17
+ 'blocked',
18
+ 'signup',
19
+ 'restricted',
20
+ 'scope-project',
21
+ 'scope-account',
22
+ 'no-account',
23
+ 'credentials',
24
+ 'service',
25
+ 'auth-error',
26
+ 'loading',
27
+ 'permissions',
28
+ 'permission-retry',
29
+ 'permission-error',
30
+ 'permission-denied',
31
+ 'permission-session-expired',
32
+ 'boot',
33
+ ];
34
+ const noop = () => { };
35
+ const identity = { email: 'alex@example.com', name: 'Alex Example' };
36
+ const signupIdentity = { email: identity.email, displayName: identity.name };
37
+ const recoveryKinds = {
38
+ 'scope-project': 'scopeProject',
39
+ 'scope-account': 'scopeAccount',
40
+ 'no-account': 'noAccessibleAccount',
41
+ credentials: 'credential',
42
+ service: 'service',
43
+ };
44
+ export function AuthScreenPreview({ screen, branding, screens = {}, }) {
45
+ const { t } = useUITranslation();
46
+ const selected = AUTH_PREVIEW_SCREENS.find((value) => value === screen) ?? 'email';
47
+ const SignIn = screens.SignIn ?? BrandedSignInScreen;
48
+ const Loading = screens.Loading ?? BrandedAuthLoadingScreen;
49
+ const Permissions = screens.Permissions ?? BrandedPermissionLoadingScreen;
50
+ const recovery = recoveryKinds[selected];
51
+ const flow = {
52
+ mode: selected === 'providers' ||
53
+ selected === 'tenant' ||
54
+ selected === 'returning' ||
55
+ selected === 'pending' ||
56
+ selected === 'blocked' ||
57
+ selected === 'signup' ||
58
+ selected === 'restricted'
59
+ ? selected
60
+ : selected === 'scope-project' || selected === 'scope-account'
61
+ ? 'scopeUnavailable'
62
+ : selected === 'no-account'
63
+ ? 'noAccessibleAccount'
64
+ : selected === 'credentials'
65
+ ? 'credentialFailure'
66
+ : selected === 'service'
67
+ ? 'serviceFailure'
68
+ : 'email',
69
+ email: identity.email,
70
+ tenant: { firebaseTenantId: 'preview', name: branding.name, provider: 'oidc' },
71
+ storedSession: { ...identity, lastProvider: 'oidc', tenantName: branding.name },
72
+ pendingProvider: 'oidc',
73
+ setMode: noop,
74
+ setEmail: noop,
75
+ setTenant: noop,
76
+ setStoredSession: noop,
77
+ onProceedFromEmail: noop,
78
+ onBack: noop,
79
+ onNotYou: noop,
80
+ onProviderClicked: noop,
81
+ startOver: noop,
82
+ };
83
+ let content = _jsx(SignInFlowSteps, { flow: flow });
84
+ if (selected === 'blocked')
85
+ content = _jsx(SignInTenantBlockedStep, { email: identity.email, tenantName: branding.name, onBack: noop });
86
+ if (selected === 'restricted')
87
+ content = _jsx(SignInRestrictedEnvView, { onUseDifferentEmail: noop, onRedirect: noop });
88
+ if (selected === 'signup')
89
+ content = _jsx(SignupForm, { identity: signupIdentity, onSignup: noop, goBack: noop });
90
+ if (recovery)
91
+ content = (_jsx(SignInRecoveryStep, { kind: recovery, identity: identity, details: { message: 'Preview error details', status: 403 }, onContinue: recovery === 'scopeProject' || recovery === 'scopeAccount' || recovery === 'service'
92
+ ? noop
93
+ : undefined, onUseDifferentAccount: noop }));
94
+ let page = (_jsx(SignIn, { flow: flow, isNested: false, notice: selected === 'auth-error' ? _jsx(SignInErrorNotice, {}) : null, onUseDifferentAccount: noop, onContinueWithSanitizedScope: noop, onRetry: noop, onSignup: noop, children: content }));
95
+ if (selected === 'loading')
96
+ page = _jsx(Loading, {});
97
+ if (selected === 'permissions' ||
98
+ selected === 'permission-retry' ||
99
+ selected === 'permission-error' ||
100
+ selected === 'permission-denied' ||
101
+ selected === 'permission-session-expired') {
102
+ const denied = selected === 'permission-denied';
103
+ const expired = selected === 'permission-session-expired';
104
+ const failed = selected === 'permission-error' || denied || expired;
105
+ page = (_jsx(Permissions, { status: failed ? 'error' : selected === 'permission-retry' ? 'retrying' : 'loading', title: expired
106
+ ? t('auth.recovery.credential.title')
107
+ : denied
108
+ ? t('shell.accessDenied')
109
+ : failed
110
+ ? t('permissions.connectionFailed')
111
+ : t('permissions.connecting'), description: expired
112
+ ? t('auth.recovery.credential.body')
113
+ : denied
114
+ ? t('permissions.accessDenied')
115
+ : failed
116
+ ? t('permissions.tryAgainLater')
117
+ : selected === 'permission-retry'
118
+ ? t('permissions.retrying')
119
+ : t('permissions.loadingPermissions'), error: failed ? new Error('Preview permission error') : undefined, actionLabel: t(denied || expired ? 'auth.recovery.useDifferentAccount' : 'auth.recovery.tryAgain'), onAction: noop }));
120
+ }
121
+ return (_jsx(I18nProvider, { children: _jsxs(AppBrandingProvider, { branding: branding, children: [_jsx("div", { inert: true, style: { display: 'contents' }, children: page }), _jsxs("details", { className: "fixed top-2 start-2 max-h-80 overflow-auto rounded border bg-background text-foreground p-3 text-sm", style: { zIndex: 2147483647 }, children: [_jsxs("summary", { children: ["Auth preview: ", selected] }), _jsxs("nav", { "aria-label": "Auth preview screens", className: "flex flex-col gap-1 mt-2", children: [AUTH_PREVIEW_SCREENS.map((value) => {
122
+ const params = new URLSearchParams(window.location.search);
123
+ params.delete('__vertesia_boot');
124
+ params.delete('__vertesia_auth');
125
+ params.set(value === 'boot' ? '__vertesia_boot' : '__vertesia_auth', value === 'boot' ? 'slow' : value);
126
+ return (_jsx("a", { href: `?${params}`, "aria-current": value === selected ? 'page' : undefined, children: value }, value));
127
+ }), _jsx("a", { href: window.location.pathname, children: "Exit preview" })] })] })] }) }));
128
+ }
129
+ /** Hosts call this only from their import.meta.env.DEV branch, before mounting auth/session providers. */
130
+ export async function mountAuthScreenPreview(container, screen, branding = {
131
+ name: 'Vertesia',
132
+ logo: { light: '/logo-light.png', dark: '/logo-dark.png' },
133
+ loadingIcon: { light: '/icon.svg' },
134
+ }, screens = {}) {
135
+ if (screen === 'boot')
136
+ return;
137
+ const { createRoot } = await import('react-dom/client');
138
+ createRoot(container).render(_jsx(AuthScreenPreview, { screen: screen, branding: branding, screens: screens }));
139
+ }
140
+ //# sourceMappingURL=AuthScreenPreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthScreenPreview.js","sourceRoot":"","sources":["../../src/shell/AuthScreenPreview.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { type PermissionLoadingScreenProps } from '@vertesia/ui/features';
2
+ import { type ReactNode } from 'react';
3
+ import { type AppBranding } from '../boot/branding.js';
4
+ import { type SignInScreenViewProps } from './login/SigninScreen';
5
+ import { type AuthLoadingScreenProps } from './SplashScreen';
6
+ import type { AuthScreens } from './VertesiaShell';
7
+ export declare function AppBrandingProvider({ branding, children }: {
8
+ branding: AppBranding;
9
+ children: ReactNode;
10
+ }): import("react").JSX.Element;
11
+ export declare function BrandedAuthLoadingScreen({ loadingIcon }: AuthLoadingScreenProps): import("react").JSX.Element;
12
+ export declare function BrandedSignInScreen({ children, notice, isNested, lightLogo, darkLogo }: SignInScreenViewProps): import("react").JSX.Element;
13
+ export declare function BrandedPermissionLoadingScreen(props: PermissionLoadingScreenProps): import("react").JSX.Element;
14
+ export declare const brandedAuthScreens: AuthScreens;
15
+ /** Brand-aware loading indicator that stays inside its container instead of covering the app shell. */
16
+ export declare function BrandedLoadingIndicator({ loadingIcon, delayMs }: AuthLoadingScreenProps & {
17
+ delayMs?: number;
18
+ }): import("react").JSX.Element | null;
19
+ //# sourceMappingURL=BrandedAuthScreens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrandedAuthScreens.d.ts","sourceRoot":"","sources":["../../src/shell/BrandedAuthScreens.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAE1G,OAAO,EAAiB,KAAK,SAAS,EAAmD,MAAM,OAAO,CAAC;AACvG,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAuB,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,KAAK,sBAAsB,EAA8C,MAAM,gBAAgB,CAAC;AACzG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAInD,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAoBzG;AAgBD,wBAAgB,wBAAwB,CAAC,EAAE,WAAW,EAAE,EAAE,sBAAsB,+BAQ/E;AAED,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,qBAAqB,+BAc7G;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,4BAA4B,+BAejF;AAED,eAAO,MAAM,kBAAkB,EAAE,WAIhC,CAAC;AAEF,uGAAuG;AACvG,wBAAgB,uBAAuB,CAAC,EAAE,WAAW,EAAE,OAAW,EAAE,EAAE,sBAAsB,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,sCAoBlH"}
@@ -0,0 +1,64 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { DefaultPermissionLoadingScreen } from '@vertesia/ui/features';
3
+ import { UITranslationOverrides } from '@vertesia/ui/i18n';
4
+ import { createContext, useContext, useEffect, useId, useMemo, useState } from 'react';
5
+ import { renderBrandStyles } from '../boot/branding.js';
6
+ import { DefaultSignInScreen } from './login/SigninScreen';
7
+ import { DefaultAuthLoadingScreen, LoadingAnimation } from './SplashScreen';
8
+ const BrandingContext = createContext({ name: '' });
9
+ export function AppBrandingProvider({ branding, children }) {
10
+ const id = useId().replace(/[^a-zA-Z0-9_-]/g, '');
11
+ const overrides = useMemo(() => {
12
+ const result = {};
13
+ for (const [key, value] of Object.entries(branding.copy?.translations ?? {})) {
14
+ if (key.startsWith('auth.') || key.startsWith('signup.'))
15
+ result[key] = value;
16
+ }
17
+ if (branding.copy?.welcome !== undefined)
18
+ result['auth.email.title'] = branding.copy.welcome;
19
+ if (branding.copy?.emailPlaceholder !== undefined)
20
+ result['auth.email.placeholder'] = branding.copy.emailPlaceholder;
21
+ return result;
22
+ }, [branding]);
23
+ return (_jsx(BrandingContext.Provider, { value: branding, children: _jsxs("div", { "data-vbrand": id, style: { display: 'contents' }, children: [_jsx("style", { children: renderBrandStyles(branding, `[data-vbrand="${id}"]`) }), _jsx(UITranslationOverrides, { overrides: overrides, children: children })] }) }));
24
+ }
25
+ function BrandLoadingIcon({ brand }) {
26
+ if (!brand.loadingIcon)
27
+ return null;
28
+ return (_jsxs(_Fragment, { children: [_jsx("img", { src: brand.loadingIcon.light, alt: "", className: "w-10 h-auto rounded-full block dark:hidden" }), _jsx("img", { src: brand.loadingIcon.dark ?? brand.loadingIcon.light, alt: "", className: "w-10 h-auto rounded-full hidden dark:block" })] }));
29
+ }
30
+ export function BrandedAuthLoadingScreen({ loadingIcon }) {
31
+ const brand = useContext(BrandingContext);
32
+ return (_jsx(DefaultAuthLoadingScreen, { loadingIcon: loadingIcon ?? (brand.loadingIcon ? _jsx(BrandLoadingIcon, { brand: brand }) : undefined), loadingLabel: brand.copy?.loading }));
33
+ }
34
+ export function BrandedSignInScreen({ children, notice, isNested, lightLogo, darkLogo }) {
35
+ const brand = useContext(BrandingContext);
36
+ return (_jsx(DefaultSignInScreen, { isNested: isNested, lightLogo: brand.logo?.light ?? lightLogo, darkLogo: brand.logo?.dark ?? brand.logo?.light ?? darkLogo, logoAlt: brand.logo?.alt ?? brand.name, footer: brand.copy?.footer, notice: notice, children: children }));
37
+ }
38
+ export function BrandedPermissionLoadingScreen(props) {
39
+ const brand = useContext(BrandingContext);
40
+ return (_jsx(DefaultPermissionLoadingScreen, { ...props, description: props.status === 'error' ? props.description : (brand.copy?.loading ?? props.description), loadingIcon: props.status === 'error' ? ((props.loadingIcon ?? (brand.loadingIcon ? _jsx(BrandLoadingIcon, { brand: brand }) : undefined))) : (_jsx(BrandedLoadingIndicator, { loadingIcon: props.loadingIcon })) }));
41
+ }
42
+ export const brandedAuthScreens = {
43
+ SignIn: BrandedSignInScreen,
44
+ Loading: BrandedAuthLoadingScreen,
45
+ Permissions: BrandedPermissionLoadingScreen,
46
+ };
47
+ /** Brand-aware loading indicator that stays inside its container instead of covering the app shell. */
48
+ export function BrandedLoadingIndicator({ loadingIcon, delayMs = 0 }) {
49
+ const brand = useContext(BrandingContext);
50
+ const [visible, setVisible] = useState(delayMs <= 0);
51
+ useEffect(() => {
52
+ if (delayMs <= 0) {
53
+ setVisible(true);
54
+ return;
55
+ }
56
+ setVisible(false);
57
+ const timer = setTimeout(() => setVisible(true), delayMs);
58
+ return () => clearTimeout(timer);
59
+ }, [delayMs]);
60
+ if (!visible)
61
+ return null;
62
+ return (_jsx("div", { role: "status", "aria-label": brand.copy?.loading ?? 'Loading', children: _jsx(LoadingAnimation, { loadingIcon: loadingIcon ?? (brand.loadingIcon ? _jsx(BrandLoadingIcon, { brand: brand }) : undefined) }) }));
63
+ }
64
+ //# sourceMappingURL=BrandedAuthScreens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrandedAuthScreens.js","sourceRoot":"","sources":["../../src/shell/BrandedAuthScreens.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +1,18 @@
1
- import { type ReactNode } from 'react';
1
+ import type { ComponentType, ReactNode } from 'react';
2
+ export interface AuthLoadingScreenProps {
3
+ loadingIcon?: ReactNode;
4
+ }
2
5
  interface SplashScreenProps {
6
+ Presentation?: ComponentType<AuthLoadingScreenProps>;
7
+ Screen?: ComponentType<AuthLoadingScreenProps>;
3
8
  icon?: ReactNode;
4
9
  }
5
- export declare function SplashScreen({ icon: Icon }: SplashScreenProps): import("react").JSX.Element | null;
10
+ export declare function SplashScreen({ icon: Icon, Screen, Presentation }: SplashScreenProps): import("react").JSX.Element | null;
11
+ /** Presentation shared by the default shell and configured branding. */
12
+ export declare function DefaultAuthLoadingScreen({ loadingIcon, loadingLabel, }: AuthLoadingScreenProps & {
13
+ loadingLabel?: string;
14
+ }): import("react").JSX.Element;
15
+ /** Shared logo motion for full-screen and in-content loading states. */
16
+ export declare function LoadingAnimation({ loadingIcon }: AuthLoadingScreenProps): import("react").JSX.Element;
6
17
  export {};
7
18
  //# sourceMappingURL=SplashScreen.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SplashScreen.d.ts","sourceRoot":"","sources":["../../src/shell/SplashScreen.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,OAAO,CAAC;AAE5D,UAAU,iBAAiB;IACvB,IAAI,CAAC,EAAE,SAAS,CAAC;CACpB;AACD,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,iBAAiB,sCA0C7D"}
1
+ {"version":3,"file":"SplashScreen.d.ts","sourceRoot":"","sources":["../../src/shell/SplashScreen.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtD,MAAM,WAAW,sBAAsB;IACnC,WAAW,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,UAAU,iBAAiB;IACvB,YAAY,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;IACrD,MAAM,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;IAC/C,IAAI,CAAC,EAAE,SAAS,CAAC;CACpB;AACD,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,YAAuC,EAAE,EAAE,iBAAiB,sCAQ9G;AAED,wEAAwE;AACxE,wBAAgB,wBAAwB,CAAC,EACrC,WAAW,EACX,YAAwB,GAC3B,EAAE,sBAAsB,GAAG;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,+BAiBpD;AAqCD,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,EAAE,WAAW,EAAE,EAAE,sBAAsB,+BAQvE"}
@@ -1,32 +1,33 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useUserSession } from '@vertesia/ui/session';
3
- import { AnimatePresence, motion } from 'framer-motion';
4
- import { useEffect, useState } from 'react';
5
- export function SplashScreen({ icon: Icon }) {
3
+ export function SplashScreen({ icon: Icon, Screen, Presentation = DefaultAuthLoadingScreen }) {
6
4
  const { isLoading, authToken } = useUserSession();
7
- const [show, setShow] = useState(true);
8
- useEffect(() => {
9
- if (!isLoading) {
10
- setShow(false);
11
- }
12
- }, [isLoading]);
13
- // The permission gate owns the loading UI once a token is available.
14
- // Skip the exit animation too, so two loading indicators never overlap.
15
- if (authToken)
5
+ // Hand off synchronously: an exiting splash must never cover the next view.
6
+ if (authToken || !isLoading)
16
7
  return null;
17
- 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: {
18
- display: 'flex',
19
- width: '100%',
20
- height: '100%',
21
- alignItems: 'center',
22
- justifyContent: 'center',
23
- }, 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, {}) }) }) }) })) }));
8
+ // Custom screens own the entire page, including their animation and positioning.
9
+ const LoadingScreen = Screen ?? Presentation;
10
+ return _jsx(LoadingScreen, { loadingIcon: Icon });
11
+ }
12
+ /** Presentation shared by the default shell and configured branding. */
13
+ export function DefaultAuthLoadingScreen({ loadingIcon, loadingLabel = 'Loading', }) {
14
+ return (_jsx("div", { style: { position: 'fixed', inset: 0, zIndex: 999999 }, role: "status", "aria-label": loadingLabel, children: _jsx("div", { style: {
15
+ display: 'flex',
16
+ width: '100%',
17
+ height: '100%',
18
+ alignItems: 'center',
19
+ justifyContent: 'center',
20
+ }, className: "flex w-full h-full items-center justify-center", children: _jsx(LoadingAnimation, { loadingIcon: loadingIcon }) }) }));
24
21
  }
25
22
  function LoadingIcon() {
26
23
  const stopColor1 = 'currentColor';
27
24
  const stopColor2 = 'currentColor';
28
25
  // const stopColor1 = "#4F46E5";
29
26
  // const stopColor2 = "#4F46E5";
30
- return (_jsxs("svg", { width: "32", height: "32", className: "w-8 h-8 text-primary", viewBox: "0 0 50 50", xmlns: "http://www.w3.org/2000/svg", role: "img", "aria-label": "Loading", children: [_jsx("title", { children: "Loading" }), _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" })] }));
27
+ return (_jsxs("svg", { width: "32", height: "32", className: "w-8 h-8 text-info", viewBox: "0 0 50 50", xmlns: "http://www.w3.org/2000/svg", role: "img", "aria-label": "Loading", children: [_jsx("title", { children: "Loading" }), _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" })] }));
28
+ }
29
+ /** Shared logo motion for full-screen and in-content loading states. */
30
+ export function LoadingAnimation({ loadingIcon }) {
31
+ return (_jsx("div", { className: "animate-[var(--vertesia-loading-animation,spin_4s_linear_infinite)] motion-reduce:animate-none", children: _jsx("div", { className: "animate-[var(--vertesia-loading-pulse-animation,pulse_2s_cubic-bezier(0.4,0,0.6,1)_infinite)] motion-reduce:animate-none rounded-full bg-transparent", children: loadingIcon || _jsx(LoadingIcon, {}) }) }));
31
32
  }
32
33
  //# sourceMappingURL=SplashScreen.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SplashScreen.js","sourceRoot":"","sources":["../../src/shell/SplashScreen.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAkB,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAK5D,MAAM,UAAU,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,EAAqB;IAC1D,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,cAAc,EAAE,CAAC;IAClD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEvC,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACL,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,qEAAqE;IACrE,wEAAwE;IACxE,IAAI,SAAS;QAAE,OAAO,IAAI,CAAC;IAE3B,OAAO,CACH,KAAC,eAAe,cACX,IAAI,IAAI,CACL,KAAC,MAAM,CAAC,GAAG,IACP,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,EACtD,SAAS,EAAC,2BAA2B,EACrC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EACvB,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EACpB,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,YAE7C,cACI,KAAK,EAAE;oBACH,OAAO,EAAE,MAAM;oBACf,KAAK,EAAE,MAAM;oBACb,MAAM,EAAE,MAAM;oBACd,UAAU,EAAE,QAAQ;oBACpB,cAAc,EAAE,QAAQ;iBAC3B,EACD,SAAS,EAAC,gDAAgD,YAE1D,cAAK,SAAS,EAAC,mCAAmC,YAC9C,cAAK,SAAS,EAAC,2CAA2C,YAAE,IAAI,IAAI,KAAC,WAAW,KAAG,GAAO,GACxF,GACJ,GACG,CAChB,GACa,CACrB,CAAC;AACN,CAAC;AAED,SAAS,WAAW;IAChB,MAAM,UAAU,GAAG,cAAc,CAAC;IAClC,MAAM,UAAU,GAAG,cAAc,CAAC;IAClC,gCAAgC;IAChC,gCAAgC;IAChC,OAAO,CACH,eACI,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,SAAS,EAAC,sBAAsB,EAChC,OAAO,EAAC,WAAW,EACnB,KAAK,EAAC,4BAA4B,EAClC,IAAI,EAAC,KAAK,gBACC,SAAS,aAEpB,sCAAsB,EACtB,yBACI,0BAAgB,EAAE,EAAC,kBAAkB,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,aAC7D,eAAM,MAAM,EAAC,IAAI,EAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAC,GAAG,GAAG,EAC3D,eAAM,MAAM,EAAC,MAAM,EAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAC,GAAG,GAAG,IAChD,GACd,EACP,iBACI,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,IAAI,EACP,CAAC,EAAC,IAAI,EACN,MAAM,EAAC,wBAAwB,EAC/B,WAAW,EAAC,GAAG,EACf,IAAI,EAAC,MAAM,EACX,aAAa,EAAC,OAAO,GACvB,IACA,CACT,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"SplashScreen.js","sourceRoot":"","sources":["../../src/shell/SplashScreen.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAYtD,MAAM,UAAU,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,GAAG,wBAAwB,EAAqB;IAC3G,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,cAAc,EAAE,CAAC;IAClD,4EAA4E;IAC5E,IAAI,SAAS,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAEzC,iFAAiF;IACjF,MAAM,aAAa,GAAG,MAAM,IAAI,YAAY,CAAC;IAC7C,OAAO,KAAC,aAAa,IAAC,WAAW,EAAE,IAAI,GAAI,CAAC;AAChD,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,wBAAwB,CAAC,EACrC,WAAW,EACX,YAAY,GAAG,SAAS,GACyB;IACjD,OAAO,CACH,cAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAC,QAAQ,gBAAa,YAAY,YAC/F,cACI,KAAK,EAAE;gBACH,OAAO,EAAE,MAAM;gBACf,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,MAAM;gBACd,UAAU,EAAE,QAAQ;gBACpB,cAAc,EAAE,QAAQ;aAC3B,EACD,SAAS,EAAC,gDAAgD,YAE1D,KAAC,gBAAgB,IAAC,WAAW,EAAE,WAAW,GAAI,GAC5C,GACJ,CACT,CAAC;AACN,CAAC;AAED,SAAS,WAAW;IAChB,MAAM,UAAU,GAAG,cAAc,CAAC;IAClC,MAAM,UAAU,GAAG,cAAc,CAAC;IAClC,gCAAgC;IAChC,gCAAgC;IAChC,OAAO,CACH,eACI,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,SAAS,EAAC,mBAAmB,EAC7B,OAAO,EAAC,WAAW,EACnB,KAAK,EAAC,4BAA4B,EAClC,IAAI,EAAC,KAAK,gBACC,SAAS,aAEpB,sCAAsB,EACtB,yBACI,0BAAgB,EAAE,EAAC,kBAAkB,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,aAC7D,eAAM,MAAM,EAAC,IAAI,EAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAC,GAAG,GAAG,EAC3D,eAAM,MAAM,EAAC,MAAM,EAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAC,GAAG,GAAG,IAChD,GACd,EACP,iBACI,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,IAAI,EACP,CAAC,EAAC,IAAI,EACN,MAAM,EAAC,wBAAwB,EAC/B,WAAW,EAAC,GAAG,EACf,IAAI,EAAC,MAAM,EACX,aAAa,EAAC,OAAO,GACvB,IACA,CACT,CAAC;AACN,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,gBAAgB,CAAC,EAAE,WAAW,EAA0B;IACpE,OAAO,CACH,cAAK,SAAS,EAAC,gGAAgG,YAC3G,cAAK,SAAS,EAAC,sJAAsJ,YAChK,WAAW,IAAI,KAAC,WAAW,KAAG,GAC7B,GACJ,CACT,CAAC;AACN,CAAC"}
@@ -1,6 +1,18 @@
1
+ import { type PermissionLoadingScreenProps } from '@vertesia/ui/features';
1
2
  import { type SupportedLanguage } from '@vertesia/ui/i18n';
2
- import type { ReactNode } from 'react';
3
- interface VertesiaShellProps {
3
+ import type { ComponentType, ReactNode } from 'react';
4
+ import type { AppBranding } from '../boot/branding.js';
5
+ import { type SignInScreenViewProps } from './login/SigninScreen';
6
+ import { type AuthLoadingScreenProps } from './SplashScreen';
7
+ /** Optional full-page presentations. Session and permission gating remain owned by the shell. */
8
+ export interface AuthScreens {
9
+ SignIn?: ComponentType<SignInScreenViewProps>;
10
+ Loading?: ComponentType<AuthLoadingScreenProps>;
11
+ Permissions?: ComponentType<PermissionLoadingScreenProps>;
12
+ }
13
+ export interface VertesiaShellProps {
14
+ authScreens?: AuthScreens;
15
+ branding?: AppBranding;
4
16
  children: React.ReactNode;
5
17
  lightLogo?: string;
6
18
  darkLogo?: string;
@@ -13,6 +25,5 @@ interface VertesiaShellProps {
13
25
  /** Force a default language. If omitted, falls back to localStorage then navigator.language then 'en'. */
14
26
  defaultLanguage?: SupportedLanguage;
15
27
  }
16
- export declare function VertesiaShell({ children, lightLogo, darkLogo, loadingIcon, loadOnboardingStatus, preserveSignInPath, suppressSignInErrorPrefixes, authToken, defaultLanguage, }: VertesiaShellProps): import("react").JSX.Element;
17
- export {};
28
+ export declare function VertesiaShell({ children, lightLogo, darkLogo, loadingIcon, loadOnboardingStatus, preserveSignInPath, suppressSignInErrorPrefixes, authToken, defaultLanguage, authScreens, branding, }: VertesiaShellProps): import("react").JSX.Element;
18
29
  //# sourceMappingURL=VertesiaShell.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VertesiaShell.d.ts","sourceRoot":"","sources":["../../src/shell/VertesiaShell.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA+C,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAExG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,UAAU,kBAAkB;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,2BAA2B,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAChD,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0GAA0G;IAC1G,eAAe,CAAC,EAAE,iBAAiB,CAAC;CACvC;AACD,wBAAgB,aAAa,CAAC,EAC1B,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EAClB,2BAA2B,EAC3B,SAAS,EACT,eAAe,GAClB,EAAE,kBAAkB,+BAmCpB"}
1
+ {"version":3,"file":"VertesiaShell.d.ts","sourceRoot":"","sources":["../../src/shell/VertesiaShell.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,4BAA4B,EAAgD,MAAM,uBAAuB,CAAC;AACxH,OAAO,EAA+C,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAExG,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,KAAK,qBAAqB,EAAgB,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,KAAK,sBAAsB,EAAgB,MAAM,gBAAgB,CAAC;AAE3E,iGAAiG;AACjG,MAAM,WAAW,WAAW;IACxB,MAAM,CAAC,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAC9C,OAAO,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;IAChD,WAAW,CAAC,EAAE,aAAa,CAAC,4BAA4B,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,kBAAkB;IAC/B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,2BAA2B,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAChD,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0GAA0G;IAC1G,eAAe,CAAC,EAAE,iBAAiB,CAAC;CACvC;AACD,wBAAgB,aAAa,CAAC,EAC1B,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EAClB,2BAA2B,EAC3B,SAAS,EACT,eAAe,EACf,WAAW,EACX,QAAQ,GACX,EAAE,kBAAkB,+BA6CpB"}
@@ -4,10 +4,15 @@ import { TypeRegistryProvider, UserPermissionProvider } from '@vertesia/ui/featu
4
4
  import { LanguageBoundI18nProvider, LanguageProvider } from '@vertesia/ui/i18n';
5
5
  import { DevSessionProvider, UserSessionProvider } from '@vertesia/ui/session';
6
6
  import { IframeAppContextSync } from './apps/IframeAppContextSync.js';
7
+ import { AppBrandingProvider, BrandedAuthLoadingScreen, brandedAuthScreens } from './BrandedAuthScreens';
7
8
  import { SigninScreen } from './login/SigninScreen';
8
9
  import { SplashScreen } from './SplashScreen';
9
- export function VertesiaShell({ children, lightLogo, darkLogo, loadingIcon, loadOnboardingStatus, preserveSignInPath, suppressSignInErrorPrefixes, authToken, defaultLanguage, }) {
10
- const content = (_jsx(TypeRegistryProvider, { children: _jsx(ThemeProvider, { defaultTheme: "system", storageKey: "vite-ui-theme", children: _jsx(LanguageProvider, { defaultLanguage: defaultLanguage, children: _jsxs(LanguageBoundI18nProvider, { children: [_jsx(IframeAppContextSync, {}), !authToken && (_jsxs(_Fragment, { children: [_jsx(SplashScreen, { icon: loadingIcon }), _jsx(SigninScreen, { allowedPrefix: "/shared/", darkLogo: darkLogo, lightLogo: lightLogo, preservePath: preserveSignInPath, suppressAuthErrorPrefix: suppressSignInErrorPrefixes })] })), _jsx(UserPermissionProvider, { loadingIcon: loadingIcon, children: children })] }) }) }) }));
11
- return (_jsx(ToastProvider, { children: authToken ? (_jsx(DevSessionProvider, { token: authToken, children: content })) : (_jsx(UserSessionProvider, { loadOnboardingStatus: loadOnboardingStatus, children: content })) }));
10
+ export function VertesiaShell({ children, lightLogo, darkLogo, loadingIcon, loadOnboardingStatus, preserveSignInPath, suppressSignInErrorPrefixes, authToken, defaultLanguage, authScreens, branding, }) {
11
+ const screens = { ...(branding ? brandedAuthScreens : {}), ...authScreens };
12
+ const brandedContent = (_jsx(TypeRegistryProvider, { children: _jsx(ThemeProvider, { defaultTheme: "system", storageKey: "vite-ui-theme", children: _jsx(LanguageProvider, { defaultLanguage: defaultLanguage, children: _jsx(LanguageBoundI18nProvider, { children: _jsxs(AppBrandingBoundary, { branding: branding, children: [_jsx(IframeAppContextSync, {}), !authToken && (_jsxs(_Fragment, { children: [_jsx(SplashScreen, { icon: loadingIcon, Screen: authScreens?.Loading, Presentation: branding ? BrandedAuthLoadingScreen : undefined }), _jsx(SigninScreen, { View: screens.SignIn, allowedPrefix: "/shared/", darkLogo: darkLogo, lightLogo: lightLogo, preservePath: preserveSignInPath, suppressAuthErrorPrefix: suppressSignInErrorPrefixes })] })), _jsx(UserPermissionProvider, { loadingIcon: loadingIcon, LoadingScreen: screens.Permissions, children: children })] }) }) }) }) }));
13
+ return (_jsx(ToastProvider, { children: authToken ? (_jsx(DevSessionProvider, { token: authToken, children: brandedContent })) : (_jsx(UserSessionProvider, { loadOnboardingStatus: loadOnboardingStatus, children: brandedContent })) }));
14
+ }
15
+ function AppBrandingBoundary({ branding, children }) {
16
+ return branding ? _jsx(AppBrandingProvider, { branding: branding, children: children }) : children;
12
17
  }
13
18
  //# sourceMappingURL=VertesiaShell.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VertesiaShell.js","sourceRoot":"","sources":["../../src/shell/VertesiaShell.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAA0B,MAAM,mBAAmB,CAAC;AACxG,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAe9C,MAAM,UAAU,aAAa,CAAC,EAC1B,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EAClB,2BAA2B,EAC3B,SAAS,EACT,eAAe,GACE;IACjB,MAAM,OAAO,GAAG,CACZ,KAAC,oBAAoB,cACjB,KAAC,aAAa,IAAC,YAAY,EAAC,QAAQ,EAAC,UAAU,EAAC,eAAe,YAC3D,KAAC,gBAAgB,IAAC,eAAe,EAAE,eAAe,YAC9C,MAAC,yBAAyB,eACtB,KAAC,oBAAoB,KAAG,EACvB,CAAC,SAAS,IAAI,CACX,8BACI,KAAC,YAAY,IAAC,IAAI,EAAE,WAAW,GAAI,EACnC,KAAC,YAAY,IACT,aAAa,EAAC,UAAU,EACxB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,kBAAkB,EAChC,uBAAuB,EAAE,2BAA2B,GACtD,IACH,CACN,EACD,KAAC,sBAAsB,IAAC,WAAW,EAAE,WAAW,YAAG,QAAQ,GAA0B,IAC7D,GACb,GACP,GACG,CAC1B,CAAC;IAEF,OAAO,CACH,KAAC,aAAa,cACT,SAAS,CAAC,CAAC,CAAC,CACT,KAAC,kBAAkB,IAAC,KAAK,EAAE,SAAS,YAAG,OAAO,GAAsB,CACvE,CAAC,CAAC,CAAC,CACA,KAAC,mBAAmB,IAAC,oBAAoB,EAAE,oBAAoB,YAAG,OAAO,GAAuB,CACnG,GACW,CACnB,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"VertesiaShell.js","sourceRoot":"","sources":["../../src/shell/VertesiaShell.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAqC,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACxH,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAA0B,MAAM,mBAAmB,CAAC;AACxG,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACzG,OAAO,EAA8B,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAA+B,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAwB3E,MAAM,UAAU,aAAa,CAAC,EAC1B,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EAClB,2BAA2B,EAC3B,SAAS,EACT,eAAe,EACf,WAAW,EACX,QAAQ,GACS;IACjB,MAAM,OAAO,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,WAAW,EAAE,CAAC;IAC5E,MAAM,cAAc,GAAG,CACnB,KAAC,oBAAoB,cACjB,KAAC,aAAa,IAAC,YAAY,EAAC,QAAQ,EAAC,UAAU,EAAC,eAAe,YAC3D,KAAC,gBAAgB,IAAC,eAAe,EAAE,eAAe,YAC9C,KAAC,yBAAyB,cACtB,MAAC,mBAAmB,IAAC,QAAQ,EAAE,QAAQ,aACnC,KAAC,oBAAoB,KAAG,EACvB,CAAC,SAAS,IAAI,CACX,8BACI,KAAC,YAAY,IACT,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,WAAW,EAAE,OAAO,EAC5B,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,SAAS,GAC/D,EACF,KAAC,YAAY,IACT,IAAI,EAAE,OAAO,CAAC,MAAM,EACpB,aAAa,EAAC,UAAU,EACxB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,kBAAkB,EAChC,uBAAuB,EAAE,2BAA2B,GACtD,IACH,CACN,EACD,KAAC,sBAAsB,IAAC,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,CAAC,WAAW,YAC/E,QAAQ,GACY,IACP,GACE,GACb,GACP,GACG,CAC1B,CAAC;IAEF,OAAO,CACH,KAAC,aAAa,cACT,SAAS,CAAC,CAAC,CAAC,CACT,KAAC,kBAAkB,IAAC,KAAK,EAAE,SAAS,YAAG,cAAc,GAAsB,CAC9E,CAAC,CAAC,CAAC,CACA,KAAC,mBAAmB,IAAC,oBAAoB,EAAE,oBAAoB,YAAG,cAAc,GAAuB,CAC1G,GACW,CACnB,CAAC;AACN,CAAC;AAED,SAAS,mBAAmB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAmD;IAChG,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAC,mBAAmB,IAAC,QAAQ,EAAE,QAAQ,YAAG,QAAQ,GAAuB,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC3G,CAAC"}
@@ -77,7 +77,11 @@ function AccessDeniedMessage({ name }) {
77
77
  const onProjectChange = (selected) => {
78
78
  localStorage.setItem(LastSelectedAccountId_KEY, selected.account);
79
79
  localStorage.setItem(`${LastSelectedProjectId_KEY}-${selected.account}`, selected.id);
80
- window.location.reload();
80
+ // An explicit selection must override configured workspace defaults on the next load.
81
+ const url = new URL(window.location.href);
82
+ url.searchParams.set('a', selected.account);
83
+ url.searchParams.set('p', selected.id);
84
+ window.location.assign(url.toString());
81
85
  };
82
86
  const filteredProjects = selectedAccountId ? projectsByOrg[selectedAccountId] || [] : [];
83
87
  const selectedOrg = orgOptions.find((a) => a.id === selectedAccountId);
@@ -1 +1 @@
1
- {"version":3,"file":"StandaloneApp.js","sourceRoot":"","sources":["../../../src/shell/apps/StandaloneApp.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC5G,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAsC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACzF,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAmBpE,MAAM,UAAU,aAAa,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,mBAAmB,EAAE,QAAQ,EAAsB;IACpG,OAAO,IAAI,CAAC,CAAC,CAAC,CACV,KAAC,iBAAiB,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,YACpD,QAAQ,GACO,CACvB,CAAC,CAAC,CAAC,CACA,KAAC,cAAc,KAAG,CACrB,CAAC;AACN,CAAC;AACD,MAAM,UAAU,iBAAiB,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,mBAAmB,EAAE,QAAQ,EAAsB;IACxG,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;IAC/C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAqC,IAAI,CAAC,CAAC;IAC3F,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAiC,SAAS,CAAC,CAAC;IAE9E,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,QAAQ,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACJ,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACnD,IAAI,YAAY,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;oBACrD,IAAI,CAAC,IAAI,EAAE,CAAC;wBACR,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,aAAa,CAAC,CAAC;wBACtC,QAAQ,CAAC,OAAO,CAAC,CAAC;oBACtB,CAAC;yBAAM,CAAC;wBACJ,QAAQ,CAAC,QAAQ,CAAC,CAAC;wBACnB,eAAe,CAAC,IAAI,CAAC,CAAC;oBAC1B,CAAC;gBACL,CAAC,CAAC,CAAC;YACP,CAAC;iBAAM,CAAC;gBACJ,QAAQ,CAAC,OAAO,CAAC,CAAC;YACtB,CAAC;QACL,CAAC;IACL,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAE5D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IAChB,CAAC;SAAM,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,KAAC,YAAY,IAAC,IAAI,EAAE,IAAI,GAAI,CAAC;IACxC,CAAC;SAAM,IAAI,YAAY,EAAE,CAAC;QACtB,OAAO,KAAC,uBAAuB,IAAC,YAAY,EAAE,YAAY,YAAG,QAAQ,GAA2B,CAAC;IACrG,CAAC;AACL,CAAC;AAMD,SAAS,mBAAmB,CAAC,EAAE,IAAI,EAA4B;IAC3D,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;IACvD,MAAM,EAAE,CAAC,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACjC,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,EAAsB,CAAC;IAEjF,yEAAyE;IACzE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE;QACxC,OAAO,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,iCAAiC;IACjC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;QAC/C,IAAI,CAAC,WAAW,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QAE5E,MAAM,OAAO,GAAiC,EAAE,CAAC;QACjD,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YAC5B,CAAC;YACD,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;QAED,2DAA2D;QAC3D,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;QAE3E,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC;IACpE,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE5B,wCAAwC;IACxC,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,iBAAiB,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC;IACL,CAAC,EAAE,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAEpC,MAAM,eAAe,GAAG,CAAC,QAAoB,EAAE,EAAE;QAC7C,YAAY,CAAC,OAAO,CAAC,yBAAyB,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QAClE,YAAY,CAAC,OAAO,CAAC,GAAG,yBAAyB,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QACtF,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC7B,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACzF,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,iBAAiB,CAAC,CAAC;IAEvE,OAAO,CACH,MAAC,MAAM,IAAC,SAAS,EAAC,8DAA8D,aAC5E,KAAC,QAAQ,IAAC,SAAS,EAAC,2BAA2B,GAAG,EAClD,cAAK,SAAS,EAAC,uBAAuB,YAAE,CAAC,CAAC,oBAAoB,CAAC,GAAO,EACtE,eAAK,SAAS,EAAC,yBAAyB,uDACO,eAAM,SAAS,EAAC,eAAe,YAAE,IAAI,GAAQ,sBAAiB,GAAG,EAC5G,gBAAM,SAAS,EAAC,eAAe,uBAAS,OAAO,EAAE,IAAI,cAAe,SAClE,EACL,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,KAAK,SAAS,IAAI,CACrD,cAAK,SAAS,EAAC,yBAAyB,6EAElC,CACT,EACA,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CACtB,eAAK,SAAS,EAAC,oCAAoC,aAC9C,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CACtB,0BACI,cAAK,SAAS,EAAC,yBAAyB,YAAE,CAAC,CAAC,oBAAoB,CAAC,GAAO,EACxE,KAAC,SAAS,IACN,EAAE,EAAC,IAAI,EACP,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,UAAU,EACnB,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EACpC,WAAW,EAAE,CAAC,CAAC,0BAA0B,CAAC,EAC1C,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,GACjD,IACA,CACT,EACD,0BACK,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CACtB,cAAK,SAAS,EAAC,yBAAyB,YAAE,CAAC,CAAC,wBAAwB,CAAC,GAAO,CAC/E,EACD,KAAC,SAAS,IACN,EAAE,EAAC,IAAI,EACP,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,gBAAgB,EACzB,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EACpC,WAAW,EAAE,CAAC,CAAC,qBAAqB,CAAC,EACrC,QAAQ,EAAE,eAAe,GAC3B,IACA,IACJ,CACT,IACI,CACZ,CAAC;AACN,CAAC;AAED,SAAS,cAAc;IACnB,MAAM,EAAE,CAAC,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACjC,OAAO,CACH,MAAC,MAAM,IAAC,SAAS,EAAC,8DAA8D,aAC5E,KAAC,QAAQ,IAAC,SAAS,EAAC,2BAA2B,GAAG,EAClD,cAAK,SAAS,EAAC,uBAAuB,YAAE,CAAC,CAAC,gCAAgC,CAAC,GAAO,EAClF,eAAK,SAAS,EAAC,yBAAyB,qKAGpC,aAAK,qDAC2C,GAAG,EACnD,oEAAiE,cAAQ,0CAAyB,cAChG,IACD,CACZ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"StandaloneApp.js","sourceRoot":"","sources":["../../../src/shell/apps/StandaloneApp.tsx"],"names":[],"mappings":"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"}
@@ -1,8 +1,14 @@
1
+ export * from './AuthScreenPreview';
1
2
  export * from './apps/index';
3
+ export * from './BrandedAuthScreens';
2
4
  export * from './login/InviteAcceptModal';
5
+ export * from './login/SignInFlow';
6
+ export * from './login/SignInPageShell';
3
7
  export * from './login/SigninScreen';
8
+ export * from './login/signInUtils';
4
9
  export * from './login/TerminalLogin';
5
10
  export * from './login/UserSessionMenu';
11
+ export type { AuthLoadingScreenProps } from './SplashScreen';
6
12
  export * from './utils';
7
13
  export * from './VertesiaShell';
8
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shell/index.tsx"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shell/index.tsx"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,YAAY,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC7D,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC"}
@@ -1,6 +1,11 @@
1
+ export * from './AuthScreenPreview';
1
2
  export * from './apps/index';
3
+ export * from './BrandedAuthScreens';
2
4
  export * from './login/InviteAcceptModal';
5
+ export * from './login/SignInFlow';
6
+ export * from './login/SignInPageShell';
3
7
  export * from './login/SigninScreen';
8
+ export * from './login/signInUtils';
4
9
  export * from './login/TerminalLogin';
5
10
  export * from './login/UserSessionMenu';
6
11
  export * from './utils';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shell/index.tsx"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shell/index.tsx"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AAExC,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,68 @@
1
+ import { type TenantInfo } from './SignInEmailStep';
2
+ import { type LastSuccessfulLogin, type ProviderId } from './signInUtils';
3
+ /** The modes every host shares. Hosts may add their own; see the `M` parameter below. */
4
+ export type SignInCoreMode = 'email' | 'providers' | 'tenant' | 'returning' | 'pending';
5
+ export interface SignInFlowOptions {
6
+ /**
7
+ * Host sign-out, run when the user abandons the remembered identity. Defaults to a plain
8
+ * Firebase sign-out; a host with a Vertesia session passes its own so the session goes too.
9
+ */
10
+ signOut?: () => void | Promise<void>;
11
+ /** Analytics sink. Only `enterprise_signin` is emitted, and only for a tenant-resolved sign-in. */
12
+ trackEvent?: (eventName: string, eventProperties?: Record<string, unknown>) => void;
13
+ /**
14
+ * The authenticated user, once there is one. Supplying it lets the flow stamp the display name
15
+ * onto the remembered-login record; a host that unmounts the flow on login should call
16
+ * {@link finalizeSuccessfulLogin} itself instead.
17
+ */
18
+ user?: {
19
+ name?: string | null;
20
+ } | null;
21
+ }
22
+ /**
23
+ * Flow state plus the handlers the steps are wired to.
24
+ *
25
+ * `M` is the host's own extra modes: `SigninScreen` passes its error-recovery union so `mode` and
26
+ * `setMode` stay exhaustively typed there, while a host with no extra modes gets `SignInCoreMode`.
27
+ */
28
+ export interface SignInFlowController<M extends string = never> {
29
+ mode: SignInCoreMode | M;
30
+ setMode: (mode: SignInCoreMode | M) => void;
31
+ email: string;
32
+ setEmail: (email: string) => void;
33
+ tenant: TenantInfo | undefined;
34
+ setTenant: (tenant: TenantInfo | undefined) => void;
35
+ storedSession: LastSuccessfulLogin | null;
36
+ setStoredSession: (session: LastSuccessfulLogin | null) => void;
37
+ pendingProvider: ProviderId | null;
38
+ /** Email accepted: go to the tenant step when one resolved, otherwise the provider list. */
39
+ onProceedFromEmail: (email: string, tenant?: TenantInfo) => void;
40
+ /** Back to the email step, dropping the resolved tenant. */
41
+ onBack: () => void;
42
+ /** "Not you?" — forget the remembered identity and sign out. */
43
+ onNotYou: () => void;
44
+ /** A provider was picked; show the pending screen while the IdP redirect happens. */
45
+ onProviderClicked: (provider: ProviderId) => void;
46
+ /** Full reset: clear the persisted records and the Firebase session, back to the email step. */
47
+ startOver: () => void;
48
+ }
49
+ export declare function useSignInFlow<M extends string = never>(options?: SignInFlowOptions): SignInFlowController<M>;
50
+ /**
51
+ * The part of the controller the shared steps read.
52
+ *
53
+ * Deliberately excludes the setters: their parameter types mention the host's extra modes, and a
54
+ * contravariant position would stop `SignInFlowController<never>` from being passed here.
55
+ */
56
+ export type SignInStepsController = Omit<SignInFlowController<string>, 'setMode' | 'setEmail' | 'setTenant' | 'setStoredSession' | 'startOver'>;
57
+ interface SignInFlowStepsProps {
58
+ flow: SignInStepsController;
59
+ /** Path to return to after the IdP round-trip. Defaults to the current pathname. */
60
+ redirectTo?: string;
61
+ }
62
+ /**
63
+ * Renders the step for the current core mode. A host mode this doesn't know falls through to the
64
+ * email step, which is where the original screen sent an unrecognized state too.
65
+ */
66
+ export declare function SignInFlowSteps({ flow, redirectTo }: SignInFlowStepsProps): import("react").JSX.Element;
67
+ export {};
68
+ //# sourceMappingURL=SignInFlow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignInFlow.d.ts","sourceRoot":"","sources":["../../../src/shell/login/SignInFlow.tsx"],"names":[],"mappings":"AAcA,OAAwB,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIrE,OAAO,EAIH,KAAK,mBAAmB,EACxB,KAAK,UAAU,EAIlB,MAAM,eAAe,CAAC;AAEvB,yFAAyF;AACzF,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;AAExF,MAAM,WAAW,iBAAiB;IAC9B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,mGAAmG;IACnG,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACpF;;;;OAIG;IACH,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CAC1C;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK;IAC1D,IAAI,EAAE,cAAc,GAAG,CAAC,CAAC;IACzB,OAAO,EAAE,CAAC,IAAI,EAAE,cAAc,GAAG,CAAC,KAAK,IAAI,CAAC;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;IAC/B,SAAS,EAAE,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,KAAK,IAAI,CAAC;IACpD,aAAa,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC1C,gBAAgB,EAAE,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,KAAK,IAAI,CAAC;IAChE,eAAe,EAAE,UAAU,GAAG,IAAI,CAAC;IACnC,4FAA4F;IAC5F,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACjE,4DAA4D;IAC5D,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,gEAAgE;IAChE,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,qFAAqF;IACrF,iBAAiB,EAAE,CAAC,QAAQ,EAAE,UAAU,KAAK,IAAI,CAAC;IAClD,gGAAgG;IAChG,SAAS,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,EAAE,OAAO,GAAE,iBAAsB,GAAG,oBAAoB,CAAC,CAAC,CAAC,CA2EhH;AAED;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,IAAI,CACpC,oBAAoB,CAAC,MAAM,CAAC,EAC5B,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,kBAAkB,GAAG,WAAW,CAC1E,CAAC;AAEF,UAAU,oBAAoB;IAC1B,IAAI,EAAE,qBAAqB,CAAC;IAC5B,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,oBAAoB,+BAsCzE"}