desy-html 15.0.2 → 16.0.0

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 (185) hide show
  1. package/AGENTS.md +180 -0
  2. package/README.md +22 -4
  3. package/TESTING_PLAN.md +369 -0
  4. package/branding/BRANDING.md +369 -0
  5. package/branding/branding.config.js +69 -0
  6. package/branding/branding.config.yourorganization.js +65 -0
  7. package/branding/logos/aragon-compact.svg +1 -0
  8. package/branding/logos/aragon-expanded.svg +1 -0
  9. package/branding/logos/aragon-mini.svg +1 -0
  10. package/branding/logos/yourlogo-compact.svg +13 -0
  11. package/branding/logos/yourlogo-expanded.svg +17 -0
  12. package/branding/logos/yourlogo-mini.svg +17 -0
  13. package/branding/vite-branding-plugin.js +128 -0
  14. package/docs/_global.head.njk +12 -4
  15. package/docs/_macro.example-render.njk +6 -0
  16. package/docs/catalogo.html +2 -2
  17. package/docs/componentes.html +2 -2
  18. package/docs/estilos.html +1 -1
  19. package/docs/examples-accordion-history.html +1 -1
  20. package/docs/examples-accordion.html +1 -1
  21. package/docs/examples-alert.html +1 -1
  22. package/docs/examples-breadcrumbs.html +1 -1
  23. package/docs/examples-button-loader.html +1 -1
  24. package/docs/examples-button.html +1 -1
  25. package/docs/examples-card.html +2 -2
  26. package/docs/examples-character-count.html +1 -1
  27. package/docs/examples-checkboxes.html +2 -2
  28. package/docs/examples-collapsible.html +2 -2
  29. package/docs/examples-date-input.html +1 -1
  30. package/docs/examples-datepicker.html +1 -1
  31. package/docs/examples-description-list.html +1 -1
  32. package/docs/examples-details.html +1 -1
  33. package/docs/examples-dialog.html +2 -2
  34. package/docs/examples-dropdown.html +1 -1
  35. package/docs/examples-error-message.html +1 -1
  36. package/docs/examples-error-summary.html +1 -1
  37. package/docs/examples-fieldset.html +1 -1
  38. package/docs/examples-file-upload.html +1 -1
  39. package/docs/examples-footer.html +1 -1
  40. package/docs/examples-header-advanced.html +1 -1
  41. package/docs/examples-header-mini.html +1 -1
  42. package/docs/examples-header.html +1 -1
  43. package/docs/examples-hint.html +1 -1
  44. package/docs/examples-input-group.html +1 -1
  45. package/docs/examples-input.html +1 -1
  46. package/docs/examples-item.html +1 -1
  47. package/docs/examples-label.html +1 -1
  48. package/docs/examples-links-list.html +2 -2
  49. package/docs/examples-listbox.html +1 -1
  50. package/docs/examples-media-object.html +2 -2
  51. package/docs/examples-menu-horizontal.html +1 -1
  52. package/docs/examples-menu-navigation.html +1 -1
  53. package/docs/examples-menu-vertical.html +2 -2
  54. package/docs/examples-menubar.html +2 -2
  55. package/docs/examples-modal.html +2 -2
  56. package/docs/examples-nav.html +1 -1
  57. package/docs/examples-notification.html +1 -1
  58. package/docs/examples-pagination.html +1 -1
  59. package/docs/examples-pill.html +1 -1
  60. package/docs/examples-radios.html +1 -1
  61. package/docs/examples-searchbar.html +1 -1
  62. package/docs/examples-select.html +1 -2
  63. package/docs/examples-skip-link.html +1 -1
  64. package/docs/examples-spinner.html +1 -1
  65. package/docs/examples-status-item.html +1 -1
  66. package/docs/examples-status.html +1 -1
  67. package/docs/examples-table-advanced.html +1 -1
  68. package/docs/examples-table.html +1 -1
  69. package/docs/examples-tabs.html +1 -1
  70. package/docs/examples-textarea.html +1 -1
  71. package/docs/examples-toggle.html +1 -1
  72. package/docs/examples-tooltip.html +1 -1
  73. package/docs/examples-tree.html +1 -1
  74. package/docs/examples-treegrid.html +1 -1
  75. package/docs/index.html +14 -3
  76. package/docs/pagina-accesibilidad.html +4 -4
  77. package/docs/pagina-mapa-web.html +3 -3
  78. package/docs/pagina-prueba.html +2 -2
  79. package/docs/plantilla-con-header-advanced.html +2 -2
  80. package/docs/plantilla-editar-con-cabecera-fija-y-sidebar-sticky.html +2 -2
  81. package/docs/plantilla-editar-con-cabecera-fija.html +2 -2
  82. package/docs/plantilla-logueado-con-cabecera-fija-headroom.html +2 -2
  83. package/docs/plantilla-logueado-con-cabecera-fija.html +2 -2
  84. package/docs/plantilla-logueado-con-selector-de-app-y-sidebar.html +2 -2
  85. package/docs/plantilla-logueado-con-selector-de-app-y-subheader.html +2 -2
  86. package/docs/plantilla-logueado-con-selector-de-app.html +2 -2
  87. package/docs/plantilla-logueado-con-titulo-de-app.html +2 -2
  88. package/docs/plantilla-sin-loguear.html +2 -2
  89. package/docs/plantillas.html +3 -3
  90. package/docs/spinner-plantilla-con-header-advanced.html +2 -2
  91. package/docs/spinner-plantilla-editar-con-cabecera-fija.html +1 -2
  92. package/docs/spinner-plantilla-logueado-con-cabecera-fija.html +2 -2
  93. package/docs/spinner-plantilla-logueado-con-selector-de-app-y-subheader.html +1 -3
  94. package/docs/spinner-plantilla-logueado-con-titulo-de-app.html +2 -2
  95. package/docs/spinner-plantilla-sin-loguear.html +2 -2
  96. package/package.json +10 -5
  97. package/replit.md +2 -2
  98. package/src/css/branding-variables.css +37 -0
  99. package/src/css/component.text.css +5 -0
  100. package/src/css/styles.css +18 -3
  101. package/src/js/aria/MenuHorizontal.js +3 -1
  102. package/src/js/aria/notification.js +6 -6
  103. package/src/js/desy-html.js +5 -0
  104. package/src/templates/components/accordion/_examples.accordion.njk +84 -0
  105. package/src/templates/components/accordion-history/_examples.accordion-history.njk +90 -0
  106. package/src/templates/components/alert/_examples.alert.njk +12 -0
  107. package/src/templates/components/breadcrumbs/_examples.breadcrumbs.njk +90 -0
  108. package/src/templates/components/breadcrumbs/_template.breadcrumbs.njk +1 -1
  109. package/src/templates/components/button/_examples.button.njk +216 -0
  110. package/src/templates/components/button-loader/_examples.button-loader.njk +204 -0
  111. package/src/templates/components/card/_examples.card.njk +78 -0
  112. package/src/templates/components/character-count/_examples.character-count.njk +60 -0
  113. package/src/templates/components/checkboxes/_examples.checkboxes.njk +120 -0
  114. package/src/templates/components/collapsible/_examples.collapsible.njk +30 -0
  115. package/src/templates/components/date-input/_examples.date-input.njk +78 -0
  116. package/src/templates/components/datepicker/_examples.datepicker.njk +84 -0
  117. package/src/templates/components/datepicker/_template.datepicker.njk +1 -1
  118. package/src/templates/components/description-list/_examples.description-list.njk +66 -0
  119. package/src/templates/components/details/_examples.details.njk +24 -0
  120. package/src/templates/components/dialog/_examples.dialog.njk +18 -0
  121. package/src/templates/components/dropdown/_examples.dropdown.njk +90 -0
  122. package/src/templates/components/error-message/_examples.error-message.njk +12 -0
  123. package/src/templates/components/error-summary/_examples.error-summary.njk +30 -0
  124. package/src/templates/components/fieldset/_examples.fieldset.njk +18 -0
  125. package/src/templates/components/file-upload/_examples.file-upload.njk +30 -0
  126. package/src/templates/components/footer/_examples.footer.njk +108 -0
  127. package/src/templates/components/footer/_styles.footer.css +20 -20
  128. package/src/templates/components/footer/_template.footer.njk +21 -6
  129. package/src/templates/components/footer/params.footer.yaml +4 -4
  130. package/src/templates/components/header/_examples.header.njk +85 -1
  131. package/src/templates/components/header/_template.header.njk +20 -4
  132. package/src/templates/components/header/params.header.yaml +2 -2
  133. package/src/templates/components/header-advanced/_examples.header-advanced.njk +84 -7
  134. package/src/templates/components/header-advanced/_template.header-advanced.njk +3 -1
  135. package/src/templates/components/header-mini/_examples.header-mini.njk +15 -3
  136. package/src/templates/components/header-mini/_template.header-mini.njk +14 -2
  137. package/src/templates/components/header-mini/params.header-mini.yaml +1 -1
  138. package/src/templates/components/hint/_examples.hint.njk +12 -0
  139. package/src/templates/components/input/_examples.input.njk +120 -0
  140. package/src/templates/components/input/_template.input.njk +1 -1
  141. package/src/templates/components/input-group/_examples.input-group.njk +54 -0
  142. package/src/templates/components/item/_examples.item.njk +96 -0
  143. package/src/templates/components/label/_examples.label.njk +24 -0
  144. package/src/templates/components/links-list/_examples.links-list.njk +114 -0
  145. package/src/templates/components/listbox/_examples.listbox.njk +140 -20
  146. package/src/templates/components/media-object/_examples.media-object.njk +30 -0
  147. package/src/templates/components/menu-horizontal/_examples.menu-horizontal.njk +84 -0
  148. package/src/templates/components/menu-navigation/_examples.menu-navigation.njk +102 -0
  149. package/src/templates/components/menu-vertical/_examples.menu-vertical.njk +96 -0
  150. package/src/templates/components/menubar/_examples.menubar.njk +66 -0
  151. package/src/templates/components/modal/_examples.modal.njk +78 -0
  152. package/src/templates/components/nav/_examples.nav.njk +66 -0
  153. package/src/templates/components/notification/_examples.notification.njk +78 -0
  154. package/src/templates/components/pagination/_examples.pagination.njk +42 -0
  155. package/src/templates/components/pill/_examples.pill.njk +78 -0
  156. package/src/templates/components/radios/_examples.radios.njk +96 -0
  157. package/src/templates/components/searchbar/_examples.searchbar.njk +48 -0
  158. package/src/templates/components/searchbar/_template.searchbar.njk +1 -1
  159. package/src/templates/components/select/_examples.select.njk +54 -0
  160. package/src/templates/components/select/_template.select.njk +1 -1
  161. package/src/templates/components/skip-link/_examples.skip-link.njk +12 -0
  162. package/src/templates/components/spinner/_examples.spinner.njk +49 -1
  163. package/src/templates/components/status/_examples.status.njk +31 -1
  164. package/src/templates/components/status-item/_examples.status-item.njk +73 -1
  165. package/src/templates/components/table/_examples.table.njk +37 -1
  166. package/src/templates/components/table-advanced/_examples.table-advanced.njk +54 -0
  167. package/src/templates/components/table-advanced/_styles.table-advanced.css +0 -2
  168. package/src/templates/components/tabs/_examples.tabs.njk +72 -0
  169. package/src/templates/components/textarea/_examples.textarea.njk +54 -0
  170. package/src/templates/components/textarea/_template.textarea.njk +1 -1
  171. package/src/templates/components/toggle/_examples.toggle.njk +60 -0
  172. package/src/templates/components/tooltip/_examples.tooltip.njk +48 -0
  173. package/src/templates/components/tree/_examples.tree.njk +150 -0
  174. package/src/templates/components/treegrid/_examples.treegrid.njk +30 -0
  175. package/src/templates/components/treegrid/_template.treegrid.njk +1 -1
  176. package/src/templates/pages/_page.head.njk +11 -3
  177. package/vite.config.js +215 -0
  178. package/attached_assets/Pasted--desy-html-starter-Node-Version-https-img-shields-io-ba_1765448923362.txt +0 -431
  179. /package/{public/images/general-lg.svg → branding/images/header-background-lg.svg} +0 -0
  180. /package/{public/images/general.svg → branding/images/header-background.svg} +0 -0
  181. /package/{public/images/logo-ue.svg → branding/logos/eu/logo-eu.svg} +0 -0
  182. /package/{public/images → branding/logos/eu}/logo-feader.svg +0 -0
  183. /package/{public/images → branding/logos/eu}/logo-feder.svg +0 -0
  184. /package/{public/images → branding/logos/eu}/logo-fse.svg +0 -0
  185. /package/{public/images → branding/logos/eu}/logo-plurifondo.svg +0 -0
package/AGENTS.md ADDED
@@ -0,0 +1,180 @@
1
+ # AGENTS.md - Developer Guide for desy-html
2
+
3
+ This file provides guidance for AI agents working on the desy-html codebase.
4
+
5
+ ## Project Overview
6
+
7
+ desy-html is a design system library for Government of Aragón web applications. It uses:
8
+ - **Vite** - Build tool and dev server
9
+ - **Tailwind CSS v4** - Utility-first CSS framework
10
+ - **Nunjucks** - Templating engine for HTML components
11
+ - **JavaScript** - Vanilla ES modules for ARIA components
12
+
13
+ ## Build Commands
14
+
15
+ | Command | Description |
16
+ |---------|-------------|
17
+ | `npm run dev` | Start development server with HMR |
18
+ | `npm run build` | Build for production (outputs to `/dist`) |
19
+ | `npm run preview` | Preview production build locally |
20
+
21
+ ### Running a Single Test
22
+
23
+ **There are no test commands configured** in this project. The codebase does not currently have a test framework (Jest, Vitest, etc.) set up.
24
+
25
+ ## Code Style Guidelines
26
+
27
+ ### JavaScript
28
+
29
+ - **Use ES Modules**: All JavaScript uses `import`/`export` syntax
30
+ ```js
31
+ import { accordion } from './aria/accordion.js';
32
+ export function accordionComponent(aria) { ... }
33
+ ```
34
+
35
+ - **Prefer `const`/`let` over `var`**: Newer code should use `const` by default, `let` for mutable variables
36
+
37
+ - **Naming Conventions**:
38
+ - Functions: `camelCase` (e.g., `accordionComponent`, `createFloatingElement`)
39
+ - Classes/Constructor functions: `PascalCase` (e.g., `TreeGrid`, `MenubarAction`)
40
+ - Constants: `SCREAMING_SNAKE_CASE`
41
+ - Files: `kebab-case.js`
42
+
43
+ - **Component Pattern**: Components follow a factory pattern accepting an `aria` namespace
44
+ ```js
45
+ export function accordionComponent(aria) {
46
+ accordion(aria);
47
+ // Initialize modules
48
+ }
49
+ ```
50
+
51
+ - **Use strict mode**: Include `'use strict';` in new ARIA/component files
52
+
53
+ - **Event handling**: Use modern event listeners
54
+ ```js
55
+ element.addEventListener('click', (event) => { ... });
56
+ ```
57
+
58
+ ### Nunjucks Templates
59
+
60
+ - **File naming**: Use kebab-case with descriptive prefixes
61
+ - Macros: `_macro.{component}.njk`
62
+ - Templates: `_template.{component}.njk`
63
+ - Examples: `_examples.{component}.njk`
64
+ - Params: `params.{component}.yaml`
65
+
66
+ - **Macro structure**:
67
+ ```njk
68
+ {% macro componentName(params) %}
69
+ {% include "./_template.component.njk" %}
70
+ {% endmacro %}
71
+ ```
72
+
73
+ - **Parameters**: Define all component parameters in `params.{component}.yaml` files
74
+
75
+ ### CSS / Tailwind CSS
76
+
77
+ - **Tailwind v4**: Uses `@import "tailwindcss"` and `@theme` for custom properties
78
+ - **Component styles**: Each component has its own `_styles.{component}.css` file
79
+ - **CSS Variables**: Use custom properties for theming
80
+ ```css
81
+ :root {
82
+ --color-primary-base: #00607a;
83
+ --color-success-base: #24d14c;
84
+ }
85
+ ```
86
+
87
+ - **Class naming**: Follow BEM-like pattern with component prefix `c-`
88
+ - `.c-accordion__trigger`
89
+ - `.c-accordion__panel`
90
+
91
+ ### Accessibility (ARIA)
92
+
93
+ - All components must follow WAI-ARIA patterns
94
+ - Include proper ARIA attributes: `role`, `aria-expanded`, `aria-controls`, `aria-label`, etc.
95
+ - Ensure keyboard navigation support
96
+ - Reference W3C ARIA Authoring Practices when implementing complex components
97
+
98
+ ### Import Conventions
99
+
100
+ - **Absolute imports** for internal modules (handled by Vite aliases):
101
+ ```js
102
+ import { utils } from '@ds/components/utils';
103
+ ```
104
+ - **Relative imports** for local files:
105
+ ```js
106
+ import { accordion } from './aria/accordion.js';
107
+ ```
108
+ - **External packages**:
109
+ ```js
110
+ import "cally";
111
+ import * as computePosition from '@floating-ui/dom';
112
+ ```
113
+
114
+ ### Error Handling
115
+
116
+ - Use `try/catch` for async operations
117
+ - Log meaningful error messages
118
+ - Provide fallback behavior when possible
119
+
120
+ ### Vite Configuration
121
+
122
+ - **Aliases** defined in `vite.config.js`:
123
+ - `@` → `src`
124
+ - `/src` → `src`
125
+ - `@css` → `src/css`
126
+ - `@components` → `src/templates/components`
127
+ - `@ds` → `docs/ds`
128
+ - `@images` → `public/images`
129
+
130
+ ## Project Structure
131
+
132
+ ```
133
+ desy-html/
134
+ ├── src/
135
+ │ ├── css/ # Global stylesheets
136
+ │ ├── js/ # JavaScript files
137
+ │ │ ├── aria/ # ARIA component implementations
138
+ │ │ ├── desy-html.js # Main component exports
139
+ │ │ ├── headroom.min.js # Headroom.js library
140
+ │ │ └── index.js # Entry point
141
+ │ ├── templates/
142
+ │ │ ├── components/ # Nunjucks component macros
143
+ │ │ ├── includes/ # Reusable partials
144
+ │ │ └── pages/ # Page templates
145
+ │ ├── main.js # Main entry point
146
+ │ └── EUPL-1.2.txt # License file
147
+ ├── docs/ # Documentation (built to /dist)
148
+ ├── public/ # Static assets
149
+ ├── branding/ # Branding assets
150
+ ├── vite.config.js # Vite configuration
151
+ └── package.json
152
+ ```
153
+
154
+ ## Branding
155
+
156
+ To customize for different organizations:
157
+ 1. Edit `branding/branding.config.js` or create `branding/branding.config.{name}.js`
158
+ 2. Replace logos in `branding/logos/`
159
+ 3. Run `BRANDING_CONFIG={name} npm run build`
160
+
161
+ ## Common Patterns
162
+
163
+ ### Creating a New Component
164
+
165
+ 1. Create `src/templates/components/{name}/_macro.{name}.njk`
166
+ 2. Create `src/templates/components/{name}/_template.{name}.njk`
167
+ 3. Create `src/templates/components/{name}/_styles.{name}.css`
168
+ 4. Create `src/templates/components/{name}/params.{name}.yaml`
169
+ 5. Add import to `src/css/styles.css`
170
+ 6. Add JS initialization in `src/js/desy-html.js` if needed
171
+
172
+ ### Adding a New ARIA Component
173
+
174
+ 1. Create `src/js/aria/{component}.js` with WAI-ARIA implementation
175
+ 2. Export function that accepts `aria` namespace
176
+ 3. Register in `src/js/desy-html.js`
177
+
178
+ ## License
179
+
180
+ This project uses EUPL-1.2 license. See EUPL-1.2.txt for details.
package/README.md CHANGED
@@ -85,16 +85,34 @@ desy-html/
85
85
  ├── src/
86
86
  │ ├── css/ # Stylesheets
87
87
  │ ├── js/ # JavaScript files
88
- └── templates/
89
- ├── components/ # UI component macros
90
- ├── includes/ # Reusable template partials
91
- └── pages/ # Page templates
88
+ │ ├── aria/ # ARIA component implementations
89
+ ├── desy-html.js # Main component exports
90
+ ├── headroom.min.js # Headroom.js library
91
+ └── index.js # Entry point
92
+ │ ├── templates/
93
+ │ │ ├── components/ # UI component macros
94
+ │ │ ├── includes/ # Reusable template partials
95
+ │ │ └── pages/ # Page templates
96
+ │ ├── main.js # Main entry point
97
+ │ └── EUPL-1.2.txt # License file
92
98
  ├── docs/ # Documentation files
99
+ ├── branding/ # Branding assets and configuration
93
100
  ├── vite.config.js # Vite configuration
94
101
  ├── package.json
95
102
  └── README.md
96
103
  ```
97
104
 
105
+ ## Branding Customization
106
+
107
+ desy-html can be customized for different government organizations.
108
+
109
+ To customize:
110
+ 1. Edit `branding/branding.config.js` with your organization's information
111
+ 2. Replace logos in `/branding/logos/`
112
+ 3. Run `npm run build`
113
+
114
+ See [branding/BRANDING.md](branding/BRANDING.md) for complete documentation.
115
+
98
116
  ## Styling
99
117
 
100
118
  ### Using Tailwind CSS
@@ -0,0 +1,369 @@
1
+ # Testing Plan for npm Publishing - desy-html
2
+
3
+ This document defines the complete testing plan to execute before publishing the `desy-html` project to npm. The goal is to verify that all components, the branding system, the build, and interaction work correctly.
4
+
5
+ ---
6
+
7
+ ## 1. Pre-Build Checks
8
+
9
+ ### 1.1. File and Structure Review
10
+
11
+ - [ ] Verify all required files exist:
12
+ - `package.json` with correct version, name, exports
13
+ - `vite.config.js` exists with proper configuration
14
+ - `branding/branding.config.js` exists with default configuration
15
+ - `branding/vite-branding-plugin.js` exists
16
+ - `src/js/index.js` JS entry point
17
+ - `src/css/styles.css` main stylesheet
18
+ - [ ] Verify logo files exist:
19
+ - `branding/logos/aragon-compact.svg`
20
+ - `branding/logos/aragon-expanded.svg`
21
+ - `branding/logos/aragon-mini.svg`
22
+ - `branding/logos/eu/logo-eu.svg`
23
+ - `branding/logos/eu/logo-feder.svg`
24
+ - `branding/logos/eu/logo-fse.svg`
25
+ - `branding/logos/eu/logo-feader.svg`
26
+ - `branding/logos/eu/logo-plurifondo.svg`
27
+ - [ ] Verify background images exist:
28
+ - `branding/images/header-background.svg`
29
+ - `branding/images/header-background-lg.svg`
30
+
31
+ ### 1.2. package.json Exports Review
32
+
33
+ - [ ] Verify `exports["./branding"]` points to `./branding/branding.config.js`
34
+ - [ ] Verify `exports["./branding/plugin"]` points to `./branding/vite-branding-plugin.js`
35
+ - [ ] Verify version in `package.json` is correct
36
+
37
+ ---
38
+
39
+ ## 2. Production Build
40
+
41
+ ### 2.1. Build Execution
42
+
43
+ - [ ] Run `npm run build` without errors
44
+ - [ ] Verify `dist/` folder is generated
45
+ - [ ] Verify no errors in console output
46
+
47
+ ### 2.2. Generated Files Verification
48
+
49
+ - [ ] Verify `dist/index.html` exists
50
+ - [ ] Verify `dist/css/styles.css` exists
51
+ - [ ] Verify `dist/js/index.js` (or similar) exists
52
+ - [ ] Verify `dist/images/` contains copied images:
53
+ - Organization logos (aragon-*.svg)
54
+ - EU logos (*.svg in subfolder or root)
55
+ - Background images (header-background*.svg)
56
+
57
+ ### 2.3. Production Paths Verification
58
+
59
+ - [ ] Verify CSS paths correctly point to `../images/`
60
+ - [ ] Verify HTML image paths correctly point to `../images/`
61
+ - [ ] Verify no references to `/src/` remain in generated files
62
+ - [ ] Verify scripts have correct relative paths
63
+
64
+ ---
65
+
66
+ ## 3. Default Branding Tests
67
+
68
+ ### 3.1. Browser Visual Verification
69
+
70
+ Using the browser agent, test the following pages:
71
+
72
+ #### Homepage
73
+
74
+ - [ ] Load `docs/index.html` (or after build, `dist/index.html`)
75
+ - [ ] Verify organization logo displays (not broken, no 404)
76
+ - [ ] Verify primary colors are Aragón's (#00607a)
77
+ - [ ] Verify typography is correct (Open Sans)
78
+
79
+ #### Header
80
+
81
+ - [ ] `docs/examples-header.html` - Verify logo visible
82
+ - [ ] `docs/examples-header.html` - Verify navigation menu
83
+ - [ ] `docs/examples-header-advanced.html` - Verify advanced header
84
+ - [ ] `docs/examples-header-mini.html` - Verify mini header
85
+
86
+ #### Footer
87
+
88
+ - [ ] `docs/examples-footer.html` - Verify EU logos visible
89
+ - [ ] `docs/examples-footer.html` - Verify license information
90
+ - [ ] `docs/examples-footer.html` - Verify correct colors
91
+
92
+ #### Background Images
93
+
94
+ - [ ] Verify `header-background.svg` displays in header
95
+ - [ ] Verify `header-background-lg.svg` displays on desktop
96
+
97
+ ### 3.2. JavaScript Verification
98
+
99
+ - [ ] Verify `index.js` loads correctly (no 404 errors)
100
+ - [ ] Verify no JavaScript errors in console
101
+ - [ ] Verify JS modules resolve correctly
102
+
103
+ ### 3.3. Interactive Components
104
+
105
+ Test each interactive component:
106
+
107
+ #### Navigation
108
+
109
+ - [ ] Accordion: `docs/examples-accordion.html` - Open/close items
110
+ - [ ] Tabs: `docs/examples-tabs.html` - Switch between tabs
111
+ - [ ] Modal: `docs/examples-modal.html` - Open/close modal
112
+ - [ ] Dialog: `docs/examples-dialog.html` - Interact with dialog
113
+ - [ ] Tooltip: `docs/examples-tooltip.html` - Show tooltip
114
+ - [ ] Dropdown: `docs/examples-dropdown.html` - Open/close dropdown
115
+
116
+ #### Forms
117
+
118
+ - [ ] Input: `docs/examples-input.html` - Write in inputs
119
+ - [ ] Select: `docs/examples-select.html` - Select options
120
+ - [ ] Checkboxes: `docs/examples-checkboxes.html` - Check/uncheck
121
+ - [ ] Radios: `docs/examples-radios.html` - Select option
122
+ - [ ] Toggle: `docs/examples-toggle.html` - Change state
123
+ - [ ] Datepicker: `docs/examples-datepicker.html` - Select date
124
+
125
+ #### Other Interactive
126
+
127
+ - [ ] Details/Collapsible: `docs/examples-details.html` / `examples-collapsible.html` - Open/close
128
+ - [ ] Notification: `docs/examples-notification.html` - Close notifications
129
+ - [ ] Pagination: `docs/examples-pagination.html` - Change pages
130
+ - [ ] Menu Horizontal: `docs/examples-menu-horizontal.html` - Navigate menus
131
+ - [ ] Menu Vertical: `docs/examples-menu-vertical.html` - Navigate menus
132
+ - [ ] Menubar: `docs/examples-menubar.html` - Navigate with keyboard
133
+
134
+ ---
135
+
136
+ ## 4. yourorganization Branding Tests
137
+
138
+ ### 4.1. Alternative Configuration Build
139
+
140
+ - [ ] Run `BRANDING_CONFIG=yourorganization npm run build`
141
+ - [ ] Verify no errors
142
+
143
+ ### 4.2. Visual Verification
144
+
145
+ - [ ] Verify organization name changes (YourOrganization)
146
+ - [ ] Verify logo changes (yourlogo-*.svg)
147
+ - [ ] Verify typography changes (Inter/Nunito)
148
+ - [ ] Verify color changes (if configured)
149
+
150
+ ### 4.3. EU Logos Verification
151
+
152
+ - [ ] Verify EU logos display correctly
153
+ - [ ] Verify EU logo paths are correct
154
+
155
+ ---
156
+
157
+ ## 5. Responsive Tests
158
+
159
+ ### 5.1. Mobile Viewport
160
+
161
+ - [ ] Test with 375px wide viewport
162
+ - [ ] Verify hamburger menu works
163
+ - [ ] Verify compact logo displays
164
+ - [ ] Verify correct background images (header-background.svg)
165
+
166
+ ### 5.2. Tablet Viewport
167
+
168
+ - [ ] Test with 768px wide viewport
169
+ - [ ] Verify layout changes
170
+
171
+ ### 5.3. Desktop Viewport
172
+
173
+ - [ ] Test with 1280px wide viewport
174
+ - [ ] Verify expanded logo displays
175
+ - [ ] Verify correct background images (header-background-lg.svg)
176
+
177
+ ---
178
+
179
+ ## 6. Accessibility Tests
180
+
181
+ ### 6.1. Automated Checks
182
+
183
+ - [ ] No critical accessibility errors in console
184
+ - [ ] Images have alt attribute
185
+ - [ ] Forms have associated labels
186
+ - [ ] Buttons have text or aria-label
187
+
188
+ ### 6.2. Keyboard Navigation
189
+
190
+ - [ ] Can navigate with Tab through elements
191
+ - [ ] Modals can be closed with Escape
192
+ - [ ] Dropdowns can be opened with Enter/Space
193
+ - [ ] Accordions can be expanded with Enter/Space
194
+
195
+ ---
196
+
197
+ ## 7. Performance Tests
198
+
199
+ ### 7.1. Page Load
200
+
201
+ - [ ] Page loads without 404 errors
202
+ - [ ] Images exist and load
203
+ - [ ] CSS loads correctly
204
+ - [ ] JS loads correctly
205
+
206
+ ### 7.2. Build Size
207
+
208
+ - [ ] Minified CSS has no syntax errors
209
+ - [ ] Minified JS has no syntax errors
210
+
211
+ ---
212
+
213
+ ## 8. Plugins and Exports Tests
214
+
215
+ ### 8.1. Exports Verification
216
+
217
+ - [ ] `branding/branding.config.js` file can be imported
218
+ - [ ] `branding/vite-branding-plugin.js` file can be imported
219
+ - [ ] `brandingPlugin` and `loadBrandingConfig` functions are correctly exported
220
+
221
+ ### 8.2. External Usage Verification
222
+
223
+ - [ ] Verify plugin can load a configuration
224
+ - [ ] Verify plugin can inject CSS variables
225
+
226
+ ---
227
+
228
+ ## 9. Pages to Test List
229
+
230
+ ### Main Pages
231
+
232
+ | Page | File | Priority |
233
+ |------|------|----------|
234
+ | Homepage | `index.html` | High |
235
+ | Catalog | `catalogo.html` | High |
236
+ | Components | `componentes.html` | High |
237
+ | Styles | `estilos.html` | Medium |
238
+
239
+ ### Component Examples
240
+
241
+ | Component | File | Interactive |
242
+ |-----------|------|-------------|
243
+ | Header | `examples-header.html` | No |
244
+ | Header Advanced | `examples-header-advanced.html` | No |
245
+ | Header Mini | `examples-header-mini.html` | No |
246
+ | Footer | `examples-footer.html` | No |
247
+ | Accordion | `examples-accordion.html` | Yes |
248
+ | Alert | `examples-alert.html` | Yes |
249
+ | Breadcrumbs | `examples-breadcrumbs.html` | No |
250
+ | Button | `examples-button.html` | No |
251
+ | Card | `examples-card.html` | No |
252
+ | Checkboxes | `examples-checkboxes.html` | Yes |
253
+ | Collapsible | `examples-collapsible.html` | Yes |
254
+ | Date Input | `examples-date-input.html` | Yes |
255
+ | Datepicker | `examples-datepicker.html` | Yes |
256
+ | Description List | `examples-description-list.html` | No |
257
+ | Details | `examples-details.html` | Yes |
258
+ | Dialog | `examples-dialog.html` | Yes |
259
+ | Dropdown | `examples-dropdown.html` | Yes |
260
+ | Error Message | `examples-error-message.html` | No |
261
+ | Error Summary | `examples-error-summary.html` | Yes |
262
+ | Fieldset | `examples-fieldset.html` | No |
263
+ | File Upload | `examples-file-upload.html` | Yes |
264
+ | Hint | `examples-hint.html` | No |
265
+ | Input | `examples-input.html` | Yes |
266
+ | Input Group | `examples-input-group.html` | Yes |
267
+ | Item | `examples-item.html` | No |
268
+ | Label | `examples-label.html` | No |
269
+ | Links List | `examples-links-list.html` | Yes |
270
+ | Listbox | `examples-listbox.html` | Yes |
271
+ | Media Object | `examples-media-object.html` | No |
272
+ | Menu Horizontal | `examples-menu-horizontal.html` | Yes |
273
+ | Menu Navigation | `examples-menu-navigation.html` | Yes |
274
+ | Menu Vertical | `examples-menu-vertical.html` | Yes |
275
+ | Menubar | `examples-menubar.html` | Yes |
276
+ | Modal | `examples-modal.html` | Yes |
277
+ | Nav | `examples-nav.html` | No |
278
+ | Notification | `examples-notification.html` | Yes |
279
+ | Pagination | `examples-pagination.html` | Yes |
280
+ | Pill | `examples-pill.html` | No |
281
+ | Radios | `examples-radios.html` | Yes |
282
+ | Searchbar | `examples-searchbar.html` | Yes |
283
+ | Select | `examples-select.html` | Yes |
284
+ | Skip Link | `examples-skip-link.html` | No |
285
+ | Spinner | `examples-spinner.html` | No |
286
+ | Status | `examples-status.html` | No |
287
+ | Status Item | `examples-status-item.html` | No |
288
+ | Table | `examples-table.html` | No |
289
+ | Table Advanced | `examples-table-advanced.html` | No |
290
+ | Tabs | `examples-tabs.html` | Yes |
291
+ | Textarea | `examples-textarea.html` | Yes |
292
+ | Toggle | `examples-toggle.html` | Yes |
293
+ | Tooltip | `examples-tooltip.html` | Yes |
294
+ | Tree | `examples-tree.html` | Yes |
295
+ | Treegrid | `examples-treegrid.html` | Yes |
296
+
297
+ ### Templates
298
+
299
+ | Template | File |
300
+ |----------|------|
301
+ | Logged with fixed header | `plantilla-logueado-con-cabecera-fija.html` |
302
+ | Logged with app selector | `plantilla-logueado-con-selector-de-app.html` |
303
+ | Logged with app title | `plantilla-logueado-con-titulo-de-app.html` |
304
+ | Not logged in | `plantilla-sin-loguear.html` |
305
+ | With advanced header | `plantilla-con-header-advanced.html` |
306
+
307
+ ---
308
+
309
+ ## 10. Execution Commands
310
+
311
+ ### Environment Setup
312
+
313
+ ```bash
314
+ # Install dependencies
315
+ npm install
316
+
317
+ # Production build with default branding
318
+ npm run build
319
+
320
+ # Production build with yourorganization branding
321
+ BRANDING_CONFIG=yourorganization npm run build
322
+
323
+ # Start preview server
324
+ npm run preview
325
+
326
+ # Start development server
327
+ npm run dev
328
+
329
+ # Start development server with yourorganization branding
330
+ npm run dev:yourorganization
331
+ ```
332
+
333
+ ### Browser Agent Test Execution
334
+
335
+ 1. Build the project: `npm run build`
336
+ 2. Start preview: `npm run preview`
337
+ 3. Use browser agent to navigate through listed pages
338
+ 4. Verify visual elements, images, and console errors
339
+
340
+ ---
341
+
342
+ ## 11. Success Criteria
343
+
344
+ The project is ready for npm publishing when:
345
+
346
+ - [ ] Build runs without errors
347
+ - [ ] All required files are in `dist/`
348
+ - [ ] Production paths are correct
349
+ - [ ] Default branding works correctly
350
+ - [ ] yourorganization branding works correctly
351
+ - [ ] Organization logos display correctly
352
+ - [ ] EU logos display correctly
353
+ - [ ] Header background images display correctly
354
+ - [ ] All interactive components work correctly
355
+ - [ ] No 404 errors in console
356
+ - [ ] No JavaScript errors in console
357
+ - [ ] Responsive design works correctly
358
+ - [ ] npm exports work correctly
359
+ - [ ] Keyboard navigation works on interactive components
360
+
361
+ ---
362
+
363
+ ## 12. Additional Notes
364
+
365
+ - This testing plan covers 50+ example pages
366
+ - Tests 20+ interactive components
367
+ - Verifies complete branding system (default and yourorganization)
368
+ - Verifies all resource paths (images, CSS, JS)
369
+ - Verifies basic accessibility and keyboard navigation