@nextsparkjs/core 0.1.0-beta.188 → 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.js +2 -2
- 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
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import Link from "next/link";
|
|
4
4
|
import { useState, useEffect } from "react";
|
|
5
|
+
import { useTranslations } from "next-intl";
|
|
5
6
|
import { cn } from "../../../lib/utils/index.js";
|
|
6
7
|
import { useSidebar } from "../../../contexts/sidebar-context.js";
|
|
7
8
|
import { sel } from "../../../lib/test/index.js";
|
|
@@ -9,14 +10,15 @@ import { DynamicNavigation } from "../navigation/DynamicNavigation.js";
|
|
|
9
10
|
import { TeamSwitcherCompact } from "../../teams/TeamSwitcherCompact.js";
|
|
10
11
|
import { APP_NAME } from "../../../lib/config/index.js";
|
|
11
12
|
function Sidebar({ className, entities }) {
|
|
13
|
+
const t = useTranslations("common");
|
|
12
14
|
const { isCollapsed } = useSidebar();
|
|
13
15
|
const appName = APP_NAME;
|
|
14
16
|
const [statusMessage, setStatusMessage] = useState("");
|
|
15
17
|
useEffect(() => {
|
|
16
18
|
if (isCollapsed) {
|
|
17
|
-
setStatusMessage("
|
|
19
|
+
setStatusMessage(t("a11y.sidebarCollapsedHint"));
|
|
18
20
|
}
|
|
19
|
-
}, [isCollapsed]);
|
|
21
|
+
}, [isCollapsed, t]);
|
|
20
22
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
21
23
|
/* @__PURE__ */ jsx(
|
|
22
24
|
"div",
|
|
@@ -36,7 +38,7 @@ function Sidebar({ className, entities }) {
|
|
|
36
38
|
className
|
|
37
39
|
),
|
|
38
40
|
role: "complementary",
|
|
39
|
-
"aria-label": isCollapsed ? "
|
|
41
|
+
"aria-label": isCollapsed ? t("a11y.sidebarCollapsed") : t("a11y.sidebarExpanded"),
|
|
40
42
|
"data-cy": sel("dashboard.sidebar.container"),
|
|
41
43
|
"data-collapsed": isCollapsed,
|
|
42
44
|
children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col h-full", children: [
|
|
@@ -51,7 +53,7 @@ function Sidebar({ className, entities }) {
|
|
|
51
53
|
{
|
|
52
54
|
href: "/",
|
|
53
55
|
className: "flex items-center gap-2",
|
|
54
|
-
"aria-label": isCollapsed ? "
|
|
56
|
+
"aria-label": isCollapsed ? t("a11y.goHome") : t("a11y.goHomeNamed", { appName }),
|
|
55
57
|
"data-cy": sel("dashboard.sidebar.logo"),
|
|
56
58
|
children: [
|
|
57
59
|
/* @__PURE__ */ jsx(
|
|
@@ -59,7 +61,7 @@ function Sidebar({ className, entities }) {
|
|
|
59
61
|
{
|
|
60
62
|
className: "w-8 h-8 rounded-lg bg-primary flex items-center justify-center",
|
|
61
63
|
role: "img",
|
|
62
|
-
"aria-label":
|
|
64
|
+
"aria-label": t("a11y.logoOf", { appName }),
|
|
63
65
|
children: /* @__PURE__ */ jsx("span", { className: "text-primary-foreground font-bold text-sm", "aria-hidden": "true", children: appName.charAt(0) })
|
|
64
66
|
}
|
|
65
67
|
),
|
|
@@ -81,7 +83,7 @@ function Sidebar({ className, entities }) {
|
|
|
81
83
|
className: "flex-1 px-2 pb-4 overflow-y-auto",
|
|
82
84
|
id: "sidebar-navigation",
|
|
83
85
|
role: "navigation",
|
|
84
|
-
"aria-label": "
|
|
86
|
+
"aria-label": t("a11y.dashboardNavigation"),
|
|
85
87
|
"data-cy": sel("dashboard.sidebar.content"),
|
|
86
88
|
children: /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs("section", { "aria-labelledby": !isCollapsed ? "nav-heading" : void 0, children: [
|
|
87
89
|
!isCollapsed && /* @__PURE__ */ jsx(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopNavbar.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/layouts/TopNavbar.tsx"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAA;AAEnF,UAAU,cAAc;IACtB,QAAQ,EAAE,wBAAwB,EAAE,CAAA;IACpC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"TopNavbar.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/layouts/TopNavbar.tsx"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAA;AAEnF,UAAU,cAAc;IACtB,QAAQ,EAAE,wBAAwB,EAAE,CAAA;IACpC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,cAAc,2CA6pBhE"}
|
|
@@ -21,7 +21,7 @@ import { NotificationsDropdown } from "../misc/NotificationsDropdown.js";
|
|
|
21
21
|
import { SearchDropdown } from "../misc/SearchDropdown.js";
|
|
22
22
|
import { QuickCreateDropdown } from "../misc/QuickCreateDropdown.js";
|
|
23
23
|
import { cn } from "../../../lib/utils/index.js";
|
|
24
|
-
import { sel
|
|
24
|
+
import { sel } from "../../../lib/test/index.js";
|
|
25
25
|
import { useTranslations } from "next-intl";
|
|
26
26
|
import { useIsSuperAdmin } from "../../app/guards/SuperAdminGuard.js";
|
|
27
27
|
import { useIsDeveloper } from "../../app/guards/DeveloperGuard.js";
|
|
@@ -80,26 +80,26 @@ function TopNavbar({ entities, className }) {
|
|
|
80
80
|
const handleMenuToggle = useCallback(() => {
|
|
81
81
|
const newState = !isMenuOpen;
|
|
82
82
|
setIsMenuOpen(newState);
|
|
83
|
-
setStatusMessage(newState ? "
|
|
84
|
-
}, [isMenuOpen]);
|
|
83
|
+
setStatusMessage(newState ? t("a11y.mobileMenuOpenedAnnouncement") : t("a11y.mobileMenuClosedAnnouncement"));
|
|
84
|
+
}, [isMenuOpen, t]);
|
|
85
85
|
const handleSignOut = useCallback(async () => {
|
|
86
86
|
try {
|
|
87
|
-
setStatusMessage("
|
|
87
|
+
setStatusMessage(t("a11y.signingOut"));
|
|
88
88
|
await signOut();
|
|
89
|
-
setStatusMessage("
|
|
89
|
+
setStatusMessage(t("a11y.signOutSuccess"));
|
|
90
90
|
} catch {
|
|
91
|
-
setStatusMessage("
|
|
91
|
+
setStatusMessage(t("a11y.signOutError"));
|
|
92
92
|
}
|
|
93
|
-
}, [signOut]);
|
|
93
|
+
}, [signOut, t]);
|
|
94
94
|
const handleMenuClose = useCallback(() => {
|
|
95
95
|
setIsMenuOpen(false);
|
|
96
|
-
setStatusMessage("
|
|
97
|
-
}, []);
|
|
96
|
+
setStatusMessage(t("a11y.menuClosedAnnouncement"));
|
|
97
|
+
}, [t]);
|
|
98
98
|
const handleToggleSidebar = useCallback(() => {
|
|
99
99
|
toggleSidebar();
|
|
100
100
|
const newState = !isCollapsed;
|
|
101
|
-
setStatusMessage(newState ? "
|
|
102
|
-
}, [isCollapsed, toggleSidebar]);
|
|
101
|
+
setStatusMessage(newState ? t("a11y.sidebarToggleExpanded") : t("a11y.sidebarToggleCollapsed"));
|
|
102
|
+
}, [isCollapsed, toggleSidebar, t]);
|
|
103
103
|
useEffect(() => {
|
|
104
104
|
const handleKeyDown = (e) => {
|
|
105
105
|
if (e.key === "Escape" && isMenuOpen) {
|
|
@@ -133,7 +133,7 @@ function TopNavbar({ entities, className }) {
|
|
|
133
133
|
className
|
|
134
134
|
),
|
|
135
135
|
role: "banner",
|
|
136
|
-
"aria-label": "
|
|
136
|
+
"aria-label": t("a11y.mainNavigation"),
|
|
137
137
|
"data-cy": sel("dashboard.topnav.container"),
|
|
138
138
|
children: [
|
|
139
139
|
/* @__PURE__ */ jsx("div", { className: "w-full pl-2.5 pr-4 sm:pr-6 lg:pr-8", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between h-16", children: [
|
|
@@ -143,7 +143,7 @@ function TopNavbar({ entities, className }) {
|
|
|
143
143
|
{
|
|
144
144
|
href: "/",
|
|
145
145
|
className: "text-xl font-bold text-foreground lg:hidden",
|
|
146
|
-
"aria-label": "
|
|
146
|
+
"aria-label": t("a11y.goHome"),
|
|
147
147
|
"data-cy": sel("dashboard.topnav.logo"),
|
|
148
148
|
children: APP_NAME
|
|
149
149
|
}
|
|
@@ -156,7 +156,7 @@ function TopNavbar({ entities, className }) {
|
|
|
156
156
|
size: "icon",
|
|
157
157
|
onClick: handleToggleSidebar,
|
|
158
158
|
className: "hidden lg:flex h-8 w-8",
|
|
159
|
-
"aria-label": isCollapsed ? "
|
|
159
|
+
"aria-label": isCollapsed ? t("a11y.expandSidebar") : t("a11y.collapseSidebar"),
|
|
160
160
|
"aria-expanded": !isCollapsed,
|
|
161
161
|
"aria-controls": "sidebar-navigation",
|
|
162
162
|
"data-cy": sel("dashboard.topnav.sidebarToggle"),
|
|
@@ -169,7 +169,7 @@ function TopNavbar({ entities, className }) {
|
|
|
169
169
|
{
|
|
170
170
|
className: "hidden lg:flex items-center min-w-0 max-w-sm",
|
|
171
171
|
role: "search",
|
|
172
|
-
"aria-label": "
|
|
172
|
+
"aria-label": t("a11y.taskSearch"),
|
|
173
173
|
"data-cy": sel("dashboard.topnav.search.container"),
|
|
174
174
|
children: /* @__PURE__ */ jsx(SearchDropdown, {})
|
|
175
175
|
}
|
|
@@ -181,7 +181,7 @@ function TopNavbar({ entities, className }) {
|
|
|
181
181
|
{
|
|
182
182
|
className: "flex items-center space-x-4 flex-shrink-0",
|
|
183
183
|
role: "toolbar",
|
|
184
|
-
"aria-label": "
|
|
184
|
+
"aria-label": t("a11y.actionsAndSettings"),
|
|
185
185
|
"data-cy": sel("dashboard.topnav.actions"),
|
|
186
186
|
children: [
|
|
187
187
|
user && isTopbarFeatureEnabled("notifications") && /* @__PURE__ */ jsx(NotificationsDropdown, {}),
|
|
@@ -198,10 +198,10 @@ function TopNavbar({ entities, className }) {
|
|
|
198
198
|
href: "/support",
|
|
199
199
|
target: "_blank",
|
|
200
200
|
rel: "noopener noreferrer",
|
|
201
|
-
"aria-label": "
|
|
201
|
+
"aria-label": t("a11y.openHelpCenterNewTab"),
|
|
202
202
|
children: [
|
|
203
203
|
/* @__PURE__ */ jsx(HelpCircle, { className: "h-4 w-4", "aria-hidden": "true" }),
|
|
204
|
-
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "
|
|
204
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: t("a11y.help") })
|
|
205
205
|
]
|
|
206
206
|
}
|
|
207
207
|
)
|
|
@@ -225,11 +225,11 @@ function TopNavbar({ entities, className }) {
|
|
|
225
225
|
Link,
|
|
226
226
|
{
|
|
227
227
|
href: "/superadmin",
|
|
228
|
-
"aria-label": "
|
|
229
|
-
title: "
|
|
228
|
+
"aria-label": t("a11y.accessSuperAdminArea"),
|
|
229
|
+
title: t("a11y.superAdminAreaTitle"),
|
|
230
230
|
children: [
|
|
231
231
|
/* @__PURE__ */ jsx(Shield, { className: "h-4 w-4", "aria-hidden": "true" }),
|
|
232
|
-
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "
|
|
232
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: t("a11y.superAdminArea") })
|
|
233
233
|
]
|
|
234
234
|
}
|
|
235
235
|
)
|
|
@@ -246,11 +246,11 @@ function TopNavbar({ entities, className }) {
|
|
|
246
246
|
Link,
|
|
247
247
|
{
|
|
248
248
|
href: "/devtools",
|
|
249
|
-
"aria-label": "
|
|
250
|
-
title: "
|
|
249
|
+
"aria-label": t("a11y.accessDeveloperArea"),
|
|
250
|
+
title: t("a11y.developerAreaTitle"),
|
|
251
251
|
children: [
|
|
252
252
|
/* @__PURE__ */ jsx(Code, { className: "h-4 w-4 text-violet-600 dark:text-violet-400", "aria-hidden": "true" }),
|
|
253
|
-
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "
|
|
253
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: t("a11y.developerArea") })
|
|
254
254
|
]
|
|
255
255
|
}
|
|
256
256
|
)
|
|
@@ -310,9 +310,9 @@ function TopNavbar({ entities, className }) {
|
|
|
310
310
|
{
|
|
311
311
|
className: "h-8 w-20 bg-muted animate-pulse rounded",
|
|
312
312
|
role: "status",
|
|
313
|
-
"aria-label": "
|
|
313
|
+
"aria-label": t("a11y.loadingUserInfo"),
|
|
314
314
|
"data-cy": sel("dashboard.topnav.userLoading"),
|
|
315
|
-
children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: "
|
|
315
|
+
children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: t("a11y.loading") })
|
|
316
316
|
}
|
|
317
317
|
) : user ? TOPBAR_CONFIG.userMenu.enabled ? /* @__PURE__ */ jsxs(DropdownMenu, { children: [
|
|
318
318
|
/* @__PURE__ */ jsx(
|
|
@@ -325,10 +325,7 @@ function TopNavbar({ entities, className }) {
|
|
|
325
325
|
{
|
|
326
326
|
variant: "ghost",
|
|
327
327
|
className: "flex items-center gap-3 h-auto p-2",
|
|
328
|
-
"aria-label":
|
|
329
|
-
"Men\xFA de usuario. Cuenta: {name}",
|
|
330
|
-
{ name: user.firstName || user.email }
|
|
331
|
-
),
|
|
328
|
+
"aria-label": t("a11y.userMenuForName", { name: user.firstName || user.email }),
|
|
332
329
|
"aria-haspopup": "menu",
|
|
333
330
|
"aria-expanded": "false",
|
|
334
331
|
children: [
|
|
@@ -346,7 +343,7 @@ function TopNavbar({ entities, className }) {
|
|
|
346
343
|
{
|
|
347
344
|
className: `h-8 w-8 rounded-full flex items-center justify-center text-white text-sm font-medium ${getAvatarColor(user.email)}`,
|
|
348
345
|
role: "img",
|
|
349
|
-
"aria-label":
|
|
346
|
+
"aria-label": t("a11y.avatarForName", { name: user.firstName || user.email }),
|
|
350
347
|
children: getUserInitials(user)
|
|
351
348
|
}
|
|
352
349
|
),
|
|
@@ -368,9 +365,9 @@ function TopNavbar({ entities, className }) {
|
|
|
368
365
|
{
|
|
369
366
|
className: "flex flex-col space-y-1",
|
|
370
367
|
role: "group",
|
|
371
|
-
"aria-label": "
|
|
368
|
+
"aria-label": t("a11y.userInfo"),
|
|
372
369
|
children: [
|
|
373
|
-
TOPBAR_CONFIG.userMenu.showAvatar && /* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: user.firstName || "
|
|
370
|
+
TOPBAR_CONFIG.userMenu.showAvatar && /* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: user.firstName || t("common.user") }),
|
|
374
371
|
TOPBAR_CONFIG.userMenu.showEmail && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: user.email }),
|
|
375
372
|
TOPBAR_CONFIG.userMenu.showRole && user.role && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: t(`userRoles.${user.role}`) })
|
|
376
373
|
]
|
|
@@ -432,7 +429,7 @@ function TopNavbar({ entities, className }) {
|
|
|
432
429
|
Image,
|
|
433
430
|
{
|
|
434
431
|
src: user.image,
|
|
435
|
-
alt:
|
|
432
|
+
alt: t("a11y.avatarForName", { name: user.firstName || user.email }),
|
|
436
433
|
width: 32,
|
|
437
434
|
height: 32,
|
|
438
435
|
className: "h-8 w-8 rounded-full object-cover border border-border"
|
|
@@ -441,7 +438,7 @@ function TopNavbar({ entities, className }) {
|
|
|
441
438
|
"div",
|
|
442
439
|
{
|
|
443
440
|
className: `h-8 w-8 rounded-full flex items-center justify-center text-white text-sm font-medium ${getAvatarColor(user.email)}`,
|
|
444
|
-
"aria-label":
|
|
441
|
+
"aria-label": t("a11y.avatarForName", { name: user.firstName || user.email }),
|
|
445
442
|
children: getUserInitials(user)
|
|
446
443
|
}
|
|
447
444
|
),
|
|
@@ -458,7 +455,7 @@ function TopNavbar({ entities, className }) {
|
|
|
458
455
|
{
|
|
459
456
|
variant: "ghost",
|
|
460
457
|
size: "sm",
|
|
461
|
-
"aria-label": "
|
|
458
|
+
"aria-label": t("a11y.signIn"),
|
|
462
459
|
children: t("buttons.signIn")
|
|
463
460
|
}
|
|
464
461
|
)
|
|
@@ -473,7 +470,7 @@ function TopNavbar({ entities, className }) {
|
|
|
473
470
|
Button,
|
|
474
471
|
{
|
|
475
472
|
size: "sm",
|
|
476
|
-
"aria-label": "
|
|
473
|
+
"aria-label": t("a11y.signUp"),
|
|
477
474
|
children: t("buttons.signUp")
|
|
478
475
|
}
|
|
479
476
|
)
|
|
@@ -488,7 +485,7 @@ function TopNavbar({ entities, className }) {
|
|
|
488
485
|
{
|
|
489
486
|
className: "lg:hidden flex items-center space-x-2",
|
|
490
487
|
role: "group",
|
|
491
|
-
"aria-label": "
|
|
488
|
+
"aria-label": t("a11y.mobileActions"),
|
|
492
489
|
"data-cy": sel("dashboard.topnav.mobileMenu.actions"),
|
|
493
490
|
children: [
|
|
494
491
|
isTopbarFeatureEnabled("themeToggle") && /* @__PURE__ */ jsx(
|
|
@@ -502,7 +499,7 @@ function TopNavbar({ entities, className }) {
|
|
|
502
499
|
{
|
|
503
500
|
onClick: handleMenuToggle,
|
|
504
501
|
className: "text-foreground/70 hover:text-foreground",
|
|
505
|
-
"aria-label": isMenuOpen ? "
|
|
502
|
+
"aria-label": isMenuOpen ? t("a11y.closeNavigationMenu") : t("a11y.openNavigationMenu"),
|
|
506
503
|
"aria-expanded": isMenuOpen,
|
|
507
504
|
"aria-controls": "mobile-menu",
|
|
508
505
|
"data-cy": sel("dashboard.topnav.mobileMenu.toggle"),
|
|
@@ -519,7 +516,7 @@ function TopNavbar({ entities, className }) {
|
|
|
519
516
|
className: "lg:hidden border-t border-border",
|
|
520
517
|
id: "mobile-menu",
|
|
521
518
|
role: "navigation",
|
|
522
|
-
"aria-label": "
|
|
519
|
+
"aria-label": t("a11y.mobileNavigationMenu"),
|
|
523
520
|
"data-cy": sel("dashboard.topnav.mobileMenu.container"),
|
|
524
521
|
children: /* @__PURE__ */ jsx("div", { className: "px-2 pt-2 pb-3 space-y-1", children: user ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
525
522
|
/* @__PURE__ */ jsxs(
|
|
@@ -527,7 +524,7 @@ function TopNavbar({ entities, className }) {
|
|
|
527
524
|
{
|
|
528
525
|
className: "mb-4",
|
|
529
526
|
role: "group",
|
|
530
|
-
"aria-label": "
|
|
527
|
+
"aria-label": t("a11y.mainNavigation"),
|
|
531
528
|
children: [
|
|
532
529
|
/* @__PURE__ */ jsx(
|
|
533
530
|
DynamicNavigation,
|
|
@@ -546,11 +543,11 @@ function TopNavbar({ entities, className }) {
|
|
|
546
543
|
pathname.startsWith("/superadmin") ? "bg-red-50 text-red-700" : "text-red-600"
|
|
547
544
|
),
|
|
548
545
|
onClick: handleMenuClose,
|
|
549
|
-
"aria-label": "
|
|
546
|
+
"aria-label": t("a11y.goToSuperAdminArea"),
|
|
550
547
|
"data-cy": sel("dashboard.topnav.mobileMenu.superadmin"),
|
|
551
548
|
children: [
|
|
552
549
|
/* @__PURE__ */ jsx(Shield, { className: "h-4 w-4", "aria-hidden": "true" }),
|
|
553
|
-
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "
|
|
550
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: t("a11y.superAdminArea") })
|
|
554
551
|
]
|
|
555
552
|
}
|
|
556
553
|
),
|
|
@@ -563,11 +560,11 @@ function TopNavbar({ entities, className }) {
|
|
|
563
560
|
pathname.startsWith("/devtools") ? "bg-violet-50 dark:bg-violet-950/50 text-violet-700 dark:text-violet-400" : "text-violet-600 dark:text-violet-400"
|
|
564
561
|
),
|
|
565
562
|
onClick: handleMenuClose,
|
|
566
|
-
"aria-label": "
|
|
563
|
+
"aria-label": t("a11y.goToDeveloperArea"),
|
|
567
564
|
"data-cy": sel("dashboard.topnav.mobileMenu.devtools"),
|
|
568
565
|
children: [
|
|
569
566
|
/* @__PURE__ */ jsx(Code, { className: "h-4 w-4", "aria-hidden": "true" }),
|
|
570
|
-
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "
|
|
567
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: t("a11y.developerArea") })
|
|
571
568
|
]
|
|
572
569
|
}
|
|
573
570
|
)
|
|
@@ -579,7 +576,7 @@ function TopNavbar({ entities, className }) {
|
|
|
579
576
|
{
|
|
580
577
|
className: "flex items-center gap-3 px-3 py-2 border-t border-border pt-4",
|
|
581
578
|
role: "group",
|
|
582
|
-
"aria-label": "
|
|
579
|
+
"aria-label": t("a11y.userInfo"),
|
|
583
580
|
"data-cy": sel("dashboard.topnav.mobileMenu.userInfo"),
|
|
584
581
|
children: [
|
|
585
582
|
user.image ? /* @__PURE__ */ jsx(
|
|
@@ -596,12 +593,12 @@ function TopNavbar({ entities, className }) {
|
|
|
596
593
|
{
|
|
597
594
|
className: `h-8 w-8 rounded-full flex items-center justify-center text-white text-sm font-medium ${getAvatarColor(user.email)}`,
|
|
598
595
|
role: "img",
|
|
599
|
-
"aria-label":
|
|
596
|
+
"aria-label": t("a11y.avatarForName", { name: user.firstName || user.email }),
|
|
600
597
|
children: getUserInitials(user)
|
|
601
598
|
}
|
|
602
599
|
),
|
|
603
600
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
604
|
-
/* @__PURE__ */ jsx("div", { className: "text-sm font-medium text-foreground", children: user.firstName || "
|
|
601
|
+
/* @__PURE__ */ jsx("div", { className: "text-sm font-medium text-foreground", children: user.firstName || t("common.user") }),
|
|
605
602
|
/* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground", children: user.email })
|
|
606
603
|
] })
|
|
607
604
|
]
|
|
@@ -613,7 +610,7 @@ function TopNavbar({ entities, className }) {
|
|
|
613
610
|
href: "/dashboard/settings/profile",
|
|
614
611
|
className: "block px-3 py-2 rounded-md text-base font-medium text-foreground hover:bg-accent",
|
|
615
612
|
onClick: handleMenuClose,
|
|
616
|
-
"aria-label": "
|
|
613
|
+
"aria-label": t("a11y.goToProfile"),
|
|
617
614
|
"data-cy": sel("dashboard.topnav.mobileMenu.linkProfile"),
|
|
618
615
|
children: [
|
|
619
616
|
/* @__PURE__ */ jsx(User, { className: "inline mr-2 h-4 w-4", "aria-hidden": "true" }),
|
|
@@ -627,7 +624,7 @@ function TopNavbar({ entities, className }) {
|
|
|
627
624
|
href: "/dashboard/settings",
|
|
628
625
|
className: "block px-3 py-2 rounded-md text-base font-medium text-foreground hover:bg-accent",
|
|
629
626
|
onClick: handleMenuClose,
|
|
630
|
-
"aria-label": "
|
|
627
|
+
"aria-label": t("a11y.goToSettings"),
|
|
631
628
|
"data-cy": sel("dashboard.topnav.mobileMenu.linkSettings"),
|
|
632
629
|
children: [
|
|
633
630
|
/* @__PURE__ */ jsx(Settings, { className: "inline mr-2 h-4 w-4", "aria-hidden": "true" }),
|
|
@@ -641,7 +638,7 @@ function TopNavbar({ entities, className }) {
|
|
|
641
638
|
href: "/dashboard/settings/billing",
|
|
642
639
|
className: "block px-3 py-2 rounded-md text-base font-medium text-foreground hover:bg-accent",
|
|
643
640
|
onClick: handleMenuClose,
|
|
644
|
-
"aria-label": "
|
|
641
|
+
"aria-label": t("a11y.goToBilling"),
|
|
645
642
|
"data-cy": sel("dashboard.topnav.mobileMenu.linkBilling"),
|
|
646
643
|
children: [
|
|
647
644
|
/* @__PURE__ */ jsx(CreditCard, { className: "inline mr-2 h-4 w-4", "aria-hidden": "true" }),
|
|
@@ -657,7 +654,7 @@ function TopNavbar({ entities, className }) {
|
|
|
657
654
|
handleMenuClose();
|
|
658
655
|
},
|
|
659
656
|
className: "w-full text-left px-3 py-2 rounded-md text-base font-medium text-red-600 hover:bg-accent",
|
|
660
|
-
"aria-label": "
|
|
657
|
+
"aria-label": t("a11y.signOut"),
|
|
661
658
|
"data-cy": sel("dashboard.topnav.mobileMenu.signout"),
|
|
662
659
|
children: [
|
|
663
660
|
/* @__PURE__ */ jsx(LogOut, { className: "inline mr-2 h-4 w-4", "aria-hidden": "true" }),
|
|
@@ -672,7 +669,7 @@ function TopNavbar({ entities, className }) {
|
|
|
672
669
|
href: "/login",
|
|
673
670
|
className: "block px-3 py-2 rounded-md text-base font-medium text-foreground hover:bg-accent",
|
|
674
671
|
onClick: handleMenuClose,
|
|
675
|
-
"aria-label": "
|
|
672
|
+
"aria-label": t("a11y.signIn"),
|
|
676
673
|
"data-cy": sel("dashboard.topnav.signin"),
|
|
677
674
|
children: "Sign in"
|
|
678
675
|
}
|
|
@@ -683,7 +680,7 @@ function TopNavbar({ entities, className }) {
|
|
|
683
680
|
href: "/signup",
|
|
684
681
|
className: "block px-3 py-2 rounded-md text-base font-medium text-foreground hover:bg-accent",
|
|
685
682
|
onClick: handleMenuClose,
|
|
686
|
-
"aria-label": "
|
|
683
|
+
"aria-label": t("a11y.signUp"),
|
|
687
684
|
"data-cy": sel("dashboard.topnav.signup"),
|
|
688
685
|
children: "Sign up"
|
|
689
686
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotificationsDropdown.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/misc/NotificationsDropdown.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"NotificationsDropdown.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/misc/NotificationsDropdown.tsx"],"names":[],"mappings":"AAkLA,wBAAgB,qBAAqB,4CAiHpC"}
|
|
@@ -17,7 +17,7 @@ import { useNotifications } from "../../../hooks/useNotifications.js";
|
|
|
17
17
|
import { cn } from "../../../lib/utils/index.js";
|
|
18
18
|
import { useState, useCallback } from "react";
|
|
19
19
|
import { sel, createAriaLabel } from "../../../lib/test/index.js";
|
|
20
|
-
import { useTranslations } from "next-intl";
|
|
20
|
+
import { useLocale, useTranslations } from "next-intl";
|
|
21
21
|
const getNotificationIcon = (type) => {
|
|
22
22
|
switch (type) {
|
|
23
23
|
case "success":
|
|
@@ -30,28 +30,30 @@ const getNotificationIcon = (type) => {
|
|
|
30
30
|
return /* @__PURE__ */ jsx(Info, { className: "h-4 w-4 text-blue-500" });
|
|
31
31
|
}
|
|
32
32
|
};
|
|
33
|
-
const formatTimeAgo = (date, locale
|
|
33
|
+
const formatTimeAgo = (date, t, locale) => {
|
|
34
34
|
const now = /* @__PURE__ */ new Date();
|
|
35
35
|
const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1e3);
|
|
36
36
|
if (diffInSeconds < 60) {
|
|
37
|
-
return
|
|
37
|
+
return t("relativeTime.justNow");
|
|
38
38
|
} else if (diffInSeconds < 3600) {
|
|
39
39
|
const minutes = Math.floor(diffInSeconds / 60);
|
|
40
|
-
return
|
|
40
|
+
return t("relativeTime.minutesAgo", { minutes });
|
|
41
41
|
} else if (diffInSeconds < 86400) {
|
|
42
42
|
const hours = Math.floor(diffInSeconds / 3600);
|
|
43
|
-
return
|
|
43
|
+
return t("relativeTime.hoursAgo", { hours });
|
|
44
44
|
} else if (diffInSeconds < 604800) {
|
|
45
45
|
const days = Math.floor(diffInSeconds / 86400);
|
|
46
|
-
return
|
|
46
|
+
return t("relativeTime.daysAgo", { days });
|
|
47
47
|
} else {
|
|
48
|
-
return date.toLocaleDateString(locale
|
|
48
|
+
return date.toLocaleDateString(locale, {
|
|
49
49
|
day: "numeric",
|
|
50
50
|
month: "short"
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
53
|
};
|
|
54
54
|
function NotificationItem({ notification, onMarkAsRead, onDelete }) {
|
|
55
|
+
const t = useTranslations("common");
|
|
56
|
+
const locale = useLocale();
|
|
55
57
|
const handleClick = useCallback(() => {
|
|
56
58
|
if (!notification.isRead) {
|
|
57
59
|
onMarkAsRead(notification.id);
|
|
@@ -86,8 +88,8 @@ function NotificationItem({ notification, onMarkAsRead, onDelete }) {
|
|
|
86
88
|
{
|
|
87
89
|
title: notification.title,
|
|
88
90
|
message: notification.message,
|
|
89
|
-
time: formatTimeAgo(notification.timestamp),
|
|
90
|
-
status: notification.isRead ? "
|
|
91
|
+
time: formatTimeAgo(notification.timestamp, t, locale),
|
|
92
|
+
status: notification.isRead ? t("notifications.read") : t("notifications.unreadStatus")
|
|
91
93
|
}
|
|
92
94
|
),
|
|
93
95
|
"data-notification-id": notification.id,
|
|
@@ -110,7 +112,7 @@ function NotificationItem({ notification, onMarkAsRead, onDelete }) {
|
|
|
110
112
|
size: "sm",
|
|
111
113
|
className: "h-6 w-6 p-0 opacity-0 group-hover:opacity-100 transition-opacity",
|
|
112
114
|
onClick: handleDelete,
|
|
113
|
-
"aria-label":
|
|
115
|
+
"aria-label": t("a11y.deleteNotification", { title: notification.title }),
|
|
114
116
|
children: /* @__PURE__ */ jsx(X, { className: "h-3 w-3", "aria-hidden": "true" })
|
|
115
117
|
}
|
|
116
118
|
)
|
|
@@ -118,7 +120,7 @@ function NotificationItem({ notification, onMarkAsRead, onDelete }) {
|
|
|
118
120
|
] }),
|
|
119
121
|
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground line-clamp-2", children: notification.message }),
|
|
120
122
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
121
|
-
/* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: formatTimeAgo(notification.timestamp) }),
|
|
123
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: formatTimeAgo(notification.timestamp, t, locale) }),
|
|
122
124
|
!notification.isRead && /* @__PURE__ */ jsxs(
|
|
123
125
|
Button,
|
|
124
126
|
{
|
|
@@ -126,10 +128,10 @@ function NotificationItem({ notification, onMarkAsRead, onDelete }) {
|
|
|
126
128
|
size: "sm",
|
|
127
129
|
className: "h-6 px-2 text-xs opacity-0 group-hover:opacity-100 transition-opacity",
|
|
128
130
|
onClick: handleMarkAsRead,
|
|
129
|
-
"aria-label":
|
|
131
|
+
"aria-label": t("a11y.markNotificationAsRead", { title: notification.title }),
|
|
130
132
|
children: [
|
|
131
133
|
/* @__PURE__ */ jsx(Check, { className: "h-3 w-3 mr-1", "aria-hidden": "true" }),
|
|
132
|
-
"
|
|
134
|
+
t("notifications.markAsRead")
|
|
133
135
|
]
|
|
134
136
|
}
|
|
135
137
|
)
|
|
@@ -149,8 +151,8 @@ function NotificationsDropdown() {
|
|
|
149
151
|
const t = useTranslations("common");
|
|
150
152
|
const handleMarkAllAsRead = useCallback(() => {
|
|
151
153
|
markAllAsRead();
|
|
152
|
-
setStatusMessage("
|
|
153
|
-
}, [markAllAsRead]);
|
|
154
|
+
setStatusMessage(t("a11y.allNotificationsMarkedRead"));
|
|
155
|
+
}, [markAllAsRead, t]);
|
|
154
156
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
155
157
|
/* @__PURE__ */ jsx(
|
|
156
158
|
"div",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchDropdown.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/misc/SearchDropdown.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SearchDropdown.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/misc/SearchDropdown.tsx"],"names":[],"mappings":"AAiLA,wBAAgB,cAAc,4CAmN7B"}
|