@nextsparkjs/core 0.1.0-beta.187 → 0.1.0-beta.189
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/dist/components/api/keys/ApiKeyDisplay.js +19 -19
- package/dist/components/api/keys/CreateApiKeyDialog.js +21 -21
- package/dist/components/app/layouts/PublicNavbar.d.ts.map +1 -1
- package/dist/components/app/layouts/PublicNavbar.js +34 -16
- package/dist/components/app/misc/ThemeToggle.d.ts.map +1 -1
- package/dist/components/app/misc/ThemeToggle.js +3 -4
- package/dist/components/auth/SessionCookieRefresher.d.ts +5 -0
- package/dist/components/auth/SessionCookieRefresher.d.ts.map +1 -1
- package/dist/components/auth/SessionCookieRefresher.js +7 -1
- package/dist/components/auth/forms/LoginForm.d.ts.map +1 -1
- package/dist/components/auth/forms/LoginForm.js +49 -12
- package/dist/components/auth/forms/SignupForm.d.ts.map +1 -1
- package/dist/components/auth/forms/SignupForm.js +4 -3
- package/dist/components/dashboard/block-editor/block-settings-panel.js +1 -1
- package/dist/components/dashboard/block-editor/floating-block-toolbar.js +1 -1
- package/dist/components/dashboard/block-editor/sortable-block.js +1 -1
- package/dist/components/dashboard/layouts/Sidebar.d.ts.map +1 -1
- package/dist/components/dashboard/layouts/Sidebar.js +8 -6
- package/dist/components/dashboard/layouts/TopNavbar.d.ts.map +1 -1
- package/dist/components/dashboard/layouts/TopNavbar.js +51 -54
- package/dist/components/dashboard/misc/NotificationsDropdown.d.ts.map +1 -1
- package/dist/components/dashboard/misc/NotificationsDropdown.js +17 -15
- package/dist/components/dashboard/misc/SearchDropdown.d.ts.map +1 -1
- package/dist/components/dashboard/misc/SearchDropdown.js +19 -22
- package/dist/components/dashboard/mobile/MobileBottomNav.js +1 -1
- package/dist/components/dashboard/mobile/MobileTopBar.d.ts +10 -1
- package/dist/components/dashboard/mobile/MobileTopBar.d.ts.map +1 -1
- package/dist/components/dashboard/mobile/MobileTopBar.js +4 -3
- package/dist/components/dashboard/navigation/DynamicNavigation.js +5 -5
- package/dist/components/devtools/BlockDetailViewer.js +1 -1
- package/dist/components/devtools/BlocksViewer.js +1 -1
- package/dist/components/entities/EntityChildManager.js +5 -5
- package/dist/components/entities/EntityDetailPage.d.ts.map +1 -1
- package/dist/components/entities/EntityDetailPage.js +16 -15
- package/dist/components/entities/EntityFieldRenderer.d.ts.map +1 -1
- package/dist/components/entities/EntityFieldRenderer.js +12 -7
- package/dist/components/entities/EntityPageHeader.js +5 -5
- package/dist/components/entities/ErrorBoundary.d.ts.map +1 -1
- package/dist/components/entities/ErrorBoundary.js +20 -21
- package/dist/components/entities/wrappers/EntityDetailWrapper.js +5 -5
- package/dist/components/entities/wrappers/EntityFormWrapper.js +2 -2
- package/dist/components/entities/wrappers/EntityListWrapper.js +3 -3
- package/dist/components/permissions/NoPermission.js +10 -10
- package/dist/components/public/pageBuilder/PageRenderer.d.ts.map +1 -1
- package/dist/components/public/pageBuilder/PageRenderer.js +2 -1
- package/dist/components/settings/SettingsPageSkeleton.js +4 -4
- package/dist/components/settings/layouts/SettingsSidebar.js +6 -6
- package/dist/components/shared/MultiSelectFilter.d.ts +3 -1
- package/dist/components/shared/MultiSelectFilter.d.ts.map +1 -1
- package/dist/components/shared/MultiSelectFilter.js +7 -3
- package/dist/components/shared/SearchInput.d.ts +2 -0
- package/dist/components/shared/SearchInput.d.ts.map +1 -1
- package/dist/components/shared/SearchInput.js +64 -6
- package/dist/components/ui/address-input.js +18 -18
- package/dist/components/ui/audio-upload.js +9 -9
- package/dist/components/ui/combobox.d.ts.map +1 -1
- package/dist/components/ui/combobox.js +4 -4
- package/dist/components/ui/country-select.d.ts.map +1 -1
- package/dist/components/ui/country-select.js +3 -3
- package/dist/components/ui/currency-select.d.ts.map +1 -1
- package/dist/components/ui/currency-select.js +3 -3
- package/dist/components/ui/dynamic-icon.d.ts.map +1 -1
- package/dist/components/ui/dynamic-icon.js +3 -2
- package/dist/components/ui/file-upload.js +7 -7
- package/dist/components/ui/image-upload.js +8 -8
- package/dist/components/ui/multi-select.d.ts +2 -1
- package/dist/components/ui/multi-select.d.ts.map +1 -1
- package/dist/components/ui/multi-select.js +4 -3
- package/dist/components/ui/phone-input.d.ts.map +1 -1
- package/dist/components/ui/phone-input.js +3 -3
- package/dist/components/ui/relation-display.js +1 -1
- package/dist/components/ui/simple-relation-select.d.ts +2 -1
- package/dist/components/ui/simple-relation-select.d.ts.map +1 -1
- package/dist/components/ui/simple-relation-select.js +7 -6
- package/dist/components/ui/tags-input.d.ts.map +1 -1
- package/dist/components/ui/tags-input.js +1 -1
- package/dist/components/ui/timezone-select.d.ts.map +1 -1
- package/dist/components/ui/timezone-select.js +3 -3
- package/dist/components/ui/user-display.js +4 -4
- package/dist/components/ui/user-select.d.ts.map +1 -1
- package/dist/components/ui/user-select.js +9 -9
- package/dist/components/ui/video-upload.js +9 -9
- package/dist/contexts/SubscriptionContext.d.ts.map +1 -1
- package/dist/contexts/SubscriptionContext.js +5 -1
- package/dist/contexts/TeamContext.d.ts.map +1 -1
- package/dist/contexts/TeamContext.js +83 -26
- package/dist/emails/otp-verification.d.ts.map +1 -1
- package/dist/emails/otp-verification.js +3 -2
- package/dist/hooks/useAccountPreferencesSync.d.ts +13 -0
- package/dist/hooks/useAccountPreferencesSync.d.ts.map +1 -0
- package/dist/hooks/useAccountPreferencesSync.js +95 -0
- package/dist/hooks/useAuth.d.ts +202 -15
- package/dist/hooks/useAuth.d.ts.map +1 -1
- package/dist/hooks/useAuth.js +49 -13
- package/dist/hooks/useEntityConfig.js +2 -2
- package/dist/hooks/useEntitySearch.js +10 -10
- package/dist/hooks/useNotifications.js +12 -12
- package/dist/hooks/usePrefetch.d.ts.map +1 -1
- package/dist/hooks/usePrefetch.js +6 -2
- package/dist/hooks/useSearch.js +15 -15
- package/dist/hooks/useSessionCookieRefresh.d.ts +18 -1
- package/dist/hooks/useSessionCookieRefresh.d.ts.map +1 -1
- package/dist/hooks/useSessionCookieRefresh.js +17 -4
- package/dist/hooks/useSessionHint.d.ts +12 -0
- package/dist/hooks/useSessionHint.d.ts.map +1 -0
- package/dist/hooks/useSessionHint.js +15 -0
- package/dist/hooks/useTranslationPreload.js +6 -6
- package/dist/i18n.d.ts +13 -0
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +2 -27
- package/dist/lib/actions/entity.actions.d.ts.map +1 -1
- package/dist/lib/actions/entity.actions.js +3 -2
- package/dist/lib/api/auth/dual-auth.d.ts +4 -1
- package/dist/lib/api/auth/dual-auth.d.ts.map +1 -1
- package/dist/lib/api/auth/dual-auth.js +5 -16
- package/dist/lib/api/entities.js +33 -33
- package/dist/lib/api/keys.d.ts +27 -27
- package/dist/lib/api/keys.js +27 -27
- package/dist/lib/auth/callback-url.d.ts +11 -0
- package/dist/lib/auth/callback-url.d.ts.map +1 -0
- package/dist/lib/auth/callback-url.js +14 -0
- package/dist/lib/auth/otp-config.d.ts +55 -0
- package/dist/lib/auth/otp-config.d.ts.map +1 -0
- package/dist/lib/auth/otp-config.js +48 -0
- package/dist/lib/auth/registration-helpers.d.ts.map +1 -1
- package/dist/lib/auth/registration-helpers.js +3 -1
- package/dist/lib/auth/session-hint.d.ts +31 -0
- package/dist/lib/auth/session-hint.d.ts.map +1 -0
- package/dist/lib/auth/session-hint.js +37 -0
- package/dist/lib/auth.d.ts.map +1 -1
- package/dist/lib/auth.js +6 -4
- package/dist/lib/blocks/loader.d.ts +3 -11
- package/dist/lib/blocks/loader.d.ts.map +1 -1
- package/dist/lib/blocks/loader.js +1 -9
- package/dist/lib/blocks/loader.server.d.ts +18 -0
- package/dist/lib/blocks/loader.server.d.ts.map +1 -0
- package/dist/lib/blocks/loader.server.js +11 -0
- package/dist/lib/blocks/sanitize-html.d.ts +31 -0
- package/dist/lib/blocks/sanitize-html.d.ts.map +1 -0
- package/dist/lib/blocks/sanitize-html.js +60 -0
- package/dist/lib/config/config-sync.d.ts +1 -0
- package/dist/lib/config/config-sync.d.ts.map +1 -1
- package/dist/lib/config/config-sync.js +4 -1
- package/dist/lib/config/types.d.ts +48 -0
- package/dist/lib/config/types.d.ts.map +1 -1
- package/dist/lib/email/types.d.ts +6 -0
- package/dist/lib/email/types.d.ts.map +1 -1
- package/dist/lib/entities/serialization.d.ts.map +1 -1
- package/dist/lib/entities/serialization.js +3 -6
- package/dist/lib/icons.d.ts +12 -0
- package/dist/lib/icons.d.ts.map +1 -0
- package/dist/lib/icons.js +30 -0
- package/dist/lib/locale.d.ts +25 -1
- package/dist/lib/locale.d.ts.map +1 -1
- package/dist/lib/locale.js +49 -35
- package/dist/lib/mcp/engine.js +1 -1
- package/dist/lib/mcp/errors.js +17 -17
- package/dist/lib/mcp/schema-builder.js +16 -16
- package/dist/lib/mcp/tool-generator.js +18 -18
- package/dist/lib/search-highlighting.d.ts +7 -0
- package/dist/lib/search-highlighting.d.ts.map +1 -1
- package/dist/lib/search-highlighting.js +6 -2
- package/dist/lib/selectors/core-selectors.d.ts +2 -0
- package/dist/lib/selectors/core-selectors.d.ts.map +1 -1
- package/dist/lib/selectors/domains/auth.selectors.d.ts +1 -0
- package/dist/lib/selectors/domains/auth.selectors.d.ts.map +1 -1
- package/dist/lib/selectors/domains/auth.selectors.js +1 -0
- package/dist/lib/selectors/domains/entities.selectors.d.ts +2 -0
- package/dist/lib/selectors/domains/entities.selectors.d.ts.map +1 -1
- package/dist/lib/selectors/domains/entities.selectors.js +2 -0
- package/dist/lib/selectors/selectors.d.ts +4 -0
- package/dist/lib/selectors/selectors.d.ts.map +1 -1
- package/dist/lib/services/block.service.js +1 -1
- package/dist/lib/teams/active-team-cookie.d.ts +24 -0
- package/dist/lib/teams/active-team-cookie.d.ts.map +1 -0
- package/dist/lib/teams/active-team-cookie.js +17 -0
- package/dist/lib/teams/dashboard-team.d.ts +20 -0
- package/dist/lib/teams/dashboard-team.d.ts.map +1 -0
- package/dist/lib/teams/dashboard-team.js +38 -0
- package/dist/lib/teams/schema.d.ts.map +1 -1
- package/dist/lib/teams/schema.js +1 -1
- package/dist/lib/template-resolver.d.ts.map +1 -1
- package/dist/lib/template-resolver.js +0 -1
- package/dist/lib/theme/get-default-theme-mode.d.ts +7 -4
- package/dist/lib/theme/get-default-theme-mode.d.ts.map +1 -1
- package/dist/lib/theme/get-default-theme-mode.js +2 -44
- package/dist/messages/de/auth.json +4 -2
- package/dist/messages/de/common.json +83 -3
- package/dist/messages/de/email.json +1 -1
- package/dist/messages/de/index.d.ts +87 -0
- package/dist/messages/de/index.d.ts.map +1 -1
- package/dist/messages/de/settings.json +5 -0
- package/dist/messages/en/auth.json +4 -2
- package/dist/messages/en/common.json +83 -3
- package/dist/messages/en/email.json +1 -1
- package/dist/messages/en/index.d.ts +86 -0
- package/dist/messages/en/index.d.ts.map +1 -1
- package/dist/messages/en/settings.json +4 -0
- package/dist/messages/es/auth.json +4 -2
- package/dist/messages/es/common.json +83 -3
- package/dist/messages/es/email.json +1 -1
- package/dist/messages/es/index.d.ts +86 -0
- package/dist/messages/es/index.d.ts.map +1 -1
- package/dist/messages/es/settings.json +4 -0
- package/dist/messages/fr/auth.json +4 -2
- package/dist/messages/fr/common.json +83 -3
- package/dist/messages/fr/email.json +1 -1
- package/dist/messages/fr/index.d.ts +87 -0
- package/dist/messages/fr/index.d.ts.map +1 -1
- package/dist/messages/fr/settings.json +5 -0
- package/dist/messages/it/auth.json +4 -2
- package/dist/messages/it/common.json +83 -3
- package/dist/messages/it/email.json +1 -1
- package/dist/messages/it/index.d.ts +87 -0
- package/dist/messages/it/index.d.ts.map +1 -1
- package/dist/messages/it/settings.json +5 -0
- package/dist/messages/pt/auth.json +4 -2
- package/dist/messages/pt/common.json +83 -3
- package/dist/messages/pt/email.json +1 -1
- package/dist/messages/pt/index.d.ts +87 -0
- package/dist/messages/pt/index.d.ts.map +1 -1
- package/dist/messages/pt/settings.json +5 -0
- package/dist/nextspark-registries.d.ts +54 -0
- package/dist/providers/DashboardProviders.d.ts +13 -10
- package/dist/providers/DashboardProviders.d.ts.map +1 -1
- package/dist/providers/DashboardProviders.js +7 -1
- package/dist/templates/app/(auth)/forgot-password/page.tsx +2 -2
- package/dist/templates/app/(auth)/reset-password/page.tsx +6 -6
- package/dist/templates/app/403/page.tsx +6 -6
- package/dist/templates/app/api/v1/teams/switch/route.ts +24 -5
- package/dist/templates/app/dashboard/(main)/[entity]/layout.tsx +9 -7
- package/dist/templates/app/dashboard/(main)/layout.tsx +4 -3
- package/dist/templates/app/dashboard/settings/api-keys/page.tsx +36 -34
- package/dist/templates/app/dashboard/settings/profile/page.tsx +7 -6
- package/dist/templates/app/dashboard/settings/security/page.tsx +5 -4
- package/dist/templates/app/layout.ppr.tsx +8 -8
- package/dist/templates/app/layout.tsx +12 -17
- package/dist/templates/blocks/cta-section/component.tsx +5 -2
- package/dist/templates/blocks/cta-section/config.ts +3 -2
- package/dist/templates/blocks/cta-section/fields.ts +2 -2
- package/dist/templates/blocks/cta-section/schema.ts +2 -2
- package/dist/templates/blocks/features-grid/component.tsx +10 -2
- package/dist/templates/blocks/features-grid/config.ts +3 -2
- package/dist/templates/blocks/features-grid/fields.ts +2 -2
- package/dist/templates/blocks/features-grid/schema.ts +2 -2
- package/dist/templates/blocks/hero/component.tsx +6 -3
- package/dist/templates/blocks/hero/config.ts +3 -2
- package/dist/templates/blocks/hero/fields.ts +2 -2
- package/dist/templates/blocks/hero/schema.ts +2 -2
- package/dist/templates/blocks/testimonials/component.tsx +6 -3
- package/dist/templates/blocks/testimonials/config.ts +3 -2
- package/dist/templates/blocks/testimonials/fields.ts +2 -2
- package/dist/templates/blocks/testimonials/schema.ts +2 -2
- package/dist/templates/blocks/text-content/component.tsx +7 -3
- package/dist/templates/blocks/text-content/config.ts +3 -2
- package/dist/templates/blocks/text-content/fields.ts +2 -2
- package/dist/templates/blocks/text-content/schema.ts +2 -2
- package/dist/templates/contents/themes/starter/blocks/cta-section/component.tsx +102 -0
- package/dist/templates/contents/themes/starter/blocks/cta-section/config.ts +11 -0
- package/dist/templates/contents/themes/starter/blocks/cta-section/fields.ts +89 -0
- package/dist/templates/contents/themes/starter/blocks/cta-section/index.ts +6 -0
- package/dist/templates/contents/themes/starter/blocks/cta-section/schema.ts +32 -0
- package/dist/templates/contents/themes/starter/blocks/cta-section/thumbnail.png +0 -0
- package/dist/templates/contents/themes/starter/blocks/features-grid/component.tsx +119 -0
- package/dist/templates/contents/themes/starter/blocks/features-grid/config.ts +11 -0
- package/dist/templates/contents/themes/starter/blocks/features-grid/fields.ts +97 -0
- package/dist/templates/contents/themes/starter/blocks/features-grid/index.ts +6 -0
- package/dist/templates/contents/themes/starter/blocks/features-grid/schema.ts +40 -0
- package/dist/templates/contents/themes/starter/blocks/features-grid/thumbnail.png +0 -0
- package/dist/templates/contents/themes/starter/blocks/hero/component.tsx +105 -0
- package/dist/templates/contents/themes/starter/blocks/hero/config.ts +11 -0
- package/dist/templates/contents/themes/starter/blocks/hero/fields.ts +60 -0
- package/dist/templates/contents/themes/starter/blocks/hero/index.ts +6 -0
- package/dist/templates/contents/themes/starter/blocks/hero/schema.ts +33 -0
- package/dist/templates/contents/themes/starter/blocks/hero/thumbnail.png +0 -0
- package/dist/templates/contents/themes/starter/blocks/testimonials/component.tsx +116 -0
- package/dist/templates/contents/themes/starter/blocks/testimonials/config.ts +11 -0
- package/dist/templates/contents/themes/starter/blocks/testimonials/fields.ts +105 -0
- package/dist/templates/contents/themes/starter/blocks/testimonials/index.ts +6 -0
- package/dist/templates/contents/themes/starter/blocks/testimonials/schema.ts +41 -0
- package/dist/templates/contents/themes/starter/blocks/testimonials/thumbnail.png +0 -0
- package/dist/templates/contents/themes/starter/blocks/text-content/component.tsx +100 -0
- package/dist/templates/contents/themes/starter/blocks/text-content/config.ts +11 -0
- package/dist/templates/contents/themes/starter/blocks/text-content/fields.ts +88 -0
- package/dist/templates/contents/themes/starter/blocks/text-content/index.ts +6 -0
- package/dist/templates/contents/themes/starter/blocks/text-content/schema.ts +30 -0
- package/dist/templates/contents/themes/starter/blocks/text-content/thumbnail.png +0 -0
- package/dist/templates/contents/themes/starter/config/app.config.ts +8 -0
- package/dist/templates/contents/themes/starter/entities/tasks/tasks.config.ts +7 -0
- package/dist/templates/contents/themes/starter/tests/cypress/e2e/_utils/devtools/access.cy.ts +9 -1
- package/dist/templates/contents/themes/starter/tests/cypress/e2e/api/entities/tasks/TaskAPIController.js +2 -2
- package/dist/templates/contents/themes/starter/tests/cypress/e2e/uat/entities/tasks/tasks-crud.cy.ts +45 -38
- package/dist/templates/contents/themes/starter/tests/cypress/fixtures/entities.json +16 -0
- package/dist/templates/contents/themes/starter/tests/cypress/src/components/DevKeyringPOM.ts +3 -1
- package/dist/templates/contents/themes/starter/tests/cypress/src/core/BlockEditorBasePOM.ts +3 -3
- package/dist/templates/contents/themes/starter/tests/cypress/src/entities/PagesPOM.ts +137 -0
- package/dist/templates/contents/themes/starter/tests/cypress/src/entities/index.ts +2 -0
- package/dist/templates/contents/themes/starter/tests/cypress/src/index.ts +1 -0
- package/dist/templates/contents/themes/starter/tests/cypress/src/session-helpers.ts +42 -11
- package/dist/templates/contents/themes/starter/tests/cypress/support/commands.ts +29 -18
- package/dist/templates/features/blog/blocks/post-content/component.tsx +5 -1
- package/dist/templates/features/blog/blocks/post-content/schema.ts +1 -1
- package/dist/templates/features/pages/blocks/hero/component.tsx +3 -0
- package/dist/templates/features/pages/blocks/hero/schema.ts +1 -1
- package/dist/templates/proxy.ts +138 -53
- package/dist/types/blocks.d.ts.map +1 -1
- package/dist/types/blocks.js +1 -1
- package/dist/types/task.types.d.ts +1 -1
- package/dist/types/task.types.js +7 -7
- package/dist/utils/dev/TranslationDebugger.js +2 -2
- package/package.json +14 -5
- package/scripts/build/registry/__tests__/block-registry.test.mjs +73 -0
- package/scripts/build/registry/__tests__/icons-discovery.test.mjs +130 -0
- package/scripts/build/registry/__tests__/identifier.test.mjs +65 -0
- package/scripts/build/registry/__tests__/page-generator.test.mjs +430 -0
- package/scripts/build/registry/__tests__/scheduled-actions-registry.test.mjs +41 -0
- package/scripts/build/registry/__tests__/template-registry.test.mjs +89 -0
- package/scripts/build/registry/discovery/icons.mjs +275 -0
- package/scripts/build/registry/discovery/index.mjs +1 -0
- package/scripts/build/registry/generators/block-registry.mjs +203 -55
- package/scripts/build/registry/generators/feature-registry.mjs +9 -2
- package/scripts/build/registry/generators/icon-registry.mjs +56 -0
- package/scripts/build/registry/generators/identifier.mjs +28 -0
- package/scripts/build/registry/generators/index.mjs +1 -0
- package/scripts/build/registry/generators/plugin-registry.mjs +4 -3
- package/scripts/build/registry/generators/scheduled-actions-registry.mjs +4 -2
- package/scripts/build/registry/generators/template-registry.mjs +49 -41
- package/scripts/build/registry/generators/theme-registry.mjs +6 -7
- package/scripts/build/registry/post-build/page-generator.mjs +380 -59
- package/scripts/build/registry.mjs +9 -1
- package/templates/app/(auth)/forgot-password/page.tsx +2 -2
- package/templates/app/(auth)/reset-password/page.tsx +6 -6
- package/templates/app/403/page.tsx +6 -6
- package/templates/app/api/v1/teams/switch/route.ts +24 -5
- package/templates/app/dashboard/(main)/[entity]/layout.tsx +9 -7
- package/templates/app/dashboard/(main)/layout.tsx +4 -3
- package/templates/app/dashboard/settings/api-keys/page.tsx +36 -34
- package/templates/app/dashboard/settings/profile/page.tsx +7 -6
- package/templates/app/dashboard/settings/security/page.tsx +5 -4
- package/templates/app/layout.ppr.tsx +8 -8
- package/templates/app/layout.tsx +12 -17
- package/templates/blocks/cta-section/component.tsx +5 -2
- package/templates/blocks/cta-section/config.ts +3 -2
- package/templates/blocks/cta-section/fields.ts +2 -2
- package/templates/blocks/cta-section/schema.ts +2 -2
- package/templates/blocks/features-grid/component.tsx +10 -2
- package/templates/blocks/features-grid/config.ts +3 -2
- package/templates/blocks/features-grid/fields.ts +2 -2
- package/templates/blocks/features-grid/schema.ts +2 -2
- package/templates/blocks/hero/component.tsx +6 -3
- package/templates/blocks/hero/config.ts +3 -2
- package/templates/blocks/hero/fields.ts +2 -2
- package/templates/blocks/hero/schema.ts +2 -2
- package/templates/blocks/testimonials/component.tsx +6 -3
- package/templates/blocks/testimonials/config.ts +3 -2
- package/templates/blocks/testimonials/fields.ts +2 -2
- package/templates/blocks/testimonials/schema.ts +2 -2
- package/templates/blocks/text-content/component.tsx +7 -3
- package/templates/blocks/text-content/config.ts +3 -2
- package/templates/blocks/text-content/fields.ts +2 -2
- package/templates/blocks/text-content/schema.ts +2 -2
- package/templates/contents/themes/starter/blocks/cta-section/component.tsx +102 -0
- package/templates/contents/themes/starter/blocks/cta-section/config.ts +11 -0
- package/templates/contents/themes/starter/blocks/cta-section/fields.ts +89 -0
- package/templates/contents/themes/starter/blocks/cta-section/index.ts +6 -0
- package/templates/contents/themes/starter/blocks/cta-section/schema.ts +32 -0
- package/templates/contents/themes/starter/blocks/cta-section/thumbnail.png +0 -0
- package/templates/contents/themes/starter/blocks/features-grid/component.tsx +119 -0
- package/templates/contents/themes/starter/blocks/features-grid/config.ts +11 -0
- package/templates/contents/themes/starter/blocks/features-grid/fields.ts +97 -0
- package/templates/contents/themes/starter/blocks/features-grid/index.ts +6 -0
- package/templates/contents/themes/starter/blocks/features-grid/schema.ts +40 -0
- package/templates/contents/themes/starter/blocks/features-grid/thumbnail.png +0 -0
- package/templates/contents/themes/starter/blocks/hero/component.tsx +105 -0
- package/templates/contents/themes/starter/blocks/hero/config.ts +11 -0
- package/templates/contents/themes/starter/blocks/hero/fields.ts +60 -0
- package/templates/contents/themes/starter/blocks/hero/index.ts +6 -0
- package/templates/contents/themes/starter/blocks/hero/schema.ts +33 -0
- package/templates/contents/themes/starter/blocks/hero/thumbnail.png +0 -0
- package/templates/contents/themes/starter/blocks/testimonials/component.tsx +116 -0
- package/templates/contents/themes/starter/blocks/testimonials/config.ts +11 -0
- package/templates/contents/themes/starter/blocks/testimonials/fields.ts +105 -0
- package/templates/contents/themes/starter/blocks/testimonials/index.ts +6 -0
- package/templates/contents/themes/starter/blocks/testimonials/schema.ts +41 -0
- package/templates/contents/themes/starter/blocks/testimonials/thumbnail.png +0 -0
- package/templates/contents/themes/starter/blocks/text-content/component.tsx +100 -0
- package/templates/contents/themes/starter/blocks/text-content/config.ts +11 -0
- package/templates/contents/themes/starter/blocks/text-content/fields.ts +88 -0
- package/templates/contents/themes/starter/blocks/text-content/index.ts +6 -0
- package/templates/contents/themes/starter/blocks/text-content/schema.ts +30 -0
- package/templates/contents/themes/starter/blocks/text-content/thumbnail.png +0 -0
- package/templates/contents/themes/starter/config/app.config.ts +8 -0
- package/templates/contents/themes/starter/entities/tasks/tasks.config.ts +7 -0
- package/templates/contents/themes/starter/tests/cypress/e2e/_utils/devtools/access.cy.ts +9 -1
- package/templates/contents/themes/starter/tests/cypress/e2e/api/entities/tasks/TaskAPIController.js +2 -2
- package/templates/contents/themes/starter/tests/cypress/e2e/uat/entities/tasks/tasks-crud.cy.ts +45 -38
- package/templates/contents/themes/starter/tests/cypress/fixtures/entities.json +16 -0
- package/templates/contents/themes/starter/tests/cypress/src/components/DevKeyringPOM.ts +3 -1
- package/templates/contents/themes/starter/tests/cypress/src/core/BlockEditorBasePOM.ts +3 -3
- package/templates/contents/themes/starter/tests/cypress/src/entities/PagesPOM.ts +137 -0
- package/templates/contents/themes/starter/tests/cypress/src/entities/index.ts +2 -0
- package/templates/contents/themes/starter/tests/cypress/src/index.ts +1 -0
- package/templates/contents/themes/starter/tests/cypress/src/session-helpers.ts +42 -11
- package/templates/contents/themes/starter/tests/cypress/support/commands.ts +29 -18
- package/templates/features/blog/blocks/post-content/component.tsx +5 -1
- package/templates/features/blog/blocks/post-content/schema.ts +1 -1
- package/templates/features/pages/blocks/hero/component.tsx +3 -0
- package/templates/features/pages/blocks/hero/schema.ts +1 -1
- package/templates/proxy.ts +138 -53
- package/tests/jest/__mocks__/@nextsparkjs/registries/block-registry.client.ts +9 -0
- package/tests/jest/__mocks__/@nextsparkjs/registries/block-registry.lazy.ts +5 -0
- package/tests/jest/__mocks__/@nextsparkjs/registries/icon-registry.ts +42 -0
- package/tests/jest/__mocks__/next-intl-server.js +85 -5
- package/tests/jest/__mocks__/next-server.js +32 -0
|
@@ -28,7 +28,7 @@ function generateEntityTools(entityConfig, operations, override, deps) {
|
|
|
28
28
|
const parsed = strictSchema.safeParse(rawArgs ?? {});
|
|
29
29
|
if (!parsed.success) {
|
|
30
30
|
return errorResult(
|
|
31
|
-
`
|
|
31
|
+
`Invalid arguments for ${name}: ${formatZodIssues(parsed.error)}. Check the tool's schema.`
|
|
32
32
|
);
|
|
33
33
|
}
|
|
34
34
|
try {
|
|
@@ -37,7 +37,7 @@ function generateEntityTools(entityConfig, operations, override, deps) {
|
|
|
37
37
|
if (error instanceof McpToolError) return errorResult(error.message);
|
|
38
38
|
console.error(`[mcp] unexpected error in ${name}:`, error);
|
|
39
39
|
return errorResult(
|
|
40
|
-
`
|
|
40
|
+
`Unexpected error executing ${name}: ${error instanceof Error ? error.message : String(error)}`
|
|
41
41
|
);
|
|
42
42
|
}
|
|
43
43
|
}
|
|
@@ -52,7 +52,7 @@ function generateEntityTools(entityConfig, operations, override, deps) {
|
|
|
52
52
|
"list",
|
|
53
53
|
`${deps.toolPrefix}_list_${plural}`,
|
|
54
54
|
`List ${entityConfig.names.plural}`,
|
|
55
|
-
`
|
|
55
|
+
`Lists ${entityConfig.names.plural} with pagination, sorting and filters. ${entityDescription}${presetExamples(deps.presets, "GET")}`,
|
|
56
56
|
schemas.listShape,
|
|
57
57
|
schemas.listStrict,
|
|
58
58
|
{ readOnlyHint: true },
|
|
@@ -69,7 +69,7 @@ function generateEntityTools(entityConfig, operations, override, deps) {
|
|
|
69
69
|
content: [
|
|
70
70
|
{
|
|
71
71
|
type: "text",
|
|
72
|
-
text: `${String(total)} ${entityConfig.names.plural} (
|
|
72
|
+
text: `${String(total)} ${entityConfig.names.plural} (page ${String(page)}/${String(totalPages)})`
|
|
73
73
|
}
|
|
74
74
|
],
|
|
75
75
|
structuredContent: { data, info }
|
|
@@ -84,7 +84,7 @@ function generateEntityTools(entityConfig, operations, override, deps) {
|
|
|
84
84
|
"get",
|
|
85
85
|
`${deps.toolPrefix}_get_${singular}`,
|
|
86
86
|
`Get ${entityConfig.names.singular}`,
|
|
87
|
-
`
|
|
87
|
+
`Gets a ${entityConfig.names.singular} record by ID. ${entityDescription}`,
|
|
88
88
|
schemas.getShape,
|
|
89
89
|
schemas.getStrict,
|
|
90
90
|
{ readOnlyHint: true },
|
|
@@ -96,7 +96,7 @@ function generateEntityTools(entityConfig, operations, override, deps) {
|
|
|
96
96
|
if (!result.body.success) return apiError(result, "get");
|
|
97
97
|
const data = normalizeOutput(result.body.data);
|
|
98
98
|
return {
|
|
99
|
-
content: [{ type: "text", text: `${entityConfig.names.singular}
|
|
99
|
+
content: [{ type: "text", text: `${entityConfig.names.singular} found.` }],
|
|
100
100
|
structuredContent: { data }
|
|
101
101
|
};
|
|
102
102
|
}
|
|
@@ -109,7 +109,7 @@ function generateEntityTools(entityConfig, operations, override, deps) {
|
|
|
109
109
|
"create",
|
|
110
110
|
`${deps.toolPrefix}_create_${singular}`,
|
|
111
111
|
`Create ${entityConfig.names.singular}`,
|
|
112
|
-
`
|
|
112
|
+
`Creates a ${entityConfig.names.singular} record. ${entityDescription}${presetExamples(deps.presets, "POST")}`,
|
|
113
113
|
schemas.createShape,
|
|
114
114
|
schemas.createStrict,
|
|
115
115
|
{},
|
|
@@ -121,7 +121,7 @@ function generateEntityTools(entityConfig, operations, override, deps) {
|
|
|
121
121
|
const id = extractId(data);
|
|
122
122
|
return {
|
|
123
123
|
content: [
|
|
124
|
-
{ type: "text", text: `${entityConfig.names.singular}
|
|
124
|
+
{ type: "text", text: `${entityConfig.names.singular} created${id ? ` (id: ${id})` : ""}.` }
|
|
125
125
|
],
|
|
126
126
|
structuredContent: { data }
|
|
127
127
|
};
|
|
@@ -131,7 +131,7 @@ function generateEntityTools(entityConfig, operations, override, deps) {
|
|
|
131
131
|
}
|
|
132
132
|
if (operations.includes("update")) {
|
|
133
133
|
const updateShape = {
|
|
134
|
-
id: z.string().min(1).describe(`ID
|
|
134
|
+
id: z.string().min(1).describe(`ID of the ${entityConfig.names.singular} record to modify (uuid)`),
|
|
135
135
|
...schemas.updateShape
|
|
136
136
|
};
|
|
137
137
|
tools.push(
|
|
@@ -139,14 +139,14 @@ function generateEntityTools(entityConfig, operations, override, deps) {
|
|
|
139
139
|
"update",
|
|
140
140
|
`${deps.toolPrefix}_update_${singular}`,
|
|
141
141
|
`Update ${entityConfig.names.singular}`,
|
|
142
|
-
`
|
|
142
|
+
`Modifies fields of a ${entityConfig.names.singular} record (partial PATCH: only send the fields to change). ${entityDescription}`,
|
|
143
143
|
updateShape,
|
|
144
144
|
z.object(updateShape).strict(),
|
|
145
145
|
{ idempotentHint: true },
|
|
146
146
|
async (args, ctx) => {
|
|
147
147
|
const { id, ...fields } = args;
|
|
148
148
|
if (!Object.keys(fields).length) {
|
|
149
|
-
return errorResult("No
|
|
149
|
+
return errorResult("No fields to modify were sent.");
|
|
150
150
|
}
|
|
151
151
|
const input = (override == null ? void 0 : override.transformInput) ? await override.transformInput("update", fields, ctx) : fields;
|
|
152
152
|
const result = await deps.executor(
|
|
@@ -156,7 +156,7 @@ function generateEntityTools(entityConfig, operations, override, deps) {
|
|
|
156
156
|
if (!result.body.success) return apiError(result, "update");
|
|
157
157
|
const data = normalizeOutput(result.body.data);
|
|
158
158
|
return {
|
|
159
|
-
content: [{ type: "text", text: `${entityConfig.names.singular}
|
|
159
|
+
content: [{ type: "text", text: `${entityConfig.names.singular} updated.` }],
|
|
160
160
|
structuredContent: { data }
|
|
161
161
|
};
|
|
162
162
|
}
|
|
@@ -165,22 +165,22 @@ function generateEntityTools(entityConfig, operations, override, deps) {
|
|
|
165
165
|
}
|
|
166
166
|
if (operations.includes("delete")) {
|
|
167
167
|
const deleteShape = {
|
|
168
|
-
id: z.string().min(1).describe(`ID
|
|
169
|
-
confirm: z.boolean().describe("true
|
|
168
|
+
id: z.string().min(1).describe(`ID of the ${entityConfig.names.singular} record to delete (uuid)`),
|
|
169
|
+
confirm: z.boolean().describe("true ONLY after explicit user confirmation")
|
|
170
170
|
};
|
|
171
171
|
tools.push(
|
|
172
172
|
make(
|
|
173
173
|
"delete",
|
|
174
174
|
`${deps.toolPrefix}_delete_${singular}`,
|
|
175
175
|
`Delete ${entityConfig.names.singular}`,
|
|
176
|
-
`
|
|
176
|
+
`Deletes a ${entityConfig.names.singular}. DESTRUCTIVE: show the user what you're about to delete and ask for confirmation first.${deleteWarning(override)}`,
|
|
177
177
|
deleteShape,
|
|
178
178
|
z.object(deleteShape).strict(),
|
|
179
179
|
{ destructiveHint: true },
|
|
180
180
|
async (args, ctx) => {
|
|
181
181
|
if (args.confirm !== true) {
|
|
182
182
|
return errorResult(
|
|
183
|
-
"
|
|
183
|
+
"Deletion not confirmed: ask the user for explicit confirmation and retry with confirm: true."
|
|
184
184
|
);
|
|
185
185
|
}
|
|
186
186
|
const result = await deps.executor(
|
|
@@ -189,7 +189,7 @@ function generateEntityTools(entityConfig, operations, override, deps) {
|
|
|
189
189
|
);
|
|
190
190
|
if (!result.body.success) return apiError(result, "delete");
|
|
191
191
|
return {
|
|
192
|
-
content: [{ type: "text", text: `${entityConfig.names.singular}
|
|
192
|
+
content: [{ type: "text", text: `${entityConfig.names.singular} deleted (id: ${String(args.id)}).` }]
|
|
193
193
|
};
|
|
194
194
|
}
|
|
195
195
|
)
|
|
@@ -212,7 +212,7 @@ function presetExamples(presets, method) {
|
|
|
212
212
|
if (!example) return "";
|
|
213
213
|
const body = method === "POST" ? example.payload : example.params;
|
|
214
214
|
const label = example.description || example.title || example.id;
|
|
215
|
-
return `
|
|
215
|
+
return ` Example (${label}): ${JSON.stringify(body)}`;
|
|
216
216
|
}
|
|
217
217
|
function deleteWarning(override) {
|
|
218
218
|
var _a, _b;
|
|
@@ -24,6 +24,13 @@ export interface HighlightedTextProps {
|
|
|
24
24
|
searchQuery: string;
|
|
25
25
|
className?: string;
|
|
26
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Escapes HTML so that text carrying markup is shown rather than rendered.
|
|
29
|
+
*
|
|
30
|
+
* Exported because a caller that skips highlighting still hands its string to
|
|
31
|
+
* dangerouslySetInnerHTML, and needs the same escaping.
|
|
32
|
+
*/
|
|
33
|
+
export declare function escapeHtml(text: string | undefined | null): string;
|
|
27
34
|
/**
|
|
28
35
|
* Escapes HTML in text before highlighting
|
|
29
36
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-highlighting.d.ts","sourceRoot":"","sources":["../../src/lib/search-highlighting.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CA8ChF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAiBlF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,MAAY,GACtB,MAAM,CA6BR;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"search-highlighting.d.ts","sourceRoot":"","sources":["../../src/lib/search-highlighting.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CA8ChF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAiBlF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,MAAY,GACtB,MAAM,CA6BR;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CASlE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAEpF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAoBvE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,WAAW,EAAE,MAAM,GAClB,MAAM,CAqCR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,WAAW,EAAE,MAAM,EACnB,aAAa,GAAE,MAAY,GAC1B;IACD,gBAAgB,EAAE,MAAM,CAAA;IACxB,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1C,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAC5B,CAoBA"}
|
|
@@ -61,9 +61,12 @@ function getSearchSnippet(text, searchQuery, maxLength = 150) {
|
|
|
61
61
|
}
|
|
62
62
|
return snippet;
|
|
63
63
|
}
|
|
64
|
+
function escapeHtml(text) {
|
|
65
|
+
if (!text) return "";
|
|
66
|
+
return text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
67
|
+
}
|
|
64
68
|
function highlightSearchMatchesSafe(text, searchQuery) {
|
|
65
|
-
|
|
66
|
-
return highlightSearchMatches(escapedText, searchQuery);
|
|
69
|
+
return highlightSearchMatches(escapeHtml(text), searchQuery);
|
|
67
70
|
}
|
|
68
71
|
function getMatchCount(text, searchQuery) {
|
|
69
72
|
if (!text || !searchQuery.trim()) {
|
|
@@ -130,6 +133,7 @@ function formatSearchResult(title, description, searchQuery, maxDescLength = 100
|
|
|
130
133
|
}
|
|
131
134
|
export {
|
|
132
135
|
calculateRelevanceScore,
|
|
136
|
+
escapeHtml,
|
|
133
137
|
formatSearchResult,
|
|
134
138
|
getMatchCount,
|
|
135
139
|
getSearchSnippet,
|
|
@@ -67,6 +67,7 @@ export declare const CORE_SELECTORS: {
|
|
|
67
67
|
readonly otpEmailError: "login-otp-email-error";
|
|
68
68
|
readonly otpSend: "login-otp-send";
|
|
69
69
|
readonly otpSentNotice: "login-otp-sent-notice";
|
|
70
|
+
readonly otpCountdown: "login-otp-countdown";
|
|
70
71
|
readonly otpCodeInput: "login-otp-code-input";
|
|
71
72
|
readonly otpCodeError: "login-otp-code-error";
|
|
72
73
|
readonly otpSubmit: "login-otp-submit";
|
|
@@ -304,6 +305,7 @@ export declare const CORE_SELECTORS: {
|
|
|
304
305
|
readonly form: {
|
|
305
306
|
readonly container: "{slug}-form";
|
|
306
307
|
readonly field: "{slug}-field-{name}";
|
|
308
|
+
readonly fieldOption: "{slug}-field-{name}-option-{value}";
|
|
307
309
|
readonly submitButton: "{slug}-form-submit";
|
|
308
310
|
};
|
|
309
311
|
readonly childEntity: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-selectors.d.ts","sourceRoot":"","sources":["../../../src/lib/selectors/core-selectors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAiBH;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,cAAc
|
|
1
|
+
{"version":3,"file":"core-selectors.d.ts","sourceRoot":"","sources":["../../../src/lib/selectors/core-selectors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAiBH;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAejB,CAAA;AAEV;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,cAAc,CAAA;AAGrD,cAAc,WAAW,CAAA"}
|
|
@@ -35,6 +35,7 @@ export declare const AUTH_SELECTORS: {
|
|
|
35
35
|
readonly otpEmailError: "login-otp-email-error";
|
|
36
36
|
readonly otpSend: "login-otp-send";
|
|
37
37
|
readonly otpSentNotice: "login-otp-sent-notice";
|
|
38
|
+
readonly otpCountdown: "login-otp-countdown";
|
|
38
39
|
readonly otpCodeInput: "login-otp-code-input";
|
|
39
40
|
readonly otpCodeError: "login-otp-code-error";
|
|
40
41
|
readonly otpSubmit: "login-otp-submit";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.selectors.d.ts","sourceRoot":"","sources":["../../../../src/lib/selectors/domains/auth.selectors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,eAAO,MAAM,cAAc
|
|
1
|
+
{"version":3,"file":"auth.selectors.d.ts","sourceRoot":"","sources":["../../../../src/lib/selectors/domains/auth.selectors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuFjB,CAAA;AAEV,MAAM,MAAM,iBAAiB,GAAG,OAAO,cAAc,CAAA"}
|
|
@@ -31,6 +31,7 @@ const AUTH_SELECTORS = {
|
|
|
31
31
|
otpEmailError: "login-otp-email-error",
|
|
32
32
|
otpSend: "login-otp-send",
|
|
33
33
|
otpSentNotice: "login-otp-sent-notice",
|
|
34
|
+
otpCountdown: "login-otp-countdown",
|
|
34
35
|
otpCodeInput: "login-otp-code-input",
|
|
35
36
|
otpCodeError: "login-otp-code-error",
|
|
36
37
|
otpSubmit: "login-otp-submit",
|
|
@@ -257,6 +257,8 @@ export declare const ENTITIES_SELECTORS: {
|
|
|
257
257
|
readonly form: {
|
|
258
258
|
readonly container: "{slug}-form";
|
|
259
259
|
readonly field: "{slug}-field-{name}";
|
|
260
|
+
/** One choice of a select / radio field, once its list is open. */
|
|
261
|
+
readonly fieldOption: "{slug}-field-{name}-option-{value}";
|
|
260
262
|
readonly submitButton: "{slug}-form-submit";
|
|
261
263
|
};
|
|
262
264
|
readonly childEntity: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entities.selectors.d.ts","sourceRoot":"","sources":["../../../../src/lib/selectors/domains/entities.selectors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoKG;AAEH,eAAO,MAAM,kBAAkB
|
|
1
|
+
{"version":3,"file":"entities.selectors.d.ts","sourceRoot":"","sources":["../../../../src/lib/selectors/domains/entities.selectors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoKG;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAoJ3B,mEAAmE;;;;;;;;CAY7D,CAAA;AAEV,MAAM,MAAM,qBAAqB,GAAG,OAAO,kBAAkB,CAAA"}
|
|
@@ -133,6 +133,8 @@ const ENTITIES_SELECTORS = {
|
|
|
133
133
|
form: {
|
|
134
134
|
container: "{slug}-form",
|
|
135
135
|
field: "{slug}-field-{name}",
|
|
136
|
+
/** One choice of a select / radio field, once its list is open. */
|
|
137
|
+
fieldOption: "{slug}-field-{name}-option-{value}",
|
|
136
138
|
submitButton: "{slug}-form-submit"
|
|
137
139
|
},
|
|
138
140
|
// =========================================================================
|
|
@@ -66,6 +66,7 @@ export declare const SELECTORS: {
|
|
|
66
66
|
readonly otpEmailError: "login-otp-email-error";
|
|
67
67
|
readonly otpSend: "login-otp-send";
|
|
68
68
|
readonly otpSentNotice: "login-otp-sent-notice";
|
|
69
|
+
readonly otpCountdown: "login-otp-countdown";
|
|
69
70
|
readonly otpCodeInput: "login-otp-code-input";
|
|
70
71
|
readonly otpCodeError: "login-otp-code-error";
|
|
71
72
|
readonly otpSubmit: "login-otp-submit";
|
|
@@ -303,6 +304,7 @@ export declare const SELECTORS: {
|
|
|
303
304
|
readonly form: {
|
|
304
305
|
readonly container: "{slug}-form";
|
|
305
306
|
readonly field: "{slug}-field-{name}";
|
|
307
|
+
readonly fieldOption: "{slug}-field-{name}-option-{value}";
|
|
306
308
|
readonly submitButton: "{slug}-form-submit";
|
|
307
309
|
};
|
|
308
310
|
readonly childEntity: {
|
|
@@ -1662,6 +1664,7 @@ declare const _default: {
|
|
|
1662
1664
|
readonly otpEmailError: "login-otp-email-error";
|
|
1663
1665
|
readonly otpSend: "login-otp-send";
|
|
1664
1666
|
readonly otpSentNotice: "login-otp-sent-notice";
|
|
1667
|
+
readonly otpCountdown: "login-otp-countdown";
|
|
1665
1668
|
readonly otpCodeInput: "login-otp-code-input";
|
|
1666
1669
|
readonly otpCodeError: "login-otp-code-error";
|
|
1667
1670
|
readonly otpSubmit: "login-otp-submit";
|
|
@@ -1899,6 +1902,7 @@ declare const _default: {
|
|
|
1899
1902
|
readonly form: {
|
|
1900
1903
|
readonly container: "{slug}-form";
|
|
1901
1904
|
readonly field: "{slug}-field-{name}";
|
|
1905
|
+
readonly fieldOption: "{slug}-field-{name}-option-{value}";
|
|
1902
1906
|
readonly submitButton: "{slug}-form-submit";
|
|
1903
1907
|
};
|
|
1904
1908
|
readonly childEntity: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectors.d.ts","sourceRoot":"","sources":["../../../src/lib/selectors/selectors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAGH,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAWzE;;GAEG;AACH,eAAO,MAAM,SAAS
|
|
1
|
+
{"version":3,"file":"selectors.d.ts","sourceRoot":"","sources":["../../../src/lib/selectors/selectors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Active Team Cookie
|
|
3
|
+
*
|
|
4
|
+
* `activeTeamId` tells server code which team a signed-in request acts in: the
|
|
5
|
+
* dashboard layouts (through the proxy), server actions and resolveTeamContext.
|
|
6
|
+
* POST /api/v1/teams/switch writes it, host-only and for a year, as
|
|
7
|
+
* `<session id>:<team id>`. Readers take the team only for the session that
|
|
8
|
+
* wrote it, so a cookie left on the same browser by an earlier session, another
|
|
9
|
+
* user's or one since rotated, names no team instead of the wrong one;
|
|
10
|
+
* TeamProvider writes the current session's team as soon as it mounts. Being
|
|
11
|
+
* host-only, each subdomain of a multi-tenant app keeps its own team.
|
|
12
|
+
*/
|
|
13
|
+
export declare const ACTIVE_TEAM_COOKIE = "activeTeamId";
|
|
14
|
+
/** How long the browser keeps the cookie, in seconds. */
|
|
15
|
+
export declare const ACTIVE_TEAM_COOKIE_MAX_AGE: number;
|
|
16
|
+
/** The cookie value that makes `teamId` the active team of session `sessionId`. */
|
|
17
|
+
export declare function activeTeamCookieValue(sessionId: string, teamId: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* The team a cookie value names for `sessionId`, or null when the value belongs
|
|
20
|
+
* to another session, carries no session (it was written before values were
|
|
21
|
+
* bound to one) or there is no session to compare it with.
|
|
22
|
+
*/
|
|
23
|
+
export declare function activeTeamIdForSession(value: string | null | undefined, sessionId: string | null | undefined): string | null;
|
|
24
|
+
//# sourceMappingURL=active-team-cookie.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"active-team-cookie.d.ts","sourceRoot":"","sources":["../../../src/lib/teams/active-team-cookie.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,kBAAkB,iBAAiB,CAAA;AAEhD,yDAAyD;AACzD,eAAO,MAAM,0BAA0B,QAAqB,CAAA;AAE5D,mFAAmF;AACnF,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACnC,MAAM,GAAG,IAAI,CAKf"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const ACTIVE_TEAM_COOKIE = "activeTeamId";
|
|
2
|
+
const ACTIVE_TEAM_COOKIE_MAX_AGE = 60 * 60 * 24 * 365;
|
|
3
|
+
function activeTeamCookieValue(sessionId, teamId) {
|
|
4
|
+
return `${sessionId}:${teamId}`;
|
|
5
|
+
}
|
|
6
|
+
function activeTeamIdForSession(value, sessionId) {
|
|
7
|
+
if (!value || !sessionId) return null;
|
|
8
|
+
const separator = value.indexOf(":");
|
|
9
|
+
if (separator === -1 || value.slice(0, separator) !== sessionId) return null;
|
|
10
|
+
return value.slice(separator + 1) || null;
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
ACTIVE_TEAM_COOKIE,
|
|
14
|
+
ACTIVE_TEAM_COOKIE_MAX_AGE,
|
|
15
|
+
activeTeamCookieValue,
|
|
16
|
+
activeTeamIdForSession
|
|
17
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** The header the proxy forwards the session's active team in. */
|
|
2
|
+
export declare const ACTIVE_TEAM_HEADER = "x-active-team-id";
|
|
3
|
+
/**
|
|
4
|
+
* The team a user joined first, among teams that still exist: the default that
|
|
5
|
+
* resolveTeamContext and TeamProvider also fall back to.
|
|
6
|
+
*/
|
|
7
|
+
export declare function getUserDefaultTeamId(userId: string): Promise<string | undefined>;
|
|
8
|
+
/**
|
|
9
|
+
* The team to check a dashboard request's permissions in, or null when the user
|
|
10
|
+
* belongs to none. The team the session chose counts only while the user is
|
|
11
|
+
* still a member and the team still exists: someone else may have removed them
|
|
12
|
+
* or deleted it since, and then the default team is used, as when there is no
|
|
13
|
+
* choice at all. One query answers both.
|
|
14
|
+
*
|
|
15
|
+
* A failed query rejects instead of answering null: the layouts skip the
|
|
16
|
+
* permission check for a user in no team, so an error read as "no team" would
|
|
17
|
+
* let the request through unchecked.
|
|
18
|
+
*/
|
|
19
|
+
export declare function getDashboardTeamId(headers: Pick<Headers, 'get'>, userId: string): Promise<string | null>;
|
|
20
|
+
//# sourceMappingURL=dashboard-team.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-team.d.ts","sourceRoot":"","sources":["../../../src/lib/teams/dashboard-team.ts"],"names":[],"mappings":"AAYA,kEAAkE;AAClE,eAAO,MAAM,kBAAkB,qBAAqB,CAAA;AAEpD;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAetF;AAmBD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAExG"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { cache } from "react";
|
|
2
|
+
import { queryOne } from "../db.js";
|
|
3
|
+
const ACTIVE_TEAM_HEADER = "x-active-team-id";
|
|
4
|
+
async function getUserDefaultTeamId(userId) {
|
|
5
|
+
try {
|
|
6
|
+
const result = await queryOne(
|
|
7
|
+
`SELECT tm."teamId" FROM "team_members" tm
|
|
8
|
+
INNER JOIN "teams" t ON t.id = tm."teamId"
|
|
9
|
+
WHERE tm."userId" = $1 AND t."deletedAt" IS NULL
|
|
10
|
+
ORDER BY tm."joinedAt" ASC
|
|
11
|
+
LIMIT 1`,
|
|
12
|
+
[userId]
|
|
13
|
+
);
|
|
14
|
+
return result == null ? void 0 : result.teamId;
|
|
15
|
+
} catch (error) {
|
|
16
|
+
console.error("[teams] Failed to get default team:", error);
|
|
17
|
+
return void 0;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const findDashboardTeamId = cache(async (userId, chosenTeamId) => {
|
|
21
|
+
const result = await queryOne(
|
|
22
|
+
`SELECT tm."teamId" FROM "team_members" tm
|
|
23
|
+
INNER JOIN "teams" t ON t.id = tm."teamId"
|
|
24
|
+
WHERE tm."userId" = $1 AND t."deletedAt" IS NULL
|
|
25
|
+
ORDER BY (tm."teamId" = $2) IS TRUE DESC, tm."joinedAt" ASC
|
|
26
|
+
LIMIT 1`,
|
|
27
|
+
[userId, chosenTeamId]
|
|
28
|
+
);
|
|
29
|
+
return (result == null ? void 0 : result.teamId) ?? null;
|
|
30
|
+
});
|
|
31
|
+
function getDashboardTeamId(headers, userId) {
|
|
32
|
+
return findDashboardTeamId(userId, headers.get(ACTIVE_TEAM_HEADER));
|
|
33
|
+
}
|
|
34
|
+
export {
|
|
35
|
+
ACTIVE_TEAM_HEADER,
|
|
36
|
+
getDashboardTeamId,
|
|
37
|
+
getUserDefaultTeamId
|
|
38
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/lib/teams/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,eAAO,MAAM,cAAc,aAI1B,CAAA;AACD,eAAO,MAAM,sBAAsB;;;;;EAAyD,CAAA;AAG5F,eAAO,MAAM,UAAU;;;;;;;;;;iBAerB,CAAA;AAGF,eAAO,MAAM,gBAAgB;;;;;;;;;iBAS3B,CAAA;AAGF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;iBAa/B,CAAA;AAGF,eAAO,MAAM,gBAAgB;;;;iBAI3B,CAAA;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB;;;iBAOhC,CAAA;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB;;;;iBAIhC,CAAA;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB;;;;;;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/lib/teams/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,eAAO,MAAM,cAAc,aAI1B,CAAA;AACD,eAAO,MAAM,sBAAsB;;;;;EAAyD,CAAA;AAG5F,eAAO,MAAM,UAAU;;;;;;;;;;iBAerB,CAAA;AAGF,eAAO,MAAM,gBAAgB;;;;;;;;;iBAS3B,CAAA;AAGF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;iBAa/B,CAAA;AAGF,eAAO,MAAM,gBAAgB;;;;iBAI3B,CAAA;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB;;;iBAOhC,CAAA;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB;;;;iBAIhC,CAAA;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB;;;;;;iBAA4D,CAAA;AAEzF,eAAO,MAAM,kBAAkB;;;iBAO7B,CAAA;AAEF,eAAO,MAAM,sBAAsB;;iBAMjC,CAAA;AAGF,eAAO,MAAM,gBAAgB;;;iBAG3B,CAAA;AAGF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;iBAK9B,CAAA;AAEF,eAAO,MAAM,qBAAqB;;;;;iBAGhC,CAAA;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;;iBAEpC,CAAA;AAGF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;AACnD,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAC/D,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACvE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAC/D,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAC/D,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AACzE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AACzE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AACnE,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAC3E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AACrE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AACzE,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA"}
|
package/dist/lib/teams/schema.js
CHANGED
|
@@ -61,7 +61,7 @@ const adminUpdateTeamSchema = z.object({
|
|
|
61
61
|
avatarUrl: z.string().url().nullable().optional(),
|
|
62
62
|
settings: z.record(z.string(), z.unknown()).optional()
|
|
63
63
|
});
|
|
64
|
-
const updateTeamSchema = ownerUpdateTeamSchema.
|
|
64
|
+
const updateTeamSchema = ownerUpdateTeamSchema.extend(adminUpdateTeamSchema.shape);
|
|
65
65
|
const inviteMemberSchema = z.object({
|
|
66
66
|
email: z.string().email("Invalid email address"),
|
|
67
67
|
role: z.string().refine(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-resolver.d.ts","sourceRoot":"","sources":["../../src/lib/template-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAA;AAUzB;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,GAAG,GAAG,EAC1C,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,CAAC,GAClB,CAAC,
|
|
1
|
+
{"version":3,"file":"template-resolver.d.ts","sourceRoot":"","sources":["../../src/lib/template-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAA;AAUzB;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,GAAG,GAAG,EAC1C,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,CAAC,GAClB,CAAC,CAoBH;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,GAAG,GACnB,GAAG,CAwBL;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM;;;;;;;EAenD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM;;;;;EAElD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,SAmBrC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,EACrE,SAAS,EAAE,CAAC,EACZ,OAAO,EAAE,MAAM,GACd,CAAC,CA8BH;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,IACrC,CAAC,SAAS,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,KAAG,CAAC,CAGrE"}
|
|
@@ -6,7 +6,6 @@ import {
|
|
|
6
6
|
getProtectionLevel
|
|
7
7
|
} from "../config/protected-paths.js";
|
|
8
8
|
function getTemplateOrDefault(appPath, defaultComponent) {
|
|
9
|
-
console.log(`[getTemplateOrDefault] Called for: ${appPath}`);
|
|
10
9
|
if (!canOverrideComponent(appPath)) {
|
|
11
10
|
if (process.env.NODE_ENV === "development") {
|
|
12
11
|
const level = getProtectionLevel(appPath);
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Theme Settings (Server-Side)
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* The theme mode the root layout starts from, taken from configuration alone:
|
|
5
|
+
* `defaultMode` and `forcedThemeRoutes` from theme.config.ts, `allowUserToggle`
|
|
6
|
+
* from app.config.ts. Nothing is read from the request, so the pages that use it
|
|
7
|
+
* can be prerendered. A visitor's own choice is next-themes' to apply from
|
|
8
|
+
* localStorage before first paint; a signed-in user's saved choice reaches a
|
|
9
|
+
* browser that has none through SessionCookieRefresher.
|
|
7
10
|
*/
|
|
8
11
|
import type { ForcedThemeRoutes } from './forced-theme';
|
|
9
12
|
type ThemeMode = 'light' | 'dark' | 'system';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-default-theme-mode.d.ts","sourceRoot":"","sources":["../../../src/lib/theme/get-default-theme-mode.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"get-default-theme-mode.d.ts","sourceRoot":"","sources":["../../../src/lib/theme/get-default-theme-mode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAEvD,KAAK,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAA;AAE5C,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,SAAS,CAAA;IACtB,eAAe,EAAE,OAAO,CAAA;IACxB,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;CACtC;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC,CAiB/D;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,SAAS,CAAC,CAG9D"}
|
|
@@ -1,55 +1,13 @@
|
|
|
1
|
-
import { auth } from "../auth.js";
|
|
2
1
|
import { ThemeService } from "../services/theme.service.js";
|
|
3
|
-
import { headers } from "next/headers";
|
|
4
2
|
async function getThemeSettings() {
|
|
5
3
|
var _a, _b;
|
|
6
4
|
const activeThemeName = process.env.NEXT_PUBLIC_ACTIVE_THEME || "default";
|
|
7
5
|
const themeConfig = ThemeService.getByName(activeThemeName);
|
|
8
6
|
const appConfig = ThemeService.getAppConfig(activeThemeName);
|
|
9
7
|
const allowUserToggle = ((_b = (_a = appConfig == null ? void 0 : appConfig.ui) == null ? void 0 : _a.theme) == null ? void 0 : _b.allowUserToggle) ?? true;
|
|
10
|
-
const
|
|
8
|
+
const defaultMode = (themeConfig == null ? void 0 : themeConfig.defaultMode) || "system";
|
|
11
9
|
const forcedThemeRoutes = themeConfig == null ? void 0 : themeConfig.forcedThemeRoutes;
|
|
12
|
-
|
|
13
|
-
const userTheme = await getUserThemePreference();
|
|
14
|
-
if (userTheme) {
|
|
15
|
-
return { defaultMode: userTheme, allowUserToggle, forcedThemeRoutes };
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
return { defaultMode: configDefaultMode, allowUserToggle, forcedThemeRoutes };
|
|
19
|
-
}
|
|
20
|
-
const VALID_THEME_MODES = ["light", "dark", "system"];
|
|
21
|
-
function isValidThemeMode(value) {
|
|
22
|
-
return typeof value === "string" && VALID_THEME_MODES.includes(value);
|
|
23
|
-
}
|
|
24
|
-
async function getUserThemePreference() {
|
|
25
|
-
var _a, _b, _c;
|
|
26
|
-
try {
|
|
27
|
-
const session = await auth.api.getSession({
|
|
28
|
-
headers: await headers(),
|
|
29
|
-
query: { disableRefresh: true }
|
|
30
|
-
});
|
|
31
|
-
if ((_a = session == null ? void 0 : session.user) == null ? void 0 : _a.id) {
|
|
32
|
-
const baseUrl = process.env.NEXT_PUBLIC_APP_URL || "http://localhost:5173";
|
|
33
|
-
const response = await fetch(`${baseUrl}/api/user/profile?includeMeta=true`, {
|
|
34
|
-
headers: {
|
|
35
|
-
cookie: (await headers()).get("cookie") || ""
|
|
36
|
-
},
|
|
37
|
-
cache: "no-store"
|
|
38
|
-
});
|
|
39
|
-
if (response.ok) {
|
|
40
|
-
const data = await response.json();
|
|
41
|
-
const theme = (_c = (_b = data.meta) == null ? void 0 : _b.uiPreferences) == null ? void 0 : _c.theme;
|
|
42
|
-
if (isValidThemeMode(theme)) {
|
|
43
|
-
return theme;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
} catch (error) {
|
|
48
|
-
if (process.env.NODE_ENV === "development") {
|
|
49
|
-
console.warn("[getThemeSettings] Failed to fetch user preference:", error);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return null;
|
|
10
|
+
return { defaultMode, allowUserToggle, forcedThemeRoutes };
|
|
53
11
|
}
|
|
54
12
|
async function getDefaultThemeMode() {
|
|
55
13
|
const { defaultMode } = await getThemeSettings();
|
|
@@ -26,7 +26,9 @@
|
|
|
26
26
|
"emailHelp": "Kein Passwort nötig – wir senden dir einen Einmalcode per E-Mail.",
|
|
27
27
|
"sendCode": "Anmeldecode per E-Mail senden",
|
|
28
28
|
"sendingCode": "Code wird gesendet...",
|
|
29
|
-
"codeSent": "Wir haben einen
|
|
29
|
+
"codeSent": "Wir haben einen {length}-stelligen Code an {email} gesendet.",
|
|
30
|
+
"expiresIn": "Er läuft in {time} ab.",
|
|
31
|
+
"expired": "Der Code ist abgelaufen. Fordere einen neuen an.",
|
|
30
32
|
"codeLabel": "Anmeldecode",
|
|
31
33
|
"codePlaceholder": "123456",
|
|
32
34
|
"verifyCode": "Mit Code anmelden",
|
|
@@ -65,7 +67,7 @@
|
|
|
65
67
|
"serverError": "Serverfehler. Bitte versuchen Sie es spaeter erneut",
|
|
66
68
|
"invalidEmail": "Ungueltige E-Mail-Adresse",
|
|
67
69
|
"passwordTooShort": "Das Passwort muss mindestens 6 Zeichen lang sein",
|
|
68
|
-
"otpInvalidCode": "Gib den
|
|
70
|
+
"otpInvalidCode": "Gib den {length}-stelligen Code aus deiner E-Mail ein",
|
|
69
71
|
"otpInvalid": "Ungültiger Code. Bitte prüfen und erneut versuchen",
|
|
70
72
|
"otpExpired": "Dieser Code ist abgelaufen. Fordere einen neuen an",
|
|
71
73
|
"otpTooMany": "Zu viele Versuche. Fordere einen neuen Code an",
|