@nextsparkjs/theme-default 0.1.0-beta.17 → 0.1.0-beta.170
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/api/ai/chat/stream/route.ts +4 -1
- package/api/ai/orchestrator/route.ts +10 -3
- package/api/ai/single-agent/route.ts +10 -3
- package/api/ai/usage/route.ts +4 -1
- package/blocks/benefits/component.tsx +4 -4
- package/blocks/cta-section/component.tsx +4 -4
- package/blocks/faq-accordion/component.tsx +2 -2
- package/blocks/features-grid/component.tsx +5 -5
- package/blocks/hero/component.tsx +2 -2
- package/blocks/hero/fields.ts +1 -1
- package/blocks/hero-with-form/component.tsx +7 -7
- package/blocks/hero-with-form/fields.ts +1 -1
- package/blocks/jumbotron/component.tsx +7 -7
- package/blocks/jumbotron/fields.ts +1 -1
- package/blocks/logo-cloud/component.tsx +6 -6
- package/blocks/logo-cloud/fields.ts +1 -1
- package/blocks/post-content/component.tsx +2 -2
- package/blocks/pricing-table/component.tsx +5 -5
- package/blocks/split-content/component.tsx +5 -5
- package/blocks/split-content/fields.ts +1 -1
- package/blocks/stats-counter/component.tsx +9 -9
- package/blocks/testimonials/component.tsx +4 -4
- package/blocks/testimonials/fields.ts +1 -1
- package/blocks/text-content/component.tsx +12 -10
- package/blocks/timeline/component.tsx +12 -12
- package/blocks/video-hero/component.tsx +7 -7
- package/blocks/video-hero/fields.ts +1 -1
- package/components/ai-chat/ChatPanel.tsx +7 -7
- package/components/ai-chat/Message.tsx +2 -2
- package/components/ai-chat/MessageInput.tsx +3 -3
- package/components/ai-chat/MessageList.tsx +3 -3
- package/components/ai-chat/TypingIndicator.tsx +2 -2
- package/config/app.config.ts +90 -62
- package/config/billing.config.ts +5 -10
- package/config/dashboard.config.ts +14 -0
- package/config/features.config.ts +10 -0
- package/config/permissions.config.ts +22 -23
- package/docs/{01-overview → public/01-overview}/01-introduction.md +5 -0
- package/docs/{01-overview → public/01-overview}/02-customization.md +5 -0
- package/docs/{02-features → public/02-features}/03-tasks-entity.md +5 -0
- package/docs/{03-ai → public/03-ai}/01-overview.md +5 -0
- package/docs/{03-ai → public/03-ai}/02-customization.md +5 -0
- package/docs/superadmin/01-setup/01-configuration.md +79 -0
- package/docs/superadmin/01-setup/02-deployment.md +82 -0
- package/docs/superadmin/02-management/01-users.md +83 -0
- package/docs/superadmin/03-integrations/01-langchain.md +139 -0
- package/emails/verify-email.ts +33 -0
- package/entities/customers/api/docs.md +107 -0
- package/entities/customers/api/presets.ts +80 -0
- package/entities/pages/api/docs.md +114 -0
- package/entities/pages/api/presets.ts +72 -0
- package/entities/posts/api/docs.md +120 -0
- package/entities/posts/api/presets.ts +74 -0
- package/entities/tasks/api/docs.md +126 -0
- package/entities/tasks/api/presets.ts +84 -0
- package/lib/selectors.ts +7 -4
- package/messages/de/admin.json +45 -0
- package/messages/en/admin.json +56 -0
- package/messages/en/navigation.json +2 -1
- package/messages/es/admin.json +56 -0
- package/messages/es/navigation.json +2 -1
- package/messages/fr/admin.json +45 -0
- package/messages/it/admin.json +45 -0
- package/messages/pt/admin.json +45 -0
- package/migrations/089_add_editor_team_role.sql +15 -23
- package/migrations/090_demo_users_teams.sql +11 -11
- package/migrations/091_greek_teams_billing.sql +15 -15
- package/migrations/093_pages_sample_data.sql +7 -7
- package/migrations/098_patterns_sample_data.sql +234 -0
- package/nextsparkjs-theme-default-0.1.0-beta.137.tgz +0 -0
- package/package.json +4 -3
- package/styles/globals.css +42 -0
- package/templates/(public)/page.tsx +1 -1
- package/tests/cypress/e2e/_utils/devtools/access.bdd.md +262 -0
- package/tests/cypress/e2e/_utils/devtools/access.cy.ts +171 -0
- package/tests/cypress/e2e/_utils/devtools/navigation.bdd.md +261 -0
- package/tests/cypress/e2e/_utils/devtools/navigation.cy.ts +157 -0
- package/tests/cypress/e2e/_utils/devtools/pages.bdd.md +303 -0
- package/tests/cypress/e2e/_utils/devtools/pages.cy.ts +184 -0
- package/tests/cypress/e2e/_utils/docs/README.md +215 -0
- package/tests/cypress/e2e/_utils/selectors/auth.bdd.md +354 -0
- package/tests/cypress/e2e/_utils/selectors/auth.cy.ts +310 -0
- package/tests/cypress/e2e/_utils/selectors/billing.bdd.md +276 -0
- package/tests/cypress/e2e/_utils/selectors/billing.cy.ts +182 -0
- package/tests/cypress/e2e/_utils/selectors/block-editor.bdd.md +615 -0
- package/tests/cypress/e2e/_utils/selectors/block-editor.cy.ts +783 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-container.cy.ts +52 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.bdd.md +205 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.cy.ts +137 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.bdd.md +147 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.cy.ts +114 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.bdd.md +76 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.cy.ts +68 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.bdd.md +326 -0
- package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.cy.ts +177 -0
- package/tests/cypress/e2e/_utils/selectors/devtools.bdd.md +306 -0
- package/tests/cypress/e2e/_utils/selectors/devtools.cy.ts +273 -0
- package/tests/cypress/e2e/_utils/selectors/global-search.bdd.md +115 -0
- package/tests/cypress/e2e/_utils/selectors/global-search.cy.ts +93 -0
- package/tests/cypress/e2e/_utils/selectors/patterns.bdd.md +388 -0
- package/tests/cypress/e2e/_utils/selectors/patterns.cy.ts +559 -0
- package/tests/cypress/e2e/_utils/selectors/public.cy.ts +112 -0
- package/tests/cypress/e2e/_utils/selectors/settings-api-keys.bdd.md +266 -0
- package/tests/cypress/e2e/_utils/selectors/settings-api-keys.cy.ts +233 -0
- package/tests/cypress/e2e/_utils/selectors/settings-billing.bdd.md +78 -0
- package/tests/cypress/e2e/_utils/selectors/settings-billing.cy.ts +108 -0
- package/tests/cypress/e2e/_utils/selectors/settings-layout.bdd.md +129 -0
- package/tests/cypress/e2e/_utils/selectors/settings-layout.cy.ts +115 -0
- package/tests/cypress/e2e/_utils/selectors/settings-password.bdd.md +82 -0
- package/tests/cypress/e2e/_utils/selectors/settings-password.cy.ts +74 -0
- package/tests/cypress/e2e/_utils/selectors/settings-profile.bdd.md +77 -0
- package/tests/cypress/e2e/_utils/selectors/settings-profile.cy.ts +79 -0
- package/tests/cypress/e2e/_utils/selectors/settings-teams.bdd.md +130 -0
- package/tests/cypress/e2e/_utils/selectors/settings-teams.cy.ts +86 -0
- package/tests/cypress/e2e/_utils/selectors/superadmin.bdd.md +261 -0
- package/tests/cypress/e2e/_utils/selectors/superadmin.cy.ts +193 -0
- package/tests/cypress/e2e/_utils/selectors/tasks.bdd.md +593 -0
- package/tests/cypress/e2e/_utils/selectors/tasks.cy.ts +864 -0
- package/tests/cypress/e2e/_utils/selectors/taxonomies.cy.ts +126 -0
- package/tests/cypress/e2e/_utils/selectors/teams.bdd.md +278 -0
- package/tests/cypress/e2e/_utils/selectors/teams.cy.ts +195 -0
- package/tests/cypress/e2e/_utils/superadmin/all-teams.bdd.md +261 -0
- package/tests/cypress/e2e/_utils/superadmin/all-teams.cy.ts +177 -0
- package/tests/cypress/e2e/_utils/superadmin/all-users.bdd.md +406 -0
- package/tests/cypress/e2e/_utils/superadmin/all-users.cy.ts +294 -0
- package/tests/cypress/e2e/_utils/superadmin/dashboard.bdd.md +235 -0
- package/tests/cypress/e2e/_utils/superadmin/dashboard.cy.ts +149 -0
- package/tests/cypress/e2e/_utils/superadmin/subscriptions-overview.bdd.md +290 -0
- package/tests/cypress/e2e/_utils/superadmin/subscriptions-overview.cy.ts +194 -0
- package/tests/cypress/e2e/ai/ai-usage.cy.ts +209 -0
- package/tests/cypress/e2e/ai/chat-api.cy.ts +119 -0
- package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
- package/tests/cypress/e2e/api/_core/billing/BillingAPIController.js +319 -0
- package/tests/cypress/e2e/api/_core/billing/check-action.cy.ts +326 -0
- package/tests/cypress/e2e/api/_core/billing/checkout.cy.ts +358 -0
- package/tests/cypress/e2e/api/_core/billing/lifecycle.cy.ts +423 -0
- package/tests/cypress/e2e/api/_core/billing/plans/README.md +345 -0
- package/tests/cypress/e2e/api/_core/billing/plans/business.cy.ts +412 -0
- package/tests/cypress/e2e/api/_core/billing/plans/downgrade.cy.ts +510 -0
- package/tests/cypress/e2e/api/_core/billing/plans/fixtures/billing-plans.json +163 -0
- package/tests/cypress/e2e/api/_core/billing/plans/free.cy.ts +500 -0
- package/tests/cypress/e2e/api/_core/billing/plans/pro.cy.ts +497 -0
- package/tests/cypress/e2e/api/_core/billing/plans/starter.cy.ts +342 -0
- package/tests/cypress/e2e/api/_core/billing/portal.cy.ts +313 -0
- package/tests/cypress/e2e/api/_core/devtools/registries.bdd.md +300 -0
- package/tests/cypress/e2e/api/_core/devtools/registries.cy.ts +368 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/cron-endpoint.bdd.md +375 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/cron-endpoint.cy.ts +346 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/devtools-endpoint.bdd.md +451 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/devtools-endpoint.cy.ts +447 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/scheduling.bdd.md +649 -0
- package/tests/cypress/e2e/api/_core/scheduled-actions/scheduling.cy.ts +333 -0
- package/tests/cypress/e2e/api/_core/security/security-headers.cy.ts +601 -0
- package/tests/cypress/e2e/api/_core/settings/api-keys.crud.cy.ts +923 -0
- package/tests/cypress/e2e/api/_core/teams/teams-security.cy.ts +415 -0
- package/tests/cypress/e2e/api/_core/users/users-crud.cy.ts +469 -0
- package/tests/cypress/e2e/api/_core/users/users-metas.cy.ts +913 -0
- package/tests/cypress/e2e/api/_core/users/users-security.cy.ts +375 -0
- package/tests/cypress/e2e/api/entities/customers/customers-crud.cy.ts +648 -0
- package/tests/cypress/e2e/api/entities/customers/customers-metas.cy.ts +839 -0
- package/tests/cypress/e2e/api/entities/media/media-crud.cy.ts +600 -0
- package/tests/cypress/e2e/api/entities/media/media-role-permissions.cy.ts +617 -0
- package/tests/cypress/e2e/api/entities/media/media-team-isolation.cy.ts +464 -0
- package/tests/cypress/e2e/api/entities/pages/blocks-scope.cy.ts +396 -0
- package/tests/cypress/e2e/api/entities/pages/pages-crud.cy.ts +425 -0
- package/tests/cypress/e2e/api/entities/pages/pages-status.cy.ts +335 -0
- package/tests/cypress/e2e/api/entities/posts/post-categories-crud.cy.ts +610 -0
- package/tests/cypress/e2e/api/entities/posts/posts-crud.cy.ts +709 -0
- package/tests/cypress/e2e/api/entities/posts/posts-status.cy.ts +396 -0
- package/tests/cypress/e2e/api/entities/tasks/tasks-crud.cy.ts +602 -0
- package/tests/cypress/e2e/api/entities/tasks/tasks-metas.cy.ts +878 -0
- package/tests/cypress/e2e/patterns/patterns-in-pages.cy.ts +367 -0
- package/tests/cypress/e2e/uat/_core/auth/app-roles/developer-login.bdd.md +231 -0
- package/tests/cypress/e2e/uat/_core/auth/app-roles/developer-login.cy.ts +144 -0
- package/tests/cypress/e2e/uat/_core/auth/app-roles/superadmin-login.bdd.md +118 -0
- package/tests/cypress/e2e/uat/_core/auth/app-roles/superadmin-login.cy.ts +84 -0
- package/tests/cypress/e2e/uat/_core/auth/custom-roles/editor-login.bdd.md +288 -0
- package/tests/cypress/e2e/uat/_core/auth/custom-roles/editor-login.cy.ts +188 -0
- package/tests/cypress/e2e/uat/_core/auth/login-logout.bdd.md +160 -0
- package/tests/cypress/e2e/uat/_core/auth/login-logout.cy.ts +116 -0
- package/tests/cypress/e2e/uat/_core/auth/password-reset.bdd.md +289 -0
- package/tests/cypress/e2e/uat/_core/auth/password-reset.cy.ts +200 -0
- package/tests/cypress/e2e/uat/_core/auth/registration-control-invitation.cy.ts +176 -0
- package/tests/cypress/e2e/uat/_core/auth/registration-control-open.cy.ts +131 -0
- package/tests/cypress/e2e/uat/_core/auth/registration-control.cy.ts +140 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/admin-login.bdd.md +225 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/admin-login.cy.ts +148 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/member-login.bdd.md +251 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/member-login.cy.ts +163 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/owner-login.bdd.md +231 -0
- package/tests/cypress/e2e/uat/_core/auth/team-roles/owner-login.cy.ts +141 -0
- package/tests/cypress/e2e/uat/_core/billing/extended.bdd.md +273 -0
- package/tests/cypress/e2e/uat/_core/billing/extended.cy.ts +209 -0
- package/tests/cypress/e2e/uat/_core/billing/feature-gates.bdd.md +407 -0
- package/tests/cypress/e2e/uat/_core/billing/feature-gates.cy.ts +307 -0
- package/tests/cypress/e2e/uat/_core/billing/page.bdd.md +329 -0
- package/tests/cypress/e2e/uat/_core/billing/page.cy.ts +250 -0
- package/tests/cypress/e2e/uat/_core/billing/status.bdd.md +190 -0
- package/tests/cypress/e2e/uat/_core/billing/status.cy.ts +145 -0
- package/tests/cypress/e2e/uat/_core/billing/team-switch.bdd.md +156 -0
- package/tests/cypress/e2e/uat/_core/billing/team-switch.cy.ts +122 -0
- package/tests/cypress/e2e/uat/_core/billing/usage.bdd.md +218 -0
- package/tests/cypress/e2e/uat/_core/billing/usage.cy.ts +176 -0
- package/tests/cypress/e2e/uat/_core/blocks/hero.bdd.md +124 -0
- package/tests/cypress/e2e/uat/_core/blocks/hero.cy.ts +56 -0
- package/tests/cypress/e2e/uat/_core/devtools/api-tester.cy.ts +390 -0
- package/tests/cypress/e2e/uat/_core/performance/suspense-loading.cy.ts +134 -0
- package/tests/cypress/e2e/uat/_core/scheduled-actions/devtools-ui.bdd.md +736 -0
- package/tests/cypress/e2e/uat/_core/scheduled-actions/devtools-ui.cy.ts +740 -0
- package/tests/cypress/e2e/uat/_core/teams/inline-edit.cy.ts +278 -0
- package/tests/cypress/e2e/uat/_core/teams/roles-matrix.bdd.md +553 -0
- package/tests/cypress/e2e/uat/_core/teams/roles-matrix.cy.ts +185 -0
- package/tests/cypress/e2e/uat/_core/teams/switcher.bdd.md +1151 -0
- package/tests/cypress/e2e/uat/_core/teams/switcher.cy.ts +497 -0
- package/tests/cypress/e2e/uat/_core/teams/team-switcher.md +198 -0
- package/tests/cypress/e2e/uat/entities/customers/member.bdd.md +275 -0
- package/tests/cypress/e2e/uat/entities/customers/member.cy.ts +122 -0
- package/tests/cypress/e2e/uat/entities/customers/owner.bdd.md +243 -0
- package/tests/cypress/e2e/uat/entities/customers/owner.cy.ts +165 -0
- package/tests/cypress/e2e/uat/entities/pages/block-crud.bdd.md +476 -0
- package/tests/cypress/e2e/uat/entities/pages/block-crud.cy.ts +486 -0
- package/tests/cypress/e2e/uat/entities/pages/block-editor.bdd.md +460 -0
- package/tests/cypress/e2e/uat/entities/pages/block-editor.cy.ts +301 -0
- package/tests/cypress/e2e/uat/entities/pages/list.bdd.md +432 -0
- package/tests/cypress/e2e/uat/entities/pages/list.cy.ts +273 -0
- package/tests/cypress/e2e/uat/entities/pages/public-rendering.bdd.md +696 -0
- package/tests/cypress/e2e/uat/entities/pages/public-rendering.cy.ts +340 -0
- package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.bdd.md +161 -0
- package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.cy.ts +104 -0
- package/tests/cypress/e2e/uat/entities/posts/categories.bdd.md +375 -0
- package/tests/cypress/e2e/uat/entities/posts/categories.cy.ts +241 -0
- package/tests/cypress/e2e/uat/entities/posts/editor.bdd.md +429 -0
- package/tests/cypress/e2e/uat/entities/posts/editor.cy.ts +257 -0
- package/tests/cypress/e2e/uat/entities/posts/list.bdd.md +340 -0
- package/tests/cypress/e2e/uat/entities/posts/list.cy.ts +177 -0
- package/tests/cypress/e2e/uat/entities/posts/public.bdd.md +614 -0
- package/tests/cypress/e2e/uat/entities/posts/public.cy.ts +249 -0
- package/tests/cypress/e2e/uat/entities/tasks/member.bdd.md +222 -0
- package/tests/cypress/e2e/uat/entities/tasks/member.cy.ts +165 -0
- package/tests/cypress/e2e/uat/entities/tasks/owner.bdd.md +419 -0
- package/tests/cypress/e2e/uat/entities/tasks/owner.cy.ts +191 -0
- package/tests/cypress/e2e/uat/features/roles/editor-role.bdd.md +552 -0
- package/tests/cypress/e2e/uat/features/roles/editor-role.cy.ts +210 -0
- package/tests/cypress/e2e/uat/features/roles/member-restrictions.bdd.md +450 -0
- package/tests/cypress/e2e/uat/features/roles/member-restrictions.cy.ts +189 -0
- package/tests/cypress/e2e/uat/features/roles/owner-full-crud.bdd.md +530 -0
- package/tests/cypress/e2e/uat/features/roles/owner-full-crud.cy.ts +247 -0
- package/tests/cypress/fixtures/blocks.json +218 -0
- package/tests/cypress/fixtures/entities.json +87 -0
- package/tests/cypress/fixtures/page-builder.json +21 -0
- package/tests/cypress/src/components/CategoriesPOM.ts +382 -0
- package/tests/cypress/src/components/CustomersPOM.ts +439 -0
- package/tests/cypress/src/components/DevKeyringPOM.ts +160 -0
- package/tests/cypress/src/components/EntityForm.ts +375 -0
- package/tests/cypress/src/components/EntityList.ts +389 -0
- package/tests/cypress/src/components/PageBuilderPOM.ts +710 -0
- package/tests/cypress/src/components/PostEditorPOM.ts +370 -0
- package/tests/cypress/src/components/PostsListPOM.ts +223 -0
- package/tests/cypress/src/components/PublicPagePOM.ts +447 -0
- package/tests/cypress/src/components/PublicPostPOM.ts +146 -0
- package/tests/cypress/src/components/TasksPOM.ts +272 -0
- package/tests/cypress/src/components/TeamSwitcherPOM.ts +450 -0
- package/tests/cypress/src/components/index.ts +21 -0
- package/tests/cypress/src/controllers/ApiKeysAPIController.js +178 -0
- package/tests/cypress/src/controllers/BaseAPIController.js +317 -0
- package/tests/cypress/src/controllers/CustomerAPIController.js +251 -0
- package/tests/cypress/src/controllers/MediaAPIController.js +231 -0
- package/tests/cypress/src/controllers/PagesAPIController.js +226 -0
- package/tests/cypress/src/controllers/PostsAPIController.js +250 -0
- package/tests/cypress/src/controllers/TaskAPIController.js +240 -0
- package/tests/cypress/src/controllers/UsersAPIController.js +242 -0
- package/tests/cypress/src/controllers/index.js +25 -0
- package/tests/cypress/src/core/AuthPOM.ts +450 -0
- package/tests/cypress/src/core/BasePOM.ts +33 -0
- package/tests/cypress/src/core/BlockEditorBasePOM.ts +874 -0
- package/tests/cypress/src/core/DashboardEntityPOM.ts +41 -0
- package/tests/cypress/src/core/index.ts +14 -0
- package/tests/cypress/src/entities/CustomersPOM.ts +172 -0
- package/tests/cypress/src/entities/PagesPOM.ts +137 -0
- package/tests/cypress/src/entities/PatternsPOM.ts +329 -0
- package/tests/cypress/src/entities/PostsPOM.ts +137 -0
- package/tests/cypress/src/entities/TasksPOM.ts +246 -0
- package/tests/cypress/src/entities/index.ts +16 -0
- package/tests/cypress/src/features/BillingPOM.ts +385 -0
- package/tests/cypress/src/features/DashboardPOM.ts +271 -0
- package/tests/cypress/src/features/DevtoolsPOM.ts +750 -0
- package/tests/cypress/src/features/PageBuilderPOM.ts +283 -0
- package/tests/cypress/src/features/PostEditorPOM.ts +313 -0
- package/tests/cypress/src/features/ScheduledActionsPOM.ts +463 -0
- package/tests/cypress/src/features/SettingsPOM.ts +707 -0
- package/tests/cypress/src/features/SuperadminPOM.ts +851 -0
- package/tests/cypress/src/features/SuperadminTeamRolesPOM.ts +285 -0
- package/tests/cypress/src/features/index.ts +28 -0
- package/tests/cypress/src/helpers/ApiInterceptor.ts +20 -0
- package/tests/cypress/src/index.ts +101 -0
- package/tests/cypress/src/pages/dashboard/Dashboard.js +677 -0
- package/tests/cypress/src/pages/dashboard/DashboardPage.js +43 -0
- package/tests/cypress/src/pages/dashboard/DashboardStats.js +546 -0
- package/tests/cypress/src/pages/dashboard/index.js +6 -0
- package/tests/cypress/src/pages/index.js +5 -0
- package/tests/cypress/src/pages/public/FeaturesPage.js +28 -0
- package/tests/cypress/src/pages/public/LandingPage.js +69 -0
- package/tests/cypress/src/pages/public/PricingPage.js +33 -0
- package/tests/cypress/src/pages/public/index.js +6 -0
- package/tests/cypress/src/selectors.ts +46 -0
- package/tests/cypress/src/session-helpers.ts +518 -0
- package/tests/cypress/support/doc-commands.ts +260 -0
- package/tests/cypress/support/e2e.ts +90 -0
- package/tests/cypress.config.ts +178 -0
- package/tests/jest/__mocks__/@nextsparkjs/core/components/ui/badge.js +16 -0
- package/tests/jest/__mocks__/@nextsparkjs/core/lib/db.js +11 -0
- package/tests/jest/__mocks__/@nextsparkjs/registries/permissions-registry.ts +160 -0
- package/tests/jest/__mocks__/@nextsparkjs/registries/theme-registry.ts +68 -0
- package/tests/jest/__mocks__/jose.js +22 -0
- package/tests/jest/__mocks__/next/image.js +15 -0
- package/tests/jest/__mocks__/next-server.js +56 -0
- package/tests/jest/components/post-header.test.tsx +377 -0
- package/tests/jest/jest.config.cjs +154 -0
- package/tests/jest/langchain/COVERAGE.md +372 -0
- package/tests/jest/langchain/guardrails.test.ts +465 -0
- package/tests/jest/langchain/streaming.test.ts +370 -0
- package/tests/jest/langchain/token-tracker.test.ts +455 -0
- package/tests/jest/langchain/tracer-callbacks.test.ts +881 -0
- package/tests/jest/langchain/tracer.test.ts +823 -0
- package/tests/jest/services/tasks.service.test.ts +707 -0
- package/tests/jest/setup.ts +170 -0
- package/tests/jest/tsconfig.jest.json +6 -0
- package/tests/jest/validation/categories.test.ts +429 -0
- package/tests/jest/validation/posts.test.ts +546 -0
- package/tests/tsconfig.json +21 -0
- /package/docs/{02-features → public/02-features}/01-components.md +0 -0
- /package/docs/{02-features → public/02-features}/02-styling.md +0 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Pages API
|
|
2
|
+
|
|
3
|
+
Manage builder-enabled pages in the system. Pages render at root URLs (e.g., /about, /contact) and support the page builder for content creation.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The Pages API allows you to create, read, update, and delete pages with builder content. Pages are public content and can be accessed by all authenticated users.
|
|
8
|
+
|
|
9
|
+
## Authentication
|
|
10
|
+
|
|
11
|
+
All endpoints require authentication via:
|
|
12
|
+
- **Session cookie** (for browser-based requests)
|
|
13
|
+
- **API Key** header (for server-to-server requests)
|
|
14
|
+
|
|
15
|
+
## Endpoints
|
|
16
|
+
|
|
17
|
+
### List Pages
|
|
18
|
+
`GET /api/v1/pages`
|
|
19
|
+
|
|
20
|
+
Returns a paginated list of pages.
|
|
21
|
+
|
|
22
|
+
**Query Parameters:**
|
|
23
|
+
- `limit` (number, optional): Maximum records to return. Default: 20
|
|
24
|
+
- `offset` (number, optional): Number of records to skip. Default: 0
|
|
25
|
+
- `status` (string, optional): Filter by status (draft, published, scheduled, archived)
|
|
26
|
+
- `locale` (string, optional): Filter by locale (en, es)
|
|
27
|
+
- `search` (string, optional): Search term for title/slug
|
|
28
|
+
- `sortBy` (string, optional): Field to sort by
|
|
29
|
+
- `sortOrder` (string, optional): Sort direction (asc, desc)
|
|
30
|
+
|
|
31
|
+
**Example Response:**
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"data": [
|
|
35
|
+
{
|
|
36
|
+
"id": "page_123",
|
|
37
|
+
"title": "About Us",
|
|
38
|
+
"slug": "about",
|
|
39
|
+
"status": "published",
|
|
40
|
+
"locale": "en",
|
|
41
|
+
"blocks": [...],
|
|
42
|
+
"createdAt": "2024-01-15T10:30:00Z"
|
|
43
|
+
}
|
|
44
|
+
],
|
|
45
|
+
"pagination": {
|
|
46
|
+
"total": 15,
|
|
47
|
+
"limit": 20,
|
|
48
|
+
"offset": 0
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Get Single Page
|
|
54
|
+
`GET /api/v1/pages/[id]`
|
|
55
|
+
|
|
56
|
+
Returns a single page by ID.
|
|
57
|
+
|
|
58
|
+
**Path Parameters:**
|
|
59
|
+
- `id` (string, required): Page ID
|
|
60
|
+
|
|
61
|
+
### Create Page
|
|
62
|
+
`POST /api/v1/pages`
|
|
63
|
+
|
|
64
|
+
Create a new page record.
|
|
65
|
+
|
|
66
|
+
**Request Body:**
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"title": "Contact Us",
|
|
70
|
+
"slug": "contact",
|
|
71
|
+
"status": "draft",
|
|
72
|
+
"locale": "en",
|
|
73
|
+
"blocks": []
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Update Page
|
|
78
|
+
`PATCH /api/v1/pages/[id]`
|
|
79
|
+
|
|
80
|
+
Update an existing page.
|
|
81
|
+
|
|
82
|
+
**Path Parameters:**
|
|
83
|
+
- `id` (string, required): Page ID
|
|
84
|
+
|
|
85
|
+
**Request Body:**
|
|
86
|
+
Any fields to update (partial update supported).
|
|
87
|
+
|
|
88
|
+
### Delete Page
|
|
89
|
+
`DELETE /api/v1/pages/[id]`
|
|
90
|
+
|
|
91
|
+
Delete a page record.
|
|
92
|
+
|
|
93
|
+
**Path Parameters:**
|
|
94
|
+
- `id` (string, required): Page ID
|
|
95
|
+
|
|
96
|
+
## Fields
|
|
97
|
+
|
|
98
|
+
| Field | Type | Required | Description |
|
|
99
|
+
|-------|------|----------|-------------|
|
|
100
|
+
| title | text | Yes | Page title |
|
|
101
|
+
| slug | text | Yes | URL-friendly identifier |
|
|
102
|
+
| status | select | Yes | draft, published, scheduled, archived |
|
|
103
|
+
| locale | select | Yes | en, es |
|
|
104
|
+
| blocks | json | No | Page builder content |
|
|
105
|
+
|
|
106
|
+
## Error Responses
|
|
107
|
+
|
|
108
|
+
| Status | Description |
|
|
109
|
+
|--------|-------------|
|
|
110
|
+
| 400 | Bad Request - Invalid parameters |
|
|
111
|
+
| 401 | Unauthorized - Missing or invalid auth |
|
|
112
|
+
| 403 | Forbidden - Insufficient permissions |
|
|
113
|
+
| 404 | Not Found - Page doesn't exist |
|
|
114
|
+
| 422 | Validation Error - Invalid data |
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Presets for Pages Entity
|
|
3
|
+
*
|
|
4
|
+
* These presets appear in the DevTools API Explorer's "Presets" tab.
|
|
5
|
+
* The endpoint is automatically derived from the entity name: /api/v1/pages
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { defineApiEndpoint } from '@nextsparkjs/core/types/api-presets'
|
|
9
|
+
|
|
10
|
+
export default defineApiEndpoint({
|
|
11
|
+
summary: 'Manage builder-enabled pages',
|
|
12
|
+
presets: [
|
|
13
|
+
{
|
|
14
|
+
id: 'list-all',
|
|
15
|
+
title: 'List All Pages',
|
|
16
|
+
description: 'Fetch all pages with default pagination',
|
|
17
|
+
method: 'GET',
|
|
18
|
+
params: {
|
|
19
|
+
limit: 10,
|
|
20
|
+
offset: 0
|
|
21
|
+
},
|
|
22
|
+
tags: ['read', 'list']
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: 'list-published',
|
|
26
|
+
title: 'List Published Pages',
|
|
27
|
+
description: 'Fetch only published pages',
|
|
28
|
+
method: 'GET',
|
|
29
|
+
params: {
|
|
30
|
+
status: 'published',
|
|
31
|
+
limit: 20
|
|
32
|
+
},
|
|
33
|
+
tags: ['read', 'filter']
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
id: 'list-by-locale',
|
|
37
|
+
title: 'List Spanish Pages',
|
|
38
|
+
description: 'Fetch pages in Spanish locale',
|
|
39
|
+
method: 'GET',
|
|
40
|
+
params: {
|
|
41
|
+
locale: 'es',
|
|
42
|
+
limit: 10
|
|
43
|
+
},
|
|
44
|
+
tags: ['read', 'filter', 'i18n']
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
id: 'create-draft',
|
|
48
|
+
title: 'Create Draft Page',
|
|
49
|
+
description: 'Create a new page as draft',
|
|
50
|
+
method: 'POST',
|
|
51
|
+
payload: {
|
|
52
|
+
title: 'New Page',
|
|
53
|
+
slug: 'new-page',
|
|
54
|
+
status: 'draft',
|
|
55
|
+
locale: 'en',
|
|
56
|
+
blocks: []
|
|
57
|
+
},
|
|
58
|
+
tags: ['write', 'create']
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
id: 'search-title',
|
|
62
|
+
title: 'Search by Title',
|
|
63
|
+
description: 'Search pages by title',
|
|
64
|
+
method: 'GET',
|
|
65
|
+
params: {
|
|
66
|
+
search: 'About',
|
|
67
|
+
searchField: 'title'
|
|
68
|
+
},
|
|
69
|
+
tags: ['read', 'search']
|
|
70
|
+
}
|
|
71
|
+
]
|
|
72
|
+
})
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Posts API
|
|
2
|
+
|
|
3
|
+
Manage blog posts with builder support and taxonomies. Posts render at /blog/[slug] and support categories, featured images, and excerpts.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The Posts API allows you to create, read, update, and delete blog posts with builder content. Posts support the page builder for content creation and include taxonomy management for categories.
|
|
8
|
+
|
|
9
|
+
## Authentication
|
|
10
|
+
|
|
11
|
+
All endpoints require authentication via:
|
|
12
|
+
- **Session cookie** (for browser-based requests)
|
|
13
|
+
- **API Key** header (for server-to-server requests)
|
|
14
|
+
|
|
15
|
+
## Endpoints
|
|
16
|
+
|
|
17
|
+
### List Posts
|
|
18
|
+
`GET /api/v1/posts`
|
|
19
|
+
|
|
20
|
+
Returns a paginated list of posts.
|
|
21
|
+
|
|
22
|
+
**Query Parameters:**
|
|
23
|
+
- `limit` (number, optional): Maximum records to return. Default: 20
|
|
24
|
+
- `offset` (number, optional): Number of records to skip. Default: 0
|
|
25
|
+
- `status` (string, optional): Filter by status (draft, published, scheduled, archived)
|
|
26
|
+
- `search` (string, optional): Search term for title/excerpt
|
|
27
|
+
- `sortBy` (string, optional): Field to sort by
|
|
28
|
+
- `sortOrder` (string, optional): Sort direction (asc, desc)
|
|
29
|
+
|
|
30
|
+
**Example Response:**
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"data": [
|
|
34
|
+
{
|
|
35
|
+
"id": "post_123",
|
|
36
|
+
"title": "Getting Started with NextSpark",
|
|
37
|
+
"slug": "getting-started",
|
|
38
|
+
"status": "published",
|
|
39
|
+
"excerpt": "Learn how to build amazing apps with NextSpark",
|
|
40
|
+
"featuredImage": "/uploads/hero.jpg",
|
|
41
|
+
"blocks": [...],
|
|
42
|
+
"createdAt": "2024-01-15T10:30:00Z"
|
|
43
|
+
}
|
|
44
|
+
],
|
|
45
|
+
"pagination": {
|
|
46
|
+
"total": 42,
|
|
47
|
+
"limit": 20,
|
|
48
|
+
"offset": 0
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Get Single Post
|
|
54
|
+
`GET /api/v1/posts/[id]`
|
|
55
|
+
|
|
56
|
+
Returns a single post by ID.
|
|
57
|
+
|
|
58
|
+
**Path Parameters:**
|
|
59
|
+
- `id` (string, required): Post ID
|
|
60
|
+
|
|
61
|
+
### Create Post
|
|
62
|
+
`POST /api/v1/posts`
|
|
63
|
+
|
|
64
|
+
Create a new post record.
|
|
65
|
+
|
|
66
|
+
**Request Body:**
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"title": "My New Blog Post",
|
|
70
|
+
"slug": "my-new-blog-post",
|
|
71
|
+
"status": "draft",
|
|
72
|
+
"excerpt": "A brief introduction to my post",
|
|
73
|
+
"blocks": []
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Update Post
|
|
78
|
+
`PATCH /api/v1/posts/[id]`
|
|
79
|
+
|
|
80
|
+
Update an existing post.
|
|
81
|
+
|
|
82
|
+
**Path Parameters:**
|
|
83
|
+
- `id` (string, required): Post ID
|
|
84
|
+
|
|
85
|
+
**Request Body:**
|
|
86
|
+
Any fields to update (partial update supported).
|
|
87
|
+
|
|
88
|
+
### Delete Post
|
|
89
|
+
`DELETE /api/v1/posts/[id]`
|
|
90
|
+
|
|
91
|
+
Delete a post record.
|
|
92
|
+
|
|
93
|
+
**Path Parameters:**
|
|
94
|
+
- `id` (string, required): Post ID
|
|
95
|
+
|
|
96
|
+
## Fields
|
|
97
|
+
|
|
98
|
+
| Field | Type | Required | Description |
|
|
99
|
+
|-------|------|----------|-------------|
|
|
100
|
+
| title | text | Yes | Post title |
|
|
101
|
+
| slug | text | Yes | URL-friendly identifier |
|
|
102
|
+
| status | select | Yes | draft, published, scheduled, archived |
|
|
103
|
+
| excerpt | textarea | No | Short summary of the post |
|
|
104
|
+
| featuredImage | image | No | Main image for the post |
|
|
105
|
+
| blocks | json | No | Page builder content |
|
|
106
|
+
|
|
107
|
+
## Taxonomies
|
|
108
|
+
|
|
109
|
+
Posts support the following taxonomies:
|
|
110
|
+
- **categories** (post_category): Multiple categories can be assigned
|
|
111
|
+
|
|
112
|
+
## Error Responses
|
|
113
|
+
|
|
114
|
+
| Status | Description |
|
|
115
|
+
|--------|-------------|
|
|
116
|
+
| 400 | Bad Request - Invalid parameters |
|
|
117
|
+
| 401 | Unauthorized - Missing or invalid auth |
|
|
118
|
+
| 403 | Forbidden - Insufficient permissions |
|
|
119
|
+
| 404 | Not Found - Post doesn't exist |
|
|
120
|
+
| 422 | Validation Error - Invalid data |
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Presets for Posts Entity
|
|
3
|
+
*
|
|
4
|
+
* These presets appear in the DevTools API Explorer's "Presets" tab.
|
|
5
|
+
* The endpoint is automatically derived from the entity name: /api/v1/posts
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { defineApiEndpoint } from '@nextsparkjs/core/types/api-presets'
|
|
9
|
+
|
|
10
|
+
export default defineApiEndpoint({
|
|
11
|
+
summary: 'Manage blog posts with builder and taxonomies',
|
|
12
|
+
presets: [
|
|
13
|
+
{
|
|
14
|
+
id: 'list-all',
|
|
15
|
+
title: 'List All Posts',
|
|
16
|
+
description: 'Fetch all posts with default pagination',
|
|
17
|
+
method: 'GET',
|
|
18
|
+
params: {
|
|
19
|
+
limit: 10,
|
|
20
|
+
offset: 0
|
|
21
|
+
},
|
|
22
|
+
tags: ['read', 'list']
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: 'list-published',
|
|
26
|
+
title: 'List Published Posts',
|
|
27
|
+
description: 'Fetch only published posts',
|
|
28
|
+
method: 'GET',
|
|
29
|
+
params: {
|
|
30
|
+
status: 'published',
|
|
31
|
+
limit: 20,
|
|
32
|
+
sortBy: 'createdAt',
|
|
33
|
+
sortOrder: 'desc'
|
|
34
|
+
},
|
|
35
|
+
tags: ['read', 'filter', 'public']
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: 'list-drafts',
|
|
39
|
+
title: 'List Draft Posts',
|
|
40
|
+
description: 'Fetch posts in draft status',
|
|
41
|
+
method: 'GET',
|
|
42
|
+
params: {
|
|
43
|
+
status: 'draft',
|
|
44
|
+
limit: 20
|
|
45
|
+
},
|
|
46
|
+
tags: ['read', 'filter']
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
id: 'create-draft',
|
|
50
|
+
title: 'Create Draft Post',
|
|
51
|
+
description: 'Create a new post as draft',
|
|
52
|
+
method: 'POST',
|
|
53
|
+
payload: {
|
|
54
|
+
title: 'My New Blog Post',
|
|
55
|
+
slug: 'my-new-blog-post',
|
|
56
|
+
status: 'draft',
|
|
57
|
+
excerpt: 'A brief introduction to my post',
|
|
58
|
+
blocks: []
|
|
59
|
+
},
|
|
60
|
+
tags: ['write', 'create']
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
id: 'search-title',
|
|
64
|
+
title: 'Search by Title',
|
|
65
|
+
description: 'Search posts by title',
|
|
66
|
+
method: 'GET',
|
|
67
|
+
params: {
|
|
68
|
+
search: 'NextSpark',
|
|
69
|
+
searchField: 'title'
|
|
70
|
+
},
|
|
71
|
+
tags: ['read', 'search']
|
|
72
|
+
}
|
|
73
|
+
]
|
|
74
|
+
})
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Tasks API
|
|
2
|
+
|
|
3
|
+
Manage tasks with status tracking, priorities, and metadata support. Tasks are team-scoped private entities.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The Tasks API allows you to create, read, update, and delete task records. Tasks support status workflows, priority levels, due dates, and metadata. Each task belongs to a team and is filtered based on the authenticated user's team context.
|
|
8
|
+
|
|
9
|
+
## Authentication
|
|
10
|
+
|
|
11
|
+
All endpoints require authentication via:
|
|
12
|
+
- **Session cookie** (for browser-based requests)
|
|
13
|
+
- **API Key** header (for server-to-server requests)
|
|
14
|
+
|
|
15
|
+
## Endpoints
|
|
16
|
+
|
|
17
|
+
### List Tasks
|
|
18
|
+
`GET /api/v1/tasks`
|
|
19
|
+
|
|
20
|
+
Returns a paginated list of tasks for the current team.
|
|
21
|
+
|
|
22
|
+
**Query Parameters:**
|
|
23
|
+
- `limit` (number, optional): Maximum records to return. Default: 20
|
|
24
|
+
- `offset` (number, optional): Number of records to skip. Default: 0
|
|
25
|
+
- `status` (string, optional): Filter by status (todo, in-progress, review, done, blocked)
|
|
26
|
+
- `priority` (string, optional): Filter by priority (low, medium, high, urgent)
|
|
27
|
+
- `search` (string, optional): Search term for title/description
|
|
28
|
+
- `sortBy` (string, optional): Field to sort by
|
|
29
|
+
- `sortOrder` (string, optional): Sort direction (asc, desc)
|
|
30
|
+
|
|
31
|
+
**Example Response:**
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"data": [
|
|
35
|
+
{
|
|
36
|
+
"id": "task_123",
|
|
37
|
+
"title": "Implement new feature",
|
|
38
|
+
"description": "Add user authentication flow",
|
|
39
|
+
"status": "in-progress",
|
|
40
|
+
"priority": "high",
|
|
41
|
+
"dueDate": "2024-02-01",
|
|
42
|
+
"estimatedHours": 8,
|
|
43
|
+
"tags": ["feature", "auth"],
|
|
44
|
+
"createdAt": "2024-01-15T10:30:00Z"
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"pagination": {
|
|
48
|
+
"total": 42,
|
|
49
|
+
"limit": 20,
|
|
50
|
+
"offset": 0
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Get Single Task
|
|
56
|
+
`GET /api/v1/tasks/[id]`
|
|
57
|
+
|
|
58
|
+
Returns a single task by ID.
|
|
59
|
+
|
|
60
|
+
**Path Parameters:**
|
|
61
|
+
- `id` (string, required): Task ID
|
|
62
|
+
|
|
63
|
+
### Create Task
|
|
64
|
+
`POST /api/v1/tasks`
|
|
65
|
+
|
|
66
|
+
Create a new task record.
|
|
67
|
+
|
|
68
|
+
**Request Body:**
|
|
69
|
+
```json
|
|
70
|
+
{
|
|
71
|
+
"title": "New Task",
|
|
72
|
+
"description": "Task details here",
|
|
73
|
+
"status": "todo",
|
|
74
|
+
"priority": "medium",
|
|
75
|
+
"dueDate": "2024-02-15",
|
|
76
|
+
"estimatedHours": 4,
|
|
77
|
+
"tags": ["development"]
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Update Task
|
|
82
|
+
`PATCH /api/v1/tasks/[id]`
|
|
83
|
+
|
|
84
|
+
Update an existing task.
|
|
85
|
+
|
|
86
|
+
**Path Parameters:**
|
|
87
|
+
- `id` (string, required): Task ID
|
|
88
|
+
|
|
89
|
+
**Request Body:**
|
|
90
|
+
Any fields to update (partial update supported).
|
|
91
|
+
|
|
92
|
+
### Delete Task
|
|
93
|
+
`DELETE /api/v1/tasks/[id]`
|
|
94
|
+
|
|
95
|
+
Delete a task record.
|
|
96
|
+
|
|
97
|
+
**Path Parameters:**
|
|
98
|
+
- `id` (string, required): Task ID
|
|
99
|
+
|
|
100
|
+
## Fields
|
|
101
|
+
|
|
102
|
+
| Field | Type | Required | Default | Description |
|
|
103
|
+
|-------|------|----------|---------|-------------|
|
|
104
|
+
| title | text | Yes | - | Task title |
|
|
105
|
+
| description | textarea | No | - | Detailed description |
|
|
106
|
+
| status | select | No | todo | todo, in-progress, review, done, blocked |
|
|
107
|
+
| priority | select | No | medium | low, medium, high, urgent |
|
|
108
|
+
| tags | tags | No | [] | Task tags for categorization |
|
|
109
|
+
| dueDate | date | No | - | Task deadline |
|
|
110
|
+
| estimatedHours | number | No | - | Estimated time to complete |
|
|
111
|
+
|
|
112
|
+
## Metadata Support
|
|
113
|
+
|
|
114
|
+
Tasks support the metadata system. Use the metadata endpoints to store additional custom data:
|
|
115
|
+
- `POST /api/v1/tasks/[id]/meta` - Add metadata
|
|
116
|
+
- `GET /api/v1/tasks/[id]/meta` - Get metadata
|
|
117
|
+
|
|
118
|
+
## Error Responses
|
|
119
|
+
|
|
120
|
+
| Status | Description |
|
|
121
|
+
|--------|-------------|
|
|
122
|
+
| 400 | Bad Request - Invalid parameters |
|
|
123
|
+
| 401 | Unauthorized - Missing or invalid auth |
|
|
124
|
+
| 403 | Forbidden - Insufficient permissions |
|
|
125
|
+
| 404 | Not Found - Task doesn't exist |
|
|
126
|
+
| 422 | Validation Error - Invalid data |
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Presets for Tasks Entity
|
|
3
|
+
*
|
|
4
|
+
* These presets appear in the DevTools API Explorer's "Presets" tab.
|
|
5
|
+
* The endpoint is automatically derived from the entity name: /api/v1/tasks
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { defineApiEndpoint } from '@nextsparkjs/core/types/api-presets'
|
|
9
|
+
|
|
10
|
+
export default defineApiEndpoint({
|
|
11
|
+
summary: 'Manage tasks with status and priorities',
|
|
12
|
+
presets: [
|
|
13
|
+
{
|
|
14
|
+
id: 'list-all',
|
|
15
|
+
title: 'List All Tasks',
|
|
16
|
+
description: 'Fetch all tasks with default pagination',
|
|
17
|
+
method: 'GET',
|
|
18
|
+
params: {
|
|
19
|
+
limit: 10,
|
|
20
|
+
offset: 0
|
|
21
|
+
},
|
|
22
|
+
tags: ['read', 'list']
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: 'list-todo',
|
|
26
|
+
title: 'List To-Do Tasks',
|
|
27
|
+
description: 'Fetch tasks in to-do status',
|
|
28
|
+
method: 'GET',
|
|
29
|
+
params: {
|
|
30
|
+
status: 'todo',
|
|
31
|
+
limit: 20
|
|
32
|
+
},
|
|
33
|
+
tags: ['read', 'filter']
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
id: 'list-in-progress',
|
|
37
|
+
title: 'List In Progress',
|
|
38
|
+
description: 'Fetch tasks currently in progress',
|
|
39
|
+
method: 'GET',
|
|
40
|
+
params: {
|
|
41
|
+
status: 'in-progress',
|
|
42
|
+
limit: 20
|
|
43
|
+
},
|
|
44
|
+
tags: ['read', 'filter']
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
id: 'list-urgent',
|
|
48
|
+
title: 'List Urgent Tasks',
|
|
49
|
+
description: 'Fetch high priority and urgent tasks',
|
|
50
|
+
method: 'GET',
|
|
51
|
+
params: {
|
|
52
|
+
priority: 'urgent',
|
|
53
|
+
sortBy: 'dueDate',
|
|
54
|
+
sortOrder: 'asc'
|
|
55
|
+
},
|
|
56
|
+
tags: ['read', 'filter', 'priority']
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
id: 'create-task',
|
|
60
|
+
title: 'Create New Task',
|
|
61
|
+
description: 'Create a new task with sample data',
|
|
62
|
+
method: 'POST',
|
|
63
|
+
payload: {
|
|
64
|
+
title: 'New Task',
|
|
65
|
+
description: 'Task description here',
|
|
66
|
+
status: 'todo',
|
|
67
|
+
priority: 'medium',
|
|
68
|
+
tags: ['development']
|
|
69
|
+
},
|
|
70
|
+
tags: ['write', 'create']
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
id: 'search-title',
|
|
74
|
+
title: 'Search by Title',
|
|
75
|
+
description: 'Search tasks by title',
|
|
76
|
+
method: 'GET',
|
|
77
|
+
params: {
|
|
78
|
+
search: 'feature',
|
|
79
|
+
searchField: 'title'
|
|
80
|
+
},
|
|
81
|
+
tags: ['read', 'search']
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
})
|
package/lib/selectors.ts
CHANGED
|
@@ -9,8 +9,7 @@
|
|
|
9
9
|
* - Cypress tests (via tests/cypress/src/selectors.ts)
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import { createSelectorHelpers } from '@nextsparkjs/core/
|
|
13
|
-
import { CORE_SELECTORS } from '@nextsparkjs/core/lib/test/core-selectors'
|
|
12
|
+
import { createSelectorHelpers, CORE_SELECTORS } from '@nextsparkjs/core/selectors'
|
|
14
13
|
|
|
15
14
|
// =============================================================================
|
|
16
15
|
// BLOCK SELECTORS
|
|
@@ -134,11 +133,15 @@ export const DEVTOOLS_SELECTORS = {
|
|
|
134
133
|
|
|
135
134
|
/**
|
|
136
135
|
* Complete theme selectors merging core and blocks.
|
|
136
|
+
* NOTE: devtools must be MERGED (not replaced) to keep CORE_SELECTORS.devtools
|
|
137
137
|
*/
|
|
138
138
|
export const THEME_SELECTORS = {
|
|
139
139
|
...CORE_SELECTORS,
|
|
140
140
|
blocks: BLOCK_SELECTORS,
|
|
141
|
-
devtools:
|
|
141
|
+
devtools: {
|
|
142
|
+
...CORE_SELECTORS.devtools,
|
|
143
|
+
...DEVTOOLS_SELECTORS,
|
|
144
|
+
},
|
|
142
145
|
} as const
|
|
143
146
|
|
|
144
147
|
// =============================================================================
|
|
@@ -193,5 +196,5 @@ export const entitySelectors = helpers.entitySelectors
|
|
|
193
196
|
*/
|
|
194
197
|
export type ThemeSelectorsType = typeof THEME_SELECTORS
|
|
195
198
|
export type BlockSelectorsType = typeof BLOCK_SELECTORS
|
|
196
|
-
export type { Replacements } from '@nextsparkjs/core/
|
|
199
|
+
export type { Replacements } from '@nextsparkjs/core/selectors'
|
|
197
200
|
export { CORE_SELECTORS }
|
package/messages/de/admin.json
CHANGED
|
@@ -214,6 +214,51 @@
|
|
|
214
214
|
"messages": {
|
|
215
215
|
"saved": "Erfolgreich gespeichert",
|
|
216
216
|
"created": "Erfolgreich erstellt"
|
|
217
|
+
},
|
|
218
|
+
"header": {
|
|
219
|
+
"actions": {
|
|
220
|
+
"saveDraft": "Entwurf Speichern",
|
|
221
|
+
"publish": "Veröffentlichen",
|
|
222
|
+
"update": "Aktualisieren"
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
"canvas": {
|
|
226
|
+
"empty": {
|
|
227
|
+
"title": "Noch keine Blöcke",
|
|
228
|
+
"subtitle": "Fügen Sie Blöcke aus der Seitenleiste hinzu"
|
|
229
|
+
},
|
|
230
|
+
"editingBadge": "Bearbeiten",
|
|
231
|
+
"error": {
|
|
232
|
+
"blockNotFound": "Block nicht gefunden"
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
"floatingToolbar": {
|
|
236
|
+
"drag": "Ziehen zum Neuordnen",
|
|
237
|
+
"duplicate": "Block duplizieren",
|
|
238
|
+
"delete": "Block löschen"
|
|
239
|
+
},
|
|
240
|
+
"settingsPanel": {
|
|
241
|
+
"title": "Block-Eigenschaften",
|
|
242
|
+
"empty": {
|
|
243
|
+
"message": "Kein Block ausgewählt",
|
|
244
|
+
"hint": "Wählen Sie einen Block aus dem Canvas, um seine Einstellungen zu bearbeiten"
|
|
245
|
+
},
|
|
246
|
+
"error": {
|
|
247
|
+
"notFound": "Block-Konfiguration nicht gefunden"
|
|
248
|
+
},
|
|
249
|
+
"actions": {
|
|
250
|
+
"reset": "Zurücksetzen",
|
|
251
|
+
"remove": "Entfernen"
|
|
252
|
+
},
|
|
253
|
+
"tabs": {
|
|
254
|
+
"content": "Inhalt",
|
|
255
|
+
"design": "Design",
|
|
256
|
+
"advanced": "Erweitert",
|
|
257
|
+
"noContentFields": "Keine Inhaltsfelder",
|
|
258
|
+
"noDesignFields": "Keine Designfelder",
|
|
259
|
+
"noAdvancedFields": "Keine erweiterten Felder"
|
|
260
|
+
},
|
|
261
|
+
"noFields": "Dieser Block hat keine konfigurierbaren Felder"
|
|
217
262
|
}
|
|
218
263
|
}
|
|
219
264
|
}
|