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

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 (330) 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 +75 -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/090_demo_users_teams.sql +11 -11
  65. package/migrations/091_greek_teams_billing.sql +15 -15
  66. package/migrations/093_pages_sample_data.sql +7 -7
  67. package/migrations/098_patterns_sample_data.sql +234 -0
  68. package/package.json +8 -3
  69. package/styles/globals.css +42 -0
  70. package/templates/(public)/blog/[slug]/page.tsx +1 -1
  71. package/templates/(public)/page.tsx +1 -1
  72. package/tests/cypress/e2e/_utils/devtools/access.bdd.md +262 -0
  73. package/tests/cypress/e2e/_utils/devtools/access.cy.ts +171 -0
  74. package/tests/cypress/e2e/_utils/devtools/navigation.bdd.md +261 -0
  75. package/tests/cypress/e2e/_utils/devtools/navigation.cy.ts +157 -0
  76. package/tests/cypress/e2e/_utils/devtools/pages.bdd.md +303 -0
  77. package/tests/cypress/e2e/_utils/devtools/pages.cy.ts +184 -0
  78. package/tests/cypress/e2e/_utils/docs/README.md +215 -0
  79. package/tests/cypress/e2e/_utils/selectors/auth.bdd.md +354 -0
  80. package/tests/cypress/e2e/_utils/selectors/auth.cy.ts +310 -0
  81. package/tests/cypress/e2e/_utils/selectors/billing.bdd.md +276 -0
  82. package/tests/cypress/e2e/_utils/selectors/billing.cy.ts +182 -0
  83. package/tests/cypress/e2e/_utils/selectors/block-editor.bdd.md +615 -0
  84. package/tests/cypress/e2e/_utils/selectors/block-editor.cy.ts +783 -0
  85. package/tests/cypress/e2e/_utils/selectors/dashboard-container.cy.ts +52 -0
  86. package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.bdd.md +205 -0
  87. package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.cy.ts +137 -0
  88. package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.bdd.md +147 -0
  89. package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.cy.ts +114 -0
  90. package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.bdd.md +76 -0
  91. package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.cy.ts +68 -0
  92. package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.bdd.md +326 -0
  93. package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.cy.ts +177 -0
  94. package/tests/cypress/e2e/_utils/selectors/devtools.bdd.md +306 -0
  95. package/tests/cypress/e2e/_utils/selectors/devtools.cy.ts +273 -0
  96. package/tests/cypress/e2e/_utils/selectors/global-search.bdd.md +115 -0
  97. package/tests/cypress/e2e/_utils/selectors/global-search.cy.ts +93 -0
  98. package/tests/cypress/e2e/_utils/selectors/patterns.bdd.md +388 -0
  99. package/tests/cypress/e2e/_utils/selectors/patterns.cy.ts +559 -0
  100. package/tests/cypress/e2e/_utils/selectors/public.cy.ts +112 -0
  101. package/tests/cypress/e2e/_utils/selectors/settings-api-keys.bdd.md +266 -0
  102. package/tests/cypress/e2e/_utils/selectors/settings-api-keys.cy.ts +233 -0
  103. package/tests/cypress/e2e/_utils/selectors/settings-billing.bdd.md +78 -0
  104. package/tests/cypress/e2e/_utils/selectors/settings-billing.cy.ts +108 -0
  105. package/tests/cypress/e2e/_utils/selectors/settings-layout.bdd.md +129 -0
  106. package/tests/cypress/e2e/_utils/selectors/settings-layout.cy.ts +115 -0
  107. package/tests/cypress/e2e/_utils/selectors/settings-password.bdd.md +82 -0
  108. package/tests/cypress/e2e/_utils/selectors/settings-password.cy.ts +74 -0
  109. package/tests/cypress/e2e/_utils/selectors/settings-profile.bdd.md +77 -0
  110. package/tests/cypress/e2e/_utils/selectors/settings-profile.cy.ts +79 -0
  111. package/tests/cypress/e2e/_utils/selectors/settings-teams.bdd.md +130 -0
  112. package/tests/cypress/e2e/_utils/selectors/settings-teams.cy.ts +86 -0
  113. package/tests/cypress/e2e/_utils/selectors/superadmin.bdd.md +261 -0
  114. package/tests/cypress/e2e/_utils/selectors/superadmin.cy.ts +193 -0
  115. package/tests/cypress/e2e/_utils/selectors/tasks.bdd.md +593 -0
  116. package/tests/cypress/e2e/_utils/selectors/tasks.cy.ts +864 -0
  117. package/tests/cypress/e2e/_utils/selectors/taxonomies.cy.ts +126 -0
  118. package/tests/cypress/e2e/_utils/selectors/teams.bdd.md +278 -0
  119. package/tests/cypress/e2e/_utils/selectors/teams.cy.ts +195 -0
  120. package/tests/cypress/e2e/_utils/superadmin/all-teams.bdd.md +261 -0
  121. package/tests/cypress/e2e/_utils/superadmin/all-teams.cy.ts +177 -0
  122. package/tests/cypress/e2e/_utils/superadmin/all-users.bdd.md +406 -0
  123. package/tests/cypress/e2e/_utils/superadmin/all-users.cy.ts +294 -0
  124. package/tests/cypress/e2e/_utils/superadmin/dashboard.bdd.md +235 -0
  125. package/tests/cypress/e2e/_utils/superadmin/dashboard.cy.ts +149 -0
  126. package/tests/cypress/e2e/_utils/superadmin/subscriptions-overview.bdd.md +290 -0
  127. package/tests/cypress/e2e/_utils/superadmin/subscriptions-overview.cy.ts +194 -0
  128. package/tests/cypress/e2e/ai/ai-usage.cy.ts +209 -0
  129. package/tests/cypress/e2e/ai/chat-api.cy.ts +119 -0
  130. package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
  131. package/tests/cypress/e2e/api/_core/billing/BillingAPIController.js +319 -0
  132. package/tests/cypress/e2e/api/_core/billing/check-action.cy.ts +326 -0
  133. package/tests/cypress/e2e/api/_core/billing/checkout.cy.ts +358 -0
  134. package/tests/cypress/e2e/api/_core/billing/lifecycle.cy.ts +423 -0
  135. package/tests/cypress/e2e/api/_core/billing/plans/README.md +345 -0
  136. package/tests/cypress/e2e/api/_core/billing/plans/business.cy.ts +412 -0
  137. package/tests/cypress/e2e/api/_core/billing/plans/downgrade.cy.ts +510 -0
  138. package/tests/cypress/e2e/api/_core/billing/plans/fixtures/billing-plans.json +163 -0
  139. package/tests/cypress/e2e/api/_core/billing/plans/free.cy.ts +500 -0
  140. package/tests/cypress/e2e/api/_core/billing/plans/pro.cy.ts +497 -0
  141. package/tests/cypress/e2e/api/_core/billing/plans/starter.cy.ts +342 -0
  142. package/tests/cypress/e2e/api/_core/billing/portal.cy.ts +313 -0
  143. package/tests/cypress/e2e/api/_core/devtools/registries.bdd.md +300 -0
  144. package/tests/cypress/e2e/api/_core/devtools/registries.cy.ts +368 -0
  145. package/tests/cypress/e2e/api/_core/scheduled-actions/cron-endpoint.bdd.md +375 -0
  146. package/tests/cypress/e2e/api/_core/scheduled-actions/cron-endpoint.cy.ts +346 -0
  147. package/tests/cypress/e2e/api/_core/scheduled-actions/devtools-endpoint.bdd.md +451 -0
  148. package/tests/cypress/e2e/api/_core/scheduled-actions/devtools-endpoint.cy.ts +447 -0
  149. package/tests/cypress/e2e/api/_core/scheduled-actions/scheduling.bdd.md +649 -0
  150. package/tests/cypress/e2e/api/_core/scheduled-actions/scheduling.cy.ts +333 -0
  151. package/tests/cypress/e2e/api/_core/security/security-headers.cy.ts +601 -0
  152. package/tests/cypress/e2e/api/_core/settings/api-keys.crud.cy.ts +923 -0
  153. package/tests/cypress/e2e/api/_core/teams/teams-security.cy.ts +415 -0
  154. package/tests/cypress/e2e/api/_core/users/users-crud.cy.ts +469 -0
  155. package/tests/cypress/e2e/api/_core/users/users-metas.cy.ts +913 -0
  156. package/tests/cypress/e2e/api/_core/users/users-security.cy.ts +375 -0
  157. package/tests/cypress/e2e/api/entities/customers/customers-crud.cy.ts +648 -0
  158. package/tests/cypress/e2e/api/entities/customers/customers-metas.cy.ts +839 -0
  159. package/tests/cypress/e2e/api/entities/media/media-crud.cy.ts +600 -0
  160. package/tests/cypress/e2e/api/entities/media/media-role-permissions.cy.ts +617 -0
  161. package/tests/cypress/e2e/api/entities/media/media-team-isolation.cy.ts +464 -0
  162. package/tests/cypress/e2e/api/entities/pages/blocks-scope.cy.ts +396 -0
  163. package/tests/cypress/e2e/api/entities/pages/pages-crud.cy.ts +425 -0
  164. package/tests/cypress/e2e/api/entities/pages/pages-status.cy.ts +335 -0
  165. package/tests/cypress/e2e/api/entities/posts/post-categories-crud.cy.ts +610 -0
  166. package/tests/cypress/e2e/api/entities/posts/posts-crud.cy.ts +709 -0
  167. package/tests/cypress/e2e/api/entities/posts/posts-status.cy.ts +396 -0
  168. package/tests/cypress/e2e/api/entities/tasks/tasks-crud.cy.ts +602 -0
  169. package/tests/cypress/e2e/api/entities/tasks/tasks-metas.cy.ts +878 -0
  170. package/tests/cypress/e2e/patterns/patterns-in-pages.cy.ts +367 -0
  171. package/tests/cypress/e2e/uat/_core/auth/app-roles/developer-login.bdd.md +231 -0
  172. package/tests/cypress/e2e/uat/_core/auth/app-roles/developer-login.cy.ts +144 -0
  173. package/tests/cypress/e2e/uat/_core/auth/app-roles/superadmin-login.bdd.md +118 -0
  174. package/tests/cypress/e2e/uat/_core/auth/app-roles/superadmin-login.cy.ts +84 -0
  175. package/tests/cypress/e2e/uat/_core/auth/custom-roles/editor-login.bdd.md +288 -0
  176. package/tests/cypress/e2e/uat/_core/auth/custom-roles/editor-login.cy.ts +188 -0
  177. package/tests/cypress/e2e/uat/_core/auth/login-logout.bdd.md +160 -0
  178. package/tests/cypress/e2e/uat/_core/auth/login-logout.cy.ts +116 -0
  179. package/tests/cypress/e2e/uat/_core/auth/password-reset.bdd.md +289 -0
  180. package/tests/cypress/e2e/uat/_core/auth/password-reset.cy.ts +200 -0
  181. package/tests/cypress/e2e/uat/_core/auth/registration-control-invitation.cy.ts +176 -0
  182. package/tests/cypress/e2e/uat/_core/auth/registration-control-open.cy.ts +131 -0
  183. package/tests/cypress/e2e/uat/_core/auth/registration-control.cy.ts +140 -0
  184. package/tests/cypress/e2e/uat/_core/auth/team-roles/admin-login.bdd.md +225 -0
  185. package/tests/cypress/e2e/uat/_core/auth/team-roles/admin-login.cy.ts +148 -0
  186. package/tests/cypress/e2e/uat/_core/auth/team-roles/member-login.bdd.md +251 -0
  187. package/tests/cypress/e2e/uat/_core/auth/team-roles/member-login.cy.ts +163 -0
  188. package/tests/cypress/e2e/uat/_core/auth/team-roles/owner-login.bdd.md +231 -0
  189. package/tests/cypress/e2e/uat/_core/auth/team-roles/owner-login.cy.ts +141 -0
  190. package/tests/cypress/e2e/uat/_core/billing/extended.bdd.md +273 -0
  191. package/tests/cypress/e2e/uat/_core/billing/extended.cy.ts +209 -0
  192. package/tests/cypress/e2e/uat/_core/billing/feature-gates.bdd.md +407 -0
  193. package/tests/cypress/e2e/uat/_core/billing/feature-gates.cy.ts +307 -0
  194. package/tests/cypress/e2e/uat/_core/billing/page.bdd.md +329 -0
  195. package/tests/cypress/e2e/uat/_core/billing/page.cy.ts +250 -0
  196. package/tests/cypress/e2e/uat/_core/billing/status.bdd.md +190 -0
  197. package/tests/cypress/e2e/uat/_core/billing/status.cy.ts +145 -0
  198. package/tests/cypress/e2e/uat/_core/billing/team-switch.bdd.md +156 -0
  199. package/tests/cypress/e2e/uat/_core/billing/team-switch.cy.ts +122 -0
  200. package/tests/cypress/e2e/uat/_core/billing/usage.bdd.md +218 -0
  201. package/tests/cypress/e2e/uat/_core/billing/usage.cy.ts +176 -0
  202. package/tests/cypress/e2e/uat/_core/blocks/hero.bdd.md +124 -0
  203. package/tests/cypress/e2e/uat/_core/blocks/hero.cy.ts +56 -0
  204. package/tests/cypress/e2e/uat/_core/devtools/api-tester.cy.ts +390 -0
  205. package/tests/cypress/e2e/uat/_core/performance/suspense-loading.cy.ts +134 -0
  206. package/tests/cypress/e2e/uat/_core/scheduled-actions/devtools-ui.bdd.md +736 -0
  207. package/tests/cypress/e2e/uat/_core/scheduled-actions/devtools-ui.cy.ts +740 -0
  208. package/tests/cypress/e2e/uat/_core/teams/inline-edit.cy.ts +278 -0
  209. package/tests/cypress/e2e/uat/_core/teams/roles-matrix.bdd.md +553 -0
  210. package/tests/cypress/e2e/uat/_core/teams/roles-matrix.cy.ts +185 -0
  211. package/tests/cypress/e2e/uat/_core/teams/switcher.bdd.md +1151 -0
  212. package/tests/cypress/e2e/uat/_core/teams/switcher.cy.ts +497 -0
  213. package/tests/cypress/e2e/uat/_core/teams/team-switcher.md +198 -0
  214. package/tests/cypress/e2e/uat/entities/customers/member.bdd.md +275 -0
  215. package/tests/cypress/e2e/uat/entities/customers/member.cy.ts +122 -0
  216. package/tests/cypress/e2e/uat/entities/customers/owner.bdd.md +243 -0
  217. package/tests/cypress/e2e/uat/entities/customers/owner.cy.ts +165 -0
  218. package/tests/cypress/e2e/uat/entities/pages/block-crud.bdd.md +476 -0
  219. package/tests/cypress/e2e/uat/entities/pages/block-crud.cy.ts +486 -0
  220. package/tests/cypress/e2e/uat/entities/pages/block-editor.bdd.md +460 -0
  221. package/tests/cypress/e2e/uat/entities/pages/block-editor.cy.ts +301 -0
  222. package/tests/cypress/e2e/uat/entities/pages/list.bdd.md +432 -0
  223. package/tests/cypress/e2e/uat/entities/pages/list.cy.ts +273 -0
  224. package/tests/cypress/e2e/uat/entities/pages/public-rendering.bdd.md +696 -0
  225. package/tests/cypress/e2e/uat/entities/pages/public-rendering.cy.ts +340 -0
  226. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.bdd.md +161 -0
  227. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.cy.ts +104 -0
  228. package/tests/cypress/e2e/uat/entities/posts/categories.bdd.md +375 -0
  229. package/tests/cypress/e2e/uat/entities/posts/categories.cy.ts +241 -0
  230. package/tests/cypress/e2e/uat/entities/posts/editor.bdd.md +429 -0
  231. package/tests/cypress/e2e/uat/entities/posts/editor.cy.ts +257 -0
  232. package/tests/cypress/e2e/uat/entities/posts/list.bdd.md +340 -0
  233. package/tests/cypress/e2e/uat/entities/posts/list.cy.ts +177 -0
  234. package/tests/cypress/e2e/uat/entities/posts/public.bdd.md +614 -0
  235. package/tests/cypress/e2e/uat/entities/posts/public.cy.ts +249 -0
  236. package/tests/cypress/e2e/uat/entities/tasks/member.bdd.md +222 -0
  237. package/tests/cypress/e2e/uat/entities/tasks/member.cy.ts +165 -0
  238. package/tests/cypress/e2e/uat/entities/tasks/owner.bdd.md +419 -0
  239. package/tests/cypress/e2e/uat/entities/tasks/owner.cy.ts +191 -0
  240. package/tests/cypress/e2e/uat/features/roles/editor-role.bdd.md +552 -0
  241. package/tests/cypress/e2e/uat/features/roles/editor-role.cy.ts +210 -0
  242. package/tests/cypress/e2e/uat/features/roles/member-restrictions.bdd.md +450 -0
  243. package/tests/cypress/e2e/uat/features/roles/member-restrictions.cy.ts +189 -0
  244. package/tests/cypress/e2e/uat/features/roles/owner-full-crud.bdd.md +530 -0
  245. package/tests/cypress/e2e/uat/features/roles/owner-full-crud.cy.ts +247 -0
  246. package/tests/cypress/fixtures/blocks.json +218 -0
  247. package/tests/cypress/fixtures/entities.json +87 -0
  248. package/tests/cypress/fixtures/page-builder.json +21 -0
  249. package/tests/cypress/src/components/CategoriesPOM.ts +382 -0
  250. package/tests/cypress/src/components/CustomersPOM.ts +439 -0
  251. package/tests/cypress/src/components/DevKeyringPOM.ts +160 -0
  252. package/tests/cypress/src/components/EntityForm.ts +375 -0
  253. package/tests/cypress/src/components/EntityList.ts +389 -0
  254. package/tests/cypress/src/components/PageBuilderPOM.ts +710 -0
  255. package/tests/cypress/src/components/PostEditorPOM.ts +370 -0
  256. package/tests/cypress/src/components/PostsListPOM.ts +223 -0
  257. package/tests/cypress/src/components/PublicPagePOM.ts +447 -0
  258. package/tests/cypress/src/components/PublicPostPOM.ts +146 -0
  259. package/tests/cypress/src/components/TasksPOM.ts +272 -0
  260. package/tests/cypress/src/components/TeamSwitcherPOM.ts +450 -0
  261. package/tests/cypress/src/components/index.ts +21 -0
  262. package/tests/cypress/src/controllers/ApiKeysAPIController.js +178 -0
  263. package/tests/cypress/src/controllers/BaseAPIController.js +317 -0
  264. package/tests/cypress/src/controllers/CustomerAPIController.js +251 -0
  265. package/tests/cypress/src/controllers/MediaAPIController.js +231 -0
  266. package/tests/cypress/src/controllers/PagesAPIController.js +226 -0
  267. package/tests/cypress/src/controllers/PostsAPIController.js +250 -0
  268. package/tests/cypress/src/controllers/TaskAPIController.js +240 -0
  269. package/tests/cypress/src/controllers/UsersAPIController.js +242 -0
  270. package/tests/cypress/src/controllers/index.js +25 -0
  271. package/tests/cypress/src/core/AuthPOM.ts +450 -0
  272. package/tests/cypress/src/core/BasePOM.ts +33 -0
  273. package/tests/cypress/src/core/BlockEditorBasePOM.ts +874 -0
  274. package/tests/cypress/src/core/DashboardEntityPOM.ts +41 -0
  275. package/tests/cypress/src/core/index.ts +14 -0
  276. package/tests/cypress/src/entities/CustomersPOM.ts +172 -0
  277. package/tests/cypress/src/entities/PagesPOM.ts +137 -0
  278. package/tests/cypress/src/entities/PatternsPOM.ts +329 -0
  279. package/tests/cypress/src/entities/PostsPOM.ts +137 -0
  280. package/tests/cypress/src/entities/TasksPOM.ts +246 -0
  281. package/tests/cypress/src/entities/index.ts +16 -0
  282. package/tests/cypress/src/features/BillingPOM.ts +385 -0
  283. package/tests/cypress/src/features/DashboardPOM.ts +271 -0
  284. package/tests/cypress/src/features/DevtoolsPOM.ts +750 -0
  285. package/tests/cypress/src/features/PageBuilderPOM.ts +283 -0
  286. package/tests/cypress/src/features/PostEditorPOM.ts +313 -0
  287. package/tests/cypress/src/features/ScheduledActionsPOM.ts +463 -0
  288. package/tests/cypress/src/features/SettingsPOM.ts +707 -0
  289. package/tests/cypress/src/features/SuperadminPOM.ts +851 -0
  290. package/tests/cypress/src/features/SuperadminTeamRolesPOM.ts +285 -0
  291. package/tests/cypress/src/features/index.ts +28 -0
  292. package/tests/cypress/src/helpers/ApiInterceptor.ts +20 -0
  293. package/tests/cypress/src/index.ts +101 -0
  294. package/tests/cypress/src/pages/dashboard/Dashboard.js +677 -0
  295. package/tests/cypress/src/pages/dashboard/DashboardPage.js +43 -0
  296. package/tests/cypress/src/pages/dashboard/DashboardStats.js +546 -0
  297. package/tests/cypress/src/pages/dashboard/index.js +6 -0
  298. package/tests/cypress/src/pages/index.js +5 -0
  299. package/tests/cypress/src/pages/public/FeaturesPage.js +28 -0
  300. package/tests/cypress/src/pages/public/LandingPage.js +69 -0
  301. package/tests/cypress/src/pages/public/PricingPage.js +33 -0
  302. package/tests/cypress/src/pages/public/index.js +6 -0
  303. package/tests/cypress/src/selectors.ts +46 -0
  304. package/tests/cypress/src/session-helpers.ts +518 -0
  305. package/tests/cypress/support/doc-commands.ts +260 -0
  306. package/tests/cypress/support/e2e.ts +90 -0
  307. package/tests/cypress.config.ts +178 -0
  308. package/tests/jest/__mocks__/@nextsparkjs/core/components/ui/badge.js +16 -0
  309. package/tests/jest/__mocks__/@nextsparkjs/core/lib/db.js +11 -0
  310. package/tests/jest/__mocks__/@nextsparkjs/registries/permissions-registry.ts +160 -0
  311. package/tests/jest/__mocks__/@nextsparkjs/registries/theme-registry.ts +68 -0
  312. package/tests/jest/__mocks__/jose.js +22 -0
  313. package/tests/jest/__mocks__/next/image.js +15 -0
  314. package/tests/jest/__mocks__/next-server.js +56 -0
  315. package/tests/jest/components/post-header.test.tsx +377 -0
  316. package/tests/jest/jest.config.cjs +154 -0
  317. package/tests/jest/langchain/COVERAGE.md +372 -0
  318. package/tests/jest/langchain/guardrails.test.ts +465 -0
  319. package/tests/jest/langchain/streaming.test.ts +370 -0
  320. package/tests/jest/langchain/token-tracker.test.ts +455 -0
  321. package/tests/jest/langchain/tracer-callbacks.test.ts +881 -0
  322. package/tests/jest/langchain/tracer.test.ts +823 -0
  323. package/tests/jest/services/tasks.service.test.ts +707 -0
  324. package/tests/jest/setup.ts +170 -0
  325. package/tests/jest/tsconfig.jest.json +6 -0
  326. package/tests/jest/validation/categories.test.ts +429 -0
  327. package/tests/jest/validation/posts.test.ts +546 -0
  328. package/tests/tsconfig.json +21 -0
  329. /package/docs/{02-features → public/02-features}/01-components.md +0 -0
  330. /package/docs/{02-features → public/02-features}/02-styling.md +0 -0
@@ -0,0 +1,276 @@
1
+ ---
2
+ feature: Billing UI Selectors Validation
3
+ priority: high
4
+ tags: [selectors, billing, ui-validation]
5
+ grepTags: [ui-selectors, billing, SEL_BILL_001, SEL_BILL_002, SEL_BILL_003, SEL_BILL_004, SEL_BILL_005, SEL_BILL_006, SEL_BILL_DOC]
6
+ coverage: 7
7
+ ---
8
+
9
+ # Billing UI Selectors Validation
10
+
11
+ > Validates that billing component selectors exist in the DOM. This is a lightweight test that ONLY checks selector presence, not functionality. Most tests are skipped due to permission requirements (OWNER role only) or specific state requirements (paid subscription, downgrade flow).
12
+
13
+ **IMPORTANT:** Billing page requires `settings.billing` permission which only OWNER role has. See also: `settings-billing.cy.ts` for additional billing page selectors.
14
+
15
+ ## @test SEL_BILL_001: Billing Page Structure
16
+
17
+ ### Metadata
18
+ - **Priority:** High
19
+ - **Type:** Selector Validation
20
+ - **Tags:** billing, page, structure
21
+ - **Grep:** `@ui-selectors` `@SEL_BILL_001`
22
+ - **Status:** Skipped - requires OWNER permission
23
+
24
+ ```gherkin:en
25
+ Scenario: Billing page has complete structure
26
+
27
+ Given I am logged in as OWNER
28
+ And I navigate to the billing settings page
29
+ Then I should find the billing main container
30
+ And I should find the billing header
31
+ And I should find the upgrade plan button
32
+ And I should find the add payment button
33
+ ```
34
+
35
+ ```gherkin:es
36
+ Scenario: Pagina de billing tiene estructura completa
37
+
38
+ Given estoy logueado como OWNER
39
+ And navego a la pagina de configuracion de billing
40
+ Then deberia encontrar el contenedor principal de billing
41
+ And deberia encontrar el header de billing
42
+ And deberia encontrar el boton de upgrade plan
43
+ And deberia encontrar el boton de agregar pago
44
+ ```
45
+
46
+ ### Expected Results
47
+ - `billing-main` selector exists
48
+ - `billing-header` selector exists
49
+ - `billing-upgrade-plan` selector exists
50
+ - `billing-add-payment` selector exists
51
+
52
+ ### Notes
53
+ All tests skipped because billing page requires `settings.billing` permission which only OWNER role has.
54
+
55
+ ---
56
+
57
+ ## @test SEL_BILL_002: Invoices Section
58
+
59
+ ### Metadata
60
+ - **Priority:** High
61
+ - **Type:** Selector Validation
62
+ - **Tags:** billing, invoices, table
63
+ - **Grep:** `@ui-selectors` `@SEL_BILL_002`
64
+ - **Status:** Skipped - requires OWNER permission
65
+
66
+ ```gherkin:en
67
+ Scenario: Billing page has invoices section
68
+
69
+ Given I am logged in as OWNER
70
+ And I navigate to the billing settings page
71
+ Then I should find the invoices table
72
+ And I should find invoice rows (when invoices exist)
73
+ And I should find load more button (when many invoices)
74
+ And I should find invoice status badges
75
+ ```
76
+
77
+ ```gherkin:es
78
+ Scenario: Pagina de billing tiene seccion de facturas
79
+
80
+ Given estoy logueado como OWNER
81
+ And navego a la pagina de configuracion de billing
82
+ Then deberia encontrar la tabla de facturas
83
+ And deberia encontrar filas de facturas (cuando existen)
84
+ And deberia encontrar boton cargar mas (cuando hay muchas)
85
+ And deberia encontrar badges de estado de factura
86
+ ```
87
+
88
+ ### Expected Results
89
+ - `invoices-table` selector exists
90
+ - `invoices-row` selector exists (when invoices present)
91
+ - `invoices-load-more` selector exists (when more invoices available)
92
+ - `invoice-status-badge` selector exists (when invoices present)
93
+
94
+ ---
95
+
96
+ ## @test SEL_BILL_003: Usage Display
97
+
98
+ ### Metadata
99
+ - **Priority:** Medium
100
+ - **Type:** Selector Validation
101
+ - **Tags:** billing, usage, limits
102
+ - **Grep:** `@ui-selectors` `@SEL_BILL_003`
103
+ - **Status:** Skipped - requires OWNER permission
104
+
105
+ ```gherkin:en
106
+ Scenario: Billing page displays usage information
107
+
108
+ Given I am logged in as OWNER
109
+ And I navigate to the billing settings page
110
+ Then I should see usage numbers in format "X / Y"
111
+ And I should find the usage dashboard component
112
+ ```
113
+
114
+ ```gherkin:es
115
+ Scenario: Pagina de billing muestra informacion de uso
116
+
117
+ Given estoy logueado como OWNER
118
+ And navego a la pagina de configuracion de billing
119
+ Then deberia ver numeros de uso en formato "X / Y"
120
+ And deberia encontrar el componente usage dashboard
121
+ ```
122
+
123
+ ### Expected Results
124
+ - Usage numbers displayed in format `N / M`
125
+ - `usage-dashboard` selector exists
126
+
127
+ ---
128
+
129
+ ## @test SEL_BILL_004: ManageBillingButton
130
+
131
+ ### Metadata
132
+ - **Priority:** Low
133
+ - **Type:** Selector Validation
134
+ - **Tags:** billing, manage, stripe
135
+ - **Grep:** `@ui-selectors` `@SEL_BILL_004`
136
+ - **Status:** Skipped - requires paid Stripe subscription
137
+
138
+ ```gherkin:en
139
+ Scenario: Billing page has manage billing button for paid users
140
+
141
+ Given I am logged in as a user with paid subscription
142
+ And the subscription has an external Stripe customer ID
143
+ And I navigate to the billing settings page
144
+ Then I should find the manage billing button
145
+ ```
146
+
147
+ ```gherkin:es
148
+ Scenario: Pagina de billing tiene boton de gestionar billing para usuarios de pago
149
+
150
+ Given estoy logueado como usuario con suscripcion de pago
151
+ And la suscripcion tiene un ID de cliente externo de Stripe
152
+ And navego a la pagina de configuracion de billing
153
+ Then deberia encontrar el boton de gestionar billing
154
+ ```
155
+
156
+ ### Expected Results
157
+ - `manage-billing-button` selector exists
158
+
159
+ ### Notes
160
+ ManageBillingButton only renders when `subscription.externalCustomerId` exists (Stripe customer).
161
+
162
+ ---
163
+
164
+ ## @test SEL_BILL_005: SubscriptionStatus
165
+
166
+ ### Metadata
167
+ - **Priority:** Low
168
+ - **Type:** Selector Validation
169
+ - **Tags:** billing, subscription, status
170
+ - **Grep:** `@ui-selectors` `@SEL_BILL_005`
171
+ - **Status:** Skipped - requires active subscription
172
+
173
+ ```gherkin:en
174
+ Scenario: Billing page shows subscription status for subscribers
175
+
176
+ Given I am logged in as a user with active subscription
177
+ And I navigate to the billing settings page
178
+ Then I should find the subscription status container
179
+ And I should find the subscription plan name
180
+ And I should find the subscription status badge
181
+ ```
182
+
183
+ ```gherkin:es
184
+ Scenario: Pagina de billing muestra estado de suscripcion para suscriptores
185
+
186
+ Given estoy logueado como usuario con suscripcion activa
187
+ And navego a la pagina de configuracion de billing
188
+ Then deberia encontrar el contenedor de estado de suscripcion
189
+ And deberia encontrar el nombre del plan de suscripcion
190
+ And deberia encontrar el badge de estado de suscripcion
191
+ ```
192
+
193
+ ### Expected Results
194
+ - `subscription-status` selector exists
195
+ - `subscription-status-plan` selector exists
196
+ - `subscription-status-badge` selector exists
197
+
198
+ ---
199
+
200
+ ## @test SEL_BILL_006: DowngradeWarning
201
+
202
+ ### Metadata
203
+ - **Priority:** Low
204
+ - **Type:** Selector Validation
205
+ - **Tags:** billing, downgrade, warning
206
+ - **Grep:** `@ui-selectors` `@SEL_BILL_006`
207
+ - **Status:** Skipped - requires downgrade flow with over-limit resources
208
+
209
+ ```gherkin:en
210
+ Scenario: Downgrade warning appears when user has over-limit resources
211
+
212
+ Given I am attempting to downgrade my subscription
213
+ And I have resources that exceed the new plan limits
214
+ Then I should see the downgrade warning alert
215
+ And I should see the warning title
216
+ And I should see the warning description
217
+ And I should see the list of over-limit resources
218
+ And I should see the confirm downgrade button
219
+ And I should see the cancel button
220
+ ```
221
+
222
+ ```gherkin:es
223
+ Scenario: Advertencia de downgrade aparece cuando usuario tiene recursos sobre el limite
224
+
225
+ Given estoy intentando bajar mi suscripcion
226
+ And tengo recursos que exceden los limites del nuevo plan
227
+ Then deberia ver la alerta de advertencia de downgrade
228
+ And deberia ver el titulo de advertencia
229
+ And deberia ver la descripcion de advertencia
230
+ And deberia ver la lista de recursos sobre el limite
231
+ And deberia ver el boton de confirmar downgrade
232
+ And deberia ver el boton de cancelar
233
+ ```
234
+
235
+ ### Expected Results
236
+ - `downgrade-warning` selector exists
237
+ - `downgrade-warning-title` selector exists
238
+ - `downgrade-warning-description` selector exists
239
+ - `downgrade-warning-list` selector exists
240
+ - `downgrade-limit-{slug}` selectors exist
241
+ - `downgrade-warning-confirm` selector exists
242
+ - `downgrade-warning-cancel` selector exists
243
+
244
+ ### Notes
245
+ DowngradeWarning only renders when `overLimitResources.length > 0`.
246
+
247
+ ---
248
+
249
+ ## @test SEL_BILL_DOC: Selector Documentation
250
+
251
+ ### Metadata
252
+ - **Priority:** Low
253
+ - **Type:** Documentation
254
+ - **Tags:** billing, documentation
255
+ - **Grep:** `@ui-selectors` `@SEL_BILL_DOC`
256
+ - **Status:** Active
257
+
258
+ ```gherkin:en
259
+ Scenario: Document all billing component selectors
260
+
261
+ Given the billing selector tests are running
262
+ Then the test should log all available billing selectors
263
+ And document which permissions/states are required for each
264
+ ```
265
+
266
+ ```gherkin:es
267
+ Scenario: Documentar todos los selectores de componentes de billing
268
+
269
+ Given los tests de selectores de billing estan corriendo
270
+ Then el test deberia loguear todos los selectores de billing disponibles
271
+ And documentar que permisos/estados se requieren para cada uno
272
+ ```
273
+
274
+ ### Expected Results
275
+ - Test logs all billing selectors for reference
276
+ - Documents permission and state requirements
@@ -0,0 +1,182 @@
1
+ /**
2
+ * UI Selectors Validation: Billing Components
3
+ *
4
+ * This test validates that billing component selectors exist in the DOM.
5
+ * This is a lightweight test that ONLY checks selector presence, not functionality.
6
+ *
7
+ * Purpose:
8
+ * - Validate billing component selectors (ManageBillingButton, SubscriptionStatus, etc.)
9
+ * - Document selectors from CORE_SELECTORS.settings.billing
10
+ * - Run as Phase 12 sub-gate before functional tests
11
+ *
12
+ * Scope:
13
+ * - Billing page requires 'settings.billing' permission (OWNER role only)
14
+ * - Most tests are skipped due to permission/state requirements
15
+ * - Fast execution (< 30 seconds per describe block)
16
+ *
17
+ * Test IDs:
18
+ * - SEL_BILL_001: Billing Page Structure (skipped - requires OWNER permission)
19
+ * - SEL_BILL_002: Invoices Section (skipped - requires OWNER permission)
20
+ * - SEL_BILL_003: Usage Display (skipped - requires OWNER permission)
21
+ * - SEL_BILL_004: ManageBillingButton (skipped - requires paid subscription)
22
+ * - SEL_BILL_005: SubscriptionStatus (skipped - requires active subscription)
23
+ * - SEL_BILL_006: DowngradeWarning (skipped - requires downgrade flow)
24
+ *
25
+ * IMPORTANT: Billing page requires 'settings.billing' permission which only OWNER role has.
26
+ * Users without this permission are redirected to /dashboard/settings.
27
+ * See also: settings-billing.cy.ts for additional billing selectors.
28
+ */
29
+
30
+ describe('Billing Selectors Validation', { tags: ['@ui-selectors', '@billing'] }, () => {
31
+ // ============================================
32
+ // SEL_BILL_001: BILLING PAGE STRUCTURE
33
+ // ============================================
34
+ describe('SEL_BILL_001: Billing Page Structure', { tags: '@SEL_BILL_001' }, () => {
35
+ // NOTE: Billing page requires 'settings.billing' permission (OWNER role only)
36
+ // Default test users may not have this permission
37
+
38
+ it.skip('should find billing main container (requires OWNER permission)', () => {
39
+ cy.get('[data-cy="billing-main"]').should('exist')
40
+ })
41
+
42
+ it.skip('should find billing header (requires OWNER permission)', () => {
43
+ cy.get('[data-cy="billing-header"]').should('exist')
44
+ })
45
+
46
+ it.skip('should find upgrade plan button (requires OWNER permission)', () => {
47
+ cy.get('[data-cy="billing-upgrade-plan"]').should('exist')
48
+ })
49
+
50
+ it.skip('should find add payment button (requires OWNER permission)', () => {
51
+ cy.get('[data-cy="billing-add-payment"]').should('exist')
52
+ })
53
+ })
54
+
55
+ // ============================================
56
+ // SEL_BILL_002: INVOICES SECTION
57
+ // ============================================
58
+ describe('SEL_BILL_002: Invoices Section', { tags: '@SEL_BILL_002' }, () => {
59
+ it.skip('should find invoices table (requires OWNER permission)', () => {
60
+ cy.get('[data-cy="invoices-table"]').should('exist')
61
+ })
62
+
63
+ it.skip('should find invoices row (requires invoices)', () => {
64
+ cy.get('[data-cy="invoices-row"]').should('exist')
65
+ })
66
+
67
+ it.skip('should find load more button (requires many invoices)', () => {
68
+ cy.get('[data-cy="invoices-load-more"]').should('exist')
69
+ })
70
+
71
+ it.skip('should find invoice status badge (requires invoices)', () => {
72
+ cy.get('[data-cy="invoice-status-badge"]').should('exist')
73
+ })
74
+ })
75
+
76
+ // ============================================
77
+ // SEL_BILL_003: USAGE DISPLAY
78
+ // ============================================
79
+ describe('SEL_BILL_003: Usage Display', { tags: '@SEL_BILL_003' }, () => {
80
+ it.skip('should display usage numbers (requires OWNER permission)', () => {
81
+ cy.contains(/\d+\s*\/\s*\d+/).should('be.visible')
82
+ })
83
+
84
+ it.skip('should find usage dashboard (requires UsageDashboard component)', () => {
85
+ cy.get('[data-cy="usage-dashboard"]').should('exist')
86
+ })
87
+ })
88
+
89
+ // ============================================
90
+ // SEL_BILL_004: MANAGE BILLING BUTTON
91
+ // ============================================
92
+ describe('SEL_BILL_004: ManageBillingButton', { tags: '@SEL_BILL_004' }, () => {
93
+ // ManageBillingButton only renders when subscription has externalCustomerId
94
+
95
+ it.skip('should find manage billing button (requires paid subscription)', () => {
96
+ cy.get('[data-cy="manage-billing-button"]').should('exist')
97
+ })
98
+ })
99
+
100
+ // ============================================
101
+ // SEL_BILL_005: SUBSCRIPTION STATUS
102
+ // ============================================
103
+ describe('SEL_BILL_005: SubscriptionStatus', { tags: '@SEL_BILL_005' }, () => {
104
+ // SubscriptionStatus requires an active subscription
105
+
106
+ it.skip('should find subscription status container (requires subscription)', () => {
107
+ cy.get('[data-cy="subscription-status"]').should('exist')
108
+ })
109
+
110
+ it.skip('should find subscription plan name (requires subscription)', () => {
111
+ cy.get('[data-cy="subscription-status-plan"]').should('exist')
112
+ })
113
+
114
+ it.skip('should find subscription status badge (requires subscription)', () => {
115
+ cy.get('[data-cy="subscription-status-badge"]').should('exist')
116
+ })
117
+ })
118
+
119
+ // ============================================
120
+ // SEL_BILL_006: DOWNGRADE WARNING
121
+ // ============================================
122
+ describe('SEL_BILL_006: DowngradeWarning', { tags: '@SEL_BILL_006' }, () => {
123
+ // DowngradeWarning only renders when overLimitResources.length > 0
124
+
125
+ it.skip('should find downgrade warning (requires downgrade flow)', () => {
126
+ cy.get('[data-cy="downgrade-warning"]').should('exist')
127
+ })
128
+
129
+ it.skip('should find downgrade warning title (requires downgrade flow)', () => {
130
+ cy.get('[data-cy="downgrade-warning-title"]').should('exist')
131
+ })
132
+
133
+ it.skip('should find downgrade warning description (requires downgrade flow)', () => {
134
+ cy.get('[data-cy="downgrade-warning-description"]').should('exist')
135
+ })
136
+
137
+ it.skip('should find downgrade warning list (requires downgrade flow)', () => {
138
+ cy.get('[data-cy="downgrade-warning-list"]').should('exist')
139
+ })
140
+
141
+ it.skip('should find downgrade confirm button (requires downgrade flow)', () => {
142
+ cy.get('[data-cy="downgrade-warning-confirm"]').should('exist')
143
+ })
144
+
145
+ it.skip('should find downgrade cancel button (requires downgrade flow)', () => {
146
+ cy.get('[data-cy="downgrade-warning-cancel"]').should('exist')
147
+ })
148
+ })
149
+
150
+ // ============================================
151
+ // DOCUMENTATION TEST
152
+ // ============================================
153
+ describe('SEL_BILL_DOC: Selector Documentation', { tags: '@SEL_BILL_DOC' }, () => {
154
+ it('should document billing component selectors', () => {
155
+ cy.log('=== BILLING COMPONENT SELECTORS ===')
156
+ cy.log('')
157
+ cy.log('Billing Page (requires OWNER permission):')
158
+ cy.log('- billing-main, billing-header')
159
+ cy.log('- billing-upgrade-plan, billing-add-payment')
160
+ cy.log('- invoices-table, invoices-row, invoices-load-more')
161
+ cy.log('')
162
+ cy.log('ManageBillingButton (requires paid subscription):')
163
+ cy.log('- manage-billing-button')
164
+ cy.log('')
165
+ cy.log('SubscriptionStatus (requires active subscription):')
166
+ cy.log('- subscription-status, subscription-status-plan')
167
+ cy.log('- subscription-status-badge, subscription-status-period')
168
+ cy.log('- subscription-status-upgrade, subscription-manage-billing')
169
+ cy.log('')
170
+ cy.log('DowngradeWarning (requires downgrade flow):')
171
+ cy.log('- downgrade-warning, downgrade-warning-title')
172
+ cy.log('- downgrade-warning-description, downgrade-warning-list')
173
+ cy.log('- downgrade-limit-{slug}, downgrade-warning-policy')
174
+ cy.log('- downgrade-warning-confirm, downgrade-warning-cancel')
175
+ cy.log('')
176
+ cy.log('UsageDashboard:')
177
+ cy.log('- usage-dashboard, usage-dashboard-limits')
178
+ cy.log('- usage-dashboard-limit-{slug}, usage-bar-{slug}')
179
+ cy.wrap(true).should('be.true')
180
+ })
181
+ })
182
+ })