@nextsparkjs/core 0.1.0-beta.185 → 0.1.0-beta.187
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/app/guards/DeveloperGuard.d.ts.map +1 -1
- package/dist/components/app/guards/DeveloperGuard.js +8 -4
- package/dist/components/app/guards/SuperAdminGuard.d.ts.map +1 -1
- package/dist/components/app/guards/SuperAdminGuard.js +8 -4
- package/dist/components/app/layouts/PublicFooter.d.ts.map +1 -1
- package/dist/components/app/layouts/PublicFooter.js +2 -2
- package/dist/components/app/layouts/PublicNavbar.d.ts.map +1 -1
- package/dist/components/app/layouts/PublicNavbar.js +2 -2
- package/dist/components/app/misc/ThemeToggle.d.ts.map +1 -1
- package/dist/components/app/misc/ThemeToggle.js +4 -1
- package/dist/components/auth/DevKeyring.d.ts.map +1 -1
- package/dist/components/auth/DevKeyring.js +10 -2
- package/dist/components/auth/SessionCookieRefresher.d.ts +21 -0
- package/dist/components/auth/SessionCookieRefresher.d.ts.map +1 -0
- package/dist/components/auth/SessionCookieRefresher.js +11 -0
- package/dist/components/auth/forms/LoginForm.d.ts.map +1 -1
- package/dist/components/auth/forms/LoginForm.js +300 -6
- package/dist/components/auth/index.d.ts +1 -0
- package/dist/components/auth/index.d.ts.map +1 -1
- package/dist/components/auth/index.js +2 -0
- package/dist/components/billing/InvoicesTable.d.ts.map +1 -1
- package/dist/components/billing/InvoicesTable.js +4 -3
- package/dist/components/dashboard/block-editor/dynamic-form.d.ts.map +1 -1
- package/dist/components/dashboard/layouts/AuthGuard.d.ts.map +1 -1
- package/dist/components/dashboard/layouts/AuthGuard.js +2 -2
- package/dist/components/dashboard/layouts/DashboardAuthLayout.d.ts.map +1 -1
- package/dist/components/dashboard/layouts/DashboardAuthLayout.js +2 -2
- package/dist/components/dashboard/layouts/DashboardAuthSkeleton.d.ts +17 -0
- package/dist/components/dashboard/layouts/DashboardAuthSkeleton.d.ts.map +1 -0
- package/dist/components/dashboard/layouts/DashboardAuthSkeleton.js +52 -0
- package/dist/components/dashboard/layouts/Sidebar.d.ts.map +1 -1
- package/dist/components/dashboard/layouts/Sidebar.js +2 -3
- package/dist/components/dashboard/layouts/TopNavbar.js +2 -2
- package/dist/components/dashboard/layouts/index.d.ts +1 -0
- package/dist/components/dashboard/layouts/index.d.ts.map +1 -1
- package/dist/components/dashboard/layouts/index.js +2 -0
- package/dist/components/devtools/api-explorer/ApiExplorer.js +4 -4
- package/dist/components/entities/EntityFieldRenderer.d.ts.map +1 -1
- package/dist/components/entities/EntityFieldRenderer.js +3 -0
- package/dist/components/entities/EntityTable.d.ts.map +1 -1
- package/dist/components/entities/EntityTable.js +2 -1
- package/dist/components/entities/wrappers/EntityFormWrapper.d.ts.map +1 -1
- package/dist/components/entities/wrappers/EntityFormWrapper.js +7 -2
- package/dist/components/patterns/pages/PatternEditPage.d.ts +5 -1
- package/dist/components/patterns/pages/PatternEditPage.d.ts.map +1 -1
- package/dist/components/patterns/pages/PatternEditPage.js +16 -5
- package/dist/components/patterns/pages/PatternsCreatePage.d.ts +2 -1
- package/dist/components/patterns/pages/PatternsCreatePage.d.ts.map +1 -1
- package/dist/components/patterns/pages/PatternsCreatePage.js +17 -5
- package/dist/components/ui/combobox.d.ts +8 -1
- package/dist/components/ui/combobox.d.ts.map +1 -1
- package/dist/components/ui/combobox.js +37 -44
- package/dist/components/ui/country-select.d.ts +3 -1
- package/dist/components/ui/country-select.d.ts.map +1 -1
- package/dist/components/ui/country-select.js +3 -1
- package/dist/components/ui/currency-select.d.ts +3 -1
- package/dist/components/ui/currency-select.d.ts.map +1 -1
- package/dist/components/ui/currency-select.js +3 -1
- package/dist/components/ui/sheet.d.ts +5 -0
- package/dist/components/ui/sheet.d.ts.map +1 -1
- package/dist/components/ui/sheet.js +46 -26
- package/dist/components/ui/timezone-select.d.ts +3 -1
- package/dist/components/ui/timezone-select.d.ts.map +1 -1
- package/dist/components/ui/timezone-select.js +3 -1
- package/dist/contexts/TeamContext.d.ts +6 -0
- package/dist/contexts/TeamContext.d.ts.map +1 -1
- package/dist/contexts/TeamContext.js +8 -1
- package/dist/emails/otp-verification.d.ts.map +1 -1
- package/dist/emails/reset-password.d.ts.map +1 -1
- package/dist/emails/team-invitation.d.ts.map +1 -1
- package/dist/emails/team-invitation.js +3 -2
- package/dist/emails/verify-email.d.ts.map +1 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/useAuth.d.ts +29 -0
- package/dist/hooks/useAuth.d.ts.map +1 -1
- package/dist/hooks/useAuth.js +24 -0
- package/dist/hooks/useEnsureUserMetadata.d.ts +22 -0
- package/dist/hooks/useEnsureUserMetadata.d.ts.map +1 -1
- package/dist/hooks/useEnsureUserMetadata.js +18 -5
- package/dist/hooks/useSessionCookieRefresh.d.ts +35 -0
- package/dist/hooks/useSessionCookieRefresh.d.ts.map +1 -0
- package/dist/hooks/useSessionCookieRefresh.js +49 -0
- package/dist/lib/api/api-error.d.ts +3 -1
- package/dist/lib/api/api-error.d.ts.map +1 -1
- package/dist/lib/api/api-error.js +4 -2
- package/dist/lib/api/auth/dual-auth.d.ts +38 -3
- package/dist/lib/api/auth/dual-auth.d.ts.map +1 -1
- package/dist/lib/api/auth/dual-auth.js +42 -7
- package/dist/lib/api/auth/permissions.d.ts +7 -2
- package/dist/lib/api/auth/permissions.d.ts.map +1 -1
- package/dist/lib/api/auth/permissions.js +2 -2
- package/dist/lib/api/auth/scope-policy.d.ts +71 -0
- package/dist/lib/api/auth/scope-policy.d.ts.map +1 -0
- package/dist/lib/api/auth/scope-policy.js +53 -0
- package/dist/lib/api/auth.d.ts +15 -0
- package/dist/lib/api/auth.d.ts.map +1 -1
- package/dist/lib/api/auth.js +17 -4
- package/dist/lib/api/entities.js +2 -1
- package/dist/lib/api/entity/audit-log.d.ts +35 -0
- package/dist/lib/api/entity/audit-log.d.ts.map +1 -0
- package/dist/lib/api/entity/audit-log.js +35 -0
- package/dist/lib/api/entity/generic-handler.d.ts.map +1 -1
- package/dist/lib/api/entity/generic-handler.js +333 -138
- package/dist/lib/api/entity-handler.js +2 -2
- package/dist/lib/api/helpers.d.ts +29 -4
- package/dist/lib/api/helpers.d.ts.map +1 -1
- package/dist/lib/api/helpers.js +30 -6
- package/dist/lib/api/keys.d.ts +16 -0
- package/dist/lib/api/keys.d.ts.map +1 -1
- package/dist/lib/api/keys.js +19 -1
- package/dist/lib/api/routes/patterns-usages.d.ts.map +1 -1
- package/dist/lib/api/routes/patterns-usages.js +3 -11
- package/dist/lib/auth/auth-methods.d.ts +52 -0
- package/dist/lib/auth/auth-methods.d.ts.map +1 -0
- package/dist/lib/auth/auth-methods.js +63 -0
- package/dist/lib/auth/registration-guard-plugin.d.ts.map +1 -1
- package/dist/lib/auth/registration-helpers.d.ts +9 -0
- package/dist/lib/auth/registration-helpers.d.ts.map +1 -1
- package/dist/lib/auth/registration-helpers.js +8 -2
- package/dist/lib/auth/security-notifications/device-fingerprint.d.ts +52 -0
- package/dist/lib/auth/security-notifications/device-fingerprint.d.ts.map +1 -0
- package/dist/lib/auth/security-notifications/device-fingerprint.js +42 -0
- package/dist/lib/auth/security-notifications/dispatcher.d.ts +37 -0
- package/dist/lib/auth/security-notifications/dispatcher.d.ts.map +1 -0
- package/dist/lib/auth/security-notifications/dispatcher.js +157 -0
- package/dist/lib/auth/security-notifications/index.d.ts +20 -0
- package/dist/lib/auth/security-notifications/index.d.ts.map +1 -0
- package/dist/lib/auth/security-notifications/index.js +22 -0
- package/dist/lib/auth/security-notifications/registry.d.ts +36 -0
- package/dist/lib/auth/security-notifications/registry.d.ts.map +1 -0
- package/dist/lib/auth/security-notifications/registry.js +26 -0
- package/dist/lib/auth/security-notifications/templates/email-changed.d.ts +12 -0
- package/dist/lib/auth/security-notifications/templates/email-changed.d.ts.map +1 -0
- package/dist/lib/auth/security-notifications/templates/email-changed.js +43 -0
- package/dist/lib/auth/security-notifications/templates/new-device-login.d.ts +7 -0
- package/dist/lib/auth/security-notifications/templates/new-device-login.d.ts.map +1 -0
- package/dist/lib/auth/security-notifications/templates/new-device-login.js +46 -0
- package/dist/lib/auth/security-notifications/templates/password-changed.d.ts +7 -0
- package/dist/lib/auth/security-notifications/templates/password-changed.d.ts.map +1 -0
- package/dist/lib/auth/security-notifications/templates/password-changed.js +35 -0
- package/dist/lib/auth/security-notifications/templates/shared.d.ts +36 -0
- package/dist/lib/auth/security-notifications/templates/shared.d.ts.map +1 -0
- package/dist/lib/auth/security-notifications/templates/shared.js +68 -0
- package/dist/lib/auth/security-notifications/types.d.ts +74 -0
- package/dist/lib/auth/security-notifications/types.d.ts.map +1 -0
- package/dist/lib/auth/session-config.d.ts +37 -0
- package/dist/lib/auth/session-config.d.ts.map +1 -0
- package/dist/lib/auth/session-config.js +59 -0
- package/dist/lib/auth/session-refresh.d.ts +46 -0
- package/dist/lib/auth/session-refresh.d.ts.map +1 -0
- package/dist/lib/auth/session-refresh.js +11 -0
- package/dist/lib/auth-client.d.ts +1639 -0
- package/dist/lib/auth-client.d.ts.map +1 -0
- package/dist/lib/auth-client.js +13 -1
- package/dist/lib/auth.d.ts.map +1 -1
- package/dist/lib/auth.js +45 -11
- package/dist/lib/billing/gateways/factory.d.ts +8 -3
- package/dist/lib/billing/gateways/factory.d.ts.map +1 -1
- package/dist/lib/billing/gateways/factory.js +37 -23
- package/dist/lib/billing/stripe-webhook.d.ts.map +1 -1
- package/dist/lib/billing/stripe-webhook.js +2 -1
- package/dist/lib/config/app.config.d.ts.map +1 -1
- package/dist/lib/config/app.config.js +71 -0
- package/dist/lib/config/config-sync.d.ts +1 -4
- package/dist/lib/config/config-sync.d.ts.map +1 -1
- package/dist/lib/config/config-sync.js +6 -2
- package/dist/lib/config/types.d.ts +130 -0
- package/dist/lib/config/types.d.ts.map +1 -1
- package/dist/lib/email/templates.d.ts +3 -3
- package/dist/lib/email/templates.d.ts.map +1 -1
- package/dist/lib/entities/api-generator.js +5 -5
- package/dist/lib/entities/entity-hooks.d.ts +9 -1
- package/dist/lib/entities/entity-hooks.d.ts.map +1 -1
- package/dist/lib/entities/entity-hooks.js +77 -4
- package/dist/lib/entities/schema-generator.d.ts.map +1 -1
- package/dist/lib/entities/schema-generator.js +20 -4
- package/dist/lib/entities/serialization.d.ts +2 -2
- package/dist/lib/entities/serialization.d.ts.map +1 -1
- package/dist/lib/entities/serialization.js +3 -2
- package/dist/lib/entities/types.d.ts +20 -0
- package/dist/lib/entities/types.d.ts.map +1 -1
- package/dist/lib/locale.d.ts.map +1 -1
- package/dist/lib/locale.js +4 -1
- package/dist/lib/mcp/audit.d.ts +8 -4
- package/dist/lib/mcp/audit.d.ts.map +1 -1
- package/dist/lib/plugins/hook-system.d.ts +13 -0
- package/dist/lib/plugins/hook-system.d.ts.map +1 -1
- package/dist/lib/plugins/hook-system.js +32 -2
- package/dist/lib/scheduled-actions/handlers/index.d.ts +1 -0
- package/dist/lib/scheduled-actions/handlers/index.d.ts.map +1 -1
- package/dist/lib/scheduled-actions/handlers/index.js +3 -1
- package/dist/lib/scheduled-actions/handlers/security-notification.d.ts +26 -0
- package/dist/lib/scheduled-actions/handlers/security-notification.d.ts.map +1 -0
- package/dist/lib/scheduled-actions/handlers/security-notification.js +54 -0
- package/dist/lib/selectors/core-selectors.d.ts +12 -0
- package/dist/lib/selectors/core-selectors.d.ts.map +1 -1
- package/dist/lib/selectors/domains/auth.selectors.d.ts +12 -0
- package/dist/lib/selectors/domains/auth.selectors.d.ts.map +1 -1
- package/dist/lib/selectors/domains/auth.selectors.js +14 -1
- package/dist/lib/selectors/selectors.d.ts +24 -0
- package/dist/lib/selectors/selectors.d.ts.map +1 -1
- package/dist/lib/services/api-docs.service.d.ts +5 -1
- package/dist/lib/services/api-docs.service.d.ts.map +1 -1
- package/dist/lib/services/api-presets.service.d.ts +6 -1
- package/dist/lib/services/api-presets.service.d.ts.map +1 -1
- package/dist/lib/services/feature.service.d.ts +58 -4
- package/dist/lib/services/feature.service.d.ts.map +1 -1
- package/dist/lib/services/generic-entity.service.d.ts.map +1 -1
- package/dist/lib/services/generic-entity.service.js +16 -32
- package/dist/lib/services/membership.service.d.ts +10 -2
- package/dist/lib/services/membership.service.d.ts.map +1 -1
- package/dist/lib/services/membership.service.js +37 -16
- package/dist/lib/services/permission.service.d.ts +10 -4
- package/dist/lib/services/permission.service.d.ts.map +1 -1
- package/dist/lib/services/plugin.service.d.ts +1 -1
- package/dist/lib/services/plugin.service.d.ts.map +1 -1
- package/dist/lib/services/subscription.service.d.ts.map +1 -1
- package/dist/lib/services/subscription.service.js +2 -1
- package/dist/lib/services/team-member.service.d.ts +15 -3
- package/dist/lib/services/team-member.service.d.ts.map +1 -1
- package/dist/lib/services/team-member.service.js +27 -6
- package/dist/lib/services/team.service.d.ts.map +1 -1
- package/dist/lib/teams/permissions.d.ts +3 -1
- package/dist/lib/teams/permissions.d.ts.map +1 -1
- package/dist/lib/teams/permissions.js +6 -0
- package/dist/lib/teams/schema.d.ts.map +1 -1
- package/dist/lib/teams/schema.js +3 -0
- package/dist/lib/template-resolver.d.ts +3 -3
- package/dist/lib/theme/forced-theme.d.ts +34 -0
- package/dist/lib/theme/forced-theme.d.ts.map +1 -0
- package/dist/lib/theme/forced-theme.js +27 -0
- package/dist/lib/theme/get-default-theme-mode.d.ts +3 -0
- package/dist/lib/theme/get-default-theme-mode.d.ts.map +1 -1
- package/dist/lib/theme/get-default-theme-mode.js +5 -3
- package/dist/lib/utils/cors.d.ts +13 -0
- package/dist/lib/utils/cors.d.ts.map +1 -1
- package/dist/lib/utils/cors.js +20 -0
- package/dist/messages/de/auth.json +25 -2
- package/dist/messages/de/index.d.ts +83 -0
- package/dist/messages/de/index.d.ts.map +1 -1
- package/dist/messages/de/index.js +2 -0
- package/dist/messages/de/index.ts +2 -0
- package/dist/messages/de/navigation.json +3 -1
- package/dist/messages/en/auth.json +25 -2
- package/dist/messages/en/index.d.ts +83 -0
- package/dist/messages/en/index.d.ts.map +1 -1
- package/dist/messages/en/index.js +2 -0
- package/dist/messages/en/index.ts +2 -0
- package/dist/messages/en/navigation.json +3 -1
- package/dist/messages/es/auth.json +25 -2
- package/dist/messages/es/index.d.ts +83 -0
- package/dist/messages/es/index.d.ts.map +1 -1
- package/dist/messages/es/index.js +2 -0
- package/dist/messages/es/index.ts +2 -0
- package/dist/messages/es/navigation.json +3 -1
- package/dist/messages/fr/auth.json +25 -2
- package/dist/messages/fr/index.d.ts +83 -0
- package/dist/messages/fr/index.d.ts.map +1 -1
- package/dist/messages/fr/index.js +2 -0
- package/dist/messages/fr/index.ts +2 -0
- package/dist/messages/fr/navigation.json +3 -1
- package/dist/messages/it/auth.json +25 -2
- package/dist/messages/it/index.d.ts +83 -0
- package/dist/messages/it/index.d.ts.map +1 -1
- package/dist/messages/it/index.js +2 -0
- package/dist/messages/it/index.ts +2 -0
- package/dist/messages/it/navigation.json +3 -1
- package/dist/messages/pt/auth.json +25 -2
- package/dist/messages/pt/index.d.ts +83 -0
- package/dist/messages/pt/index.d.ts.map +1 -1
- package/dist/messages/pt/index.js +2 -0
- package/dist/messages/pt/index.ts +2 -0
- package/dist/messages/pt/navigation.json +3 -1
- package/dist/migrations/005_api_audit_log.sql +2 -1
- package/dist/migrations/025_api_audit_log_nullable_api_key.sql +12 -0
- package/dist/migrations/026_login_events.sql +91 -0
- package/dist/migrations/027_rls_bypass_developer_and_system_admin_team.sql +197 -0
- package/dist/nextspark-registries.d.ts +580 -236
- package/dist/providers/DashboardProviders.d.ts +12 -3
- package/dist/providers/DashboardProviders.d.ts.map +1 -1
- package/dist/providers/DashboardProviders.js +6 -2
- package/dist/providers/theme-provider.d.ts +19 -2
- package/dist/providers/theme-provider.d.ts.map +1 -1
- package/dist/providers/theme-provider.js +6 -2
- package/dist/templates/app/(auth)/signup/page.tsx +8 -0
- package/dist/templates/app/(public)/[...slug]/page.tsx +9 -14
- package/dist/templates/app/api/auth/[...all]/route.ts +23 -1
- package/dist/templates/app/api/health/route.ts +4 -2
- package/dist/templates/app/api/internal/user-metadata/route.ts +5 -3
- package/dist/templates/app/api/mcp/route.ts +4 -1
- package/dist/templates/app/api/superadmin/subscriptions/route.ts +2 -1
- package/dist/templates/app/api/superadmin/teams/[teamId]/route.ts +4 -3
- package/dist/templates/app/api/superadmin/users/[userId]/route.ts +10 -3
- package/dist/templates/app/api/v1/api-keys/[id]/route.ts +50 -71
- package/dist/templates/app/api/v1/api-keys/route.ts +21 -43
- package/dist/templates/app/api/v1/auth/signup-with-invite/route.ts +14 -14
- package/dist/templates/app/api/v1/billing/cancel/route.ts +7 -6
- package/dist/templates/app/api/v1/billing/change-plan/route.ts +5 -4
- package/dist/templates/app/api/v1/billing/check-action/route.ts +6 -4
- package/dist/templates/app/api/v1/billing/checkout/route.ts +7 -5
- package/dist/templates/app/api/v1/billing/plans/route.ts +8 -12
- package/dist/templates/app/api/v1/billing/portal/route.ts +7 -5
- package/dist/templates/app/api/v1/billing/webhooks/polar/route.ts +1 -1
- package/dist/templates/app/api/v1/devtools/blocks/route.ts +5 -4
- package/dist/templates/app/api/v1/devtools/features/route.ts +5 -4
- package/dist/templates/app/api/v1/devtools/flows/route.ts +5 -4
- package/dist/templates/app/api/v1/devtools/scheduled-actions/route.ts +9 -7
- package/dist/templates/app/api/v1/devtools/scheduled-actions/run/route.ts +5 -4
- package/dist/templates/app/api/v1/devtools/testing/route.ts +5 -4
- package/dist/templates/app/api/v1/media/[id]/route.ts +13 -25
- package/dist/templates/app/api/v1/media/[id]/tags/route.ts +17 -25
- package/dist/templates/app/api/v1/media/check-duplicates/route.ts +5 -7
- package/dist/templates/app/api/v1/media/route.ts +5 -9
- package/dist/templates/app/api/v1/media/upload/route.ts +9 -21
- package/dist/templates/app/api/v1/media-tags/route.ts +9 -13
- package/dist/templates/app/api/v1/patterns/[id]/usages/route.ts +11 -19
- package/dist/templates/app/api/v1/post-categories/[id]/route.ts +9 -7
- package/dist/templates/app/api/v1/post-categories/route.ts +5 -4
- package/dist/templates/app/api/v1/team-invitations/[token]/accept/route.ts +16 -18
- package/dist/templates/app/api/v1/team-invitations/[token]/decline/route.ts +15 -17
- package/dist/templates/app/api/v1/team-invitations/[token]/route.ts +8 -8
- package/dist/templates/app/api/v1/team-invitations/route.ts +9 -11
- package/dist/templates/app/api/v1/teams/[teamId]/invitations/route.ts +41 -32
- package/dist/templates/app/api/v1/teams/[teamId]/invoices/[invoiceNumber]/route.ts +15 -16
- package/dist/templates/app/api/v1/teams/[teamId]/invoices/route.ts +14 -15
- package/dist/templates/app/api/v1/teams/[teamId]/members/[memberId]/route.ts +32 -36
- package/dist/templates/app/api/v1/teams/[teamId]/members/route.ts +33 -33
- package/dist/templates/app/api/v1/teams/[teamId]/route.ts +35 -41
- package/dist/templates/app/api/v1/teams/[teamId]/subscription/route.ts +5 -3
- package/dist/templates/app/api/v1/teams/[teamId]/usage/[limitSlug]/route.ts +10 -6
- package/dist/templates/app/api/v1/teams/route.ts +33 -27
- package/dist/templates/app/api/v1/teams/switch/route.ts +11 -13
- package/dist/templates/app/api/v1/theme/[...path]/route.ts +23 -2
- package/dist/templates/app/api/v1/users/[id]/meta/[key]/route.ts +32 -77
- package/dist/templates/app/api/v1/users/[id]/route.ts +35 -68
- package/dist/templates/app/api/v1/users/route.ts +21 -25
- package/dist/templates/app/dashboard/layout.tsx +2 -6
- package/dist/templates/app/layout.ppr.tsx +15 -15
- package/dist/templates/app/layout.tsx +46 -20
- package/dist/templates/contents/themes/starter/config/app.config.ts +19 -0
- package/dist/templates/contents/themes/starter/config/theme.config.ts +6 -0
- package/dist/templates/contents/themes/starter/styles/globals.css +6 -2
- package/dist/templates/proxy.ts +46 -10
- package/dist/templates/tsconfig.json +4 -0
- package/dist/types/theme.d.ts +9 -0
- package/dist/types/theme.d.ts.map +1 -1
- package/migrations/005_api_audit_log.sql +2 -1
- package/migrations/025_api_audit_log_nullable_api_key.sql +12 -0
- package/migrations/026_login_events.sql +91 -0
- package/migrations/027_rls_bypass_developer_and_system_admin_team.sql +197 -0
- package/package.json +14 -11
- package/scripts/build/registry/__tests__/scope-registry.test.mjs +18 -0
- package/scripts/build/registry/generators/scope-registry.mjs +9 -2
- package/templates/app/(auth)/signup/page.tsx +8 -0
- package/templates/app/(public)/[...slug]/page.tsx +9 -14
- package/templates/app/api/auth/[...all]/route.ts +23 -1
- package/templates/app/api/health/route.ts +4 -2
- package/templates/app/api/internal/user-metadata/route.ts +5 -3
- package/templates/app/api/mcp/route.ts +4 -1
- package/templates/app/api/superadmin/subscriptions/route.ts +2 -1
- package/templates/app/api/superadmin/teams/[teamId]/route.ts +4 -3
- package/templates/app/api/superadmin/users/[userId]/route.ts +10 -3
- package/templates/app/api/v1/api-keys/[id]/route.ts +50 -71
- package/templates/app/api/v1/api-keys/route.ts +21 -43
- package/templates/app/api/v1/auth/signup-with-invite/route.ts +14 -14
- package/templates/app/api/v1/billing/cancel/route.ts +7 -6
- package/templates/app/api/v1/billing/change-plan/route.ts +5 -4
- package/templates/app/api/v1/billing/check-action/route.ts +6 -4
- package/templates/app/api/v1/billing/checkout/route.ts +7 -5
- package/templates/app/api/v1/billing/plans/route.ts +8 -12
- package/templates/app/api/v1/billing/portal/route.ts +7 -5
- package/templates/app/api/v1/billing/webhooks/polar/route.ts +1 -1
- package/templates/app/api/v1/devtools/blocks/route.ts +5 -4
- package/templates/app/api/v1/devtools/features/route.ts +5 -4
- package/templates/app/api/v1/devtools/flows/route.ts +5 -4
- package/templates/app/api/v1/devtools/scheduled-actions/route.ts +9 -7
- package/templates/app/api/v1/devtools/scheduled-actions/run/route.ts +5 -4
- package/templates/app/api/v1/devtools/testing/route.ts +5 -4
- package/templates/app/api/v1/media/[id]/route.ts +13 -25
- package/templates/app/api/v1/media/[id]/tags/route.ts +17 -25
- package/templates/app/api/v1/media/check-duplicates/route.ts +5 -7
- package/templates/app/api/v1/media/route.ts +5 -9
- package/templates/app/api/v1/media/upload/route.ts +9 -21
- package/templates/app/api/v1/media-tags/route.ts +9 -13
- package/templates/app/api/v1/patterns/[id]/usages/route.ts +11 -19
- package/templates/app/api/v1/post-categories/[id]/route.ts +9 -7
- package/templates/app/api/v1/post-categories/route.ts +5 -4
- package/templates/app/api/v1/team-invitations/[token]/accept/route.ts +16 -18
- package/templates/app/api/v1/team-invitations/[token]/decline/route.ts +15 -17
- package/templates/app/api/v1/team-invitations/[token]/route.ts +8 -8
- package/templates/app/api/v1/team-invitations/route.ts +9 -11
- package/templates/app/api/v1/teams/[teamId]/invitations/route.ts +41 -32
- package/templates/app/api/v1/teams/[teamId]/invoices/[invoiceNumber]/route.ts +15 -16
- package/templates/app/api/v1/teams/[teamId]/invoices/route.ts +14 -15
- package/templates/app/api/v1/teams/[teamId]/members/[memberId]/route.ts +32 -36
- package/templates/app/api/v1/teams/[teamId]/members/route.ts +33 -33
- package/templates/app/api/v1/teams/[teamId]/route.ts +35 -41
- package/templates/app/api/v1/teams/[teamId]/subscription/route.ts +5 -3
- package/templates/app/api/v1/teams/[teamId]/usage/[limitSlug]/route.ts +10 -6
- package/templates/app/api/v1/teams/route.ts +33 -27
- package/templates/app/api/v1/teams/switch/route.ts +11 -13
- package/templates/app/api/v1/theme/[...path]/route.ts +23 -2
- package/templates/app/api/v1/users/[id]/meta/[key]/route.ts +32 -77
- package/templates/app/api/v1/users/[id]/route.ts +35 -68
- package/templates/app/api/v1/users/route.ts +21 -25
- package/templates/app/dashboard/layout.tsx +2 -6
- package/templates/app/layout.ppr.tsx +15 -15
- package/templates/app/layout.tsx +46 -20
- package/templates/contents/themes/starter/config/app.config.ts +19 -0
- package/templates/contents/themes/starter/config/theme.config.ts +6 -0
- package/templates/contents/themes/starter/styles/globals.css +6 -2
- package/templates/proxy.ts +46 -10
- package/templates/tsconfig.json +4 -0
- package/tests/jest/__mocks__/@nextsparkjs/registries/permissions-registry.ts +23 -0
- package/tests/jest/__mocks__/next-server.js +24 -0
- package/dist/components/teams/TeamSwitchModal.d.js +0 -0
- package/dist/components/ui/accordion.d.js +0 -0
- package/dist/components/ui/avatar.d.js +0 -0
- package/dist/components/ui/badge.d.js +0 -0
- package/dist/components/ui/button.d.js +0 -0
- package/dist/components/ui/card.d.js +0 -0
- package/dist/components/ui/dialog.d.js +0 -0
- package/dist/components/ui/dropdown-menu.d.js +0 -0
- package/dist/components/ui/input.d.js +0 -0
- package/dist/components/ui/progress.d.js +0 -0
- package/dist/components/ui/scroll-area.d.js +0 -0
- package/dist/components/ui/select.d.js +0 -0
- package/dist/components/ui/separator.d.js +0 -0
- package/dist/components/ui/table.d.js +0 -0
- package/dist/components/ui/textarea.d.js +0 -0
- package/dist/contexts/TeamContext.d.js +0 -0
- package/dist/hooks/useAuth.d.js +0 -0
- package/dist/hooks/useLastAuthMethod.d.js +0 -0
- package/dist/hooks/useOrigin.d.js +0 -0
- package/dist/lib/api/auth/dual-auth.d.js +0 -0
- package/dist/lib/api/auth.d.js +0 -0
- package/dist/lib/api/cache.d.js +0 -0
- package/dist/lib/api/keys.d.js +0 -0
- package/dist/lib/auth-client.d.js +0 -0
- package/dist/lib/auth-context.d.js +0 -0
- package/dist/lib/auth.d.js +0 -0
- package/dist/lib/billing/config-types.d.js +0 -0
- package/dist/lib/billing/enforcement.d.js +0 -0
- package/dist/lib/billing/helpers.d.js +0 -0
- package/dist/lib/billing/jobs.d.js +0 -0
- package/dist/lib/billing/types.d.js +0 -0
- package/dist/lib/blocks/loader.d.js +0 -0
- package/dist/lib/config/app.config.d.js +0 -0
- package/dist/lib/config/config-loader.d.js +0 -0
- package/dist/lib/config/config-sync.d.js +0 -0
- package/dist/lib/config/config-types.d.js +0 -0
- package/dist/lib/config/config-utils.d.js +0 -0
- package/dist/lib/config/dashboard-types.d.js +0 -0
- package/dist/lib/config/dashboard.config.d.js +0 -0
- package/dist/lib/config/icon-map.d.js +0 -0
- package/dist/lib/config/index.d.js +0 -7
- package/dist/lib/config/nextspark-types.d.js +0 -0
- package/dist/lib/config/roles-merge.d.js +0 -0
- package/dist/lib/config/types.d.js +0 -0
- package/dist/lib/db.d.js +0 -0
- package/dist/lib/email/factory.d.js +0 -0
- package/dist/lib/email/index.d.js +0 -3
- package/dist/lib/email/providers/console.d.js +0 -0
- package/dist/lib/email/providers/resend.d.js +0 -0
- package/dist/lib/email/templates.d.js +0 -0
- package/dist/lib/email/types.d.js +0 -0
- package/dist/lib/entities/types.d.js +0 -0
- package/dist/lib/permissions/system.d.js +0 -0
- package/dist/lib/permissions/types.d.js +0 -0
- package/dist/lib/plugins/hook-system.d.js +0 -0
- package/dist/lib/scheduled-actions/cleanup.d.js +0 -0
- package/dist/lib/scheduled-actions/index.d.js +0 -19
- package/dist/lib/scheduled-actions/initializer.d.js +0 -1
- package/dist/lib/scheduled-actions/processor.d.js +0 -0
- package/dist/lib/scheduled-actions/registry.d.js +0 -0
- package/dist/lib/scheduled-actions/scheduler.d.js +0 -0
- package/dist/lib/scheduled-actions/types.d.js +0 -0
- package/dist/lib/services/api-routes.service.d.js +0 -0
- package/dist/lib/services/entity-type.service.d.js +0 -0
- package/dist/lib/services/index.d.js +0 -40
- package/dist/lib/services/invoice.service.d.js +0 -0
- package/dist/lib/services/membership.service.d.js +0 -0
- package/dist/lib/services/meta.service.d.js +0 -0
- package/dist/lib/services/middleware.service.d.js +0 -0
- package/dist/lib/services/namespace.service.d.js +0 -0
- package/dist/lib/services/permission.service.d.js +0 -0
- package/dist/lib/services/plan.service.d.js +0 -0
- package/dist/lib/services/plugin.service.d.js +0 -0
- package/dist/lib/services/route-handler.service.d.js +0 -0
- package/dist/lib/services/scope.service.d.js +0 -0
- package/dist/lib/services/subscription.service.d.js +0 -0
- package/dist/lib/services/team-member.service.d.js +0 -0
- package/dist/lib/services/team.service.d.js +0 -0
- package/dist/lib/services/theme.service.d.js +0 -0
- package/dist/lib/services/usage.service.d.js +0 -0
- package/dist/lib/services/user-flags.service.d.js +0 -0
- package/dist/lib/services/user.service.d.js +0 -0
- package/dist/lib/teams/helpers.d.js +0 -0
- package/dist/lib/teams/permissions.d.js +0 -0
- package/dist/lib/teams/types.d.js +0 -0
- package/dist/lib/utils/config-merge.d.js +0 -0
- package/dist/lib/utils/file-logger.d.js +0 -0
- package/dist/lib/utils.d.js +0 -0
- package/dist/styles/classes.json +0 -1093
- package/dist/styles/ui.css +0 -2
- package/dist/types/auth.d.js +0 -0
- package/dist/types/blocks.d.js +0 -0
- package/dist/types/meta.types.d.js +0 -0
- package/dist/types/plugin.d.js +0 -0
- package/dist/types/testing.types.d.js +0 -0
- package/dist/types/theme.d.js +0 -0
- package/dist/types/user.types.d.js +0 -0
- package/scripts/build/build-ui-css.mjs +0 -351
- /package/dist/{components/app/layouts/PublicFooter.d.js → lib/auth/security-notifications/types.js} +0 -0
- /package/dist/{components/app/layouts/PublicNavbar.d.js → nextspark-registries.d.js} +0 -0
- /package/dist/{components/app/misc/ThemeToggle.d.js → types/use-intl-react-shim.d.js} +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import Link from "next/link";
|
|
4
4
|
import { ExternalLink } from "lucide-react";
|
|
5
|
-
import { useTranslations } from "next-intl";
|
|
5
|
+
import { useTranslations, useLocale } from "next-intl";
|
|
6
6
|
import {
|
|
7
7
|
Table,
|
|
8
8
|
TableBody,
|
|
@@ -23,18 +23,19 @@ function InvoicesTable({
|
|
|
23
23
|
onPageChange
|
|
24
24
|
}) {
|
|
25
25
|
const t = useTranslations("settings.billing.invoices");
|
|
26
|
+
const locale = useLocale();
|
|
26
27
|
const currentPage = Math.floor(offset / limit) + 1;
|
|
27
28
|
const totalPages = Math.ceil(total / limit);
|
|
28
29
|
const formatDate = (dateString) => {
|
|
29
30
|
const date = new Date(dateString);
|
|
30
|
-
return new Intl.DateTimeFormat(
|
|
31
|
+
return new Intl.DateTimeFormat(locale, {
|
|
31
32
|
year: "numeric",
|
|
32
33
|
month: "short",
|
|
33
34
|
day: "numeric"
|
|
34
35
|
}).format(date);
|
|
35
36
|
};
|
|
36
37
|
const formatCurrency = (amount, currency) => {
|
|
37
|
-
return new Intl.NumberFormat(
|
|
38
|
+
return new Intl.NumberFormat(locale, {
|
|
38
39
|
style: "currency",
|
|
39
40
|
currency
|
|
40
41
|
}).format(amount);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-form.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/block-editor/dynamic-form.tsx"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,eAAe,EAAY,MAAM,uBAAuB,CAAA;AAItE,UAAU,gBAAgB;IACxB,gBAAgB,EAAE,eAAe,EAAE,CAAA;IACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;CACpD;
|
|
1
|
+
{"version":3,"file":"dynamic-form.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/block-editor/dynamic-form.tsx"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,eAAe,EAAY,MAAM,uBAAuB,CAAA;AAItE,UAAU,gBAAgB;IACxB,gBAAgB,EAAE,eAAe,EAAE,CAAA;IACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;CACpD;AA+RD;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,gBAAgB,2CAodnF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthGuard.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/layouts/AuthGuard.tsx"],"names":[],"mappings":"AASA,UAAU,cAAc;IACtB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AAOD,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"AuthGuard.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/layouts/AuthGuard.tsx"],"names":[],"mappings":"AASA,UAAU,cAAc;IACtB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AAOD,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE,cAAc,2CA0BrD"}
|
|
@@ -3,7 +3,7 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import { useAuth } from "../../../hooks/useAuth.js";
|
|
4
4
|
import { useRouter } from "next/navigation";
|
|
5
5
|
import { useEffect } from "react";
|
|
6
|
-
import {
|
|
6
|
+
import { DashboardAuthSkeleton } from "./DashboardAuthSkeleton.js";
|
|
7
7
|
import { useEnsureUserMetadata } from "../../../hooks/useEnsureUserMetadata.js";
|
|
8
8
|
import { useAuthMethodDetector } from "../../../hooks/useAuthMethodDetector.js";
|
|
9
9
|
function EnsureUserMetadata() {
|
|
@@ -20,7 +20,7 @@ function AuthGuard({ children }) {
|
|
|
20
20
|
}
|
|
21
21
|
}, [user, isLoading, router]);
|
|
22
22
|
if (isLoading) {
|
|
23
|
-
return /* @__PURE__ */ jsx(
|
|
23
|
+
return /* @__PURE__ */ jsx(DashboardAuthSkeleton, {});
|
|
24
24
|
}
|
|
25
25
|
if (!user) {
|
|
26
26
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardAuthLayout.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/layouts/DashboardAuthLayout.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DashboardAuthLayout.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/layouts/DashboardAuthLayout.tsx"],"names":[],"mappings":"AAuEA;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACT,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B,2CAEA"}
|
|
@@ -3,7 +3,7 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import { useAuth } from "../../../hooks/useAuth.js";
|
|
4
4
|
import { useRouter } from "next/navigation";
|
|
5
5
|
import { useEffect, Suspense } from "react";
|
|
6
|
-
import {
|
|
6
|
+
import { DashboardAuthSkeleton } from "./DashboardAuthSkeleton.js";
|
|
7
7
|
import { DashboardTranslationPreloader } from "../../../lib/i18n/DashboardTranslationPreloader.js";
|
|
8
8
|
import { TranslationDebugger } from "../../../utils/dev/TranslationDebugger.js";
|
|
9
9
|
import { useEnsureUserMetadata } from "../../../hooks/useEnsureUserMetadata.js";
|
|
@@ -22,7 +22,7 @@ function DashboardLayoutContent({ children }) {
|
|
|
22
22
|
}
|
|
23
23
|
}, [user, isLoading, router]);
|
|
24
24
|
if (isLoading) {
|
|
25
|
-
return /* @__PURE__ */ jsx(
|
|
25
|
+
return /* @__PURE__ */ jsx(DashboardAuthSkeleton, {});
|
|
26
26
|
}
|
|
27
27
|
if (!user) {
|
|
28
28
|
return null;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structural skeleton shown while the dashboard auth gate resolves the session.
|
|
3
|
+
*
|
|
4
|
+
* Replaces the bare centered spinner on a blank screen (see #91): a sidebar
|
|
5
|
+
* rail, a topbar strip and a content placeholder give users the shape of what
|
|
6
|
+
* is coming instead of an empty page. Built only from the existing Skeleton
|
|
7
|
+
* primitives (bg-muted + reduced pulse), so it inherits the active theme and
|
|
8
|
+
* stays deliberately restrained — this is seen many times a day.
|
|
9
|
+
*
|
|
10
|
+
* The sidebar rail collapses below the `md:` breakpoint, matching the real
|
|
11
|
+
* dashboard sidebar, so mobile never shows a phantom sidebar block.
|
|
12
|
+
*
|
|
13
|
+
* Shared by AuthGuard, DashboardAuthLayout and the generated
|
|
14
|
+
* app/dashboard/layout.tsx so the public API and the template cannot drift.
|
|
15
|
+
*/
|
|
16
|
+
export declare function DashboardAuthSkeleton(): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
//# sourceMappingURL=DashboardAuthSkeleton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardAuthSkeleton.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/layouts/DashboardAuthSkeleton.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,4CA2CpC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Skeleton, SkeletonContainer } from "../../ui/skeleton.js";
|
|
4
|
+
function DashboardAuthSkeleton() {
|
|
5
|
+
return /* @__PURE__ */ jsxs(
|
|
6
|
+
"div",
|
|
7
|
+
{
|
|
8
|
+
className: "min-h-screen flex bg-background",
|
|
9
|
+
"data-cy": "dashboard-loading-skeleton",
|
|
10
|
+
role: "status",
|
|
11
|
+
"aria-busy": "true",
|
|
12
|
+
"aria-live": "polite",
|
|
13
|
+
children: [
|
|
14
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Loading" }),
|
|
15
|
+
/* @__PURE__ */ jsxs(
|
|
16
|
+
"div",
|
|
17
|
+
{
|
|
18
|
+
className: "hidden md:flex md:w-64 md:flex-col md:border-r md:border-border md:p-4 md:gap-3",
|
|
19
|
+
"aria-hidden": "true",
|
|
20
|
+
children: [
|
|
21
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-32" }),
|
|
22
|
+
/* @__PURE__ */ jsxs(SkeletonContainer, { className: "mt-4 flex flex-col gap-2", children: [
|
|
23
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-full" }),
|
|
24
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-full" }),
|
|
25
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-full" }),
|
|
26
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-full" }),
|
|
27
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-full" })
|
|
28
|
+
] })
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
),
|
|
32
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-1 flex-col", "aria-hidden": "true", children: [
|
|
33
|
+
/* @__PURE__ */ jsxs("div", { className: "flex h-14 items-center gap-3 border-b border-border px-4", children: [
|
|
34
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-8 rounded-full" }),
|
|
35
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-40" })
|
|
36
|
+
] }),
|
|
37
|
+
/* @__PURE__ */ jsxs("div", { className: "flex-1 p-4 md:p-6", children: [
|
|
38
|
+
/* @__PURE__ */ jsxs(SkeletonContainer, { className: "grid grid-cols-1 gap-4 md:grid-cols-3", children: [
|
|
39
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-24 w-full rounded-xl" }),
|
|
40
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-24 w-full rounded-xl" }),
|
|
41
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-24 w-full rounded-xl" })
|
|
42
|
+
] }),
|
|
43
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "mt-4 h-64 w-full rounded-xl" })
|
|
44
|
+
] })
|
|
45
|
+
] })
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
export {
|
|
51
|
+
DashboardAuthSkeleton
|
|
52
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/layouts/Sidebar.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/layouts/Sidebar.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAA;AAGnF,UAAU,YAAY;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,wBAAwB,EAAE,CAAA;CACrC;AAED,wBAAgB,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,YAAY,2CAsG5D"}
|
|
@@ -2,16 +2,15 @@
|
|
|
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";
|
|
6
5
|
import { cn } from "../../../lib/utils/index.js";
|
|
7
6
|
import { useSidebar } from "../../../contexts/sidebar-context.js";
|
|
8
7
|
import { sel } from "../../../lib/test/index.js";
|
|
9
8
|
import { DynamicNavigation } from "../navigation/DynamicNavigation.js";
|
|
10
9
|
import { TeamSwitcherCompact } from "../../teams/TeamSwitcherCompact.js";
|
|
10
|
+
import { APP_NAME } from "../../../lib/config/index.js";
|
|
11
11
|
function Sidebar({ className, entities }) {
|
|
12
12
|
const { isCollapsed } = useSidebar();
|
|
13
|
-
const
|
|
14
|
-
const appName = t("appName");
|
|
13
|
+
const appName = APP_NAME;
|
|
15
14
|
const [statusMessage, setStatusMessage] = useState("");
|
|
16
15
|
useEffect(() => {
|
|
17
16
|
if (isCollapsed) {
|
|
@@ -26,7 +26,7 @@ import { useTranslations } from "next-intl";
|
|
|
26
26
|
import { useIsSuperAdmin } from "../../app/guards/SuperAdminGuard.js";
|
|
27
27
|
import { useIsDeveloper } from "../../app/guards/DeveloperGuard.js";
|
|
28
28
|
import { DynamicNavigation } from "../navigation/DynamicNavigation.js";
|
|
29
|
-
import { isTopbarFeatureEnabled, getTopbarFeatureConfig, TOPBAR_CONFIG } from "../../../lib/config/index.js";
|
|
29
|
+
import { isTopbarFeatureEnabled, getTopbarFeatureConfig, TOPBAR_CONFIG, APP_NAME } from "../../../lib/config/index.js";
|
|
30
30
|
function TopNavbar({ entities, className }) {
|
|
31
31
|
var _a, _b, _c;
|
|
32
32
|
const { user, signOut, isLoading } = useAuth();
|
|
@@ -145,7 +145,7 @@ function TopNavbar({ entities, className }) {
|
|
|
145
145
|
className: "text-xl font-bold text-foreground lg:hidden",
|
|
146
146
|
"aria-label": "Ir a la p\xE1gina principal",
|
|
147
147
|
"data-cy": sel("dashboard.topnav.logo"),
|
|
148
|
-
children:
|
|
148
|
+
children: APP_NAME
|
|
149
149
|
}
|
|
150
150
|
),
|
|
151
151
|
user && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { AuthGuard } from './AuthGuard';
|
|
2
2
|
export { DashboardAuthLayout } from './DashboardAuthLayout';
|
|
3
|
+
export { DashboardAuthSkeleton } from './DashboardAuthSkeleton';
|
|
3
4
|
export { DashboardShell } from './DashboardShell';
|
|
4
5
|
export { Sidebar } from './Sidebar';
|
|
5
6
|
export { TopNavbar } from './TopNavbar';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/layouts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/layouts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { AuthGuard } from "./AuthGuard.js";
|
|
2
2
|
import { DashboardAuthLayout } from "./DashboardAuthLayout.js";
|
|
3
|
+
import { DashboardAuthSkeleton } from "./DashboardAuthSkeleton.js";
|
|
3
4
|
import { DashboardShell } from "./DashboardShell.js";
|
|
4
5
|
import { Sidebar } from "./Sidebar.js";
|
|
5
6
|
import { TopNavbar } from "./TopNavbar.js";
|
|
6
7
|
export {
|
|
7
8
|
AuthGuard,
|
|
8
9
|
DashboardAuthLayout,
|
|
10
|
+
DashboardAuthSkeleton,
|
|
9
11
|
DashboardShell,
|
|
10
12
|
Sidebar,
|
|
11
13
|
TopNavbar
|
|
@@ -77,12 +77,12 @@ function ApiExplorer({ routes, initialEndpoint }) {
|
|
|
77
77
|
() => /* @__PURE__ */ new Set()
|
|
78
78
|
);
|
|
79
79
|
const endpointPresets = useMemo(() => {
|
|
80
|
-
if (!selectedEndpoint) return
|
|
81
|
-
return ApiPresetsService.getByEndpoint(selectedEndpoint.path)
|
|
80
|
+
if (!selectedEndpoint) return void 0;
|
|
81
|
+
return ApiPresetsService.getByEndpoint(selectedEndpoint.path);
|
|
82
82
|
}, [selectedEndpoint == null ? void 0 : selectedEndpoint.path]);
|
|
83
83
|
const endpointDoc = useMemo(() => {
|
|
84
|
-
if (!selectedEndpoint) return
|
|
85
|
-
return ApiDocsService.getByEndpoint(selectedEndpoint.path)
|
|
84
|
+
if (!selectedEndpoint) return void 0;
|
|
85
|
+
return ApiDocsService.getByEndpoint(selectedEndpoint.path);
|
|
86
86
|
}, [selectedEndpoint == null ? void 0 : selectedEndpoint.path]);
|
|
87
87
|
const hasInitialized = useRef(false);
|
|
88
88
|
const { status, response, error, execute, cancel, reset } = useApiRequest();
|
|
@@ -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;AAm0BD;;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"}
|
|
@@ -361,6 +361,7 @@ function renderFormField(field, value, onChange, error, disabled, required, test
|
|
|
361
361
|
return /* @__PURE__ */ jsx(
|
|
362
362
|
TimezoneSelect,
|
|
363
363
|
{
|
|
364
|
+
id: baseProps.id,
|
|
364
365
|
value,
|
|
365
366
|
onChange,
|
|
366
367
|
placeholder: field.display.placeholder,
|
|
@@ -371,6 +372,7 @@ function renderFormField(field, value, onChange, error, disabled, required, test
|
|
|
371
372
|
return /* @__PURE__ */ jsx(
|
|
372
373
|
CurrencySelect,
|
|
373
374
|
{
|
|
375
|
+
id: baseProps.id,
|
|
374
376
|
value,
|
|
375
377
|
onChange,
|
|
376
378
|
placeholder: field.display.placeholder,
|
|
@@ -381,6 +383,7 @@ function renderFormField(field, value, onChange, error, disabled, required, test
|
|
|
381
383
|
return /* @__PURE__ */ jsx(
|
|
382
384
|
CountrySelect,
|
|
383
385
|
{
|
|
386
|
+
id: baseProps.id,
|
|
384
387
|
value,
|
|
385
388
|
onChange,
|
|
386
389
|
placeholder: field.display.placeholder,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityTable.d.ts","sourceRoot":"","sources":["../../../src/components/entities/EntityTable.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AA+DH,OAAO,KAAK,EACV,gBAAgB,EAMjB,MAAM,sBAAsB,CAAA;AAE7B;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,EACrE,YAAY,EACZ,IAAI,EACJ,OAAO,EAAE,aAAa,EACtB,UAAkB,EAClB,WAAW,EAAE,qBAAqB,EAClC,iBAAiB,EACjB,UAAU,EACV,QAAQ,EACR,YAAY,EAAE,kBAAkB,EAChC,eAAe,EAAE,qBAAqB,EACtC,iBAAwB,EACxB,UAAU,EACV,WAAW,EACX,MAAM,EACN,WAAgB,EAChB,QAAQ,EACR,YAAmB,EACnB,WAAW,EACX,UAAU,EACV,OAAe,EACf,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,SAAS,EACT,MAAM,EACN,aAAa,EACb,UAAiB,GAClB,EAAE,gBAAgB,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"EntityTable.d.ts","sourceRoot":"","sources":["../../../src/components/entities/EntityTable.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AA+DH,OAAO,KAAK,EACV,gBAAgB,EAMjB,MAAM,sBAAsB,CAAA;AAE7B;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,EACrE,YAAY,EACZ,IAAI,EACJ,OAAO,EAAE,aAAa,EACtB,UAAkB,EAClB,WAAW,EAAE,qBAAqB,EAClC,iBAAiB,EACjB,UAAU,EACV,QAAQ,EACR,YAAY,EAAE,kBAAkB,EAChC,eAAe,EAAE,qBAAqB,EACtC,iBAAwB,EACxB,UAAU,EACV,WAAW,EACX,MAAM,EACN,WAAgB,EAChB,QAAQ,EACR,YAAmB,EACnB,WAAW,EACX,UAAU,EACV,OAAe,EACf,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,SAAS,EACT,MAAM,EACN,aAAa,EACb,UAAiB,GAClB,EAAE,gBAAgB,CAAC,CAAC,CAAC,2CAwzBrB"}
|
|
@@ -433,7 +433,8 @@ function EntityTable({
|
|
|
433
433
|
}
|
|
434
434
|
),
|
|
435
435
|
displayData.length === 0 ? /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsxs(CardContent, { className: "flex flex-col items-center justify-center py-12", children: [
|
|
436
|
-
entityConfig.icon && typeof entityConfig.icon === "function" &&
|
|
436
|
+
entityConfig.icon && typeof entityConfig.icon === "function" && // @ts-expect-error — pre-existing type error, tracked in https://github.com/NextSpark-js/nextspark/issues/131
|
|
437
|
+
entityConfig.icon({
|
|
437
438
|
className: "h-16 w-16 text-muted-foreground/50 mb-4"
|
|
438
439
|
}),
|
|
439
440
|
/* @__PURE__ */ jsxs("h3", { className: "text-lg font-medium mb-2", children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityFormWrapper.d.ts","sourceRoot":"","sources":["../../../../src/components/entities/wrappers/EntityFormWrapper.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAA2C,MAAM,OAAO,CAAA;AAU/D,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAA;IACvB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAChC;AAED,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,EACV,IAAI,EACJ,EAAE,EACF,WAAW,EAAE,gBAAgB,EAC7B,SAAS,EACT,OAAO,EACP,SAAS,EACT,aAAa,EAAE,uBAAuB,EACvC,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"EntityFormWrapper.d.ts","sourceRoot":"","sources":["../../../../src/components/entities/wrappers/EntityFormWrapper.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAA2C,MAAM,OAAO,CAAA;AAU/D,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAA;IACvB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAChC;AAED,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,EACV,IAAI,EACJ,EAAE,EACF,WAAW,EAAE,gBAAgB,EAC7B,SAAS,EACT,OAAO,EACP,SAAS,EACT,aAAa,EAAE,uBAAuB,EACvC,EAAE,sBAAsB,2CAoIxB"}
|
|
@@ -25,6 +25,7 @@ function EntityFormWrapper({
|
|
|
25
25
|
const { teamId } = useTeam();
|
|
26
26
|
const [initialData, setInitialData] = useState(propsInitialData || {});
|
|
27
27
|
const [isLoadingData, setIsLoadingData] = useState(false);
|
|
28
|
+
const [submitError, setSubmitError] = useState(null);
|
|
28
29
|
useEffect(() => {
|
|
29
30
|
if (propsInitialData && Object.keys(propsInitialData).length > 0) {
|
|
30
31
|
setInitialData(propsInitialData);
|
|
@@ -53,6 +54,7 @@ function EntityFormWrapper({
|
|
|
53
54
|
loadInitialData();
|
|
54
55
|
}, [mode, id, entityType, entityConfig, onError, isOverride, propsInitialData]);
|
|
55
56
|
const handleSubmit = useCallback(async (data) => {
|
|
57
|
+
setSubmitError(null);
|
|
56
58
|
try {
|
|
57
59
|
console.log(`${mode === "create" ? "Creating" : "Updating"} ${entityType}:`, data);
|
|
58
60
|
if (mode === "create") {
|
|
@@ -63,8 +65,10 @@ function EntityFormWrapper({
|
|
|
63
65
|
onSuccess == null ? void 0 : onSuccess(id);
|
|
64
66
|
}
|
|
65
67
|
} catch (error) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
+
const failure = error instanceof Error ? error : new Error(`Failed to ${mode} ${entityType}`);
|
|
69
|
+
console.error(`\u274C Failed to ${mode} ${entityType}:`, failure);
|
|
70
|
+
setSubmitError(failure.message);
|
|
71
|
+
onError == null ? void 0 : onError(failure);
|
|
68
72
|
}
|
|
69
73
|
}, [entityType, mode, id, onSuccess, onError]);
|
|
70
74
|
if (isLoadingConfig || isLoadingData) {
|
|
@@ -110,6 +114,7 @@ function EntityFormWrapper({
|
|
|
110
114
|
mode,
|
|
111
115
|
initialData,
|
|
112
116
|
onSubmit: handleSubmit,
|
|
117
|
+
error: submitError,
|
|
113
118
|
className,
|
|
114
119
|
teamId
|
|
115
120
|
}
|
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
* Patterns Edit Page
|
|
3
3
|
*
|
|
4
4
|
* Wrapper that delegates to the BuilderEditorView for pattern editing.
|
|
5
|
-
*
|
|
5
|
+
* Reads entity config from the generated client registry (getEntityBySlug),
|
|
6
|
+
* the same source BuilderEditorView itself and the generic [entity]/[id]/edit
|
|
7
|
+
* page use — instead of the runtime-hydrated useEntityConfig() hook, whose
|
|
8
|
+
* EntityConfig shape (names.singular/plural, full field configs, functions)
|
|
9
|
+
* never structurally matched ClientEntityConfig (#131 follow-up).
|
|
6
10
|
*/
|
|
7
11
|
export default function PatternEditPage(): import("react/jsx-runtime").JSX.Element;
|
|
8
12
|
//# sourceMappingURL=PatternEditPage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PatternEditPage.d.ts","sourceRoot":"","sources":["../../../../src/components/patterns/pages/PatternEditPage.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"PatternEditPage.d.ts","sourceRoot":"","sources":["../../../../src/components/patterns/pages/PatternEditPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAaH,MAAM,CAAC,OAAO,UAAU,eAAe,4CAkGtC"}
|
|
@@ -3,20 +3,31 @@ import { jsx } from "react/jsx-runtime";
|
|
|
3
3
|
import { notFound, useRouter } from "next/navigation";
|
|
4
4
|
import { useParams } from "next/navigation";
|
|
5
5
|
import { useEffect, useState } from "react";
|
|
6
|
+
import { getEntityBySlug } from "@nextsparkjs/registries/entity-registry.client";
|
|
6
7
|
import { EntityFormWrapper } from "../../entities/wrappers/EntityFormWrapper.js";
|
|
7
8
|
import { BuilderEditorView } from "../../dashboard/block-editor/builder-editor-view.js";
|
|
8
9
|
import { Alert, AlertDescription } from "../../ui/alert.js";
|
|
9
|
-
import { useEntityConfig } from "../../../hooks/useEntityConfig.js";
|
|
10
10
|
import { getEntityData } from "../../../lib/api/entities.js";
|
|
11
11
|
function PatternEditPage() {
|
|
12
|
-
var _a;
|
|
12
|
+
var _a, _b;
|
|
13
13
|
const params = useParams();
|
|
14
14
|
const router = useRouter();
|
|
15
15
|
const [initialData, setInitialData] = useState(null);
|
|
16
16
|
const [dataLoading, setDataLoading] = useState(true);
|
|
17
|
+
const [entityConfig, setEntityConfig] = useState(null);
|
|
18
|
+
const [configLoading, setConfigLoading] = useState(true);
|
|
17
19
|
const entitySlug = "patterns";
|
|
18
20
|
const entityId = params.id;
|
|
19
|
-
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
try {
|
|
23
|
+
setEntityConfig(getEntityBySlug(entitySlug));
|
|
24
|
+
} catch (error) {
|
|
25
|
+
console.error("Error loading patterns entity config:", error);
|
|
26
|
+
setEntityConfig(null);
|
|
27
|
+
} finally {
|
|
28
|
+
setConfigLoading(false);
|
|
29
|
+
}
|
|
30
|
+
}, []);
|
|
20
31
|
useEffect(() => {
|
|
21
32
|
async function loadEntityData() {
|
|
22
33
|
var _a2;
|
|
@@ -43,10 +54,10 @@ function PatternEditPage() {
|
|
|
43
54
|
if (configLoading || dataLoading) {
|
|
44
55
|
return /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center min-h-[400px]", children: /* @__PURE__ */ jsx("div", { className: "animate-spin rounded-full h-8 w-8 border-b-2 border-primary" }) });
|
|
45
56
|
}
|
|
46
|
-
if (!entityConfig || !entityConfig.enabled) {
|
|
57
|
+
if (!entityConfig || !((_a = entityConfig.features) == null ? void 0 : _a.enabled)) {
|
|
47
58
|
return /* @__PURE__ */ jsx(Alert, { children: /* @__PURE__ */ jsx(AlertDescription, { children: "Patterns entity is not configured or not enabled." }) });
|
|
48
59
|
}
|
|
49
|
-
if ((
|
|
60
|
+
if ((_b = entityConfig.builder) == null ? void 0 : _b.enabled) {
|
|
50
61
|
return /* @__PURE__ */ jsx(
|
|
51
62
|
BuilderEditorView,
|
|
52
63
|
{
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* Patterns Create Page
|
|
3
3
|
*
|
|
4
4
|
* Wrapper that delegates to the generic entity create page.
|
|
5
|
-
*
|
|
5
|
+
* Reads entity config from the generated client registry — see
|
|
6
|
+
* PatternEditPage.tsx for why (#131 follow-up).
|
|
6
7
|
*/
|
|
7
8
|
export default function PatternsCreatePage(): import("react/jsx-runtime").JSX.Element;
|
|
8
9
|
//# sourceMappingURL=PatternsCreatePage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PatternsCreatePage.d.ts","sourceRoot":"","sources":["../../../../src/components/patterns/pages/PatternsCreatePage.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"PatternsCreatePage.d.ts","sourceRoot":"","sources":["../../../../src/components/patterns/pages/PatternsCreatePage.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,MAAM,CAAC,OAAO,UAAU,kBAAkB,4CA+DzC"}
|
|
@@ -1,22 +1,34 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useState } from "react";
|
|
3
4
|
import { useRouter } from "next/navigation";
|
|
5
|
+
import { getEntityBySlug } from "@nextsparkjs/registries/entity-registry.client";
|
|
4
6
|
import { EntityFormWrapper } from "../../entities/wrappers/EntityFormWrapper.js";
|
|
5
7
|
import { BuilderEditorView } from "../../dashboard/block-editor/builder-editor-view.js";
|
|
6
8
|
import { Alert, AlertDescription } from "../../ui/alert.js";
|
|
7
|
-
import { useEntityConfig } from "../../../hooks/useEntityConfig.js";
|
|
8
9
|
function PatternsCreatePage() {
|
|
9
|
-
var _a;
|
|
10
|
+
var _a, _b;
|
|
10
11
|
const router = useRouter();
|
|
11
12
|
const entitySlug = "patterns";
|
|
12
|
-
const
|
|
13
|
+
const [entityConfig, setEntityConfig] = useState(null);
|
|
14
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
try {
|
|
17
|
+
setEntityConfig(getEntityBySlug(entitySlug));
|
|
18
|
+
} catch (error) {
|
|
19
|
+
console.error("Error loading patterns entity config:", error);
|
|
20
|
+
setEntityConfig(null);
|
|
21
|
+
} finally {
|
|
22
|
+
setIsLoading(false);
|
|
23
|
+
}
|
|
24
|
+
}, []);
|
|
13
25
|
if (isLoading) {
|
|
14
26
|
return /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center min-h-[400px]", children: /* @__PURE__ */ jsx("div", { className: "animate-spin rounded-full h-8 w-8 border-b-2 border-primary" }) });
|
|
15
27
|
}
|
|
16
|
-
if (!entityConfig || !entityConfig.enabled) {
|
|
28
|
+
if (!entityConfig || !((_a = entityConfig.features) == null ? void 0 : _a.enabled)) {
|
|
17
29
|
return /* @__PURE__ */ jsx(Alert, { children: /* @__PURE__ */ jsx(AlertDescription, { children: "Patterns entity is not configured or not enabled." }) });
|
|
18
30
|
}
|
|
19
|
-
if ((
|
|
31
|
+
if ((_b = entityConfig.builder) == null ? void 0 : _b.enabled) {
|
|
20
32
|
return /* @__PURE__ */ jsx(
|
|
21
33
|
BuilderEditorView,
|
|
22
34
|
{
|
|
@@ -14,7 +14,14 @@ interface ComboboxProps {
|
|
|
14
14
|
disabled?: boolean;
|
|
15
15
|
clearable?: boolean;
|
|
16
16
|
className?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Id applied to the focusable trigger (role="combobox") so a `<label for>`
|
|
19
|
+
* can target it. Without it the label points at nothing (see #90).
|
|
20
|
+
*/
|
|
21
|
+
id?: string;
|
|
22
|
+
/** Accessible name for the clear control. */
|
|
23
|
+
clearLabel?: string;
|
|
17
24
|
}
|
|
18
|
-
export declare function Combobox({ options, value, onChange, placeholder, searchPlaceholder, emptyMessage, disabled, clearable, className, }: ComboboxProps): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
export declare function Combobox({ options, value, onChange, placeholder, searchPlaceholder, emptyMessage, disabled, clearable, className, id, clearLabel, }: ComboboxProps): import("react/jsx-runtime").JSX.Element;
|
|
19
26
|
export {};
|
|
20
27
|
//# sourceMappingURL=combobox.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../../src/components/ui/combobox.tsx"],"names":[],"mappings":"AAmBA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,KAAK,IAAI,CAAA;IACtD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../../src/components/ui/combobox.tsx"],"names":[],"mappings":"AAmBA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,KAAK,IAAI,CAAA;IACtD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAgB,QAAQ,CAAC,EACvB,OAAO,EACP,KAAK,EACL,QAAQ,EACR,WAAqC,EACrC,iBAA+B,EAC/B,YAA4C,EAC5C,QAAgB,EAChB,SAAiB,EACjB,SAAS,EACT,EAAE,EACF,UAAgC,GACjC,EAAE,aAAa,2CAiGf"}
|
|
@@ -25,64 +25,57 @@ function Combobox({
|
|
|
25
25
|
emptyMessage = "No se encontraron opciones.",
|
|
26
26
|
disabled = false,
|
|
27
27
|
clearable = false,
|
|
28
|
-
className
|
|
28
|
+
className,
|
|
29
|
+
id,
|
|
30
|
+
clearLabel = "Limpiar selecci\xF3n"
|
|
29
31
|
}) {
|
|
30
32
|
const [open, setOpen] = React.useState(false);
|
|
31
33
|
const selectedOption = options.find((option) => option.value === value);
|
|
34
|
+
const showClear = clearable && !disabled && !!selectedOption;
|
|
32
35
|
const handleSelect = (optionValue) => {
|
|
33
36
|
if (disabled) return;
|
|
34
37
|
const newValue = value === optionValue ? void 0 : optionValue;
|
|
35
38
|
onChange(newValue);
|
|
36
39
|
setOpen(false);
|
|
37
40
|
};
|
|
38
|
-
const handleClear = (
|
|
39
|
-
e.stopPropagation();
|
|
41
|
+
const handleClear = () => {
|
|
40
42
|
if (disabled) return;
|
|
41
43
|
onChange(void 0);
|
|
42
44
|
};
|
|
43
45
|
return /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: setOpen, children: [
|
|
44
|
-
/* @__PURE__ */
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
"
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
{
|
|
62
|
-
role: "button",
|
|
63
|
-
tabIndex: 0,
|
|
64
|
-
onClick: handleClear,
|
|
65
|
-
onKeyDown: (e) => {
|
|
66
|
-
if (e.key === "Enter" || e.key === " ") {
|
|
67
|
-
e.preventDefault();
|
|
68
|
-
const syntheticEvent = {
|
|
69
|
-
preventDefault: () => {
|
|
70
|
-
},
|
|
71
|
-
stopPropagation: () => {
|
|
72
|
-
}
|
|
73
|
-
};
|
|
74
|
-
handleClear(syntheticEvent);
|
|
75
|
-
}
|
|
76
|
-
},
|
|
77
|
-
className: "h-4 w-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 cursor-pointer",
|
|
78
|
-
children: /* @__PURE__ */ jsx(X, { className: "h-3 w-3" })
|
|
79
|
-
}
|
|
80
|
-
),
|
|
46
|
+
/* @__PURE__ */ jsxs("div", { className: "relative w-full", children: [
|
|
47
|
+
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
48
|
+
Button,
|
|
49
|
+
{
|
|
50
|
+
id,
|
|
51
|
+
variant: "outline",
|
|
52
|
+
role: "combobox",
|
|
53
|
+
"aria-expanded": open,
|
|
54
|
+
className: cn(
|
|
55
|
+
"w-full justify-between",
|
|
56
|
+
showClear && "pr-14",
|
|
57
|
+
disabled && "opacity-50 cursor-not-allowed",
|
|
58
|
+
className
|
|
59
|
+
),
|
|
60
|
+
disabled,
|
|
61
|
+
children: [
|
|
62
|
+
/* @__PURE__ */ jsx("span", { className: "truncate", children: selectedOption ? selectedOption.label : placeholder }),
|
|
81
63
|
/* @__PURE__ */ jsx(ChevronsUpDown, { className: "h-4 w-4 shrink-0 opacity-50" })
|
|
82
|
-
]
|
|
83
|
-
|
|
84
|
-
}
|
|
85
|
-
|
|
64
|
+
]
|
|
65
|
+
}
|
|
66
|
+
) }),
|
|
67
|
+
showClear && /* @__PURE__ */ jsx(
|
|
68
|
+
"button",
|
|
69
|
+
{
|
|
70
|
+
type: "button",
|
|
71
|
+
"aria-label": clearLabel,
|
|
72
|
+
title: clearLabel,
|
|
73
|
+
onClick: handleClear,
|
|
74
|
+
className: "absolute right-7 top-1/2 inline-flex h-11 w-11 -translate-y-1/2 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring cursor-pointer",
|
|
75
|
+
children: /* @__PURE__ */ jsx(X, { className: "h-3.5 w-3.5", "aria-hidden": "true" })
|
|
76
|
+
}
|
|
77
|
+
)
|
|
78
|
+
] }),
|
|
86
79
|
/* @__PURE__ */ jsx(
|
|
87
80
|
PopoverContent,
|
|
88
81
|
{
|
|
@@ -5,7 +5,9 @@ interface CountrySelectProps {
|
|
|
5
5
|
disabled?: boolean;
|
|
6
6
|
className?: string;
|
|
7
7
|
clearable?: boolean;
|
|
8
|
+
/** Forwarded to the combobox trigger so `<label for>` resolves (see #90) */
|
|
9
|
+
id?: string;
|
|
8
10
|
}
|
|
9
|
-
export declare function CountrySelect({ value, onChange, placeholder, disabled, className, clearable, }: CountrySelectProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export declare function CountrySelect({ value, onChange, placeholder, disabled, className, clearable, id, }: CountrySelectProps): import("react/jsx-runtime").JSX.Element;
|
|
10
12
|
export {};
|
|
11
13
|
//# sourceMappingURL=country-select.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"country-select.d.ts","sourceRoot":"","sources":["../../../src/components/ui/country-select.tsx"],"names":[],"mappings":"AAoHA,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAA;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"country-select.d.ts","sourceRoot":"","sources":["../../../src/components/ui/country-select.tsx"],"names":[],"mappings":"AAoHA,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAA;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,4EAA4E;IAC5E,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAED,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,WAAmC,EACnC,QAAgB,EAChB,SAAS,EACT,SAAgB,EAChB,EAAE,GACH,EAAE,kBAAkB,2CAkBpB"}
|