@fayz-ai/admin 0.10.0
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 +44 -0
- package/dist/CommandPalette-2AL327XQ.js +258 -0
- package/dist/CommandPalette-2AL327XQ.js.map +1 -0
- package/dist/ImportWizard-CISHGNQC.js +3 -0
- package/dist/ImportWizard-CISHGNQC.js.map +1 -0
- package/dist/ScheduleEditor-BSFF7LME.js +1040 -0
- package/dist/ScheduleEditor-BSFF7LME.js.map +1 -0
- package/dist/SubscriptionPage-NLZAZO4P.js +7 -0
- package/dist/SubscriptionPage-NLZAZO4P.js.map +1 -0
- package/dist/access/context.d.ts +47 -0
- package/dist/access/context.d.ts.map +1 -0
- package/dist/access/headless.d.ts +21 -0
- package/dist/access/headless.d.ts.map +1 -0
- package/dist/access/index.d.ts +12 -0
- package/dist/access/index.d.ts.map +1 -0
- package/dist/access/limits-registry.d.ts +33 -0
- package/dist/access/limits-registry.d.ts.map +1 -0
- package/dist/access/module-nav.d.ts +15 -0
- package/dist/access/module-nav.d.ts.map +1 -0
- package/dist/access/resolver.d.ts +2 -0
- package/dist/access/resolver.d.ts.map +1 -0
- package/dist/access/types.d.ts +43 -0
- package/dist/access/types.d.ts.map +1 -0
- package/dist/access/upgrade-modal-store.d.ts +23 -0
- package/dist/access/upgrade-modal-store.d.ts.map +1 -0
- package/dist/app/AdminShell.d.ts +65 -0
- package/dist/app/AdminShell.d.ts.map +1 -0
- package/dist/app/LoginPage.d.ts +3 -0
- package/dist/app/LoginPage.d.ts.map +1 -0
- package/dist/app/admin-app.d.ts +23 -0
- package/dist/app/admin-app.d.ts.map +1 -0
- package/dist/app/config.d.ts +277 -0
- package/dist/app/config.d.ts.map +1 -0
- package/dist/app/core-entities.d.ts +25 -0
- package/dist/app/core-entities.d.ts.map +1 -0
- package/dist/app/derive-contract.d.ts +8 -0
- package/dist/app/derive-contract.d.ts.map +1 -0
- package/dist/app/nav-contributions.store.d.ts +17 -0
- package/dist/app/nav-contributions.store.d.ts.map +1 -0
- package/dist/app/routing.d.ts +10 -0
- package/dist/app/routing.d.ts.map +1 -0
- package/dist/app/scaffold.d.ts +17 -0
- package/dist/app/scaffold.d.ts.map +1 -0
- package/dist/billing/index.d.ts +5 -0
- package/dist/billing/index.d.ts.map +1 -0
- package/dist/billing/index.js +3 -0
- package/dist/billing/index.js.map +1 -0
- package/dist/billing/plan-badge.d.ts +17 -0
- package/dist/billing/plan-badge.d.ts.map +1 -0
- package/dist/billing/store.d.ts +40 -0
- package/dist/billing/store.d.ts.map +1 -0
- package/dist/chunk-5O2UJAQ7.js +534 -0
- package/dist/chunk-5O2UJAQ7.js.map +1 -0
- package/dist/chunk-PNAJODZM.js +315 -0
- package/dist/chunk-PNAJODZM.js.map +1 -0
- package/dist/chunk-RKXZ7RUG.js +20 -0
- package/dist/chunk-RKXZ7RUG.js.map +1 -0
- package/dist/chunk-TNTZHUL6.js +817 -0
- package/dist/chunk-TNTZHUL6.js.map +1 -0
- package/dist/chunk-UMRN6427.js +510 -0
- package/dist/chunk-UMRN6427.js.map +1 -0
- package/dist/chunk-VN5NTK26.js +36 -0
- package/dist/chunk-VN5NTK26.js.map +1 -0
- package/dist/chunk-VTEP2AQX.js +101 -0
- package/dist/chunk-VTEP2AQX.js.map +1 -0
- package/dist/chunk-YUHCC7JY.js +11 -0
- package/dist/chunk-YUHCC7JY.js.map +1 -0
- package/dist/components/RightRail.d.ts +8 -0
- package/dist/components/RightRail.d.ts.map +1 -0
- package/dist/components/auth/CenteredLogin.d.ts +13 -0
- package/dist/components/auth/CenteredLogin.d.ts.map +1 -0
- package/dist/components/auth/LoginForm.d.ts +12 -0
- package/dist/components/auth/LoginForm.d.ts.map +1 -0
- package/dist/components/auth/LoginPage.d.ts +15 -0
- package/dist/components/auth/LoginPage.d.ts.map +1 -0
- package/dist/components/auth/OAuthButtons.d.ts +10 -0
- package/dist/components/auth/OAuthButtons.d.ts.map +1 -0
- package/dist/components/auth/ProtectedRoute.d.ts +11 -0
- package/dist/components/auth/ProtectedRoute.d.ts.map +1 -0
- package/dist/components/auth/RecoveryForm.d.ts +9 -0
- package/dist/components/auth/RecoveryForm.d.ts.map +1 -0
- package/dist/components/auth/SignupForm.d.ts +10 -0
- package/dist/components/auth/SignupForm.d.ts.map +1 -0
- package/dist/components/auth/SplitLogin.d.ts +14 -0
- package/dist/components/auth/SplitLogin.d.ts.map +1 -0
- package/dist/components/auth/index.d.ts +7 -0
- package/dist/components/auth/index.d.ts.map +1 -0
- package/dist/components/billing/InvoiceList.d.ts +9 -0
- package/dist/components/billing/InvoiceList.d.ts.map +1 -0
- package/dist/components/billing/PlanSelector.d.ts +13 -0
- package/dist/components/billing/PlanSelector.d.ts.map +1 -0
- package/dist/components/billing/SoftLimitBanner.d.ts +5 -0
- package/dist/components/billing/SoftLimitBanner.d.ts.map +1 -0
- package/dist/components/billing/SubscriptionCard.d.ts +12 -0
- package/dist/components/billing/SubscriptionCard.d.ts.map +1 -0
- package/dist/components/billing/SubscriptionPage.d.ts +5 -0
- package/dist/components/billing/SubscriptionPage.d.ts.map +1 -0
- package/dist/components/billing/UpgradeModal.d.ts +3 -0
- package/dist/components/billing/UpgradeModal.d.ts.map +1 -0
- package/dist/components/billing/UpgradeOverlay.d.ts +15 -0
- package/dist/components/billing/UpgradeOverlay.d.ts.map +1 -0
- package/dist/components/billing/UpgradePrompt.d.ts +10 -0
- package/dist/components/billing/UpgradePrompt.d.ts.map +1 -0
- package/dist/components/billing/access-contract.d.ts +18 -0
- package/dist/components/billing/access-contract.d.ts.map +1 -0
- package/dist/components/billing/gates.d.ts +14 -0
- package/dist/components/billing/gates.d.ts.map +1 -0
- package/dist/components/billing/index.d.ts +15 -0
- package/dist/components/billing/index.d.ts.map +1 -0
- package/dist/components/billing/plan-feature.d.ts +11 -0
- package/dist/components/billing/plan-feature.d.ts.map +1 -0
- package/dist/components/chat/ChatAttachments.d.ts +23 -0
- package/dist/components/chat/ChatAttachments.d.ts.map +1 -0
- package/dist/components/chat/ChatComposer.d.ts +21 -0
- package/dist/components/chat/ChatComposer.d.ts.map +1 -0
- package/dist/components/chat/ChatConversation.d.ts +20 -0
- package/dist/components/chat/ChatConversation.d.ts.map +1 -0
- package/dist/components/chat/ChatFab.d.ts +17 -0
- package/dist/components/chat/ChatFab.d.ts.map +1 -0
- package/dist/components/chat/ChatHistory.d.ts +16 -0
- package/dist/components/chat/ChatHistory.d.ts.map +1 -0
- package/dist/components/chat/ChatMessages.d.ts +16 -0
- package/dist/components/chat/ChatMessages.d.ts.map +1 -0
- package/dist/components/chat/ChatSuggestions.d.ts +17 -0
- package/dist/components/chat/ChatSuggestions.d.ts.map +1 -0
- package/dist/components/chat/ConfirmActionCard.d.ts +19 -0
- package/dist/components/chat/ConfirmActionCard.d.ts.map +1 -0
- package/dist/components/chat/RecordChip.d.ts +12 -0
- package/dist/components/chat/RecordChip.d.ts.map +1 -0
- package/dist/components/chat/index.d.ts +4 -0
- package/dist/components/chat/index.d.ts.map +1 -0
- package/dist/components/chat/markdown.d.ts +5 -0
- package/dist/components/chat/markdown.d.ts.map +1 -0
- package/dist/components/connect/AddConnectorPanel.d.ts +32 -0
- package/dist/components/connect/AddConnectorPanel.d.ts.map +1 -0
- package/dist/components/connect/ConnectConsentPage.d.ts +12 -0
- package/dist/components/connect/ConnectConsentPage.d.ts.map +1 -0
- package/dist/components/connect/ConnectorDetail.d.ts +29 -0
- package/dist/components/connect/ConnectorDetail.d.ts.map +1 -0
- package/dist/components/connect/ConnectorMark.d.ts +20 -0
- package/dist/components/connect/ConnectorMark.d.ts.map +1 -0
- package/dist/components/connect/ConnectorRow.d.ts +33 -0
- package/dist/components/connect/ConnectorRow.d.ts.map +1 -0
- package/dist/components/connect/ConnectorsPanel.d.ts +40 -0
- package/dist/components/connect/ConnectorsPanel.d.ts.map +1 -0
- package/dist/components/connect/ConnectorsTab.d.ts +16 -0
- package/dist/components/connect/ConnectorsTab.d.ts.map +1 -0
- package/dist/components/connect/client-marks.d.ts +31 -0
- package/dist/components/connect/client-marks.d.ts.map +1 -0
- package/dist/components/connect/index.d.ts +12 -0
- package/dist/components/connect/index.d.ts.map +1 -0
- package/dist/components/connect/model.d.ts +151 -0
- package/dist/components/connect/model.d.ts.map +1 -0
- package/dist/components/connect/useConnectors.d.ts +24 -0
- package/dist/components/connect/useConnectors.d.ts.map +1 -0
- package/dist/components/layout/BottomNav.d.ts +24 -0
- package/dist/components/layout/BottomNav.d.ts.map +1 -0
- package/dist/components/layout/CommandPalette.d.ts +23 -0
- package/dist/components/layout/CommandPalette.d.ts.map +1 -0
- package/dist/components/layout/LocationSwitchOverlay.d.ts +3 -0
- package/dist/components/layout/LocationSwitchOverlay.d.ts.map +1 -0
- package/dist/components/layout/MockModeBanner.d.ts +3 -0
- package/dist/components/layout/MockModeBanner.d.ts.map +1 -0
- package/dist/components/layout/PrintChrome.d.ts +10 -0
- package/dist/components/layout/PrintChrome.d.ts.map +1 -0
- package/dist/components/layout/index.d.ts +6 -0
- package/dist/components/layout/index.d.ts.map +1 -0
- package/dist/components/notes/NotesPanel.d.ts +13 -0
- package/dist/components/notes/NotesPanel.d.ts.map +1 -0
- package/dist/components/notifications/ChangelogFeed.d.ts +8 -0
- package/dist/components/notifications/ChangelogFeed.d.ts.map +1 -0
- package/dist/components/notifications/NotificationBell.d.ts +9 -0
- package/dist/components/notifications/NotificationBell.d.ts.map +1 -0
- package/dist/components/notifications/NotificationInbox.d.ts +13 -0
- package/dist/components/notifications/NotificationInbox.d.ts.map +1 -0
- package/dist/components/notifications/ToastProvider.d.ts +2 -0
- package/dist/components/notifications/ToastProvider.d.ts.map +1 -0
- package/dist/components/notifications/index.d.ts +5 -0
- package/dist/components/notifications/index.d.ts.map +1 -0
- package/dist/components/organization/InviteMemberDialog.d.ts +10 -0
- package/dist/components/organization/InviteMemberDialog.d.ts.map +1 -0
- package/dist/components/organization/OrgInitializer.d.ts +7 -0
- package/dist/components/organization/OrgInitializer.d.ts.map +1 -0
- package/dist/components/organization/OrgSwitcher.d.ts +7 -0
- package/dist/components/organization/OrgSwitcher.d.ts.map +1 -0
- package/dist/components/organization/PermissionMatrixEditor.d.ts +22 -0
- package/dist/components/organization/PermissionMatrixEditor.d.ts.map +1 -0
- package/dist/components/organization/PermissionProfilesTab.d.ts +3 -0
- package/dist/components/organization/PermissionProfilesTab.d.ts.map +1 -0
- package/dist/components/organization/TeamTab.d.ts +3 -0
- package/dist/components/organization/TeamTab.d.ts.map +1 -0
- package/dist/components/organization/TenantOnboarding.d.ts +9 -0
- package/dist/components/organization/TenantOnboarding.d.ts.map +1 -0
- package/dist/components/organization/index.d.ts +7 -0
- package/dist/components/organization/index.d.ts.map +1 -0
- package/dist/components/plugins/ConnectorsHub.d.ts +5 -0
- package/dist/components/plugins/ConnectorsHub.d.ts.map +1 -0
- package/dist/components/plugins/PluginSettingsPanel.d.ts +28 -0
- package/dist/components/plugins/PluginSettingsPanel.d.ts.map +1 -0
- package/dist/components/right-rail.d.ts +58 -0
- package/dist/components/right-rail.d.ts.map +1 -0
- package/dist/components/settings/BrandingSettings.d.ts +12 -0
- package/dist/components/settings/BrandingSettings.d.ts.map +1 -0
- package/dist/components/settings/CompanySettings.d.ts +13 -0
- package/dist/components/settings/CompanySettings.d.ts.map +1 -0
- package/dist/components/settings/ConnectedBrandingSettings.d.ts +2 -0
- package/dist/components/settings/ConnectedBrandingSettings.d.ts.map +1 -0
- package/dist/components/settings/ConnectedCompanySettings.d.ts +2 -0
- package/dist/components/settings/ConnectedCompanySettings.d.ts.map +1 -0
- package/dist/components/settings/ConnectedFieldRulesSettings.d.ts +2 -0
- package/dist/components/settings/ConnectedFieldRulesSettings.d.ts.map +1 -0
- package/dist/components/settings/ConnectedSecuritySettings.d.ts +2 -0
- package/dist/components/settings/ConnectedSecuritySettings.d.ts.map +1 -0
- package/dist/components/settings/ConnectedUserProfile.d.ts +3 -0
- package/dist/components/settings/ConnectedUserProfile.d.ts.map +1 -0
- package/dist/components/settings/FieldRulesSettings.d.ts +11 -0
- package/dist/components/settings/FieldRulesSettings.d.ts.map +1 -0
- package/dist/components/settings/HolidaysSettings.d.ts +21 -0
- package/dist/components/settings/HolidaysSettings.d.ts.map +1 -0
- package/dist/components/settings/LocationsCrudPage.d.ts +6 -0
- package/dist/components/settings/LocationsCrudPage.d.ts.map +1 -0
- package/dist/components/settings/LocationsOverview.d.ts +19 -0
- package/dist/components/settings/LocationsOverview.d.ts.map +1 -0
- package/dist/components/settings/SecuritySettings.d.ts +17 -0
- package/dist/components/settings/SecuritySettings.d.ts.map +1 -0
- package/dist/components/settings/SettingsPage.d.ts +46 -0
- package/dist/components/settings/SettingsPage.d.ts.map +1 -0
- package/dist/components/settings/UserProfile.d.ts +12 -0
- package/dist/components/settings/UserProfile.d.ts.map +1 -0
- package/dist/components/settings/index.d.ts +11 -0
- package/dist/components/settings/index.d.ts.map +1 -0
- package/dist/components/shared/ContactPicker.d.ts +92 -0
- package/dist/components/shared/ContactPicker.d.ts.map +1 -0
- package/dist/components/shared/PersonLink.d.ts +29 -0
- package/dist/components/shared/PersonLink.d.ts.map +1 -0
- package/dist/components/shared/create-person.d.ts +20 -0
- package/dist/components/shared/create-person.d.ts.map +1 -0
- package/dist/crud/CrudCardGrid.d.ts +13 -0
- package/dist/crud/CrudCardGrid.d.ts.map +1 -0
- package/dist/crud/CrudDetailPage.d.ts +23 -0
- package/dist/crud/CrudDetailPage.d.ts.map +1 -0
- package/dist/crud/CrudFormPage.d.ts +18 -0
- package/dist/crud/CrudFormPage.d.ts.map +1 -0
- package/dist/crud/CrudListView.d.ts +92 -0
- package/dist/crud/CrudListView.d.ts.map +1 -0
- package/dist/crud/CrudPage.d.ts +27 -0
- package/dist/crud/CrudPage.d.ts.map +1 -0
- package/dist/crud/CrudSkeletons.d.ts +21 -0
- package/dist/crud/CrudSkeletons.d.ts.map +1 -0
- package/dist/crud/DeleteConfirmDialog.d.ts +11 -0
- package/dist/crud/DeleteConfirmDialog.d.ts.map +1 -0
- package/dist/crud/EntityOverview.d.ts +14 -0
- package/dist/crud/EntityOverview.d.ts.map +1 -0
- package/dist/crud/ImportWizard.d.ts +18 -0
- package/dist/crud/ImportWizard.d.ts.map +1 -0
- package/dist/crud/archetype-lookup.d.ts +30 -0
- package/dist/crud/archetype-lookup.d.ts.map +1 -0
- package/dist/crud/archetypes/ActiveToggle.d.ts +8 -0
- package/dist/crud/archetypes/ActiveToggle.d.ts.map +1 -0
- package/dist/crud/archetypes/AddressesTab.d.ts +21 -0
- package/dist/crud/archetypes/AddressesTab.d.ts.map +1 -0
- package/dist/crud/archetypes/ArchetypeStatusBar.d.ts +11 -0
- package/dist/crud/archetypes/ArchetypeStatusBar.d.ts.map +1 -0
- package/dist/crud/archetypes/BlockSettingsPopover.d.ts +15 -0
- package/dist/crud/archetypes/BlockSettingsPopover.d.ts.map +1 -0
- package/dist/crud/archetypes/ClientOrdersTab.d.ts +18 -0
- package/dist/crud/archetypes/ClientOrdersTab.d.ts.map +1 -0
- package/dist/crud/archetypes/EntityLink.d.ts +32 -0
- package/dist/crud/archetypes/EntityLink.d.ts.map +1 -0
- package/dist/crud/archetypes/LocationDetailTabs.d.ts +11 -0
- package/dist/crud/archetypes/LocationDetailTabs.d.ts.map +1 -0
- package/dist/crud/archetypes/LocationFormLayout.d.ts +12 -0
- package/dist/crud/archetypes/LocationFormLayout.d.ts.map +1 -0
- package/dist/crud/archetypes/OrderDetailView.d.ts +115 -0
- package/dist/crud/archetypes/OrderDetailView.d.ts.map +1 -0
- package/dist/crud/archetypes/OrderFormView.d.ts +112 -0
- package/dist/crud/archetypes/OrderFormView.d.ts.map +1 -0
- package/dist/crud/archetypes/OrderListView.d.ts +36 -0
- package/dist/crud/archetypes/OrderListView.d.ts.map +1 -0
- package/dist/crud/archetypes/PersonDetailTabs.d.ts +35 -0
- package/dist/crud/archetypes/PersonDetailTabs.d.ts.map +1 -0
- package/dist/crud/archetypes/PersonFormLayout.d.ts +13 -0
- package/dist/crud/archetypes/PersonFormLayout.d.ts.map +1 -0
- package/dist/crud/archetypes/PersonPicker.d.ts +23 -0
- package/dist/crud/archetypes/PersonPicker.d.ts.map +1 -0
- package/dist/crud/archetypes/ProductDetailTabs.d.ts +11 -0
- package/dist/crud/archetypes/ProductDetailTabs.d.ts.map +1 -0
- package/dist/crud/archetypes/ProductFormLayout.d.ts +12 -0
- package/dist/crud/archetypes/ProductFormLayout.d.ts.map +1 -0
- package/dist/crud/archetypes/ScheduleEditor.d.ts +7 -0
- package/dist/crud/archetypes/ScheduleEditor.d.ts.map +1 -0
- package/dist/crud/archetypes/ServiceDetailTabs.d.ts +10 -0
- package/dist/crud/archetypes/ServiceDetailTabs.d.ts.map +1 -0
- package/dist/crud/archetypes/ServiceFormLayout.d.ts +12 -0
- package/dist/crud/archetypes/ServiceFormLayout.d.ts.map +1 -0
- package/dist/crud/archetypes/SubjectDetailTabs.d.ts +12 -0
- package/dist/crud/archetypes/SubjectDetailTabs.d.ts.map +1 -0
- package/dist/crud/archetypes/SubjectFormLayout.d.ts +14 -0
- package/dist/crud/archetypes/SubjectFormLayout.d.ts.map +1 -0
- package/dist/crud/createCrudPage.d.ts +34 -0
- package/dist/crud/createCrudPage.d.ts.map +1 -0
- package/dist/crud/csv-export.d.ts +3 -0
- package/dist/crud/csv-export.d.ts.map +1 -0
- package/dist/crud/fieldToColumn.d.ts +14 -0
- package/dist/crud/fieldToColumn.d.ts.map +1 -0
- package/dist/crud/index.d.ts +16 -0
- package/dist/crud/index.d.ts.map +1 -0
- package/dist/crud/placeholder.d.ts +7 -0
- package/dist/crud/placeholder.d.ts.map +1 -0
- package/dist/crud/relation-field.d.ts +28 -0
- package/dist/crud/relation-field.d.ts.map +1 -0
- package/dist/data/client.d.ts +14 -0
- package/dist/data/client.d.ts.map +1 -0
- package/dist/db.cjs +14 -0
- package/dist/db.cjs.map +1 -0
- package/dist/db.d.ts +2 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +3 -0
- package/dist/db.js.map +1 -0
- package/dist/hooks/index.d.ts +20 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/useAITools.d.ts +23 -0
- package/dist/hooks/useAITools.d.ts.map +1 -0
- package/dist/hooks/useAgentSurface.d.ts +15 -0
- package/dist/hooks/useAgentSurface.d.ts.map +1 -0
- package/dist/hooks/useAuth.d.ts +16 -0
- package/dist/hooks/useAuth.d.ts.map +1 -0
- package/dist/hooks/useChat.d.ts +38 -0
- package/dist/hooks/useChat.d.ts.map +1 -0
- package/dist/hooks/useDictation.d.ts +31 -0
- package/dist/hooks/useDictation.d.ts.map +1 -0
- package/dist/hooks/useFieldRules.d.ts +6 -0
- package/dist/hooks/useFieldRules.d.ts.map +1 -0
- package/dist/hooks/useFormatters.d.ts +7 -0
- package/dist/hooks/useFormatters.d.ts.map +1 -0
- package/dist/hooks/useGlobalSearch.d.ts +10 -0
- package/dist/hooks/useGlobalSearch.d.ts.map +1 -0
- package/dist/hooks/useLayout.d.ts +16 -0
- package/dist/hooks/useLayout.d.ts.map +1 -0
- package/dist/hooks/useMicLevels.d.ts +10 -0
- package/dist/hooks/useMicLevels.d.ts.map +1 -0
- package/dist/hooks/useModuleNavigation.d.ts +27 -0
- package/dist/hooks/useModuleNavigation.d.ts.map +1 -0
- package/dist/hooks/useNotifications.d.ts +11 -0
- package/dist/hooks/useNotifications.d.ts.map +1 -0
- package/dist/hooks/usePluginPrefs.d.ts +23 -0
- package/dist/hooks/usePluginPrefs.d.ts.map +1 -0
- package/dist/hooks/usePlugins.d.ts +5 -0
- package/dist/hooks/usePlugins.d.ts.map +1 -0
- package/dist/hooks/useSystemPermission.d.ts +3 -0
- package/dist/hooks/useSystemPermission.d.ts.map +1 -0
- package/dist/hooks/useTenant.d.ts +23 -0
- package/dist/hooks/useTenant.d.ts.map +1 -0
- package/dist/hooks/useTenantPluginSettings.d.ts +12 -0
- package/dist/hooks/useTenantPluginSettings.d.ts.map +1 -0
- package/dist/hooks/useTenantPlugins.d.ts +10 -0
- package/dist/hooks/useTenantPlugins.d.ts.map +1 -0
- package/dist/hooks/useTranslation.d.ts +5 -0
- package/dist/hooks/useTranslation.d.ts.map +1 -0
- package/dist/index.d.ts +93 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17207 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/agent-approvals.d.ts +27 -0
- package/dist/lib/agent-approvals.d.ts.map +1 -0
- package/dist/lib/agent-surface.d.ts +78 -0
- package/dist/lib/agent-surface.d.ts.map +1 -0
- package/dist/lib/ai-tool-handlers.d.ts +154 -0
- package/dist/lib/ai-tool-handlers.d.ts.map +1 -0
- package/dist/lib/apply-field-rules.d.ts +4 -0
- package/dist/lib/apply-field-rules.d.ts.map +1 -0
- package/dist/lib/assistant-delegation.d.ts +5 -0
- package/dist/lib/assistant-delegation.d.ts.map +1 -0
- package/dist/lib/assistant-feature.d.ts +8 -0
- package/dist/lib/assistant-feature.d.ts.map +1 -0
- package/dist/lib/attachments.d.ts +95 -0
- package/dist/lib/attachments.d.ts.map +1 -0
- package/dist/lib/auth-context.d.ts +5 -0
- package/dist/lib/auth-context.d.ts.map +1 -0
- package/dist/lib/cache.d.ts +18 -0
- package/dist/lib/cache.d.ts.map +1 -0
- package/dist/lib/cn.d.ts +2 -0
- package/dist/lib/cn.d.ts.map +1 -0
- package/dist/lib/core-ai-tools.d.ts +49 -0
- package/dist/lib/core-ai-tools.d.ts.map +1 -0
- package/dist/lib/create-client-orders-provider.d.ts +3 -0
- package/dist/lib/create-client-orders-provider.d.ts.map +1 -0
- package/dist/lib/csv.d.ts +14 -0
- package/dist/lib/csv.d.ts.map +1 -0
- package/dist/lib/currency.d.ts +7 -0
- package/dist/lib/currency.d.ts.map +1 -0
- package/dist/lib/dedup.d.ts +2 -0
- package/dist/lib/dedup.d.ts.map +1 -0
- package/dist/lib/entity-registry.d.ts +19 -0
- package/dist/lib/entity-registry.d.ts.map +1 -0
- package/dist/lib/entity-routes.d.ts +48 -0
- package/dist/lib/entity-routes.d.ts.map +1 -0
- package/dist/lib/fayz-agent.d.ts +23 -0
- package/dist/lib/fayz-agent.d.ts.map +1 -0
- package/dist/lib/format.d.ts +7 -0
- package/dist/lib/format.d.ts.map +1 -0
- package/dist/lib/locale-config.d.ts +8 -0
- package/dist/lib/locale-config.d.ts.map +1 -0
- package/dist/lib/notes-tasks-bridge.d.ts +28 -0
- package/dist/lib/notes-tasks-bridge.d.ts.map +1 -0
- package/dist/lib/org-context.d.ts +5 -0
- package/dist/lib/org-context.d.ts.map +1 -0
- package/dist/lib/plugins.d.ts +2 -0
- package/dist/lib/plugins.d.ts.map +1 -0
- package/dist/lib/record-refs.d.ts +31 -0
- package/dist/lib/record-refs.d.ts.map +1 -0
- package/dist/lib/router.d.ts +15 -0
- package/dist/lib/router.d.ts.map +1 -0
- package/dist/lib/schedule-config.d.ts +32 -0
- package/dist/lib/schedule-config.d.ts.map +1 -0
- package/dist/lib/schedule-service.d.ts +76 -0
- package/dist/lib/schedule-service.d.ts.map +1 -0
- package/dist/lib/search-targets.d.ts +12 -0
- package/dist/lib/search-targets.d.ts.map +1 -0
- package/dist/lib/speech.d.ts +36 -0
- package/dist/lib/speech.d.ts.map +1 -0
- package/dist/lib/supabase.d.ts +10 -0
- package/dist/lib/supabase.d.ts.map +1 -0
- package/dist/org/adapters/mock.d.ts +4 -0
- package/dist/org/adapters/mock.d.ts.map +1 -0
- package/dist/org/adapters/supabase.d.ts +33 -0
- package/dist/org/adapters/supabase.d.ts.map +1 -0
- package/dist/org/cache.d.ts +29 -0
- package/dist/org/cache.d.ts.map +1 -0
- package/dist/org/context.d.ts +36 -0
- package/dist/org/context.d.ts.map +1 -0
- package/dist/org/index.d.ts +10 -0
- package/dist/org/index.d.ts.map +1 -0
- package/dist/org/index.js +5 -0
- package/dist/org/index.js.map +1 -0
- package/dist/org/store.d.ts +20 -0
- package/dist/org/store.d.ts.map +1 -0
- package/dist/org/team-rows.d.ts +45 -0
- package/dist/org/team-rows.d.ts.map +1 -0
- package/dist/permissions/PermissionGate.d.ts +12 -0
- package/dist/permissions/PermissionGate.d.ts.map +1 -0
- package/dist/permissions/context.d.ts +39 -0
- package/dist/permissions/context.d.ts.map +1 -0
- package/dist/permissions/index.d.ts +5 -0
- package/dist/permissions/index.d.ts.map +1 -0
- package/dist/permissions/index.js +3 -0
- package/dist/permissions/index.js.map +1 -0
- package/dist/permissions/roles.d.ts +7 -0
- package/dist/permissions/roles.d.ts.map +1 -0
- package/dist/permissions/store.d.ts +21 -0
- package/dist/permissions/store.d.ts.map +1 -0
- package/dist/plugins/ModuleActionBar.d.ts +27 -0
- package/dist/plugins/ModuleActionBar.d.ts.map +1 -0
- package/dist/plugins/PluginRegistryManager.d.ts +13 -0
- package/dist/plugins/PluginRegistryManager.d.ts.map +1 -0
- package/dist/plugins/QuickActionsButton.d.ts +12 -0
- package/dist/plugins/QuickActionsButton.d.ts.map +1 -0
- package/dist/plugins/SettingsGroup.d.ts +25 -0
- package/dist/plugins/SettingsGroup.d.ts.map +1 -0
- package/dist/plugins/WidgetSlot.d.ts +8 -0
- package/dist/plugins/WidgetSlot.d.ts.map +1 -0
- package/dist/plugins/createPluginContext.d.ts +28 -0
- package/dist/plugins/createPluginContext.d.ts.map +1 -0
- package/dist/plugins/createViewRouter.d.ts +38 -0
- package/dist/plugins/createViewRouter.d.ts.map +1 -0
- package/dist/projects/ProjectsSettings.d.ts +3 -0
- package/dist/projects/ProjectsSettings.d.ts.map +1 -0
- package/dist/projects/SeuSiteWidget.d.ts +7 -0
- package/dist/projects/SeuSiteWidget.d.ts.map +1 -0
- package/dist/projects/provider.d.ts +8 -0
- package/dist/projects/provider.d.ts.map +1 -0
- package/dist/projects/store.d.ts +16 -0
- package/dist/projects/store.d.ts.map +1 -0
- package/dist/projects/types.d.ts +46 -0
- package/dist/projects/types.d.ts.map +1 -0
- package/dist/stores/auth.store.d.ts +12 -0
- package/dist/stores/auth.store.d.ts.map +1 -0
- package/dist/stores/billing.store.d.ts +2 -0
- package/dist/stores/billing.store.d.ts.map +1 -0
- package/dist/stores/chat.store.d.ts +208 -0
- package/dist/stores/chat.store.d.ts.map +1 -0
- package/dist/stores/createCrudStore.d.ts +54 -0
- package/dist/stores/createCrudStore.d.ts.map +1 -0
- package/dist/stores/index.d.ts +13 -0
- package/dist/stores/index.d.ts.map +1 -0
- package/dist/stores/invite.store.d.ts +11 -0
- package/dist/stores/invite.store.d.ts.map +1 -0
- package/dist/stores/layout.store.d.ts +2 -0
- package/dist/stores/layout.store.d.ts.map +1 -0
- package/dist/stores/locale.store.d.ts +17 -0
- package/dist/stores/locale.store.d.ts.map +1 -0
- package/dist/stores/location.store.d.ts +20 -0
- package/dist/stores/location.store.d.ts.map +1 -0
- package/dist/stores/notifications.store.d.ts +12 -0
- package/dist/stores/notifications.store.d.ts.map +1 -0
- package/dist/stores/organization.store.d.ts +2 -0
- package/dist/stores/organization.store.d.ts.map +1 -0
- package/dist/stores/permissions.store.d.ts +2 -0
- package/dist/stores/permissions.store.d.ts.map +1 -0
- package/dist/stores/plugin.store.d.ts +24 -0
- package/dist/stores/plugin.store.d.ts.map +1 -0
- package/dist/stores/tenant.store.d.ts +11 -0
- package/dist/stores/tenant.store.d.ts.map +1 -0
- package/dist/stores/theme.store.d.ts +17 -0
- package/dist/stores/theme.store.d.ts.map +1 -0
- package/dist/theme/dark.d.ts +3 -0
- package/dist/theme/dark.d.ts.map +1 -0
- package/dist/theme/index.d.ts +8 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/light.d.ts +3 -0
- package/dist/theme/light.d.ts.map +1 -0
- package/dist/theme/tailwind-preset.d.ts +4 -0
- package/dist/theme/tailwind-preset.d.ts.map +1 -0
- package/dist/theme/tokens.d.ts +119 -0
- package/dist/theme/tokens.d.ts.map +1 -0
- package/dist/theme/utils.d.ts +31 -0
- package/dist/theme/utils.d.ts.map +1 -0
- package/dist/types/auth-adapter.d.ts +14 -0
- package/dist/types/auth-adapter.d.ts.map +1 -0
- package/dist/types/auth.d.ts +34 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/billing.d.ts +81 -0
- package/dist/types/billing.d.ts.map +1 -0
- package/dist/types/client-orders.d.ts +47 -0
- package/dist/types/client-orders.d.ts.map +1 -0
- package/dist/types/crud.d.ts +137 -0
- package/dist/types/crud.d.ts.map +1 -0
- package/dist/types/entities.d.ts +150 -0
- package/dist/types/entities.d.ts.map +1 -0
- package/dist/types/entity-lookup.d.ts +18 -0
- package/dist/types/entity-lookup.d.ts.map +1 -0
- package/dist/types/index.d.ts +17 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/integrations.d.ts +48 -0
- package/dist/types/integrations.d.ts.map +1 -0
- package/dist/types/invite.d.ts +23 -0
- package/dist/types/invite.d.ts.map +1 -0
- package/dist/types/layout.d.ts +26 -0
- package/dist/types/layout.d.ts.map +1 -0
- package/dist/types/notifications.d.ts +31 -0
- package/dist/types/notifications.d.ts.map +1 -0
- package/dist/types/org-adapter.d.ts +92 -0
- package/dist/types/org-adapter.d.ts.map +1 -0
- package/dist/types/permissions.d.ts +39 -0
- package/dist/types/permissions.d.ts.map +1 -0
- package/dist/types/platform.d.ts +25 -0
- package/dist/types/platform.d.ts.map +1 -0
- package/dist/types/plugins.d.ts +269 -0
- package/dist/types/plugins.d.ts.map +1 -0
- package/dist/types/tenant.d.ts +74 -0
- package/dist/types/tenant.d.ts.map +1 -0
- package/dist/ui.d.ts +2 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +3 -0
- package/dist/ui.js.map +1 -0
- package/package.json +94 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/schedule-service.ts","../src/crud/archetypes/BlockSettingsPopover.tsx","../src/crud/archetypes/ScheduleEditor.tsx"],"names":["useTranslation","useRef","jsx","jsxs","X","useState","useEffect"],"mappings":"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","file":"ScheduleEditor-BSFF7LME.js","sourcesContent":["// ---------------------------------------------------------------------------\n// Standalone Schedule CRUD Service\n// Works outside the agenda plugin context — uses Supabase directly.\n// ---------------------------------------------------------------------------\n\n// Core tables now live in the public schema — use the plain client directly.\nimport { getFayzSupabaseClient as getCoreClient } from '../data/client'\nimport { useOrganizationStore } from '../org'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ScheduleRecord {\n id: string\n tenantId: string\n kind: string\n assigneeId: string | null\n locationId: string | null\n dayOfWeek: number | null\n specificDate: string | null\n startsAt: string\n endsAt: string\n isActive: boolean\n metadata: Record<string, unknown>\n}\n\nexport interface SaveScheduleInput {\n assigneeId: string\n locationId?: string\n dayOfWeek?: number\n specificDate?: string\n startsAt: string\n endsAt: string\n isActive?: boolean\n kind?: string\n}\n\n/** Advanced settings stored per schedule block in the metadata jsonb column. */\nexport interface BlockSettings {\n bufferMinutes?: number\n allowedServiceIds?: string[]\n maxConcurrent?: number\n minAdvanceHours?: number\n maxAdvanceDays?: number\n label?: string\n locationId?: string\n}\n\n/** Extract BlockSettings from a schedule record's metadata. */\nexport function parseBlockSettings(metadata: Record<string, unknown>): BlockSettings {\n return {\n bufferMinutes: typeof metadata.bufferMinutes === 'number' ? metadata.bufferMinutes : undefined,\n allowedServiceIds: Array.isArray(metadata.allowedServiceIds) ? metadata.allowedServiceIds : undefined,\n maxConcurrent: typeof metadata.maxConcurrent === 'number' ? metadata.maxConcurrent : undefined,\n minAdvanceHours: typeof metadata.minAdvanceHours === 'number' ? metadata.minAdvanceHours : undefined,\n maxAdvanceDays: typeof metadata.maxAdvanceDays === 'number' ? metadata.maxAdvanceDays : undefined,\n label: typeof metadata.label === 'string' ? metadata.label : undefined,\n locationId: typeof metadata.locationId === 'string' ? metadata.locationId : undefined,\n }\n}\n\n/** Merge BlockSettings into existing metadata object. */\nexport function mergeBlockSettings(metadata: Record<string, unknown>, settings: BlockSettings): Record<string, unknown> {\n const merged = { ...metadata }\n // Only set defined values, remove undefined ones to keep metadata clean\n for (const [key, value] of Object.entries(settings)) {\n if (value !== undefined && value !== null && !(Array.isArray(value) && value.length === 0)) {\n merged[key] = value\n } else {\n delete merged[key]\n }\n }\n return merged\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction getTenantId(): string {\n const id = useOrganizationStore.getState().currentOrg?.id\n if (!id) throw new Error('No active tenant')\n return id\n}\n\nfunction mapRow(row: Record<string, unknown>): ScheduleRecord {\n const r: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(row)) {\n r[key.replace(/_([a-z])/g, (_, c) => c.toUpperCase())] = value\n }\n return r as unknown as ScheduleRecord\n}\n\n// ---------------------------------------------------------------------------\n// Service functions\n// ---------------------------------------------------------------------------\n\nexport async function getSchedules(\n assigneeId: string,\n kind = 'working_hours',\n): Promise<ScheduleRecord[]> {\n const core = getCoreClient()\n const { data, error } = await core\n .from('schedules')\n .select('*')\n .eq('kind', kind)\n .eq('assignee_id', assigneeId)\n .order('day_of_week')\n .order('starts_at')\n\n if (error) throw error\n return (data ?? []).map(mapRow)\n}\n\nexport async function saveSchedule(input: SaveScheduleInput): Promise<ScheduleRecord> {\n const core = getCoreClient()\n const tenantId = getTenantId()\n\n const { data, error } = await core\n .from('schedules')\n .insert({\n tenant_id: tenantId,\n kind: input.kind ?? 'working_hours',\n assignee_id: input.assigneeId,\n location_id: input.locationId ?? null,\n day_of_week: input.dayOfWeek ?? null,\n specific_date: input.specificDate ?? null,\n starts_at: input.startsAt,\n ends_at: input.endsAt,\n is_active: input.isActive ?? true,\n })\n .select('*')\n .single()\n\n if (error) throw error\n return mapRow(data as Record<string, unknown>)\n}\n\nexport async function deleteSchedule(id: string): Promise<void> {\n const core = getCoreClient()\n const { error } = await core.from('schedules').delete().eq('id', id)\n if (error) throw error\n}\n\n/**\n * Replace all weekly schedules (day_of_week based) for an assignee.\n * Deletes existing weekly entries and creates new ones in a single flow.\n */\nexport async function replaceWeeklySchedules(\n assigneeId: string,\n week: Record<number, { enabled: boolean; periods: { startsAt: string; endsAt: string; settings?: BlockSettings }[] }>,\n kind = 'working_hours',\n): Promise<void> {\n const core = getCoreClient()\n const tenantId = getTenantId()\n\n // Delete existing weekly schedules (day_of_week NOT NULL, specific_date IS NULL)\n const { error: delErr } = await core\n .from('schedules')\n .delete()\n .eq('assignee_id', assigneeId)\n .eq('kind', kind)\n .not('day_of_week', 'is', null)\n .is('specific_date', null)\n\n if (delErr) throw delErr\n\n // Build insert rows\n const rows: Record<string, unknown>[] = []\n for (const [dayStr, day] of Object.entries(week)) {\n if (!day.enabled) continue\n for (const period of day.periods) {\n const metadata = period.settings ? mergeBlockSettings({}, period.settings) : {}\n rows.push({\n tenant_id: tenantId,\n kind,\n assignee_id: assigneeId,\n day_of_week: Number(dayStr),\n specific_date: null,\n starts_at: period.startsAt,\n ends_at: period.endsAt,\n is_active: true,\n metadata,\n })\n }\n }\n\n if (rows.length > 0) {\n const { error: insErr } = await core.from('schedules').insert(rows)\n if (insErr) throw insErr\n }\n}\n\n/**\n * Enumerate all dates in a range (inclusive).\n */\nfunction eachDate(startDate: string, endDate: string): string[] {\n const dates: string[] = []\n const current = new Date(startDate + 'T00:00:00Z')\n const end = new Date(endDate + 'T00:00:00Z')\n while (current <= end) {\n dates.push(current.toISOString().slice(0, 10))\n current.setUTCDate(current.getUTCDate() + 1)\n }\n return dates\n}\n\n/**\n * Save a date-range exception.\n * type: 'unavailable' marks days off, 'available' sets custom hours.\n * Stores notes and range info in metadata for retrieval.\n */\nexport async function saveException(input: {\n assigneeId: string\n startDate: string\n endDate: string\n type: 'available' | 'unavailable'\n periods: { startsAt: string; endsAt: string }[]\n notes?: string\n settings?: BlockSettings\n kind?: string\n}): Promise<void> {\n const core = getCoreClient()\n const tenantId = getTenantId()\n const kind = input.kind ?? 'working_hours'\n const dates = eachDate(input.startDate, input.endDate)\n const isRange = dates.length > 1\n const meta = mergeBlockSettings(\n {\n ...(input.notes ? { notes: input.notes } : {}),\n ...(isRange ? { rangeStart: input.startDate, rangeEnd: input.endDate } : {}),\n exceptionType: input.type,\n },\n input.settings ?? {},\n )\n\n // Delete existing exceptions for all dates in range (single query)\n const { error: delErr } = await core\n .from('schedules')\n .delete()\n .eq('assignee_id', input.assigneeId)\n .eq('kind', kind)\n .in('specific_date', dates)\n if (delErr) throw delErr\n\n const rows: Record<string, unknown>[] = []\n\n if (input.type === 'unavailable') {\n // One sentinel row per date with is_active: false\n for (const date of dates) {\n rows.push({\n tenant_id: tenantId,\n kind,\n assignee_id: input.assigneeId,\n day_of_week: null,\n specific_date: date,\n starts_at: '00:00',\n ends_at: '00:00',\n is_active: false,\n metadata: meta,\n })\n }\n } else {\n // Custom available hours for each date\n for (const date of dates) {\n for (const p of input.periods) {\n rows.push({\n tenant_id: tenantId,\n kind,\n assignee_id: input.assigneeId,\n day_of_week: null,\n specific_date: date,\n starts_at: p.startsAt,\n ends_at: p.endsAt,\n is_active: true,\n metadata: meta,\n })\n }\n }\n }\n\n if (rows.length > 0) {\n const { error } = await core.from('schedules').insert(rows)\n if (error) throw error\n }\n}\n\n/**\n * Delete an exception by its start date.\n * If it was part of a range, deletes all dates in that range.\n */\nexport async function deleteException(\n assigneeId: string,\n startDate: string,\n endDate?: string,\n kind = 'working_hours',\n): Promise<void> {\n const core = getCoreClient()\n const dates = eachDate(startDate, endDate ?? startDate)\n const { error } = await core\n .from('schedules')\n .delete()\n .eq('assignee_id', assigneeId)\n .eq('kind', kind)\n .in('specific_date', dates)\n if (error) throw error\n}\n","import React, { useRef, useEffect, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { X, ChevronDown } from 'lucide-react'\nimport type { BlockSettings } from '../../lib/schedule-service'\nimport type { ScheduleBlockConfig } from '../../lib/schedule-config'\nimport { useTranslation } from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// Props\n// ---------------------------------------------------------------------------\n\ninterface BlockSettingsPopoverProps {\n settings: BlockSettings\n onChange: (settings: BlockSettings) => void\n config: ScheduleBlockConfig\n /** Ref to the trigger element for positioning */\n triggerRef: React.RefObject<HTMLElement | null>\n open: boolean\n onClose: () => void\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function BlockSettingsPopover({\n settings,\n onChange,\n config,\n triggerRef,\n open,\n onClose,\n}: BlockSettingsPopoverProps) {\n const t = useTranslation()\n const popoverRef = useRef<HTMLDivElement>(null)\n const [pos, setPos] = useState({ top: 0, left: 0 })\n\n useEffect(() => {\n if (!open || !triggerRef.current) return\n const rect = triggerRef.current.getBoundingClientRect()\n const popW = 280\n let left = rect.left + rect.width / 2 - popW / 2\n if (left + popW > window.innerWidth - 12) left = window.innerWidth - popW - 12\n if (left < 8) left = 8\n setPos({ top: rect.bottom + 6, left })\n }, [open, triggerRef])\n\n useEffect(() => {\n if (!open) return\n const handler = (e: MouseEvent) => {\n if (popoverRef.current?.contains(e.target as Node)) return\n if (triggerRef.current?.contains(e.target as Node)) return\n onClose()\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [open, onClose, triggerRef])\n\n if (!open) return null\n\n const showServices = config.showServices !== false && config.services && config.services.length > 0\n const showConcurrent = config.showConcurrent !== false\n const showBookingWindow = config.showBookingWindow !== false\n const showLocations = config.showLocations === true && config.locations && config.locations.length > 0\n\n function update(patch: Partial<BlockSettings>) {\n onChange({ ...settings, ...patch })\n }\n\n return createPortal(\n <div\n ref={popoverRef}\n style={{ position: 'fixed', top: pos.top, left: pos.left, zIndex: 9999 }}\n className=\"fayz-glass-surface w-[280px] rounded-xl border bg-popover shadow-xl\"\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-3 py-2.5 border-b\">\n <span className=\"text-xs font-semibold\">{t('schedule.blockSettings.title')}</span>\n <button type=\"button\" onClick={onClose} className=\"p-0.5 rounded text-muted-foreground hover:text-foreground\">\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n\n <div className=\"p-3 space-y-3\">\n {/* Location select */}\n {showLocations && (\n <LocationSelect\n locations={config.locations!}\n value={settings.locationId}\n onChange={(id) => update({ locationId: id || undefined })}\n />\n )}\n\n {/* Services multi-select */}\n {showServices && (\n <ServiceSelect\n services={config.services!}\n selected={settings.allowedServiceIds ?? []}\n onChange={(ids) => update({ allowedServiceIds: ids.length > 0 ? ids : undefined })}\n />\n )}\n\n {/* Max concurrent */}\n {showConcurrent && (\n <div>\n <label className=\"text-[11px] font-medium text-muted-foreground\">{t('schedule.blockSettings.maxConcurrent')}</label>\n <div className=\"flex items-center gap-2 mt-1\">\n <button\n type=\"button\"\n onClick={() => update({ maxConcurrent: Math.max(1, (settings.maxConcurrent ?? config.defaults.maxConcurrent) - 1) })}\n className=\"flex h-7 w-7 items-center justify-center rounded-md border text-sm hover:bg-muted bg-card shadow-button active:shadow-button-inset transition-colors\"\n >\n -\n </button>\n <span className=\"text-sm font-medium w-6 text-center\">\n {settings.maxConcurrent ?? config.defaults.maxConcurrent}\n </span>\n <button\n type=\"button\"\n onClick={() => update({ maxConcurrent: (settings.maxConcurrent ?? config.defaults.maxConcurrent) + 1 })}\n className=\"flex h-7 w-7 items-center justify-center rounded-md border text-sm hover:bg-muted bg-card shadow-button active:shadow-button-inset transition-colors\"\n >\n +\n </button>\n </div>\n </div>\n )}\n\n {/* Booking window */}\n {showBookingWindow && (\n <div className=\"grid grid-cols-2 gap-2\">\n <div>\n <label className=\"text-[11px] font-medium text-muted-foreground\">{t('schedule.blockSettings.minAdvance')}</label>\n <div className=\"flex items-center gap-1 mt-1\">\n <input\n type=\"number\"\n min={0}\n value={settings.minAdvanceHours ?? config.defaults.minAdvanceHours}\n onChange={(e) => update({ minAdvanceHours: Number(e.target.value) || 0 })}\n className=\"w-full rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1 text-xs tabular-nums\"\n />\n <span className=\"text-[10px] text-muted-foreground shrink-0\">{t('schedule.blockSettings.hrs')}</span>\n </div>\n </div>\n <div>\n <label className=\"text-[11px] font-medium text-muted-foreground\">{t('schedule.blockSettings.maxAdvance')}</label>\n <div className=\"flex items-center gap-1 mt-1\">\n <input\n type=\"number\"\n min={1}\n value={settings.maxAdvanceDays ?? config.defaults.maxAdvanceDays}\n onChange={(e) => update({ maxAdvanceDays: Number(e.target.value) || 30 })}\n className=\"w-full rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1 text-xs tabular-nums\"\n />\n <span className=\"text-[10px] text-muted-foreground shrink-0\">{t('schedule.blockSettings.days')}</span>\n </div>\n </div>\n </div>\n )}\n\n {/* Label */}\n <div>\n <label className=\"text-[11px] font-medium text-muted-foreground\">{t('schedule.blockSettings.label')}</label>\n <input\n type=\"text\"\n value={settings.label ?? ''}\n onChange={(e) => update({ label: e.target.value || undefined })}\n placeholder={t('schedule.blockSettings.labelPlaceholder')}\n className=\"mt-1 w-full rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1 text-xs placeholder:text-muted-foreground/40\"\n />\n </div>\n </div>\n </div>,\n document.body,\n )\n}\n\n// ---------------------------------------------------------------------------\n// Service multi-select (simple dropdown with checkboxes)\n// ---------------------------------------------------------------------------\n\n// ---------------------------------------------------------------------------\n// Location select (custom dropdown)\n// ---------------------------------------------------------------------------\n\nfunction LocationSelect({\n locations,\n value,\n onChange,\n}: {\n locations: { id: string; name: string }[]\n value: string | undefined\n onChange: (id: string) => void\n}) {\n const t = useTranslation()\n const [open, setOpen] = useState(false)\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!open) return\n const handler = (e: MouseEvent) => { if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false) }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [open])\n\n const current = value ? locations.find((l) => l.id === value) : null\n const label = current ? current.name : t('schedule.blockSettings.noLocation')\n\n return (\n <div ref={ref} className=\"relative\">\n <label className=\"text-[11px] font-medium text-muted-foreground\">{t('schedule.blockSettings.location')}</label>\n <button\n type=\"button\"\n onClick={() => setOpen((p) => !p)}\n className=\"mt-1 flex items-center justify-between w-full rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1.5 text-xs hover:bg-muted/30 transition-colors\"\n >\n <span className={current ? '' : 'text-muted-foreground'}>{label}</span>\n <ChevronDown className=\"h-3 w-3 text-muted-foreground\" />\n </button>\n {open && (\n <div className=\"fayz-glass-surface absolute top-full left-0 z-10 mt-1 w-full max-h-40 overflow-y-auto rounded-lg border bg-popover shadow-lg py-1\">\n <button\n type=\"button\"\n onClick={() => { onChange(''); setOpen(false) }}\n className={`block w-full px-2.5 py-1.5 text-xs text-left transition-colors ${!value ? 'bg-primary/10 text-primary font-medium' : 'hover:bg-muted/50'}`}\n >\n {t('schedule.blockSettings.noLocation')}\n </button>\n {locations.map((l) => (\n <button\n key={l.id}\n type=\"button\"\n onClick={() => { onChange(l.id); setOpen(false) }}\n className={`block w-full px-2.5 py-1.5 text-xs text-left transition-colors ${l.id === value ? 'bg-primary/10 text-primary font-medium' : 'hover:bg-muted/50'}`}\n >\n {l.name}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Service multi-select (simple dropdown with checkboxes)\n// ---------------------------------------------------------------------------\n\nfunction ServiceSelect({\n services,\n selected,\n onChange,\n}: {\n services: { id: string; name: string }[]\n selected: string[]\n onChange: (ids: string[]) => void\n}) {\n const t = useTranslation()\n const [open, setOpen] = useState(false)\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!open) return\n const handler = (e: MouseEvent) => { if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false) }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [open])\n\n const allSelected = selected.length === 0\n const label = allSelected\n ? t('schedule.blockSettings.allServices')\n : selected.length === 1\n ? services.find((s) => s.id === selected[0])?.name ?? t('schedule.blockSettings.oneService')\n : t('schedule.blockSettings.nServices', { count: selected.length })\n\n function toggle(id: string) {\n onChange(selected.includes(id) ? selected.filter((s) => s !== id) : [...selected, id])\n }\n\n return (\n <div ref={ref} className=\"relative\">\n <label className=\"text-[11px] font-medium text-muted-foreground\">{t('schedule.blockSettings.allowedServices')}</label>\n <button\n type=\"button\"\n onClick={() => setOpen((p) => !p)}\n className=\"mt-1 flex items-center justify-between w-full rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1.5 text-xs hover:bg-muted/30 transition-colors\"\n >\n <span className={allSelected ? 'text-muted-foreground' : ''}>{label}</span>\n <ChevronDown className=\"h-3 w-3 text-muted-foreground\" />\n </button>\n {open && (\n <div className=\"fayz-glass-surface absolute top-full left-0 z-10 mt-1 w-full max-h-40 overflow-y-auto rounded-lg border bg-popover shadow-lg py-1\">\n <button\n type=\"button\"\n onClick={() => onChange([])}\n className={`block w-full px-2.5 py-1.5 text-xs text-left transition-colors ${allSelected ? 'bg-primary/10 text-primary font-medium' : 'hover:bg-muted/50'}`}\n >\n {t('schedule.blockSettings.allServices')}\n </button>\n {services.map((s) => {\n const checked = selected.includes(s.id)\n return (\n <button\n key={s.id}\n type=\"button\"\n onClick={() => toggle(s.id)}\n className={`flex items-center gap-2 w-full px-2.5 py-1.5 text-xs text-left transition-colors ${checked ? 'bg-primary/5' : 'hover:bg-muted/50'}`}\n >\n <span className={`flex h-3.5 w-3.5 shrink-0 items-center justify-center rounded-sm border ${\n checked ? 'border-primary bg-primary text-primary-foreground' : 'border-muted-foreground/30'\n }`}>\n {checked && <svg className=\"h-2.5 w-2.5\" viewBox=\"0 0 12 12\" fill=\"none\"><path d=\"M2 6l3 3 5-5\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/></svg>}\n </span>\n <span className=\"truncate\">{s.name}</span>\n </button>\n )\n })}\n </div>\n )}\n </div>\n )\n}\n","import React, { useEffect, useState, useCallback, useRef, useSyncExternalStore } from 'react'\nimport { Clock, Plus, Trash2, Copy, Save, CalendarOff, CalendarPlus, Check, Settings, X } from 'lucide-react'\nimport { toast } from '@fayz-ai/ui'\nimport {\n getSchedules,\n replaceWeeklySchedules,\n saveException,\n deleteException,\n parseBlockSettings,\n} from '../../lib/schedule-service'\nimport type { ScheduleRecord, BlockSettings } from '../../lib/schedule-service'\nimport { getScheduleBlockConfig, subscribeScheduleBlockConfig } from '../../lib/schedule-config'\nimport type { ScheduleBlockConfig } from '../../lib/schedule-config'\nimport { useTranslation } from '@fayz-ai/core'\nimport { BlockSettingsPopover } from './BlockSettingsPopover'\nimport { Card, CardContent } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport { Badge } from '@fayz-ai/ui'\nimport { Skeleton } from '@fayz-ai/ui'\nimport { DatePicker } from '@fayz-ai/ui'\nimport { TimePicker } from '@fayz-ai/ui'\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@fayz-ai/ui'\nimport { Modal, ModalContent, ModalHeader, ModalBody, ModalFooter, ModalTitle, ModalDescription } from '@fayz-ai/ui'\nimport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from '@fayz-ai/ui'\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst DAY_KEYS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat']\nconst WEEK_ORDER = [1, 2, 3, 4, 5, 6, 0] // Mon–Sun display order\n\ninterface Period {\n id?: string\n startsAt: string\n endsAt: string\n settings?: BlockSettings\n}\n\ninterface DaySchedule {\n enabled: boolean\n periods: Period[]\n}\n\ntype WeekSchedule = Record<number, DaySchedule>\n\ninterface ExceptionEntry {\n startDate: string\n endDate: string\n type: 'available' | 'unavailable'\n periods: { startsAt: string; endsAt: string }[]\n notes: string\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction schedulesToWeek(schedules: ScheduleRecord[]): WeekSchedule {\n const week: WeekSchedule = {}\n for (let i = 0; i < 7; i++) {\n week[i] = { enabled: false, periods: [] }\n }\n for (const s of schedules) {\n if (s.dayOfWeek == null || s.specificDate != null) continue\n const day = week[s.dayOfWeek]\n if (s.isActive) {\n day.enabled = true\n const settings = parseBlockSettings(s.metadata ?? {})\n const hasSettings = Object.values(settings).some((v) => v !== undefined)\n day.periods.push({\n id: s.id,\n startsAt: s.startsAt,\n endsAt: s.endsAt,\n settings: hasSettings ? settings : undefined,\n })\n }\n }\n for (const day of Object.values(week)) {\n day.periods.sort((a, b) => a.startsAt.localeCompare(b.startsAt))\n }\n return week\n}\n\nfunction schedulesToExceptions(schedules: ScheduleRecord[]): ExceptionEntry[] {\n // Group by range key (rangeStart–rangeEnd or single date)\n const map = new Map<string, ExceptionEntry>()\n for (const s of schedules) {\n if (!s.specificDate) continue\n const meta = (s.metadata ?? {}) as Record<string, unknown>\n const rangeStart = (meta.rangeStart as string) ?? s.specificDate\n const rangeEnd = (meta.rangeEnd as string) ?? s.specificDate\n const key = `${rangeStart}__${rangeEnd}`\n const exType = (meta.exceptionType as string) === 'available' ? 'available' : 'unavailable'\n const notes = (meta.notes as string) ?? ''\n\n const existing = map.get(key)\n if (!existing) {\n map.set(key, {\n startDate: rangeStart,\n endDate: rangeEnd,\n type: exType,\n periods: s.isActive ? [{ startsAt: s.startsAt, endsAt: s.endsAt }] : [],\n notes,\n })\n } else if (s.isActive && s.specificDate === rangeStart) {\n existing.periods.push({ startsAt: s.startsAt, endsAt: s.endsAt })\n }\n }\n return Array.from(map.values()).sort((a, b) => a.startDate.localeCompare(b.startDate))\n}\n\nfunction formatDate(dateStr: string): string {\n const d = new Date(dateStr + 'T00:00:00')\n return d.toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' })\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\n// ---------------------------------------------------------------------------\n// PeriodRow — single time block as a horizontal row\n// ---------------------------------------------------------------------------\n\ninterface PeriodRowProps {\n period: Period\n dayOfWeek: number\n blockConfig: ScheduleBlockConfig | null\n settingsOpen: boolean\n onUpdateTime: (field: 'startsAt' | 'endsAt', value: string) => void\n onUpdateBuffer: (value: number) => void\n onUpdateSettings: (settings: BlockSettings) => void\n onRemove: () => void\n onAddBlock: () => void\n onCopyToAll: () => void\n onToggleSettings: () => void\n onCloseSettings: () => void\n}\n\nfunction PeriodRow({\n period, blockConfig, dayOfWeek,\n settingsOpen, onUpdateTime, onUpdateBuffer, onUpdateSettings,\n onRemove, onCopyToAll, onToggleSettings, onCloseSettings,\n onAddBlock,\n}: PeriodRowProps) {\n const t = useTranslation()\n const gearRef = useRef<HTMLButtonElement>(null)\n const bufferValue = period.settings?.bufferMinutes ?? blockConfig?.defaults.bufferMinutes ?? 0\n const hasCustomSettings = period.settings && Object.entries(period.settings).some(\n ([k, v]) => k !== 'bufferMinutes' && v !== undefined,\n )\n const dayName = t(`schedule.days.${DAY_KEYS[dayOfWeek]}`)\n\n return (\n <TooltipProvider delayDuration={300}>\n <div className=\"flex items-center gap-1.5 group\">\n {/* Label */}\n {period.settings?.label && (\n <span className=\"text-[10px] font-medium text-primary bg-primary/10 rounded-full px-2 py-0.5 shrink-0\">\n {period.settings.label}\n </span>\n )}\n\n {/* Time range */}\n <TimePicker value={period.startsAt} onChange={(v) => onUpdateTime('startsAt', v)} interval={30} className=\"w-[90px]\" />\n <span className=\"text-xs text-muted-foreground/50\">-</span>\n <TimePicker value={period.endsAt} onChange={(v) => onUpdateTime('endsAt', v)} interval={30} min={period.startsAt} className=\"w-[90px]\" />\n\n {/* Buffer pill */}\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex items-center gap-1 rounded-full border bg-muted/30 px-2 py-1 shrink-0\">\n <input\n type=\"number\"\n min={0}\n max={120}\n value={bufferValue}\n onChange={(e) => onUpdateBuffer(Number(e.target.value) || 0)}\n className=\"w-8 bg-transparent text-xs text-center tabular-nums outline-none\"\n />\n <span className=\"text-[10px] text-muted-foreground\">{t('schedule.editor.min')}</span>\n </div>\n </TooltipTrigger>\n <TooltipContent>{t('schedule.editor.bufferTooltip')}</TooltipContent>\n </Tooltip>\n\n {/* Actions */}\n <div className=\"flex items-center gap-0.5 shrink-0 ml-auto\">\n <Tooltip>\n <TooltipTrigger asChild>\n <button type=\"button\" onClick={onRemove}\n className=\"p-1.5 rounded-md text-muted-foreground/30 hover:text-destructive hover:bg-destructive/5 transition-colors\">\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>{t('schedule.editor.removeInterval')}</TooltipContent>\n </Tooltip>\n\n <Tooltip>\n <TooltipTrigger asChild>\n <button type=\"button\" onClick={onAddBlock}\n className=\"p-1.5 rounded-md text-muted-foreground/30 hover:text-foreground hover:bg-muted transition-colors\">\n <Plus className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>{t('schedule.editor.newInterval', { day: dayName })}</TooltipContent>\n </Tooltip>\n\n <Tooltip>\n <TooltipTrigger asChild>\n <button type=\"button\" onClick={onCopyToAll}\n className=\"p-1.5 rounded-md text-muted-foreground/30 hover:text-foreground hover:bg-muted transition-colors\">\n <Copy className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>{t('schedule.editor.copyToAll')}</TooltipContent>\n </Tooltip>\n\n {blockConfig && (\n <Tooltip>\n <TooltipTrigger asChild>\n <button ref={gearRef} type=\"button\" onClick={onToggleSettings}\n className={`p-1.5 rounded-md transition-colors ${\n hasCustomSettings\n ? 'text-primary bg-primary/5'\n : 'text-muted-foreground/30 hover:text-foreground hover:bg-muted'\n }`}>\n <Settings className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>{t('schedule.blockSettings.title')}</TooltipContent>\n </Tooltip>\n )}\n </div>\n\n {/* Settings popover */}\n {blockConfig && (\n <BlockSettingsPopover\n settings={period.settings ?? {}}\n onChange={onUpdateSettings}\n config={blockConfig}\n triggerRef={gearRef}\n open={settingsOpen}\n onClose={onCloseSettings}\n />\n )}\n </div>\n </TooltipProvider>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Main Component\n// ---------------------------------------------------------------------------\n\ninterface ScheduleEditorProps {\n assigneeId: string\n}\n\nexport function ScheduleEditor({ assigneeId }: ScheduleEditorProps) {\n const t = useTranslation()\n const [week, setWeek] = useState<WeekSchedule>({})\n const [exceptions, setExceptions] = useState<ExceptionEntry[]>([])\n const [loading, setLoading] = useState(true)\n const [saving, setSaving] = useState(false)\n const [showAddException, setShowAddException] = useState(false)\n const blockConfig = useSyncExternalStore(subscribeScheduleBlockConfig, getScheduleBlockConfig)\n const [settingsPopover, setSettingsPopover] = useState<{ dayOfWeek: number; idx: number } | null>(null)\n const [weekDirty, setWeekDirty] = useState(false)\n\n // Lazy-fetch locations when showLocations is enabled but locations aren't loaded yet\n useEffect(() => {\n if (blockConfig?.showLocations && (!blockConfig.locations || blockConfig.locations.length === 0) && blockConfig.fetchLocations) {\n blockConfig.fetchLocations().catch(() => {})\n }\n }, [blockConfig?.showLocations, blockConfig?.locations?.length])\n\n // New exception form state\n const [newExStartDate, setNewExStartDate] = useState('')\n const [newExEndDate, setNewExEndDate] = useState('')\n const [newExType, setNewExType] = useState<'unavailable' | 'available'>('unavailable')\n const [newExPeriods, setNewExPeriods] = useState([{ startsAt: '09:00', endsAt: '17:00' }])\n const [newExNotes, setNewExNotes] = useState('')\n const [savingException, setSavingException] = useState(false)\n\n const loadData = useCallback(async () => {\n setLoading(true)\n try {\n const data = await getSchedules(assigneeId)\n setWeek(schedulesToWeek(data))\n setExceptions(schedulesToExceptions(data))\n setWeekDirty(false)\n } catch {\n toast.error(t('schedule.editor.failedToLoad'))\n }\n setLoading(false)\n }, [assigneeId])\n\n useEffect(() => {\n loadData()\n }, [loadData])\n\n // --- Weekly hours handlers ---\n\n function markDirty() { setWeekDirty(true) }\n\n function toggleDay(dayOfWeek: number) {\n markDirty()\n setWeek((prev) => ({\n ...prev,\n [dayOfWeek]: {\n ...prev[dayOfWeek],\n enabled: !prev[dayOfWeek]?.enabled,\n periods: prev[dayOfWeek]?.enabled ? [] : [{ startsAt: '09:00', endsAt: '18:00' }],\n },\n }))\n }\n\n function updatePeriod(dayOfWeek: number, idx: number, field: 'startsAt' | 'endsAt', value: string) {\n markDirty()\n setWeek((prev) => {\n const day = { ...prev[dayOfWeek] }\n const periods = [...day.periods]\n periods[idx] = { ...periods[idx], [field]: value }\n return { ...prev, [dayOfWeek]: { ...day, periods } }\n })\n }\n\n function addPeriod(dayOfWeek: number) {\n markDirty()\n setWeek((prev) => {\n const day = { ...prev[dayOfWeek] }\n const last = day.periods[day.periods.length - 1]\n day.periods = [...day.periods, { startsAt: last?.endsAt ?? '13:00', endsAt: '18:00' }]\n return { ...prev, [dayOfWeek]: day }\n })\n }\n\n function removePeriod(dayOfWeek: number, idx: number) {\n markDirty()\n setWeek((prev) => {\n const day = { ...prev[dayOfWeek] }\n day.periods = day.periods.filter((_, i) => i !== idx)\n if (day.periods.length === 0) day.enabled = false\n return { ...prev, [dayOfWeek]: day }\n })\n }\n\n function updatePeriodSettings(dayOfWeek: number, idx: number, settings: BlockSettings) {\n markDirty()\n setWeek((prev) => {\n const day = { ...prev[dayOfWeek] }\n const periods = [...day.periods]\n periods[idx] = { ...periods[idx], settings }\n return { ...prev, [dayOfWeek]: { ...day, periods } }\n })\n }\n\n function updateBufferMinutes(dayOfWeek: number, idx: number, value: number) {\n markDirty()\n setWeek((prev) => {\n const day = { ...prev[dayOfWeek] }\n const periods = [...day.periods]\n const existing = periods[idx].settings ?? {}\n periods[idx] = { ...periods[idx], settings: { ...existing, bufferMinutes: value || undefined } }\n return { ...prev, [dayOfWeek]: { ...day, periods } }\n })\n }\n\n function copyToAll(sourceDayOfWeek: number) {\n markDirty()\n const source = week[sourceDayOfWeek]\n if (!source) return\n setWeek((prev) => {\n const next = { ...prev }\n for (let i = 0; i < 7; i++) {\n if (i === sourceDayOfWeek) continue\n next[i] = {\n enabled: source.enabled,\n periods: source.periods.map((p) => ({ startsAt: p.startsAt, endsAt: p.endsAt, settings: p.settings ? { ...p.settings } : undefined })),\n }\n }\n return next\n })\n }\n\n async function handleSaveWeekly() {\n setSaving(true)\n try {\n await replaceWeeklySchedules(assigneeId, week)\n toast.success(t('schedule.editor.saved'))\n loadData()\n } catch (err: any) {\n toast.error(t('schedule.editor.failedToSave'), { description: err?.message })\n }\n setSaving(false)\n }\n\n // --- Exception handlers ---\n\n async function handleAddException() {\n if (!newExStartDate) {\n toast.error(t('schedule.editor.selectStartDate'))\n return\n }\n const endDate = newExEndDate || newExStartDate\n if (endDate < newExStartDate) {\n toast.error(t('schedule.editor.endDateAfterStart'))\n return\n }\n setSavingException(true)\n try {\n await saveException({\n assigneeId,\n startDate: newExStartDate,\n endDate,\n type: newExType,\n periods: newExType === 'unavailable' ? [] : newExPeriods,\n notes: newExNotes || undefined,\n })\n toast.success(t('schedule.editor.exceptionAdded'))\n setShowAddException(false)\n setNewExStartDate('')\n setNewExEndDate('')\n setNewExType('unavailable')\n setNewExPeriods([{ startsAt: '09:00', endsAt: '17:00' }])\n setNewExNotes('')\n loadData()\n } catch (err: any) {\n toast.error(t('schedule.editor.failedToSaveException'), { description: err?.message })\n }\n setSavingException(false)\n }\n\n async function handleDeleteException(startDate: string, endDate: string) {\n try {\n await deleteException(assigneeId, startDate, endDate)\n toast.success(t('schedule.editor.exceptionRemoved'))\n loadData()\n } catch (err: any) {\n toast.error(t('schedule.editor.failedToDelete'), { description: err?.message })\n }\n }\n\n // --- Render ---\n\n if (loading) {\n return (\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"h-9 w-9 rounded-lg\" />\n <div className=\"space-y-1.5\"><Skeleton className=\"h-4 w-36\" /><Skeleton className=\"h-3 w-48\" /></div>\n </div>\n <Skeleton className=\"h-8 w-20 rounded-md\" />\n </div>\n <Card>\n <CardContent className=\"p-0 divide-y\">\n {Array.from({ length: 7 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-3 px-4 py-3\">\n <Skeleton className=\"h-5 w-5 rounded-full\" />\n <Skeleton className=\"h-4 w-8\" />\n {i < 5 ? (\n <>\n <Skeleton className=\"h-8 w-24 rounded-lg\" />\n <Skeleton className=\"h-3 w-3\" />\n <Skeleton className=\"h-8 w-24 rounded-lg\" />\n </>\n ) : (\n <Skeleton className=\"h-4 w-20\" />\n )}\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"h-9 w-9 rounded-lg\" />\n <div className=\"space-y-1.5\"><Skeleton className=\"h-4 w-32\" /><Skeleton className=\"h-3 w-44\" /></div>\n </div>\n <Skeleton className=\"h-8 w-32 rounded-md\" />\n </div>\n <Card><CardContent className=\"flex items-center justify-center py-8\"><Skeleton className=\"h-3 w-48\" /></CardContent></Card>\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n {/* ---- Weekly Working Hours ---- */}\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-primary/10\">\n <Clock className=\"h-4 w-4 text-primary\" />\n </div>\n <div>\n <h3 className=\"text-sm font-semibold\">{t('schedule.editor.weeklyTitle')}</h3>\n <p className=\"text-xs text-muted-foreground\">{t('schedule.editor.weeklyDescription')}</p>\n </div>\n </div>\n {weekDirty && (\n <Button size=\"sm\" onClick={handleSaveWeekly} disabled={saving}>\n <Save className=\"h-4 w-4 mr-1.5\" />\n {saving ? t('common.saving') : t('common.save')}\n </Button>\n )}\n </div>\n\n {/* Day rows */}\n <Card>\n <CardContent className=\"p-0 divide-y\">\n {WEEK_ORDER.map((dayOfWeek) => {\n const day = week[dayOfWeek] ?? { enabled: false, periods: [] }\n return (\n <div\n key={dayOfWeek}\n className={`flex items-start gap-4 px-4 py-3 transition-colors ${day.enabled ? '' : 'bg-muted/20'}`}\n >\n {/* Day toggle checkbox + label */}\n <button\n type=\"button\"\n onClick={() => toggleDay(dayOfWeek)}\n className=\"flex items-center gap-2.5 w-20 shrink-0 pt-1.5\"\n >\n <span className={`flex h-5 w-5 shrink-0 items-center justify-center rounded-full transition-all ${\n day.enabled\n ? 'bg-primary text-primary-foreground shadow-sm'\n : 'border-2 border-muted-foreground/25 hover:border-muted-foreground/40'\n }`}>\n {day.enabled && <Check className=\"h-3 w-3\" strokeWidth={3} />}\n </span>\n <span className={`text-sm font-medium ${day.enabled ? '' : 'text-muted-foreground/40'}`}>\n {t(`schedule.days.${DAY_KEYS[dayOfWeek]}`)}\n </span>\n </button>\n\n {/* Content */}\n {day.enabled ? (\n <div className=\"flex-1 space-y-2\">\n {day.periods.map((period, idx) => (\n <PeriodRow\n key={idx}\n period={period}\n dayOfWeek={dayOfWeek}\n blockConfig={blockConfig}\n settingsOpen={settingsPopover?.dayOfWeek === dayOfWeek && settingsPopover?.idx === idx}\n onUpdateTime={(field, v) => updatePeriod(dayOfWeek, idx, field, v)}\n onUpdateBuffer={(v) => updateBufferMinutes(dayOfWeek, idx, v)}\n onUpdateSettings={(s) => updatePeriodSettings(dayOfWeek, idx, s)}\n onRemove={() => removePeriod(dayOfWeek, idx)}\n onAddBlock={() => addPeriod(dayOfWeek)}\n onCopyToAll={() => copyToAll(dayOfWeek)}\n onToggleSettings={() => setSettingsPopover(\n settingsPopover?.dayOfWeek === dayOfWeek && settingsPopover?.idx === idx ? null : { dayOfWeek, idx }\n )}\n onCloseSettings={() => setSettingsPopover(null)}\n />\n ))}\n </div>\n ) : (\n <TooltipProvider delayDuration={300}>\n <div className=\"flex items-center gap-2 pt-1.5\">\n <span className=\"text-sm text-muted-foreground/40\">{t('schedule.editor.unavailable')}</span>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => toggleDay(dayOfWeek)}\n className=\"flex h-6 w-6 items-center justify-center rounded-full border border-muted-foreground/25 text-muted-foreground/40 hover:border-foreground/40 hover:text-foreground hover:bg-muted transition-colors\"\n >\n <Plus className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>{t('schedule.editor.addHoursFor', { day: t(`schedule.days.${DAY_KEYS[dayOfWeek]}`) })}</TooltipContent>\n </Tooltip>\n </div>\n </TooltipProvider>\n )}\n </div>\n )\n })}\n </CardContent>\n </Card>\n </div>\n\n {/* ---- Date Exceptions ---- */}\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-orange-500/10\">\n <CalendarOff className=\"h-4 w-4 text-orange-600\" />\n </div>\n <div>\n <h3 className=\"text-sm font-semibold\">{t('schedule.editor.exceptionsTitle')}</h3>\n <p className=\"text-xs text-muted-foreground\">{t('schedule.editor.exceptionsDescription')}</p>\n </div>\n </div>\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => setShowAddException(true)}\n >\n <CalendarPlus className=\"h-4 w-4 mr-1.5\" />\n {t('schedule.editor.addException')}\n </Button>\n </div>\n\n {/* Add exception modal */}\n <Modal open={showAddException} onOpenChange={setShowAddException}>\n <ModalContent size=\"md\">\n <ModalHeader>\n <ModalTitle>{t('schedule.editor.addException')}</ModalTitle>\n <ModalDescription>{t('schedule.editor.exceptionsDescription')}</ModalDescription>\n </ModalHeader>\n\n <ModalBody className=\"space-y-5\">\n {/* Date range */}\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"text-xs font-medium text-muted-foreground mb-1.5 block\">{t('schedule.editor.startDate')}</label>\n <DatePicker\n value={newExStartDate}\n onChange={(v) => {\n setNewExStartDate(v)\n if (!newExEndDate || v > newExEndDate) setNewExEndDate(v)\n }}\n />\n </div>\n <div>\n <label className=\"text-xs font-medium text-muted-foreground mb-1.5 block\">{t('schedule.editor.endDate')}</label>\n <DatePicker\n value={newExEndDate || newExStartDate}\n onChange={setNewExEndDate}\n />\n </div>\n </div>\n\n {/* Type — segmented tabs */}\n <div>\n <label className=\"text-xs font-medium text-muted-foreground mb-1.5 block\">{t('schedule.editor.type')}</label>\n <Tabs value={newExType} onValueChange={(v) => setNewExType(v as 'unavailable' | 'available')}>\n <TabsList className=\"h-9 w-full\">\n <TabsTrigger value=\"unavailable\" className=\"text-xs gap-1.5 flex-1\">\n <CalendarOff className=\"h-3.5 w-3.5\" />\n {t('schedule.editor.unavailable')}\n </TabsTrigger>\n <TabsTrigger value=\"available\" className=\"text-xs gap-1.5 flex-1\">\n <Clock className=\"h-3.5 w-3.5\" />\n {t('schedule.editor.customHours')}\n </TabsTrigger>\n </TabsList>\n </Tabs>\n </div>\n\n {/* Custom hours — only when type=available */}\n {newExType === 'available' && (\n <div className=\"space-y-3\">\n <label className=\"text-xs font-medium text-muted-foreground\">{t('schedule.editor.workingHours')}</label>\n {newExPeriods.map((period, idx) => (\n <div key={idx} className=\"flex items-center gap-3\">\n <TimePicker\n value={period.startsAt}\n onChange={(v) => {\n const updated = [...newExPeriods]\n updated[idx] = { ...updated[idx], startsAt: v }\n setNewExPeriods(updated)\n }}\n interval={30}\n className=\"flex-1\"\n />\n <span className=\"text-xs text-muted-foreground shrink-0\">{t('schedule.editor.to')}</span>\n <TimePicker\n value={period.endsAt}\n onChange={(v) => {\n const updated = [...newExPeriods]\n updated[idx] = { ...updated[idx], endsAt: v }\n setNewExPeriods(updated)\n }}\n interval={30}\n min={period.startsAt}\n className=\"flex-1\"\n />\n {newExPeriods.length > 1 && (\n <button\n type=\"button\"\n onClick={() => setNewExPeriods(newExPeriods.filter((_, i) => i !== idx))}\n className=\"p-1.5 rounded-md text-muted-foreground hover:text-destructive hover:bg-destructive/5 transition-colors shrink-0\"\n >\n <Trash2 className=\"h-3.5 w-3.5\" />\n </button>\n )}\n </div>\n ))}\n <button\n type=\"button\"\n onClick={() => {\n const last = newExPeriods[newExPeriods.length - 1]\n setNewExPeriods([...newExPeriods, { startsAt: last?.endsAt ?? '13:00', endsAt: '18:00' }])\n }}\n className=\"flex items-center gap-1 text-xs text-primary hover:underline\"\n >\n <Plus className=\"h-3 w-3\" /> {t('schedule.editor.addTimeBlock')}\n </button>\n </div>\n )}\n\n {/* Notes */}\n <div>\n <label className=\"text-xs font-medium text-muted-foreground mb-1.5 block\">{t('schedule.editor.notes')}</label>\n <input\n type=\"text\"\n value={newExNotes}\n onChange={(e) => setNewExNotes(e.target.value)}\n placeholder={t('schedule.editor.notesPlaceholder')}\n className=\"block w-full rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm placeholder:text-muted-foreground/40 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-1\"\n />\n </div>\n </ModalBody>\n\n <ModalFooter>\n <Button variant=\"ghost\" onClick={() => setShowAddException(false)}>\n {t('common.cancel')}\n </Button>\n <Button onClick={handleAddException} disabled={savingException}>\n <Save className=\"h-3.5 w-3.5 mr-1.5\" />\n {savingException ? t('common.saving') : t('schedule.editor.saveException')}\n </Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n\n {/* Exception list */}\n {exceptions.length > 0 ? (\n <Card>\n <CardContent className=\"p-0 divide-y\">\n {exceptions.map((ex) => {\n const isRange = ex.startDate !== ex.endDate\n const dateLabel = isRange\n ? `${formatDate(ex.startDate)} — ${formatDate(ex.endDate)}`\n : formatDate(ex.startDate)\n return (\n <div key={ex.startDate + ex.endDate} className=\"flex items-center justify-between px-4 py-3 group\">\n <div className=\"flex items-center gap-3 min-w-0\">\n {/* Type indicator dot */}\n <span className={`h-2.5 w-2.5 shrink-0 rounded-full ${\n ex.type === 'unavailable' ? 'bg-destructive' : 'bg-success'\n }`} />\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2 flex-wrap\">\n <span className=\"text-sm font-medium\">{dateLabel}</span>\n <Badge variant=\"secondary\" className=\"text-[10px]\">\n {ex.type === 'unavailable' ? t('schedule.editor.unavailable') : t('schedule.editor.customHours')}\n </Badge>\n {ex.type === 'available' && ex.periods.length > 0 && (\n <span className=\"text-xs text-muted-foreground\">\n {ex.periods.map((p) => `${p.startsAt} — ${p.endsAt}`).join(', ')}\n </span>\n )}\n </div>\n {ex.notes && (\n <p className=\"text-xs text-muted-foreground mt-0.5 truncate\">{ex.notes}</p>\n )}\n </div>\n </div>\n <button\n type=\"button\"\n onClick={() => handleDeleteException(ex.startDate, ex.endDate)}\n className=\"p-1.5 rounded-md text-muted-foreground hover:text-destructive hover:bg-destructive/5 transition-colors shrink-0 ml-2\"\n title={t('schedule.editor.removeException')}\n >\n <Trash2 className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n )\n })}\n </CardContent>\n </Card>\n ) : (\n !showAddException && (\n <Card>\n <CardContent className=\"flex items-center justify-center py-8 text-sm text-muted-foreground\">\n {t('schedule.editor.noExceptions')}\n </CardContent>\n </Card>\n )\n )}\n </div>\n </div>\n )\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { SubscriptionPage } from './chunk-5O2UJAQ7.js';
|
|
2
|
+
import './chunk-YUHCC7JY.js';
|
|
3
|
+
import './chunk-VN5NTK26.js';
|
|
4
|
+
import './chunk-PNAJODZM.js';
|
|
5
|
+
import './chunk-VTEP2AQX.js';
|
|
6
|
+
//# sourceMappingURL=SubscriptionPage-NLZAZO4P.js.map
|
|
7
|
+
//# sourceMappingURL=SubscriptionPage-NLZAZO4P.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"SubscriptionPage-NLZAZO4P.js"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { LimitDeclaration } from '@fayz-ai/core';
|
|
3
|
+
import type { AccessApi, LimitState } from './types';
|
|
4
|
+
export interface AccessProviderProps {
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
/**
|
|
7
|
+
* App-level limit declarations layered ON TOP of the plugins' `declaredLimits`
|
|
8
|
+
* (app wins on key collision). Sourced from `config.billing.limitDeclarations`.
|
|
9
|
+
*/
|
|
10
|
+
limitDeclarations?: LimitDeclaration[];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Assembles the reactive {@link AccessSession} from the singleton stores and
|
|
14
|
+
* exposes the composed access API (role × plan). Thin by design — mounts just
|
|
15
|
+
* inside PermissionsProvider so it can reuse the live permission profile and the
|
|
16
|
+
* plugin runtime. Also publishes the merged limit declarations to the module
|
|
17
|
+
* registry so `invalidateLimit` works from non-React create handlers.
|
|
18
|
+
*/
|
|
19
|
+
export declare function AccessProvider({ children, limitDeclarations }: AccessProviderProps): React.JSX.Element;
|
|
20
|
+
export declare namespace AccessProvider {
|
|
21
|
+
var displayName: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The composed access API. Throws outside <AccessProvider> — use
|
|
25
|
+
* {@link useAccessOptional} for SDK components that must degrade gracefully.
|
|
26
|
+
*/
|
|
27
|
+
export declare function useAccess(): AccessApi;
|
|
28
|
+
/**
|
|
29
|
+
* Like {@link useAccess} but degrades to allow-all when no provider is mounted,
|
|
30
|
+
* so components stay usable under a bare host shell (gating is an enhancement).
|
|
31
|
+
*/
|
|
32
|
+
export declare function useAccessOptional(): AccessApi;
|
|
33
|
+
/**
|
|
34
|
+
* Live usage of a quantity limit for the active tenant. Resolves the limit's
|
|
35
|
+
* declaration (plugin manifest or app override) → a tenant-scoped `count(*)`,
|
|
36
|
+
* capped by the current plan. No declaration or no cap (or `-1`) ⇒ unlimited.
|
|
37
|
+
* Re-fetches when the tenant, plan cap, or an `invalidateLimit(key)` fires.
|
|
38
|
+
*/
|
|
39
|
+
export declare function useLimit(key: string): LimitState;
|
|
40
|
+
/**
|
|
41
|
+
* Imperative guard for create handlers: `await guard(n)` returns `'ok'` when
|
|
42
|
+
* adding `n` more rows stays within the cap, or `'blocked'` (and opens the global
|
|
43
|
+
* UpgradeModal) when it would exceed it. Always checks a FRESH count so it never
|
|
44
|
+
* relies on stale hook state.
|
|
45
|
+
*/
|
|
46
|
+
export declare function useLimitGuard(key: string): (n?: number) => Promise<'ok' | 'blocked'>;
|
|
47
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/access/context.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,EAAE,gBAAgB,EAA0B,MAAM,eAAe,CAAA;AAW7E,OAAO,KAAK,EAAE,SAAS,EAAiC,UAAU,EAAE,MAAM,SAAS,CAAA;AAgBnF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAA;CACvC;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE,EAAE,mBAAmB,qBAiDlF;yBAjDe,cAAc;;;AA6D9B;;;GAGG;AACH,wBAAgB,SAAS,IAAI,SAAS,CAIrC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,SAAS,CAG7C;AAeD;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAgDhD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CA4BpF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { PermissionAction } from '@fayz-ai/core';
|
|
2
|
+
import { type AgentGuardResult } from '@fayz-ai/core/access';
|
|
3
|
+
import type { AccessSession } from './types';
|
|
4
|
+
/**
|
|
5
|
+
* Snapshot of the live session assembled from the singleton stores — the same
|
|
6
|
+
* assembly AccessProvider does reactively. Values are as-hydrated: before
|
|
7
|
+
* AuthProvider/OrgProvider finish, fields are null (and decisions fail-open on
|
|
8
|
+
* profile, closed on nothing — same semantics as the providers).
|
|
9
|
+
*/
|
|
10
|
+
export declare function getAccessSnapshot(): AccessSession;
|
|
11
|
+
/** Imperative role × plan check over the live snapshot. */
|
|
12
|
+
export declare function checkAccess(feature: string, action?: PermissionAction): AgentGuardResult;
|
|
13
|
+
/**
|
|
14
|
+
* Imperative plan-limit guard: would adding `n` rows exceed the cap for
|
|
15
|
+
* `key`? Counts FRESH (never trusts stale hook state), mirrors useLimitGuard.
|
|
16
|
+
* No declaration / no cap / `-1` / no tenant ⇒ allowed. Does NOT open the
|
|
17
|
+
* UpgradeModal — the caller decides how to surface the denial (an agent turns
|
|
18
|
+
* it into a conversational upgrade prompt).
|
|
19
|
+
*/
|
|
20
|
+
export declare function guardLimit(key: string, n?: number): Promise<AgentGuardResult>;
|
|
21
|
+
//# sourceMappingURL=headless.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headless.d.ts","sourceRoot":"","sources":["../../src/access/headless.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAQ,MAAM,eAAe,CAAA;AAE3D,OAAO,EAA8B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAMxF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAa5C;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,CAOjD;AAED,2DAA2D;AAC3D,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,CAKxF;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,SAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmB9E"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { AccessProvider, useAccess, useAccessOptional, useLimit, useLimitGuard } from './context';
|
|
2
|
+
export type { AccessProviderProps } from './context';
|
|
3
|
+
export { resolveAccess, isEntitledByPlan } from './resolver';
|
|
4
|
+
export { getAccessSnapshot, checkAccess, guardLimit } from './headless';
|
|
5
|
+
export { agentDenial, UPGRADE_URL } from '@fayz-ai/core/access';
|
|
6
|
+
export type { AgentDenial, AgentDenialLimit, AgentGuardResult } from '@fayz-ai/core/access';
|
|
7
|
+
export { invalidateLimit, setLimitRegistry, getLimitDeclaration, CORE_LIMIT_DECLARATIONS } from './limits-registry';
|
|
8
|
+
export { useModuleNavAccess, applyNavAccess } from './module-nav';
|
|
9
|
+
export { useUpgradeModalStore } from './upgrade-modal-store';
|
|
10
|
+
export type { UpgradeModalPayload, UpgradeModalStore } from './upgrade-modal-store';
|
|
11
|
+
export type { AccessApi, AccessDecision, AccessSession, DenyReason, LimitState, } from './types';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/access/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACjG,YAAY,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAEpD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAE5D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAC/D,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAE3F,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAEnH,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAEjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAC5D,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAEnF,YAAY,EACV,SAAS,EACT,cAAc,EACd,aAAa,EACb,UAAU,EACV,UAAU,GACX,MAAM,SAAS,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { LimitDeclaration, RegisteredEntity } from '@fayz-ai/core';
|
|
2
|
+
/**
|
|
3
|
+
* Module-level registry bridging React (the provider that knows the declarations)
|
|
4
|
+
* and the plain `invalidateLimit(key)` function that create handlers call outside
|
|
5
|
+
* any component. The AccessProvider publishes the merged declarations here on
|
|
6
|
+
* mount; `useLimit`/`useLimitGuard` and `invalidateLimit` read from it.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Shell built-in limit declarations. Unlike plugin/app limits (contributed via
|
|
10
|
+
* `PluginManifest.declaredLimits` / `billing.limitDeclarations`), these count
|
|
11
|
+
* core tenant tables that have no owning plugin: seats (`tenant_members`) and
|
|
12
|
+
* `locations`. Merged as the LOWEST-priority layer by the AccessProvider, so a
|
|
13
|
+
* plugin or app may still override a key (e.g. add a `kindFilter`).
|
|
14
|
+
*/
|
|
15
|
+
export declare const CORE_LIMIT_DECLARATIONS: LimitDeclaration[];
|
|
16
|
+
/**
|
|
17
|
+
* Entity-derived layer of the limit merge: any registered CRUD entity carrying
|
|
18
|
+
* `limitKey` yields a declaration for free from its own data mapping (table +
|
|
19
|
+
* archetype kind) — a cap without a countable binding is a dead cap. Shared by
|
|
20
|
+
* the AccessProvider (live registry) and the manifest derivation (agent
|
|
21
|
+
* contract), so both resolve the identical layer.
|
|
22
|
+
*/
|
|
23
|
+
export declare function entityDerivedLimitDeclarations(entities: RegisteredEntity[]): LimitDeclaration[];
|
|
24
|
+
/** Called by AccessProvider whenever the merged limit declarations change. */
|
|
25
|
+
export declare function setLimitRegistry(declarations: LimitDeclaration[]): void;
|
|
26
|
+
export declare function getLimitDeclaration(key: string): LimitDeclaration | undefined;
|
|
27
|
+
export declare function subscribeLimit(key: string, cb: () => void): () => void;
|
|
28
|
+
/**
|
|
29
|
+
* Invalidate a limit after a create/delete so its next read is fresh, then wake
|
|
30
|
+
* any mounted `useLimit(key)`. Safe to call from plain handlers (no React).
|
|
31
|
+
*/
|
|
32
|
+
export declare function invalidateLimit(key: string): void;
|
|
33
|
+
//# sourceMappingURL=limits-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limits-registry.d.ts","sourceRoot":"","sources":["../../src/access/limits-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAGvE;;;;;GAKG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,EAAE,gBAAgB,EAGrD,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,EAAE,CAc/F;AAID,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAIvE;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAE7E;AAQD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAWtE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAIjD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ModuleNavItem } from '@fayz-ai/ui';
|
|
2
|
+
import type { AccessApi } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Pure decoration used by {@link useModuleNavAccess}. Kept store-free so it is
|
|
5
|
+
* directly unit-testable: pass the composed {@link AccessApi} and the set of
|
|
6
|
+
* feature ids known to the RBAC catalog.
|
|
7
|
+
*/
|
|
8
|
+
export declare function applyNavAccess(items: ModuleNavItem[], access: AccessApi, knownFeatures: Set<string>): ModuleNavItem[];
|
|
9
|
+
/**
|
|
10
|
+
* Resolve a plugin's internal nav against role × plan: hides role-denied links,
|
|
11
|
+
* badges plan-denied ones with a Crown (`premium`), and passes everything else
|
|
12
|
+
* through unchanged. Recursive over children.
|
|
13
|
+
*/
|
|
14
|
+
export declare function useModuleNavAccess(items: ModuleNavItem[]): ModuleNavItem[];
|
|
15
|
+
//# sourceMappingURL=module-nav.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-nav.d.ts","sourceRoot":"","sources":["../../src/access/module-nav.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAGhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAuBxC;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,aAAa,EAAE,EACtB,MAAM,EAAE,SAAS,EACjB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,GACzB,aAAa,EAAE,CA2BjB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAW1E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/access/resolver.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { AuthUser, Organization, PermissionProfile, Plan, PermissionAction } from '@fayz-ai/core';
|
|
2
|
+
/**
|
|
3
|
+
* Decision types come from the shared engine in @fayz-ai/core/access.
|
|
4
|
+
* - `role` — the user's RBAC profile lacks the permission (fix: grant the role).
|
|
5
|
+
* - `plan` — the tenant's plan does not entitle the feature (fix: upgrade).
|
|
6
|
+
* - `limit` — a guarded write would exceed a plan cap (fix: upgrade).
|
|
7
|
+
* The distinction drives the UI: `role` → AccessDenied, `plan`/`limit` →
|
|
8
|
+
* UpgradePrompt/UpgradeModal.
|
|
9
|
+
*/
|
|
10
|
+
import type { AccessDecision } from '@fayz-ai/core/access';
|
|
11
|
+
export type { DenyReason, AccessDecision } from '@fayz-ai/core/access';
|
|
12
|
+
/**
|
|
13
|
+
* The reactive snapshot the access engine resolves against. Assembled from the
|
|
14
|
+
* singleton stores (auth user, current org incl. plan id, current permission
|
|
15
|
+
* profile, billing plans). This is intentionally ONE extensible object: future
|
|
16
|
+
* session parameters (active location, feature-flag cohort, delegated scope, …)
|
|
17
|
+
* enter here so the resolver signature never churns.
|
|
18
|
+
*/
|
|
19
|
+
export interface AccessSession {
|
|
20
|
+
user: AuthUser | null;
|
|
21
|
+
org: Organization | null;
|
|
22
|
+
/** Effective profile — becomes the previewed role during impersonation. */
|
|
23
|
+
profile: PermissionProfile | null;
|
|
24
|
+
/** The org's currently-active plan (resolved from billing plans by org.plan). */
|
|
25
|
+
plan: Plan | null;
|
|
26
|
+
}
|
|
27
|
+
export interface LimitState {
|
|
28
|
+
key: string;
|
|
29
|
+
/** Cap from the plan (`-1`/unlimited surfaces as `Infinity` here). */
|
|
30
|
+
max: number;
|
|
31
|
+
used: number;
|
|
32
|
+
remaining: number;
|
|
33
|
+
atLimit: boolean;
|
|
34
|
+
unlimited: boolean;
|
|
35
|
+
loading: boolean;
|
|
36
|
+
/** Re-count (bypasses the short-lived cache). */
|
|
37
|
+
refresh(): void;
|
|
38
|
+
}
|
|
39
|
+
export interface AccessApi {
|
|
40
|
+
can(feature: string, action?: PermissionAction): AccessDecision;
|
|
41
|
+
entitled(feature: string): boolean;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/access/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,iBAAiB,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAEtG;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE1D,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAEtE;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAA;IACrB,GAAG,EAAE,YAAY,GAAG,IAAI,CAAA;IACxB,2EAA2E;IAC3E,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACjC,iFAAiF;IACjF,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAA;IACX,sEAAsE;IACtE,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,iDAAiD;IACjD,OAAO,IAAI,IAAI,CAAA;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,cAAc,CAAA;IAC/D,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAA;CACnC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Payload describing WHY the upgrade modal opened, so the visual component (owned
|
|
3
|
+
* by the shell/gates layer) can tailor its copy — a hit quantity cap
|
|
4
|
+
* (`limitKey`) or a plan-gated feature (`feature`).
|
|
5
|
+
*/
|
|
6
|
+
export interface UpgradeModalPayload {
|
|
7
|
+
limitKey?: string;
|
|
8
|
+
feature?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface UpgradeModalStore {
|
|
11
|
+
/** The active payload, or null when closed. */
|
|
12
|
+
current: UpgradeModalPayload | null;
|
|
13
|
+
open(payload: UpgradeModalPayload): void;
|
|
14
|
+
close(): void;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Global, lightweight store for the single app-wide UpgradeModal. `useLimitGuard`
|
|
18
|
+
* and imperative create handlers call `open(...)` when a limit blocks; the visual
|
|
19
|
+
* modal (rendered once near the shell root by the gates layer) subscribes to
|
|
20
|
+
* `current`. Kept as a zustand singleton so store + component share one instance.
|
|
21
|
+
*/
|
|
22
|
+
export declare const useUpgradeModalStore: import("zustand").UseBoundStore<import("zustand").StoreApi<UpgradeModalStore>>;
|
|
23
|
+
//# sourceMappingURL=upgrade-modal-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade-modal-store.d.ts","sourceRoot":"","sources":["../../src/access/upgrade-modal-store.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,+CAA+C;IAC/C,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAA;IACnC,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAA;IACxC,KAAK,IAAI,IAAI,CAAA;CACd;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,gFAI9B,CAAA"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type BottomNavItem, type MobileHeaderVariant, type ModuleNavVariant } from '@fayz-ai/ui';
|
|
3
|
+
import { type LoginAmbassador } from '@fayz-ai/plugin-auth';
|
|
4
|
+
import type { CustomPage, AppSiteConfig } from './config';
|
|
5
|
+
import type { AuthProvider } from '@fayz-ai/core';
|
|
6
|
+
export interface AdminShellProps {
|
|
7
|
+
appName: string;
|
|
8
|
+
layout?: 'sidebar' | 'topbar' | 'minimal';
|
|
9
|
+
logo?: React.ReactNode;
|
|
10
|
+
/**
|
|
11
|
+
* Icon-only mark, for square contexts where the full logo cannot fit.
|
|
12
|
+
*
|
|
13
|
+
* `logo` is usually a wordmark, and a wordmark squeezed into a 48px badge is
|
|
14
|
+
* either cropped or illegible. Screens that need a square use this and fall
|
|
15
|
+
* back to the app's initial — never to a cropped wordmark.
|
|
16
|
+
*/
|
|
17
|
+
markLogo?: React.ReactNode;
|
|
18
|
+
pages?: CustomPage[];
|
|
19
|
+
requireAuth?: boolean;
|
|
20
|
+
loginTagline?: string;
|
|
21
|
+
loginDescription?: string;
|
|
22
|
+
loginLogo?: React.ReactNode;
|
|
23
|
+
loginLayout?: 'split' | 'centered';
|
|
24
|
+
loginAmbassadors?: LoginAmbassador[];
|
|
25
|
+
loginAmbassadorsLabel?: string;
|
|
26
|
+
showOAuth?: boolean;
|
|
27
|
+
oauthProviders?: Exclude<AuthProvider, 'email'>[];
|
|
28
|
+
showSettings?: boolean;
|
|
29
|
+
showOrgSettings?: boolean;
|
|
30
|
+
/** Show the workspace/org switcher at the sidebar top. Default: true.
|
|
31
|
+
* Single-org apps (config.org.multiOrg === false) get false from the
|
|
32
|
+
* scaffold so B2C users never see an organization concept. */
|
|
33
|
+
showOrgSwitcher?: boolean;
|
|
34
|
+
/** Show the branding ("Identidade Visual") + company "Geral" settings tabs.
|
|
35
|
+
* Default: true. B2C apps pass false to hide org-identity settings. */
|
|
36
|
+
showBranding?: boolean;
|
|
37
|
+
/** Wrap the main content in an inset "framed" card (default: true). The
|
|
38
|
+
* sidebar is always flush/full-height. */
|
|
39
|
+
contentFrame?: boolean;
|
|
40
|
+
/** How module-internal navigation renders. Defaults to 'tabs' for the
|
|
41
|
+
* 'sidebar' layout and 'rail' for 'topbar'. */
|
|
42
|
+
moduleNav?: ModuleNavVariant;
|
|
43
|
+
/** Mobile bottom tab bar, passed straight through to AppShell. */
|
|
44
|
+
bottomNav?: BottomNavItem[];
|
|
45
|
+
/** Fired when a bottom-nav `action` item (e.g. the center "+") is tapped. */
|
|
46
|
+
onBottomNavAction?: (id: string) => void;
|
|
47
|
+
/** Mobile header treatment (<md), passed straight through to AppShell. */
|
|
48
|
+
mobileHeader?: MobileHeaderVariant;
|
|
49
|
+
/** Components mounted once inside the shell, rendering nothing visible. Used
|
|
50
|
+
* for app-level runtime nav contributions and similar always-on behavior. */
|
|
51
|
+
shellMounts?: React.ComponentType[];
|
|
52
|
+
/** Extra content rendered in the sidebar bottom region, above the user row
|
|
53
|
+
* (below the built-in "Seu site" project widget). */
|
|
54
|
+
sidebarFooter?: React.ReactNode;
|
|
55
|
+
/** Render nav-group children as bare labels with an elbow on the active one,
|
|
56
|
+
* instead of an icon each. See Sidebar's `navChildConnector`. */
|
|
57
|
+
navChildConnector?: boolean;
|
|
58
|
+
/** App's own fayz site — fallback for the "Seu site" widget (mock/standalone). */
|
|
59
|
+
site?: AppSiteConfig;
|
|
60
|
+
}
|
|
61
|
+
export declare function AdminShell(props: AdminShellProps): React.JSX.Element;
|
|
62
|
+
export declare namespace AdminShell {
|
|
63
|
+
var displayName: string;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=AdminShell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdminShell.d.ts","sourceRoot":"","sources":["../../src/app/AdminShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,mBAAmB,EAGxB,KAAK,gBAAgB,EAYtB,MAAM,aAAa,CAAA;AAIpB,OAAO,EAAmD,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAQ5G,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAuCjD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAA;IACzC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,KAAK,CAAC,EAAE,UAAU,EAAE,CAAA;IACpB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC3B,WAAW,CAAC,EAAE,OAAO,GAAG,UAAU,CAAA;IAClC,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAA;IACpC,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE,CAAA;IACjD,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;mEAE+D;IAC/D,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;4EACwE;IACxE,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;+CAC2C;IAC3C,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;oDACgD;IAChD,SAAS,CAAC,EAAE,gBAAgB,CAAA;IAC5B,kEAAkE;IAClE,SAAS,CAAC,EAAE,aAAa,EAAE,CAAA;IAC3B,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,0EAA0E;IAC1E,YAAY,CAAC,EAAE,mBAAmB,CAAA;IAClC;kFAC8E;IAC9E,WAAW,CAAC,EAAE,KAAK,CAAC,aAAa,EAAE,CAAA;IACnC;0DACsD;IACtD,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC/B;sEACkE;IAClE,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,kFAAkF;IAClF,IAAI,CAAC,EAAE,aAAa,CAAA;CACrB;AAo7BD,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,qBAoDhD;yBApDe,UAAU"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoginPage.d.ts","sourceRoot":"","sources":["../../src/app/LoginPage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type AuthLayout, type LoginAmbassador } from '@fayz-ai/plugin-auth';
|
|
3
|
+
import type { FayzAppConfig } from './config';
|
|
4
|
+
export declare function getAuthShellProps(auth: FayzAppConfig['auth']): {
|
|
5
|
+
requireAuth?: boolean;
|
|
6
|
+
loginTagline?: string;
|
|
7
|
+
loginDescription?: string;
|
|
8
|
+
loginLogo?: React.ReactNode;
|
|
9
|
+
loginLayout?: AuthLayout;
|
|
10
|
+
loginAmbassadors?: LoginAmbassador[];
|
|
11
|
+
loginAmbassadorsLabel?: string;
|
|
12
|
+
showOAuth?: boolean;
|
|
13
|
+
oauthProviders?: Exclude<import('@fayz-ai/core').AuthProvider, 'email'>[];
|
|
14
|
+
};
|
|
15
|
+
export declare function AdminProviders({ config, children }: {
|
|
16
|
+
config: FayzAppConfig;
|
|
17
|
+
children: React.ReactNode;
|
|
18
|
+
}): React.JSX.Element;
|
|
19
|
+
export declare namespace AdminProviders {
|
|
20
|
+
var displayName: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function createFayzApp(config: FayzAppConfig): React.ComponentType;
|
|
23
|
+
//# sourceMappingURL=admin-app.d.ts.map
|