@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
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
ArrowRight
|
|
17
17
|
} from "lucide-react";
|
|
18
18
|
import { useEntitySearch } from "../../../hooks/useEntitySearch.js";
|
|
19
|
-
import { formatSearchResult } from "../../../lib/search-highlighting.js";
|
|
19
|
+
import { formatSearchResult, escapeHtml } from "../../../lib/search-highlighting.js";
|
|
20
20
|
import { cn } from "../../../lib/utils/index.js";
|
|
21
21
|
import { sel, createAriaLabel } from "../../../lib/test/index.js";
|
|
22
22
|
import { useTranslations } from "next-intl";
|
|
@@ -33,19 +33,19 @@ const getTypeIcon = (result) => {
|
|
|
33
33
|
return /* @__PURE__ */ jsx(Search, { className: "h-4 w-4" });
|
|
34
34
|
}
|
|
35
35
|
};
|
|
36
|
-
const getTypeLabel = (result,
|
|
36
|
+
const getTypeLabel = (result, t) => {
|
|
37
37
|
if (result.type === "entity") {
|
|
38
|
-
return
|
|
38
|
+
return t("search.entityLabel");
|
|
39
39
|
}
|
|
40
40
|
switch (result.category) {
|
|
41
41
|
case "Settings":
|
|
42
|
-
return
|
|
42
|
+
return t("search.settingLabel");
|
|
43
43
|
case "Navigation":
|
|
44
|
-
return
|
|
44
|
+
return t("search.pageLabel");
|
|
45
45
|
case "Entities":
|
|
46
|
-
return
|
|
46
|
+
return t("search.entityLabel");
|
|
47
47
|
default:
|
|
48
|
-
return
|
|
48
|
+
return t("search.resultLabel");
|
|
49
49
|
}
|
|
50
50
|
};
|
|
51
51
|
const getPriorityColor = (priority) => {
|
|
@@ -61,6 +61,7 @@ const getPriorityColor = (priority) => {
|
|
|
61
61
|
}
|
|
62
62
|
};
|
|
63
63
|
function SearchResultItem({ result, onSelect, searchQuery }) {
|
|
64
|
+
const t = useTranslations("common");
|
|
64
65
|
const handleSelect = useCallback(() => {
|
|
65
66
|
onSelect();
|
|
66
67
|
}, [onSelect]);
|
|
@@ -79,7 +80,7 @@ function SearchResultItem({ result, onSelect, searchQuery }) {
|
|
|
79
80
|
"aria-label": createAriaLabel(
|
|
80
81
|
"{type}: {title}{description}{limits}",
|
|
81
82
|
{
|
|
82
|
-
type: getTypeLabel(result,
|
|
83
|
+
type: getTypeLabel(result, t),
|
|
83
84
|
title: result.title,
|
|
84
85
|
description: result.description ? ` - ${result.description}` : "",
|
|
85
86
|
limits: result.limitInfo ? ` (${result.limitInfo.current}/${result.limitInfo.max})` : ""
|
|
@@ -128,11 +129,11 @@ function SearchResultItem({ result, onSelect, searchQuery }) {
|
|
|
128
129
|
"p",
|
|
129
130
|
{
|
|
130
131
|
className: "text-xs text-muted-foreground line-clamp-2",
|
|
131
|
-
dangerouslySetInnerHTML: { __html: highlightedDescription
|
|
132
|
+
dangerouslySetInnerHTML: { __html: highlightedDescription ?? escapeHtml(result.description) }
|
|
132
133
|
}
|
|
133
134
|
),
|
|
134
135
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
135
|
-
/* @__PURE__ */ jsx(Badge, { variant: "outline", className: "text-xs", children: getTypeLabel(result) }),
|
|
136
|
+
/* @__PURE__ */ jsx(Badge, { variant: "outline", className: "text-xs", children: getTypeLabel(result, t) }),
|
|
136
137
|
result.category && /* @__PURE__ */ jsx(Badge, { variant: "outline", className: "text-xs", children: result.category }),
|
|
137
138
|
result.type === "entity" && /* @__PURE__ */ jsx(Badge, { variant: "outline", className: "text-xs text-primary", children: result.entityType })
|
|
138
139
|
] })
|
|
@@ -177,8 +178,8 @@ function SearchDropdown() {
|
|
|
177
178
|
setIsOpen(false);
|
|
178
179
|
setSelectedIndex(-1);
|
|
179
180
|
clearSearch();
|
|
180
|
-
setStatusMessage("
|
|
181
|
-
}, [clearSearch]);
|
|
181
|
+
setStatusMessage(t("search.closedAnnouncement"));
|
|
182
|
+
}, [clearSearch, t]);
|
|
182
183
|
useEffect(() => {
|
|
183
184
|
const handleKeyDown = (event) => {
|
|
184
185
|
if (!isOpen) return;
|
|
@@ -214,12 +215,12 @@ function SearchDropdown() {
|
|
|
214
215
|
setSelectedIndex(-1);
|
|
215
216
|
if (value.trim().length > 0) {
|
|
216
217
|
setIsOpen(true);
|
|
217
|
-
setStatusMessage(
|
|
218
|
+
setStatusMessage(t("search.searchingFor", { value }));
|
|
218
219
|
} else {
|
|
219
220
|
setIsOpen(false);
|
|
220
221
|
setStatusMessage("");
|
|
221
222
|
}
|
|
222
|
-
}, [setQuery]);
|
|
223
|
+
}, [setQuery, t]);
|
|
223
224
|
const showDropdown = isOpen && (hasResults || isSearching || !isEmpty && !hasResults);
|
|
224
225
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
225
226
|
/* @__PURE__ */ jsx(
|
|
@@ -304,15 +305,11 @@ function SearchDropdown() {
|
|
|
304
305
|
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground mt-1", children: t("search.tryDifferent") })
|
|
305
306
|
] }) }),
|
|
306
307
|
hasResults && /* @__PURE__ */ jsx("div", { className: "border-t border-border p-2", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between text-xs text-muted-foreground", children: [
|
|
307
|
-
/* @__PURE__ */
|
|
308
|
-
results.length,
|
|
309
|
-
" resultado",
|
|
310
|
-
results.length !== 1 ? "s" : ""
|
|
311
|
-
] }),
|
|
308
|
+
/* @__PURE__ */ jsx("span", { children: t("search.resultsCount", { count: results.length }) }),
|
|
312
309
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
313
|
-
/* @__PURE__ */ jsx("span", { children: "
|
|
314
|
-
/* @__PURE__ */ jsx("span", { children: "
|
|
315
|
-
/* @__PURE__ */ jsx("span", { children: "
|
|
310
|
+
/* @__PURE__ */ jsx("span", { children: t("search.keyboardNavigate") }),
|
|
311
|
+
/* @__PURE__ */ jsx("span", { children: t("search.keyboardSelect") }),
|
|
312
|
+
/* @__PURE__ */ jsx("span", { children: t("search.keyboardClose") })
|
|
316
313
|
] })
|
|
317
314
|
] }) })
|
|
318
315
|
]
|
|
@@ -43,7 +43,7 @@ function MobileBottomNav() {
|
|
|
43
43
|
{
|
|
44
44
|
className: "lg:hidden fixed bottom-0 left-0 right-0 z-40 bg-background border-t border-border safe-area-bottom",
|
|
45
45
|
role: "navigation",
|
|
46
|
-
"aria-label": "
|
|
46
|
+
"aria-label": t("common.a11y.mobileMainNavigation"),
|
|
47
47
|
"data-cy": sel("dashboard.mobile.bottomNav.container"),
|
|
48
48
|
children: /* @__PURE__ */ jsx("div", { className: "flex items-end justify-around px-2 pb-2 pt-1", children: navItems.map((item) => {
|
|
49
49
|
const Icon = item.icon;
|
|
@@ -1,2 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
interface MobileTopBarProps {
|
|
2
|
+
/**
|
|
3
|
+
* Se reenvía al `<Link>` del perfil. Sin valor, decide Next (prefetch automático al entrar en
|
|
4
|
+
* viewport). La barra se monta en toda página del dashboard en mobile, así que `false` ahorra
|
|
5
|
+
* una request RSC por carga en apps donde casi nadie navega al perfil.
|
|
6
|
+
*/
|
|
7
|
+
prefetch?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function MobileTopBar({ prefetch }?: MobileTopBarProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
2
11
|
//# sourceMappingURL=MobileTopBar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MobileTopBar.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/mobile/MobileTopBar.tsx"],"names":[],"mappings":"AAaA,wBAAgB,YAAY,
|
|
1
|
+
{"version":3,"file":"MobileTopBar.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/mobile/MobileTopBar.tsx"],"names":[],"mappings":"AAaA,UAAU,iBAAiB;IACzB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,GAAE,iBAAsB,2CA8FhE"}
|
|
@@ -8,7 +8,7 @@ import { NotificationsDropdown } from "../misc/NotificationsDropdown.js";
|
|
|
8
8
|
import { sel } from "../../../lib/test/index.js";
|
|
9
9
|
import { isTopbarFeatureEnabled } from "../../../lib/config/index.js";
|
|
10
10
|
import { useTranslations } from "next-intl";
|
|
11
|
-
function MobileTopBar() {
|
|
11
|
+
function MobileTopBar({ prefetch } = {}) {
|
|
12
12
|
const { user } = useAuth();
|
|
13
13
|
const t = useTranslations();
|
|
14
14
|
if (!user) return null;
|
|
@@ -43,15 +43,16 @@ function MobileTopBar() {
|
|
|
43
43
|
{
|
|
44
44
|
className: "lg:hidden fixed top-0 left-0 right-0 z-40 bg-background border-b border-border",
|
|
45
45
|
role: "banner",
|
|
46
|
-
"aria-label": "
|
|
46
|
+
"aria-label": t("common.a11y.mobileTopBar"),
|
|
47
47
|
"data-cy": sel("dashboard.mobile.topbar.container"),
|
|
48
48
|
children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 h-14", children: [
|
|
49
49
|
/* @__PURE__ */ jsxs(
|
|
50
50
|
Link,
|
|
51
51
|
{
|
|
52
52
|
href: "/dashboard/settings/profile",
|
|
53
|
+
prefetch,
|
|
53
54
|
className: "flex items-center gap-3 hover:opacity-80 transition-opacity",
|
|
54
|
-
"aria-label":
|
|
55
|
+
"aria-label": t("common.a11y.goToProfileOf", { name: user.firstName || user.email }),
|
|
55
56
|
"data-cy": sel("dashboard.mobile.topbar.userProfile"),
|
|
56
57
|
children: [
|
|
57
58
|
user.image ? /* @__PURE__ */ jsx(
|
|
@@ -7,8 +7,8 @@ import { useMemo } from "react";
|
|
|
7
7
|
import { cn } from "../../../lib/utils/index.js";
|
|
8
8
|
import { useTranslations } from "next-intl";
|
|
9
9
|
import { sel } from "../../../lib/test/index.js";
|
|
10
|
-
import { Home, Camera } from "lucide-react";
|
|
11
|
-
import
|
|
10
|
+
import { Home, Camera, Box, Circle, Folder } from "lucide-react";
|
|
11
|
+
import { resolveIcon } from "../../../lib/icons.js";
|
|
12
12
|
import { THEME_REGISTRY } from "@nextsparkjs/registries/theme-registry";
|
|
13
13
|
import { usePermission } from "../../../lib/permissions/hooks.js";
|
|
14
14
|
const activeTheme = process.env.NEXT_PUBLIC_ACTIVE_THEME || "default";
|
|
@@ -52,7 +52,7 @@ function NavItemWithPermission({
|
|
|
52
52
|
if (item.requiresPermission && !hasPermission) {
|
|
53
53
|
return null;
|
|
54
54
|
}
|
|
55
|
-
const ItemIcon =
|
|
55
|
+
const ItemIcon = resolveIcon(item.icon, Circle);
|
|
56
56
|
const isActive = pathname === item.href || pathname.startsWith(item.href + "/");
|
|
57
57
|
const normalizedItemKey = normalizeKey(item.labelKey);
|
|
58
58
|
const itemLabel = t(normalizedItemKey) || labelMappings[item.labelKey] || item.id;
|
|
@@ -90,7 +90,7 @@ function SectionWithPermission({
|
|
|
90
90
|
if (section.requiresPermission && !hasPermission) {
|
|
91
91
|
return null;
|
|
92
92
|
}
|
|
93
|
-
const SectionIcon =
|
|
93
|
+
const SectionIcon = resolveIcon(section.icon, Folder);
|
|
94
94
|
const normalizeKey = (key) => key.startsWith("common.") ? key.slice(7) : key;
|
|
95
95
|
const normalizedSectionKey = normalizeKey(section.labelKey);
|
|
96
96
|
const sectionLabel = t(normalizedSectionKey) || labelMappings[section.labelKey] || section.id;
|
|
@@ -143,7 +143,7 @@ function DynamicNavigation({
|
|
|
143
143
|
const entityItems = useMemo(
|
|
144
144
|
() => enabledEntities.map((entity) => {
|
|
145
145
|
var _a2;
|
|
146
|
-
const icon =
|
|
146
|
+
const icon = resolveIcon(entity.iconName, Box);
|
|
147
147
|
return {
|
|
148
148
|
name: ((_a2 = entity.names) == null ? void 0 : _a2.plural) || entity.slug,
|
|
149
149
|
href: `/dashboard/${entity.slug}`,
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
} from "../ui/table.js";
|
|
17
17
|
import { ArrowLeft, LayoutGrid, TestTube2, CheckCircle2, XCircle, Eye, Loader2 } from "lucide-react";
|
|
18
18
|
import { useTranslations } from "next-intl";
|
|
19
|
-
import { BLOCK_REGISTRY } from "@nextsparkjs/registries/block-registry";
|
|
19
|
+
import { BLOCK_REGISTRY } from "@nextsparkjs/registries/block-registry.client";
|
|
20
20
|
import { TAGS_REGISTRY } from "@nextsparkjs/registries/testing-registry";
|
|
21
21
|
import { getBlockComponent } from "../../lib/blocks/loader.js";
|
|
22
22
|
import { sel } from "../../lib/test/index.js";
|
|
@@ -8,7 +8,7 @@ import { Button } from "../ui/button.js";
|
|
|
8
8
|
import { Input } from "../ui/input.js";
|
|
9
9
|
import { Copy, Check, Search, TestTube2, CheckCircle2, XCircle, ArrowRight, LayoutGrid, Image as ImageIcon } from "lucide-react";
|
|
10
10
|
import { useTranslations } from "next-intl";
|
|
11
|
-
import { BLOCK_REGISTRY } from "@nextsparkjs/registries/block-registry";
|
|
11
|
+
import { BLOCK_REGISTRY } from "@nextsparkjs/registries/block-registry.client";
|
|
12
12
|
import { TAGS_REGISTRY } from "@nextsparkjs/registries/testing-registry";
|
|
13
13
|
import { sel } from "../../lib/test/index.js";
|
|
14
14
|
const CATEGORY_COLORS = {
|
|
@@ -317,7 +317,7 @@ function EntityChildManager({
|
|
|
317
317
|
isSubmitting && /* @__PURE__ */ jsxs(Alert, { children: [
|
|
318
318
|
/* @__PURE__ */ jsx(Loader2, { className: "h-4 w-4 animate-spin" }),
|
|
319
319
|
/* @__PURE__ */ jsxs(AlertDescription, { children: [
|
|
320
|
-
submissionMode === "create" ? "
|
|
320
|
+
submissionMode === "create" ? "Creating" : "Updating",
|
|
321
321
|
" ",
|
|
322
322
|
childEntityConfig.display.title.slice(0, -1).toLowerCase(),
|
|
323
323
|
"..."
|
|
@@ -560,9 +560,9 @@ function EntityChildManager({
|
|
|
560
560
|
/* @__PURE__ */ jsxs(DialogHeader, { children: [
|
|
561
561
|
/* @__PURE__ */ jsx(DialogTitle, { children: "Confirm Delete" }),
|
|
562
562
|
/* @__PURE__ */ jsxs(DialogDescription, { children: [
|
|
563
|
-
"
|
|
563
|
+
"Are you sure you want to delete this ",
|
|
564
564
|
childEntityConfig.display.title.slice(0, -1).toLowerCase(),
|
|
565
|
-
"?
|
|
565
|
+
"? This action cannot be undone."
|
|
566
566
|
] })
|
|
567
567
|
] }),
|
|
568
568
|
/* @__PURE__ */ jsxs(DialogFooter, { children: [
|
|
@@ -572,7 +572,7 @@ function EntityChildManager({
|
|
|
572
572
|
variant: "outline",
|
|
573
573
|
onClick: handleCancelDelete,
|
|
574
574
|
disabled: false,
|
|
575
|
-
children: "
|
|
575
|
+
children: "Cancel"
|
|
576
576
|
}
|
|
577
577
|
),
|
|
578
578
|
/* @__PURE__ */ jsx(
|
|
@@ -581,7 +581,7 @@ function EntityChildManager({
|
|
|
581
581
|
variant: "destructive",
|
|
582
582
|
onClick: handleConfirmedDelete,
|
|
583
583
|
disabled: false,
|
|
584
|
-
children: "
|
|
584
|
+
children: "Delete"
|
|
585
585
|
}
|
|
586
586
|
)
|
|
587
587
|
] })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityDetailPage.d.ts","sourceRoot":"","sources":["../../../src/components/entities/EntityDetailPage.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"EntityDetailPage.d.ts","sourceRoot":"","sources":["../../../src/components/entities/EntityDetailPage.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAK5D,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,YAAY,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,YAAY,EACZ,IAAI,EACJ,SAAS,EACT,KAAK,EACL,SAAS,EACV,EAAE,qBAAqB,2CAyKvB"}
|
|
@@ -15,8 +15,7 @@ import {
|
|
|
15
15
|
Copy
|
|
16
16
|
} from "lucide-react";
|
|
17
17
|
import { deleteEntityData } from "../../lib/api/entities.js";
|
|
18
|
-
import {
|
|
19
|
-
import { es } from "date-fns/locale";
|
|
18
|
+
import { useLocale } from "next-intl";
|
|
20
19
|
import { EntityPageHeader } from "./EntityPageHeader.js";
|
|
21
20
|
function EntityDetailPage({
|
|
22
21
|
entityConfig,
|
|
@@ -26,9 +25,11 @@ function EntityDetailPage({
|
|
|
26
25
|
className
|
|
27
26
|
}) {
|
|
28
27
|
const router = useRouter();
|
|
28
|
+
const locale = useLocale();
|
|
29
29
|
const [isDeleting, setIsDeleting] = useState(false);
|
|
30
|
+
const formatDateTime = (value) => new Date(value).toLocaleString(locale, { dateStyle: "medium", timeStyle: "short" });
|
|
30
31
|
const handleDelete = async () => {
|
|
31
|
-
if (!confirm(
|
|
32
|
+
if (!confirm(`Are you sure you want to delete this ${entityConfig.names.singular.toLowerCase()}?`)) {
|
|
32
33
|
return;
|
|
33
34
|
}
|
|
34
35
|
try {
|
|
@@ -37,7 +38,7 @@ function EntityDetailPage({
|
|
|
37
38
|
router.push(`/dashboard/${entityConfig.slug}`);
|
|
38
39
|
} catch (error2) {
|
|
39
40
|
console.error("Error deleting entity:", error2);
|
|
40
|
-
alert("Error
|
|
41
|
+
alert("Error deleting. Please try again.");
|
|
41
42
|
} finally {
|
|
42
43
|
setIsDeleting(false);
|
|
43
44
|
}
|
|
@@ -46,7 +47,7 @@ function EntityDetailPage({
|
|
|
46
47
|
navigator.clipboard.writeText(data.id);
|
|
47
48
|
};
|
|
48
49
|
if (isLoading) {
|
|
49
|
-
return /* @__PURE__ */ jsx("div", { className: "min-h-screen bg-gradient-to-b from-background to-muted/20 py-12 px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsx("div", { className: "max-w-7xl mx-auto space-y-6", children: /* @__PURE__ */ jsx(Alert, { children: /* @__PURE__ */ jsx(AlertDescription, { children: "
|
|
50
|
+
return /* @__PURE__ */ jsx("div", { className: "min-h-screen bg-gradient-to-b from-background to-muted/20 py-12 px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsx("div", { className: "max-w-7xl mx-auto space-y-6", children: /* @__PURE__ */ jsx(Alert, { children: /* @__PURE__ */ jsx(AlertDescription, { children: "Loading data..." }) }) }) });
|
|
50
51
|
}
|
|
51
52
|
if (error) {
|
|
52
53
|
return /* @__PURE__ */ jsx("div", { className: "min-h-screen bg-gradient-to-b from-background to-muted/20 py-12 px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsx("div", { className: "max-w-7xl mx-auto space-y-6", children: /* @__PURE__ */ jsx(Alert, { children: /* @__PURE__ */ jsx(AlertDescription, { children: error }) }) }) });
|
|
@@ -54,11 +55,11 @@ function EntityDetailPage({
|
|
|
54
55
|
const headerActions = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
55
56
|
/* @__PURE__ */ jsxs(Button, { variant: "outline", size: "sm", onClick: handleCopyId, children: [
|
|
56
57
|
/* @__PURE__ */ jsx(Copy, { className: "h-4 w-4 mr-2" }),
|
|
57
|
-
"
|
|
58
|
+
"Copy ID"
|
|
58
59
|
] }),
|
|
59
60
|
/* @__PURE__ */ jsx(Link, { href: `/dashboard/${entityConfig.slug}/${data.id}/edit`, children: /* @__PURE__ */ jsxs(Button, { variant: "outline", size: "sm", children: [
|
|
60
61
|
/* @__PURE__ */ jsx(Edit, { className: "h-4 w-4 mr-2" }),
|
|
61
|
-
"
|
|
62
|
+
"Edit"
|
|
62
63
|
] }) }),
|
|
63
64
|
/* @__PURE__ */ jsxs(
|
|
64
65
|
Button,
|
|
@@ -69,7 +70,7 @@ function EntityDetailPage({
|
|
|
69
70
|
disabled: isDeleting,
|
|
70
71
|
children: [
|
|
71
72
|
/* @__PURE__ */ jsx(Trash2, { className: "h-4 w-4 mr-2" }),
|
|
72
|
-
isDeleting ? "
|
|
73
|
+
isDeleting ? "Deleting..." : "Delete"
|
|
73
74
|
]
|
|
74
75
|
}
|
|
75
76
|
)
|
|
@@ -87,9 +88,9 @@ function EntityDetailPage({
|
|
|
87
88
|
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-3 gap-6", children: [
|
|
88
89
|
/* @__PURE__ */ jsx("div", { className: "lg:col-span-2 space-y-6", children: /* @__PURE__ */ jsxs(Card, { children: [
|
|
89
90
|
/* @__PURE__ */ jsxs(CardHeader, { children: [
|
|
90
|
-
/* @__PURE__ */ jsx(CardTitle, { children: "
|
|
91
|
+
/* @__PURE__ */ jsx(CardTitle, { children: "Details" }),
|
|
91
92
|
/* @__PURE__ */ jsxs(CardDescription, { children: [
|
|
92
|
-
"
|
|
93
|
+
"Main information for the ",
|
|
93
94
|
entityConfig.names.singular.toLowerCase()
|
|
94
95
|
] })
|
|
95
96
|
] }),
|
|
@@ -98,7 +99,7 @@ function EntityDetailPage({
|
|
|
98
99
|
if (value === null || value === void 0) return null;
|
|
99
100
|
return /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
100
101
|
/* @__PURE__ */ jsx("dt", { className: "text-sm font-medium text-muted-foreground", children: field.display.label }),
|
|
101
|
-
/* @__PURE__ */ jsx("dd", { className: "text-sm", children: field.type === "date" || field.type === "datetime" ? value ?
|
|
102
|
+
/* @__PURE__ */ jsx("dd", { className: "text-sm", children: field.type === "date" || field.type === "datetime" ? value ? formatDateTime(value) : "Not specified" : field.type === "boolean" ? /* @__PURE__ */ jsx(Badge, { variant: value ? "default" : "secondary", children: value ? "Yes" : "No" }) : field.type === "number" && field.name === "price" ? `$${value}` : String(value) || "Not specified" })
|
|
102
103
|
] }, field.name);
|
|
103
104
|
}) })
|
|
104
105
|
] }) }),
|
|
@@ -108,15 +109,15 @@ function EntityDetailPage({
|
|
|
108
109
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [
|
|
109
110
|
/* @__PURE__ */ jsx(Calendar, { className: "h-4 w-4" }),
|
|
110
111
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
111
|
-
/* @__PURE__ */ jsx("div", { className: "font-medium", children: "
|
|
112
|
-
/* @__PURE__ */ jsx("div", { children: data.createdAt && typeof data.createdAt === "string" ?
|
|
112
|
+
/* @__PURE__ */ jsx("div", { className: "font-medium", children: "Created" }),
|
|
113
|
+
/* @__PURE__ */ jsx("div", { children: data.createdAt && typeof data.createdAt === "string" ? formatDateTime(data.createdAt) : "Not available" })
|
|
113
114
|
] })
|
|
114
115
|
] }),
|
|
115
116
|
data.updatedAt && typeof data.updatedAt === "string" ? /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [
|
|
116
117
|
/* @__PURE__ */ jsx(Clock, { className: "h-4 w-4" }),
|
|
117
118
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
118
|
-
/* @__PURE__ */ jsx("div", { className: "font-medium", children: "
|
|
119
|
-
/* @__PURE__ */ jsx("div", { children:
|
|
119
|
+
/* @__PURE__ */ jsx("div", { className: "font-medium", children: "Last updated" }),
|
|
120
|
+
/* @__PURE__ */ jsx("div", { children: formatDateTime(data.updatedAt) })
|
|
120
121
|
] })
|
|
121
122
|
] }) : null
|
|
122
123
|
] })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityFieldRenderer.d.ts","sourceRoot":"","sources":["../../../src/components/entities/EntityFieldRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6CH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAK3D,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,WAAW,CAAA;IAClB,KAAK,EAAE,OAAO,CAAA;IACd,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IACnC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAA;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;CACF;
|
|
1
|
+
{"version":3,"file":"EntityFieldRenderer.d.ts","sourceRoot":"","sources":["../../../src/components/entities/EntityFieldRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6CH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAK3D,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,WAAW,CAAA;IAClB,KAAK,EAAE,OAAO,CAAA;IACd,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IACnC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAA;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;CACF;AAm1BD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,KAAK,EACL,QAAgB,EAChB,QAAQ,EACR,SAAS,EACT,MAAM,EACN,OAAO,GACR,EAAE,wBAAwB,2CAyC1B"}
|
|
@@ -48,7 +48,7 @@ function formatDisplayValue(value, field) {
|
|
|
48
48
|
case "number":
|
|
49
49
|
return typeof value === "number" ? value.toLocaleString() : String(value || "");
|
|
50
50
|
case "boolean":
|
|
51
|
-
return value ? "
|
|
51
|
+
return value ? "Yes" : "No";
|
|
52
52
|
case "date":
|
|
53
53
|
return value ? new Date(value).toLocaleDateString() : "";
|
|
54
54
|
case "datetime":
|
|
@@ -96,7 +96,7 @@ function formatDisplayValue(value, field) {
|
|
|
96
96
|
case "video":
|
|
97
97
|
case "audio":
|
|
98
98
|
if (Array.isArray(value)) {
|
|
99
|
-
return `${value.length}
|
|
99
|
+
return `${value.length} file${value.length !== 1 ? "s" : ""}`;
|
|
100
100
|
}
|
|
101
101
|
return String(value || "");
|
|
102
102
|
case "relation":
|
|
@@ -117,6 +117,9 @@ function formatDisplayValue(value, field) {
|
|
|
117
117
|
return String(value || "");
|
|
118
118
|
}
|
|
119
119
|
}
|
|
120
|
+
function optionTestId(fieldTestId, value) {
|
|
121
|
+
return fieldTestId ? `${fieldTestId}-option-${String(value)}` : void 0;
|
|
122
|
+
}
|
|
120
123
|
function renderFormField(field, value, onChange, error, disabled, required, testId, context) {
|
|
121
124
|
var _a, _b, _c, _d;
|
|
122
125
|
if (field.name === "language") {
|
|
@@ -237,6 +240,7 @@ function renderFormField(field, value, onChange, error, disabled, required, test
|
|
|
237
240
|
{
|
|
238
241
|
value: String(option.value),
|
|
239
242
|
disabled: option.disabled,
|
|
243
|
+
"data-cy": optionTestId(testId, option.value),
|
|
240
244
|
children: option.label
|
|
241
245
|
},
|
|
242
246
|
String(option.value)
|
|
@@ -267,7 +271,8 @@ function renderFormField(field, value, onChange, error, disabled, required, test
|
|
|
267
271
|
RadioGroupItem,
|
|
268
272
|
{
|
|
269
273
|
value: String(option.value),
|
|
270
|
-
disabled: option.disabled
|
|
274
|
+
disabled: option.disabled,
|
|
275
|
+
"data-cy": optionTestId(testId, option.value)
|
|
271
276
|
}
|
|
272
277
|
),
|
|
273
278
|
/* @__PURE__ */ jsx(Label, { className: "text-sm", children: option.label })
|
|
@@ -340,7 +345,7 @@ function renderFormField(field, value, onChange, error, disabled, required, test
|
|
|
340
345
|
}
|
|
341
346
|
),
|
|
342
347
|
/* @__PURE__ */ jsxs("div", { className: "text-xs text-muted-foreground text-center", children: [
|
|
343
|
-
"
|
|
348
|
+
"Value: ",
|
|
344
349
|
typeof value === "number" ? value : 0
|
|
345
350
|
] })
|
|
346
351
|
] });
|
|
@@ -497,7 +502,7 @@ function renderFormField(field, value, onChange, error, disabled, required, test
|
|
|
497
502
|
titleField,
|
|
498
503
|
multiple: isMultiple,
|
|
499
504
|
disabled: disabled || dependsOnParent && !parentValue,
|
|
500
|
-
placeholder: dependsOnParent && !parentValue ? `
|
|
505
|
+
placeholder: dependsOnParent && !parentValue ? `Select ${parentFieldName == null ? void 0 : parentFieldName.replace("Id", "").toLowerCase()} first` : field.display.placeholder || `Select ${((_c = field.display.label) == null ? void 0 : _c.toLowerCase()) || relationEntityType}...`,
|
|
501
506
|
parentId: parentIdForRelation,
|
|
502
507
|
userFiltered: relationConfig.userFiltered,
|
|
503
508
|
teamId: context == null ? void 0 : context.teamId,
|
|
@@ -557,7 +562,7 @@ function renderFormField(field, value, onChange, error, disabled, required, test
|
|
|
557
562
|
})),
|
|
558
563
|
multiple: propIsMultiple,
|
|
559
564
|
disabled: disabled || propDependsOnParent && !propParentValue,
|
|
560
|
-
placeholder: propDependsOnParent && !propParentValue ? `
|
|
565
|
+
placeholder: propDependsOnParent && !propParentValue ? `Select ${propParentFieldName == null ? void 0 : propParentFieldName.replace("Id", "").toLowerCase()} first` : field.display.placeholder || `Select ${(_d = field.display.label) == null ? void 0 : _d.toLowerCase()}...`,
|
|
561
566
|
parentId: propParentIdForRelation,
|
|
562
567
|
userFiltered: propRelationConfig.userFiltered,
|
|
563
568
|
teamId: context == null ? void 0 : context.teamId
|
|
@@ -604,7 +609,7 @@ function renderFormField(field, value, onChange, error, disabled, required, test
|
|
|
604
609
|
...baseProps,
|
|
605
610
|
value: String(value || ""),
|
|
606
611
|
onChange: (e) => onChange(e.target.value),
|
|
607
|
-
placeholder: field.display.placeholder || `
|
|
612
|
+
placeholder: field.display.placeholder || `Enter ${field.type}...`,
|
|
608
613
|
required,
|
|
609
614
|
className: field.type === "code" ? "min-h-[150px] font-mono text-sm" : "min-h-[150px]"
|
|
610
615
|
}
|
|
@@ -14,9 +14,9 @@ function EntityPageHeader({
|
|
|
14
14
|
const getTitle = () => {
|
|
15
15
|
switch (mode) {
|
|
16
16
|
case "create":
|
|
17
|
-
return `
|
|
17
|
+
return `Create ${entityConfig.names.singular}`;
|
|
18
18
|
case "edit":
|
|
19
|
-
return typeof (data == null ? void 0 : data.title) === "string" ? data.title : typeof (data == null ? void 0 : data.name) === "string" ? data.name : `
|
|
19
|
+
return typeof (data == null ? void 0 : data.title) === "string" ? data.title : typeof (data == null ? void 0 : data.name) === "string" ? data.name : `Edit ${entityConfig.names.singular}`;
|
|
20
20
|
case "view":
|
|
21
21
|
default:
|
|
22
22
|
return typeof (data == null ? void 0 : data.title) === "string" ? data.title : typeof (data == null ? void 0 : data.name) === "string" ? data.name : entityConfig.names.singular;
|
|
@@ -25,9 +25,9 @@ function EntityPageHeader({
|
|
|
25
25
|
const getSubtitle = () => {
|
|
26
26
|
switch (mode) {
|
|
27
27
|
case "create":
|
|
28
|
-
return `
|
|
28
|
+
return `New ${entityConfig.names.singular.toLowerCase()}`;
|
|
29
29
|
case "edit":
|
|
30
|
-
return `
|
|
30
|
+
return `Editing ${entityConfig.names.singular.toLowerCase()} \u2022 ID: ${typeof (data == null ? void 0 : data.id) === "string" ? data.id : "N/A"}`;
|
|
31
31
|
case "view":
|
|
32
32
|
default:
|
|
33
33
|
return `${entityConfig.names.singular} \u2022 ID: ${typeof (data == null ? void 0 : data.id) === "string" ? data.id : "N/A"}`;
|
|
@@ -36,7 +36,7 @@ function EntityPageHeader({
|
|
|
36
36
|
return /* @__PURE__ */ jsxs("div", { className: `space-y-6 ${className || ""}`, children: [
|
|
37
37
|
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Link, { href: `/dashboard/${entityConfig.slug}`, children: /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "sm", children: [
|
|
38
38
|
/* @__PURE__ */ jsx(ArrowLeft, { className: "h-4 w-4 mr-2" }),
|
|
39
|
-
"
|
|
39
|
+
"Back to ",
|
|
40
40
|
entityConfig.names.plural
|
|
41
41
|
] }) }) }),
|
|
42
42
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorBoundary.d.ts","sourceRoot":"","sources":["../../../src/components/entities/ErrorBoundary.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAMnD,UAAU,wBAAwB;IAChC,QAAQ,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,UAAU,wBAAwB;IAChC,QAAQ,EAAE,SAAS,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI,CAAA;IACtD,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CACtD,wBAAwB,EACxB,wBAAwB,CACzB;IACC,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAI;gBAEnB,KAAK,EAAE,wBAAwB;IAK3C,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAWhF,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS;IA2BpD,OAAO,CAAC,WAAW,CAqBlB;IAED,OAAO,CAAC,WAAW,CAWlB;IAED,OAAO,CAAC,WAAW,CAOlB;IAED,OAAO,CAAC,YAAY,CAInB;IAED,OAAO,CAAC,YAAY,CAInB;IAED,OAAO,CAAC,YAAY,CAcnB;IAED,OAAO,CAAC,eAAe,
|
|
1
|
+
{"version":3,"file":"ErrorBoundary.d.ts","sourceRoot":"","sources":["../../../src/components/entities/ErrorBoundary.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAMnD,UAAU,wBAAwB;IAChC,QAAQ,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,UAAU,wBAAwB;IAChC,QAAQ,EAAE,SAAS,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI,CAAA;IACtD,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CACtD,wBAAwB,EACxB,wBAAwB,CACzB;IACC,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAI;gBAEnB,KAAK,EAAE,wBAAwB;IAK3C,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAWhF,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS;IA2BpD,OAAO,CAAC,WAAW,CAqBlB;IAED,OAAO,CAAC,WAAW,CAWlB;IAED,OAAO,CAAC,WAAW,CAOlB;IAED,OAAO,CAAC,YAAY,CAInB;IAED,OAAO,CAAC,YAAY,CAInB;IAED,OAAO,CAAC,YAAY,CAcnB;IAED,OAAO,CAAC,eAAe,CA8BtB;IAED,MAAM;CA2HP;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,CAAC,EAAE,MAAM;yBACT,KAAK,aAAa,SAAS;EAU1E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,MAAM,EACtD,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EACjC,UAAU,CAAC,EAAE,MAAM;YAEc,CAAC;;EASnC"}
|