@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,137 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect, useRef } from "react";
|
|
3
|
+
import { useNavigate } from "@tanstack/react-router";
|
|
4
|
+
import { useQueryClient } from "@ydtb/tk-scope-query-client";
|
|
5
|
+
import { checkSlugAvailability, createScope } from "../../hooks/useCreateScope.js";
|
|
6
|
+
import { scopeQueryKeys } from "../../lib/scope-query-keys.js";
|
|
7
|
+
import { scopeLink } from "@ydtb/tk-scope/client";
|
|
8
|
+
import { queryScopeType } from "@ydtb/tk-scope/client";
|
|
9
|
+
import { Loader2, Check, X } from "lucide-react";
|
|
10
|
+
import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@ydtb/tk-scope-ui/components/dialog";
|
|
11
|
+
import { useScopeLabel } from "@ydtb/tk-scope/client";
|
|
12
|
+
import { slugify } from "@ydtb/tk-scope-lib/slug";
|
|
13
|
+
export function CreateScopeDialog({ scopeType, parentScopeId, open, onOpenChange, }) {
|
|
14
|
+
const navigate = useNavigate();
|
|
15
|
+
const queryClient = useQueryClient();
|
|
16
|
+
const label = useScopeLabel(scopeType);
|
|
17
|
+
const [name, setName] = useState("");
|
|
18
|
+
const [slug, setSlug] = useState("");
|
|
19
|
+
const [slugEdited, setSlugEdited] = useState(false);
|
|
20
|
+
const [submitting, setSubmitting] = useState(false);
|
|
21
|
+
const [error, setError] = useState(null);
|
|
22
|
+
const [slugStatus, setSlugStatus] = useState("idle");
|
|
23
|
+
const checkTimerRef = useRef(null);
|
|
24
|
+
const lastCheckedRef = useRef("");
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
if (open) {
|
|
27
|
+
setName("");
|
|
28
|
+
setSlug("");
|
|
29
|
+
setSlugEdited(false);
|
|
30
|
+
setSubmitting(false);
|
|
31
|
+
setError(null);
|
|
32
|
+
setSlugStatus("idle");
|
|
33
|
+
lastCheckedRef.current = "";
|
|
34
|
+
}
|
|
35
|
+
}, [open]);
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
if (!slugEdited) {
|
|
38
|
+
setSlug(slugify(name));
|
|
39
|
+
}
|
|
40
|
+
}, [name, slugEdited]);
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
if (slug.length < 3) {
|
|
43
|
+
setSlugStatus("idle");
|
|
44
|
+
lastCheckedRef.current = "";
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (slug === lastCheckedRef.current)
|
|
48
|
+
return;
|
|
49
|
+
setSlugStatus("checking");
|
|
50
|
+
if (checkTimerRef.current)
|
|
51
|
+
clearTimeout(checkTimerRef.current);
|
|
52
|
+
checkTimerRef.current = setTimeout(async () => {
|
|
53
|
+
try {
|
|
54
|
+
const available = await checkSlugAvailability(scopeType, slug);
|
|
55
|
+
lastCheckedRef.current = slug;
|
|
56
|
+
setSlugStatus(available ? "available" : "taken");
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
lastCheckedRef.current = slug;
|
|
60
|
+
setSlugStatus("taken");
|
|
61
|
+
}
|
|
62
|
+
}, 400);
|
|
63
|
+
return () => {
|
|
64
|
+
if (checkTimerRef.current)
|
|
65
|
+
clearTimeout(checkTimerRef.current);
|
|
66
|
+
};
|
|
67
|
+
}, [slug, scopeType]);
|
|
68
|
+
const isSlugTaken = slugStatus === "taken";
|
|
69
|
+
const handleSlugChange = (value) => {
|
|
70
|
+
setSlugEdited(true);
|
|
71
|
+
setSlug(value
|
|
72
|
+
.toLowerCase()
|
|
73
|
+
.replace(/[^a-z0-9-]+/g, "-")
|
|
74
|
+
.replace(/^-|-$/g, "")
|
|
75
|
+
.slice(0, 50));
|
|
76
|
+
};
|
|
77
|
+
const isValid = name.trim().length > 0 && slug.length >= 3 && slug.length <= 50;
|
|
78
|
+
const handleSubmit = async (e) => {
|
|
79
|
+
e.preventDefault();
|
|
80
|
+
if (!isValid || submitting || isSlugTaken)
|
|
81
|
+
return;
|
|
82
|
+
setSubmitting(true);
|
|
83
|
+
setError(null);
|
|
84
|
+
try {
|
|
85
|
+
const result = await createScope({
|
|
86
|
+
type: scopeType,
|
|
87
|
+
name: name.trim(),
|
|
88
|
+
slug,
|
|
89
|
+
parentScopeId,
|
|
90
|
+
});
|
|
91
|
+
await queryClient.refetchQueries({ queryKey: scopeQueryKeys.list(scopeType) });
|
|
92
|
+
await queryClient.invalidateQueries();
|
|
93
|
+
onOpenChange(false);
|
|
94
|
+
// Navigate to the new scope's default route
|
|
95
|
+
const config = queryScopeType(scopeType);
|
|
96
|
+
const defaultRoute = config?.defaultRoute ?? "/dashboard";
|
|
97
|
+
const newScopeId = result?.scope?.id;
|
|
98
|
+
if (newScopeId) {
|
|
99
|
+
navigate({
|
|
100
|
+
to: scopeLink(defaultRoute, { scope: scopeType, scopeId: newScopeId }),
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
navigate({ to: "/dashboard" });
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
const message = err instanceof Error ? err.message : `Failed to create ${label.singular.toLowerCase()}`;
|
|
109
|
+
if (message.toLowerCase().includes("slug") &&
|
|
110
|
+
(message.toLowerCase().includes("taken") ||
|
|
111
|
+
message.toLowerCase().includes("exists") ||
|
|
112
|
+
message.toLowerCase().includes("unique") ||
|
|
113
|
+
message.toLowerCase().includes("duplicate"))) {
|
|
114
|
+
setError("This slug is already taken. Please choose a different one.");
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
setError(message);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
finally {
|
|
121
|
+
setSubmitting(false);
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { className: "sm:max-w-md", children: [_jsxs(DialogHeader, { children: [_jsxs(DialogTitle, { children: ["Create ", label.singular === label.plural ? label.singular : `a ${label.singular}`] }), _jsxs(DialogDescription, { children: ["Set up a new ", label.singular.toLowerCase(), "."] })] }), _jsxs("form", { onSubmit: handleSubmit, className: "space-y-4 py-1", children: [_jsxs("div", { className: "space-y-1.5", children: [_jsxs("label", { htmlFor: "scope-name", className: "text-sm font-medium", style: { color: "var(--color-foreground)" }, children: [label.singular, " Name"] }), _jsx("input", { id: "scope-name", type: "text", required: true, autoFocus: true, value: name, onChange: (e) => setName(e.target.value), placeholder: `My ${label.singular}`, className: "w-full h-9 px-3 rounded-md border text-sm bg-transparent outline-none focus:ring-2 focus:ring-primary/30 focus:border-primary transition-colors", style: {
|
|
125
|
+
borderColor: "var(--color-border)",
|
|
126
|
+
color: "var(--color-foreground)",
|
|
127
|
+
} })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx("label", { htmlFor: "scope-slug", className: "text-sm font-medium", style: { color: "var(--color-foreground)" }, children: "Slug" }), _jsx("input", { id: "scope-slug", type: "text", required: true, value: slug, onChange: (e) => handleSlugChange(e.target.value), placeholder: `my-${label.singular.toLowerCase()}`, className: `w-full h-9 px-3 rounded-md border text-sm bg-transparent outline-none font-mono focus:ring-2 focus:ring-primary/30 focus:border-primary transition-colors ${error || isSlugTaken
|
|
128
|
+
? "border-destructive focus:ring-destructive/30 focus:border-destructive"
|
|
129
|
+
: ""}`, style: {
|
|
130
|
+
borderColor: error || isSlugTaken ? undefined : "var(--color-border)",
|
|
131
|
+
color: "var(--color-foreground)",
|
|
132
|
+
} }), error && _jsx("p", { className: "text-xs text-destructive", children: error }), !error && isSlugTaken && (_jsxs("p", { className: "text-xs text-destructive inline-flex items-center gap-1", children: [_jsx(X, { className: "h-3 w-3" }), "This slug is already taken."] })), !error && slugStatus === "checking" && (_jsxs("p", { className: "text-xs inline-flex items-center gap-1", style: { color: "var(--color-muted-foreground)" }, children: [_jsx(Loader2, { className: "h-3 w-3 animate-spin" }), "Checking availability..."] })), !error && slugStatus === "available" && (_jsxs("p", { className: "text-xs inline-flex items-center gap-1 text-emerald-600", children: [_jsx(Check, { className: "h-3 w-3" }), "Slug is available."] })), !error && slugStatus === "idle" && slug.length > 0 && slug.length < 3 && (_jsx("p", { className: "text-xs", style: { color: "var(--color-muted-foreground)" }, children: "Slug must be at least 3 characters." }))] }), _jsxs(DialogFooter, { children: [_jsx("button", { type: "button", onClick: () => onOpenChange(false), disabled: submitting, className: "border rounded-lg h-9 px-4 text-sm font-medium transition-colors hover:bg-muted disabled:opacity-50", style: {
|
|
133
|
+
borderColor: "var(--color-border)",
|
|
134
|
+
color: "var(--color-foreground)",
|
|
135
|
+
}, children: "Cancel" }), _jsxs("button", { type: "submit", disabled: !isValid || submitting || isSlugTaken, className: "bg-primary text-primary-foreground rounded-lg h-9 px-4 text-sm font-medium transition-colors hover:bg-primary/90 disabled:opacity-50 inline-flex items-center gap-2", children: [submitting && _jsx(Loader2, { className: "h-4 w-4 animate-spin" }), "Create"] })] })] })] }) }));
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=CreateScopeDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreateScopeDialog.js","sourceRoot":"","sources":["../../../../src/components/scope/CreateScopeDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface JoinScopeDialogProps {
|
|
2
|
+
scopeType: string;
|
|
3
|
+
open: boolean;
|
|
4
|
+
onOpenChange: (open: boolean) => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function JoinScopeDialog({ scopeType, open, onOpenChange }: JoinScopeDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=JoinScopeDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JoinScopeDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/scope/JoinScopeDialog.tsx"],"names":[],"mappings":"AAqCA,UAAU,oBAAoB;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;CACtC;AAED,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,oBAAoB,2CA2NtF"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect } from "react";
|
|
3
|
+
import { useNavigate } from "@tanstack/react-router";
|
|
4
|
+
import { validateJoinCode, redeemJoinCode } from "../../hooks/useJoinCode.js";
|
|
5
|
+
import { Loader2, ArrowLeft } from "lucide-react";
|
|
6
|
+
import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@ydtb/tk-scope-ui/components/dialog";
|
|
7
|
+
import { useScopeLabel } from "@ydtb/tk-scope/client";
|
|
8
|
+
const avatarColors = [
|
|
9
|
+
"bg-indigo-600",
|
|
10
|
+
"bg-emerald-600",
|
|
11
|
+
"bg-amber-600",
|
|
12
|
+
"bg-rose-600",
|
|
13
|
+
"bg-violet-600",
|
|
14
|
+
"bg-sky-600",
|
|
15
|
+
];
|
|
16
|
+
function getColorFromName(name) {
|
|
17
|
+
let hash = 0;
|
|
18
|
+
for (let i = 0; i < name.length; i++) {
|
|
19
|
+
hash = name.charCodeAt(i) + ((hash << 5) - hash);
|
|
20
|
+
}
|
|
21
|
+
return avatarColors[Math.abs(hash) % avatarColors.length] ?? avatarColors[0];
|
|
22
|
+
}
|
|
23
|
+
export function JoinScopeDialog({ scopeType, open, onOpenChange }) {
|
|
24
|
+
const navigate = useNavigate();
|
|
25
|
+
const label = useScopeLabel(scopeType);
|
|
26
|
+
const [step, setStep] = useState(1);
|
|
27
|
+
const [code, setCode] = useState("");
|
|
28
|
+
const [validating, setValidating] = useState(false);
|
|
29
|
+
const [joining, setJoining] = useState(false);
|
|
30
|
+
const [error, setError] = useState(null);
|
|
31
|
+
const [validatedScope, setValidatedScope] = useState(null);
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
if (open) {
|
|
34
|
+
setStep(1);
|
|
35
|
+
setCode("");
|
|
36
|
+
setValidating(false);
|
|
37
|
+
setJoining(false);
|
|
38
|
+
setError(null);
|
|
39
|
+
setValidatedScope(null);
|
|
40
|
+
}
|
|
41
|
+
}, [open]);
|
|
42
|
+
const handleCodeChange = (value) => {
|
|
43
|
+
const cleaned = value
|
|
44
|
+
.toUpperCase()
|
|
45
|
+
.replace(/[^A-Z0-9]/g, "")
|
|
46
|
+
.slice(0, 9);
|
|
47
|
+
setCode(cleaned);
|
|
48
|
+
setError(null);
|
|
49
|
+
};
|
|
50
|
+
const handleValidate = async () => {
|
|
51
|
+
if (code.length !== 9 || validating)
|
|
52
|
+
return;
|
|
53
|
+
setValidating(true);
|
|
54
|
+
setError(null);
|
|
55
|
+
try {
|
|
56
|
+
const data = await validateJoinCode(code);
|
|
57
|
+
if (data.valid && data.scope) {
|
|
58
|
+
setValidatedScope(data.scope);
|
|
59
|
+
setStep(2);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
setError(data.error ?? "Invalid or expired code");
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
setError("Invalid or expired code");
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
setValidating(false);
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
const handleJoin = async () => {
|
|
73
|
+
if (!validatedScope || joining)
|
|
74
|
+
return;
|
|
75
|
+
setJoining(true);
|
|
76
|
+
try {
|
|
77
|
+
await redeemJoinCode(code);
|
|
78
|
+
onOpenChange(false);
|
|
79
|
+
navigate({ to: "/dashboard" });
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
setError(`Failed to join ${label.singular.toLowerCase()}. Please try again.`);
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
setJoining(false);
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
const handleBack = () => {
|
|
89
|
+
setStep(1);
|
|
90
|
+
setError(null);
|
|
91
|
+
};
|
|
92
|
+
const handleKeyDown = (e) => {
|
|
93
|
+
if (e.key === "Enter" && code.length === 9 && !validating) {
|
|
94
|
+
e.preventDefault();
|
|
95
|
+
handleValidate();
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
const articleLabel = label.singular.toLowerCase();
|
|
99
|
+
return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { className: "sm:max-w-md", children: [_jsxs(DialogHeader, { children: [_jsxs(DialogTitle, { children: ["Join ", label.singular === label.plural ? label.singular : `a ${label.singular}`] }), _jsx(DialogDescription, { children: step === 1
|
|
100
|
+
? `Enter the join code provided by the ${articleLabel}.`
|
|
101
|
+
: `Review the ${articleLabel} before joining.` })] }), step === 1 ? (_jsxs("div", { className: "space-y-4 py-1", children: [_jsxs("div", { className: "space-y-1.5", children: [_jsx("label", { htmlFor: "join-code", className: "text-sm font-medium", style: { color: "var(--color-foreground)" }, children: "Enter your join code" }), _jsx("input", { id: "join-code", type: "text", value: code, onChange: (e) => handleCodeChange(e.target.value), onKeyDown: handleKeyDown, placeholder: "ABC123DEF", autoFocus: true, className: `w-full h-11 px-3 rounded-md border text-sm bg-transparent outline-none font-mono text-center tracking-[0.25em] uppercase focus:ring-2 focus:ring-primary/30 focus:border-primary transition-colors ${error
|
|
102
|
+
? "border-destructive focus:ring-destructive/30 focus:border-destructive"
|
|
103
|
+
: ""}`, style: {
|
|
104
|
+
borderColor: error ? undefined : "var(--color-border)",
|
|
105
|
+
color: "var(--color-foreground)",
|
|
106
|
+
fontSize: "1rem",
|
|
107
|
+
} }), error && _jsx("p", { className: "text-xs text-destructive", children: error })] }), _jsxs(DialogFooter, { children: [_jsx("button", { type: "button", onClick: () => onOpenChange(false), disabled: validating, className: "border rounded-lg h-9 px-4 text-sm font-medium transition-colors hover:bg-muted disabled:opacity-50", style: {
|
|
108
|
+
borderColor: "var(--color-border)",
|
|
109
|
+
color: "var(--color-foreground)",
|
|
110
|
+
}, children: "Cancel" }), _jsxs("button", { type: "button", onClick: handleValidate, disabled: code.length !== 9 || validating, className: "bg-primary text-primary-foreground rounded-lg h-9 px-4 text-sm font-medium transition-colors hover:bg-primary/90 disabled:opacity-50 inline-flex items-center gap-2", children: [validating && _jsx(Loader2, { className: "h-4 w-4 animate-spin" }), "Validate"] })] })] })) : (_jsxs("div", { className: "space-y-4 py-1", children: [validatedScope && (_jsxs("div", { className: "flex items-center gap-3 rounded-lg border p-4", style: { borderColor: "var(--color-border)" }, children: [validatedScope.logo ? (_jsx("img", { src: validatedScope.logo, alt: validatedScope.name, className: "w-12 h-12 rounded-lg object-cover shrink-0" })) : (_jsx("div", { className: `flex items-center justify-center w-12 h-12 rounded-lg text-white text-lg font-bold shrink-0 ${getColorFromName(validatedScope.name)}`, children: validatedScope.name.charAt(0).toUpperCase() })), _jsx("div", { className: "min-w-0", children: _jsx("p", { className: "text-sm font-semibold truncate", style: { color: "var(--color-foreground)" }, children: validatedScope.name }) })] })), _jsxs("p", { className: "text-sm", style: { color: "var(--color-foreground)" }, children: [_jsx("strong", { children: validatedScope?.name }), " will have full access to this scope. You will be able to disconnect at any time."] }), error && _jsx("p", { className: "text-xs text-destructive", children: error }), _jsxs(DialogFooter, { children: [_jsxs("button", { type: "button", onClick: handleBack, disabled: joining, className: "border rounded-lg h-9 px-4 text-sm font-medium transition-colors hover:bg-muted disabled:opacity-50 inline-flex items-center gap-1.5", style: {
|
|
111
|
+
borderColor: "var(--color-border)",
|
|
112
|
+
color: "var(--color-foreground)",
|
|
113
|
+
}, children: [_jsx(ArrowLeft, { className: "h-3.5 w-3.5" }), "Back"] }), _jsxs("button", { type: "button", onClick: handleJoin, disabled: joining, className: "bg-primary text-primary-foreground rounded-lg h-9 px-4 text-sm font-medium transition-colors hover:bg-primary/90 disabled:opacity-50 inline-flex items-center gap-2", children: [joining && _jsx(Loader2, { className: "h-4 w-4 animate-spin" }), "Join"] })] })] }))] }) }));
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=JoinScopeDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JoinScopeDialog.js","sourceRoot":"","sources":["../../../../src/components/scope/JoinScopeDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface ProfileScopeSectionProps {
|
|
2
|
+
scopeType: string;
|
|
3
|
+
onClose: () => void;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Generic profile section for any scope type.
|
|
7
|
+
* Shows user memberships, pending invitations, and switch/create/join actions.
|
|
8
|
+
* Registered via the 'profile:sections' filter by each tier that supports multiple instances.
|
|
9
|
+
*/
|
|
10
|
+
export declare function ProfileScopeSection({ scopeType, onClose }: ProfileScopeSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
//# sourceMappingURL=ProfileScopeSection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProfileScopeSection.d.ts","sourceRoot":"","sources":["../../../../src/components/scope/ProfileScopeSection.tsx"],"names":[],"mappings":"AAgCA,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,wBAAwB,2CAgKnF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useState, lazy, Suspense } from "react";
|
|
3
|
+
import { ArrowLeftRight, UserPlus, Plus, Mail, Check, X } from "lucide-react";
|
|
4
|
+
import { useQuery, useQueryClient } from "@ydtb/tk-scope-query-client";
|
|
5
|
+
import { useScopeList } from "../../hooks/useScopeList.js";
|
|
6
|
+
import { listInvitations, acceptInvitation, rejectInvitation, invitationKeys, } from "../../hooks/useInvitations.js";
|
|
7
|
+
import { scopeQueryKeys } from "../../lib/scope-query-keys.js";
|
|
8
|
+
import { useScopeLabel } from "@ydtb/tk-scope/client";
|
|
9
|
+
import { withIndefiniteArticle } from "@ydtb/tk-scope-lib/string";
|
|
10
|
+
const SwitchScopeDialog = lazy(() => import("./SwitchScopeDialog.js").then((m) => ({ default: m.SwitchScopeDialog })));
|
|
11
|
+
const CreateScopeDialog = lazy(() => import("./CreateScopeDialog.js").then((m) => ({ default: m.CreateScopeDialog })));
|
|
12
|
+
const JoinScopeDialog = lazy(() => import("./JoinScopeDialog.js").then((m) => ({ default: m.JoinScopeDialog })));
|
|
13
|
+
/**
|
|
14
|
+
* Generic profile section for any scope type.
|
|
15
|
+
* Shows user memberships, pending invitations, and switch/create/join actions.
|
|
16
|
+
* Registered via the 'profile:sections' filter by each tier that supports multiple instances.
|
|
17
|
+
*/
|
|
18
|
+
export function ProfileScopeSection({ scopeType, onClose }) {
|
|
19
|
+
const [switchDialogOpen, setSwitchDialogOpen] = useState(false);
|
|
20
|
+
const [createDialogOpen, setCreateDialogOpen] = useState(false);
|
|
21
|
+
const [joinDialogOpen, setJoinDialogOpen] = useState(false);
|
|
22
|
+
const queryClient = useQueryClient();
|
|
23
|
+
const label = useScopeLabel(scopeType);
|
|
24
|
+
const { scopes } = useScopeList({ type: scopeType });
|
|
25
|
+
const { data: pendingInvitations = [] } = useQuery({
|
|
26
|
+
queryKey: scopeQueryKeys.invitationsByType(scopeType),
|
|
27
|
+
queryFn: async () => {
|
|
28
|
+
const result = (await listInvitations());
|
|
29
|
+
const all = result?.invitations ?? [];
|
|
30
|
+
return all.filter((inv) => inv.scopeType === scopeType);
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
const handleAcceptInvitation = async (invitationId) => {
|
|
34
|
+
await acceptInvitation(invitationId);
|
|
35
|
+
queryClient.invalidateQueries({ queryKey: invitationKeys.scopeList() });
|
|
36
|
+
queryClient.invalidateQueries({
|
|
37
|
+
queryKey: scopeQueryKeys.invitationsByType(scopeType),
|
|
38
|
+
});
|
|
39
|
+
onClose();
|
|
40
|
+
};
|
|
41
|
+
const handleRejectInvitation = async (invitationId) => {
|
|
42
|
+
await rejectInvitation(invitationId);
|
|
43
|
+
queryClient.invalidateQueries({
|
|
44
|
+
queryKey: scopeQueryKeys.invitationsByType(scopeType),
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
const articleLabel = withIndefiniteArticle(label.singular);
|
|
48
|
+
return (_jsxs(_Fragment, { children: [_jsx("div", { className: "py-1.5", style: { borderTop: "1px solid var(--color-border, #e4e4e7)" }, children: scopes.length > 0 ? (_jsxs("button", { className: "flex items-center gap-2.5 w-full px-4 py-2 text-sm transition-colors hover:bg-muted/50", style: { color: "var(--color-foreground, #09090b)" }, onClick: () => {
|
|
49
|
+
onClose();
|
|
50
|
+
setSwitchDialogOpen(true);
|
|
51
|
+
}, children: [_jsx(ArrowLeftRight, { className: "h-4 w-4", style: { color: "var(--color-muted-foreground, #71717a)" } }), "Switch ", label.singular] })) : pendingInvitations.length > 0 ? (_jsxs("div", { className: "px-4 py-2", children: [_jsx("div", { className: "text-xs font-medium mb-1.5", style: { color: "var(--color-muted-foreground, #71717a)" }, children: "Pending Invitations" }), pendingInvitations.map((inv) => (_jsxs("div", { className: "flex items-center justify-between gap-2 py-1.5", children: [_jsxs("div", { className: "flex items-center gap-2 min-w-0", children: [_jsx(Mail, { className: "h-4 w-4 shrink-0", style: {
|
|
52
|
+
color: "var(--color-muted-foreground, #71717a)",
|
|
53
|
+
} }), _jsx("span", { className: "text-sm truncate", style: { color: "var(--color-foreground, #09090b)" }, children: inv.scopeName })] }), _jsxs("div", { className: "flex items-center gap-1 shrink-0", children: [_jsx("button", { className: "p-1 rounded hover:bg-muted/50 transition-colors", title: "Accept invitation", onClick: () => handleAcceptInvitation(inv.id), children: _jsx(Check, { className: "h-4 w-4", style: { color: "var(--color-primary, #22c55e)" } }) }), _jsx("button", { className: "p-1 rounded hover:bg-muted/50 transition-colors", title: "Reject invitation", onClick: () => handleRejectInvitation(inv.id), children: _jsx(X, { className: "h-4 w-4", style: {
|
|
54
|
+
color: "var(--color-destructive, #ef4444)",
|
|
55
|
+
} }) })] })] }, inv.id)))] })) : (_jsxs(_Fragment, { children: [_jsxs("button", { className: "flex items-center gap-2.5 w-full px-4 py-2 text-sm transition-colors hover:bg-muted/50", style: { color: "var(--color-foreground, #09090b)" }, onClick: () => {
|
|
56
|
+
onClose();
|
|
57
|
+
setJoinDialogOpen(true);
|
|
58
|
+
}, children: [_jsx(UserPlus, { className: "h-4 w-4", style: { color: "var(--color-muted-foreground, #71717a)" } }), "Join ", articleLabel] }), _jsxs("button", { className: "flex items-center gap-2.5 w-full px-4 py-2 text-sm transition-colors hover:bg-muted/50", style: { color: "var(--color-foreground, #09090b)" }, onClick: () => {
|
|
59
|
+
onClose();
|
|
60
|
+
setCreateDialogOpen(true);
|
|
61
|
+
}, children: [_jsx(Plus, { className: "h-4 w-4", style: { color: "var(--color-muted-foreground, #71717a)" } }), "Create ", articleLabel] })] })) }), _jsxs(Suspense, { fallback: null, children: [switchDialogOpen && (_jsx(SwitchScopeDialog, { scopeType: scopeType, open: switchDialogOpen, onOpenChange: setSwitchDialogOpen })), createDialogOpen && (_jsx(CreateScopeDialog, { scopeType: scopeType, open: createDialogOpen, onOpenChange: setCreateDialogOpen })), joinDialogOpen && (_jsx(JoinScopeDialog, { scopeType: scopeType, open: joinDialogOpen, onOpenChange: setJoinDialogOpen }))] })] }));
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=ProfileScopeSection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProfileScopeSection.js","sourceRoot":"","sources":["../../../../src/components/scope/ProfileScopeSection.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ScopeTypeInfo } from "@ydtb/tk-scope/client";
|
|
2
|
+
export interface ScopeSwitcherDialogProps {
|
|
3
|
+
scopeConfig: ScopeTypeInfo;
|
|
4
|
+
open: boolean;
|
|
5
|
+
onOpenChange: (open: boolean) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function ScopeSwitcherDialog({ scopeConfig, open, onOpenChange }: ScopeSwitcherDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export interface ScopeSwitcherPanelProps {
|
|
9
|
+
scopeConfig: ScopeTypeInfo;
|
|
10
|
+
onClose: () => void;
|
|
11
|
+
onNavigate?: () => void;
|
|
12
|
+
}
|
|
13
|
+
export declare function ScopeSwitcherPanel(props: ScopeSwitcherPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=ScopeSwitcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScopeSwitcher.d.ts","sourceRoot":"","sources":["../../../../src/components/scope/ScopeSwitcher.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAoD1D,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,aAAa,CAAA;IAC1B,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;CACtC;AAED,wBAAgB,mBAAmB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,wBAAwB,2CAsGhG;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,aAAa,CAAA;IAC1B,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;CACxB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,2CA2IhE"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo, useState } from "react";
|
|
3
|
+
import { useNavigate } from "@tanstack/react-router";
|
|
4
|
+
import { useScopeList } from "../../hooks/useScopeList.js";
|
|
5
|
+
import { Loader2, Check, Plus } from "lucide-react";
|
|
6
|
+
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, } from "@ydtb/tk-scope-ui/components/dialog";
|
|
7
|
+
import { useScopeContext } from "../../contexts/scope/ScopeContext.js";
|
|
8
|
+
import { scopeLink, useScopeLink } from "@ydtb/tk-scope/client";
|
|
9
|
+
import { ScopeActionsPanel, ScopeAvatar } from "@ydtb/tk-scope-shell";
|
|
10
|
+
import { useChildScopePermissions } from "./useChildScopePermissions.js";
|
|
11
|
+
import { useScopeMenuPolicy } from "../../hooks/useScopeMenuPolicy.js";
|
|
12
|
+
import { useScopeLabel, useChildScopeLabel } from "@ydtb/tk-scope/client";
|
|
13
|
+
import { CreateChildScopeButton } from "./CreateChildScopeButton.js";
|
|
14
|
+
function useScopeSwitcherList(scopeType, enabled) {
|
|
15
|
+
return useScopeList({ type: scopeType, enabled });
|
|
16
|
+
}
|
|
17
|
+
function ScopeCreateAction({ config, parentScopeId, parentScopeType, onClose, }) {
|
|
18
|
+
const navigate = useNavigate();
|
|
19
|
+
const { canCreate } = useChildScopePermissions();
|
|
20
|
+
if (config.selfCreate === false || config.selfCreate === "initial")
|
|
21
|
+
return null;
|
|
22
|
+
if (!canCreate)
|
|
23
|
+
return null;
|
|
24
|
+
const handleCreate = () => {
|
|
25
|
+
onClose?.();
|
|
26
|
+
if (parentScopeId && parentScopeType) {
|
|
27
|
+
navigate({
|
|
28
|
+
to: scopeLink(`/create/${config.type}`, {
|
|
29
|
+
scope: parentScopeType,
|
|
30
|
+
scopeId: parentScopeId,
|
|
31
|
+
}),
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
return (_jsxs("button", { type: "button", onClick: handleCreate, className: "w-full flex items-center justify-center gap-2 rounded-lg h-9 text-sm font-semibold transition-colors bg-primary text-primary-foreground hover:bg-primary/90", children: [_jsx(Plus, { className: "h-4 w-4" }), "New ", config.label] }));
|
|
36
|
+
}
|
|
37
|
+
export function ScopeSwitcherDialog({ scopeConfig, open, onOpenChange }) {
|
|
38
|
+
const navigate = useNavigate();
|
|
39
|
+
const { scopeId: activeScopeId, scopeType: activeScopeType } = useScopeContext();
|
|
40
|
+
const { scopes, isPending } = useScopeSwitcherList(scopeConfig.type, open);
|
|
41
|
+
const handleSwitch = (scopeId) => {
|
|
42
|
+
if (scopeId === activeScopeId)
|
|
43
|
+
return;
|
|
44
|
+
onOpenChange(false);
|
|
45
|
+
navigate({
|
|
46
|
+
to: scopeLink("/dashboard", {
|
|
47
|
+
scope: scopeConfig.type,
|
|
48
|
+
scopeId,
|
|
49
|
+
}),
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { className: "sm:max-w-md", children: [_jsxs(DialogHeader, { children: [_jsxs(DialogTitle, { children: ["Switch ", scopeConfig.label] }), _jsxs(DialogDescription, { children: ["Select a ", scopeConfig.label.toLowerCase(), " to manage."] })] }), _jsx("div", { className: "space-y-2 py-1", children: isPending ? (_jsx("div", { className: "flex items-center justify-center py-8", children: _jsx(Loader2, { className: "h-5 w-5 animate-spin", style: { color: "var(--color-muted-foreground)" } }) })) : scopes && scopes.length > 0 ? (scopes.map((scope) => {
|
|
53
|
+
const isCurrent = scope.id === activeScopeId;
|
|
54
|
+
return (_jsxs("button", { type: "button", onClick: () => handleSwitch(scope.id), className: `w-full flex items-center gap-3 rounded-lg border p-4 text-left transition-all cursor-pointer ${isCurrent
|
|
55
|
+
? "border-primary/50 bg-primary/5"
|
|
56
|
+
: "hover:border-primary hover:shadow-sm"}`, style: {
|
|
57
|
+
borderColor: isCurrent ? undefined : "var(--color-border)",
|
|
58
|
+
}, children: [_jsx(ScopeAvatar, { scope: scope }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-sm font-semibold truncate", style: { color: "var(--color-foreground)" }, children: scope.name }), isCurrent && (_jsxs("span", { className: "inline-flex items-center gap-1 rounded-full bg-primary/10 px-2 py-0.5 text-[11px] font-medium text-primary shrink-0", children: [_jsx(Check, { className: "h-3 w-3" }), "Current"] }))] }), _jsx("div", { className: "flex items-center gap-2 mt-0.5", children: _jsx("span", { className: "inline-flex items-center rounded-md bg-muted px-1.5 py-0.5 text-[10px] font-medium capitalize", style: { color: "var(--color-muted-foreground)" }, children: scope.role }) })] })] }, scope.id));
|
|
59
|
+
})) : (_jsx("div", { className: "flex flex-col items-center justify-center py-8", children: _jsxs("p", { className: "text-sm", style: { color: "var(--color-muted-foreground)" }, children: ["No ", (scopeConfig.labelPlural ?? scopeConfig.label + "s").toLowerCase(), " found."] }) })) }), _jsx("div", { className: "pt-2", style: { borderTop: "1px solid var(--color-border)" }, children: _jsx(ScopeCreateAction, { config: scopeConfig, parentScopeId: activeScopeId, parentScopeType: activeScopeType, onClose: () => onOpenChange(false) }) })] }) }));
|
|
60
|
+
}
|
|
61
|
+
export function ScopeSwitcherPanel(props) {
|
|
62
|
+
const { onClose, onNavigate } = props;
|
|
63
|
+
const navigate = useNavigate();
|
|
64
|
+
const sl = useScopeLink();
|
|
65
|
+
const { scopeType, entity } = useScopeContext();
|
|
66
|
+
const [search, setSearch] = useState("");
|
|
67
|
+
const { mode, childScopeType, currentScope, parentScope, siblingScopes, childScopes, allScopes, canSwitchScopes, canViewChildScopes, canCreateChildScopes, hasCreateChildAction, } = useScopeMenuPolicy();
|
|
68
|
+
const scopeLabel = useScopeLabel(scopeType ?? "");
|
|
69
|
+
const childLabel = useChildScopeLabel(scopeType ?? "");
|
|
70
|
+
const currentScopeName = currentScope?.name || entity?.name || "Current scope";
|
|
71
|
+
const navLabel = childLabel ?? scopeLabel;
|
|
72
|
+
const filteredSiblings = useMemo(() => search
|
|
73
|
+
? siblingScopes.filter((scope) => scope.name.toLowerCase().includes(search.toLowerCase()))
|
|
74
|
+
: siblingScopes, [search, siblingScopes]);
|
|
75
|
+
const filteredChildren = useMemo(() => search
|
|
76
|
+
? childScopes.filter((scope) => scope.name.toLowerCase().includes(search.toLowerCase()))
|
|
77
|
+
: childScopes, [childScopes, search]);
|
|
78
|
+
const showSearch = (canSwitchScopes && siblingScopes.length > 0) || (canViewChildScopes && childScopes.length > 0);
|
|
79
|
+
const showSwitchActions = canSwitchScopes && (Boolean(parentScope) || allScopes.length > 1);
|
|
80
|
+
const showChildSection = canViewChildScopes && filteredChildren.length > 0;
|
|
81
|
+
const showSiblingSection = canSwitchScopes && filteredSiblings.length > 0;
|
|
82
|
+
const showCreateChildAction = canCreateChildScopes && hasCreateChildAction && Boolean(childScopeType);
|
|
83
|
+
const hasAnyMenuAction = showSwitchActions ||
|
|
84
|
+
(canViewChildScopes && childScopes.length > 0) ||
|
|
85
|
+
(canSwitchScopes && siblingScopes.length > 0) ||
|
|
86
|
+
showCreateChildAction;
|
|
87
|
+
const isAlwaysEmptyState = mode === "always" && !hasAnyMenuAction;
|
|
88
|
+
const showNoSearchResults = search.length > 0 &&
|
|
89
|
+
showSearch &&
|
|
90
|
+
filteredSiblings.length === 0 &&
|
|
91
|
+
filteredChildren.length === 0;
|
|
92
|
+
const closeAndNavigate = (to) => {
|
|
93
|
+
onNavigate?.();
|
|
94
|
+
navigate({ to });
|
|
95
|
+
};
|
|
96
|
+
return (_jsx(ScopeActionsPanel, { onClose: onClose, currentScope: { name: currentScopeName, logo: currentScope?.logo }, currentScopeLabel: `Current ${scopeLabel.singular}`, showCurrentScopeCard: true, showSearch: showSearch, searchValue: search, onSearchChange: setSearch, searchPlaceholder: `Find ${navLabel.singular.toLowerCase()}...`, parentAction: parentScope
|
|
97
|
+
? {
|
|
98
|
+
label: parentScope.name,
|
|
99
|
+
onClick: () => closeAndNavigate(scopeLink("/dashboard", {
|
|
100
|
+
scope: parentScope.type,
|
|
101
|
+
scopeId: parentScope.id,
|
|
102
|
+
})),
|
|
103
|
+
}
|
|
104
|
+
: undefined, contextAction: allScopes.length > 1
|
|
105
|
+
? {
|
|
106
|
+
onClick: () => closeAndNavigate("/select-context"),
|
|
107
|
+
}
|
|
108
|
+
: undefined, childSection: showChildSection
|
|
109
|
+
? {
|
|
110
|
+
title: `Managed ${navLabel.plural}`,
|
|
111
|
+
items: filteredChildren,
|
|
112
|
+
onSelect: (scope) => closeAndNavigate(scopeLink("/dashboard", {
|
|
113
|
+
scope: scope.type,
|
|
114
|
+
scopeId: scope.id,
|
|
115
|
+
})),
|
|
116
|
+
listClassName: "max-h-[160px] overflow-y-auto px-1.5",
|
|
117
|
+
showChevron: true,
|
|
118
|
+
}
|
|
119
|
+
: undefined, siblingSection: showSiblingSection
|
|
120
|
+
? {
|
|
121
|
+
title: `Switch ${scopeLabel.singular}`,
|
|
122
|
+
items: filteredSiblings,
|
|
123
|
+
onSelect: (scope) => closeAndNavigate(scopeLink("/dashboard", {
|
|
124
|
+
scope: scope.type,
|
|
125
|
+
scopeId: scope.id,
|
|
126
|
+
})),
|
|
127
|
+
listClassName: "flex-1 overflow-y-auto px-1.5",
|
|
128
|
+
}
|
|
129
|
+
: undefined, showNoSearchResults: showNoSearchResults, noSearchResultsLabel: `No matching ${navLabel.plural.toLowerCase()} found`, emptyStateLabel: isAlwaysEmptyState ? "No additional scope actions available." : undefined, footer: showCreateChildAction && childScopeType ? (_jsx("div", { className: "p-2 border-t border-border mt-auto", children: _jsx(CreateChildScopeButton, { onClick: () => closeAndNavigate(sl(`/${childScopeType}s`)) }) })) : undefined }));
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=ScopeSwitcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScopeSwitcher.js","sourceRoot":"","sources":["../../../../src/components/scope/ScopeSwitcher.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface SwitchScopeDialogProps {
|
|
2
|
+
scopeType: string;
|
|
3
|
+
open: boolean;
|
|
4
|
+
onOpenChange: (open: boolean) => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function SwitchScopeDialog({ scopeType, open, onOpenChange }: SwitchScopeDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=SwitchScopeDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SwitchScopeDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/scope/SwitchScopeDialog.tsx"],"names":[],"mappings":"AAkCA,UAAU,sBAAsB;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;CACtC;AAED,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,sBAAsB,2CAqI1F"}
|