@nextsparkjs/theme-default 0.1.0-beta.17 → 0.1.0-beta.170

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/api/ai/chat/stream/route.ts +4 -1
  2. package/api/ai/orchestrator/route.ts +10 -3
  3. package/api/ai/single-agent/route.ts +10 -3
  4. package/api/ai/usage/route.ts +4 -1
  5. package/blocks/benefits/component.tsx +4 -4
  6. package/blocks/cta-section/component.tsx +4 -4
  7. package/blocks/faq-accordion/component.tsx +2 -2
  8. package/blocks/features-grid/component.tsx +5 -5
  9. package/blocks/hero/component.tsx +2 -2
  10. package/blocks/hero/fields.ts +1 -1
  11. package/blocks/hero-with-form/component.tsx +7 -7
  12. package/blocks/hero-with-form/fields.ts +1 -1
  13. package/blocks/jumbotron/component.tsx +7 -7
  14. package/blocks/jumbotron/fields.ts +1 -1
  15. package/blocks/logo-cloud/component.tsx +6 -6
  16. package/blocks/logo-cloud/fields.ts +1 -1
  17. package/blocks/post-content/component.tsx +2 -2
  18. package/blocks/pricing-table/component.tsx +5 -5
  19. package/blocks/split-content/component.tsx +5 -5
  20. package/blocks/split-content/fields.ts +1 -1
  21. package/blocks/stats-counter/component.tsx +9 -9
  22. package/blocks/testimonials/component.tsx +4 -4
  23. package/blocks/testimonials/fields.ts +1 -1
  24. package/blocks/text-content/component.tsx +12 -10
  25. package/blocks/timeline/component.tsx +12 -12
  26. package/blocks/video-hero/component.tsx +7 -7
  27. package/blocks/video-hero/fields.ts +1 -1
  28. package/components/ai-chat/ChatPanel.tsx +7 -7
  29. package/components/ai-chat/Message.tsx +2 -2
  30. package/components/ai-chat/MessageInput.tsx +3 -3
  31. package/components/ai-chat/MessageList.tsx +3 -3
  32. package/components/ai-chat/TypingIndicator.tsx +2 -2
  33. package/config/app.config.ts +90 -62
  34. package/config/billing.config.ts +5 -10
  35. package/config/dashboard.config.ts +14 -0
  36. package/config/features.config.ts +10 -0
  37. package/config/permissions.config.ts +22 -23
  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/emails/verify-email.ts +33 -0
  48. package/entities/customers/api/docs.md +107 -0
  49. package/entities/customers/api/presets.ts +80 -0
  50. package/entities/pages/api/docs.md +114 -0
  51. package/entities/pages/api/presets.ts +72 -0
  52. package/entities/posts/api/docs.md +120 -0
  53. package/entities/posts/api/presets.ts +74 -0
  54. package/entities/tasks/api/docs.md +126 -0
  55. package/entities/tasks/api/presets.ts +84 -0
  56. package/lib/selectors.ts +7 -4
  57. package/messages/de/admin.json +45 -0
  58. package/messages/en/admin.json +56 -0
  59. package/messages/en/navigation.json +2 -1
  60. package/messages/es/admin.json +56 -0
  61. package/messages/es/navigation.json +2 -1
  62. package/messages/fr/admin.json +45 -0
  63. package/messages/it/admin.json +45 -0
  64. package/messages/pt/admin.json +45 -0
  65. package/migrations/089_add_editor_team_role.sql +15 -23
  66. package/migrations/090_demo_users_teams.sql +11 -11
  67. package/migrations/091_greek_teams_billing.sql +15 -15
  68. package/migrations/093_pages_sample_data.sql +7 -7
  69. package/migrations/098_patterns_sample_data.sql +234 -0
  70. package/nextsparkjs-theme-default-0.1.0-beta.137.tgz +0 -0
  71. package/package.json +4 -3
  72. package/styles/globals.css +42 -0
  73. package/templates/(public)/page.tsx +1 -1
  74. package/tests/cypress/e2e/_utils/devtools/access.bdd.md +262 -0
  75. package/tests/cypress/e2e/_utils/devtools/access.cy.ts +171 -0
  76. package/tests/cypress/e2e/_utils/devtools/navigation.bdd.md +261 -0
  77. package/tests/cypress/e2e/_utils/devtools/navigation.cy.ts +157 -0
  78. package/tests/cypress/e2e/_utils/devtools/pages.bdd.md +303 -0
  79. package/tests/cypress/e2e/_utils/devtools/pages.cy.ts +184 -0
  80. package/tests/cypress/e2e/_utils/docs/README.md +215 -0
  81. package/tests/cypress/e2e/_utils/selectors/auth.bdd.md +354 -0
  82. package/tests/cypress/e2e/_utils/selectors/auth.cy.ts +310 -0
  83. package/tests/cypress/e2e/_utils/selectors/billing.bdd.md +276 -0
  84. package/tests/cypress/e2e/_utils/selectors/billing.cy.ts +182 -0
  85. package/tests/cypress/e2e/_utils/selectors/block-editor.bdd.md +615 -0
  86. package/tests/cypress/e2e/_utils/selectors/block-editor.cy.ts +783 -0
  87. package/tests/cypress/e2e/_utils/selectors/dashboard-container.cy.ts +52 -0
  88. package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.bdd.md +205 -0
  89. package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.cy.ts +137 -0
  90. package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.bdd.md +147 -0
  91. package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.cy.ts +114 -0
  92. package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.bdd.md +76 -0
  93. package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.cy.ts +68 -0
  94. package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.bdd.md +326 -0
  95. package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.cy.ts +177 -0
  96. package/tests/cypress/e2e/_utils/selectors/devtools.bdd.md +306 -0
  97. package/tests/cypress/e2e/_utils/selectors/devtools.cy.ts +273 -0
  98. package/tests/cypress/e2e/_utils/selectors/global-search.bdd.md +115 -0
  99. package/tests/cypress/e2e/_utils/selectors/global-search.cy.ts +93 -0
  100. package/tests/cypress/e2e/_utils/selectors/patterns.bdd.md +388 -0
  101. package/tests/cypress/e2e/_utils/selectors/patterns.cy.ts +559 -0
  102. package/tests/cypress/e2e/_utils/selectors/public.cy.ts +112 -0
  103. package/tests/cypress/e2e/_utils/selectors/settings-api-keys.bdd.md +266 -0
  104. package/tests/cypress/e2e/_utils/selectors/settings-api-keys.cy.ts +233 -0
  105. package/tests/cypress/e2e/_utils/selectors/settings-billing.bdd.md +78 -0
  106. package/tests/cypress/e2e/_utils/selectors/settings-billing.cy.ts +108 -0
  107. package/tests/cypress/e2e/_utils/selectors/settings-layout.bdd.md +129 -0
  108. package/tests/cypress/e2e/_utils/selectors/settings-layout.cy.ts +115 -0
  109. package/tests/cypress/e2e/_utils/selectors/settings-password.bdd.md +82 -0
  110. package/tests/cypress/e2e/_utils/selectors/settings-password.cy.ts +74 -0
  111. package/tests/cypress/e2e/_utils/selectors/settings-profile.bdd.md +77 -0
  112. package/tests/cypress/e2e/_utils/selectors/settings-profile.cy.ts +79 -0
  113. package/tests/cypress/e2e/_utils/selectors/settings-teams.bdd.md +130 -0
  114. package/tests/cypress/e2e/_utils/selectors/settings-teams.cy.ts +86 -0
  115. package/tests/cypress/e2e/_utils/selectors/superadmin.bdd.md +261 -0
  116. package/tests/cypress/e2e/_utils/selectors/superadmin.cy.ts +193 -0
  117. package/tests/cypress/e2e/_utils/selectors/tasks.bdd.md +593 -0
  118. package/tests/cypress/e2e/_utils/selectors/tasks.cy.ts +864 -0
  119. package/tests/cypress/e2e/_utils/selectors/taxonomies.cy.ts +126 -0
  120. package/tests/cypress/e2e/_utils/selectors/teams.bdd.md +278 -0
  121. package/tests/cypress/e2e/_utils/selectors/teams.cy.ts +195 -0
  122. package/tests/cypress/e2e/_utils/superadmin/all-teams.bdd.md +261 -0
  123. package/tests/cypress/e2e/_utils/superadmin/all-teams.cy.ts +177 -0
  124. package/tests/cypress/e2e/_utils/superadmin/all-users.bdd.md +406 -0
  125. package/tests/cypress/e2e/_utils/superadmin/all-users.cy.ts +294 -0
  126. package/tests/cypress/e2e/_utils/superadmin/dashboard.bdd.md +235 -0
  127. package/tests/cypress/e2e/_utils/superadmin/dashboard.cy.ts +149 -0
  128. package/tests/cypress/e2e/_utils/superadmin/subscriptions-overview.bdd.md +290 -0
  129. package/tests/cypress/e2e/_utils/superadmin/subscriptions-overview.cy.ts +194 -0
  130. package/tests/cypress/e2e/ai/ai-usage.cy.ts +209 -0
  131. package/tests/cypress/e2e/ai/chat-api.cy.ts +119 -0
  132. package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
  133. package/tests/cypress/e2e/api/_core/billing/BillingAPIController.js +319 -0
  134. package/tests/cypress/e2e/api/_core/billing/check-action.cy.ts +326 -0
  135. package/tests/cypress/e2e/api/_core/billing/checkout.cy.ts +358 -0
  136. package/tests/cypress/e2e/api/_core/billing/lifecycle.cy.ts +423 -0
  137. package/tests/cypress/e2e/api/_core/billing/plans/README.md +345 -0
  138. package/tests/cypress/e2e/api/_core/billing/plans/business.cy.ts +412 -0
  139. package/tests/cypress/e2e/api/_core/billing/plans/downgrade.cy.ts +510 -0
  140. package/tests/cypress/e2e/api/_core/billing/plans/fixtures/billing-plans.json +163 -0
  141. package/tests/cypress/e2e/api/_core/billing/plans/free.cy.ts +500 -0
  142. package/tests/cypress/e2e/api/_core/billing/plans/pro.cy.ts +497 -0
  143. package/tests/cypress/e2e/api/_core/billing/plans/starter.cy.ts +342 -0
  144. package/tests/cypress/e2e/api/_core/billing/portal.cy.ts +313 -0
  145. package/tests/cypress/e2e/api/_core/devtools/registries.bdd.md +300 -0
  146. package/tests/cypress/e2e/api/_core/devtools/registries.cy.ts +368 -0
  147. package/tests/cypress/e2e/api/_core/scheduled-actions/cron-endpoint.bdd.md +375 -0
  148. package/tests/cypress/e2e/api/_core/scheduled-actions/cron-endpoint.cy.ts +346 -0
  149. package/tests/cypress/e2e/api/_core/scheduled-actions/devtools-endpoint.bdd.md +451 -0
  150. package/tests/cypress/e2e/api/_core/scheduled-actions/devtools-endpoint.cy.ts +447 -0
  151. package/tests/cypress/e2e/api/_core/scheduled-actions/scheduling.bdd.md +649 -0
  152. package/tests/cypress/e2e/api/_core/scheduled-actions/scheduling.cy.ts +333 -0
  153. package/tests/cypress/e2e/api/_core/security/security-headers.cy.ts +601 -0
  154. package/tests/cypress/e2e/api/_core/settings/api-keys.crud.cy.ts +923 -0
  155. package/tests/cypress/e2e/api/_core/teams/teams-security.cy.ts +415 -0
  156. package/tests/cypress/e2e/api/_core/users/users-crud.cy.ts +469 -0
  157. package/tests/cypress/e2e/api/_core/users/users-metas.cy.ts +913 -0
  158. package/tests/cypress/e2e/api/_core/users/users-security.cy.ts +375 -0
  159. package/tests/cypress/e2e/api/entities/customers/customers-crud.cy.ts +648 -0
  160. package/tests/cypress/e2e/api/entities/customers/customers-metas.cy.ts +839 -0
  161. package/tests/cypress/e2e/api/entities/media/media-crud.cy.ts +600 -0
  162. package/tests/cypress/e2e/api/entities/media/media-role-permissions.cy.ts +617 -0
  163. package/tests/cypress/e2e/api/entities/media/media-team-isolation.cy.ts +464 -0
  164. package/tests/cypress/e2e/api/entities/pages/blocks-scope.cy.ts +396 -0
  165. package/tests/cypress/e2e/api/entities/pages/pages-crud.cy.ts +425 -0
  166. package/tests/cypress/e2e/api/entities/pages/pages-status.cy.ts +335 -0
  167. package/tests/cypress/e2e/api/entities/posts/post-categories-crud.cy.ts +610 -0
  168. package/tests/cypress/e2e/api/entities/posts/posts-crud.cy.ts +709 -0
  169. package/tests/cypress/e2e/api/entities/posts/posts-status.cy.ts +396 -0
  170. package/tests/cypress/e2e/api/entities/tasks/tasks-crud.cy.ts +602 -0
  171. package/tests/cypress/e2e/api/entities/tasks/tasks-metas.cy.ts +878 -0
  172. package/tests/cypress/e2e/patterns/patterns-in-pages.cy.ts +367 -0
  173. package/tests/cypress/e2e/uat/_core/auth/app-roles/developer-login.bdd.md +231 -0
  174. package/tests/cypress/e2e/uat/_core/auth/app-roles/developer-login.cy.ts +144 -0
  175. package/tests/cypress/e2e/uat/_core/auth/app-roles/superadmin-login.bdd.md +118 -0
  176. package/tests/cypress/e2e/uat/_core/auth/app-roles/superadmin-login.cy.ts +84 -0
  177. package/tests/cypress/e2e/uat/_core/auth/custom-roles/editor-login.bdd.md +288 -0
  178. package/tests/cypress/e2e/uat/_core/auth/custom-roles/editor-login.cy.ts +188 -0
  179. package/tests/cypress/e2e/uat/_core/auth/login-logout.bdd.md +160 -0
  180. package/tests/cypress/e2e/uat/_core/auth/login-logout.cy.ts +116 -0
  181. package/tests/cypress/e2e/uat/_core/auth/password-reset.bdd.md +289 -0
  182. package/tests/cypress/e2e/uat/_core/auth/password-reset.cy.ts +200 -0
  183. package/tests/cypress/e2e/uat/_core/auth/registration-control-invitation.cy.ts +176 -0
  184. package/tests/cypress/e2e/uat/_core/auth/registration-control-open.cy.ts +131 -0
  185. package/tests/cypress/e2e/uat/_core/auth/registration-control.cy.ts +140 -0
  186. package/tests/cypress/e2e/uat/_core/auth/team-roles/admin-login.bdd.md +225 -0
  187. package/tests/cypress/e2e/uat/_core/auth/team-roles/admin-login.cy.ts +148 -0
  188. package/tests/cypress/e2e/uat/_core/auth/team-roles/member-login.bdd.md +251 -0
  189. package/tests/cypress/e2e/uat/_core/auth/team-roles/member-login.cy.ts +163 -0
  190. package/tests/cypress/e2e/uat/_core/auth/team-roles/owner-login.bdd.md +231 -0
  191. package/tests/cypress/e2e/uat/_core/auth/team-roles/owner-login.cy.ts +141 -0
  192. package/tests/cypress/e2e/uat/_core/billing/extended.bdd.md +273 -0
  193. package/tests/cypress/e2e/uat/_core/billing/extended.cy.ts +209 -0
  194. package/tests/cypress/e2e/uat/_core/billing/feature-gates.bdd.md +407 -0
  195. package/tests/cypress/e2e/uat/_core/billing/feature-gates.cy.ts +307 -0
  196. package/tests/cypress/e2e/uat/_core/billing/page.bdd.md +329 -0
  197. package/tests/cypress/e2e/uat/_core/billing/page.cy.ts +250 -0
  198. package/tests/cypress/e2e/uat/_core/billing/status.bdd.md +190 -0
  199. package/tests/cypress/e2e/uat/_core/billing/status.cy.ts +145 -0
  200. package/tests/cypress/e2e/uat/_core/billing/team-switch.bdd.md +156 -0
  201. package/tests/cypress/e2e/uat/_core/billing/team-switch.cy.ts +122 -0
  202. package/tests/cypress/e2e/uat/_core/billing/usage.bdd.md +218 -0
  203. package/tests/cypress/e2e/uat/_core/billing/usage.cy.ts +176 -0
  204. package/tests/cypress/e2e/uat/_core/blocks/hero.bdd.md +124 -0
  205. package/tests/cypress/e2e/uat/_core/blocks/hero.cy.ts +56 -0
  206. package/tests/cypress/e2e/uat/_core/devtools/api-tester.cy.ts +390 -0
  207. package/tests/cypress/e2e/uat/_core/performance/suspense-loading.cy.ts +134 -0
  208. package/tests/cypress/e2e/uat/_core/scheduled-actions/devtools-ui.bdd.md +736 -0
  209. package/tests/cypress/e2e/uat/_core/scheduled-actions/devtools-ui.cy.ts +740 -0
  210. package/tests/cypress/e2e/uat/_core/teams/inline-edit.cy.ts +278 -0
  211. package/tests/cypress/e2e/uat/_core/teams/roles-matrix.bdd.md +553 -0
  212. package/tests/cypress/e2e/uat/_core/teams/roles-matrix.cy.ts +185 -0
  213. package/tests/cypress/e2e/uat/_core/teams/switcher.bdd.md +1151 -0
  214. package/tests/cypress/e2e/uat/_core/teams/switcher.cy.ts +497 -0
  215. package/tests/cypress/e2e/uat/_core/teams/team-switcher.md +198 -0
  216. package/tests/cypress/e2e/uat/entities/customers/member.bdd.md +275 -0
  217. package/tests/cypress/e2e/uat/entities/customers/member.cy.ts +122 -0
  218. package/tests/cypress/e2e/uat/entities/customers/owner.bdd.md +243 -0
  219. package/tests/cypress/e2e/uat/entities/customers/owner.cy.ts +165 -0
  220. package/tests/cypress/e2e/uat/entities/pages/block-crud.bdd.md +476 -0
  221. package/tests/cypress/e2e/uat/entities/pages/block-crud.cy.ts +486 -0
  222. package/tests/cypress/e2e/uat/entities/pages/block-editor.bdd.md +460 -0
  223. package/tests/cypress/e2e/uat/entities/pages/block-editor.cy.ts +301 -0
  224. package/tests/cypress/e2e/uat/entities/pages/list.bdd.md +432 -0
  225. package/tests/cypress/e2e/uat/entities/pages/list.cy.ts +273 -0
  226. package/tests/cypress/e2e/uat/entities/pages/public-rendering.bdd.md +696 -0
  227. package/tests/cypress/e2e/uat/entities/pages/public-rendering.cy.ts +340 -0
  228. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.bdd.md +161 -0
  229. package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.cy.ts +104 -0
  230. package/tests/cypress/e2e/uat/entities/posts/categories.bdd.md +375 -0
  231. package/tests/cypress/e2e/uat/entities/posts/categories.cy.ts +241 -0
  232. package/tests/cypress/e2e/uat/entities/posts/editor.bdd.md +429 -0
  233. package/tests/cypress/e2e/uat/entities/posts/editor.cy.ts +257 -0
  234. package/tests/cypress/e2e/uat/entities/posts/list.bdd.md +340 -0
  235. package/tests/cypress/e2e/uat/entities/posts/list.cy.ts +177 -0
  236. package/tests/cypress/e2e/uat/entities/posts/public.bdd.md +614 -0
  237. package/tests/cypress/e2e/uat/entities/posts/public.cy.ts +249 -0
  238. package/tests/cypress/e2e/uat/entities/tasks/member.bdd.md +222 -0
  239. package/tests/cypress/e2e/uat/entities/tasks/member.cy.ts +165 -0
  240. package/tests/cypress/e2e/uat/entities/tasks/owner.bdd.md +419 -0
  241. package/tests/cypress/e2e/uat/entities/tasks/owner.cy.ts +191 -0
  242. package/tests/cypress/e2e/uat/features/roles/editor-role.bdd.md +552 -0
  243. package/tests/cypress/e2e/uat/features/roles/editor-role.cy.ts +210 -0
  244. package/tests/cypress/e2e/uat/features/roles/member-restrictions.bdd.md +450 -0
  245. package/tests/cypress/e2e/uat/features/roles/member-restrictions.cy.ts +189 -0
  246. package/tests/cypress/e2e/uat/features/roles/owner-full-crud.bdd.md +530 -0
  247. package/tests/cypress/e2e/uat/features/roles/owner-full-crud.cy.ts +247 -0
  248. package/tests/cypress/fixtures/blocks.json +218 -0
  249. package/tests/cypress/fixtures/entities.json +87 -0
  250. package/tests/cypress/fixtures/page-builder.json +21 -0
  251. package/tests/cypress/src/components/CategoriesPOM.ts +382 -0
  252. package/tests/cypress/src/components/CustomersPOM.ts +439 -0
  253. package/tests/cypress/src/components/DevKeyringPOM.ts +160 -0
  254. package/tests/cypress/src/components/EntityForm.ts +375 -0
  255. package/tests/cypress/src/components/EntityList.ts +389 -0
  256. package/tests/cypress/src/components/PageBuilderPOM.ts +710 -0
  257. package/tests/cypress/src/components/PostEditorPOM.ts +370 -0
  258. package/tests/cypress/src/components/PostsListPOM.ts +223 -0
  259. package/tests/cypress/src/components/PublicPagePOM.ts +447 -0
  260. package/tests/cypress/src/components/PublicPostPOM.ts +146 -0
  261. package/tests/cypress/src/components/TasksPOM.ts +272 -0
  262. package/tests/cypress/src/components/TeamSwitcherPOM.ts +450 -0
  263. package/tests/cypress/src/components/index.ts +21 -0
  264. package/tests/cypress/src/controllers/ApiKeysAPIController.js +178 -0
  265. package/tests/cypress/src/controllers/BaseAPIController.js +317 -0
  266. package/tests/cypress/src/controllers/CustomerAPIController.js +251 -0
  267. package/tests/cypress/src/controllers/MediaAPIController.js +231 -0
  268. package/tests/cypress/src/controllers/PagesAPIController.js +226 -0
  269. package/tests/cypress/src/controllers/PostsAPIController.js +250 -0
  270. package/tests/cypress/src/controllers/TaskAPIController.js +240 -0
  271. package/tests/cypress/src/controllers/UsersAPIController.js +242 -0
  272. package/tests/cypress/src/controllers/index.js +25 -0
  273. package/tests/cypress/src/core/AuthPOM.ts +450 -0
  274. package/tests/cypress/src/core/BasePOM.ts +33 -0
  275. package/tests/cypress/src/core/BlockEditorBasePOM.ts +874 -0
  276. package/tests/cypress/src/core/DashboardEntityPOM.ts +41 -0
  277. package/tests/cypress/src/core/index.ts +14 -0
  278. package/tests/cypress/src/entities/CustomersPOM.ts +172 -0
  279. package/tests/cypress/src/entities/PagesPOM.ts +137 -0
  280. package/tests/cypress/src/entities/PatternsPOM.ts +329 -0
  281. package/tests/cypress/src/entities/PostsPOM.ts +137 -0
  282. package/tests/cypress/src/entities/TasksPOM.ts +246 -0
  283. package/tests/cypress/src/entities/index.ts +16 -0
  284. package/tests/cypress/src/features/BillingPOM.ts +385 -0
  285. package/tests/cypress/src/features/DashboardPOM.ts +271 -0
  286. package/tests/cypress/src/features/DevtoolsPOM.ts +750 -0
  287. package/tests/cypress/src/features/PageBuilderPOM.ts +283 -0
  288. package/tests/cypress/src/features/PostEditorPOM.ts +313 -0
  289. package/tests/cypress/src/features/ScheduledActionsPOM.ts +463 -0
  290. package/tests/cypress/src/features/SettingsPOM.ts +707 -0
  291. package/tests/cypress/src/features/SuperadminPOM.ts +851 -0
  292. package/tests/cypress/src/features/SuperadminTeamRolesPOM.ts +285 -0
  293. package/tests/cypress/src/features/index.ts +28 -0
  294. package/tests/cypress/src/helpers/ApiInterceptor.ts +20 -0
  295. package/tests/cypress/src/index.ts +101 -0
  296. package/tests/cypress/src/pages/dashboard/Dashboard.js +677 -0
  297. package/tests/cypress/src/pages/dashboard/DashboardPage.js +43 -0
  298. package/tests/cypress/src/pages/dashboard/DashboardStats.js +546 -0
  299. package/tests/cypress/src/pages/dashboard/index.js +6 -0
  300. package/tests/cypress/src/pages/index.js +5 -0
  301. package/tests/cypress/src/pages/public/FeaturesPage.js +28 -0
  302. package/tests/cypress/src/pages/public/LandingPage.js +69 -0
  303. package/tests/cypress/src/pages/public/PricingPage.js +33 -0
  304. package/tests/cypress/src/pages/public/index.js +6 -0
  305. package/tests/cypress/src/selectors.ts +46 -0
  306. package/tests/cypress/src/session-helpers.ts +518 -0
  307. package/tests/cypress/support/doc-commands.ts +260 -0
  308. package/tests/cypress/support/e2e.ts +90 -0
  309. package/tests/cypress.config.ts +178 -0
  310. package/tests/jest/__mocks__/@nextsparkjs/core/components/ui/badge.js +16 -0
  311. package/tests/jest/__mocks__/@nextsparkjs/core/lib/db.js +11 -0
  312. package/tests/jest/__mocks__/@nextsparkjs/registries/permissions-registry.ts +160 -0
  313. package/tests/jest/__mocks__/@nextsparkjs/registries/theme-registry.ts +68 -0
  314. package/tests/jest/__mocks__/jose.js +22 -0
  315. package/tests/jest/__mocks__/next/image.js +15 -0
  316. package/tests/jest/__mocks__/next-server.js +56 -0
  317. package/tests/jest/components/post-header.test.tsx +377 -0
  318. package/tests/jest/jest.config.cjs +154 -0
  319. package/tests/jest/langchain/COVERAGE.md +372 -0
  320. package/tests/jest/langchain/guardrails.test.ts +465 -0
  321. package/tests/jest/langchain/streaming.test.ts +370 -0
  322. package/tests/jest/langchain/token-tracker.test.ts +455 -0
  323. package/tests/jest/langchain/tracer-callbacks.test.ts +881 -0
  324. package/tests/jest/langchain/tracer.test.ts +823 -0
  325. package/tests/jest/services/tasks.service.test.ts +707 -0
  326. package/tests/jest/setup.ts +170 -0
  327. package/tests/jest/tsconfig.jest.json +6 -0
  328. package/tests/jest/validation/categories.test.ts +429 -0
  329. package/tests/jest/validation/posts.test.ts +546 -0
  330. package/tests/tsconfig.json +21 -0
  331. /package/docs/{02-features → public/02-features}/01-components.md +0 -0
  332. /package/docs/{02-features → public/02-features}/02-styling.md +0 -0
@@ -0,0 +1,593 @@
1
+ ---
2
+ feature: Tasks Entity UI Selectors Validation
3
+ priority: high
4
+ tags: [selectors, tasks, entities, ui-validation]
5
+ grepTags: [ui-selectors, entities, tasks, entities-list, SEL_TASK_PAGE_001, SEL_TASK_LIST_001, SEL_TASK_LIST_002, SEL_TASK_LIST_003, SEL_TASK_LIST_004, SEL_TASK_LIST_005, SEL_TASK_LIST_006, SEL_TASK_LIST_007, SEL_TASK_HEADER_001, SEL_TASK_DETAIL_001, SEL_TASK_FORM_001]
6
+ coverage: 11
7
+ ---
8
+
9
+ # Tasks Entity UI Selectors Validation
10
+
11
+ > Validates that all entity selectors exist in the DOM. Organized by the 6 first-level keys in ENTITIES_SELECTORS: PAGE, LIST, HEADER, DETAIL, FORM, CHILD.
12
+
13
+ **IMPORTANT:** Uses `TasksPOM` which extends `DashboardEntityPOM`. All dynamic selectors use entity slug `tasks`. Follows ENTITIES_SELECTORS structure from `entities.selectors.ts`.
14
+
15
+ **Login:** Uses Carlos Mendoza (owner) via `loginAsDefaultOwner()` - requires team context for entity API calls.
16
+
17
+ **Structure (matches entities.selectors.ts):**
18
+ 1. PAGE - Page-level container
19
+ 2. LIST - List view (search, filters, table, pagination, bulk, confirm)
20
+ 3. HEADER - Entity detail header (view/edit/create modes)
21
+ 4. DETAIL - Detail view container
22
+ 5. FORM - Form container, fields, and actions
23
+ 6. CHILD - Child entity management (not applicable for tasks)
24
+
25
+ ---
26
+
27
+ ## @test SEL_TASK_PAGE_001: Page Container
28
+
29
+ ### Metadata
30
+ - **Priority:** Medium
31
+ - **Type:** Selector Validation
32
+ - **Tags:** tasks, page, container
33
+ - **Grep:** `@ui-selectors` `@SEL_TASK_PAGE_001`
34
+ - **Status:** Skipped (not implemented in EntityList)
35
+
36
+ ```gherkin:en
37
+ Scenario: Tasks page has page container selector
38
+
39
+ Given I am logged in as owner (Carlos Mendoza)
40
+ And I navigate to /dashboard/tasks
41
+ When the list page loads
42
+ Then I should find the page container element
43
+ ```
44
+
45
+ ```gherkin:es
46
+ Scenario: La pagina de tasks tiene selector de contenedor de pagina
47
+
48
+ Given estoy logueado como owner (Carlos Mendoza)
49
+ And navego a /dashboard/tasks
50
+ When la pagina de lista carga
51
+ Then deberia encontrar el elemento contenedor de pagina
52
+ ```
53
+
54
+ ### Expected Results
55
+ | Selector Path | POM Accessor | data-cy Value | Status |
56
+ |---------------|--------------|---------------|--------|
57
+ | entities.page.container | tasks.selectors.page | tasks-page | **NOT IMPLEMENTED** |
58
+
59
+ ### Notes
60
+ Page container selector not currently implemented in EntityList component. The page container would wrap the entire entity list view.
61
+
62
+ ---
63
+
64
+ ## @test SEL_TASK_LIST_001: Search Selectors
65
+
66
+ ### Metadata
67
+ - **Priority:** High
68
+ - **Type:** Selector Validation
69
+ - **Tags:** tasks, list, search
70
+ - **Grep:** `@ui-selectors` `@entities-list` `@SEL_TASK_LIST_001`
71
+ - **Status:** Active (1 passing, 2 skipped)
72
+
73
+ ```gherkin:en
74
+ Scenario: Tasks list has search selectors
75
+
76
+ Given I am logged in as owner (Carlos Mendoza)
77
+ And I navigate to /dashboard/tasks
78
+ When the list page loads
79
+ Then I should find the search input
80
+ And I should find the search container (not implemented)
81
+ And I should find the search clear button (not implemented)
82
+ ```
83
+
84
+ ```gherkin:es
85
+ Scenario: La lista de tasks tiene selectores de busqueda
86
+
87
+ Given estoy logueado como owner (Carlos Mendoza)
88
+ And navego a /dashboard/tasks
89
+ When la pagina de lista carga
90
+ Then deberia encontrar el input de busqueda
91
+ And deberia encontrar el contenedor de busqueda (no implementado)
92
+ And deberia encontrar el boton de limpiar busqueda (no implementado)
93
+ ```
94
+
95
+ ### Expected Results
96
+ | Selector Path | POM Accessor | data-cy Value | Status |
97
+ |---------------|--------------|---------------|--------|
98
+ | entities.list.search.input | tasks.selectors.search | tasks-search-input | Implemented |
99
+ | entities.list.search.container | tasks.selectors.searchContainer | tasks-search | **NOT IMPLEMENTED** |
100
+ | entities.list.search.clear | tasks.selectors.searchClear | tasks-search-clear | **NOT IMPLEMENTED** |
101
+
102
+ ---
103
+
104
+ ## @test SEL_TASK_LIST_002: Table Structure Selectors
105
+
106
+ ### Metadata
107
+ - **Priority:** High
108
+ - **Type:** Selector Validation
109
+ - **Tags:** tasks, list, table
110
+ - **Grep:** `@ui-selectors` `@entities-list` `@SEL_TASK_LIST_002`
111
+ - **Status:** Active (4 passing, 1 skipped)
112
+
113
+ ```gherkin:en
114
+ Scenario: Tasks list has table structure selectors
115
+
116
+ Given I am logged in as owner (Carlos Mendoza)
117
+ And I navigate to /dashboard/tasks
118
+ When the list page loads
119
+ Then I should find the table container
120
+ And I should find the table element
121
+ And I should find the add button
122
+ And I should find the select all checkbox
123
+ And I should find the selection count (only when items selected)
124
+ ```
125
+
126
+ ```gherkin:es
127
+ Scenario: La lista de tasks tiene selectores de estructura de tabla
128
+
129
+ Given estoy logueado como owner (Carlos Mendoza)
130
+ And navego a /dashboard/tasks
131
+ When la pagina de lista carga
132
+ Then deberia encontrar el contenedor de tabla
133
+ And deberia encontrar el elemento de tabla
134
+ And deberia encontrar el boton de agregar
135
+ And deberia encontrar el checkbox de seleccionar todo
136
+ And deberia encontrar el conteo de seleccion (solo cuando hay items seleccionados)
137
+ ```
138
+
139
+ ### Expected Results
140
+ | Selector Path | POM Accessor | data-cy Value | Status |
141
+ |---------------|--------------|---------------|--------|
142
+ | entities.list.table.container | tasks.selectors.tableContainer | tasks-table-container | Implemented |
143
+ | entities.list.table.element | tasks.selectors.table | tasks-table | Implemented |
144
+ | entities.list.addButton | tasks.selectors.addButton | tasks-add | Implemented |
145
+ | entities.list.table.selectAll | tasks.selectors.selectAll | tasks-select-all | Implemented |
146
+ | entities.list.selectionCount | tasks.selectors.selectionCount | tasks-selection-count | **Only visible when items selected** |
147
+
148
+ ---
149
+
150
+ ## @test SEL_TASK_LIST_003: Row Dynamic Selectors
151
+
152
+ ### Metadata
153
+ - **Priority:** High
154
+ - **Type:** Selector Validation
155
+ - **Tags:** tasks, list, rows, dynamic
156
+ - **Grep:** `@ui-selectors` `@entities-list` `@SEL_TASK_LIST_003`
157
+ - **Status:** Active (3 passing, 0 skipped)
158
+
159
+ ```gherkin:en
160
+ Scenario: Tasks rows have dynamic selectors with ID
161
+
162
+ Given I am logged in as owner (Carlos Mendoza)
163
+ And I navigate to /dashboard/tasks
164
+ When the list page loads with at least one task
165
+ Then I should find row elements with rowGeneric pattern
166
+ And I should extract the row ID from data-cy attribute
167
+ And I should find the row element with dynamic selector
168
+ And I should find the row select checkbox with dynamic ID
169
+ And I should find the row menu with dynamic ID
170
+ When I open the row menu
171
+ Then I should find row action selectors (view, edit, delete)
172
+ ```
173
+
174
+ ```gherkin:es
175
+ Scenario: Las filas de tasks tienen selectores dinamicos con ID
176
+
177
+ Given estoy logueado como owner (Carlos Mendoza)
178
+ And navego a /dashboard/tasks
179
+ When la pagina de lista carga con al menos una tarea
180
+ Then deberia encontrar elementos de fila con patron rowGeneric
181
+ And deberia extraer el ID de fila del atributo data-cy
182
+ And deberia encontrar el elemento de fila con selector dinamico
183
+ And deberia encontrar el checkbox de seleccion de fila con ID dinamico
184
+ And deberia encontrar el menu de fila con ID dinamico
185
+ When abro el menu de fila
186
+ Then deberia encontrar selectores de accion de fila (ver, editar, eliminar)
187
+ ```
188
+
189
+ ### Expected Results
190
+ | Selector Path | POM Accessor | data-cy Value | Status |
191
+ |---------------|--------------|---------------|--------|
192
+ | entities.list.table.row (generic) | tasks.selectors.rowGeneric | tasks-row-* | Implemented |
193
+ | entities.list.table.row.element | tasks.selectors.row(id) | tasks-row-{id} | Implemented |
194
+ | entities.list.table.row.checkbox | tasks.selectors.rowSelect(id) | tasks-row-select-{id} | Implemented |
195
+ | entities.list.table.row.menu | tasks.selectors.rowMenu(id) | tasks-row-menu-{id} | Implemented |
196
+ | entities.list.table.row.action | tasks.selectors.rowAction(action, id) | tasks-action-{action}-{id} | Implemented |
197
+
198
+ ---
199
+
200
+ ## @test SEL_TASK_LIST_004: Pagination Selectors
201
+
202
+ ### Metadata
203
+ - **Priority:** Medium
204
+ - **Type:** Selector Validation
205
+ - **Tags:** tasks, list, pagination
206
+ - **Grep:** `@ui-selectors` `@entities-list` `@SEL_TASK_LIST_004`
207
+ - **Status:** Active (4 passing, 0 skipped)
208
+
209
+ ```gherkin:en
210
+ Scenario: Tasks list has pagination selectors
211
+
212
+ Given I am logged in as owner (Carlos Mendoza)
213
+ And I navigate to /dashboard/tasks
214
+ When the list page loads
215
+ Then I should find the pagination container
216
+ And I should find the page info
217
+ And I should find the page size selector
218
+ And I should find pagination navigation controls (first, prev, next, last)
219
+ When I open the page size dropdown
220
+ Then I should find page size options (10, 20)
221
+ ```
222
+
223
+ ```gherkin:es
224
+ Scenario: La lista de tasks tiene selectores de paginacion
225
+
226
+ Given estoy logueado como owner (Carlos Mendoza)
227
+ And navego a /dashboard/tasks
228
+ When la pagina de lista carga
229
+ Then deberia encontrar el contenedor de paginacion
230
+ And deberia encontrar la info de pagina
231
+ And deberia encontrar el selector de tamano de pagina
232
+ And deberia encontrar controles de navegacion de paginacion (primero, anterior, siguiente, ultimo)
233
+ When abro el dropdown de tamano de pagina
234
+ Then deberia encontrar opciones de tamano de pagina (10, 20)
235
+ ```
236
+
237
+ ### Expected Results
238
+ | Selector Path | POM Accessor | data-cy Value | Status |
239
+ |---------------|--------------|---------------|--------|
240
+ | entities.list.pagination.container | tasks.selectors.pagination | tasks-pagination | Implemented |
241
+ | entities.list.pagination.info | tasks.selectors.pageInfo | tasks-page-info | Implemented |
242
+ | entities.list.pagination.pageSize | tasks.selectors.pageSize | tasks-page-size | Implemented |
243
+ | entities.list.pagination.first | tasks.selectors.pageFirst | tasks-page-first | Implemented |
244
+ | entities.list.pagination.prev | tasks.selectors.pagePrev | tasks-page-prev | Implemented |
245
+ | entities.list.pagination.next | tasks.selectors.pageNext | tasks-page-next | Implemented |
246
+ | entities.list.pagination.last | tasks.selectors.pageLast | tasks-page-last | Implemented |
247
+ | entities.list.pagination.pageSizeOption | tasks.selectors.pageSizeOption(size) | tasks-page-size-{size} | Implemented |
248
+
249
+ ---
250
+
251
+ ## @test SEL_TASK_LIST_005: Filter Selectors
252
+
253
+ ### Metadata
254
+ - **Priority:** Medium
255
+ - **Type:** Selector Validation
256
+ - **Tags:** tasks, list, filters
257
+ - **Grep:** `@ui-selectors` `@entities-list` `@SEL_TASK_LIST_005`
258
+ - **Status:** Active (4 passing, 1 skipped)
259
+
260
+ ```gherkin:en
261
+ Scenario: Tasks list has filter selectors
262
+
263
+ Given I am logged in as owner (Carlos Mendoza)
264
+ And I navigate to /dashboard/tasks
265
+ When the list page loads
266
+ Then I should find the status filter trigger
267
+ And I should find the priority filter trigger
268
+ When I open the status filter
269
+ Then I should find the filter content
270
+ And I should find filter options
271
+ And I should find clear all filters button (not implemented)
272
+ ```
273
+
274
+ ```gherkin:es
275
+ Scenario: La lista de tasks tiene selectores de filtro
276
+
277
+ Given estoy logueado como owner (Carlos Mendoza)
278
+ And navego a /dashboard/tasks
279
+ When la pagina de lista carga
280
+ Then deberia encontrar el trigger del filtro de status
281
+ And deberia encontrar el trigger del filtro de prioridad
282
+ When abro el filtro de status
283
+ Then deberia encontrar el contenido del filtro
284
+ And deberia encontrar opciones de filtro
285
+ And deberia encontrar boton de limpiar todos los filtros (no implementado)
286
+ ```
287
+
288
+ ### Expected Results
289
+ | Selector Path | POM Accessor | data-cy Value | Status |
290
+ |---------------|--------------|---------------|--------|
291
+ | entities.list.filters.trigger | tasks.selectors.filterTrigger(field) | tasks-filter-{field} | Implemented |
292
+ | entities.list.filters.content | tasks.selectors.filterContent(field) | tasks-filter-{field}-content | Implemented |
293
+ | entities.list.filters.option | tasks.selectors.filterOption(field, value) | tasks-filter-{field}-{value} | Implemented |
294
+ | entities.list.filters.clearAll | tasks.selectors.filterClearAll | tasks-filter-clear-all | **NOT IMPLEMENTED** |
295
+
296
+ ---
297
+
298
+ ## @test SEL_TASK_LIST_006: Bulk Action Selectors
299
+
300
+ ### Metadata
301
+ - **Priority:** Medium
302
+ - **Type:** Selector Validation
303
+ - **Tags:** tasks, list, bulk, actions
304
+ - **Grep:** `@ui-selectors` `@entities-list` `@SEL_TASK_LIST_006`
305
+ - **Status:** Active (2 passing, 1 skipped)
306
+
307
+ ```gherkin:en
308
+ Scenario: Bulk action bar appears after selecting rows
309
+
310
+ Given I am logged in as owner (Carlos Mendoza)
311
+ And I navigate to /dashboard/tasks
312
+ When I select a row using the row checkbox
313
+ Then the bulk action bar should be visible
314
+ And I should find the bulk count indicator
315
+ And I should find the bulk delete button
316
+ And I should find the bulk clear button
317
+ And I should find the bulk status button (not enabled)
318
+ When I click bulk delete
319
+ Then I should find the bulk delete dialog
320
+ And I should find bulk delete cancel button
321
+ And I should find bulk delete confirm button
322
+ ```
323
+
324
+ ```gherkin:es
325
+ Scenario: La barra de acciones masivas aparece despues de seleccionar filas
326
+
327
+ Given estoy logueado como owner (Carlos Mendoza)
328
+ And navego a /dashboard/tasks
329
+ When selecciono una fila usando el checkbox de fila
330
+ Then la barra de acciones masivas deberia ser visible
331
+ And deberia encontrar el indicador de conteo masivo
332
+ And deberia encontrar el boton de eliminar masivo
333
+ And deberia encontrar el boton de limpiar seleccion
334
+ And deberia encontrar el boton de status masivo (no habilitado)
335
+ When hago click en eliminar masivo
336
+ Then deberia encontrar el dialogo de eliminar masivo
337
+ And deberia encontrar el boton de cancelar eliminar masivo
338
+ And deberia encontrar el boton de confirmar eliminar masivo
339
+ ```
340
+
341
+ ### Expected Results
342
+ | Selector Path | POM Accessor | data-cy Value | Status |
343
+ |---------------|--------------|---------------|--------|
344
+ | entities.list.bulk.bar | tasks.selectors.bulkBar | tasks-bulk-bar | Implemented |
345
+ | entities.list.bulk.count | tasks.selectors.bulkCount | tasks-bulk-count | Implemented |
346
+ | entities.list.bulk.deleteButton | tasks.selectors.bulkDelete | tasks-bulk-delete | Implemented |
347
+ | entities.list.bulk.clearButton | tasks.selectors.bulkClear | tasks-bulk-clear | Implemented |
348
+ | entities.list.bulk.statusButton | tasks.selectors.bulkStatus | tasks-bulk-status | **enableChangeStatus not enabled** |
349
+ | entities.list.bulk.deleteDialog | tasks.selectors.bulkDeleteDialog | tasks-bulk-delete-dialog | Implemented |
350
+ | entities.list.bulk.deleteCancel | tasks.selectors.bulkDeleteCancel | tasks-bulk-delete-cancel | Implemented |
351
+ | entities.list.bulk.deleteConfirm | tasks.selectors.bulkDeleteConfirm | tasks-bulk-delete-confirm | Implemented |
352
+
353
+ ---
354
+
355
+ ## @test SEL_TASK_LIST_007: Confirm Dialog Selectors
356
+
357
+ ### Metadata
358
+ - **Priority:** Medium
359
+ - **Type:** Selector Validation
360
+ - **Tags:** tasks, list, confirm, dialog
361
+ - **Grep:** `@ui-selectors` `@entities-list` `@SEL_TASK_LIST_007`
362
+ - **Status:** Active (1 passing, 0 skipped)
363
+
364
+ ```gherkin:en
365
+ Scenario: Confirm dialog appears for row delete action
366
+
367
+ Given I am logged in as owner (Carlos Mendoza)
368
+ And I navigate to /dashboard/tasks
369
+ When I open the row menu for a task
370
+ And I click the delete action
371
+ Then the confirm dialog should be visible
372
+ And I should find the cancel button
373
+ And I should find the confirm action button
374
+ When I click cancel
375
+ Then the dialog should close
376
+ ```
377
+
378
+ ```gherkin:es
379
+ Scenario: El dialogo de confirmacion aparece para la accion de eliminar fila
380
+
381
+ Given estoy logueado como owner (Carlos Mendoza)
382
+ And navego a /dashboard/tasks
383
+ When abro el menu de fila para una tarea
384
+ And hago click en la accion de eliminar
385
+ Then el dialogo de confirmacion deberia ser visible
386
+ And deberia encontrar el boton de cancelar
387
+ And deberia encontrar el boton de confirmar accion
388
+ When hago click en cancelar
389
+ Then el dialogo deberia cerrarse
390
+ ```
391
+
392
+ ### Expected Results
393
+ | Selector Path | POM Accessor | data-cy Value | Status |
394
+ |---------------|--------------|---------------|--------|
395
+ | entities.list.confirm.dialog | tasks.selectors.confirmDialog | tasks-confirm-dialog | Implemented |
396
+ | entities.list.confirm.cancel | tasks.selectors.confirmCancel | tasks-confirm-cancel | Implemented |
397
+ | entities.list.confirm.action | tasks.selectors.confirmAction | tasks-confirm-action | Implemented |
398
+
399
+ ---
400
+
401
+ ## @test SEL_TASK_HEADER_001: Header Selectors (all modes)
402
+
403
+ ### Metadata
404
+ - **Priority:** High
405
+ - **Type:** Selector Validation
406
+ - **Tags:** tasks, header, modes
407
+ - **Grep:** `@ui-selectors` `@SEL_TASK_HEADER_001`
408
+ - **Status:** Active (5 passing, 1 skipped)
409
+
410
+ ```gherkin:en
411
+ Scenario: Create mode header has selectors
412
+
413
+ Given I am logged in as owner (Carlos Mendoza)
414
+ And I navigate to /dashboard/tasks/new
415
+ When the create form loads
416
+ Then I should find the create header
417
+ And I should find the back button
418
+ And I should find header title (not implemented in create mode)
419
+
420
+ Scenario: View mode header has selectors
421
+
422
+ Given I am logged in as owner (Carlos Mendoza)
423
+ And I navigate to a task detail page
424
+ When the detail page loads
425
+ Then I should find the view header
426
+ And I should find the back button
427
+ And I should find the edit button
428
+ And I should find the delete button
429
+ When I click delete
430
+ Then I should find the delete dialog
431
+ And I should find delete confirm button
432
+ And I should find delete cancel button
433
+
434
+ Scenario: Edit mode header has selectors
435
+
436
+ Given I am logged in as owner (Carlos Mendoza)
437
+ And I navigate to edit a task
438
+ When the edit form loads
439
+ Then I should find the edit header
440
+ And I should find the back button
441
+ ```
442
+
443
+ ```gherkin:es
444
+ Scenario: El header de modo crear tiene selectores
445
+
446
+ Given estoy logueado como owner (Carlos Mendoza)
447
+ And navego a /dashboard/tasks/new
448
+ When el formulario de creacion carga
449
+ Then deberia encontrar el header de crear
450
+ And deberia encontrar el boton de volver
451
+ And deberia encontrar el titulo del header (no implementado en modo crear)
452
+
453
+ Scenario: El header de modo ver tiene selectores
454
+
455
+ Given estoy logueado como owner (Carlos Mendoza)
456
+ And navego a una pagina de detalle de tarea
457
+ When la pagina de detalle carga
458
+ Then deberia encontrar el header de ver
459
+ And deberia encontrar el boton de volver
460
+ And deberia encontrar el boton de editar
461
+ And deberia encontrar el boton de eliminar
462
+ When hago click en eliminar
463
+ Then deberia encontrar el dialogo de eliminar
464
+ And deberia encontrar el boton de confirmar eliminar
465
+ And deberia encontrar el boton de cancelar eliminar
466
+
467
+ Scenario: El header de modo editar tiene selectores
468
+
469
+ Given estoy logueado como owner (Carlos Mendoza)
470
+ And navego a editar una tarea
471
+ When el formulario de edicion carga
472
+ Then deberia encontrar el header de editar
473
+ And deberia encontrar el boton de volver
474
+ ```
475
+
476
+ ### Expected Results
477
+ | Selector Path | POM Accessor | data-cy Value | Status |
478
+ |---------------|--------------|---------------|--------|
479
+ | entities.header.container (create) | tasks.selectors.createHeader | tasks-create-header | Implemented |
480
+ | entities.header.container (view) | tasks.selectors.viewHeader | tasks-view-header | Implemented |
481
+ | entities.header.container (edit) | tasks.selectors.editHeader | tasks-edit-header | Implemented |
482
+ | entities.header.backButton | tasks.selectors.backButton | tasks-back | Implemented |
483
+ | entities.header.title | tasks.selectors.title | tasks-header-title | **NOT IMPLEMENTED** |
484
+ | entities.header.editButton | tasks.selectors.editButton | tasks-edit-btn | Implemented |
485
+ | entities.header.deleteButton | tasks.selectors.deleteButton | tasks-delete-btn | Implemented |
486
+ | entities.header.deleteDialog | tasks.selectors.deleteDialog | tasks-delete-dialog | Implemented |
487
+ | entities.header.deleteConfirm | tasks.selectors.deleteConfirm | tasks-delete-confirm | Implemented |
488
+ | entities.header.deleteCancel | tasks.selectors.deleteCancel | tasks-delete-cancel | Implemented |
489
+
490
+ ---
491
+
492
+ ## @test SEL_TASK_DETAIL_001: Detail Container
493
+
494
+ ### Metadata
495
+ - **Priority:** High
496
+ - **Type:** Selector Validation
497
+ - **Tags:** tasks, detail, container
498
+ - **Grep:** `@ui-selectors` `@SEL_TASK_DETAIL_001`
499
+ - **Status:** Active (1 passing, 0 skipped)
500
+
501
+ ```gherkin:en
502
+ Scenario: Task detail page has container selector
503
+
504
+ Given I am logged in as owner (Carlos Mendoza)
505
+ And I navigate to /dashboard/tasks
506
+ When I get a task ID from the list
507
+ And I navigate to the task detail page
508
+ Then I should find the detail container
509
+ ```
510
+
511
+ ```gherkin:es
512
+ Scenario: La pagina de detalle de tarea tiene selector de contenedor
513
+
514
+ Given estoy logueado como owner (Carlos Mendoza)
515
+ And navego a /dashboard/tasks
516
+ When obtengo un ID de tarea de la lista
517
+ And navego a la pagina de detalle de la tarea
518
+ Then deberia encontrar el contenedor de detalle
519
+ ```
520
+
521
+ ### Expected Results
522
+ | Selector Path | POM Accessor | data-cy Value | Status |
523
+ |---------------|--------------|---------------|--------|
524
+ | entities.detail.container | tasks.selectors.detail | tasks-detail | Implemented |
525
+
526
+ ---
527
+
528
+ ## @test SEL_TASK_FORM_001: Form Selectors
529
+
530
+ ### Metadata
531
+ - **Priority:** High
532
+ - **Type:** Selector Validation
533
+ - **Tags:** tasks, form, fields
534
+ - **Grep:** `@ui-selectors` `@SEL_TASK_FORM_001`
535
+ - **Status:** Active (6 passing, 0 skipped)
536
+
537
+ ```gherkin:en
538
+ Scenario: Task form has all required selectors
539
+
540
+ Given I am logged in as owner (Carlos Mendoza)
541
+ And I navigate to /dashboard/tasks/new
542
+ When the create form loads
543
+ Then I should find the form container
544
+ And I should find the submit button
545
+ And I should find the title field
546
+ And I should find the description field
547
+ And I should find the status field
548
+ And I should find the priority field
549
+ ```
550
+
551
+ ```gherkin:es
552
+ Scenario: El formulario de tarea tiene todos los selectores requeridos
553
+
554
+ Given estoy logueado como owner (Carlos Mendoza)
555
+ And navego a /dashboard/tasks/new
556
+ When el formulario de creacion carga
557
+ Then deberia encontrar el contenedor del formulario
558
+ And deberia encontrar el boton de submit
559
+ And deberia encontrar el campo de titulo
560
+ And deberia encontrar el campo de descripcion
561
+ And deberia encontrar el campo de status
562
+ And deberia encontrar el campo de prioridad
563
+ ```
564
+
565
+ ### Expected Results
566
+ | Selector Path | POM Accessor | data-cy Value | Status |
567
+ |---------------|--------------|---------------|--------|
568
+ | entities.form.container | tasks.selectors.form | tasks-form | Implemented |
569
+ | entities.form.submitButton | tasks.selectors.submitButton | tasks-form-submit | Implemented |
570
+ | entities.form.field (title) | tasks.selectors.field('title') | tasks-field-title | Implemented |
571
+ | entities.form.field (description) | tasks.selectors.field('description') | tasks-field-description | Implemented |
572
+ | entities.form.field (status) | tasks.selectors.field('status') | tasks-field-status | Implemented |
573
+ | entities.form.field (priority) | tasks.selectors.field('priority') | tasks-field-priority | Implemented |
574
+
575
+ ---
576
+
577
+ ## Related Components
578
+
579
+ | Component | File | Selectors |
580
+ |-----------|------|-----------|
581
+ | EntityTable | `packages/core/src/components/entities/EntityTable.tsx` | table-container, search, add, pagination, rows |
582
+ | EntityForm | `packages/core/src/components/entities/EntityForm.tsx` | form, submit, fields |
583
+ | EntityDetail | `packages/core/src/components/entities/EntityDetail.tsx` | detail, header, actions |
584
+ | BulkActionsBar | `packages/core/src/components/entities/BulkActionsBar.tsx` | bulk-bar, count, delete, clear |
585
+ | ConfirmDialog | `packages/core/src/components/entities/ConfirmDialog.tsx` | dialog, confirm, cancel |
586
+ | EntityHeader | `packages/core/src/components/entities/EntityHeader.tsx` | header (create/view/edit), back, actions |
587
+
588
+ ## Related POMs
589
+
590
+ | POM | File | Usage |
591
+ |-----|------|-------|
592
+ | TasksPOM | `themes/default/tests/cypress/src/entities/TasksPOM.ts` | Entity-specific selectors and methods |
593
+ | DashboardEntityPOM | `themes/default/tests/cypress/src/core/DashboardEntityPOM.ts` | Base entity POM with dynamic selectors |