@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,247 @@
1
+ /// <reference types="cypress" />
2
+
3
+ /**
4
+ * Owner Role - Full CRUD Permissions
5
+ *
6
+ * Tests to verify that Owner role maintains full CRUD access to customers.
7
+ * This validates that extensible roles don't break existing owner capabilities.
8
+ *
9
+ * Test user: Carlos Mendoza (carlos.mendoza@nextspark.dev) - Everpoint Labs
10
+ */
11
+
12
+ import * as allure from 'allure-cypress'
13
+
14
+ import { CustomersPOM } from '../../../../src/entities/CustomersPOM'
15
+ import { loginAsDefaultOwner } from '../../../../src/session-helpers'
16
+
17
+ describe('Owner Role - Full CRUD Permissions', {
18
+ tags: ['@uat', '@feat-teams', '@security', '@role-owner', '@regression']
19
+ }, () => {
20
+ const customers = CustomersPOM.create()
21
+
22
+ beforeEach(() => {
23
+ allure.epic('UAT')
24
+ allure.feature('Permissions')
25
+ allure.story('Owner Full CRUD')
26
+ customers.setupApiIntercepts()
27
+ loginAsDefaultOwner()
28
+ })
29
+
30
+ describe('UI Access - All Buttons Visible', { tags: '@smoke' }, () => {
31
+ it('OWNER_CRUD_001: Owner sees Add button on customers list', { tags: '@smoke' }, () => {
32
+ allure.severity('critical')
33
+
34
+ customers.visitList()
35
+ customers.api.waitForList()
36
+ customers.waitForList()
37
+
38
+ // Owner should see the Add button
39
+ cy.get(customers.selectors.addButton).should('be.visible')
40
+
41
+ cy.log('✅ Owner can see Add button')
42
+ })
43
+
44
+ it('OWNER_CRUD_002: Owner sees row actions menu on customer rows', { tags: '@smoke' }, () => {
45
+ allure.severity('critical')
46
+
47
+ customers.visitList()
48
+ customers.api.waitForList()
49
+ customers.waitForList()
50
+
51
+ cy.get('body').then($body => {
52
+ if ($body.find(customers.selectors.rowGeneric).length > 0) {
53
+ // Row actions menu trigger should be visible (Owner has edit/delete permissions)
54
+ cy.get(`[data-cy^="${customers.entitySlug}-menu-"]`).first().should('be.visible')
55
+
56
+ cy.log('✅ Owner can see row actions menu on rows')
57
+ } else {
58
+ cy.log('⚠️ No customers to check row actions')
59
+ }
60
+ })
61
+ })
62
+
63
+ it('OWNER_CRUD_003: Owner sees Edit and Delete options in row menu', () => {
64
+ allure.severity('critical')
65
+
66
+ customers.visitList()
67
+ customers.api.waitForList()
68
+ customers.waitForList()
69
+
70
+ cy.get('body').then($body => {
71
+ if ($body.find(customers.selectors.rowGeneric).length > 0) {
72
+ // Open the first row's menu
73
+ cy.get(`[data-cy^="${customers.entitySlug}-menu-"]`).first().click()
74
+
75
+ // Edit and Delete options should be visible in the dropdown
76
+ cy.get('[role="menuitem"]').contains('Edit').should('be.visible')
77
+ cy.get('[role="menuitem"]').contains('Delete').should('be.visible')
78
+
79
+ // Close dropdown by pressing escape
80
+ cy.get('body').type('{esc}')
81
+
82
+ cy.log('✅ Owner can see Edit and Delete in row menu')
83
+ } else {
84
+ cy.log('⚠️ No customers to check row menu')
85
+ }
86
+ })
87
+ })
88
+ })
89
+
90
+ describe('CRUD Operations - Full Access', () => {
91
+ it('OWNER_CRUD_004: Owner can access customer create form', () => {
92
+ allure.severity('critical')
93
+
94
+ customers.visitList()
95
+ customers.api.waitForList()
96
+
97
+ // Click Add button
98
+ cy.get(customers.selectors.addButton).click()
99
+
100
+ // Should navigate to create form
101
+ cy.url().should('include', '/create')
102
+ customers.waitForForm()
103
+
104
+ cy.log('✅ Owner can access customer create form')
105
+ })
106
+
107
+ it('OWNER_CRUD_005: Owner can access create form and see submit button', () => {
108
+ allure.severity('critical')
109
+
110
+ customers.visitCreate()
111
+ customers.waitForForm()
112
+
113
+ // Owner should see the form fields
114
+ cy.get(`[data-cy="${customers.entitySlug}-field-name"]`).should('be.visible')
115
+ cy.get(`[data-cy="${customers.entitySlug}-field-account"]`).should('be.visible')
116
+
117
+ // Owner should see the submit button
118
+ cy.get(`[data-cy="${customers.entitySlug}-form-submit"]`).should('be.visible')
119
+
120
+ cy.log('✅ Owner can access create form with submit capability')
121
+ })
122
+
123
+ it('OWNER_CRUD_006: Owner can access customer edit form', () => {
124
+ allure.severity('critical')
125
+
126
+ customers.visitList()
127
+ customers.api.waitForList()
128
+ customers.waitForList()
129
+
130
+ cy.get('body').then($body => {
131
+ if ($body.find(customers.selectors.rowGeneric).length > 0) {
132
+ // Open the first row's menu and click Edit
133
+ cy.get(`[data-cy^="${customers.entitySlug}-menu-"]`).first().click()
134
+ cy.get('[role="menuitem"]').contains('Edit').click()
135
+
136
+ // Should navigate to edit form
137
+ cy.url().should('include', '/edit')
138
+ customers.waitForForm()
139
+
140
+ cy.log('✅ Owner can access customer edit form')
141
+ } else {
142
+ cy.log('⚠️ No customers to test edit access')
143
+ }
144
+ })
145
+ })
146
+
147
+ it('OWNER_CRUD_007: Owner can access edit form with submit capability', () => {
148
+ allure.severity('critical')
149
+
150
+ customers.visitList()
151
+ customers.api.waitForList()
152
+ customers.waitForList()
153
+
154
+ cy.get('body').then($body => {
155
+ if ($body.find(customers.selectors.rowGeneric).length > 0) {
156
+ // Open the first row's menu and click Edit
157
+ cy.get(`[data-cy^="${customers.entitySlug}-menu-"]`).first().click()
158
+ cy.get('[role="menuitem"]').contains('Edit').click()
159
+ customers.waitForForm()
160
+
161
+ // Owner should see the form fields
162
+ cy.get(`[data-cy="${customers.entitySlug}-field-name"]`).should('be.visible')
163
+
164
+ // Owner should see the submit button
165
+ cy.get(`[data-cy="${customers.entitySlug}-form-submit"]`).should('be.visible')
166
+
167
+ cy.log('✅ Owner can access edit form with submit capability')
168
+ } else {
169
+ cy.log('⚠️ No customers to test edit access')
170
+ }
171
+ })
172
+ })
173
+
174
+ it('OWNER_CRUD_008: Owner can see Delete option in row menu', () => {
175
+ allure.severity('critical')
176
+
177
+ customers.visitList()
178
+ customers.api.waitForList()
179
+ customers.waitForList()
180
+
181
+ cy.get('body').then($body => {
182
+ if ($body.find(customers.selectors.rowGeneric).length > 0) {
183
+ // Open the first row's menu
184
+ cy.get(`[data-cy^="${customers.entitySlug}-menu-"]`).first().click()
185
+
186
+ // Owner should see the Delete option (this verifies delete permission)
187
+ cy.get('[role="menuitem"]').contains('Delete').should('be.visible')
188
+
189
+ // Close dropdown
190
+ cy.get('body').type('{esc}')
191
+
192
+ cy.log('✅ Owner can see Delete option in row menu')
193
+ } else {
194
+ cy.log('⚠️ No customers to test delete capability')
195
+ }
196
+ })
197
+ })
198
+ })
199
+
200
+ describe('Direct URL Access - Full Access', () => {
201
+ it('OWNER_CRUD_009: Owner can access /customers/create via URL', () => {
202
+ cy.visit(`/dashboard/${customers.entitySlug}/create`)
203
+
204
+ // Should NOT show permission denied
205
+ cy.get('[data-cy="permission-denied"]').should('not.exist')
206
+
207
+ // Should show form
208
+ customers.waitForForm()
209
+
210
+ cy.log('✅ Owner can access create via direct URL')
211
+ })
212
+
213
+ it('OWNER_CRUD_010: Owner can access /customers/[id]/edit via URL', () => {
214
+ customers.visitList()
215
+ customers.api.waitForList()
216
+
217
+ cy.get('body').then($body => {
218
+ if ($body.find(customers.selectors.rowGeneric).length > 0) {
219
+ // Extract customer ID
220
+ cy.get(customers.selectors.rowGeneric).first()
221
+ .invoke('attr', 'data-cy')
222
+ .then((dataCy) => {
223
+ const customerId = dataCy?.replace(`${customers.entitySlug}-row-`, '')
224
+
225
+ if (customerId) {
226
+ cy.visit(`/dashboard/${customers.entitySlug}/${customerId}/edit`)
227
+
228
+ // Should NOT show permission denied
229
+ cy.get('[data-cy="permission-denied"]').should('not.exist')
230
+
231
+ // Should show form
232
+ customers.waitForForm()
233
+
234
+ cy.log('✅ Owner can access edit via direct URL')
235
+ }
236
+ })
237
+ } else {
238
+ cy.log('⚠️ No customers to test direct URL edit')
239
+ }
240
+ })
241
+ })
242
+ })
243
+
244
+ after(() => {
245
+ cy.log('✅ Owner CRUD permission tests completed')
246
+ })
247
+ })
@@ -0,0 +1,218 @@
1
+ {
2
+ "$schema": "./blocks.schema.json",
3
+ "_warning": "AUTO-GENERATED by build-registry.mjs - DO NOT EDIT MANUALLY",
4
+ "_theme": "default",
5
+ "_totalBlocks": 16,
6
+ "available": [
7
+ {
8
+ "slug": "benefits",
9
+ "name": "Benefits Grid",
10
+ "description": "3-column grid showcasing benefits with optional colored top borders",
11
+ "category": "features",
12
+ "icon": "LayoutGrid",
13
+ "scope": [
14
+ "pages"
15
+ ]
16
+ },
17
+ {
18
+ "slug": "cta-section",
19
+ "name": "CTA Section",
20
+ "description": "Call-to-action section with title, description, and action buttons",
21
+ "category": "cta",
22
+ "icon": "Megaphone",
23
+ "scope": [
24
+ "pages"
25
+ ]
26
+ },
27
+ {
28
+ "slug": "faq-accordion",
29
+ "name": "FAQ Accordion",
30
+ "description": "A frequently asked questions section with expandable/collapsible accordion items",
31
+ "category": "faq",
32
+ "icon": "HelpCircle",
33
+ "scope": [
34
+ "pages"
35
+ ]
36
+ },
37
+ {
38
+ "slug": "features-grid",
39
+ "name": "Features Grid",
40
+ "description": "Grid layout displaying multiple features with icons, titles, and descriptions",
41
+ "category": "content",
42
+ "icon": "Grid",
43
+ "scope": [
44
+ "pages"
45
+ ]
46
+ },
47
+ {
48
+ "slug": "hero",
49
+ "name": "Hero Section",
50
+ "description": "Full-width hero section with title, subtitle, CTA button, and background image",
51
+ "category": "hero",
52
+ "icon": "Rocket",
53
+ "scope": [
54
+ "pages",
55
+ "posts"
56
+ ]
57
+ },
58
+ {
59
+ "slug": "hero-with-form",
60
+ "name": "Hero With Form",
61
+ "description": "Full-width hero section with background image, title/subtitle on the left, and a lead capture form card on the right",
62
+ "category": "hero",
63
+ "icon": "FileText",
64
+ "scope": [
65
+ "pages"
66
+ ]
67
+ },
68
+ {
69
+ "slug": "jumbotron",
70
+ "name": "Jumbotron",
71
+ "description": "A large, attention-grabbing hero block with optional fullscreen mode that takes 100% of the viewport height when enabled. Features centered content with support for 1-2 CTAs that automatically center based on count.",
72
+ "category": "hero",
73
+ "icon": "Maximize2",
74
+ "scope": [
75
+ "pages",
76
+ "posts"
77
+ ]
78
+ },
79
+ {
80
+ "slug": "logo-cloud",
81
+ "name": "Logo Cloud",
82
+ "description": "A section displaying client/partner logos in a grid or row layout (",
83
+ "category": "content",
84
+ "icon": "Building2",
85
+ "scope": [
86
+ "pages"
87
+ ]
88
+ },
89
+ {
90
+ "slug": "post-content",
91
+ "name": "Post Content",
92
+ "description": "A rich text content block designed for long-form blog posts with editorial styling similar to Medium. Features beautiful typography, proper spacing, and optional elements like drop caps, pull quotes, and images.",
93
+ "category": "content",
94
+ "icon": "FileText",
95
+ "scope": [
96
+ "posts"
97
+ ]
98
+ },
99
+ {
100
+ "slug": "pricing-table",
101
+ "name": "Pricing Table",
102
+ "description": "A pricing comparison table showing different plans with features list, price, CTA button, and optional ",
103
+ "category": "pricing",
104
+ "icon": "DollarSign",
105
+ "scope": [
106
+ "pages"
107
+ ]
108
+ },
109
+ {
110
+ "slug": "split-content",
111
+ "name": "Split Content",
112
+ "description": "A two-column section with image on one side and text content on the other, with option to reverse the order",
113
+ "category": "content",
114
+ "icon": "LayoutGrid",
115
+ "scope": [
116
+ "pages",
117
+ "posts"
118
+ ]
119
+ },
120
+ {
121
+ "slug": "stats-counter",
122
+ "name": "Stats Counter",
123
+ "description": "A section displaying key metrics/statistics with large numbers and labels (e.g., ",
124
+ "category": "stats",
125
+ "icon": "TrendingUp",
126
+ "scope": [
127
+ "pages",
128
+ "posts"
129
+ ]
130
+ },
131
+ {
132
+ "slug": "testimonials",
133
+ "name": "Testimonials",
134
+ "description": "Display customer testimonials with quotes, authors, and avatars",
135
+ "category": "testimonials",
136
+ "icon": "Quote",
137
+ "scope": [
138
+ "pages"
139
+ ]
140
+ },
141
+ {
142
+ "slug": "text-content",
143
+ "name": "Text Content",
144
+ "description": "Rich text content block for paragraphs, lists, and formatted text",
145
+ "category": "content",
146
+ "icon": "FileText",
147
+ "scope": [
148
+ "pages"
149
+ ]
150
+ },
151
+ {
152
+ "slug": "timeline",
153
+ "name": "Timeline",
154
+ "description": "A vertical or horizontal timeline showing chronological events, process steps, or history",
155
+ "category": "content",
156
+ "icon": "GitBranch",
157
+ "scope": [
158
+ "pages",
159
+ "posts"
160
+ ]
161
+ },
162
+ {
163
+ "slug": "video-hero",
164
+ "name": "Video Hero",
165
+ "description": "A hero section with embedded video (YouTube/Vimeo) either as background or inline, with title, subtitle, and optional CTA",
166
+ "category": "hero",
167
+ "icon": "Video",
168
+ "scope": [
169
+ "pages",
170
+ "posts"
171
+ ]
172
+ }
173
+ ],
174
+ "categories": [
175
+ "content",
176
+ "cta",
177
+ "faq",
178
+ "features",
179
+ "hero",
180
+ "pricing",
181
+ "stats",
182
+ "testimonials"
183
+ ],
184
+ "byCategory": {
185
+ "features": [
186
+ "benefits"
187
+ ],
188
+ "cta": [
189
+ "cta-section"
190
+ ],
191
+ "faq": [
192
+ "faq-accordion"
193
+ ],
194
+ "content": [
195
+ "features-grid",
196
+ "logo-cloud",
197
+ "post-content",
198
+ "split-content",
199
+ "text-content",
200
+ "timeline"
201
+ ],
202
+ "hero": [
203
+ "hero",
204
+ "hero-with-form",
205
+ "jumbotron",
206
+ "video-hero"
207
+ ],
208
+ "pricing": [
209
+ "pricing-table"
210
+ ],
211
+ "stats": [
212
+ "stats-counter"
213
+ ],
214
+ "testimonials": [
215
+ "testimonials"
216
+ ]
217
+ }
218
+ }
@@ -0,0 +1,87 @@
1
+ {
2
+ "$schema": "./entities.schema.json",
3
+ "_warning": "AUTO-GENERATED by build-registry.mjs - DO NOT EDIT MANUALLY",
4
+ "_theme": "default",
5
+ "entities": {
6
+ "patterns": {
7
+ "slug": "patterns",
8
+ "singular": "pattern",
9
+ "plural": "Patterns",
10
+ "tableName": "patterns",
11
+ "fields": [],
12
+ "filters": [],
13
+ "source": "core"
14
+ },
15
+ "customers": {
16
+ "slug": "customers",
17
+ "singular": "customer",
18
+ "plural": "Customers",
19
+ "tableName": "customers",
20
+ "fields": [
21
+ "name",
22
+ "account",
23
+ "office",
24
+ "phone",
25
+ "salesRep",
26
+ "visitDays",
27
+ "contactDays"
28
+ ],
29
+ "filters": [],
30
+ "source": "theme"
31
+ },
32
+ "pages": {
33
+ "slug": "pages",
34
+ "singular": "page",
35
+ "plural": "Pages",
36
+ "tableName": "pages",
37
+ "fields": [
38
+ "title",
39
+ "slug",
40
+ "status",
41
+ "locale"
42
+ ],
43
+ "filters": [
44
+ "status"
45
+ ],
46
+ "source": "theme"
47
+ },
48
+ "posts": {
49
+ "slug": "posts",
50
+ "singular": "post",
51
+ "plural": "Posts",
52
+ "tableName": "posts",
53
+ "fields": [
54
+ "title",
55
+ "slug",
56
+ "status",
57
+ "excerpt",
58
+ "featuredImage"
59
+ ],
60
+ "filters": [
61
+ "status"
62
+ ],
63
+ "source": "theme"
64
+ },
65
+ "tasks": {
66
+ "slug": "tasks",
67
+ "singular": "task",
68
+ "plural": "Tasks",
69
+ "tableName": "tasks",
70
+ "fields": [
71
+ "title",
72
+ "description",
73
+ "status",
74
+ "priority",
75
+ "tags",
76
+ "dueDate",
77
+ "estimatedHours",
78
+ "completed"
79
+ ],
80
+ "filters": [
81
+ "status",
82
+ "priority"
83
+ ],
84
+ "source": "theme"
85
+ }
86
+ }
87
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "$schema": "./page-builder.schema.json",
3
+ "_comment": "Test data for existing pages (from sample data). API/routes handled by POMs.",
4
+ "_lastUpdated": "2025-12-27",
5
+
6
+ "existingPages": {
7
+ "aboutUs": {
8
+ "slug": "about-us",
9
+ "locale": "en",
10
+ "expectedBlocks": ["hero", "text-content", "features-grid", "cta-section", "testimonials", "cta-section", "benefits"]
11
+ },
12
+ "contact": {
13
+ "slug": "contact",
14
+ "locale": "en"
15
+ },
16
+ "services": {
17
+ "slug": "services",
18
+ "locale": "en"
19
+ }
20
+ }
21
+ }