@nextsparkjs/theme-default 0.1.0-beta.1 → 0.1.0-beta.100

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.
Files changed (325) hide show
  1. package/LICENSE +21 -0
  2. package/api/ai/chat/stream/route.ts +4 -1
  3. package/api/ai/orchestrator/route.ts +10 -3
  4. package/api/ai/single-agent/route.ts +10 -3
  5. package/api/ai/usage/route.ts +4 -1
  6. package/blocks/benefits/component.tsx +4 -4
  7. package/blocks/cta-section/component.tsx +4 -4
  8. package/blocks/faq-accordion/component.tsx +2 -2
  9. package/blocks/features-grid/component.tsx +5 -5
  10. package/blocks/hero/component.tsx +2 -2
  11. package/blocks/hero/fields.ts +1 -1
  12. package/blocks/hero-with-form/component.tsx +7 -7
  13. package/blocks/hero-with-form/fields.ts +1 -1
  14. package/blocks/jumbotron/component.tsx +7 -7
  15. package/blocks/jumbotron/fields.ts +1 -1
  16. package/blocks/logo-cloud/component.tsx +6 -6
  17. package/blocks/logo-cloud/fields.ts +1 -1
  18. package/blocks/post-content/component.tsx +2 -2
  19. package/blocks/pricing-table/component.tsx +5 -5
  20. package/blocks/split-content/component.tsx +5 -5
  21. package/blocks/split-content/fields.ts +1 -1
  22. package/blocks/stats-counter/component.tsx +9 -9
  23. package/blocks/testimonials/component.tsx +4 -4
  24. package/blocks/testimonials/fields.ts +1 -1
  25. package/blocks/text-content/component.tsx +12 -10
  26. package/blocks/timeline/component.tsx +12 -12
  27. package/blocks/video-hero/component.tsx +7 -7
  28. package/blocks/video-hero/fields.ts +1 -1
  29. package/components/ai-chat/ChatPanel.tsx +7 -7
  30. package/components/ai-chat/Message.tsx +2 -2
  31. package/components/ai-chat/MessageInput.tsx +3 -3
  32. package/components/ai-chat/MessageList.tsx +3 -3
  33. package/components/ai-chat/TypingIndicator.tsx +2 -2
  34. package/config/app.config.ts +54 -62
  35. package/config/dashboard.config.ts +14 -0
  36. package/config/features.config.ts +10 -0
  37. package/config/permissions.config.ts +26 -1
  38. package/docs/{01-overview → public/01-overview}/01-introduction.md +5 -0
  39. package/docs/{01-overview → public/01-overview}/02-customization.md +5 -0
  40. package/docs/{02-features → public/02-features}/03-tasks-entity.md +5 -0
  41. package/docs/{03-ai → public/03-ai}/01-overview.md +5 -0
  42. package/docs/{03-ai → public/03-ai}/02-customization.md +5 -0
  43. package/docs/superadmin/01-setup/01-configuration.md +79 -0
  44. package/docs/superadmin/01-setup/02-deployment.md +82 -0
  45. package/docs/superadmin/02-management/01-users.md +83 -0
  46. package/docs/superadmin/03-integrations/01-langchain.md +139 -0
  47. package/entities/customers/api/docs.md +107 -0
  48. package/entities/customers/api/presets.ts +80 -0
  49. package/entities/pages/api/docs.md +114 -0
  50. package/entities/pages/api/presets.ts +72 -0
  51. package/entities/posts/api/docs.md +120 -0
  52. package/entities/posts/api/presets.ts +74 -0
  53. package/entities/tasks/api/docs.md +126 -0
  54. package/entities/tasks/api/presets.ts +84 -0
  55. package/lib/selectors.ts +7 -4
  56. package/messages/de/admin.json +45 -0
  57. package/messages/en/admin.json +56 -0
  58. package/messages/en/navigation.json +2 -1
  59. package/messages/es/admin.json +56 -0
  60. package/messages/es/navigation.json +2 -1
  61. package/messages/fr/admin.json +45 -0
  62. package/messages/it/admin.json +45 -0
  63. package/messages/pt/admin.json +45 -0
  64. package/migrations/093_pages_sample_data.sql +7 -7
  65. package/migrations/098_patterns_sample_data.sql +234 -0
  66. package/package.json +8 -3
  67. package/styles/globals.css +42 -0
  68. package/templates/(public)/blog/[slug]/page.tsx +1 -1
  69. package/templates/(public)/page.tsx +1 -1
  70. package/tests/cypress/e2e/_utils/devtools/access.bdd.md +262 -0
  71. package/tests/cypress/e2e/_utils/devtools/access.cy.ts +171 -0
  72. package/tests/cypress/e2e/_utils/devtools/navigation.bdd.md +261 -0
  73. package/tests/cypress/e2e/_utils/devtools/navigation.cy.ts +157 -0
  74. package/tests/cypress/e2e/_utils/devtools/pages.bdd.md +303 -0
  75. package/tests/cypress/e2e/_utils/devtools/pages.cy.ts +184 -0
  76. package/tests/cypress/e2e/_utils/docs/README.md +215 -0
  77. package/tests/cypress/e2e/_utils/selectors/auth.bdd.md +354 -0
  78. package/tests/cypress/e2e/_utils/selectors/auth.cy.ts +310 -0
  79. package/tests/cypress/e2e/_utils/selectors/billing.bdd.md +276 -0
  80. package/tests/cypress/e2e/_utils/selectors/billing.cy.ts +182 -0
  81. package/tests/cypress/e2e/_utils/selectors/block-editor.bdd.md +615 -0
  82. package/tests/cypress/e2e/_utils/selectors/block-editor.cy.ts +783 -0
  83. package/tests/cypress/e2e/_utils/selectors/dashboard-container.cy.ts +52 -0
  84. package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.bdd.md +205 -0
  85. package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.cy.ts +137 -0
  86. package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.bdd.md +147 -0
  87. package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.cy.ts +114 -0
  88. package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.bdd.md +76 -0
  89. package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.cy.ts +68 -0
  90. package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.bdd.md +326 -0
  91. package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.cy.ts +177 -0
  92. package/tests/cypress/e2e/_utils/selectors/devtools.bdd.md +306 -0
  93. package/tests/cypress/e2e/_utils/selectors/devtools.cy.ts +273 -0
  94. package/tests/cypress/e2e/_utils/selectors/global-search.bdd.md +115 -0
  95. package/tests/cypress/e2e/_utils/selectors/global-search.cy.ts +93 -0
  96. package/tests/cypress/e2e/_utils/selectors/patterns.bdd.md +388 -0
  97. package/tests/cypress/e2e/_utils/selectors/patterns.cy.ts +559 -0
  98. package/tests/cypress/e2e/_utils/selectors/public.cy.ts +112 -0
  99. package/tests/cypress/e2e/_utils/selectors/settings-api-keys.bdd.md +266 -0
  100. package/tests/cypress/e2e/_utils/selectors/settings-api-keys.cy.ts +233 -0
  101. package/tests/cypress/e2e/_utils/selectors/settings-billing.bdd.md +78 -0
  102. package/tests/cypress/e2e/_utils/selectors/settings-billing.cy.ts +108 -0
  103. package/tests/cypress/e2e/_utils/selectors/settings-layout.bdd.md +129 -0
  104. package/tests/cypress/e2e/_utils/selectors/settings-layout.cy.ts +115 -0
  105. package/tests/cypress/e2e/_utils/selectors/settings-password.bdd.md +82 -0
  106. package/tests/cypress/e2e/_utils/selectors/settings-password.cy.ts +74 -0
  107. package/tests/cypress/e2e/_utils/selectors/settings-profile.bdd.md +77 -0
  108. package/tests/cypress/e2e/_utils/selectors/settings-profile.cy.ts +79 -0
  109. package/tests/cypress/e2e/_utils/selectors/settings-teams.bdd.md +130 -0
  110. package/tests/cypress/e2e/_utils/selectors/settings-teams.cy.ts +86 -0
  111. package/tests/cypress/e2e/_utils/selectors/superadmin.bdd.md +261 -0
  112. package/tests/cypress/e2e/_utils/selectors/superadmin.cy.ts +193 -0
  113. package/tests/cypress/e2e/_utils/selectors/tasks.bdd.md +593 -0
  114. package/tests/cypress/e2e/_utils/selectors/tasks.cy.ts +864 -0
  115. package/tests/cypress/e2e/_utils/selectors/taxonomies.cy.ts +126 -0
  116. package/tests/cypress/e2e/_utils/selectors/teams.bdd.md +278 -0
  117. package/tests/cypress/e2e/_utils/selectors/teams.cy.ts +195 -0
  118. package/tests/cypress/e2e/_utils/superadmin/all-teams.bdd.md +261 -0
  119. package/tests/cypress/e2e/_utils/superadmin/all-teams.cy.ts +177 -0
  120. package/tests/cypress/e2e/_utils/superadmin/all-users.bdd.md +406 -0
  121. package/tests/cypress/e2e/_utils/superadmin/all-users.cy.ts +294 -0
  122. package/tests/cypress/e2e/_utils/superadmin/dashboard.bdd.md +235 -0
  123. package/tests/cypress/e2e/_utils/superadmin/dashboard.cy.ts +149 -0
  124. package/tests/cypress/e2e/_utils/superadmin/subscriptions-overview.bdd.md +290 -0
  125. package/tests/cypress/e2e/_utils/superadmin/subscriptions-overview.cy.ts +194 -0
  126. package/tests/cypress/e2e/ai/ai-usage.cy.ts +209 -0
  127. package/tests/cypress/e2e/ai/chat-api.cy.ts +119 -0
  128. package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
  129. package/tests/cypress/e2e/api/_core/billing/BillingAPIController.js +319 -0
  130. package/tests/cypress/e2e/api/_core/billing/check-action.cy.ts +326 -0
  131. package/tests/cypress/e2e/api/_core/billing/checkout.cy.ts +358 -0
  132. package/tests/cypress/e2e/api/_core/billing/lifecycle.cy.ts +423 -0
  133. package/tests/cypress/e2e/api/_core/billing/plans/README.md +345 -0
  134. package/tests/cypress/e2e/api/_core/billing/plans/business.cy.ts +412 -0
  135. package/tests/cypress/e2e/api/_core/billing/plans/downgrade.cy.ts +510 -0
  136. package/tests/cypress/e2e/api/_core/billing/plans/fixtures/billing-plans.json +163 -0
  137. package/tests/cypress/e2e/api/_core/billing/plans/free.cy.ts +500 -0
  138. package/tests/cypress/e2e/api/_core/billing/plans/pro.cy.ts +497 -0
  139. package/tests/cypress/e2e/api/_core/billing/plans/starter.cy.ts +342 -0
  140. package/tests/cypress/e2e/api/_core/billing/portal.cy.ts +313 -0
  141. package/tests/cypress/e2e/api/_core/devtools/registries.bdd.md +300 -0
  142. package/tests/cypress/e2e/api/_core/devtools/registries.cy.ts +368 -0
  143. package/tests/cypress/e2e/api/_core/scheduled-actions/cron-endpoint.bdd.md +375 -0
  144. package/tests/cypress/e2e/api/_core/scheduled-actions/cron-endpoint.cy.ts +346 -0
  145. package/tests/cypress/e2e/api/_core/scheduled-actions/devtools-endpoint.bdd.md +451 -0
  146. package/tests/cypress/e2e/api/_core/scheduled-actions/devtools-endpoint.cy.ts +447 -0
  147. package/tests/cypress/e2e/api/_core/scheduled-actions/scheduling.bdd.md +649 -0
  148. package/tests/cypress/e2e/api/_core/scheduled-actions/scheduling.cy.ts +333 -0
  149. package/tests/cypress/e2e/api/_core/security/security-headers.cy.ts +601 -0
  150. package/tests/cypress/e2e/api/_core/settings/api-keys.crud.cy.ts +923 -0
  151. package/tests/cypress/e2e/api/_core/teams/teams-security.cy.ts +415 -0
  152. package/tests/cypress/e2e/api/_core/users/users-crud.cy.ts +469 -0
  153. package/tests/cypress/e2e/api/_core/users/users-metas.cy.ts +913 -0
  154. package/tests/cypress/e2e/api/_core/users/users-security.cy.ts +375 -0
  155. package/tests/cypress/e2e/api/entities/customers/customers-crud.cy.ts +648 -0
  156. package/tests/cypress/e2e/api/entities/customers/customers-metas.cy.ts +839 -0
  157. package/tests/cypress/e2e/api/entities/media/media-crud.cy.ts +600 -0
  158. package/tests/cypress/e2e/api/entities/media/media-role-permissions.cy.ts +617 -0
  159. package/tests/cypress/e2e/api/entities/media/media-team-isolation.cy.ts +464 -0
  160. package/tests/cypress/e2e/api/entities/pages/blocks-scope.cy.ts +396 -0
  161. package/tests/cypress/e2e/api/entities/pages/pages-crud.cy.ts +425 -0
  162. package/tests/cypress/e2e/api/entities/pages/pages-status.cy.ts +335 -0
  163. package/tests/cypress/e2e/api/entities/posts/post-categories-crud.cy.ts +610 -0
  164. package/tests/cypress/e2e/api/entities/posts/posts-crud.cy.ts +709 -0
  165. package/tests/cypress/e2e/api/entities/posts/posts-status.cy.ts +396 -0
  166. package/tests/cypress/e2e/api/entities/tasks/tasks-crud.cy.ts +602 -0
  167. package/tests/cypress/e2e/api/entities/tasks/tasks-metas.cy.ts +878 -0
  168. package/tests/cypress/e2e/patterns/patterns-in-pages.cy.ts +367 -0
  169. package/tests/cypress/e2e/uat/_core/auth/app-roles/developer-login.bdd.md +231 -0
  170. package/tests/cypress/e2e/uat/_core/auth/app-roles/developer-login.cy.ts +144 -0
  171. package/tests/cypress/e2e/uat/_core/auth/app-roles/superadmin-login.bdd.md +118 -0
  172. package/tests/cypress/e2e/uat/_core/auth/app-roles/superadmin-login.cy.ts +84 -0
  173. package/tests/cypress/e2e/uat/_core/auth/custom-roles/editor-login.bdd.md +288 -0
  174. package/tests/cypress/e2e/uat/_core/auth/custom-roles/editor-login.cy.ts +188 -0
  175. package/tests/cypress/e2e/uat/_core/auth/login-logout.bdd.md +160 -0
  176. package/tests/cypress/e2e/uat/_core/auth/login-logout.cy.ts +116 -0
  177. package/tests/cypress/e2e/uat/_core/auth/password-reset.bdd.md +289 -0
  178. package/tests/cypress/e2e/uat/_core/auth/password-reset.cy.ts +200 -0
  179. package/tests/cypress/e2e/uat/_core/auth/team-roles/admin-login.bdd.md +225 -0
  180. package/tests/cypress/e2e/uat/_core/auth/team-roles/admin-login.cy.ts +148 -0
  181. package/tests/cypress/e2e/uat/_core/auth/team-roles/member-login.bdd.md +251 -0
  182. package/tests/cypress/e2e/uat/_core/auth/team-roles/member-login.cy.ts +163 -0
  183. package/tests/cypress/e2e/uat/_core/auth/team-roles/owner-login.bdd.md +231 -0
  184. package/tests/cypress/e2e/uat/_core/auth/team-roles/owner-login.cy.ts +141 -0
  185. package/tests/cypress/e2e/uat/_core/billing/extended.bdd.md +273 -0
  186. package/tests/cypress/e2e/uat/_core/billing/extended.cy.ts +209 -0
  187. package/tests/cypress/e2e/uat/_core/billing/feature-gates.bdd.md +407 -0
  188. package/tests/cypress/e2e/uat/_core/billing/feature-gates.cy.ts +307 -0
  189. package/tests/cypress/e2e/uat/_core/billing/page.bdd.md +329 -0
  190. package/tests/cypress/e2e/uat/_core/billing/page.cy.ts +250 -0
  191. package/tests/cypress/e2e/uat/_core/billing/status.bdd.md +190 -0
  192. package/tests/cypress/e2e/uat/_core/billing/status.cy.ts +145 -0
  193. package/tests/cypress/e2e/uat/_core/billing/team-switch.bdd.md +156 -0
  194. package/tests/cypress/e2e/uat/_core/billing/team-switch.cy.ts +122 -0
  195. package/tests/cypress/e2e/uat/_core/billing/usage.bdd.md +218 -0
  196. package/tests/cypress/e2e/uat/_core/billing/usage.cy.ts +176 -0
  197. package/tests/cypress/e2e/uat/_core/blocks/hero.bdd.md +124 -0
  198. package/tests/cypress/e2e/uat/_core/blocks/hero.cy.ts +56 -0
  199. package/tests/cypress/e2e/uat/_core/devtools/api-tester.cy.ts +390 -0
  200. package/tests/cypress/e2e/uat/_core/performance/suspense-loading.cy.ts +134 -0
  201. package/tests/cypress/e2e/uat/_core/scheduled-actions/devtools-ui.bdd.md +736 -0
  202. package/tests/cypress/e2e/uat/_core/scheduled-actions/devtools-ui.cy.ts +740 -0
  203. package/tests/cypress/e2e/uat/_core/teams/inline-edit.cy.ts +278 -0
  204. package/tests/cypress/e2e/uat/_core/teams/roles-matrix.bdd.md +553 -0
  205. package/tests/cypress/e2e/uat/_core/teams/roles-matrix.cy.ts +185 -0
  206. package/tests/cypress/e2e/uat/_core/teams/switcher.bdd.md +1151 -0
  207. package/tests/cypress/e2e/uat/_core/teams/switcher.cy.ts +497 -0
  208. package/tests/cypress/e2e/uat/_core/teams/team-switcher.md +198 -0
  209. package/tests/cypress/e2e/uat/entities/customers/member.bdd.md +275 -0
  210. package/tests/cypress/e2e/uat/entities/customers/member.cy.ts +122 -0
  211. package/tests/cypress/e2e/uat/entities/customers/owner.bdd.md +243 -0
  212. package/tests/cypress/e2e/uat/entities/customers/owner.cy.ts +165 -0
  213. package/tests/cypress/e2e/uat/entities/pages/block-crud.bdd.md +476 -0
  214. package/tests/cypress/e2e/uat/entities/pages/block-crud.cy.ts +486 -0
  215. package/tests/cypress/e2e/uat/entities/pages/block-editor.bdd.md +460 -0
  216. package/tests/cypress/e2e/uat/entities/pages/block-editor.cy.ts +301 -0
  217. package/tests/cypress/e2e/uat/entities/pages/list.bdd.md +432 -0
  218. package/tests/cypress/e2e/uat/entities/pages/list.cy.ts +273 -0
  219. package/tests/cypress/e2e/uat/entities/pages/public-rendering.bdd.md +696 -0
  220. package/tests/cypress/e2e/uat/entities/pages/public-rendering.cy.ts +340 -0
  221. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.bdd.md +161 -0
  222. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.cy.ts +104 -0
  223. package/tests/cypress/e2e/uat/entities/posts/categories.bdd.md +375 -0
  224. package/tests/cypress/e2e/uat/entities/posts/categories.cy.ts +241 -0
  225. package/tests/cypress/e2e/uat/entities/posts/editor.bdd.md +429 -0
  226. package/tests/cypress/e2e/uat/entities/posts/editor.cy.ts +257 -0
  227. package/tests/cypress/e2e/uat/entities/posts/list.bdd.md +340 -0
  228. package/tests/cypress/e2e/uat/entities/posts/list.cy.ts +177 -0
  229. package/tests/cypress/e2e/uat/entities/posts/public.bdd.md +614 -0
  230. package/tests/cypress/e2e/uat/entities/posts/public.cy.ts +249 -0
  231. package/tests/cypress/e2e/uat/entities/tasks/member.bdd.md +222 -0
  232. package/tests/cypress/e2e/uat/entities/tasks/member.cy.ts +165 -0
  233. package/tests/cypress/e2e/uat/entities/tasks/owner.bdd.md +419 -0
  234. package/tests/cypress/e2e/uat/entities/tasks/owner.cy.ts +191 -0
  235. package/tests/cypress/e2e/uat/features/roles/editor-role.bdd.md +552 -0
  236. package/tests/cypress/e2e/uat/features/roles/editor-role.cy.ts +210 -0
  237. package/tests/cypress/e2e/uat/features/roles/member-restrictions.bdd.md +450 -0
  238. package/tests/cypress/e2e/uat/features/roles/member-restrictions.cy.ts +189 -0
  239. package/tests/cypress/e2e/uat/features/roles/owner-full-crud.bdd.md +530 -0
  240. package/tests/cypress/e2e/uat/features/roles/owner-full-crud.cy.ts +247 -0
  241. package/tests/cypress/fixtures/blocks.json +218 -0
  242. package/tests/cypress/fixtures/entities.json +87 -0
  243. package/tests/cypress/fixtures/page-builder.json +21 -0
  244. package/tests/cypress/src/components/CategoriesPOM.ts +382 -0
  245. package/tests/cypress/src/components/CustomersPOM.ts +439 -0
  246. package/tests/cypress/src/components/DevKeyringPOM.ts +160 -0
  247. package/tests/cypress/src/components/EntityForm.ts +375 -0
  248. package/tests/cypress/src/components/EntityList.ts +389 -0
  249. package/tests/cypress/src/components/PageBuilderPOM.ts +710 -0
  250. package/tests/cypress/src/components/PostEditorPOM.ts +370 -0
  251. package/tests/cypress/src/components/PostsListPOM.ts +223 -0
  252. package/tests/cypress/src/components/PublicPagePOM.ts +447 -0
  253. package/tests/cypress/src/components/PublicPostPOM.ts +146 -0
  254. package/tests/cypress/src/components/TasksPOM.ts +272 -0
  255. package/tests/cypress/src/components/TeamSwitcherPOM.ts +450 -0
  256. package/tests/cypress/src/components/index.ts +21 -0
  257. package/tests/cypress/src/controllers/ApiKeysAPIController.js +178 -0
  258. package/tests/cypress/src/controllers/BaseAPIController.js +317 -0
  259. package/tests/cypress/src/controllers/CustomerAPIController.js +251 -0
  260. package/tests/cypress/src/controllers/MediaAPIController.js +231 -0
  261. package/tests/cypress/src/controllers/PagesAPIController.js +226 -0
  262. package/tests/cypress/src/controllers/PostsAPIController.js +250 -0
  263. package/tests/cypress/src/controllers/TaskAPIController.js +240 -0
  264. package/tests/cypress/src/controllers/UsersAPIController.js +242 -0
  265. package/tests/cypress/src/controllers/index.js +25 -0
  266. package/tests/cypress/src/core/AuthPOM.ts +450 -0
  267. package/tests/cypress/src/core/BasePOM.ts +33 -0
  268. package/tests/cypress/src/core/BlockEditorBasePOM.ts +874 -0
  269. package/tests/cypress/src/core/DashboardEntityPOM.ts +41 -0
  270. package/tests/cypress/src/core/index.ts +14 -0
  271. package/tests/cypress/src/entities/CustomersPOM.ts +172 -0
  272. package/tests/cypress/src/entities/PagesPOM.ts +137 -0
  273. package/tests/cypress/src/entities/PatternsPOM.ts +329 -0
  274. package/tests/cypress/src/entities/PostsPOM.ts +137 -0
  275. package/tests/cypress/src/entities/TasksPOM.ts +246 -0
  276. package/tests/cypress/src/entities/index.ts +16 -0
  277. package/tests/cypress/src/features/BillingPOM.ts +385 -0
  278. package/tests/cypress/src/features/DashboardPOM.ts +271 -0
  279. package/tests/cypress/src/features/DevtoolsPOM.ts +750 -0
  280. package/tests/cypress/src/features/PageBuilderPOM.ts +283 -0
  281. package/tests/cypress/src/features/PostEditorPOM.ts +313 -0
  282. package/tests/cypress/src/features/ScheduledActionsPOM.ts +463 -0
  283. package/tests/cypress/src/features/SettingsPOM.ts +707 -0
  284. package/tests/cypress/src/features/SuperadminPOM.ts +851 -0
  285. package/tests/cypress/src/features/SuperadminTeamRolesPOM.ts +285 -0
  286. package/tests/cypress/src/features/index.ts +28 -0
  287. package/tests/cypress/src/helpers/ApiInterceptor.ts +20 -0
  288. package/tests/cypress/src/index.ts +101 -0
  289. package/tests/cypress/src/pages/dashboard/Dashboard.js +677 -0
  290. package/tests/cypress/src/pages/dashboard/DashboardPage.js +43 -0
  291. package/tests/cypress/src/pages/dashboard/DashboardStats.js +546 -0
  292. package/tests/cypress/src/pages/dashboard/index.js +6 -0
  293. package/tests/cypress/src/pages/index.js +5 -0
  294. package/tests/cypress/src/pages/public/FeaturesPage.js +28 -0
  295. package/tests/cypress/src/pages/public/LandingPage.js +69 -0
  296. package/tests/cypress/src/pages/public/PricingPage.js +33 -0
  297. package/tests/cypress/src/pages/public/index.js +6 -0
  298. package/tests/cypress/src/selectors.ts +46 -0
  299. package/tests/cypress/src/session-helpers.ts +518 -0
  300. package/tests/cypress/support/doc-commands.ts +260 -0
  301. package/tests/cypress/support/e2e.ts +90 -0
  302. package/tests/cypress.config.ts +178 -0
  303. package/tests/jest/__mocks__/@nextsparkjs/core/components/ui/badge.js +16 -0
  304. package/tests/jest/__mocks__/@nextsparkjs/core/lib/db.js +11 -0
  305. package/tests/jest/__mocks__/@nextsparkjs/registries/permissions-registry.ts +160 -0
  306. package/tests/jest/__mocks__/@nextsparkjs/registries/theme-registry.ts +68 -0
  307. package/tests/jest/__mocks__/jose.js +22 -0
  308. package/tests/jest/__mocks__/next/image.js +15 -0
  309. package/tests/jest/__mocks__/next-server.js +56 -0
  310. package/tests/jest/components/post-header.test.tsx +377 -0
  311. package/tests/jest/jest.config.cjs +154 -0
  312. package/tests/jest/langchain/COVERAGE.md +372 -0
  313. package/tests/jest/langchain/guardrails.test.ts +465 -0
  314. package/tests/jest/langchain/streaming.test.ts +370 -0
  315. package/tests/jest/langchain/token-tracker.test.ts +455 -0
  316. package/tests/jest/langchain/tracer-callbacks.test.ts +881 -0
  317. package/tests/jest/langchain/tracer.test.ts +823 -0
  318. package/tests/jest/services/tasks.service.test.ts +707 -0
  319. package/tests/jest/setup.ts +170 -0
  320. package/tests/jest/tsconfig.jest.json +6 -0
  321. package/tests/jest/validation/categories.test.ts +429 -0
  322. package/tests/jest/validation/posts.test.ts +546 -0
  323. package/tests/tsconfig.json +21 -0
  324. /package/docs/{02-features → public/02-features}/01-components.md +0 -0
  325. /package/docs/{02-features → public/02-features}/02-styling.md +0 -0
@@ -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/lib/test/selector-factory'
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: DEVTOOLS_SELECTORS,
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/lib/test/selector-factory'
199
+ export type { Replacements } from '@nextsparkjs/core/selectors'
197
200
  export { CORE_SELECTORS }
@@ -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
  }
@@ -214,6 +214,62 @@
214
214
  "messages": {
215
215
  "saved": "Saved successfully",
216
216
  "created": "Created successfully"
217
+ },
218
+ "header": {
219
+ "actions": {
220
+ "saveDraft": "Save Draft",
221
+ "publish": "Publish",
222
+ "update": "Update"
223
+ }
224
+ },
225
+ "canvas": {
226
+ "empty": {
227
+ "title": "No blocks yet",
228
+ "subtitle": "Add blocks from the left sidebar"
229
+ },
230
+ "editingBadge": "Editing",
231
+ "error": {
232
+ "blockNotFound": "Block not found"
233
+ }
234
+ },
235
+ "floatingToolbar": {
236
+ "drag": "Drag to reorder",
237
+ "duplicate": "Duplicate block",
238
+ "delete": "Delete block"
239
+ },
240
+ "settingsPanel": {
241
+ "title": "Block Properties",
242
+ "empty": {
243
+ "message": "No block selected",
244
+ "hint": "Select a block from the canvas to edit its settings"
245
+ },
246
+ "error": {
247
+ "notFound": "Block configuration not found"
248
+ },
249
+ "actions": {
250
+ "reset": "Reset",
251
+ "remove": "Remove"
252
+ },
253
+ "tabs": {
254
+ "content": "Content",
255
+ "design": "Design",
256
+ "advanced": "Advanced",
257
+ "noContentFields": "No content fields",
258
+ "noDesignFields": "No design fields",
259
+ "noAdvancedFields": "No advanced fields"
260
+ },
261
+ "noFields": "This block has no configurable fields",
262
+ "pattern": {
263
+ "title": "Pattern Reference",
264
+ "locked": {
265
+ "title": "Pattern is read-only",
266
+ "description": "To edit this pattern's content, edit the pattern directly. Changes will be reflected everywhere it's used."
267
+ },
268
+ "actions": {
269
+ "edit": "Edit Pattern",
270
+ "remove": "Remove from page"
271
+ }
272
+ }
217
273
  }
218
274
  }
219
275
  }
@@ -4,5 +4,6 @@
4
4
  "support": "Support",
5
5
  "docs": "Documentation",
6
6
  "dashboard": "Dashboard",
7
- "pages": "Pages"
7
+ "pages": "Pages",
8
+ "media": "Media"
8
9
  }
@@ -214,6 +214,62 @@
214
214
  "messages": {
215
215
  "saved": "Guardado exitosamente",
216
216
  "created": "Creado exitosamente"
217
+ },
218
+ "header": {
219
+ "actions": {
220
+ "saveDraft": "Guardar Borrador",
221
+ "publish": "Publicar",
222
+ "update": "Actualizar"
223
+ }
224
+ },
225
+ "canvas": {
226
+ "empty": {
227
+ "title": "Aún no hay bloques",
228
+ "subtitle": "Agrega bloques desde la barra lateral izquierda"
229
+ },
230
+ "editingBadge": "Editando",
231
+ "error": {
232
+ "blockNotFound": "Bloque no encontrado"
233
+ }
234
+ },
235
+ "floatingToolbar": {
236
+ "drag": "Arrastra para reordenar",
237
+ "duplicate": "Duplicar bloque",
238
+ "delete": "Eliminar bloque"
239
+ },
240
+ "settingsPanel": {
241
+ "title": "Propiedades del Bloque",
242
+ "empty": {
243
+ "message": "Ningún bloque seleccionado",
244
+ "hint": "Selecciona un bloque del canvas para editar su configuración"
245
+ },
246
+ "error": {
247
+ "notFound": "Configuración del bloque no encontrada"
248
+ },
249
+ "actions": {
250
+ "reset": "Restablecer",
251
+ "remove": "Eliminar"
252
+ },
253
+ "tabs": {
254
+ "content": "Contenido",
255
+ "design": "Diseño",
256
+ "advanced": "Avanzado",
257
+ "noContentFields": "Sin campos de contenido",
258
+ "noDesignFields": "Sin campos de diseño",
259
+ "noAdvancedFields": "Sin campos avanzados"
260
+ },
261
+ "noFields": "Este bloque no tiene campos configurables",
262
+ "pattern": {
263
+ "title": "Referencia de Patrón",
264
+ "locked": {
265
+ "title": "El patrón es de solo lectura",
266
+ "description": "Para editar el contenido de este patrón, edítalo directamente. Los cambios se reflejarán en todos los lugares donde se usa."
267
+ },
268
+ "actions": {
269
+ "edit": "Editar Patrón",
270
+ "remove": "Quitar de la página"
271
+ }
272
+ }
217
273
  }
218
274
  }
219
275
  }