@ydtb/tk-scope-app 0.14.7

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 (504) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +48 -0
  3. package/dist/src/auth/AuthStrategyGate.d.ts +27 -0
  4. package/dist/src/auth/AuthStrategyGate.d.ts.map +1 -0
  5. package/dist/src/auth/AuthStrategyGate.js +58 -0
  6. package/dist/src/auth/AuthStrategyGate.js.map +1 -0
  7. package/dist/src/auth/components/DefaultDeviceLogin.d.ts +7 -0
  8. package/dist/src/auth/components/DefaultDeviceLogin.d.ts.map +1 -0
  9. package/dist/src/auth/components/DefaultDeviceLogin.js +21 -0
  10. package/dist/src/auth/components/DefaultDeviceLogin.js.map +1 -0
  11. package/dist/src/auth/components/DefaultPinLogin.d.ts +8 -0
  12. package/dist/src/auth/components/DefaultPinLogin.d.ts.map +1 -0
  13. package/dist/src/auth/components/DefaultPinLogin.js +85 -0
  14. package/dist/src/auth/components/DefaultPinLogin.js.map +1 -0
  15. package/dist/src/auth/components/DefaultSessionLogin.d.ts +7 -0
  16. package/dist/src/auth/components/DefaultSessionLogin.d.ts.map +1 -0
  17. package/dist/src/auth/components/DefaultSessionLogin.js +21 -0
  18. package/dist/src/auth/components/DefaultSessionLogin.js.map +1 -0
  19. package/dist/src/auth/components/index.d.ts +12 -0
  20. package/dist/src/auth/components/index.d.ts.map +1 -0
  21. package/dist/src/auth/components/index.js +21 -0
  22. package/dist/src/auth/components/index.js.map +1 -0
  23. package/dist/src/auth/index.d.ts +8 -0
  24. package/dist/src/auth/index.d.ts.map +1 -0
  25. package/dist/src/auth/index.js +7 -0
  26. package/dist/src/auth/index.js.map +1 -0
  27. package/dist/src/auth/persistence/pin-storage.d.ts +19 -0
  28. package/dist/src/auth/persistence/pin-storage.d.ts.map +1 -0
  29. package/dist/src/auth/persistence/pin-storage.js +80 -0
  30. package/dist/src/auth/persistence/pin-storage.js.map +1 -0
  31. package/dist/src/auth/strategies/device.d.ts +16 -0
  32. package/dist/src/auth/strategies/device.d.ts.map +1 -0
  33. package/dist/src/auth/strategies/device.js +51 -0
  34. package/dist/src/auth/strategies/device.js.map +1 -0
  35. package/dist/src/auth/strategies/index.d.ts +13 -0
  36. package/dist/src/auth/strategies/index.d.ts.map +1 -0
  37. package/dist/src/auth/strategies/index.js +24 -0
  38. package/dist/src/auth/strategies/index.js.map +1 -0
  39. package/dist/src/auth/strategies/none.d.ts +9 -0
  40. package/dist/src/auth/strategies/none.d.ts.map +1 -0
  41. package/dist/src/auth/strategies/none.js +10 -0
  42. package/dist/src/auth/strategies/none.js.map +1 -0
  43. package/dist/src/auth/strategies/pin.d.ts +9 -0
  44. package/dist/src/auth/strategies/pin.d.ts.map +1 -0
  45. package/dist/src/auth/strategies/pin.js +48 -0
  46. package/dist/src/auth/strategies/pin.js.map +1 -0
  47. package/dist/src/auth/strategies/session.d.ts +9 -0
  48. package/dist/src/auth/strategies/session.d.ts.map +1 -0
  49. package/dist/src/auth/strategies/session.js +42 -0
  50. package/dist/src/auth/strategies/session.js.map +1 -0
  51. package/dist/src/auth/types.d.ts +2 -0
  52. package/dist/src/auth/types.d.ts.map +1 -0
  53. package/dist/src/auth/types.js +2 -0
  54. package/dist/src/auth/types.js.map +1 -0
  55. package/dist/src/client.d.ts +63 -0
  56. package/dist/src/client.d.ts.map +1 -0
  57. package/dist/src/client.js +81 -0
  58. package/dist/src/client.js.map +1 -0
  59. package/dist/src/components/BackendErrorGate.d.ts +10 -0
  60. package/dist/src/components/BackendErrorGate.d.ts.map +1 -0
  61. package/dist/src/components/BackendErrorGate.js +19 -0
  62. package/dist/src/components/BackendErrorGate.js.map +1 -0
  63. package/dist/src/components/ErrorBoundary.d.ts +17 -0
  64. package/dist/src/components/ErrorBoundary.d.ts.map +1 -0
  65. package/dist/src/components/ErrorBoundary.js +23 -0
  66. package/dist/src/components/ErrorBoundary.js.map +1 -0
  67. package/dist/src/components/NotificationPanel.d.ts +9 -0
  68. package/dist/src/components/NotificationPanel.d.ts.map +1 -0
  69. package/dist/src/components/NotificationPanel.js +146 -0
  70. package/dist/src/components/NotificationPanel.js.map +1 -0
  71. package/dist/src/components/scope/ChildScopeDetailPage.d.ts +8 -0
  72. package/dist/src/components/scope/ChildScopeDetailPage.d.ts.map +1 -0
  73. package/dist/src/components/scope/ChildScopeDetailPage.js +79 -0
  74. package/dist/src/components/scope/ChildScopeDetailPage.js.map +1 -0
  75. package/dist/src/components/scope/ChildScopeListPage.d.ts +6 -0
  76. package/dist/src/components/scope/ChildScopeListPage.d.ts.map +1 -0
  77. package/dist/src/components/scope/ChildScopeListPage.js +111 -0
  78. package/dist/src/components/scope/ChildScopeListPage.js.map +1 -0
  79. package/dist/src/components/scope/CreateChildScopeButton.d.ts +14 -0
  80. package/dist/src/components/scope/CreateChildScopeButton.d.ts.map +1 -0
  81. package/dist/src/components/scope/CreateChildScopeButton.js +18 -0
  82. package/dist/src/components/scope/CreateChildScopeButton.js.map +1 -0
  83. package/dist/src/components/scope/CreateScopeDialog.d.ts +9 -0
  84. package/dist/src/components/scope/CreateScopeDialog.d.ts.map +1 -0
  85. package/dist/src/components/scope/CreateScopeDialog.js +137 -0
  86. package/dist/src/components/scope/CreateScopeDialog.js.map +1 -0
  87. package/dist/src/components/scope/JoinScopeDialog.d.ts +8 -0
  88. package/dist/src/components/scope/JoinScopeDialog.d.ts.map +1 -0
  89. package/dist/src/components/scope/JoinScopeDialog.js +115 -0
  90. package/dist/src/components/scope/JoinScopeDialog.js.map +1 -0
  91. package/dist/src/components/scope/ProfileScopeSection.d.ts +11 -0
  92. package/dist/src/components/scope/ProfileScopeSection.d.ts.map +1 -0
  93. package/dist/src/components/scope/ProfileScopeSection.js +63 -0
  94. package/dist/src/components/scope/ProfileScopeSection.js.map +1 -0
  95. package/dist/src/components/scope/ScopeSwitcher.d.ts +14 -0
  96. package/dist/src/components/scope/ScopeSwitcher.d.ts.map +1 -0
  97. package/dist/src/components/scope/ScopeSwitcher.js +131 -0
  98. package/dist/src/components/scope/ScopeSwitcher.js.map +1 -0
  99. package/dist/src/components/scope/SwitchScopeDialog.d.ts +8 -0
  100. package/dist/src/components/scope/SwitchScopeDialog.d.ts.map +1 -0
  101. package/dist/src/components/scope/SwitchScopeDialog.js +60 -0
  102. package/dist/src/components/scope/SwitchScopeDialog.js.map +1 -0
  103. package/dist/src/components/scope/useChildScopePermissions.d.ts +7 -0
  104. package/dist/src/components/scope/useChildScopePermissions.d.ts.map +1 -0
  105. package/dist/src/components/scope/useChildScopePermissions.js +34 -0
  106. package/dist/src/components/scope/useChildScopePermissions.js.map +1 -0
  107. package/dist/src/contexts/auth/AuthContext.d.ts +13 -0
  108. package/dist/src/contexts/auth/AuthContext.d.ts.map +1 -0
  109. package/dist/src/contexts/auth/AuthContext.js +23 -0
  110. package/dist/src/contexts/auth/AuthContext.js.map +1 -0
  111. package/dist/src/contexts/backend/BackendStatusContext.d.ts +21 -0
  112. package/dist/src/contexts/backend/BackendStatusContext.d.ts.map +1 -0
  113. package/dist/src/contexts/backend/BackendStatusContext.js +36 -0
  114. package/dist/src/contexts/backend/BackendStatusContext.js.map +1 -0
  115. package/dist/src/contexts/command/CommandContext.d.ts +30 -0
  116. package/dist/src/contexts/command/CommandContext.d.ts.map +1 -0
  117. package/dist/src/contexts/command/CommandContext.js +75 -0
  118. package/dist/src/contexts/command/CommandContext.js.map +1 -0
  119. package/dist/src/contexts/command/PanelSlotsContext.d.ts +2 -0
  120. package/dist/src/contexts/command/PanelSlotsContext.d.ts.map +1 -0
  121. package/dist/src/contexts/command/PanelSlotsContext.js +2 -0
  122. package/dist/src/contexts/command/PanelSlotsContext.js.map +1 -0
  123. package/dist/src/contexts/command/PanelStackContext.d.ts +2 -0
  124. package/dist/src/contexts/command/PanelStackContext.d.ts.map +1 -0
  125. package/dist/src/contexts/command/PanelStackContext.js +2 -0
  126. package/dist/src/contexts/command/PanelStackContext.js.map +1 -0
  127. package/dist/src/contexts/command/SearchPanelContext.d.ts +55 -0
  128. package/dist/src/contexts/command/SearchPanelContext.d.ts.map +1 -0
  129. package/dist/src/contexts/command/SearchPanelContext.js +327 -0
  130. package/dist/src/contexts/command/SearchPanelContext.js.map +1 -0
  131. package/dist/src/contexts/config/AppConfigContext.d.ts +8 -0
  132. package/dist/src/contexts/config/AppConfigContext.d.ts.map +1 -0
  133. package/dist/src/contexts/config/AppConfigContext.js +21 -0
  134. package/dist/src/contexts/config/AppConfigContext.js.map +1 -0
  135. package/dist/src/contexts/help/HelpContext.d.ts +30 -0
  136. package/dist/src/contexts/help/HelpContext.d.ts.map +1 -0
  137. package/dist/src/contexts/help/HelpContext.js +73 -0
  138. package/dist/src/contexts/help/HelpContext.js.map +1 -0
  139. package/dist/src/contexts/index.d.ts +10 -0
  140. package/dist/src/contexts/index.d.ts.map +1 -0
  141. package/dist/src/contexts/index.js +10 -0
  142. package/dist/src/contexts/index.js.map +1 -0
  143. package/dist/src/contexts/navigation/NavigationContext.d.ts +23 -0
  144. package/dist/src/contexts/navigation/NavigationContext.d.ts.map +1 -0
  145. package/dist/src/contexts/navigation/NavigationContext.js +294 -0
  146. package/dist/src/contexts/navigation/NavigationContext.js.map +1 -0
  147. package/dist/src/contexts/navigation/NavigationRegistryContext.d.ts +9 -0
  148. package/dist/src/contexts/navigation/NavigationRegistryContext.d.ts.map +1 -0
  149. package/dist/src/contexts/navigation/NavigationRegistryContext.js +17 -0
  150. package/dist/src/contexts/navigation/NavigationRegistryContext.js.map +1 -0
  151. package/dist/src/contexts/scope/ScopeContext.d.ts +40 -0
  152. package/dist/src/contexts/scope/ScopeContext.d.ts.map +1 -0
  153. package/dist/src/contexts/scope/ScopeContext.js +141 -0
  154. package/dist/src/contexts/scope/ScopeContext.js.map +1 -0
  155. package/dist/src/contexts/scope/index.d.ts +3 -0
  156. package/dist/src/contexts/scope/index.d.ts.map +1 -0
  157. package/dist/src/contexts/scope/index.js +3 -0
  158. package/dist/src/contexts/scope/index.js.map +1 -0
  159. package/dist/src/contexts/scope/scopeRef.d.ts +10 -0
  160. package/dist/src/contexts/scope/scopeRef.d.ts.map +1 -0
  161. package/dist/src/contexts/scope/scopeRef.js +10 -0
  162. package/dist/src/contexts/scope/scopeRef.js.map +1 -0
  163. package/dist/src/contexts/sidebar/use-sidebar.d.ts +2 -0
  164. package/dist/src/contexts/sidebar/use-sidebar.d.ts.map +1 -0
  165. package/dist/src/contexts/sidebar/use-sidebar.js +2 -0
  166. package/dist/src/contexts/sidebar/use-sidebar.js.map +1 -0
  167. package/dist/src/contexts/theme/ThemeContext.d.ts +21 -0
  168. package/dist/src/contexts/theme/ThemeContext.d.ts.map +1 -0
  169. package/dist/src/contexts/theme/ThemeContext.js +79 -0
  170. package/dist/src/contexts/theme/ThemeContext.js.map +1 -0
  171. package/dist/src/create-app.d.ts +47 -0
  172. package/dist/src/create-app.d.ts.map +1 -0
  173. package/dist/src/create-app.js +242 -0
  174. package/dist/src/create-app.js.map +1 -0
  175. package/dist/src/dashboard/command/CommandDialog.d.ts +2 -0
  176. package/dist/src/dashboard/command/CommandDialog.d.ts.map +1 -0
  177. package/dist/src/dashboard/command/CommandDialog.js +18 -0
  178. package/dist/src/dashboard/command/CommandDialog.js.map +1 -0
  179. package/dist/src/dashboard/command/SearchPanelBody.d.ts +2 -0
  180. package/dist/src/dashboard/command/SearchPanelBody.d.ts.map +1 -0
  181. package/dist/src/dashboard/command/SearchPanelBody.js +178 -0
  182. package/dist/src/dashboard/command/SearchPanelBody.js.map +1 -0
  183. package/dist/src/dashboard/command/SearchPanelHeader.d.ts +2 -0
  184. package/dist/src/dashboard/command/SearchPanelHeader.d.ts.map +1 -0
  185. package/dist/src/dashboard/command/SearchPanelHeader.js +13 -0
  186. package/dist/src/dashboard/command/SearchPanelHeader.js.map +1 -0
  187. package/dist/src/dashboard/command/panels/GeneralPanel.d.ts +9 -0
  188. package/dist/src/dashboard/command/panels/GeneralPanel.d.ts.map +1 -0
  189. package/dist/src/dashboard/command/panels/GeneralPanel.js +12 -0
  190. package/dist/src/dashboard/command/panels/GeneralPanel.js.map +1 -0
  191. package/dist/src/dashboard/command/panels/NavigationPanel.d.ts +2 -0
  192. package/dist/src/dashboard/command/panels/NavigationPanel.d.ts.map +1 -0
  193. package/dist/src/dashboard/command/panels/NavigationPanel.js +74 -0
  194. package/dist/src/dashboard/command/panels/NavigationPanel.js.map +1 -0
  195. package/dist/src/dashboard/command/panels/PlaceholderPanel.d.ts +9 -0
  196. package/dist/src/dashboard/command/panels/PlaceholderPanel.d.ts.map +1 -0
  197. package/dist/src/dashboard/command/panels/PlaceholderPanel.js +12 -0
  198. package/dist/src/dashboard/command/panels/PlaceholderPanel.js.map +1 -0
  199. package/dist/src/dashboard/command/panels/ProfilePanel.d.ts +2 -0
  200. package/dist/src/dashboard/command/panels/ProfilePanel.d.ts.map +1 -0
  201. package/dist/src/dashboard/command/panels/ProfilePanel.js +133 -0
  202. package/dist/src/dashboard/command/panels/ProfilePanel.js.map +1 -0
  203. package/dist/src/dashboard/command/panels/SecurityPanel.d.ts +2 -0
  204. package/dist/src/dashboard/command/panels/SecurityPanel.d.ts.map +1 -0
  205. package/dist/src/dashboard/command/panels/SecurityPanel.js +237 -0
  206. package/dist/src/dashboard/command/panels/SecurityPanel.js.map +1 -0
  207. package/dist/src/dashboard/command/panels/ThemePanel.d.ts +2 -0
  208. package/dist/src/dashboard/command/panels/ThemePanel.d.ts.map +1 -0
  209. package/dist/src/dashboard/command/panels/ThemePanel.js +11 -0
  210. package/dist/src/dashboard/command/panels/ThemePanel.js.map +1 -0
  211. package/dist/src/dashboard/headers/MainHeader.d.ts +16 -0
  212. package/dist/src/dashboard/headers/MainHeader.d.ts.map +1 -0
  213. package/dist/src/dashboard/headers/MainHeader.js +16 -0
  214. package/dist/src/dashboard/headers/MainHeader.js.map +1 -0
  215. package/dist/src/dashboard/headers/MainHeaderDesktop.d.ts +4 -0
  216. package/dist/src/dashboard/headers/MainHeaderDesktop.d.ts.map +1 -0
  217. package/dist/src/dashboard/headers/MainHeaderDesktop.js +120 -0
  218. package/dist/src/dashboard/headers/MainHeaderDesktop.js.map +1 -0
  219. package/dist/src/dashboard/headers/MainHeaderMobile.d.ts +4 -0
  220. package/dist/src/dashboard/headers/MainHeaderMobile.d.ts.map +1 -0
  221. package/dist/src/dashboard/headers/MainHeaderMobile.js +14 -0
  222. package/dist/src/dashboard/headers/MainHeaderMobile.js.map +1 -0
  223. package/dist/src/dashboard/headers/NotificationsPopover.d.ts +2 -0
  224. package/dist/src/dashboard/headers/NotificationsPopover.d.ts.map +1 -0
  225. package/dist/src/dashboard/headers/NotificationsPopover.js +14 -0
  226. package/dist/src/dashboard/headers/NotificationsPopover.js.map +1 -0
  227. package/dist/src/dashboard/headers/ProfilePopover.d.ts +2 -0
  228. package/dist/src/dashboard/headers/ProfilePopover.d.ts.map +1 -0
  229. package/dist/src/dashboard/headers/ProfilePopover.js +83 -0
  230. package/dist/src/dashboard/headers/ProfilePopover.js.map +1 -0
  231. package/dist/src/dashboard/headers/ToolHeader.d.ts +2 -0
  232. package/dist/src/dashboard/headers/ToolHeader.d.ts.map +1 -0
  233. package/dist/src/dashboard/headers/ToolHeader.js +16 -0
  234. package/dist/src/dashboard/headers/ToolHeader.js.map +1 -0
  235. package/dist/src/dashboard/help/HelpPanel.d.ts +3 -0
  236. package/dist/src/dashboard/help/HelpPanel.d.ts.map +1 -0
  237. package/dist/src/dashboard/help/HelpPanel.js +451 -0
  238. package/dist/src/dashboard/help/HelpPanel.js.map +1 -0
  239. package/dist/src/dashboard/index.d.ts +16 -0
  240. package/dist/src/dashboard/index.d.ts.map +1 -0
  241. package/dist/src/dashboard/index.js +16 -0
  242. package/dist/src/dashboard/index.js.map +1 -0
  243. package/dist/src/dashboard/layout/DashboardLayout.d.ts +23 -0
  244. package/dist/src/dashboard/layout/DashboardLayout.d.ts.map +1 -0
  245. package/dist/src/dashboard/layout/DashboardLayout.js +15 -0
  246. package/dist/src/dashboard/layout/DashboardLayout.js.map +1 -0
  247. package/dist/src/dashboard/layout/DashboardSidebarContent.d.ts +2 -0
  248. package/dist/src/dashboard/layout/DashboardSidebarContent.d.ts.map +1 -0
  249. package/dist/src/dashboard/layout/DashboardSidebarContent.js +33 -0
  250. package/dist/src/dashboard/layout/DashboardSidebarContent.js.map +1 -0
  251. package/dist/src/dashboard/layout/SidebarDrawer.d.ts +2 -0
  252. package/dist/src/dashboard/layout/SidebarDrawer.d.ts.map +1 -0
  253. package/dist/src/dashboard/layout/SidebarDrawer.js +33 -0
  254. package/dist/src/dashboard/layout/SidebarDrawer.js.map +1 -0
  255. package/dist/src/dashboard/layout/ToolSidebar.d.ts +9 -0
  256. package/dist/src/dashboard/layout/ToolSidebar.d.ts.map +1 -0
  257. package/dist/src/dashboard/layout/ToolSidebar.js +11 -0
  258. package/dist/src/dashboard/layout/ToolSidebar.js.map +1 -0
  259. package/dist/src/dashboard/navigation/IconRail.d.ts +11 -0
  260. package/dist/src/dashboard/navigation/IconRail.d.ts.map +1 -0
  261. package/dist/src/dashboard/navigation/IconRail.js +47 -0
  262. package/dist/src/dashboard/navigation/IconRail.js.map +1 -0
  263. package/dist/src/dashboard/navigation/MoreToolsPopover.d.ts +2 -0
  264. package/dist/src/dashboard/navigation/MoreToolsPopover.d.ts.map +1 -0
  265. package/dist/src/dashboard/navigation/MoreToolsPopover.js +22 -0
  266. package/dist/src/dashboard/navigation/MoreToolsPopover.js.map +1 -0
  267. package/dist/src/dashboard/navigation/icon-rail.d.ts +8 -0
  268. package/dist/src/dashboard/navigation/icon-rail.d.ts.map +1 -0
  269. package/dist/src/dashboard/navigation/icon-rail.js +36 -0
  270. package/dist/src/dashboard/navigation/icon-rail.js.map +1 -0
  271. package/dist/src/dashboard/navigation/use-active-tool.d.ts +2 -0
  272. package/dist/src/dashboard/navigation/use-active-tool.d.ts.map +1 -0
  273. package/dist/src/dashboard/navigation/use-active-tool.js +41 -0
  274. package/dist/src/dashboard/navigation/use-active-tool.js.map +1 -0
  275. package/dist/src/dashboard/settings/ThemeSettings.d.ts +2 -0
  276. package/dist/src/dashboard/settings/ThemeSettings.d.ts.map +1 -0
  277. package/dist/src/dashboard/settings/ThemeSettings.js +49 -0
  278. package/dist/src/dashboard/settings/ThemeSettings.js.map +1 -0
  279. package/dist/src/guards/SetupGate.d.ts +9 -0
  280. package/dist/src/guards/SetupGate.d.ts.map +1 -0
  281. package/dist/src/guards/SetupGate.js +30 -0
  282. package/dist/src/guards/SetupGate.js.map +1 -0
  283. package/dist/src/guards/UnifiedGuard.d.ts +32 -0
  284. package/dist/src/guards/UnifiedGuard.d.ts.map +1 -0
  285. package/dist/src/guards/UnifiedGuard.js +258 -0
  286. package/dist/src/guards/UnifiedGuard.js.map +1 -0
  287. package/dist/src/guards/index.d.ts +3 -0
  288. package/dist/src/guards/index.d.ts.map +1 -0
  289. package/dist/src/guards/index.js +3 -0
  290. package/dist/src/guards/index.js.map +1 -0
  291. package/dist/src/hooks/index.d.ts +9 -0
  292. package/dist/src/hooks/index.d.ts.map +1 -0
  293. package/dist/src/hooks/index.js +9 -0
  294. package/dist/src/hooks/index.js.map +1 -0
  295. package/dist/src/hooks/useCheckAccess.d.ts +16 -0
  296. package/dist/src/hooks/useCheckAccess.d.ts.map +1 -0
  297. package/dist/src/hooks/useCheckAccess.js +25 -0
  298. package/dist/src/hooks/useCheckAccess.js.map +1 -0
  299. package/dist/src/hooks/useCreateScope.d.ts +42 -0
  300. package/dist/src/hooks/useCreateScope.d.ts.map +1 -0
  301. package/dist/src/hooks/useCreateScope.js +28 -0
  302. package/dist/src/hooks/useCreateScope.js.map +1 -0
  303. package/dist/src/hooks/useInvitations.d.ts +82 -0
  304. package/dist/src/hooks/useInvitations.d.ts.map +1 -0
  305. package/dist/src/hooks/useInvitations.js +39 -0
  306. package/dist/src/hooks/useInvitations.js.map +1 -0
  307. package/dist/src/hooks/useJoinCode.d.ts +52 -0
  308. package/dist/src/hooks/useJoinCode.d.ts.map +1 -0
  309. package/dist/src/hooks/useJoinCode.js +37 -0
  310. package/dist/src/hooks/useJoinCode.js.map +1 -0
  311. package/dist/src/hooks/usePreference.d.ts +20 -0
  312. package/dist/src/hooks/usePreference.d.ts.map +1 -0
  313. package/dist/src/hooks/usePreference.js +132 -0
  314. package/dist/src/hooks/usePreference.js.map +1 -0
  315. package/dist/src/hooks/useScopeList.d.ts +32 -0
  316. package/dist/src/hooks/useScopeList.d.ts.map +1 -0
  317. package/dist/src/hooks/useScopeList.js +24 -0
  318. package/dist/src/hooks/useScopeList.js.map +1 -0
  319. package/dist/src/hooks/useScopeMenuPolicy.d.ts +23 -0
  320. package/dist/src/hooks/useScopeMenuPolicy.d.ts.map +1 -0
  321. package/dist/src/hooks/useScopeMenuPolicy.js +59 -0
  322. package/dist/src/hooks/useScopeMenuPolicy.js.map +1 -0
  323. package/dist/src/hooks/useScopePermissions.d.ts +9 -0
  324. package/dist/src/hooks/useScopePermissions.d.ts.map +1 -0
  325. package/dist/src/hooks/useScopePermissions.js +84 -0
  326. package/dist/src/hooks/useScopePermissions.js.map +1 -0
  327. package/dist/src/lib/api-client.d.ts +27 -0
  328. package/dist/src/lib/api-client.d.ts.map +1 -0
  329. package/dist/src/lib/api-client.js +45 -0
  330. package/dist/src/lib/api-client.js.map +1 -0
  331. package/dist/src/lib/backend-status.d.ts +14 -0
  332. package/dist/src/lib/backend-status.d.ts.map +1 -0
  333. package/dist/src/lib/backend-status.js +27 -0
  334. package/dist/src/lib/backend-status.js.map +1 -0
  335. package/dist/src/lib/config.d.ts +71 -0
  336. package/dist/src/lib/config.d.ts.map +1 -0
  337. package/dist/src/lib/config.js +7 -0
  338. package/dist/src/lib/config.js.map +1 -0
  339. package/dist/src/lib/icon-resolver.d.ts +2 -0
  340. package/dist/src/lib/icon-resolver.d.ts.map +1 -0
  341. package/dist/src/lib/icon-resolver.js +2 -0
  342. package/dist/src/lib/icon-resolver.js.map +1 -0
  343. package/dist/src/lib/index.d.ts +13 -0
  344. package/dist/src/lib/index.d.ts.map +1 -0
  345. package/dist/src/lib/index.js +13 -0
  346. package/dist/src/lib/index.js.map +1 -0
  347. package/dist/src/lib/navigation-tools.d.ts +27 -0
  348. package/dist/src/lib/navigation-tools.d.ts.map +1 -0
  349. package/dist/src/lib/navigation-tools.js +49 -0
  350. package/dist/src/lib/navigation-tools.js.map +1 -0
  351. package/dist/src/lib/onboarding-registry.d.ts +14 -0
  352. package/dist/src/lib/onboarding-registry.d.ts.map +1 -0
  353. package/dist/src/lib/onboarding-registry.js +12 -0
  354. package/dist/src/lib/onboarding-registry.js.map +1 -0
  355. package/dist/src/lib/permissions-store.d.ts +12 -0
  356. package/dist/src/lib/permissions-store.d.ts.map +1 -0
  357. package/dist/src/lib/permissions-store.js +12 -0
  358. package/dist/src/lib/permissions-store.js.map +1 -0
  359. package/dist/src/lib/platform-api.d.ts +3527 -0
  360. package/dist/src/lib/platform-api.d.ts.map +1 -0
  361. package/dist/src/lib/platform-api.js +26 -0
  362. package/dist/src/lib/platform-api.js.map +1 -0
  363. package/dist/src/lib/resolve-redirect.d.ts +36 -0
  364. package/dist/src/lib/resolve-redirect.d.ts.map +1 -0
  365. package/dist/src/lib/resolve-redirect.js +91 -0
  366. package/dist/src/lib/resolve-redirect.js.map +1 -0
  367. package/dist/src/lib/scope-menu-policy.d.ts +13 -0
  368. package/dist/src/lib/scope-menu-policy.d.ts.map +1 -0
  369. package/dist/src/lib/scope-menu-policy.js +15 -0
  370. package/dist/src/lib/scope-menu-policy.js.map +1 -0
  371. package/dist/src/lib/scope-query-keys.d.ts +38 -0
  372. package/dist/src/lib/scope-query-keys.d.ts.map +1 -0
  373. package/dist/src/lib/scope-query-keys.js +35 -0
  374. package/dist/src/lib/scope-query-keys.js.map +1 -0
  375. package/dist/src/lib/scopeLink.d.ts +24 -0
  376. package/dist/src/lib/scopeLink.d.ts.map +1 -0
  377. package/dist/src/lib/scopeLink.js +57 -0
  378. package/dist/src/lib/scopeLink.js.map +1 -0
  379. package/dist/src/lib/tool-api-types.d.ts +40 -0
  380. package/dist/src/lib/tool-api-types.d.ts.map +1 -0
  381. package/dist/src/lib/tool-api-types.js +23 -0
  382. package/dist/src/lib/tool-api-types.js.map +1 -0
  383. package/dist/src/lib/types.d.ts +122 -0
  384. package/dist/src/lib/types.d.ts.map +1 -0
  385. package/dist/src/lib/types.js +47 -0
  386. package/dist/src/lib/types.js.map +1 -0
  387. package/dist/src/lib/withDashboardChrome.d.ts +18 -0
  388. package/dist/src/lib/withDashboardChrome.d.ts.map +1 -0
  389. package/dist/src/lib/withDashboardChrome.js +46 -0
  390. package/dist/src/lib/withDashboardChrome.js.map +1 -0
  391. package/dist/src/onboarding/CreateScopeWizardStep.d.ts +14 -0
  392. package/dist/src/onboarding/CreateScopeWizardStep.d.ts.map +1 -0
  393. package/dist/src/onboarding/CreateScopeWizardStep.js +109 -0
  394. package/dist/src/onboarding/CreateScopeWizardStep.js.map +1 -0
  395. package/dist/src/onboarding/ResolveStep.d.ts +17 -0
  396. package/dist/src/onboarding/ResolveStep.d.ts.map +1 -0
  397. package/dist/src/onboarding/ResolveStep.js +101 -0
  398. package/dist/src/onboarding/ResolveStep.js.map +1 -0
  399. package/dist/src/onboarding/StepProps.d.ts +10 -0
  400. package/dist/src/onboarding/StepProps.d.ts.map +1 -0
  401. package/dist/src/onboarding/StepProps.js +2 -0
  402. package/dist/src/onboarding/StepProps.js.map +1 -0
  403. package/dist/src/onboarding/WizardContext.d.ts +20 -0
  404. package/dist/src/onboarding/WizardContext.d.ts.map +1 -0
  405. package/dist/src/onboarding/WizardContext.js +17 -0
  406. package/dist/src/onboarding/WizardContext.js.map +1 -0
  407. package/dist/src/onboarding/WizardPage.d.ts +18 -0
  408. package/dist/src/onboarding/WizardPage.d.ts.map +1 -0
  409. package/dist/src/onboarding/WizardPage.js +9 -0
  410. package/dist/src/onboarding/WizardPage.js.map +1 -0
  411. package/dist/src/onboarding/WizardShell.d.ts +43 -0
  412. package/dist/src/onboarding/WizardShell.d.ts.map +1 -0
  413. package/dist/src/onboarding/WizardShell.js +162 -0
  414. package/dist/src/onboarding/WizardShell.js.map +1 -0
  415. package/dist/src/onboarding/index.d.ts +11 -0
  416. package/dist/src/onboarding/index.d.ts.map +1 -0
  417. package/dist/src/onboarding/index.js +8 -0
  418. package/dist/src/onboarding/index.js.map +1 -0
  419. package/dist/src/onboarding/sortSteps.d.ts +15 -0
  420. package/dist/src/onboarding/sortSteps.d.ts.map +1 -0
  421. package/dist/src/onboarding/sortSteps.js +93 -0
  422. package/dist/src/onboarding/sortSteps.js.map +1 -0
  423. package/dist/src/onboarding/steps/AddPasskeyStep.d.ts +3 -0
  424. package/dist/src/onboarding/steps/AddPasskeyStep.d.ts.map +1 -0
  425. package/dist/src/onboarding/steps/AddPasskeyStep.js +54 -0
  426. package/dist/src/onboarding/steps/AddPasskeyStep.js.map +1 -0
  427. package/dist/src/onboarding/steps/SetupWizardPage.d.ts +2 -0
  428. package/dist/src/onboarding/steps/SetupWizardPage.d.ts.map +1 -0
  429. package/dist/src/onboarding/steps/SetupWizardPage.js +93 -0
  430. package/dist/src/onboarding/steps/SetupWizardPage.js.map +1 -0
  431. package/dist/src/onboarding/steps/setup-steps.d.ts +6 -0
  432. package/dist/src/onboarding/steps/setup-steps.d.ts.map +1 -0
  433. package/dist/src/onboarding/steps/setup-steps.js +75 -0
  434. package/dist/src/onboarding/steps/setup-steps.js.map +1 -0
  435. package/dist/src/pages/AcceptInvitePage.d.ts +2 -0
  436. package/dist/src/pages/AcceptInvitePage.d.ts.map +1 -0
  437. package/dist/src/pages/AcceptInvitePage.js +103 -0
  438. package/dist/src/pages/AcceptInvitePage.js.map +1 -0
  439. package/dist/src/pages/BackendErrorPage.d.ts +6 -0
  440. package/dist/src/pages/BackendErrorPage.d.ts.map +1 -0
  441. package/dist/src/pages/BackendErrorPage.js +6 -0
  442. package/dist/src/pages/BackendErrorPage.js.map +1 -0
  443. package/dist/src/pages/ContextSelectionPage.d.ts +2 -0
  444. package/dist/src/pages/ContextSelectionPage.d.ts.map +1 -0
  445. package/dist/src/pages/ContextSelectionPage.js +166 -0
  446. package/dist/src/pages/ContextSelectionPage.js.map +1 -0
  447. package/dist/src/pages/DefaultCreateScopePage.d.ts +17 -0
  448. package/dist/src/pages/DefaultCreateScopePage.d.ts.map +1 -0
  449. package/dist/src/pages/DefaultCreateScopePage.js +50 -0
  450. package/dist/src/pages/DefaultCreateScopePage.js.map +1 -0
  451. package/dist/src/pages/ForgotPasswordPage.d.ts +2 -0
  452. package/dist/src/pages/ForgotPasswordPage.d.ts.map +1 -0
  453. package/dist/src/pages/ForgotPasswordPage.js +44 -0
  454. package/dist/src/pages/ForgotPasswordPage.js.map +1 -0
  455. package/dist/src/pages/GetStartedPage.d.ts +6 -0
  456. package/dist/src/pages/GetStartedPage.d.ts.map +1 -0
  457. package/dist/src/pages/GetStartedPage.js +49 -0
  458. package/dist/src/pages/GetStartedPage.js.map +1 -0
  459. package/dist/src/pages/InviteErrorPage.d.ts +2 -0
  460. package/dist/src/pages/InviteErrorPage.d.ts.map +1 -0
  461. package/dist/src/pages/InviteErrorPage.js +42 -0
  462. package/dist/src/pages/InviteErrorPage.js.map +1 -0
  463. package/dist/src/pages/LoginPage.d.ts +2 -0
  464. package/dist/src/pages/LoginPage.d.ts.map +1 -0
  465. package/dist/src/pages/LoginPage.js +63 -0
  466. package/dist/src/pages/LoginPage.js.map +1 -0
  467. package/dist/src/pages/NoAccessPage.d.ts +2 -0
  468. package/dist/src/pages/NoAccessPage.d.ts.map +1 -0
  469. package/dist/src/pages/NoAccessPage.js +35 -0
  470. package/dist/src/pages/NoAccessPage.js.map +1 -0
  471. package/dist/src/pages/NotFoundPage.d.ts +2 -0
  472. package/dist/src/pages/NotFoundPage.d.ts.map +1 -0
  473. package/dist/src/pages/NotFoundPage.js +8 -0
  474. package/dist/src/pages/NotFoundPage.js.map +1 -0
  475. package/dist/src/pages/PostLoginResolver.d.ts +9 -0
  476. package/dist/src/pages/PostLoginResolver.d.ts.map +1 -0
  477. package/dist/src/pages/PostLoginResolver.js +50 -0
  478. package/dist/src/pages/PostLoginResolver.js.map +1 -0
  479. package/dist/src/pages/ProfilePage.d.ts +2 -0
  480. package/dist/src/pages/ProfilePage.d.ts.map +1 -0
  481. package/dist/src/pages/ProfilePage.js +353 -0
  482. package/dist/src/pages/ProfilePage.js.map +1 -0
  483. package/dist/src/pages/ResetPasswordPage.d.ts +2 -0
  484. package/dist/src/pages/ResetPasswordPage.d.ts.map +1 -0
  485. package/dist/src/pages/ResetPasswordPage.js +55 -0
  486. package/dist/src/pages/ResetPasswordPage.js.map +1 -0
  487. package/dist/src/pages/SignupPage.d.ts +2 -0
  488. package/dist/src/pages/SignupPage.d.ts.map +1 -0
  489. package/dist/src/pages/SignupPage.js +54 -0
  490. package/dist/src/pages/SignupPage.js.map +1 -0
  491. package/dist/src/pages/index.d.ts +15 -0
  492. package/dist/src/pages/index.d.ts.map +1 -0
  493. package/dist/src/pages/index.js +15 -0
  494. package/dist/src/pages/index.js.map +1 -0
  495. package/dist/src/platform-surface.d.ts +26 -0
  496. package/dist/src/platform-surface.d.ts.map +1 -0
  497. package/dist/src/platform-surface.js +302 -0
  498. package/dist/src/platform-surface.js.map +1 -0
  499. package/dist/testing/index.d.ts +2 -0
  500. package/dist/testing/index.d.ts.map +1 -0
  501. package/dist/testing/index.js +2 -0
  502. package/dist/testing/index.js.map +1 -0
  503. package/dist/tsconfig.tsbuildinfo +1 -0
  504. package/package.json +119 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcceptInvitePage.d.ts","sourceRoot":"","sources":["../../../src/pages/AcceptInvitePage.tsx"],"names":[],"mappings":"AAiCA,wBAAgB,gBAAgB,4CAuQ/B"}
@@ -0,0 +1,103 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { useParams, Link } from "@tanstack/react-router";
4
+ import { useAuth } from "../contexts/auth/AuthContext.js";
5
+ import { getInvitation, acceptInvitation, rejectInvitation } from "../hooks/useInvitations.js";
6
+ import { useQuery } from "@ydtb/tk-scope-query-client";
7
+ import { WizardPage } from "../onboarding/WizardPage.js";
8
+ import { AddPasskeyStep } from "../onboarding/steps/AddPasskeyStep.js";
9
+ import { Mail, UserPlus, Building2, Check, X, LogIn, Loader2, ArrowRight, ShieldCheck, } from "lucide-react";
10
+ function WizardShell({ children }) {
11
+ return (_jsx("div", { className: "flex min-h-screen items-center justify-center bg-background px-4", children: _jsx("div", { className: "w-full max-w-[420px] rounded-2xl border border-border bg-card p-8 shadow-sm", children: children }) }));
12
+ }
13
+ export function AcceptInvitePage() {
14
+ const { id } = useParams({ strict: false });
15
+ const { session, isPending: authPending } = useAuth();
16
+ const [error, setError] = useState(null);
17
+ const [accepting, setAccepting] = useState(false);
18
+ const [rejecting, setRejecting] = useState(false);
19
+ const [flowStep, setFlowStep] = useState("loading");
20
+ const [scopeName, setScopeName] = useState("");
21
+ // Fetch full invitation details once authenticated
22
+ const { data: invitation, isLoading: invitationLoading } = useQuery({
23
+ queryKey: ["invite-info", "detail", id],
24
+ queryFn: async () => {
25
+ try {
26
+ const data = await getInvitation(id);
27
+ setFlowStep("accept");
28
+ return data;
29
+ }
30
+ catch (err) {
31
+ setError(err instanceof Error ? err.message : "Invitation not found or has expired.");
32
+ setFlowStep("error");
33
+ return null;
34
+ }
35
+ },
36
+ enabled: !authPending && !!session,
37
+ });
38
+ // Determine current step
39
+ const loading = authPending || (!!session && invitationLoading);
40
+ const currentFlowStep = !session && !authPending ? "unauthenticated" : loading ? "loading" : flowStep;
41
+ const handleAccept = async () => {
42
+ if (!invitation)
43
+ return;
44
+ setAccepting(true);
45
+ setError(null);
46
+ try {
47
+ await acceptInvitation(invitation.id);
48
+ }
49
+ catch (err) {
50
+ setAccepting(false);
51
+ setError(err instanceof Error ? err.message : "Failed to accept invitation.");
52
+ return;
53
+ }
54
+ setAccepting(false);
55
+ setScopeName(invitation.scopeName);
56
+ setFlowStep("passkey");
57
+ };
58
+ const handleReject = async () => {
59
+ if (!invitation)
60
+ return;
61
+ setRejecting(true);
62
+ setError(null);
63
+ try {
64
+ await rejectInvitation(invitation.id);
65
+ setRejecting(false);
66
+ setFlowStep("rejected");
67
+ }
68
+ catch (err) {
69
+ setRejecting(false);
70
+ setError(err instanceof Error ? err.message : "Failed to decline invitation.");
71
+ }
72
+ };
73
+ // Total steps for the wizard progress dots: accept → passkey → done
74
+ const TOTAL_STEPS = 3;
75
+ const stepIndex = currentFlowStep === "accept" ? 0 : currentFlowStep === "passkey" ? 1 : 2;
76
+ // ── Loading ──────────────────────────────────────────────────
77
+ if (currentFlowStep === "loading") {
78
+ return (_jsx(WizardShell, { children: _jsx("div", { className: "flex items-center justify-center py-12", children: _jsx(Loader2, { className: "h-6 w-6 animate-spin text-muted-foreground" }) }) }));
79
+ }
80
+ // ── Not logged in (fallback) ─────────────────────────────────
81
+ if (currentFlowStep === "unauthenticated") {
82
+ return (_jsx(WizardShell, { children: _jsx(WizardPage, { icon: UserPlus, title: "You've been invited", subtitle: "Log in or create an account to accept this invitation.", children: _jsxs("div", { className: "flex flex-col gap-3", children: [_jsxs(Link, { to: "/login", search: { redirect: `/invite/${id}` }, className: "flex items-center justify-center gap-2 w-full h-12 rounded-xl bg-foreground text-background text-sm font-semibold shadow-md hover:opacity-90 transition-opacity", children: [_jsx(LogIn, { className: "h-4 w-4" }), "Log In"] }), _jsx(Link, { to: "/signup", search: { redirect: `/invite/${id}` }, className: "flex items-center justify-center gap-2 w-full h-12 rounded-xl border border-border bg-card text-sm font-medium text-foreground hover:bg-muted transition-colors", children: "Create Account" })] }) }) }));
83
+ }
84
+ // ── Passkey step ─────────────────────────────────────────────
85
+ if (currentFlowStep === "passkey") {
86
+ return (_jsx(WizardShell, { children: _jsx(AddPasskeyStep, { onNext: () => setFlowStep("done"), onBack: () => { }, stepIndex: stepIndex, totalSteps: TOTAL_STEPS }) }));
87
+ }
88
+ // ── Done ─────────────────────────────────────────────────────
89
+ if (currentFlowStep === "done") {
90
+ return (_jsx(WizardShell, { children: _jsx(WizardPage, { icon: Check, title: "You're in!", subtitle: `You've joined ${scopeName || "the organization"}.`, steps: TOTAL_STEPS, currentStep: stepIndex, children: _jsx("div", { className: "flex justify-center", children: _jsxs("a", { href: "/", className: "inline-flex items-center gap-2 rounded-md bg-primary px-8 py-2.5 text-sm font-semibold text-primary-foreground transition-colors hover:bg-primary/90", children: ["Get Started", _jsx(ArrowRight, { className: "size-4" })] }) }) }) }));
91
+ }
92
+ // ── Rejected — redirect to context selection ──────────────────
93
+ if (currentFlowStep === "rejected") {
94
+ return (_jsx(WizardShell, { children: _jsx(WizardPage, { icon: X, title: "Invitation declined", subtitle: "You've declined this invitation.", children: _jsx("div", { className: "flex justify-center", children: _jsxs("a", { href: "/select-context", className: "inline-flex items-center gap-2 rounded-md bg-primary px-8 py-2.5 text-sm font-semibold text-primary-foreground transition-colors hover:bg-primary/90", children: ["Continue", _jsx(ArrowRight, { className: "size-4" })] }) }) }) }));
95
+ }
96
+ // ── Error ────────────────────────────────────────────────────
97
+ if (currentFlowStep === "error") {
98
+ return (_jsx(WizardShell, { children: _jsx(WizardPage, { icon: X, title: "Invalid invitation", subtitle: error ?? "This invitation is no longer valid.", children: _jsx("div", { className: "flex justify-center", children: _jsx(Link, { to: "/login", className: "inline-flex items-center gap-2 rounded-md bg-primary px-8 py-2.5 text-sm font-semibold text-primary-foreground transition-colors hover:bg-primary/90", children: "Go to Login" }) }) }) }));
99
+ }
100
+ // ── Accept/Decline ───────────────────────────────────────────
101
+ return (_jsx(WizardShell, { children: _jsxs(WizardPage, { icon: ShieldCheck, title: "You're invited", subtitle: `You've been invited to join ${invitation.scopeName}.`, steps: TOTAL_STEPS, currentStep: stepIndex, children: [_jsxs("div", { className: "space-y-3 mb-6", children: [_jsxs("div", { className: "flex items-center gap-3 rounded-xl bg-muted/50 px-4 py-3", children: [_jsx(Building2, { className: "h-4 w-4 text-muted-foreground shrink-0" }), _jsxs("div", { children: [_jsx("p", { className: "text-xs text-muted-foreground", children: "Organization" }), _jsx("p", { className: "text-sm font-medium text-foreground", children: invitation.scopeName })] })] }), _jsxs("div", { className: "flex items-center gap-3 rounded-xl bg-muted/50 px-4 py-3", children: [_jsx(Mail, { className: "h-4 w-4 text-muted-foreground shrink-0" }), _jsxs("div", { children: [_jsx("p", { className: "text-xs text-muted-foreground", children: "Invited by" }), _jsx("p", { className: "text-sm font-medium text-foreground", children: invitation.inviterEmail })] })] }), _jsxs("div", { className: "flex items-center gap-3 rounded-xl bg-muted/50 px-4 py-3", children: [_jsx(UserPlus, { className: "h-4 w-4 text-muted-foreground shrink-0" }), _jsxs("div", { children: [_jsx("p", { className: "text-xs text-muted-foreground", children: "Role" }), _jsx("p", { className: "text-sm font-medium text-foreground capitalize", children: invitation.role })] })] })] }), error && (_jsx("div", { className: "rounded-lg bg-destructive/10 text-destructive text-sm text-center py-2 px-3 mb-4", children: error })), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("button", { type: "button", onClick: handleReject, disabled: rejecting || accepting, className: "text-sm text-muted-foreground hover:text-foreground transition-colors disabled:opacity-50", children: rejecting ? "Declining..." : "Decline" }), _jsx("button", { type: "button", onClick: handleAccept, disabled: accepting || rejecting, className: "inline-flex items-center gap-2 rounded-md bg-primary px-8 py-2.5 text-sm font-semibold text-primary-foreground transition-colors hover:bg-primary/90 disabled:opacity-50", children: accepting ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { className: "size-4 animate-spin" }), "Accepting..."] })) : (_jsxs(_Fragment, { children: [_jsx(Check, { className: "size-4" }), "Accept Invitation"] })) })] })] }) }));
102
+ }
103
+ //# sourceMappingURL=AcceptInvitePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcceptInvitePage.js","sourceRoot":"","sources":["../../../src/pages/AcceptInvitePage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAkC,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC9F,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA8B,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAwC,CAAA;AACvE,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,KAAK,EACL,CAAC,EACD,KAAK,EACL,OAAO,EACP,UAAU,EACV,WAAW,GACZ,MAAM,cAAc,CAAA;AAIrB,SAAS,WAAW,CAAC,EAAE,QAAQ,EAAiC;IAC9D,OAAO,CACL,cAAK,SAAS,EAAC,kEAAkE,YAC/E,cAAK,SAAS,EAAC,6EAA6E,YACzF,QAAQ,GACL,GACF,CACP,CAAA;AACH,CAAC;AAID,MAAM,UAAU,gBAAgB;IAC9B,MAAM,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAmB,CAAA;IAC7D,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,OAAO,EAAE,CAAA;IAErD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IACvD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACjD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACjD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAW,SAAS,CAAC,CAAA;IAC7D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAE9C,mDAAmD;IACnD,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,QAAQ,CAAC;QAClE,QAAQ,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,EAAE,CAAC;QACvC,OAAO,EAAE,KAAK,IAAoC,EAAE;YAClD,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,EAAE,CAAC,CAAA;gBACpC,WAAW,CAAC,QAAQ,CAAC,CAAA;gBACrB,OAAO,IAAI,CAAA;YACb,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAA;gBACrF,WAAW,CAAC,OAAO,CAAC,CAAA;gBACpB,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC,WAAW,IAAI,CAAC,CAAC,OAAO;KACnC,CAAC,CAAA;IAEF,yBAAyB;IACzB,MAAM,OAAO,GAAG,WAAW,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,iBAAiB,CAAC,CAAA;IAC/D,MAAM,eAAe,GACnB,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAA;IAE/E,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;QAC9B,IAAI,CAAC,UAAU;YAAE,OAAM;QACvB,YAAY,CAAC,IAAI,CAAC,CAAA;QAClB,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,YAAY,CAAC,KAAK,CAAC,CAAA;YACnB,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAA;YAC7E,OAAM;QACR,CAAC;QACD,YAAY,CAAC,KAAK,CAAC,CAAA;QACnB,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;QAClC,WAAW,CAAC,SAAS,CAAC,CAAA;IACxB,CAAC,CAAA;IAED,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;QAC9B,IAAI,CAAC,UAAU;YAAE,OAAM;QACvB,YAAY,CAAC,IAAI,CAAC,CAAA;QAClB,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;YACrC,YAAY,CAAC,KAAK,CAAC,CAAA;YACnB,WAAW,CAAC,UAAU,CAAC,CAAA;QACzB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,YAAY,CAAC,KAAK,CAAC,CAAA;YACnB,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAA;QAChF,CAAC;IACH,CAAC,CAAA;IAED,oEAAoE;IACpE,MAAM,WAAW,GAAG,CAAC,CAAA;IACrB,MAAM,SAAS,GAAG,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAE1F,gEAAgE;IAChE,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,CACL,KAAC,WAAW,cACV,cAAK,SAAS,EAAC,wCAAwC,YACrD,KAAC,OAAO,IAAC,SAAS,EAAC,4CAA4C,GAAG,GAC9D,GACM,CACf,CAAA;IACH,CAAC;IAED,gEAAgE;IAChE,IAAI,eAAe,KAAK,iBAAiB,EAAE,CAAC;QAC1C,OAAO,CACL,KAAC,WAAW,cACV,KAAC,UAAU,IACT,IAAI,EAAE,QAAQ,EACd,KAAK,EAAC,qBAAqB,EAC3B,QAAQ,EAAC,wDAAwD,YAEjE,eAAK,SAAS,EAAC,qBAAqB,aAClC,MAAC,IAAI,IACH,EAAE,EAAC,QAAQ,EACX,MAAM,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAA4B,EAC/D,SAAS,EAAC,iKAAiK,aAE3K,KAAC,KAAK,IAAC,SAAS,EAAC,SAAS,GAAG,cAExB,EACP,KAAC,IAAI,IACH,EAAE,EAAC,SAAS,EACZ,MAAM,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAA4B,EAC/D,SAAS,EAAC,iKAAiK,+BAGtK,IACH,GACK,GACD,CACf,CAAA;IACH,CAAC;IAED,gEAAgE;IAChE,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,CACL,KAAC,WAAW,cACV,KAAC,cAAc,IACb,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,EACjC,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,EAChB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,WAAW,GACvB,GACU,CACf,CAAA;IACH,CAAC;IAED,gEAAgE;IAChE,IAAI,eAAe,KAAK,MAAM,EAAE,CAAC;QAC/B,OAAO,CACL,KAAC,WAAW,cACV,KAAC,UAAU,IACT,IAAI,EAAE,KAAK,EACX,KAAK,EAAC,YAAY,EAClB,QAAQ,EAAE,iBAAiB,SAAS,IAAI,kBAAkB,GAAG,EAC7D,KAAK,EAAE,WAAW,EAClB,WAAW,EAAE,SAAS,YAEtB,cAAK,SAAS,EAAC,qBAAqB,YAClC,aACE,IAAI,EAAC,GAAG,EACR,SAAS,EAAC,sJAAsJ,4BAGhK,KAAC,UAAU,IAAC,SAAS,EAAC,QAAQ,GAAG,IAC/B,GACA,GACK,GACD,CACf,CAAA;IACH,CAAC;IAED,iEAAiE;IACjE,IAAI,eAAe,KAAK,UAAU,EAAE,CAAC;QACnC,OAAO,CACL,KAAC,WAAW,cACV,KAAC,UAAU,IACT,IAAI,EAAE,CAAC,EACP,KAAK,EAAC,qBAAqB,EAC3B,QAAQ,EAAC,kCAAkC,YAE3C,cAAK,SAAS,EAAC,qBAAqB,YAClC,aACE,IAAI,EAAC,iBAAiB,EACtB,SAAS,EAAC,sJAAsJ,yBAGhK,KAAC,UAAU,IAAC,SAAS,EAAC,QAAQ,GAAG,IAC/B,GACA,GACK,GACD,CACf,CAAA;IACH,CAAC;IAED,gEAAgE;IAChE,IAAI,eAAe,KAAK,OAAO,EAAE,CAAC;QAChC,OAAO,CACL,KAAC,WAAW,cACV,KAAC,UAAU,IACT,IAAI,EAAE,CAAC,EACP,KAAK,EAAC,oBAAoB,EAC1B,QAAQ,EAAE,KAAK,IAAI,qCAAqC,YAExD,cAAK,SAAS,EAAC,qBAAqB,YAClC,KAAC,IAAI,IACH,EAAE,EAAC,QAAQ,EACX,SAAS,EAAC,sJAAsJ,4BAG3J,GACH,GACK,GACD,CACf,CAAA;IACH,CAAC;IAED,gEAAgE;IAChE,OAAO,CACL,KAAC,WAAW,cACV,MAAC,UAAU,IACT,IAAI,EAAE,WAAW,EACjB,KAAK,EAAC,gBAAgB,EACtB,QAAQ,EAAE,+BAA+B,UAAW,CAAC,SAAS,GAAG,EACjE,KAAK,EAAE,WAAW,EAClB,WAAW,EAAE,SAAS,aAEtB,eAAK,SAAS,EAAC,gBAAgB,aAC7B,eAAK,SAAS,EAAC,0DAA0D,aACvE,KAAC,SAAS,IAAC,SAAS,EAAC,wCAAwC,GAAG,EAChE,0BACE,YAAG,SAAS,EAAC,+BAA+B,6BAAiB,EAC7D,YAAG,SAAS,EAAC,qCAAqC,YAAE,UAAW,CAAC,SAAS,GAAK,IAC1E,IACF,EACN,eAAK,SAAS,EAAC,0DAA0D,aACvE,KAAC,IAAI,IAAC,SAAS,EAAC,wCAAwC,GAAG,EAC3D,0BACE,YAAG,SAAS,EAAC,+BAA+B,2BAAe,EAC3D,YAAG,SAAS,EAAC,qCAAqC,YAAE,UAAW,CAAC,YAAY,GAAK,IAC7E,IACF,EACN,eAAK,SAAS,EAAC,0DAA0D,aACvE,KAAC,QAAQ,IAAC,SAAS,EAAC,wCAAwC,GAAG,EAC/D,0BACE,YAAG,SAAS,EAAC,+BAA+B,qBAAS,EACrD,YAAG,SAAS,EAAC,gDAAgD,YAAE,UAAW,CAAC,IAAI,GAAK,IAChF,IACF,IACF,EAEL,KAAK,IAAI,CACR,cAAK,SAAS,EAAC,kFAAkF,YAC9F,KAAK,GACF,CACP,EAED,eAAK,SAAS,EAAC,mCAAmC,aAChD,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,SAAS,IAAI,SAAS,EAChC,SAAS,EAAC,2FAA2F,YAEpG,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,GAChC,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,SAAS,IAAI,SAAS,EAChC,SAAS,EAAC,0KAA0K,YAEnL,SAAS,CAAC,CAAC,CAAC,CACX,8BACE,KAAC,OAAO,IAAC,SAAS,EAAC,qBAAqB,GAAG,oBAE1C,CACJ,CAAC,CAAC,CAAC,CACF,8BACE,KAAC,KAAK,IAAC,SAAS,EAAC,QAAQ,GAAG,yBAE3B,CACJ,GACM,IACL,IACK,GACD,CACf,CAAA;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ interface BackendErrorPageProps {
2
+ onRetry: () => void;
3
+ }
4
+ export declare function BackendErrorPage({ onRetry }: BackendErrorPageProps): import("react/jsx-runtime").JSX.Element;
5
+ export {};
6
+ //# sourceMappingURL=BackendErrorPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackendErrorPage.d.ts","sourceRoot":"","sources":["../../../src/pages/BackendErrorPage.tsx"],"names":[],"mappings":"AAEA,UAAU,qBAAqB;IAC7B,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,qBAAqB,2CAsClE"}
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { WifiOff } from "lucide-react";
3
+ export function BackendErrorPage({ onRetry }) {
4
+ return (_jsx("div", { "data-testid": "backend-error-page", className: "flex h-dvh flex-col bg-background", children: _jsx("main", { className: "flex-1 flex items-center justify-center p-6", children: _jsx("div", { className: "w-full max-w-[420px]", children: _jsxs("div", { className: "rounded-2xl border border-border bg-card p-8 shadow-sm", children: [_jsxs("div", { className: "flex flex-col items-center mb-6", children: [_jsx("div", { className: "flex items-center justify-center w-14 h-14 rounded-2xl bg-muted text-muted-foreground mb-4", children: _jsx(WifiOff, { className: "h-7 w-7" }) }), _jsx("h1", { className: "text-2xl font-bold text-foreground tracking-tight", children: "Unable to Connect" }), _jsx("p", { className: "text-muted-foreground text-sm mt-1 text-center leading-relaxed", children: "We asked the server a question and it ghosted us. The backend may be temporarily unavailable." })] }), _jsx("div", { className: "rounded-xl bg-muted/50 px-4 py-3 text-center mb-4", children: _jsx("p", { className: "text-xs text-muted-foreground", children: "Your data is safe \u2014 we just can't reach it right now. If the problem persists, check your network connection." }) }), _jsx("button", { type: "button", className: "w-full rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors", onClick: onRetry, children: "Retry" })] }) }) }) }));
5
+ }
6
+ //# sourceMappingURL=BackendErrorPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackendErrorPage.js","sourceRoot":"","sources":["../../../src/pages/BackendErrorPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAMtC,MAAM,UAAU,gBAAgB,CAAC,EAAE,OAAO,EAAyB;IACjE,OAAO,CACL,6BAAiB,oBAAoB,EAAC,SAAS,EAAC,mCAAmC,YACjF,eAAM,SAAS,EAAC,6CAA6C,YAC3D,cAAK,SAAS,EAAC,sBAAsB,YACnC,eAAK,SAAS,EAAC,wDAAwD,aACrE,eAAK,SAAS,EAAC,iCAAiC,aAC9C,cAAK,SAAS,EAAC,4FAA4F,YACzG,KAAC,OAAO,IAAC,SAAS,EAAC,SAAS,GAAG,GAC3B,EACN,aAAI,SAAS,EAAC,mDAAmD,kCAE5D,EACL,YAAG,SAAS,EAAC,gEAAgE,8GAGzE,IACA,EAEN,cAAK,SAAS,EAAC,mDAAmD,YAChE,YAAG,SAAS,EAAC,+BAA+B,mIAGxC,GACA,EAEN,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0HAA0H,EACpI,OAAO,EAAE,OAAO,sBAGT,IACL,GACF,GACD,GACH,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function ContextSelectionPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=ContextSelectionPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextSelectionPage.d.ts","sourceRoot":"","sources":["../../../src/pages/ContextSelectionPage.tsx"],"names":[],"mappings":"AAgEA,wBAAgB,oBAAoB,4CAgInC"}
@@ -0,0 +1,166 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useMemo } from "react";
3
+ import { useNavigate } from "@tanstack/react-router";
4
+ import { useQuery } from "@ydtb/tk-scope-query-client";
5
+ import { Search, ChevronDown } from "lucide-react";
6
+ import { BrandedLoader } from "@ydtb/tk-scope-ui/components/branded-loader";
7
+ import { useAuth } from "../contexts/auth/AuthContext.js";
8
+ import { userApi } from "../lib/platform-api.js";
9
+ import { scopeLink } from "@ydtb/tk-scope/client";
10
+ import { queryScopeConfigs } from "@ydtb/tk-scope/client";
11
+ import { withIndefiniteArticle } from "@ydtb/tk-scope-lib/string";
12
+ import { useCurrentPermissions } from "../lib/permissions-store.js";
13
+ const avatarColors = [
14
+ "bg-indigo-600",
15
+ "bg-emerald-600",
16
+ "bg-amber-600",
17
+ "bg-rose-600",
18
+ "bg-violet-600",
19
+ "bg-sky-600",
20
+ ];
21
+ function getColorFromName(name) {
22
+ let hash = 0;
23
+ for (let i = 0; i < name.length; i++) {
24
+ hash = name.charCodeAt(i) + ((hash << 5) - hash);
25
+ }
26
+ return avatarColors[Math.abs(hash) % avatarColors.length] ?? avatarColors[0];
27
+ }
28
+ /**
29
+ * Walk the scope config hierarchy to produce a top-down ordered list
30
+ * of scope types: root first, then its children, then their children, etc.
31
+ */
32
+ function getHierarchicalOrder(configs) {
33
+ const configMap = new Map(configs.map((c) => [c.type, c]));
34
+ const childIds = new Set(configs.flatMap((c) => c.childTypes ?? []));
35
+ const roots = configs.filter((c) => !childIds.has(c.type));
36
+ const ordered = [];
37
+ function walk(config) {
38
+ ordered.push(config);
39
+ for (const childId of config.childTypes ?? []) {
40
+ const child = configMap.get(childId);
41
+ if (child)
42
+ walk(child);
43
+ }
44
+ }
45
+ for (const root of roots) {
46
+ walk(root);
47
+ }
48
+ return ordered;
49
+ }
50
+ export function ContextSelectionPage() {
51
+ const navigate = useNavigate();
52
+ const { session } = useAuth();
53
+ const scopeConfigs = queryScopeConfigs();
54
+ const permissions = useCurrentPermissions();
55
+ const [search, setSearch] = useState("");
56
+ const { data, isPending } = useQuery(userApi.memberships.queryOptions({ input: {} }));
57
+ const userName = session?.user?.name || "there";
58
+ const firstName = userName.split(" ")[0];
59
+ const scopes = useMemo(() => data?.scopes ?? [], [data?.scopes]);
60
+ const scopeNameMap = new Map(scopes.map((s) => [s.id, s.name]));
61
+ const configMap = new Map(scopeConfigs.map((c) => [c.type, c]));
62
+ const canSwitchScopes = !permissions.loaded || permissions.effectivePermissions.includes("scope.switch");
63
+ // Order scope types hierarchically: root → children → leaves
64
+ const orderedConfigs = useMemo(() => getHierarchicalOrder(scopeConfigs), [scopeConfigs]);
65
+ // Find parent scope type for each scope type
66
+ const parentTypeMap = useMemo(() => {
67
+ const map = new Map();
68
+ for (const config of scopeConfigs) {
69
+ for (const childId of config.childTypes ?? []) {
70
+ map.set(childId, config.type);
71
+ }
72
+ }
73
+ return map;
74
+ }, [scopeConfigs]);
75
+ const visibleConfigs = useMemo(() => {
76
+ return orderedConfigs.filter((config) => {
77
+ if (config.scopeMenu === "hidden") {
78
+ return false;
79
+ }
80
+ const typeMemberships = canSwitchScopes ? scopes.filter((scope) => scope.type === config.type) : [];
81
+ return !(typeMemberships.length === 0 &&
82
+ (config.selfCreate === false || config.selfCreate === "initial"));
83
+ });
84
+ }, [canSwitchScopes, orderedConfigs, scopes]);
85
+ const handleScopeClick = (scope, scopeId) => {
86
+ const config = configMap.get(scope);
87
+ const defaultRoute = config?.defaultRoute ?? "/";
88
+ navigate({
89
+ to: scopeLink(defaultRoute, { scope, scopeId }),
90
+ });
91
+ };
92
+ if (isPending) {
93
+ return _jsx(BrandedLoader, { variant: "fullscreen" });
94
+ }
95
+ return (_jsx("div", { className: "bg-background min-h-screen", children: _jsxs("div", { className: "max-w-[800px] mx-auto px-6 py-12", children: [_jsx("div", { className: "flex items-center justify-center w-10 h-10 rounded-lg bg-primary text-primary-foreground mx-auto", children: _jsxs("svg", { className: "h-5 w-5", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("circle", { cx: "12", cy: "12", r: "10" }), _jsx("path", { d: "M8 12h8M12 8v8" })] }) }), _jsxs("h1", { className: "text-2xl font-semibold text-center mt-4", children: ["Welcome back, ", firstName] }), _jsxs("div", { className: "relative mt-8", children: [_jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" }), _jsx("input", { type: "text", value: search, onChange: (e) => setSearch(e.target.value), placeholder: "Search all scopes...", className: "w-full h-10 pl-10 pr-4 rounded-lg border border-border bg-card text-sm text-foreground outline-none placeholder:text-muted-foreground focus:ring-2 focus:ring-primary/20 focus:border-primary transition-colors" })] }), visibleConfigs.length === 0 && (_jsx("div", { className: "mt-10 rounded-xl border border-border bg-card px-6 py-8 text-center", children: _jsx("p", { className: "text-sm text-muted-foreground", children: permissions.loaded && !canSwitchScopes
96
+ ? "No additional scope actions are available from your current role."
97
+ : "No additional scope actions available." }) })), visibleConfigs.map((config) => {
98
+ const typeMemberships = canSwitchScopes
99
+ ? scopes.filter((scope) => scope.type === config.type)
100
+ : [];
101
+ const parentType = parentTypeMap.get(config.type);
102
+ const parentScopes = parentType ? scopes.filter((scope) => scope.type === parentType) : [];
103
+ return (_jsx(ScopeTypeSection, { config: config, configMap: configMap, memberships: typeMemberships, allScopes: scopes, scopeNameMap: scopeNameMap, parentScopes: parentScopes, parentConfig: parentType ? configMap.get(parentType) : undefined, onScopeClick: handleScopeClick, search: search }, config.type));
104
+ })] }) }));
105
+ }
106
+ function ScopeTypeSection({ config, configMap, memberships, allScopes, scopeNameMap, parentScopes, parentConfig, onScopeClick, search, }) {
107
+ const [parentFilter, setParentFilter] = useState("");
108
+ const childTypes = config.childTypes ?? [];
109
+ const showParentFilter = memberships.length > 0 && parentScopes.length > 1;
110
+ const filtered = useMemo(() => {
111
+ let result = memberships;
112
+ if (parentFilter) {
113
+ result = result.filter((s) => s.parentScopeId === parentFilter);
114
+ }
115
+ if (search) {
116
+ const q = search.toLowerCase();
117
+ result = result.filter((s) => s.name.toLowerCase().includes(q));
118
+ }
119
+ return result;
120
+ }, [memberships, parentFilter, search]);
121
+ return (_jsxs("div", { className: "mt-10", children: [_jsxs("div", { className: "flex items-center justify-between gap-3 mb-4", children: [_jsx("p", { className: "text-xs font-medium uppercase tracking-wider text-muted-foreground shrink-0", children: config.labelPlural ?? config.label + "s" }), showParentFilter && parentConfig && (_jsxs("div", { className: "relative", children: [_jsxs("select", { value: parentFilter, onChange: (e) => setParentFilter(e.target.value), className: "h-7 pl-2.5 pr-7 rounded-md border border-border bg-card text-xs text-foreground outline-none appearance-none cursor-pointer", children: [_jsxs("option", { value: "", children: ["All ", parentConfig.labelPlural ?? parentConfig.label + "s"] }), parentScopes.map((p) => (_jsx("option", { value: p.id, children: p.name }, p.id)))] }), _jsx(ChevronDown, { className: "absolute right-1.5 top-1/2 -translate-y-1/2 h-3 w-3 text-muted-foreground pointer-events-none" })] }))] }), filtered.length > 0 && (_jsx("div", { className: `grid grid-cols-1 sm:grid-cols-2 gap-3${filtered.length > 4 ? " max-h-[340px] overflow-y-auto pr-1" : ""}`, children: filtered.map((membership) => {
122
+ const childCount = childTypes.length > 0
123
+ ? allScopes.filter((s) => childTypes.includes(s.type) && s.parentScopeId === membership.id).length
124
+ : 0;
125
+ const childLabels = childTypes.length > 0 ? getChildLabels(childTypes, configMap) : undefined;
126
+ return (_jsx(ScopeCard, { membership: membership, childCount: childCount, childLabels: childLabels, parentName: membership.parentScopeId ? scopeNameMap.get(membership.parentScopeId) : undefined, onClick: () => onScopeClick(config.type, membership.id) }, membership.id));
127
+ }) })), filtered.length === 0 && memberships.length > 0 && (_jsxs("p", { className: "text-sm text-muted-foreground text-center py-6", children: ["No matching ", (config.labelPlural ?? config.label + "s").toLowerCase(), " found."] })), memberships.length === 0 && _jsx(CreateAction, { config: config })] }));
128
+ }
129
+ function ScopeCard({ membership, childCount, childLabels, parentName, onClick, }) {
130
+ const initial = membership.name.charAt(0).toUpperCase();
131
+ const colorClass = getColorFromName(membership.name);
132
+ return (_jsx("button", { type: "button", onClick: onClick, className: "bg-card rounded-xl border border-border p-5 text-left hover:border-primary hover:shadow-md transition-all cursor-pointer", children: _jsxs("div", { className: "flex items-start gap-3", children: [membership.logo ? (_jsx("img", { src: membership.logo, alt: membership.name, className: "w-10 h-10 rounded-md object-cover flex-shrink-0" })) : (_jsx("div", { className: `flex items-center justify-center w-10 h-10 rounded-md text-white text-sm font-bold flex-shrink-0 ${colorClass}`, children: initial })), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: "font-semibold text-foreground truncate", children: membership.name }), _jsx("div", { className: "text-sm text-muted-foreground mt-0.5", children: childCount > 0 && childLabels
133
+ ? `${childCount} ${childCount === 1 ? childLabels.singular : childLabels.plural}`
134
+ : parentName
135
+ ? `via ${parentName}`
136
+ : null }), _jsx("div", { className: "text-xs text-primary mt-1 capitalize", children: membership.role })] })] }) }));
137
+ }
138
+ function CreateAction({ config }) {
139
+ if (config.selfCreate === false || config.selfCreate === "initial")
140
+ return null;
141
+ if (config.selfCreate === "invite") {
142
+ return (_jsxs("p", { className: "text-sm text-muted-foreground text-center py-4", children: ["Join ", withIndefiniteArticle(config.label.toLowerCase()), " via invitation"] }));
143
+ }
144
+ if (config.selfCreate === "redirect") {
145
+ if (config.selfCreateRedirect) {
146
+ return (_jsx("p", { className: "text-center py-4", children: _jsxs("a", { href: config.selfCreateRedirect, target: "_blank", rel: "noopener noreferrer", className: "text-sm text-primary hover:underline", children: ["Create ", withIndefiniteArticle(config.label)] }) }));
147
+ }
148
+ return (_jsxs("p", { className: "text-sm text-muted-foreground text-center py-4", children: ["Create ", withIndefiniteArticle(config.label)] }));
149
+ }
150
+ return (_jsx("p", { className: "text-center py-4", children: _jsxs("span", { className: "text-sm text-primary", children: ["Create ", withIndefiniteArticle(config.label)] }) }));
151
+ }
152
+ function getChildLabels(childTypes, configMap) {
153
+ const firstType = childTypes[0];
154
+ if (!firstType) {
155
+ return { singular: "", plural: "" };
156
+ }
157
+ const firstChild = configMap.get(firstType);
158
+ if (firstChild) {
159
+ return {
160
+ singular: firstChild.label.toLowerCase(),
161
+ plural: (firstChild.labelPlural ?? firstChild.label + "s").toLowerCase(),
162
+ };
163
+ }
164
+ return { singular: firstType, plural: firstType + "s" };
165
+ }
166
+ //# sourceMappingURL=ContextSelectionPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextSelectionPage.js","sourceRoot":"","sources":["../../../src/pages/ContextSelectionPage.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ interface DefaultCreateScopePageProps {
2
+ /** The child scope type being created for the active hierarchy */
3
+ childType: string;
4
+ }
5
+ /**
6
+ * Default creation page for child scopes.
7
+ *
8
+ * Uses WizardShell in create mode — the first step is scope creation
9
+ * (name + slug), followed by any onboarding steps defined for the
10
+ * child scope type. Renders inside a centered card matching the
11
+ * setup wizard style.
12
+ *
13
+ * Mounted under the parent scope's shell at /create/{childType}.
14
+ */
15
+ export declare function DefaultCreateScopePage({ childType }: DefaultCreateScopePageProps): import("react/jsx-runtime").JSX.Element;
16
+ export {};
17
+ //# sourceMappingURL=DefaultCreateScopePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultCreateScopePage.d.ts","sourceRoot":"","sources":["../../../src/pages/DefaultCreateScopePage.tsx"],"names":[],"mappings":"AAOA,UAAU,2BAA2B;IACnC,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,SAAS,EAAE,EAAE,2BAA2B,2CA6ChF"}
@@ -0,0 +1,50 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useCallback } from "react";
3
+ import { useNavigate } from "@tanstack/react-router";
4
+ import { useScopeContext } from "../contexts/scope/ScopeContext.js";
5
+ import { scopeLink } from "@ydtb/tk-scope/client";
6
+ import { WizardShell } from "../onboarding/WizardShell.js";
7
+ import { queryScopeType } from "@ydtb/tk-scope/client";
8
+ /**
9
+ * Default creation page for child scopes.
10
+ *
11
+ * Uses WizardShell in create mode — the first step is scope creation
12
+ * (name + slug), followed by any onboarding steps defined for the
13
+ * child scope type. Renders inside a centered card matching the
14
+ * setup wizard style.
15
+ *
16
+ * Mounted under the parent scope's shell at /create/{childType}.
17
+ */
18
+ export function DefaultCreateScopePage({ childType }) {
19
+ const navigate = useNavigate();
20
+ const { scopeId: parentScopeId, scopeType: parentScopeType } = useScopeContext();
21
+ const childConfig = queryScopeType(childType);
22
+ const defaultRoute = childConfig?.defaultRoute ?? "/";
23
+ const handleComplete = useCallback((newScopeId) => {
24
+ if (newScopeId) {
25
+ navigate({
26
+ to: scopeLink(defaultRoute, {
27
+ scope: childType,
28
+ scopeId: newScopeId,
29
+ }),
30
+ });
31
+ }
32
+ else if (parentScopeType && parentScopeId) {
33
+ navigate({
34
+ to: scopeLink(`/${childType}s`, {
35
+ scope: parentScopeType,
36
+ scopeId: parentScopeId,
37
+ }),
38
+ });
39
+ }
40
+ else {
41
+ navigate({ to: "/" });
42
+ }
43
+ }, [navigate, childType, defaultRoute, parentScopeType, parentScopeId]);
44
+ return (_jsx("div", { className: "flex min-h-[60vh] items-center justify-center px-4", children: _jsx("div", { className: "w-full max-w-[420px] rounded-2xl border border-border bg-card p-8 shadow-sm", children: _jsx(WizardShell, { scope: childType, onComplete: handleComplete, create: {
45
+ childType,
46
+ parentScopeId,
47
+ parentScopeType,
48
+ } }) }) }));
49
+ }
50
+ //# sourceMappingURL=DefaultCreateScopePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultCreateScopePage.js","sourceRoot":"","sources":["../../../src/pages/DefaultCreateScopePage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAoC,CAAA;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA+B,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAOtD;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CAAC,EAAE,SAAS,EAA+B;IAC/E,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAAA;IAEhF,MAAM,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC,CAAA;IAC7C,MAAM,YAAY,GAAG,WAAW,EAAE,YAAY,IAAI,GAAG,CAAA;IAErD,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,UAAmB,EAAE,EAAE;QACtB,IAAI,UAAU,EAAE,CAAC;YACf,QAAQ,CAAC;gBACP,EAAE,EAAE,SAAS,CAAC,YAAY,EAAE;oBAC1B,KAAK,EAAE,SAAS;oBAChB,OAAO,EAAE,UAAU;iBACpB,CAAW;aACb,CAAC,CAAA;QACJ,CAAC;aAAM,IAAI,eAAe,IAAI,aAAa,EAAE,CAAC;YAC5C,QAAQ,CAAC;gBACP,EAAE,EAAE,SAAS,CAAC,IAAI,SAAS,GAAG,EAAE;oBAC9B,KAAK,EAAE,eAAe;oBACtB,OAAO,EAAE,aAAa;iBACvB,CAAW;aACb,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAA;QACvB,CAAC;IACH,CAAC,EACD,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,CAAC,CACpE,CAAA;IAED,OAAO,CACL,cAAK,SAAS,EAAC,oDAAoD,YACjE,cAAK,SAAS,EAAC,6EAA6E,YAC1F,KAAC,WAAW,IACV,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,cAAc,EAC1B,MAAM,EAAE;oBACN,SAAS;oBACT,aAAa;oBACb,eAAe;iBAChB,GACD,GACE,GACF,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function ForgotPasswordPage(): import("react/jsx-runtime").JSX.Element | null;
2
+ //# sourceMappingURL=ForgotPasswordPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ForgotPasswordPage.d.ts","sourceRoot":"","sources":["../../../src/pages/ForgotPasswordPage.tsx"],"names":[],"mappings":"AAMA,wBAAgB,kBAAkB,mDA0HjC"}
@@ -0,0 +1,44 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { Navigate, Link } from "@tanstack/react-router";
4
+ import { authClient } from "@ydtb/tk-scope-auth/client";
5
+ import { useAuth } from "../contexts/auth/AuthContext.js";
6
+ import { Mail, ArrowRight, ArrowLeft, KeyRound } from "lucide-react";
7
+ export function ForgotPasswordPage() {
8
+ const { session, isPending } = useAuth();
9
+ const [email, setEmail] = useState("");
10
+ const [error, setError] = useState(null);
11
+ const [loading, setLoading] = useState(false);
12
+ const [submitted, setSubmitted] = useState(false);
13
+ if (isPending)
14
+ return null;
15
+ if (session)
16
+ return _jsx(Navigate, { to: "/" });
17
+ const handleSubmit = async (e) => {
18
+ e.preventDefault();
19
+ setError(null);
20
+ setLoading(true);
21
+ try {
22
+ const { error: authError } = await authClient.requestPasswordReset({
23
+ email,
24
+ redirectTo: "/reset-password",
25
+ });
26
+ setLoading(false);
27
+ if (authError) {
28
+ // Still show success to prevent email enumeration
29
+ setSubmitted(true);
30
+ return;
31
+ }
32
+ setSubmitted(true);
33
+ }
34
+ catch {
35
+ setLoading(false);
36
+ // Show success even on error to prevent email enumeration
37
+ setSubmitted(true);
38
+ }
39
+ };
40
+ return (_jsx("div", { className: "flex min-h-dvh items-center justify-center bg-background p-4", children: _jsx("div", { className: "w-full max-w-[420px]", children: _jsxs("div", { className: "rounded-2xl border border-border bg-card p-8 shadow-sm", children: [_jsxs("div", { className: "flex flex-col items-center mb-6", children: [_jsx("div", { className: "flex items-center justify-center w-14 h-14 rounded-2xl bg-primary text-primary-foreground mb-4", children: _jsx(KeyRound, { className: "h-7 w-7" }) }), _jsx("h1", { className: "text-2xl font-bold text-foreground tracking-tight", children: "Forgot Password" }), _jsx("p", { className: "text-muted-foreground text-sm mt-1", children: submitted
41
+ ? "We sent you a password reset link."
42
+ : "Enter your email and we'll send you a reset link." })] }), submitted ? (_jsxs("div", { className: "space-y-4", children: [_jsx("div", { className: "rounded-lg bg-primary/10 text-primary text-sm text-center py-3 px-3", children: "Check your email for a reset link. If you don't see it, check your spam folder." }), _jsxs(Link, { to: "/login", className: "flex items-center justify-center gap-2 w-full h-12 rounded-xl bg-foreground text-background text-sm font-semibold shadow-md hover:opacity-90 transition-opacity", children: [_jsx(ArrowLeft, { className: "h-4 w-4" }), "Back to Login"] })] })) : (_jsxs("form", { onSubmit: handleSubmit, className: "space-y-4", children: [error && (_jsx("div", { className: "rounded-lg bg-destructive/10 text-destructive text-sm text-center py-2 px-3", children: error })), _jsxs("div", { children: [_jsx("label", { htmlFor: "email", className: "block text-sm font-semibold text-foreground mb-1.5", children: "Email" }), _jsxs("div", { className: "relative", children: [_jsx(Mail, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" }), _jsx("input", { id: "email", type: "email", value: email, onChange: (e) => setEmail(e.target.value), placeholder: "name@example.com", required: true, className: "flex h-11 w-full rounded-xl border border-border bg-muted/30 pl-10 pr-3 text-sm text-foreground transition-colors placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-primary/30 focus:border-primary" })] })] }), _jsxs("button", { type: "submit", disabled: loading, className: "flex items-center justify-center gap-2 w-full h-12 rounded-xl bg-foreground text-background text-sm font-semibold shadow-md hover:opacity-90 transition-opacity disabled:opacity-50", children: [loading ? "Sending..." : "Send Reset Link", !loading && _jsx(ArrowRight, { className: "h-4 w-4" })] })] })), !submitted && (_jsx("div", { className: "mt-6 text-center", children: _jsxs(Link, { to: "/login", className: "inline-flex items-center gap-1.5 text-sm font-medium text-primary hover:underline underline-offset-4", children: [_jsx(ArrowLeft, { className: "h-3.5 w-3.5" }), "Back to Login"] }) }))] }) }) }));
43
+ }
44
+ //# sourceMappingURL=ForgotPasswordPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ForgotPasswordPage.js","sourceRoot":"","sources":["../../../src/pages/ForgotPasswordPage.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Shown when an authenticated user has zero scope memberships.
3
+ * Reads scope configs to display creation/join options per selfCreate policy.
4
+ */
5
+ export declare function GetStartedPage(): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=GetStartedPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GetStartedPage.d.ts","sourceRoot":"","sources":["../../../src/pages/GetStartedPage.tsx"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAgB,cAAc,4CAoC7B"}
@@ -0,0 +1,49 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Rocket, Plus, ExternalLink, Ticket } from "lucide-react";
3
+ import { Link } from "@tanstack/react-router";
4
+ import { resolveIcon } from "../lib/icon-resolver.js";
5
+ import { queryScopeConfigs } from "@ydtb/tk-scope/client";
6
+ /**
7
+ * Shown when an authenticated user has zero scope memberships.
8
+ * Reads scope configs to display creation/join options per selfCreate policy.
9
+ */
10
+ export function GetStartedPage() {
11
+ const scopes = queryScopeConfigs();
12
+ // Filter to scopes the user can act on through normal creation/join flows.
13
+ // `initial` is reserved for first-run platform setup.
14
+ const actionableScopes = scopes.filter((s) => s.selfCreate !== false && s.selfCreate !== "initial");
15
+ return (_jsx("div", { className: "flex min-h-dvh items-center justify-center bg-background p-4", children: _jsx("div", { className: "w-full max-w-[480px]", children: _jsxs("div", { className: "rounded-2xl border border-border bg-card p-8 shadow-sm", children: [_jsxs("div", { className: "flex flex-col items-center mb-6", children: [_jsx("div", { className: "flex items-center justify-center w-14 h-14 rounded-2xl bg-primary text-primary-foreground mb-4", children: _jsx(Rocket, { className: "h-7 w-7" }) }), _jsx("h1", { className: "text-2xl font-bold text-foreground tracking-tight", children: "Get Started" }), _jsx("p", { className: "text-muted-foreground text-sm mt-1 text-center leading-relaxed", children: actionableScopes.length > 0
16
+ ? "You're not a member of any scopes yet. Choose an option below to get started."
17
+ : "You have no scopes available. Contact an administrator for access." })] }), actionableScopes.length > 0 && (_jsx("div", { className: "space-y-3", children: actionableScopes.map((scope) => (_jsx(ScopeOption, { scope: scope }, scope.type))) }))] }) }) }));
18
+ }
19
+ function ScopeOption({ scope }) {
20
+ const IconComponent = resolveScopeIcon(scope);
21
+ switch (scope.selfCreate) {
22
+ case true:
23
+ return (_jsx(ScopeCard, { scope: scope, icon: IconComponent, actionLabel: `Create ${scope.label}`, actionIcon: _jsx(Plus, { className: "h-4 w-4" }), href: `/create/${scope.type}` }));
24
+ case "redirect":
25
+ return (_jsx(ScopeCard, { scope: scope, icon: IconComponent, actionLabel: `Get Started`, actionIcon: _jsx(ExternalLink, { className: "h-4 w-4" }), externalHref: scope.selfCreateRedirect }));
26
+ case "invite":
27
+ return (_jsx(ScopeCard, { scope: scope, icon: IconComponent, actionLabel: "Join with Invite Code", actionIcon: _jsx(Ticket, { className: "h-4 w-4" }), href: `/join/${scope.type}` }));
28
+ default:
29
+ return null;
30
+ }
31
+ }
32
+ function ScopeCard({ scope, icon: IconComponent, actionLabel, actionIcon, href, externalHref, }) {
33
+ const button = (_jsxs("div", { className: "flex items-center gap-4 rounded-xl border border-border bg-card px-4 py-4 hover:bg-muted/50 transition-colors cursor-pointer", children: [_jsx("div", { className: "flex items-center justify-center w-10 h-10 rounded-xl bg-muted text-muted-foreground shrink-0", children: _jsx(IconComponent, { className: "h-5 w-5" }) }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("p", { className: "text-sm font-semibold text-foreground", children: scope.label }), _jsx("p", { className: "text-xs text-muted-foreground mt-0.5", children: actionLabel })] }), _jsx("div", { className: "text-muted-foreground shrink-0", children: actionIcon })] }));
34
+ if (externalHref) {
35
+ return (_jsx("a", { href: externalHref, target: "_blank", rel: "noopener noreferrer", children: button }));
36
+ }
37
+ if (href) {
38
+ return _jsx(Link, { to: href, children: button });
39
+ }
40
+ return button;
41
+ }
42
+ function resolveScopeIcon(scope) {
43
+ if (!scope.icon)
44
+ return Rocket;
45
+ if (typeof scope.icon === "string")
46
+ return resolveIcon(scope.icon);
47
+ return scope.icon;
48
+ }
49
+ //# sourceMappingURL=GetStartedPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GetStartedPage.js","sourceRoot":"","sources":["../../../src/pages/GetStartedPage.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function InviteErrorPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=InviteErrorPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InviteErrorPage.d.ts","sourceRoot":"","sources":["../../../src/pages/InviteErrorPage.tsx"],"names":[],"mappings":"AAsCA,wBAAgB,eAAe,4CA0B9B"}