@nextsparkjs/theme-default 0.1.0-beta.44 → 0.1.0-beta.45

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 (48) hide show
  1. package/components/ai-chat/ChatPanel.tsx +7 -7
  2. package/components/ai-chat/Message.tsx +2 -2
  3. package/components/ai-chat/MessageInput.tsx +3 -3
  4. package/components/ai-chat/MessageList.tsx +3 -3
  5. package/components/ai-chat/TypingIndicator.tsx +2 -2
  6. package/entities/customers/api/docs.md +107 -0
  7. package/entities/customers/api/presets.ts +80 -0
  8. package/entities/pages/api/docs.md +114 -0
  9. package/entities/pages/api/presets.ts +72 -0
  10. package/entities/posts/api/docs.md +120 -0
  11. package/entities/posts/api/presets.ts +74 -0
  12. package/entities/tasks/api/docs.md +126 -0
  13. package/entities/tasks/api/presets.ts +84 -0
  14. package/lib/selectors.ts +2 -2
  15. package/messages/de/admin.json +45 -0
  16. package/messages/en/admin.json +45 -0
  17. package/messages/es/admin.json +45 -0
  18. package/messages/fr/admin.json +45 -0
  19. package/messages/it/admin.json +45 -0
  20. package/messages/pt/admin.json +45 -0
  21. package/package.json +3 -3
  22. package/styles/globals.css +24 -0
  23. package/tests/cypress/e2e/_utils/selectors/block-editor.bdd.md +491 -0
  24. package/tests/cypress/e2e/_utils/selectors/block-editor.cy.ts +475 -0
  25. package/tests/cypress/e2e/_utils/selectors/dashboard-container.cy.ts +52 -0
  26. package/tests/cypress/e2e/_utils/selectors/dashboard-mobile.cy.ts +14 -14
  27. package/tests/cypress/e2e/_utils/selectors/dashboard-navigation.cy.ts +3 -3
  28. package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.bdd.md +38 -73
  29. package/tests/cypress/e2e/_utils/selectors/dashboard-sidebar.cy.ts +21 -42
  30. package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.bdd.md +117 -38
  31. package/tests/cypress/e2e/_utils/selectors/dashboard-topnav.cy.ts +35 -12
  32. package/tests/cypress/e2e/_utils/selectors/settings-layout.bdd.md +50 -59
  33. package/tests/cypress/e2e/_utils/selectors/settings-layout.cy.ts +15 -23
  34. package/tests/cypress/e2e/_utils/selectors/tasks.bdd.md +395 -155
  35. package/tests/cypress/e2e/_utils/selectors/tasks.cy.ts +795 -174
  36. package/tests/cypress/e2e/api/_core/teams/teams-security.cy.ts +415 -0
  37. package/tests/cypress/e2e/uat/_core/teams/inline-edit.cy.ts +278 -0
  38. package/tests/cypress/src/core/BlockEditorBasePOM.ts +269 -99
  39. package/tests/cypress/src/core/DashboardEntityPOM.ts +1 -1
  40. package/tests/cypress/src/features/DashboardPOM.ts +49 -28
  41. package/tests/cypress/src/features/PageBuilderPOM.ts +20 -0
  42. package/tests/cypress/src/features/SettingsPOM.ts +511 -166
  43. package/tests/cypress/src/features/SuperadminPOM.ts +679 -159
  44. package/tests/cypress/src/features/index.ts +10 -10
  45. package/tests/cypress/e2e/_utils/selectors/pages-editor.bdd.md +0 -207
  46. package/tests/cypress/e2e/_utils/selectors/pages-editor.cy.ts +0 -211
  47. package/tests/cypress/e2e/_utils/selectors/posts-editor.bdd.md +0 -184
  48. package/tests/cypress/e2e/_utils/selectors/posts-editor.cy.ts +0 -350
@@ -0,0 +1,74 @@
1
+ /**
2
+ * API Presets for Posts Entity
3
+ *
4
+ * These presets appear in the DevTools API Explorer's "Presets" tab.
5
+ * The endpoint is automatically derived from the entity name: /api/v1/posts
6
+ */
7
+
8
+ import { defineApiEndpoint } from '@nextsparkjs/core/types/api-presets'
9
+
10
+ export default defineApiEndpoint({
11
+ summary: 'Manage blog posts with builder and taxonomies',
12
+ presets: [
13
+ {
14
+ id: 'list-all',
15
+ title: 'List All Posts',
16
+ description: 'Fetch all posts with default pagination',
17
+ method: 'GET',
18
+ params: {
19
+ limit: 10,
20
+ offset: 0
21
+ },
22
+ tags: ['read', 'list']
23
+ },
24
+ {
25
+ id: 'list-published',
26
+ title: 'List Published Posts',
27
+ description: 'Fetch only published posts',
28
+ method: 'GET',
29
+ params: {
30
+ status: 'published',
31
+ limit: 20,
32
+ sortBy: 'createdAt',
33
+ sortOrder: 'desc'
34
+ },
35
+ tags: ['read', 'filter', 'public']
36
+ },
37
+ {
38
+ id: 'list-drafts',
39
+ title: 'List Draft Posts',
40
+ description: 'Fetch posts in draft status',
41
+ method: 'GET',
42
+ params: {
43
+ status: 'draft',
44
+ limit: 20
45
+ },
46
+ tags: ['read', 'filter']
47
+ },
48
+ {
49
+ id: 'create-draft',
50
+ title: 'Create Draft Post',
51
+ description: 'Create a new post as draft',
52
+ method: 'POST',
53
+ payload: {
54
+ title: 'My New Blog Post',
55
+ slug: 'my-new-blog-post',
56
+ status: 'draft',
57
+ excerpt: 'A brief introduction to my post',
58
+ blocks: []
59
+ },
60
+ tags: ['write', 'create']
61
+ },
62
+ {
63
+ id: 'search-title',
64
+ title: 'Search by Title',
65
+ description: 'Search posts by title',
66
+ method: 'GET',
67
+ params: {
68
+ search: 'NextSpark',
69
+ searchField: 'title'
70
+ },
71
+ tags: ['read', 'search']
72
+ }
73
+ ]
74
+ })
@@ -0,0 +1,126 @@
1
+ # Tasks API
2
+
3
+ Manage tasks with status tracking, priorities, and metadata support. Tasks are team-scoped private entities.
4
+
5
+ ## Overview
6
+
7
+ The Tasks API allows you to create, read, update, and delete task records. Tasks support status workflows, priority levels, due dates, and metadata. Each task belongs to a team and is filtered based on the authenticated user's team context.
8
+
9
+ ## Authentication
10
+
11
+ All endpoints require authentication via:
12
+ - **Session cookie** (for browser-based requests)
13
+ - **API Key** header (for server-to-server requests)
14
+
15
+ ## Endpoints
16
+
17
+ ### List Tasks
18
+ `GET /api/v1/tasks`
19
+
20
+ Returns a paginated list of tasks for the current team.
21
+
22
+ **Query Parameters:**
23
+ - `limit` (number, optional): Maximum records to return. Default: 20
24
+ - `offset` (number, optional): Number of records to skip. Default: 0
25
+ - `status` (string, optional): Filter by status (todo, in-progress, review, done, blocked)
26
+ - `priority` (string, optional): Filter by priority (low, medium, high, urgent)
27
+ - `search` (string, optional): Search term for title/description
28
+ - `sortBy` (string, optional): Field to sort by
29
+ - `sortOrder` (string, optional): Sort direction (asc, desc)
30
+
31
+ **Example Response:**
32
+ ```json
33
+ {
34
+ "data": [
35
+ {
36
+ "id": "task_123",
37
+ "title": "Implement new feature",
38
+ "description": "Add user authentication flow",
39
+ "status": "in-progress",
40
+ "priority": "high",
41
+ "dueDate": "2024-02-01",
42
+ "estimatedHours": 8,
43
+ "tags": ["feature", "auth"],
44
+ "createdAt": "2024-01-15T10:30:00Z"
45
+ }
46
+ ],
47
+ "pagination": {
48
+ "total": 42,
49
+ "limit": 20,
50
+ "offset": 0
51
+ }
52
+ }
53
+ ```
54
+
55
+ ### Get Single Task
56
+ `GET /api/v1/tasks/[id]`
57
+
58
+ Returns a single task by ID.
59
+
60
+ **Path Parameters:**
61
+ - `id` (string, required): Task ID
62
+
63
+ ### Create Task
64
+ `POST /api/v1/tasks`
65
+
66
+ Create a new task record.
67
+
68
+ **Request Body:**
69
+ ```json
70
+ {
71
+ "title": "New Task",
72
+ "description": "Task details here",
73
+ "status": "todo",
74
+ "priority": "medium",
75
+ "dueDate": "2024-02-15",
76
+ "estimatedHours": 4,
77
+ "tags": ["development"]
78
+ }
79
+ ```
80
+
81
+ ### Update Task
82
+ `PATCH /api/v1/tasks/[id]`
83
+
84
+ Update an existing task.
85
+
86
+ **Path Parameters:**
87
+ - `id` (string, required): Task ID
88
+
89
+ **Request Body:**
90
+ Any fields to update (partial update supported).
91
+
92
+ ### Delete Task
93
+ `DELETE /api/v1/tasks/[id]`
94
+
95
+ Delete a task record.
96
+
97
+ **Path Parameters:**
98
+ - `id` (string, required): Task ID
99
+
100
+ ## Fields
101
+
102
+ | Field | Type | Required | Default | Description |
103
+ |-------|------|----------|---------|-------------|
104
+ | title | text | Yes | - | Task title |
105
+ | description | textarea | No | - | Detailed description |
106
+ | status | select | No | todo | todo, in-progress, review, done, blocked |
107
+ | priority | select | No | medium | low, medium, high, urgent |
108
+ | tags | tags | No | [] | Task tags for categorization |
109
+ | dueDate | date | No | - | Task deadline |
110
+ | estimatedHours | number | No | - | Estimated time to complete |
111
+
112
+ ## Metadata Support
113
+
114
+ Tasks support the metadata system. Use the metadata endpoints to store additional custom data:
115
+ - `POST /api/v1/tasks/[id]/meta` - Add metadata
116
+ - `GET /api/v1/tasks/[id]/meta` - Get metadata
117
+
118
+ ## Error Responses
119
+
120
+ | Status | Description |
121
+ |--------|-------------|
122
+ | 400 | Bad Request - Invalid parameters |
123
+ | 401 | Unauthorized - Missing or invalid auth |
124
+ | 403 | Forbidden - Insufficient permissions |
125
+ | 404 | Not Found - Task doesn't exist |
126
+ | 422 | Validation Error - Invalid data |
@@ -0,0 +1,84 @@
1
+ /**
2
+ * API Presets for Tasks Entity
3
+ *
4
+ * These presets appear in the DevTools API Explorer's "Presets" tab.
5
+ * The endpoint is automatically derived from the entity name: /api/v1/tasks
6
+ */
7
+
8
+ import { defineApiEndpoint } from '@nextsparkjs/core/types/api-presets'
9
+
10
+ export default defineApiEndpoint({
11
+ summary: 'Manage tasks with status and priorities',
12
+ presets: [
13
+ {
14
+ id: 'list-all',
15
+ title: 'List All Tasks',
16
+ description: 'Fetch all tasks with default pagination',
17
+ method: 'GET',
18
+ params: {
19
+ limit: 10,
20
+ offset: 0
21
+ },
22
+ tags: ['read', 'list']
23
+ },
24
+ {
25
+ id: 'list-todo',
26
+ title: 'List To-Do Tasks',
27
+ description: 'Fetch tasks in to-do status',
28
+ method: 'GET',
29
+ params: {
30
+ status: 'todo',
31
+ limit: 20
32
+ },
33
+ tags: ['read', 'filter']
34
+ },
35
+ {
36
+ id: 'list-in-progress',
37
+ title: 'List In Progress',
38
+ description: 'Fetch tasks currently in progress',
39
+ method: 'GET',
40
+ params: {
41
+ status: 'in-progress',
42
+ limit: 20
43
+ },
44
+ tags: ['read', 'filter']
45
+ },
46
+ {
47
+ id: 'list-urgent',
48
+ title: 'List Urgent Tasks',
49
+ description: 'Fetch high priority and urgent tasks',
50
+ method: 'GET',
51
+ params: {
52
+ priority: 'urgent',
53
+ sortBy: 'dueDate',
54
+ sortOrder: 'asc'
55
+ },
56
+ tags: ['read', 'filter', 'priority']
57
+ },
58
+ {
59
+ id: 'create-task',
60
+ title: 'Create New Task',
61
+ description: 'Create a new task with sample data',
62
+ method: 'POST',
63
+ payload: {
64
+ title: 'New Task',
65
+ description: 'Task description here',
66
+ status: 'todo',
67
+ priority: 'medium',
68
+ tags: ['development']
69
+ },
70
+ tags: ['write', 'create']
71
+ },
72
+ {
73
+ id: 'search-title',
74
+ title: 'Search by Title',
75
+ description: 'Search tasks by title',
76
+ method: 'GET',
77
+ params: {
78
+ search: 'feature',
79
+ searchField: 'title'
80
+ },
81
+ tags: ['read', 'search']
82
+ }
83
+ ]
84
+ })
package/lib/selectors.ts CHANGED
@@ -9,7 +9,7 @@
9
9
  * - Cypress tests (via tests/cypress/src/selectors.ts)
10
10
  */
11
11
 
12
- import { createSelectorHelpers, CORE_SELECTORS } from '@nextsparkjs/testing/selectors'
12
+ import { createSelectorHelpers, CORE_SELECTORS } from '@nextsparkjs/core/selectors'
13
13
 
14
14
  // =============================================================================
15
15
  // BLOCK SELECTORS
@@ -196,5 +196,5 @@ export const entitySelectors = helpers.entitySelectors
196
196
  */
197
197
  export type ThemeSelectorsType = typeof THEME_SELECTORS
198
198
  export type BlockSelectorsType = typeof BLOCK_SELECTORS
199
- export type { Replacements } from '@nextsparkjs/testing/selectors'
199
+ export type { Replacements } from '@nextsparkjs/core/selectors'
200
200
  export { CORE_SELECTORS }
@@ -214,6 +214,51 @@
214
214
  "messages": {
215
215
  "saved": "Erfolgreich gespeichert",
216
216
  "created": "Erfolgreich erstellt"
217
+ },
218
+ "header": {
219
+ "actions": {
220
+ "saveDraft": "Entwurf Speichern",
221
+ "publish": "Veröffentlichen",
222
+ "update": "Aktualisieren"
223
+ }
224
+ },
225
+ "canvas": {
226
+ "empty": {
227
+ "title": "Noch keine Blöcke",
228
+ "subtitle": "Fügen Sie Blöcke aus der Seitenleiste hinzu"
229
+ },
230
+ "editingBadge": "Bearbeiten",
231
+ "error": {
232
+ "blockNotFound": "Block nicht gefunden"
233
+ }
234
+ },
235
+ "floatingToolbar": {
236
+ "drag": "Ziehen zum Neuordnen",
237
+ "duplicate": "Block duplizieren",
238
+ "delete": "Block löschen"
239
+ },
240
+ "settingsPanel": {
241
+ "title": "Block-Eigenschaften",
242
+ "empty": {
243
+ "message": "Kein Block ausgewählt",
244
+ "hint": "Wählen Sie einen Block aus dem Canvas, um seine Einstellungen zu bearbeiten"
245
+ },
246
+ "error": {
247
+ "notFound": "Block-Konfiguration nicht gefunden"
248
+ },
249
+ "actions": {
250
+ "reset": "Zurücksetzen",
251
+ "remove": "Entfernen"
252
+ },
253
+ "tabs": {
254
+ "content": "Inhalt",
255
+ "design": "Design",
256
+ "advanced": "Erweitert",
257
+ "noContentFields": "Keine Inhaltsfelder",
258
+ "noDesignFields": "Keine Designfelder",
259
+ "noAdvancedFields": "Keine erweiterten Felder"
260
+ },
261
+ "noFields": "Dieser Block hat keine konfigurierbaren Felder"
217
262
  }
218
263
  }
219
264
  }
@@ -214,6 +214,51 @@
214
214
  "messages": {
215
215
  "saved": "Saved successfully",
216
216
  "created": "Created successfully"
217
+ },
218
+ "header": {
219
+ "actions": {
220
+ "saveDraft": "Save Draft",
221
+ "publish": "Publish",
222
+ "update": "Update"
223
+ }
224
+ },
225
+ "canvas": {
226
+ "empty": {
227
+ "title": "No blocks yet",
228
+ "subtitle": "Add blocks from the left sidebar"
229
+ },
230
+ "editingBadge": "Editing",
231
+ "error": {
232
+ "blockNotFound": "Block not found"
233
+ }
234
+ },
235
+ "floatingToolbar": {
236
+ "drag": "Drag to reorder",
237
+ "duplicate": "Duplicate block",
238
+ "delete": "Delete block"
239
+ },
240
+ "settingsPanel": {
241
+ "title": "Block Properties",
242
+ "empty": {
243
+ "message": "No block selected",
244
+ "hint": "Select a block from the canvas to edit its settings"
245
+ },
246
+ "error": {
247
+ "notFound": "Block configuration not found"
248
+ },
249
+ "actions": {
250
+ "reset": "Reset",
251
+ "remove": "Remove"
252
+ },
253
+ "tabs": {
254
+ "content": "Content",
255
+ "design": "Design",
256
+ "advanced": "Advanced",
257
+ "noContentFields": "No content fields",
258
+ "noDesignFields": "No design fields",
259
+ "noAdvancedFields": "No advanced fields"
260
+ },
261
+ "noFields": "This block has no configurable fields"
217
262
  }
218
263
  }
219
264
  }
@@ -214,6 +214,51 @@
214
214
  "messages": {
215
215
  "saved": "Guardado exitosamente",
216
216
  "created": "Creado exitosamente"
217
+ },
218
+ "header": {
219
+ "actions": {
220
+ "saveDraft": "Guardar Borrador",
221
+ "publish": "Publicar",
222
+ "update": "Actualizar"
223
+ }
224
+ },
225
+ "canvas": {
226
+ "empty": {
227
+ "title": "Aún no hay bloques",
228
+ "subtitle": "Agrega bloques desde la barra lateral izquierda"
229
+ },
230
+ "editingBadge": "Editando",
231
+ "error": {
232
+ "blockNotFound": "Bloque no encontrado"
233
+ }
234
+ },
235
+ "floatingToolbar": {
236
+ "drag": "Arrastra para reordenar",
237
+ "duplicate": "Duplicar bloque",
238
+ "delete": "Eliminar bloque"
239
+ },
240
+ "settingsPanel": {
241
+ "title": "Propiedades del Bloque",
242
+ "empty": {
243
+ "message": "Ningún bloque seleccionado",
244
+ "hint": "Selecciona un bloque del canvas para editar su configuración"
245
+ },
246
+ "error": {
247
+ "notFound": "Configuración del bloque no encontrada"
248
+ },
249
+ "actions": {
250
+ "reset": "Restablecer",
251
+ "remove": "Eliminar"
252
+ },
253
+ "tabs": {
254
+ "content": "Contenido",
255
+ "design": "Diseño",
256
+ "advanced": "Avanzado",
257
+ "noContentFields": "Sin campos de contenido",
258
+ "noDesignFields": "Sin campos de diseño",
259
+ "noAdvancedFields": "Sin campos avanzados"
260
+ },
261
+ "noFields": "Este bloque no tiene campos configurables"
217
262
  }
218
263
  }
219
264
  }
@@ -214,6 +214,51 @@
214
214
  "messages": {
215
215
  "saved": "Enregistre avec succes",
216
216
  "created": "Cree avec succes"
217
+ },
218
+ "header": {
219
+ "actions": {
220
+ "saveDraft": "Sauvegarder Brouillon",
221
+ "publish": "Publier",
222
+ "update": "Mettre à jour"
223
+ }
224
+ },
225
+ "canvas": {
226
+ "empty": {
227
+ "title": "Pas encore de blocs",
228
+ "subtitle": "Ajoutez des blocs depuis la barre laterale"
229
+ },
230
+ "editingBadge": "Edition",
231
+ "error": {
232
+ "blockNotFound": "Bloc non trouve"
233
+ }
234
+ },
235
+ "floatingToolbar": {
236
+ "drag": "Glissez pour reordonner",
237
+ "duplicate": "Dupliquer le bloc",
238
+ "delete": "Supprimer le bloc"
239
+ },
240
+ "settingsPanel": {
241
+ "title": "Proprietes du Bloc",
242
+ "empty": {
243
+ "message": "Aucun bloc selectionne",
244
+ "hint": "Selectionnez un bloc du canvas pour modifier ses parametres"
245
+ },
246
+ "error": {
247
+ "notFound": "Configuration du bloc non trouvee"
248
+ },
249
+ "actions": {
250
+ "reset": "Reinitialiser",
251
+ "remove": "Supprimer"
252
+ },
253
+ "tabs": {
254
+ "content": "Contenu",
255
+ "design": "Design",
256
+ "advanced": "Avance",
257
+ "noContentFields": "Pas de champs de contenu",
258
+ "noDesignFields": "Pas de champs de design",
259
+ "noAdvancedFields": "Pas de champs avances"
260
+ },
261
+ "noFields": "Ce bloc n'a pas de champs configurables"
217
262
  }
218
263
  }
219
264
  }
@@ -214,6 +214,51 @@
214
214
  "messages": {
215
215
  "saved": "Salvato con successo",
216
216
  "created": "Creato con successo"
217
+ },
218
+ "header": {
219
+ "actions": {
220
+ "saveDraft": "Salva Bozza",
221
+ "publish": "Pubblica",
222
+ "update": "Aggiorna"
223
+ }
224
+ },
225
+ "canvas": {
226
+ "empty": {
227
+ "title": "Nessun blocco ancora",
228
+ "subtitle": "Aggiungi blocchi dalla barra laterale"
229
+ },
230
+ "editingBadge": "Modifica",
231
+ "error": {
232
+ "blockNotFound": "Blocco non trovato"
233
+ }
234
+ },
235
+ "floatingToolbar": {
236
+ "drag": "Trascina per riordinare",
237
+ "duplicate": "Duplica blocco",
238
+ "delete": "Elimina blocco"
239
+ },
240
+ "settingsPanel": {
241
+ "title": "Proprietà del Blocco",
242
+ "empty": {
243
+ "message": "Nessun blocco selezionato",
244
+ "hint": "Seleziona un blocco dal canvas per modificare le impostazioni"
245
+ },
246
+ "error": {
247
+ "notFound": "Configurazione del blocco non trovata"
248
+ },
249
+ "actions": {
250
+ "reset": "Ripristina",
251
+ "remove": "Rimuovi"
252
+ },
253
+ "tabs": {
254
+ "content": "Contenuto",
255
+ "design": "Design",
256
+ "advanced": "Avanzato",
257
+ "noContentFields": "Nessun campo contenuto",
258
+ "noDesignFields": "Nessun campo design",
259
+ "noAdvancedFields": "Nessun campo avanzato"
260
+ },
261
+ "noFields": "Questo blocco non ha campi configurabili"
217
262
  }
218
263
  }
219
264
  }
@@ -214,6 +214,51 @@
214
214
  "messages": {
215
215
  "saved": "Salvo com sucesso",
216
216
  "created": "Criado com sucesso"
217
+ },
218
+ "header": {
219
+ "actions": {
220
+ "saveDraft": "Salvar Rascunho",
221
+ "publish": "Publicar",
222
+ "update": "Atualizar"
223
+ }
224
+ },
225
+ "canvas": {
226
+ "empty": {
227
+ "title": "Nenhum bloco ainda",
228
+ "subtitle": "Adicione blocos da barra lateral"
229
+ },
230
+ "editingBadge": "Editando",
231
+ "error": {
232
+ "blockNotFound": "Bloco não encontrado"
233
+ }
234
+ },
235
+ "floatingToolbar": {
236
+ "drag": "Arraste para reordenar",
237
+ "duplicate": "Duplicar bloco",
238
+ "delete": "Excluir bloco"
239
+ },
240
+ "settingsPanel": {
241
+ "title": "Propriedades do Bloco",
242
+ "empty": {
243
+ "message": "Nenhum bloco selecionado",
244
+ "hint": "Selecione um bloco do canvas para editar as configurações"
245
+ },
246
+ "error": {
247
+ "notFound": "Configuração do bloco não encontrada"
248
+ },
249
+ "actions": {
250
+ "reset": "Redefinir",
251
+ "remove": "Remover"
252
+ },
253
+ "tabs": {
254
+ "content": "Conteúdo",
255
+ "design": "Design",
256
+ "advanced": "Avançado",
257
+ "noContentFields": "Sem campos de conteúdo",
258
+ "noDesignFields": "Sem campos de design",
259
+ "noAdvancedFields": "Sem campos avançados"
260
+ },
261
+ "noFields": "Este bloco não tem campos configuráveis"
217
262
  }
218
263
  }
219
264
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nextsparkjs/theme-default",
3
- "version": "0.1.0-beta.44",
3
+ "version": "0.1.0-beta.45",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./config/theme.config.ts",
@@ -17,8 +17,8 @@
17
17
  "react-dom": "^19.0.0",
18
18
  "react-markdown": "^10.1.0",
19
19
  "zod": "^4.0.0",
20
- "@nextsparkjs/core": "0.1.0-beta.44",
21
- "@nextsparkjs/testing": "0.1.0-beta.44"
20
+ "@nextsparkjs/core": "0.1.0-beta.45",
21
+ "@nextsparkjs/testing": "0.1.0-beta.45"
22
22
  },
23
23
  "nextspark": {
24
24
  "type": "theme",
@@ -3,8 +3,20 @@
3
3
  *
4
4
  * Pure neutral grays using OKLCH color space.
5
5
  * Based on shadcn/ui default configuration.
6
+ *
7
+ * ÚNICA FUENTE DE VERDAD para estilos del theme.
8
+ * Editar este archivo para customizar el design system.
6
9
  */
7
10
 
11
+ /* =============================================
12
+ IMPORTS
13
+ ============================================= */
14
+ @import "tailwindcss";
15
+ @import "@nextsparkjs/core/styles/ui.css";
16
+ @import "@nextsparkjs/core/styles/utilities.css";
17
+ @import "@nextsparkjs/core/styles/docs.css";
18
+ @source "../../../**/*.{js,ts,jsx,tsx}";
19
+
8
20
  /* =============================================
9
21
  DEFAULT THEME - LIGHT MODE
10
22
  ============================================= */
@@ -177,3 +189,15 @@
177
189
  --shadow-xl: var(--shadow-xl);
178
190
  --shadow-2xl: var(--shadow-2xl);
179
191
  }
192
+
193
+ /* =============================================
194
+ BASE STYLES
195
+ ============================================= */
196
+ * {
197
+ border-color: var(--border);
198
+ }
199
+
200
+ body {
201
+ background-color: var(--background);
202
+ color: var(--foreground);
203
+ }