@nextsparkjs/theme-default 0.1.0-beta.38 β†’ 0.1.0-beta.40

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 (25) hide show
  1. package/components/ai-chat/ChatPanel.tsx +1 -1
  2. package/components/ai-chat/Message.tsx +1 -1
  3. package/components/ai-chat/MessageInput.tsx +1 -1
  4. package/components/ai-chat/MessageList.tsx +1 -1
  5. package/components/ai-chat/TypingIndicator.tsx +1 -1
  6. package/lib/selectors.ts +2 -3
  7. package/package.json +3 -2
  8. package/tests/cypress/e2e/api/_core/billing/BillingAPIController.js +1 -1
  9. package/tests/cypress/e2e/api/_core/settings/api-keys.crud.cy.ts +1 -1
  10. package/tests/cypress/e2e/api/_core/users/users-crud.cy.ts +1 -1
  11. package/tests/cypress/e2e/api/_core/users/users-metas.cy.ts +1 -1
  12. package/tests/cypress/e2e/api/entities/customers/customers-crud.cy.ts +1 -1
  13. package/tests/cypress/e2e/api/entities/customers/customers-metas.cy.ts +1 -1
  14. package/tests/cypress/e2e/api/entities/tasks/tasks-crud.cy.ts +1 -1
  15. package/tests/cypress/e2e/api/entities/tasks/tasks-metas.cy.ts +1 -1
  16. package/tests/cypress/e2e/uat/_core/teams/team-switcher.md +2 -2
  17. package/tests/cypress/src/core/BasePOM.ts +23 -76
  18. package/tests/cypress/src/core/DashboardEntityPOM.ts +17 -668
  19. package/tests/cypress/src/entities/TasksPOM.ts +70 -0
  20. package/tests/cypress/src/helpers/ApiInterceptor.ts +14 -171
  21. package/tests/cypress.config.ts +12 -17
  22. package/tests/cypress/e2e/_utils/docs/tutorials/sector7-superadmin-teams.narration.json +0 -155
  23. package/tests/cypress/e2e/_utils/docs/tutorials/sector7-superadmin.cy.ts +0 -390
  24. package/tests/cypress/e2e/_utils/docs/tutorials/teams-system.doc.cy.ts +0 -349
  25. package/tests/cypress/e2e/_utils/docs/tutorials/teams-system.narration.json +0 -165
@@ -1,390 +0,0 @@
1
- /// <reference types="cypress" />
2
-
3
- /**
4
- * Sector 7 - SuperAdmin Teams View - Documentation Video
5
- *
6
- * This test generates a documentation video showing how a superadmin
7
- * can access Sector 7 and view all teams in the system.
8
- *
9
- * Run: NEXT_PUBLIC_ACTIVE_THEME=default pnpm cy:run --spec "sector7-superadmin-teams.doc.cy.ts"
10
- *
11
- * Output:
12
- * - Video: cypress/videos/docs/tutorials/superadmin-superadmin-teams.doc.cy.ts.mp4
13
- * - Narrations: cypress/docs-output/narrations/superadmin-superadmin-teams.doc-narrations.json
14
- *
15
- * @tags @doc, @tutorial, @sector7, @superadmin
16
- */
17
-
18
- // Import slow-down plugin
19
- import { slowCypressDown } from 'cypress-slow-down'
20
- import 'cypress-slow-down/commands'
21
-
22
- // Import POMs
23
- import { LoginForm } from '../../../../../../../../test/cypress/src/classes/components/auth/LoginForm.js'
24
- import { TopNavbar } from '../../../../../../../../test/cypress/src/classes/components/navigation/TopNavbar.js'
25
- import { SuperadminNavigation } from '../../../../../../../../test/cypress/src/classes/superadmin/SuperadminNavigation.js'
26
- import { TeamsTable } from '../../../../../../../../test/cypress/src/classes/superadmin/TeamsTable.js'
27
- import { Session } from '../../../../../../../../test/cypress/src/classes/shared'
28
-
29
- // ============================================
30
- // Configuration
31
- // ============================================
32
-
33
- const CONFIG = {
34
- // Speed control (ms between commands) - FAST for ~1:30 video
35
- commandDelay: 200,
36
-
37
- // Narration timing (ms) - Optimized for short video
38
- narration: {
39
- short: 1000, // ~8 words
40
- medium: 1500, // ~12-15 words
41
- long: 2000, // ~20 words
42
- chapter: 1000, // Chapter title display
43
- pause: 400, // Pause for emphasis
44
- },
45
-
46
- // SuperAdmin credentials (from sample data)
47
- superadmin: {
48
- email: 'superadmin@nextspark.dev',
49
- password: 'Pandora1234',
50
- },
51
- }
52
-
53
- // ============================================
54
- // Narration Helpers
55
- // ============================================
56
-
57
- interface NarrationEntry {
58
- timestamp: number
59
- step: number
60
- text: string
61
- chapter?: string
62
- duration: number
63
- }
64
-
65
- let narrations: NarrationEntry[] = []
66
- let stepCounter = 0
67
-
68
- /**
69
- * Log narration and wait for reading time
70
- */
71
- function narrate(text: string, durationMs: number = CONFIG.narration.medium) {
72
- stepCounter++
73
- const entry: NarrationEntry = {
74
- timestamp: Date.now(),
75
- step: stepCounter,
76
- text,
77
- duration: durationMs,
78
- }
79
- narrations.push(entry)
80
-
81
- // Visual log (appears in video)
82
- cy.log(`πŸŽ™οΈ **[${stepCounter}]** ${text}`)
83
-
84
- // Wait for narration duration
85
- cy.wait(durationMs, { log: false })
86
- }
87
-
88
- /**
89
- * Add chapter marker
90
- */
91
- function chapter(title: string) {
92
- stepCounter++
93
- narrations.push({
94
- timestamp: Date.now(),
95
- step: stepCounter,
96
- text: `=== ${title} ===`,
97
- chapter: title,
98
- duration: CONFIG.narration.chapter,
99
- })
100
-
101
- cy.log(`πŸ“– ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`)
102
- cy.log(`πŸ“– **${title.toUpperCase()}**`)
103
- cy.log(`πŸ“– ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`)
104
- cy.wait(CONFIG.narration.chapter, { log: false })
105
- }
106
-
107
- /**
108
- * Pause for emphasis
109
- */
110
- function pause(ms: number = CONFIG.narration.pause) {
111
- cy.wait(ms, { log: false })
112
- }
113
-
114
- /**
115
- * Highlight element with visual indicator
116
- */
117
- function highlight(selector: string, duration: number = 1200) {
118
- cy.get(selector).then($el => {
119
- $el.css({
120
- outline: '4px solid #ef4444',
121
- outlineOffset: '4px',
122
- boxShadow: '0 0 20px rgba(239, 68, 68, 0.5)',
123
- transition: 'all 0.3s ease',
124
- })
125
- })
126
-
127
- cy.wait(duration, { log: false })
128
-
129
- cy.get(selector).then($el => {
130
- $el.css({
131
- outline: 'none',
132
- outlineOffset: '0',
133
- boxShadow: 'none',
134
- })
135
- })
136
- }
137
-
138
- // ============================================
139
- // Documentation Test
140
- // ============================================
141
-
142
- describe('Tutorial: Sector 7 - SuperAdmin Teams View', {
143
- tags: ['@doc', '@tutorial', '@sector7', '@superadmin'],
144
- retries: 0, // No retries for documentation videos
145
- }, () => {
146
- const loginForm = new LoginForm()
147
- const topNavbar = new TopNavbar()
148
- const sector7Nav = new SuperadminNavigation()
149
- const teamsTable = new TeamsTable()
150
-
151
- before(() => {
152
- // Enable slow mode for documentation
153
- slowCypressDown(CONFIG.commandDelay)
154
-
155
- cy.log('🎬 ═══════════════════════════════════════')
156
- cy.log('🎬 **DOCUMENTATION VIDEO RECORDING**')
157
- cy.log('🎬 Sector 7 - SuperAdmin Teams View')
158
- cy.log('🎬 ═══════════════════════════════════════')
159
- })
160
-
161
- beforeEach(() => {
162
- // Reset narrations before each test/retry
163
- narrations = []
164
- stepCounter = 0
165
-
166
- // Setup real authentication test
167
- Session.setupRealAuthenticationTest()
168
- })
169
-
170
- after(() => {
171
- // Save narrations to file
172
- const specName = 'sector7-superadmin-teams.doc'
173
- cy.task('saveNarrations', { specName, narrations })
174
-
175
- cy.log('🎬 ═══════════════════════════════════════')
176
- cy.log('🎬 **RECORDING COMPLETE**')
177
- cy.log('🎬 ═══════════════════════════════════════')
178
- })
179
-
180
- // ============================================
181
- // Single test that captures the entire tutorial
182
- // ============================================
183
-
184
- it('demuestra cΓ³mo un superadmin accede a Sector 7 para ver todos los teams', () => {
185
- // ─────────────────────────────────────────
186
- // CHAPTER 1: IntroducciΓ³n
187
- // ─────────────────────────────────────────
188
- chapter('IntroducciΓ³n')
189
-
190
- narrate(
191
- 'Bienvenido a Sector 7, el Γ‘rea exclusiva para super administradores.',
192
- CONFIG.narration.medium
193
- )
194
-
195
- narrate(
196
- 'Hoy veremos cΓ³mo acceder y visualizar todos los equipos del sistema.',
197
- CONFIG.narration.medium
198
- )
199
-
200
- // ─────────────────────────────────────────
201
- // CHAPTER 2: Login como SuperAdmin
202
- // ─────────────────────────────────────────
203
- chapter('Login como SuperAdmin')
204
-
205
- // Navigate to login
206
- cy.visit('/login')
207
- cy.wait(1500, { log: false })
208
-
209
- narrate(
210
- 'Iniciamos sesiΓ³n con las credenciales de superadmin.',
211
- CONFIG.narration.short
212
- )
213
-
214
- // Click to show email form, wait for form to appear
215
- cy.get('[data-cy="login-show-email"]').should('be.visible').click()
216
- cy.wait(500, { log: false })
217
-
218
- // Wait for form inputs to be visible (separate chain to avoid detachment issues)
219
- cy.get('[data-cy="login-email-input"]', { timeout: 10000 }).should('be.visible')
220
- cy.get('[data-cy="login-password-input"]', { timeout: 10000 }).should('be.visible')
221
- pause(500)
222
-
223
- narrate(
224
- 'Usamos el email del superadmin de prueba.',
225
- CONFIG.narration.short
226
- )
227
-
228
- // Fill email (separate get to avoid detachment)
229
- cy.get('[data-cy="login-email-input"]').clear().type(CONFIG.superadmin.email)
230
- pause(300)
231
-
232
- narrate(
233
- 'Ingresamos la contraseΓ±a y enviamos.',
234
- CONFIG.narration.short
235
- )
236
-
237
- // Fill password (separate get)
238
- cy.get('[data-cy="login-password-input"]').clear().type(CONFIG.superadmin.password, { log: false })
239
- pause(200)
240
-
241
- // Submit (separate get)
242
- cy.get('[data-cy="login-submit"]').click()
243
-
244
- // Wait for dashboard
245
- cy.url().should('include', '/dashboard', { timeout: 15000 })
246
- pause(500)
247
-
248
- narrate(
249
- 'Acceso concedido. Observa el icono de Sector 7 en la barra superior.',
250
- CONFIG.narration.medium
251
- )
252
-
253
- // Highlight Sector 7 icon
254
- highlight('[data-cy="topnav-superadmin"]', 1200)
255
-
256
- // ─────────────────────────────────────────
257
- // CHAPTER 3: NavegaciΓ³n a Sector 7
258
- // ─────────────────────────────────────────
259
- chapter('NavegaciΓ³n a Sector 7')
260
-
261
- narrate(
262
- 'Hacemos clic para ingresar al Γ‘rea restringida.',
263
- CONFIG.narration.short
264
- )
265
-
266
- // Navigate to Sector 7
267
- topNavbar.navigateToSuperadmin()
268
-
269
- // Wait for Sector 7 page
270
- cy.url().should('include', '/superadmin')
271
- cy.contains('Super Administrator Control Panel').should('be.visible')
272
- pause(500)
273
-
274
- narrate(
275
- 'Este es el panel de control del super administrador.',
276
- CONFIG.narration.medium
277
- )
278
-
279
- pause(300)
280
-
281
- narrate(
282
- 'En el menΓΊ lateral vemos las opciones disponibles.',
283
- CONFIG.narration.short
284
- )
285
-
286
- // Highlight Teams nav option
287
- highlight('[data-cy="superadmin-nav-teams"]', 1000)
288
-
289
- // ─────────────────────────────────────────
290
- // CHAPTER 4: VisualizaciΓ³n de Teams
291
- // ─────────────────────────────────────────
292
- chapter('VisualizaciΓ³n de Teams')
293
-
294
- narrate(
295
- 'Navegamos a la secciΓ³n de Equipos.',
296
- CONFIG.narration.short
297
- )
298
-
299
- // Navigate to Teams
300
- sector7Nav.navigateToTeams()
301
-
302
- // Wait for teams page
303
- cy.url().should('include', '/superadmin/teams')
304
- cy.contains('Team Management').should('be.visible')
305
- pause(500)
306
-
307
- narrate(
308
- 'AquΓ­ vemos todos los equipos del sistema con estadΓ­sticas.',
309
- CONFIG.narration.medium
310
- )
311
-
312
- // Highlight stats card
313
- cy.get('.text-2xl.font-bold').first().then($el => {
314
- $el.css({
315
- outline: '4px solid #22c55e',
316
- outlineOffset: '4px',
317
- boxShadow: '0 0 15px rgba(34, 197, 94, 0.4)',
318
- })
319
- })
320
- pause(1000)
321
- cy.get('.text-2xl.font-bold').first().then($el => {
322
- $el.css({ outline: 'none', boxShadow: 'none' })
323
- })
324
-
325
- narrate(
326
- 'La pestaΓ±a Work Teams muestra equipos colaborativos.',
327
- CONFIG.narration.medium
328
- )
329
-
330
- // Highlight Work Teams tab (use button with role="tab")
331
- cy.contains('button[role="tab"]', 'Work Teams').then($el => {
332
- $el.css({
333
- outline: '3px solid #3b82f6',
334
- outlineOffset: '2px',
335
- })
336
- })
337
- pause(800)
338
- cy.contains('button[role="tab"]', 'Work Teams').then($el => {
339
- $el.css({ outline: 'none' })
340
- })
341
-
342
- // Wait for table to load
343
- cy.get('table').should('be.visible')
344
- pause(500)
345
-
346
- narrate(
347
- 'TambiΓ©n podemos ver los equipos personales de cada usuario.',
348
- CONFIG.narration.medium
349
- )
350
-
351
- // Switch to Personal tab
352
- cy.contains('button[role="tab"]', 'Personal').click()
353
- pause(800)
354
-
355
- // Wait for table to update
356
- cy.get('table').should('be.visible')
357
- pause(500)
358
-
359
- narrate(
360
- 'El buscador permite filtrar equipos por nombre o email del propietario.',
361
- CONFIG.narration.medium
362
- )
363
-
364
- // Highlight search input
365
- highlight('[data-cy="teams-search-input"]', 1000)
366
-
367
- // ─────────────────────────────────────────
368
- // CHAPTER 5: ConclusiΓ³n
369
- // ─────────────────────────────────────────
370
- chapter('ConclusiΓ³n')
371
-
372
- narrate(
373
- 'AsΓ­ funciona Sector 7: acceso exclusivo a la gestiΓ³n global del sistema.',
374
- CONFIG.narration.medium
375
- )
376
-
377
- pause(500)
378
-
379
- narrate(
380
- 'Gracias por ver este tutorial.',
381
- CONFIG.narration.short
382
- )
383
-
384
- cy.log('🎬 ═══════════════════════════════════════')
385
- cy.log('🎬 **‘Gracias por ver este tutorial!**')
386
- cy.log('🎬 ═══════════════════════════════════════')
387
-
388
- pause(800)
389
- })
390
- })