@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.
- package/LICENSE +21 -0
- package/README.md +48 -0
- package/dist/src/auth/AuthStrategyGate.d.ts +27 -0
- package/dist/src/auth/AuthStrategyGate.d.ts.map +1 -0
- package/dist/src/auth/AuthStrategyGate.js +58 -0
- package/dist/src/auth/AuthStrategyGate.js.map +1 -0
- package/dist/src/auth/components/DefaultDeviceLogin.d.ts +7 -0
- package/dist/src/auth/components/DefaultDeviceLogin.d.ts.map +1 -0
- package/dist/src/auth/components/DefaultDeviceLogin.js +21 -0
- package/dist/src/auth/components/DefaultDeviceLogin.js.map +1 -0
- package/dist/src/auth/components/DefaultPinLogin.d.ts +8 -0
- package/dist/src/auth/components/DefaultPinLogin.d.ts.map +1 -0
- package/dist/src/auth/components/DefaultPinLogin.js +85 -0
- package/dist/src/auth/components/DefaultPinLogin.js.map +1 -0
- package/dist/src/auth/components/DefaultSessionLogin.d.ts +7 -0
- package/dist/src/auth/components/DefaultSessionLogin.d.ts.map +1 -0
- package/dist/src/auth/components/DefaultSessionLogin.js +21 -0
- package/dist/src/auth/components/DefaultSessionLogin.js.map +1 -0
- package/dist/src/auth/components/index.d.ts +12 -0
- package/dist/src/auth/components/index.d.ts.map +1 -0
- package/dist/src/auth/components/index.js +21 -0
- package/dist/src/auth/components/index.js.map +1 -0
- package/dist/src/auth/index.d.ts +8 -0
- package/dist/src/auth/index.d.ts.map +1 -0
- package/dist/src/auth/index.js +7 -0
- package/dist/src/auth/index.js.map +1 -0
- package/dist/src/auth/persistence/pin-storage.d.ts +19 -0
- package/dist/src/auth/persistence/pin-storage.d.ts.map +1 -0
- package/dist/src/auth/persistence/pin-storage.js +80 -0
- package/dist/src/auth/persistence/pin-storage.js.map +1 -0
- package/dist/src/auth/strategies/device.d.ts +16 -0
- package/dist/src/auth/strategies/device.d.ts.map +1 -0
- package/dist/src/auth/strategies/device.js +51 -0
- package/dist/src/auth/strategies/device.js.map +1 -0
- package/dist/src/auth/strategies/index.d.ts +13 -0
- package/dist/src/auth/strategies/index.d.ts.map +1 -0
- package/dist/src/auth/strategies/index.js +24 -0
- package/dist/src/auth/strategies/index.js.map +1 -0
- package/dist/src/auth/strategies/none.d.ts +9 -0
- package/dist/src/auth/strategies/none.d.ts.map +1 -0
- package/dist/src/auth/strategies/none.js +10 -0
- package/dist/src/auth/strategies/none.js.map +1 -0
- package/dist/src/auth/strategies/pin.d.ts +9 -0
- package/dist/src/auth/strategies/pin.d.ts.map +1 -0
- package/dist/src/auth/strategies/pin.js +48 -0
- package/dist/src/auth/strategies/pin.js.map +1 -0
- package/dist/src/auth/strategies/session.d.ts +9 -0
- package/dist/src/auth/strategies/session.d.ts.map +1 -0
- package/dist/src/auth/strategies/session.js +42 -0
- package/dist/src/auth/strategies/session.js.map +1 -0
- package/dist/src/auth/types.d.ts +2 -0
- package/dist/src/auth/types.d.ts.map +1 -0
- package/dist/src/auth/types.js +2 -0
- package/dist/src/auth/types.js.map +1 -0
- package/dist/src/client.d.ts +63 -0
- package/dist/src/client.d.ts.map +1 -0
- package/dist/src/client.js +81 -0
- package/dist/src/client.js.map +1 -0
- package/dist/src/components/BackendErrorGate.d.ts +10 -0
- package/dist/src/components/BackendErrorGate.d.ts.map +1 -0
- package/dist/src/components/BackendErrorGate.js +19 -0
- package/dist/src/components/BackendErrorGate.js.map +1 -0
- package/dist/src/components/ErrorBoundary.d.ts +17 -0
- package/dist/src/components/ErrorBoundary.d.ts.map +1 -0
- package/dist/src/components/ErrorBoundary.js +23 -0
- package/dist/src/components/ErrorBoundary.js.map +1 -0
- package/dist/src/components/NotificationPanel.d.ts +9 -0
- package/dist/src/components/NotificationPanel.d.ts.map +1 -0
- package/dist/src/components/NotificationPanel.js +146 -0
- package/dist/src/components/NotificationPanel.js.map +1 -0
- package/dist/src/components/scope/ChildScopeDetailPage.d.ts +8 -0
- package/dist/src/components/scope/ChildScopeDetailPage.d.ts.map +1 -0
- package/dist/src/components/scope/ChildScopeDetailPage.js +79 -0
- package/dist/src/components/scope/ChildScopeDetailPage.js.map +1 -0
- package/dist/src/components/scope/ChildScopeListPage.d.ts +6 -0
- package/dist/src/components/scope/ChildScopeListPage.d.ts.map +1 -0
- package/dist/src/components/scope/ChildScopeListPage.js +111 -0
- package/dist/src/components/scope/ChildScopeListPage.js.map +1 -0
- package/dist/src/components/scope/CreateChildScopeButton.d.ts +14 -0
- package/dist/src/components/scope/CreateChildScopeButton.d.ts.map +1 -0
- package/dist/src/components/scope/CreateChildScopeButton.js +18 -0
- package/dist/src/components/scope/CreateChildScopeButton.js.map +1 -0
- package/dist/src/components/scope/CreateScopeDialog.d.ts +9 -0
- package/dist/src/components/scope/CreateScopeDialog.d.ts.map +1 -0
- package/dist/src/components/scope/CreateScopeDialog.js +137 -0
- package/dist/src/components/scope/CreateScopeDialog.js.map +1 -0
- package/dist/src/components/scope/JoinScopeDialog.d.ts +8 -0
- package/dist/src/components/scope/JoinScopeDialog.d.ts.map +1 -0
- package/dist/src/components/scope/JoinScopeDialog.js +115 -0
- package/dist/src/components/scope/JoinScopeDialog.js.map +1 -0
- package/dist/src/components/scope/ProfileScopeSection.d.ts +11 -0
- package/dist/src/components/scope/ProfileScopeSection.d.ts.map +1 -0
- package/dist/src/components/scope/ProfileScopeSection.js +63 -0
- package/dist/src/components/scope/ProfileScopeSection.js.map +1 -0
- package/dist/src/components/scope/ScopeSwitcher.d.ts +14 -0
- package/dist/src/components/scope/ScopeSwitcher.d.ts.map +1 -0
- package/dist/src/components/scope/ScopeSwitcher.js +131 -0
- package/dist/src/components/scope/ScopeSwitcher.js.map +1 -0
- package/dist/src/components/scope/SwitchScopeDialog.d.ts +8 -0
- package/dist/src/components/scope/SwitchScopeDialog.d.ts.map +1 -0
- package/dist/src/components/scope/SwitchScopeDialog.js +60 -0
- package/dist/src/components/scope/SwitchScopeDialog.js.map +1 -0
- package/dist/src/components/scope/useChildScopePermissions.d.ts +7 -0
- package/dist/src/components/scope/useChildScopePermissions.d.ts.map +1 -0
- package/dist/src/components/scope/useChildScopePermissions.js +34 -0
- package/dist/src/components/scope/useChildScopePermissions.js.map +1 -0
- package/dist/src/contexts/auth/AuthContext.d.ts +13 -0
- package/dist/src/contexts/auth/AuthContext.d.ts.map +1 -0
- package/dist/src/contexts/auth/AuthContext.js +23 -0
- package/dist/src/contexts/auth/AuthContext.js.map +1 -0
- package/dist/src/contexts/backend/BackendStatusContext.d.ts +21 -0
- package/dist/src/contexts/backend/BackendStatusContext.d.ts.map +1 -0
- package/dist/src/contexts/backend/BackendStatusContext.js +36 -0
- package/dist/src/contexts/backend/BackendStatusContext.js.map +1 -0
- package/dist/src/contexts/command/CommandContext.d.ts +30 -0
- package/dist/src/contexts/command/CommandContext.d.ts.map +1 -0
- package/dist/src/contexts/command/CommandContext.js +75 -0
- package/dist/src/contexts/command/CommandContext.js.map +1 -0
- package/dist/src/contexts/command/PanelSlotsContext.d.ts +2 -0
- package/dist/src/contexts/command/PanelSlotsContext.d.ts.map +1 -0
- package/dist/src/contexts/command/PanelSlotsContext.js +2 -0
- package/dist/src/contexts/command/PanelSlotsContext.js.map +1 -0
- package/dist/src/contexts/command/PanelStackContext.d.ts +2 -0
- package/dist/src/contexts/command/PanelStackContext.d.ts.map +1 -0
- package/dist/src/contexts/command/PanelStackContext.js +2 -0
- package/dist/src/contexts/command/PanelStackContext.js.map +1 -0
- package/dist/src/contexts/command/SearchPanelContext.d.ts +55 -0
- package/dist/src/contexts/command/SearchPanelContext.d.ts.map +1 -0
- package/dist/src/contexts/command/SearchPanelContext.js +327 -0
- package/dist/src/contexts/command/SearchPanelContext.js.map +1 -0
- package/dist/src/contexts/config/AppConfigContext.d.ts +8 -0
- package/dist/src/contexts/config/AppConfigContext.d.ts.map +1 -0
- package/dist/src/contexts/config/AppConfigContext.js +21 -0
- package/dist/src/contexts/config/AppConfigContext.js.map +1 -0
- package/dist/src/contexts/help/HelpContext.d.ts +30 -0
- package/dist/src/contexts/help/HelpContext.d.ts.map +1 -0
- package/dist/src/contexts/help/HelpContext.js +73 -0
- package/dist/src/contexts/help/HelpContext.js.map +1 -0
- package/dist/src/contexts/index.d.ts +10 -0
- package/dist/src/contexts/index.d.ts.map +1 -0
- package/dist/src/contexts/index.js +10 -0
- package/dist/src/contexts/index.js.map +1 -0
- package/dist/src/contexts/navigation/NavigationContext.d.ts +23 -0
- package/dist/src/contexts/navigation/NavigationContext.d.ts.map +1 -0
- package/dist/src/contexts/navigation/NavigationContext.js +294 -0
- package/dist/src/contexts/navigation/NavigationContext.js.map +1 -0
- package/dist/src/contexts/navigation/NavigationRegistryContext.d.ts +9 -0
- package/dist/src/contexts/navigation/NavigationRegistryContext.d.ts.map +1 -0
- package/dist/src/contexts/navigation/NavigationRegistryContext.js +17 -0
- package/dist/src/contexts/navigation/NavigationRegistryContext.js.map +1 -0
- package/dist/src/contexts/scope/ScopeContext.d.ts +40 -0
- package/dist/src/contexts/scope/ScopeContext.d.ts.map +1 -0
- package/dist/src/contexts/scope/ScopeContext.js +141 -0
- package/dist/src/contexts/scope/ScopeContext.js.map +1 -0
- package/dist/src/contexts/scope/index.d.ts +3 -0
- package/dist/src/contexts/scope/index.d.ts.map +1 -0
- package/dist/src/contexts/scope/index.js +3 -0
- package/dist/src/contexts/scope/index.js.map +1 -0
- package/dist/src/contexts/scope/scopeRef.d.ts +10 -0
- package/dist/src/contexts/scope/scopeRef.d.ts.map +1 -0
- package/dist/src/contexts/scope/scopeRef.js +10 -0
- package/dist/src/contexts/scope/scopeRef.js.map +1 -0
- package/dist/src/contexts/sidebar/use-sidebar.d.ts +2 -0
- package/dist/src/contexts/sidebar/use-sidebar.d.ts.map +1 -0
- package/dist/src/contexts/sidebar/use-sidebar.js +2 -0
- package/dist/src/contexts/sidebar/use-sidebar.js.map +1 -0
- package/dist/src/contexts/theme/ThemeContext.d.ts +21 -0
- package/dist/src/contexts/theme/ThemeContext.d.ts.map +1 -0
- package/dist/src/contexts/theme/ThemeContext.js +79 -0
- package/dist/src/contexts/theme/ThemeContext.js.map +1 -0
- package/dist/src/create-app.d.ts +47 -0
- package/dist/src/create-app.d.ts.map +1 -0
- package/dist/src/create-app.js +242 -0
- package/dist/src/create-app.js.map +1 -0
- package/dist/src/dashboard/command/CommandDialog.d.ts +2 -0
- package/dist/src/dashboard/command/CommandDialog.d.ts.map +1 -0
- package/dist/src/dashboard/command/CommandDialog.js +18 -0
- package/dist/src/dashboard/command/CommandDialog.js.map +1 -0
- package/dist/src/dashboard/command/SearchPanelBody.d.ts +2 -0
- package/dist/src/dashboard/command/SearchPanelBody.d.ts.map +1 -0
- package/dist/src/dashboard/command/SearchPanelBody.js +178 -0
- package/dist/src/dashboard/command/SearchPanelBody.js.map +1 -0
- package/dist/src/dashboard/command/SearchPanelHeader.d.ts +2 -0
- package/dist/src/dashboard/command/SearchPanelHeader.d.ts.map +1 -0
- package/dist/src/dashboard/command/SearchPanelHeader.js +13 -0
- package/dist/src/dashboard/command/SearchPanelHeader.js.map +1 -0
- package/dist/src/dashboard/command/panels/GeneralPanel.d.ts +9 -0
- package/dist/src/dashboard/command/panels/GeneralPanel.d.ts.map +1 -0
- package/dist/src/dashboard/command/panels/GeneralPanel.js +12 -0
- package/dist/src/dashboard/command/panels/GeneralPanel.js.map +1 -0
- package/dist/src/dashboard/command/panels/NavigationPanel.d.ts +2 -0
- package/dist/src/dashboard/command/panels/NavigationPanel.d.ts.map +1 -0
- package/dist/src/dashboard/command/panels/NavigationPanel.js +74 -0
- package/dist/src/dashboard/command/panels/NavigationPanel.js.map +1 -0
- package/dist/src/dashboard/command/panels/PlaceholderPanel.d.ts +9 -0
- package/dist/src/dashboard/command/panels/PlaceholderPanel.d.ts.map +1 -0
- package/dist/src/dashboard/command/panels/PlaceholderPanel.js +12 -0
- package/dist/src/dashboard/command/panels/PlaceholderPanel.js.map +1 -0
- package/dist/src/dashboard/command/panels/ProfilePanel.d.ts +2 -0
- package/dist/src/dashboard/command/panels/ProfilePanel.d.ts.map +1 -0
- package/dist/src/dashboard/command/panels/ProfilePanel.js +133 -0
- package/dist/src/dashboard/command/panels/ProfilePanel.js.map +1 -0
- package/dist/src/dashboard/command/panels/SecurityPanel.d.ts +2 -0
- package/dist/src/dashboard/command/panels/SecurityPanel.d.ts.map +1 -0
- package/dist/src/dashboard/command/panels/SecurityPanel.js +237 -0
- package/dist/src/dashboard/command/panels/SecurityPanel.js.map +1 -0
- package/dist/src/dashboard/command/panels/ThemePanel.d.ts +2 -0
- package/dist/src/dashboard/command/panels/ThemePanel.d.ts.map +1 -0
- package/dist/src/dashboard/command/panels/ThemePanel.js +11 -0
- package/dist/src/dashboard/command/panels/ThemePanel.js.map +1 -0
- package/dist/src/dashboard/headers/MainHeader.d.ts +16 -0
- package/dist/src/dashboard/headers/MainHeader.d.ts.map +1 -0
- package/dist/src/dashboard/headers/MainHeader.js +16 -0
- package/dist/src/dashboard/headers/MainHeader.js.map +1 -0
- package/dist/src/dashboard/headers/MainHeaderDesktop.d.ts +4 -0
- package/dist/src/dashboard/headers/MainHeaderDesktop.d.ts.map +1 -0
- package/dist/src/dashboard/headers/MainHeaderDesktop.js +120 -0
- package/dist/src/dashboard/headers/MainHeaderDesktop.js.map +1 -0
- package/dist/src/dashboard/headers/MainHeaderMobile.d.ts +4 -0
- package/dist/src/dashboard/headers/MainHeaderMobile.d.ts.map +1 -0
- package/dist/src/dashboard/headers/MainHeaderMobile.js +14 -0
- package/dist/src/dashboard/headers/MainHeaderMobile.js.map +1 -0
- package/dist/src/dashboard/headers/NotificationsPopover.d.ts +2 -0
- package/dist/src/dashboard/headers/NotificationsPopover.d.ts.map +1 -0
- package/dist/src/dashboard/headers/NotificationsPopover.js +14 -0
- package/dist/src/dashboard/headers/NotificationsPopover.js.map +1 -0
- package/dist/src/dashboard/headers/ProfilePopover.d.ts +2 -0
- package/dist/src/dashboard/headers/ProfilePopover.d.ts.map +1 -0
- package/dist/src/dashboard/headers/ProfilePopover.js +83 -0
- package/dist/src/dashboard/headers/ProfilePopover.js.map +1 -0
- package/dist/src/dashboard/headers/ToolHeader.d.ts +2 -0
- package/dist/src/dashboard/headers/ToolHeader.d.ts.map +1 -0
- package/dist/src/dashboard/headers/ToolHeader.js +16 -0
- package/dist/src/dashboard/headers/ToolHeader.js.map +1 -0
- package/dist/src/dashboard/help/HelpPanel.d.ts +3 -0
- package/dist/src/dashboard/help/HelpPanel.d.ts.map +1 -0
- package/dist/src/dashboard/help/HelpPanel.js +451 -0
- package/dist/src/dashboard/help/HelpPanel.js.map +1 -0
- package/dist/src/dashboard/index.d.ts +16 -0
- package/dist/src/dashboard/index.d.ts.map +1 -0
- package/dist/src/dashboard/index.js +16 -0
- package/dist/src/dashboard/index.js.map +1 -0
- package/dist/src/dashboard/layout/DashboardLayout.d.ts +23 -0
- package/dist/src/dashboard/layout/DashboardLayout.d.ts.map +1 -0
- package/dist/src/dashboard/layout/DashboardLayout.js +15 -0
- package/dist/src/dashboard/layout/DashboardLayout.js.map +1 -0
- package/dist/src/dashboard/layout/DashboardSidebarContent.d.ts +2 -0
- package/dist/src/dashboard/layout/DashboardSidebarContent.d.ts.map +1 -0
- package/dist/src/dashboard/layout/DashboardSidebarContent.js +33 -0
- package/dist/src/dashboard/layout/DashboardSidebarContent.js.map +1 -0
- package/dist/src/dashboard/layout/SidebarDrawer.d.ts +2 -0
- package/dist/src/dashboard/layout/SidebarDrawer.d.ts.map +1 -0
- package/dist/src/dashboard/layout/SidebarDrawer.js +33 -0
- package/dist/src/dashboard/layout/SidebarDrawer.js.map +1 -0
- package/dist/src/dashboard/layout/ToolSidebar.d.ts +9 -0
- package/dist/src/dashboard/layout/ToolSidebar.d.ts.map +1 -0
- package/dist/src/dashboard/layout/ToolSidebar.js +11 -0
- package/dist/src/dashboard/layout/ToolSidebar.js.map +1 -0
- package/dist/src/dashboard/navigation/IconRail.d.ts +11 -0
- package/dist/src/dashboard/navigation/IconRail.d.ts.map +1 -0
- package/dist/src/dashboard/navigation/IconRail.js +47 -0
- package/dist/src/dashboard/navigation/IconRail.js.map +1 -0
- package/dist/src/dashboard/navigation/MoreToolsPopover.d.ts +2 -0
- package/dist/src/dashboard/navigation/MoreToolsPopover.d.ts.map +1 -0
- package/dist/src/dashboard/navigation/MoreToolsPopover.js +22 -0
- package/dist/src/dashboard/navigation/MoreToolsPopover.js.map +1 -0
- package/dist/src/dashboard/navigation/icon-rail.d.ts +8 -0
- package/dist/src/dashboard/navigation/icon-rail.d.ts.map +1 -0
- package/dist/src/dashboard/navigation/icon-rail.js +36 -0
- package/dist/src/dashboard/navigation/icon-rail.js.map +1 -0
- package/dist/src/dashboard/navigation/use-active-tool.d.ts +2 -0
- package/dist/src/dashboard/navigation/use-active-tool.d.ts.map +1 -0
- package/dist/src/dashboard/navigation/use-active-tool.js +41 -0
- package/dist/src/dashboard/navigation/use-active-tool.js.map +1 -0
- package/dist/src/dashboard/settings/ThemeSettings.d.ts +2 -0
- package/dist/src/dashboard/settings/ThemeSettings.d.ts.map +1 -0
- package/dist/src/dashboard/settings/ThemeSettings.js +49 -0
- package/dist/src/dashboard/settings/ThemeSettings.js.map +1 -0
- package/dist/src/guards/SetupGate.d.ts +9 -0
- package/dist/src/guards/SetupGate.d.ts.map +1 -0
- package/dist/src/guards/SetupGate.js +30 -0
- package/dist/src/guards/SetupGate.js.map +1 -0
- package/dist/src/guards/UnifiedGuard.d.ts +32 -0
- package/dist/src/guards/UnifiedGuard.d.ts.map +1 -0
- package/dist/src/guards/UnifiedGuard.js +258 -0
- package/dist/src/guards/UnifiedGuard.js.map +1 -0
- package/dist/src/guards/index.d.ts +3 -0
- package/dist/src/guards/index.d.ts.map +1 -0
- package/dist/src/guards/index.js +3 -0
- package/dist/src/guards/index.js.map +1 -0
- package/dist/src/hooks/index.d.ts +9 -0
- package/dist/src/hooks/index.d.ts.map +1 -0
- package/dist/src/hooks/index.js +9 -0
- package/dist/src/hooks/index.js.map +1 -0
- package/dist/src/hooks/useCheckAccess.d.ts +16 -0
- package/dist/src/hooks/useCheckAccess.d.ts.map +1 -0
- package/dist/src/hooks/useCheckAccess.js +25 -0
- package/dist/src/hooks/useCheckAccess.js.map +1 -0
- package/dist/src/hooks/useCreateScope.d.ts +42 -0
- package/dist/src/hooks/useCreateScope.d.ts.map +1 -0
- package/dist/src/hooks/useCreateScope.js +28 -0
- package/dist/src/hooks/useCreateScope.js.map +1 -0
- package/dist/src/hooks/useInvitations.d.ts +82 -0
- package/dist/src/hooks/useInvitations.d.ts.map +1 -0
- package/dist/src/hooks/useInvitations.js +39 -0
- package/dist/src/hooks/useInvitations.js.map +1 -0
- package/dist/src/hooks/useJoinCode.d.ts +52 -0
- package/dist/src/hooks/useJoinCode.d.ts.map +1 -0
- package/dist/src/hooks/useJoinCode.js +37 -0
- package/dist/src/hooks/useJoinCode.js.map +1 -0
- package/dist/src/hooks/usePreference.d.ts +20 -0
- package/dist/src/hooks/usePreference.d.ts.map +1 -0
- package/dist/src/hooks/usePreference.js +132 -0
- package/dist/src/hooks/usePreference.js.map +1 -0
- package/dist/src/hooks/useScopeList.d.ts +32 -0
- package/dist/src/hooks/useScopeList.d.ts.map +1 -0
- package/dist/src/hooks/useScopeList.js +24 -0
- package/dist/src/hooks/useScopeList.js.map +1 -0
- package/dist/src/hooks/useScopeMenuPolicy.d.ts +23 -0
- package/dist/src/hooks/useScopeMenuPolicy.d.ts.map +1 -0
- package/dist/src/hooks/useScopeMenuPolicy.js +59 -0
- package/dist/src/hooks/useScopeMenuPolicy.js.map +1 -0
- package/dist/src/hooks/useScopePermissions.d.ts +9 -0
- package/dist/src/hooks/useScopePermissions.d.ts.map +1 -0
- package/dist/src/hooks/useScopePermissions.js +84 -0
- package/dist/src/hooks/useScopePermissions.js.map +1 -0
- package/dist/src/lib/api-client.d.ts +27 -0
- package/dist/src/lib/api-client.d.ts.map +1 -0
- package/dist/src/lib/api-client.js +45 -0
- package/dist/src/lib/api-client.js.map +1 -0
- package/dist/src/lib/backend-status.d.ts +14 -0
- package/dist/src/lib/backend-status.d.ts.map +1 -0
- package/dist/src/lib/backend-status.js +27 -0
- package/dist/src/lib/backend-status.js.map +1 -0
- package/dist/src/lib/config.d.ts +71 -0
- package/dist/src/lib/config.d.ts.map +1 -0
- package/dist/src/lib/config.js +7 -0
- package/dist/src/lib/config.js.map +1 -0
- package/dist/src/lib/icon-resolver.d.ts +2 -0
- package/dist/src/lib/icon-resolver.d.ts.map +1 -0
- package/dist/src/lib/icon-resolver.js +2 -0
- package/dist/src/lib/icon-resolver.js.map +1 -0
- package/dist/src/lib/index.d.ts +13 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +13 -0
- package/dist/src/lib/index.js.map +1 -0
- package/dist/src/lib/navigation-tools.d.ts +27 -0
- package/dist/src/lib/navigation-tools.d.ts.map +1 -0
- package/dist/src/lib/navigation-tools.js +49 -0
- package/dist/src/lib/navigation-tools.js.map +1 -0
- package/dist/src/lib/onboarding-registry.d.ts +14 -0
- package/dist/src/lib/onboarding-registry.d.ts.map +1 -0
- package/dist/src/lib/onboarding-registry.js +12 -0
- package/dist/src/lib/onboarding-registry.js.map +1 -0
- package/dist/src/lib/permissions-store.d.ts +12 -0
- package/dist/src/lib/permissions-store.d.ts.map +1 -0
- package/dist/src/lib/permissions-store.js +12 -0
- package/dist/src/lib/permissions-store.js.map +1 -0
- package/dist/src/lib/platform-api.d.ts +3527 -0
- package/dist/src/lib/platform-api.d.ts.map +1 -0
- package/dist/src/lib/platform-api.js +26 -0
- package/dist/src/lib/platform-api.js.map +1 -0
- package/dist/src/lib/resolve-redirect.d.ts +36 -0
- package/dist/src/lib/resolve-redirect.d.ts.map +1 -0
- package/dist/src/lib/resolve-redirect.js +91 -0
- package/dist/src/lib/resolve-redirect.js.map +1 -0
- package/dist/src/lib/scope-menu-policy.d.ts +13 -0
- package/dist/src/lib/scope-menu-policy.d.ts.map +1 -0
- package/dist/src/lib/scope-menu-policy.js +15 -0
- package/dist/src/lib/scope-menu-policy.js.map +1 -0
- package/dist/src/lib/scope-query-keys.d.ts +38 -0
- package/dist/src/lib/scope-query-keys.d.ts.map +1 -0
- package/dist/src/lib/scope-query-keys.js +35 -0
- package/dist/src/lib/scope-query-keys.js.map +1 -0
- package/dist/src/lib/scopeLink.d.ts +24 -0
- package/dist/src/lib/scopeLink.d.ts.map +1 -0
- package/dist/src/lib/scopeLink.js +57 -0
- package/dist/src/lib/scopeLink.js.map +1 -0
- package/dist/src/lib/tool-api-types.d.ts +40 -0
- package/dist/src/lib/tool-api-types.d.ts.map +1 -0
- package/dist/src/lib/tool-api-types.js +23 -0
- package/dist/src/lib/tool-api-types.js.map +1 -0
- package/dist/src/lib/types.d.ts +122 -0
- package/dist/src/lib/types.d.ts.map +1 -0
- package/dist/src/lib/types.js +47 -0
- package/dist/src/lib/types.js.map +1 -0
- package/dist/src/lib/withDashboardChrome.d.ts +18 -0
- package/dist/src/lib/withDashboardChrome.d.ts.map +1 -0
- package/dist/src/lib/withDashboardChrome.js +46 -0
- package/dist/src/lib/withDashboardChrome.js.map +1 -0
- package/dist/src/onboarding/CreateScopeWizardStep.d.ts +14 -0
- package/dist/src/onboarding/CreateScopeWizardStep.d.ts.map +1 -0
- package/dist/src/onboarding/CreateScopeWizardStep.js +109 -0
- package/dist/src/onboarding/CreateScopeWizardStep.js.map +1 -0
- package/dist/src/onboarding/ResolveStep.d.ts +17 -0
- package/dist/src/onboarding/ResolveStep.d.ts.map +1 -0
- package/dist/src/onboarding/ResolveStep.js +101 -0
- package/dist/src/onboarding/ResolveStep.js.map +1 -0
- package/dist/src/onboarding/StepProps.d.ts +10 -0
- package/dist/src/onboarding/StepProps.d.ts.map +1 -0
- package/dist/src/onboarding/StepProps.js +2 -0
- package/dist/src/onboarding/StepProps.js.map +1 -0
- package/dist/src/onboarding/WizardContext.d.ts +20 -0
- package/dist/src/onboarding/WizardContext.d.ts.map +1 -0
- package/dist/src/onboarding/WizardContext.js +17 -0
- package/dist/src/onboarding/WizardContext.js.map +1 -0
- package/dist/src/onboarding/WizardPage.d.ts +18 -0
- package/dist/src/onboarding/WizardPage.d.ts.map +1 -0
- package/dist/src/onboarding/WizardPage.js +9 -0
- package/dist/src/onboarding/WizardPage.js.map +1 -0
- package/dist/src/onboarding/WizardShell.d.ts +43 -0
- package/dist/src/onboarding/WizardShell.d.ts.map +1 -0
- package/dist/src/onboarding/WizardShell.js +162 -0
- package/dist/src/onboarding/WizardShell.js.map +1 -0
- package/dist/src/onboarding/index.d.ts +11 -0
- package/dist/src/onboarding/index.d.ts.map +1 -0
- package/dist/src/onboarding/index.js +8 -0
- package/dist/src/onboarding/index.js.map +1 -0
- package/dist/src/onboarding/sortSteps.d.ts +15 -0
- package/dist/src/onboarding/sortSteps.d.ts.map +1 -0
- package/dist/src/onboarding/sortSteps.js +93 -0
- package/dist/src/onboarding/sortSteps.js.map +1 -0
- package/dist/src/onboarding/steps/AddPasskeyStep.d.ts +3 -0
- package/dist/src/onboarding/steps/AddPasskeyStep.d.ts.map +1 -0
- package/dist/src/onboarding/steps/AddPasskeyStep.js +54 -0
- package/dist/src/onboarding/steps/AddPasskeyStep.js.map +1 -0
- package/dist/src/onboarding/steps/SetupWizardPage.d.ts +2 -0
- package/dist/src/onboarding/steps/SetupWizardPage.d.ts.map +1 -0
- package/dist/src/onboarding/steps/SetupWizardPage.js +93 -0
- package/dist/src/onboarding/steps/SetupWizardPage.js.map +1 -0
- package/dist/src/onboarding/steps/setup-steps.d.ts +6 -0
- package/dist/src/onboarding/steps/setup-steps.d.ts.map +1 -0
- package/dist/src/onboarding/steps/setup-steps.js +75 -0
- package/dist/src/onboarding/steps/setup-steps.js.map +1 -0
- package/dist/src/pages/AcceptInvitePage.d.ts +2 -0
- package/dist/src/pages/AcceptInvitePage.d.ts.map +1 -0
- package/dist/src/pages/AcceptInvitePage.js +103 -0
- package/dist/src/pages/AcceptInvitePage.js.map +1 -0
- package/dist/src/pages/BackendErrorPage.d.ts +6 -0
- package/dist/src/pages/BackendErrorPage.d.ts.map +1 -0
- package/dist/src/pages/BackendErrorPage.js +6 -0
- package/dist/src/pages/BackendErrorPage.js.map +1 -0
- package/dist/src/pages/ContextSelectionPage.d.ts +2 -0
- package/dist/src/pages/ContextSelectionPage.d.ts.map +1 -0
- package/dist/src/pages/ContextSelectionPage.js +166 -0
- package/dist/src/pages/ContextSelectionPage.js.map +1 -0
- package/dist/src/pages/DefaultCreateScopePage.d.ts +17 -0
- package/dist/src/pages/DefaultCreateScopePage.d.ts.map +1 -0
- package/dist/src/pages/DefaultCreateScopePage.js +50 -0
- package/dist/src/pages/DefaultCreateScopePage.js.map +1 -0
- package/dist/src/pages/ForgotPasswordPage.d.ts +2 -0
- package/dist/src/pages/ForgotPasswordPage.d.ts.map +1 -0
- package/dist/src/pages/ForgotPasswordPage.js +44 -0
- package/dist/src/pages/ForgotPasswordPage.js.map +1 -0
- package/dist/src/pages/GetStartedPage.d.ts +6 -0
- package/dist/src/pages/GetStartedPage.d.ts.map +1 -0
- package/dist/src/pages/GetStartedPage.js +49 -0
- package/dist/src/pages/GetStartedPage.js.map +1 -0
- package/dist/src/pages/InviteErrorPage.d.ts +2 -0
- package/dist/src/pages/InviteErrorPage.d.ts.map +1 -0
- package/dist/src/pages/InviteErrorPage.js +42 -0
- package/dist/src/pages/InviteErrorPage.js.map +1 -0
- package/dist/src/pages/LoginPage.d.ts +2 -0
- package/dist/src/pages/LoginPage.d.ts.map +1 -0
- package/dist/src/pages/LoginPage.js +63 -0
- package/dist/src/pages/LoginPage.js.map +1 -0
- package/dist/src/pages/NoAccessPage.d.ts +2 -0
- package/dist/src/pages/NoAccessPage.d.ts.map +1 -0
- package/dist/src/pages/NoAccessPage.js +35 -0
- package/dist/src/pages/NoAccessPage.js.map +1 -0
- package/dist/src/pages/NotFoundPage.d.ts +2 -0
- package/dist/src/pages/NotFoundPage.d.ts.map +1 -0
- package/dist/src/pages/NotFoundPage.js +8 -0
- package/dist/src/pages/NotFoundPage.js.map +1 -0
- package/dist/src/pages/PostLoginResolver.d.ts +9 -0
- package/dist/src/pages/PostLoginResolver.d.ts.map +1 -0
- package/dist/src/pages/PostLoginResolver.js +50 -0
- package/dist/src/pages/PostLoginResolver.js.map +1 -0
- package/dist/src/pages/ProfilePage.d.ts +2 -0
- package/dist/src/pages/ProfilePage.d.ts.map +1 -0
- package/dist/src/pages/ProfilePage.js +353 -0
- package/dist/src/pages/ProfilePage.js.map +1 -0
- package/dist/src/pages/ResetPasswordPage.d.ts +2 -0
- package/dist/src/pages/ResetPasswordPage.d.ts.map +1 -0
- package/dist/src/pages/ResetPasswordPage.js +55 -0
- package/dist/src/pages/ResetPasswordPage.js.map +1 -0
- package/dist/src/pages/SignupPage.d.ts +2 -0
- package/dist/src/pages/SignupPage.d.ts.map +1 -0
- package/dist/src/pages/SignupPage.js +54 -0
- package/dist/src/pages/SignupPage.js.map +1 -0
- package/dist/src/pages/index.d.ts +15 -0
- package/dist/src/pages/index.d.ts.map +1 -0
- package/dist/src/pages/index.js +15 -0
- package/dist/src/pages/index.js.map +1 -0
- package/dist/src/platform-surface.d.ts +26 -0
- package/dist/src/platform-surface.d.ts.map +1 -0
- package/dist/src/platform-surface.js +302 -0
- package/dist/src/platform-surface.js.map +1 -0
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +2 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- 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":"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"}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"InviteErrorPage.d.ts","sourceRoot":"","sources":["../../../src/pages/InviteErrorPage.tsx"],"names":[],"mappings":"AAsCA,wBAAgB,eAAe,4CA0B9B"}
|