desy-html 16.0.4 → 17.0.1

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 (535) hide show
  1. package/.node-version +1 -1
  2. package/.nvmrc +1 -1
  3. package/AGENTS.md +207 -207
  4. package/README.md +203 -203
  5. package/TESTING_PLAN.md +379 -379
  6. package/branding/BRANDING.md +398 -398
  7. package/branding/branding.config.js +76 -76
  8. package/branding/branding.config.yourorganization.js +72 -72
  9. package/branding/logos/aragon-compact.svg +1 -1
  10. package/branding/logos/aragon-expanded.svg +1 -1
  11. package/branding/logos/aragon-mini.svg +1 -1
  12. package/branding/logos/favicon.svg +1 -1
  13. package/branding/logos/yourlogo-compact.svg +13 -13
  14. package/branding/logos/yourlogo-expanded.svg +17 -17
  15. package/branding/logos/yourlogo-mini.svg +17 -17
  16. package/branding/logos/yourorganization-favicon.svg +13 -13
  17. package/branding/vite-branding-plugin.js +221 -221
  18. package/docs/_global.content-placeholder.njk +7 -7
  19. package/docs/_global.foot.njk +11 -11
  20. package/docs/_global.head.njk +42 -42
  21. package/docs/_include.template-header.njk +391 -386
  22. package/docs/_macro.component-example.njk +6 -6
  23. package/docs/_macro.example-render.njk +350 -346
  24. package/docs/_macro.load-component-params.njk +2 -2
  25. package/docs/_macro.load-component-template.njk +3 -3
  26. package/docs/_macro.render-caller.njk +3 -3
  27. package/docs/_macro.show-code-from-file.njk +57 -57
  28. package/docs/_macro.show-html-from-file.njk +42 -42
  29. package/docs/_template.default.njk +8 -8
  30. package/docs/_template.examples.njk +13 -13
  31. package/docs/catalogo.html +27 -27
  32. package/docs/componentes.html +187 -184
  33. package/docs/ds/_ds.example.accordion.njk +109 -109
  34. package/docs/ds/_ds.example.border.njk +39 -39
  35. package/docs/ds/_ds.example.botones-alert-sm.njk +264 -264
  36. package/docs/ds/_ds.example.botones-alert.njk +264 -264
  37. package/docs/ds/_ds.example.botones-default-sm.njk +264 -264
  38. package/docs/ds/_ds.example.botones-default.njk +258 -258
  39. package/docs/ds/_ds.example.botones-primary-lg.njk +264 -264
  40. package/docs/ds/_ds.example.botones-primary-sm.njk +264 -264
  41. package/docs/ds/_ds.example.botones-primary.njk +264 -264
  42. package/docs/ds/_ds.example.botones-transparent-sm.njk +264 -264
  43. package/docs/ds/_ds.example.botones-transparent.njk +264 -264
  44. package/docs/ds/_ds.example.breadcrumbs.njk +65 -65
  45. package/docs/ds/_ds.example.card.njk +198 -198
  46. package/docs/ds/_ds.example.checkboxes.njk +377 -377
  47. package/docs/ds/_ds.example.collapsible.njk +18 -18
  48. package/docs/ds/_ds.example.color-de-interaccion.njk +16 -16
  49. package/docs/ds/_ds.example.colores-cabecera.njk +15 -15
  50. package/docs/ds/_ds.example.colores-de-soporte.njk +82 -82
  51. package/docs/ds/_ds.example.colores-neutros.njk +26 -26
  52. package/docs/ds/_ds.example.combobox.njk +91 -0
  53. package/docs/ds/_ds.example.date-input.njk +363 -363
  54. package/docs/ds/_ds.example.description-list.njk +289 -289
  55. package/docs/ds/_ds.example.details.njk +23 -23
  56. package/docs/ds/_ds.example.dropdowns-default.njk +186 -186
  57. package/docs/ds/_ds.example.dropdowns-en-uso.njk +105 -105
  58. package/docs/ds/_ds.example.dropdowns-variaciones.njk +224 -224
  59. package/docs/ds/_ds.example.error-summary.njk +34 -34
  60. package/docs/ds/_ds.example.file-upload.njk +54 -54
  61. package/docs/ds/_ds.example.footer.njk +28 -28
  62. package/docs/ds/_ds.example.header-advanced.njk +70 -70
  63. package/docs/ds/_ds.example.header.njk +211 -211
  64. package/docs/ds/_ds.example.input-group.njk +242 -242
  65. package/docs/ds/_ds.example.input.njk +164 -164
  66. package/docs/ds/_ds.example.item.njk +176 -176
  67. package/docs/ds/_ds.example.layout-escritorio.njk +38 -38
  68. package/docs/ds/_ds.example.layout-movil.njk +14 -14
  69. package/docs/ds/_ds.example.layout-sidebar.njk +11 -11
  70. package/docs/ds/_ds.example.links-list.njk +170 -170
  71. package/docs/ds/_ds.example.listbox-default.njk +677 -677
  72. package/docs/ds/_ds.example.listbox-variaciones.njk +824 -824
  73. package/docs/ds/_ds.example.menu-horizontal.njk +66 -66
  74. package/docs/ds/_ds.example.menu-navigation.njk +493 -493
  75. package/docs/ds/_ds.example.menu-vertical.njk +129 -129
  76. package/docs/ds/_ds.example.menubar-en-uso.njk +244 -244
  77. package/docs/ds/_ds.example.menubar-variaciones.njk +785 -785
  78. package/docs/ds/_ds.example.modal.njk +210 -210
  79. package/docs/ds/_ds.example.nav.njk +158 -158
  80. package/docs/ds/_ds.example.notification.njk +122 -122
  81. package/docs/ds/_ds.example.pagination.njk +190 -190
  82. package/docs/ds/_ds.example.pills.njk +215 -215
  83. package/docs/ds/_ds.example.radios.njk +419 -419
  84. package/docs/ds/_ds.example.searchbar.njk +87 -87
  85. package/docs/ds/_ds.example.select.njk +390 -390
  86. package/docs/ds/_ds.example.status-item.njk +239 -239
  87. package/docs/ds/_ds.example.status.njk +47 -47
  88. package/docs/ds/_ds.example.table.njk +740 -740
  89. package/docs/ds/_ds.example.tabs.njk +136 -136
  90. package/docs/ds/_ds.example.textarea.njk +237 -237
  91. package/docs/ds/_ds.example.textos.njk +32 -32
  92. package/docs/ds/_ds.example.toggle.njk +75 -75
  93. package/docs/ds/_ds.example.tree.njk +456 -456
  94. package/docs/ds/_ds.example.treegrid.njk +810 -810
  95. package/docs/ds/_ds.example.typography.njk +225 -225
  96. package/docs/ds/_ds.macro.code-snippet.njk +32 -32
  97. package/docs/ds/_ds.macro.section-title.njk +2 -2
  98. package/docs/ds/_ds.macro.subsection-title.njk +2 -2
  99. package/docs/ds/_ds.section.avisos.njk +22 -22
  100. package/docs/ds/_ds.section.botones.njk +53 -53
  101. package/docs/ds/_ds.section.campo-y-area-de-texto.njk +19 -19
  102. package/docs/ds/_ds.section.color.njk +147 -147
  103. package/docs/ds/_ds.section.datos.njk +42 -42
  104. package/docs/ds/_ds.section.dropdowns.njk +23 -23
  105. package/docs/ds/_ds.section.espaciado.njk +296 -296
  106. package/docs/ds/_ds.section.forms.njk +73 -68
  107. package/docs/ds/_ds.section.informacion.njk +12 -12
  108. package/docs/ds/_ds.section.layout.njk +63 -63
  109. package/docs/ds/_ds.section.menubar.njk +18 -18
  110. package/docs/ds/_ds.section.mostrar-ocultar.njk +33 -33
  111. package/docs/ds/_ds.section.navigation.njk +57 -57
  112. package/docs/ds/_ds.section.textos.njk +287 -287
  113. package/docs/ds/_ds.section.typography.njk +28 -28
  114. package/docs/estilos.html +37 -37
  115. package/docs/examples-accordion-history.html +8 -8
  116. package/docs/examples-accordion.html +8 -8
  117. package/docs/examples-alert.html +8 -8
  118. package/docs/examples-breadcrumbs.html +8 -8
  119. package/docs/examples-button-loader.html +8 -8
  120. package/docs/examples-button.html +8 -8
  121. package/docs/examples-card.html +8 -8
  122. package/docs/examples-character-count.html +8 -8
  123. package/docs/examples-checkboxes.html +8 -8
  124. package/docs/examples-collapsible.html +8 -8
  125. package/docs/examples-combobox.html +8 -0
  126. package/docs/examples-date-input.html +8 -8
  127. package/docs/examples-datepicker.html +8 -8
  128. package/docs/examples-description-list.html +8 -8
  129. package/docs/examples-details.html +8 -8
  130. package/docs/examples-dialog.html +8 -8
  131. package/docs/examples-dropdown.html +8 -8
  132. package/docs/examples-error-message.html +8 -8
  133. package/docs/examples-error-summary.html +8 -8
  134. package/docs/examples-fieldset.html +8 -8
  135. package/docs/examples-file-upload.html +8 -8
  136. package/docs/examples-footer.html +8 -8
  137. package/docs/examples-header-advanced.html +8 -8
  138. package/docs/examples-header-mini.html +8 -8
  139. package/docs/examples-header.html +8 -8
  140. package/docs/examples-hint.html +8 -8
  141. package/docs/examples-input-group.html +8 -8
  142. package/docs/examples-input.html +8 -8
  143. package/docs/examples-item.html +8 -8
  144. package/docs/examples-label.html +8 -8
  145. package/docs/examples-links-list.html +8 -8
  146. package/docs/examples-listbox.html +8 -8
  147. package/docs/examples-media-object.html +8 -8
  148. package/docs/examples-menu-horizontal.html +8 -8
  149. package/docs/examples-menu-navigation.html +8 -8
  150. package/docs/examples-menu-vertical.html +8 -8
  151. package/docs/examples-menubar.html +8 -8
  152. package/docs/examples-modal.html +8 -8
  153. package/docs/examples-nav.html +8 -8
  154. package/docs/examples-notification.html +8 -8
  155. package/docs/examples-pagination.html +8 -8
  156. package/docs/examples-pill.html +8 -8
  157. package/docs/examples-radios.html +8 -8
  158. package/docs/examples-searchbar.html +8 -8
  159. package/docs/examples-select.html +8 -8
  160. package/docs/examples-skip-link.html +8 -8
  161. package/docs/examples-spinner.html +8 -8
  162. package/docs/examples-status-item.html +8 -8
  163. package/docs/examples-status.html +8 -8
  164. package/docs/examples-table-advanced.html +8 -8
  165. package/docs/examples-table.html +8 -8
  166. package/docs/examples-tabs.html +8 -8
  167. package/docs/examples-textarea.html +8 -8
  168. package/docs/examples-toggle.html +8 -8
  169. package/docs/examples-tooltip.html +8 -8
  170. package/docs/examples-tree.html +8 -8
  171. package/docs/examples-treegrid.html +8 -8
  172. package/docs/index.html +919 -908
  173. package/docs/pagina-accesibilidad.html +110 -110
  174. package/docs/pagina-mapa-web.html +137 -137
  175. package/docs/pagina-prueba.html +95 -95
  176. package/docs/plantilla-con-header-advanced.html +14 -14
  177. package/docs/plantilla-editar-con-cabecera-fija-y-sidebar-sticky.html +154 -154
  178. package/docs/plantilla-editar-con-cabecera-fija.html +17 -17
  179. package/docs/plantilla-logueado-con-cabecera-fija-headroom.html +15 -15
  180. package/docs/plantilla-logueado-con-cabecera-fija.html +15 -15
  181. package/docs/plantilla-logueado-con-selector-de-app-y-sidebar.html +164 -164
  182. package/docs/plantilla-logueado-con-selector-de-app-y-subheader.html +16 -16
  183. package/docs/plantilla-logueado-con-selector-de-app.html +14 -14
  184. package/docs/plantilla-logueado-con-titulo-de-app.html +14 -14
  185. package/docs/plantilla-sin-loguear.html +14 -14
  186. package/docs/plantillas.html +89 -89
  187. package/docs/spinner-plantilla-con-header-advanced.html +2 -2
  188. package/docs/spinner-plantilla-editar-con-cabecera-fija.html +4 -4
  189. package/docs/spinner-plantilla-logueado-con-cabecera-fija.html +2 -2
  190. package/docs/spinner-plantilla-logueado-con-selector-de-app-y-subheader.html +2 -2
  191. package/docs/spinner-plantilla-logueado-con-titulo-de-app.html +2 -2
  192. package/docs/spinner-plantilla-sin-loguear.html +18 -18
  193. package/docs/sprints/01-combobox-template.md +433 -0
  194. package/docs/sprints/02-combobox-styles.md +291 -0
  195. package/docs/sprints/03-combobox-javascript.md +589 -0
  196. package/docs/sprints/04-combobox-integration.md +386 -0
  197. package/docs/sprints/05-combobox-refinamiento-w3c.md +55 -0
  198. package/package.json +61 -61
  199. package/public/images/demo-icon.svg +9 -9
  200. package/replit.md +74 -74
  201. package/src/EUPL-1.2.txt +287 -287
  202. package/src/css/base.css +44 -44
  203. package/src/css/component.form-group.css +24 -24
  204. package/src/css/component.headroom.css +32 -32
  205. package/src/css/component.text.css +169 -169
  206. package/src/css/styles.css +247 -246
  207. package/src/js/aria/MenuHorizontal.js +63 -65
  208. package/src/js/aria/MenuNavigation.js +56 -55
  209. package/src/js/aria/MenuVertical.js +60 -60
  210. package/src/js/aria/MenubarAction.js +29 -6
  211. package/src/js/aria/MenubarItemAction.js +1 -9
  212. package/src/js/aria/Nav.js +60 -60
  213. package/src/js/aria/PopupMenuAction.js +32 -14
  214. package/src/js/aria/accordion.js +281 -264
  215. package/src/js/aria/alert.js +8 -3
  216. package/src/js/aria/checkBoxes.js +52 -52
  217. package/src/js/aria/collapsible.js +44 -44
  218. package/src/js/aria/combobox.js +597 -0
  219. package/src/js/aria/dataGrid.js +953 -950
  220. package/src/js/aria/linksList.js +64 -42
  221. package/src/js/aria/listbox.js +3 -3
  222. package/src/js/aria/notification.js +56 -56
  223. package/src/js/aria/radioButton.js +50 -50
  224. package/src/js/aria/tabs.js +20 -6
  225. package/src/js/aria/toggle.js +61 -61
  226. package/src/js/aria/tree.js +60 -40
  227. package/src/js/aria/treegrid.js +507 -507
  228. package/src/js/aria/treeitem.js +22 -13
  229. package/src/js/aria/utils.js +240 -219
  230. package/src/js/desy-html.js +860 -813
  231. package/src/js/headroom.min.js +6 -6
  232. package/src/js/index.js +74 -72
  233. package/src/main.js +2 -2
  234. package/src/templates/components/accordion/_examples.accordion.njk +482 -482
  235. package/src/templates/components/accordion/_macro.accordion.njk +3 -3
  236. package/src/templates/components/accordion/_template.accordion.njk +131 -131
  237. package/src/templates/components/accordion/params.accordion.yaml +125 -125
  238. package/src/templates/components/accordion-history/_examples.accordion-history.njk +521 -521
  239. package/src/templates/components/accordion-history/_macro.accordion-history.njk +3 -3
  240. package/src/templates/components/accordion-history/_template.accordion-history.njk +193 -193
  241. package/src/templates/components/accordion-history/params.accordion-history.yaml +129 -129
  242. package/src/templates/components/alert/_examples.alert.njk +91 -91
  243. package/src/templates/components/alert/_macro.alert.njk +3 -3
  244. package/src/templates/components/alert/_styles.alert.css +9 -9
  245. package/src/templates/components/alert/_template.alert.njk +16 -16
  246. package/src/templates/components/alert/params.alert.yaml +25 -25
  247. package/src/templates/components/breadcrumbs/_examples.breadcrumbs.njk +464 -464
  248. package/src/templates/components/breadcrumbs/_macro.breadcrumbs.njk +3 -3
  249. package/src/templates/components/breadcrumbs/_styles.breadcrumbs.css +81 -81
  250. package/src/templates/components/breadcrumbs/_template.breadcrumbs.njk +77 -77
  251. package/src/templates/components/breadcrumbs/params.breadcrumbs.yaml +44 -44
  252. package/src/templates/components/button/_examples.button.njk +518 -511
  253. package/src/templates/components/button/_macro.button.njk +3 -3
  254. package/src/templates/components/button/_styles.button.css +180 -180
  255. package/src/templates/components/button/_template.button.njk +49 -49
  256. package/src/templates/components/button/params.button.yaml +48 -48
  257. package/src/templates/components/button-loader/_examples.button-loader.njk +499 -492
  258. package/src/templates/components/button-loader/_macro.button-loader.njk +3 -3
  259. package/src/templates/components/button-loader/_styles.button-loader.css +194 -194
  260. package/src/templates/components/button-loader/_template.button-loader.njk +84 -84
  261. package/src/templates/components/button-loader/params.button-loader.yaml +74 -74
  262. package/src/templates/components/card/_examples.card.njk +381 -381
  263. package/src/templates/components/card/_macro.card.njk +3 -3
  264. package/src/templates/components/card/_template.card.njk +34 -34
  265. package/src/templates/components/card/params.card.yaml +112 -112
  266. package/src/templates/components/character-count/_examples.character-count.njk +195 -195
  267. package/src/templates/components/character-count/_macro.character-count.njk +5 -5
  268. package/src/templates/components/character-count/_template.character-count.njk +38 -38
  269. package/src/templates/components/character-count/params.character-count.yaml +77 -77
  270. package/src/templates/components/checkboxes/_examples.checkboxes.njk +835 -835
  271. package/src/templates/components/checkboxes/_macro.checkboxes.njk +3 -3
  272. package/src/templates/components/checkboxes/_styles.checkboxes.css +30 -30
  273. package/src/templates/components/checkboxes/_template.checkboxes.njk +137 -137
  274. package/src/templates/components/checkboxes/params.checkboxes.yaml +116 -116
  275. package/src/templates/components/collapsible/_examples.collapsible.njk +107 -107
  276. package/src/templates/components/collapsible/_macro.collapsible.njk +3 -3
  277. package/src/templates/components/collapsible/_styles.collapsible.css +35 -35
  278. package/src/templates/components/collapsible/_template.collapsible.njk +17 -17
  279. package/src/templates/components/collapsible/params.collapsible.yaml +48 -48
  280. package/src/templates/components/combobox/_examples.combobox.njk +440 -0
  281. package/src/templates/components/combobox/_macro.combobox.njk +3 -0
  282. package/src/templates/components/combobox/_styles.combobox.css +92 -0
  283. package/src/templates/components/combobox/_template.combobox.njk +97 -0
  284. package/src/templates/components/combobox/params.combobox.yaml +102 -0
  285. package/src/templates/components/date-input/_examples.date-input.njk +578 -578
  286. package/src/templates/components/date-input/_macro.date-input.njk +3 -3
  287. package/src/templates/components/date-input/_template.date-input.njk +125 -125
  288. package/src/templates/components/date-input/params.date-input.yaml +97 -97
  289. package/src/templates/components/datepicker/_examples.datepicker.njk +415 -415
  290. package/src/templates/components/datepicker/_macro.datepicker.njk +3 -3
  291. package/src/templates/components/datepicker/_styles.datepicker.css +87 -87
  292. package/src/templates/components/datepicker/_template.datepicker.njk +129 -129
  293. package/src/templates/components/datepicker/params.datepicker.yaml +104 -104
  294. package/src/templates/components/description-list/_examples.description-list.njk +502 -502
  295. package/src/templates/components/description-list/_macro.description-list.njk +3 -3
  296. package/src/templates/components/description-list/_template.description-list.njk +17 -17
  297. package/src/templates/components/description-list/params.description-list.yaml +61 -61
  298. package/src/templates/components/details/_examples.details.njk +68 -68
  299. package/src/templates/components/details/_macro.details.njk +3 -3
  300. package/src/templates/components/details/_template.details.njk +17 -17
  301. package/src/templates/components/details/params.details.yaml +40 -40
  302. package/src/templates/components/dialog/_examples.dialog.njk +156 -156
  303. package/src/templates/components/dialog/_macro.dialog.njk +3 -3
  304. package/src/templates/components/dialog/_styles.dialog.css +27 -27
  305. package/src/templates/components/dialog/_template.dialog.njk +12 -12
  306. package/src/templates/components/dialog/params.dialog.yaml +25 -25
  307. package/src/templates/components/dropdown/_examples.dropdown.njk +226 -226
  308. package/src/templates/components/dropdown/_macro.dropdown.njk +3 -3
  309. package/src/templates/components/dropdown/_styles.dropdown.css +191 -191
  310. package/src/templates/components/dropdown/_template.dropdown.njk +34 -34
  311. package/src/templates/components/dropdown/params.dropdown.yaml +32 -32
  312. package/src/templates/components/error-message/_examples.error-message.njk +28 -28
  313. package/src/templates/components/error-message/_macro.error-message.njk +5 -5
  314. package/src/templates/components/error-message/_template.error-message.njk +8 -8
  315. package/src/templates/components/error-message/params.error-message.yaml +23 -23
  316. package/src/templates/components/error-summary/_examples.error-summary.njk +111 -111
  317. package/src/templates/components/error-summary/_macro.error-summary.njk +5 -5
  318. package/src/templates/components/error-summary/_template.error-summary.njk +48 -48
  319. package/src/templates/components/error-summary/params.error-summary.yaml +50 -50
  320. package/src/templates/components/fieldset/_examples.fieldset.njk +79 -79
  321. package/src/templates/components/fieldset/_macro.fieldset.njk +2 -2
  322. package/src/templates/components/fieldset/_template.fieldset.njk +46 -46
  323. package/src/templates/components/fieldset/params.fieldset.yaml +49 -49
  324. package/src/templates/components/file-upload/_examples.file-upload.njk +103 -103
  325. package/src/templates/components/file-upload/_macro.file-upload.njk +2 -2
  326. package/src/templates/components/file-upload/_template.file-upload.njk +45 -45
  327. package/src/templates/components/file-upload/params.file-upload.yaml +48 -48
  328. package/src/templates/components/footer/_examples.footer.njk +558 -558
  329. package/src/templates/components/footer/_macro.footer.njk +3 -3
  330. package/src/templates/components/footer/_styles.footer.css +43 -43
  331. package/src/templates/components/footer/_template.footer.njk +130 -130
  332. package/src/templates/components/footer/params.footer.yaml +140 -140
  333. package/src/templates/components/header/_examples.header.njk +627 -627
  334. package/src/templates/components/header/_macro.header.header__dropdown.njk +3 -3
  335. package/src/templates/components/header/_macro.header.header__navigation.njk +3 -3
  336. package/src/templates/components/header/_macro.header.header__offcanvas.njk +3 -3
  337. package/src/templates/components/header/_macro.header.header__offcanvasButton.njk +3 -3
  338. package/src/templates/components/header/_macro.header.header__subnav.njk +3 -3
  339. package/src/templates/components/header/_macro.header.njk +3 -3
  340. package/src/templates/components/header/_styles.header.css +12 -12
  341. package/src/templates/components/header/_template.header.header__dropdown.njk +27 -27
  342. package/src/templates/components/header/_template.header.header__navigation.njk +25 -25
  343. package/src/templates/components/header/_template.header.header__offcanvas.njk +20 -20
  344. package/src/templates/components/header/_template.header.header__offcanvasButton.njk +10 -10
  345. package/src/templates/components/header/_template.header.header__subnav.njk +33 -33
  346. package/src/templates/components/header/_template.header.njk +155 -155
  347. package/src/templates/components/header/params.header.yaml +295 -295
  348. package/src/templates/components/header-advanced/_examples.header-advanced.njk +1110 -1110
  349. package/src/templates/components/header-advanced/_macro.header-advanced.njk +3 -3
  350. package/src/templates/components/header-advanced/_template.header-advanced.njk +171 -171
  351. package/src/templates/components/header-advanced/params.header-advanced.yaml +352 -352
  352. package/src/templates/components/header-mini/_examples.header-mini.njk +319 -316
  353. package/src/templates/components/header-mini/_macro.header-mini.njk +3 -3
  354. package/src/templates/components/header-mini/_template.header-mini.njk +51 -51
  355. package/src/templates/components/header-mini/params.header-mini.yaml +90 -90
  356. package/src/templates/components/hint/_examples.hint.njk +26 -26
  357. package/src/templates/components/hint/_macro.hint.njk +3 -3
  358. package/src/templates/components/hint/_template.hint.njk +3 -3
  359. package/src/templates/components/hint/params.hint.yaml +21 -21
  360. package/src/templates/components/input/_examples.input.njk +393 -393
  361. package/src/templates/components/input/_macro.input.njk +3 -3
  362. package/src/templates/components/input/_styles.input.css +17 -17
  363. package/src/templates/components/input/_template.input.njk +53 -53
  364. package/src/templates/components/input/params.input.yaml +80 -80
  365. package/src/templates/components/input-group/_examples.input-group.njk +558 -558
  366. package/src/templates/components/input-group/_macro.input-group.njk +3 -3
  367. package/src/templates/components/input-group/_template.input-group.njk +107 -107
  368. package/src/templates/components/input-group/params.input-group.yaml +123 -123
  369. package/src/templates/components/item/_examples.item.njk +370 -370
  370. package/src/templates/components/item/_macro.item.njk +3 -3
  371. package/src/templates/components/item/_template.item.njk +73 -73
  372. package/src/templates/components/item/params.item.yaml +101 -101
  373. package/src/templates/components/label/_examples.label.njk +58 -58
  374. package/src/templates/components/label/_macro.label.njk +5 -5
  375. package/src/templates/components/label/_template.label.njk +37 -37
  376. package/src/templates/components/label/params.label.yaml +28 -28
  377. package/src/templates/components/links-list/_examples.links-list.njk +761 -761
  378. package/src/templates/components/links-list/_macro.links-list.njk +3 -3
  379. package/src/templates/components/links-list/_template.links-list.njk +119 -119
  380. package/src/templates/components/links-list/params.links-list.yaml +101 -101
  381. package/src/templates/components/listbox/_examples.listbox.njk +813 -812
  382. package/src/templates/components/listbox/_macro.listbox.njk +3 -3
  383. package/src/templates/components/listbox/_styles.listbox.css +218 -218
  384. package/src/templates/components/listbox/_template.listbox.njk +90 -90
  385. package/src/templates/components/listbox/params.listbox.yaml +85 -85
  386. package/src/templates/components/media-object/_examples.media-object.njk +79 -79
  387. package/src/templates/components/media-object/_macro.media-object.njk +3 -3
  388. package/src/templates/components/media-object/_template.media-object.njk +21 -21
  389. package/src/templates/components/media-object/params.media-object.yaml +16 -16
  390. package/src/templates/components/menu-horizontal/_examples.menu-horizontal.njk +613 -613
  391. package/src/templates/components/menu-horizontal/_macro.menu-horizontal.njk +3 -3
  392. package/src/templates/components/menu-horizontal/_styles.menu-horizontal.css +167 -167
  393. package/src/templates/components/menu-horizontal/_template.menu-horizontal.njk +36 -36
  394. package/src/templates/components/menu-horizontal/params.menu-horizontal.yaml +53 -53
  395. package/src/templates/components/menu-navigation/_examples.menu-navigation.njk +1292 -1292
  396. package/src/templates/components/menu-navigation/_macro.menu-navigation.njk +3 -3
  397. package/src/templates/components/menu-navigation/_styles.menu-navigation.css +238 -238
  398. package/src/templates/components/menu-navigation/_template.menu-navigation.njk +87 -87
  399. package/src/templates/components/menu-navigation/params.menu-navigation.yaml +86 -86
  400. package/src/templates/components/menu-vertical/_examples.menu-vertical.njk +835 -835
  401. package/src/templates/components/menu-vertical/_macro.menu-vertical.njk +3 -3
  402. package/src/templates/components/menu-vertical/_template.menu-vertical.njk +92 -92
  403. package/src/templates/components/menu-vertical/params.menu-vertical.yaml +77 -77
  404. package/src/templates/components/menubar/_examples.menubar.njk +1843 -1843
  405. package/src/templates/components/menubar/_macro.menubar.njk +3 -3
  406. package/src/templates/components/menubar/_styles.menubar.css +259 -259
  407. package/src/templates/components/menubar/_template.menubar.njk +106 -106
  408. package/src/templates/components/menubar/params.menubar.yaml +130 -130
  409. package/src/templates/components/modal/_examples.modal.njk +432 -432
  410. package/src/templates/components/modal/_macro.modal.njk +3 -3
  411. package/src/templates/components/modal/_template.modal.njk +129 -129
  412. package/src/templates/components/modal/params.modal.yaml +77 -77
  413. package/src/templates/components/nav/_examples.nav.njk +468 -468
  414. package/src/templates/components/nav/_macro.nav.njk +3 -3
  415. package/src/templates/components/nav/_template.nav.njk +53 -53
  416. package/src/templates/components/nav/params.nav.yaml +61 -61
  417. package/src/templates/components/notification/_examples.notification.njk +277 -277
  418. package/src/templates/components/notification/_macro.notification.njk +3 -3
  419. package/src/templates/components/notification/_styles.notification.css +30 -30
  420. package/src/templates/components/notification/_template.notification.njk +86 -86
  421. package/src/templates/components/notification/params.notification.yaml +101 -101
  422. package/src/templates/components/pagination/_examples.pagination.njk +444 -444
  423. package/src/templates/components/pagination/_macro.pagination.njk +3 -3
  424. package/src/templates/components/pagination/_template.pagination.njk +162 -162
  425. package/src/templates/components/pagination/params.pagination.yaml +150 -150
  426. package/src/templates/components/pill/_examples.pill.njk +180 -180
  427. package/src/templates/components/pill/_macro.pill.njk +3 -3
  428. package/src/templates/components/pill/_styles.pill.css +59 -59
  429. package/src/templates/components/pill/_template.pill.njk +38 -38
  430. package/src/templates/components/pill/params.pill.yaml +28 -28
  431. package/src/templates/components/radios/_examples.radios.njk +698 -698
  432. package/src/templates/components/radios/_macro.radios.njk +5 -5
  433. package/src/templates/components/radios/_styles.radios.css +30 -30
  434. package/src/templates/components/radios/_template.radios.njk +133 -133
  435. package/src/templates/components/radios/params.radios.yaml +104 -104
  436. package/src/templates/components/searchbar/_examples.searchbar.njk +147 -147
  437. package/src/templates/components/searchbar/_macro.searchbar.njk +3 -3
  438. package/src/templates/components/searchbar/_template.searchbar.njk +45 -45
  439. package/src/templates/components/searchbar/params.searchbar.yaml +46 -46
  440. package/src/templates/components/select/_examples.select.njk +364 -364
  441. package/src/templates/components/select/_macro.select.njk +5 -5
  442. package/src/templates/components/select/_styles.select.css +45 -45
  443. package/src/templates/components/select/_template.select.njk +67 -67
  444. package/src/templates/components/select/params.select.yaml +93 -93
  445. package/src/templates/components/skip-link/_examples.skip-link.njk +31 -31
  446. package/src/templates/components/skip-link/_macro.skip-link.njk +3 -3
  447. package/src/templates/components/skip-link/_styles.skip-link.css +12 -12
  448. package/src/templates/components/skip-link/_template.skip-link.njk +4 -4
  449. package/src/templates/components/skip-link/params.skip-link.yaml +20 -20
  450. package/src/templates/components/spinner/_examples.spinner.njk +91 -101
  451. package/src/templates/components/spinner/_macro.spinner.njk +3 -3
  452. package/src/templates/components/spinner/_styles.spinner.css +33 -33
  453. package/src/templates/components/spinner/_template.spinner.njk +12 -12
  454. package/src/templates/components/spinner/params.spinner.yaml +12 -12
  455. package/src/templates/components/status/_examples.status.njk +80 -80
  456. package/src/templates/components/status/_macro.status.njk +3 -3
  457. package/src/templates/components/status/_template.status.njk +23 -23
  458. package/src/templates/components/status/params.status.yaml +24 -24
  459. package/src/templates/components/status-item/_examples.status-item.njk +319 -319
  460. package/src/templates/components/status-item/_macro.status-item.njk +3 -3
  461. package/src/templates/components/status-item/_template.status-item.njk +99 -99
  462. package/src/templates/components/status-item/params.status-item.yaml +106 -106
  463. package/src/templates/components/table/_examples.table.njk +705 -705
  464. package/src/templates/components/table/_macro.table.njk +3 -3
  465. package/src/templates/components/table/_styles.table.css +19 -19
  466. package/src/templates/components/table/_template.table.njk +68 -68
  467. package/src/templates/components/table/params.table.yaml +130 -130
  468. package/src/templates/components/table-advanced/_examples.table-advanced.njk +839 -839
  469. package/src/templates/components/table-advanced/_macro.table-advanced.njk +3 -3
  470. package/src/templates/components/table-advanced/_styles.table-advanced.css +63 -63
  471. package/src/templates/components/table-advanced/_template.table-advanced.njk +210 -210
  472. package/src/templates/components/table-advanced/params.table-advanced.yaml +160 -160
  473. package/src/templates/components/tabs/_examples.tabs.njk +588 -588
  474. package/src/templates/components/tabs/_macro.tabs.njk +3 -3
  475. package/src/templates/components/tabs/_styles.tabs.css +132 -132
  476. package/src/templates/components/tabs/_template.tabs.njk +70 -70
  477. package/src/templates/components/tabs/params.tabs.yaml +83 -83
  478. package/src/templates/components/textarea/_examples.textarea.njk +174 -174
  479. package/src/templates/components/textarea/_macro.textarea.njk +5 -5
  480. package/src/templates/components/textarea/_template.textarea.njk +47 -47
  481. package/src/templates/components/textarea/params.textarea.yaml +64 -64
  482. package/src/templates/components/toggle/_examples.toggle.njk +248 -248
  483. package/src/templates/components/toggle/_macro.toggle.njk +3 -3
  484. package/src/templates/components/toggle/_styles.toggle.css +31 -31
  485. package/src/templates/components/toggle/_template.toggle.njk +27 -27
  486. package/src/templates/components/toggle/params.toggle.yaml +69 -69
  487. package/src/templates/components/tooltip/_examples.tooltip.njk +134 -134
  488. package/src/templates/components/tooltip/_macro.tooltip.njk +3 -3
  489. package/src/templates/components/tooltip/_styles.tooltip.css +9 -9
  490. package/src/templates/components/tooltip/_template.tooltip.njk +40 -40
  491. package/src/templates/components/tooltip/params.tooltip.yaml +40 -40
  492. package/src/templates/components/tree/_examples.tree.njk +2671 -2671
  493. package/src/templates/components/tree/_macro.tree.njk +3 -3
  494. package/src/templates/components/tree/_styles.tree.css +54 -54
  495. package/src/templates/components/tree/_template.tree.njk +232 -232
  496. package/src/templates/components/tree/params.tree.yaml +173 -173
  497. package/src/templates/components/treegrid/_examples.treegrid.njk +1269 -1269
  498. package/src/templates/components/treegrid/_macro.treegrid.njk +3 -3
  499. package/src/templates/components/treegrid/_styles.treegrid.css +31 -31
  500. package/src/templates/components/treegrid/_template.treegrid.njk +90 -90
  501. package/src/templates/components/treegrid/params.treegrid.yaml +131 -131
  502. package/src/templates/includes/_abrir-notificaciones-extra.njk +2 -2
  503. package/src/templates/includes/_abrir-notificaciones.njk +2 -2
  504. package/src/templates/includes/_acciones-de-cabecera.njk +28 -28
  505. package/src/templates/includes/_ejemplo-titulo-h2-parrafo.njk +4 -4
  506. package/src/templates/includes/_ejemplo-titulo-parrafo.njk +4 -4
  507. package/src/templates/includes/_test-include.njk +13 -13
  508. package/src/templates/pages/_page.foot-headroom.njk +30 -30
  509. package/src/templates/pages/_page.foot.njk +5 -5
  510. package/src/templates/pages/_page.footer.njk +19 -19
  511. package/src/templates/pages/_page.head.njk +27 -27
  512. package/src/templates/pages/_page.notification-edit-inner-content.njk +31 -31
  513. package/src/templates/pages/_page.notification-edit.njk +30 -30
  514. package/src/templates/pages/_page.notification-footer.njk +32 -32
  515. package/src/templates/pages/_page.notification-header-fixed.njk +30 -30
  516. package/src/templates/pages/_page.notification-header.njk +31 -31
  517. package/src/templates/pages/_page.sidebar-content.njk +20 -20
  518. package/src/templates/pages/_page.spinner-block.njk +14 -14
  519. package/src/templates/pages/_page.spinner-show.njk +15 -15
  520. package/src/templates/pages/_page.spinner.njk +15 -15
  521. package/src/templates/pages/_template.edit-fixed-with-sticky-sidebar.njk +36 -36
  522. package/src/templates/pages/_template.edit-fixed.njk +74 -74
  523. package/src/templates/pages/_template.home.njk +111 -111
  524. package/src/templates/pages/_template.logged-out.njk +56 -56
  525. package/src/templates/pages/_template.logged-selector-fixed-headroom.njk +198 -198
  526. package/src/templates/pages/_template.logged-selector-fixed.njk +195 -195
  527. package/src/templates/pages/_template.logged-selector-subheader.njk +80 -80
  528. package/src/templates/pages/_template.logged-selector-with-sidebar.njk +28 -28
  529. package/src/templates/pages/_template.logged-selector.njk +195 -195
  530. package/src/templates/pages/_template.logged.njk +141 -141
  531. package/src/templates/pages/_template.mfe-iframe-content.njk +31 -31
  532. package/src/templates/pages/_template.mfe.njk +83 -83
  533. package/src/templates/pages/_template.test.njk +48 -48
  534. package/src/templates/pages/_template.with-header-advanced.njk +311 -311
  535. package/vite.config.js +1021 -982
@@ -1,836 +1,836 @@
1
- {% from "components/checkboxes/_macro.checkboxes.njk" import componentCheckboxes %}
2
- {% from "components/fieldset/_macro.fieldset.njk" import componentFieldset %}
3
- {% from "components/input/_macro.input.njk" import componentInput %}
4
-
5
- {% macro telefonoContent(id='id') %}
6
- {% call componentFieldset({
7
- "legend": {
8
- "text": "¿Cuál es tu número de teléfono fijo?",
9
- "classes": "mb-sm sr-only"
10
- }
11
- }) %}
12
- <div class="c-form-group">
13
- {{ componentInput({
14
- "label": {
15
- "text": "Número de teléfono fijo"
16
- },
17
- "id": "telefono-" + id,
18
- "name": "telefono-name-" + id
19
- }) }}
20
- </div>
21
- {% endcall %}
22
- {% endmacro %}
23
-
24
- {% macro mobileContent(id='id') %}
25
- {% call componentFieldset({
26
- "legend": {
27
- "text": "¿Cuál es tu número de teléfono móvil?",
28
- "classes": "mb-sm sr-only"
29
- }
30
- }) %}
31
- <div class="c-form-group">
32
- {{ componentInput({
33
- "label": {
34
- "text": "Número de teléfono móvil"
35
- },
36
- "id": "mobile-" + id,
37
- "name": "mobile-name-" + id
38
- }) }}
39
- </div>
40
- {% endcall %}
41
- {% endmacro %}
42
-
43
- {% macro mobileErrorContent(id='id') %}
44
- {% call componentFieldset({
45
- "legend": {
46
- "text": "¿Cuál es tu número de teléfono móvil?",
47
- "classes": "mb-sm sr-only"
48
- }
49
- }) %}
50
- <div class="c-form-group">
51
- {{ componentInput({
52
- "label": {
53
- "text": "Número de teléfono móvil"
54
- },
55
- "id": "input-with-error-message-" + id,
56
- "name": "test-name-" + id,
57
- "errorMessage": {
58
- "text": "Este campo no puede estar vacío"
59
- }
60
- }) }}
61
- </div>
62
- {% endcall %}
63
- {% endmacro %}
64
-
65
- {% macro grandchildContent(id='id') %}
66
- {{ componentCheckboxes({
67
- "idPrefix": "grandchild-" + id,
68
- "name": "grandchild-" + id,
69
- "items": [
70
- {
71
- "name": "oficina-principal",
72
- "id": "oficina-principal-id",
73
- "value": "oficina-principal",
74
- "text": "Oficina principal"
75
- },
76
- {
77
- "name": "oficina-secundaria",
78
- "id": "oficina-secundaria-id",
79
- "value": "oficina-secundaria",
80
- "text": "Oficina secundaria"
81
- }
82
- ]
83
- }) }}
84
- {% endmacro %}
85
-
86
- {% macro nestedContent(id='id') %}
87
- {{ componentCheckboxes({
88
- "idPrefix": "with-conditional-items-checked-nested-" + id,
89
- "name": "with-conditional-items-checked-nested-" + id,
90
- "items": [
91
- {
92
- "value": "oficinas-de-registro",
93
- "text": "Oficinas de registro",
94
- "checked": true,
95
- "conditional": {
96
- "html": grandchildContent(id).val
97
- }
98
- }
99
- ]
100
- }) }}
101
- {% endmacro %}
102
-
103
-
104
-
105
- {% set exampleComponent = "checkboxes" %}
106
- {% set examples = [{
107
- "name": "por defecto",
108
- "data": {
109
- "idPrefix": "default",
110
- "name": "default",
111
- "fieldset": {
112
- "legend": {
113
- "text": "¿Cómo prefieres que te contactemos?"
114
- }
115
- },
116
- "hint": {
117
- "text": "Si lo deseas puedes seleccionar varios elementos."
118
- },
119
- "items": [
120
- {
121
- "value": "correo-electronico",
122
- "text": "Correo electrónico"
123
- },
124
- {
125
- "value": "correo-postal",
126
- "text": "Correo postal"
127
- },
128
- {
129
- "value": "telefono",
130
- "text": "Teléfono"
131
- }
132
- ]
133
- },
134
- "visualDescription": "Grupo de tres checkboxes sin marcar con labels en negro. Encabezado en negrita negro pregunta sobre preferencias de contacto, seguido de texto gris instructivo. Fondo blanco con borde gris claro delimitando el componente completo.",
135
- "_generated": {
136
- "hash": "b35e6609f05ea9ee328a42e0da095a61",
137
- "version": "15.0.3",
138
- "timestamp": "2026-01-30T18:52:53.918Z"
139
- }
140
- },
141
- {
142
- "name": "Con id y name",
143
- "data": {
144
- "idPrefix": "with-id-and-name",
145
- "name": "with-id-and-name",
146
- "fieldset": {
147
- "legend": {
148
- "text": "¿Cómo prefieres que te contactemos?"
149
- }
150
- },
151
- "hint": {
152
- "text": "Si lo deseas puedes seleccionar varios elementos."
153
- },
154
- "items": [
155
- {
156
- "name": "correo-electronico",
157
- "id": "correo-electronico-id",
158
- "value": "correo-electronico",
159
- "text": "Correo electrónico"
160
- },
161
- {
162
- "name": "correo-postal",
163
- "id": "correo-postal-id",
164
- "value": "correo-postal",
165
- "text": "Correo postal"
166
- }
167
- ]
168
- },
169
- "visualDescription": "Grupo de dos checkboxes sin marcar con labels en negro. Encabezado en negrita negro pregunta sobre preferencias de contacto, seguido de texto gris instructivo. Fondo blanco con borde gris claro delimitando el componente completo.",
170
- "_generated": {
171
- "hash": "e0540ce6682a0c05028cf634d18893d4",
172
- "version": "15.0.3",
173
- "timestamp": "2026-01-30T18:52:53.918Z"
174
- }
175
- },
176
- {
177
- "name": "con pistas en los items",
178
- "data": {
179
- "idPrefix": "hints-on-items",
180
- "fieldset": {
181
- "legend": {
182
- "text": "¿Cómo prefieres que te contactemos?",
183
- "isPageHeading": true
184
- }
185
- },
186
- "items": [
187
- {
188
- "name": "correo-electronico",
189
- "id": "correo-electronico-a",
190
- "value": "desy-correo-electronico",
191
- "text": "Correo electrónico",
192
- "hint": {
193
- "text": "Asegúrate de que el correo no llega a la bandeja de spam."
194
- }
195
- },
196
- {
197
- "name": "correo-postal",
198
- "id": "desy-correo-postal-a",
199
- "value": "desy-correo-postal-a",
200
- "text": "Correo postal",
201
- "hint": {
202
- "text": "Asegúrate de haber introducido la dirección postal correctamente."
203
- }
204
- }
205
- ]
206
- },
207
- "visualDescription": "Grupo de dos checkboxes sin marcar con labels en negro y texto de ayuda gris debajo de cada opción. Encabezado en negrita negro pregunta sobre preferencias de contacto. Fondo blanco con borde gris claro delimitando el componente completo, texto secundario en gris proporciona contexto adicional para cada checkbox.",
208
- "_generated": {
209
- "hash": "004cf6deb01dee8dd239e4dae0d0e4c2",
210
- "version": "15.0.3",
211
- "timestamp": "2026-01-30T18:52:53.918Z"
212
- }
213
- },
214
- {
215
- "name": "Con líneas divisorias",
216
- "data": {
217
- "idPrefix": "has-dividers",
218
- "fieldset": {
219
- "legend": {
220
- "text": "¿Cómo prefieres que te contactemos?"
221
- }
222
- },
223
- "hint": {
224
- "text": "Si lo deseas puedes seleccionar varios elementos."
225
- },
226
- "hasDividers": true,
227
- "items": [
228
- {
229
- "name": "correo-electronico",
230
- "id": "correo-electronico-b",
231
- "value": "desy-correo-electronico",
232
- "text": "Correo electrónico"
233
- },
234
- {
235
- "name": "correo-postal",
236
- "id": "desy-correo-postal-b",
237
- "value": "desy-correo-postal-b",
238
- "text": "Correo postal",
239
- "hint": {
240
- "text": "Asegúrate de haber introducido la dirección postal correctamente."
241
- }
242
- },
243
- {
244
- "name": "telefono",
245
- "id": "telefono-b",
246
- "value": "telefono",
247
- "text": "Teléfono",
248
- "checked": true,
249
- "conditional": {
250
- "html": telefonoContent('1').val
251
- }
252
- },
253
- {
254
- "name": "correo-postal",
255
- "id": "desy-correo-postal-c",
256
- "value": "desy-correo-postal-c",
257
- "text": "Correo postal",
258
- "hint": {
259
- "text": "Asegúrate de haber introducido la dirección postal correctamente."
260
- }
261
- }
262
- ]
263
- },
264
- "visualDescription": "Grupo de checkboxes con bordes grises claros separando cada opción. Encabezado en negro con texto de ayuda en rojo debajo. Checkboxes con cuadrados blancos de borde gris, labels en negro, texto de ayuda gris debajo de cada opción. Cuando se selecciona teléfono, aparece un campo de texto con label gris y borde gris.",
265
- "_generated": {
266
- "hash": "afe43a55114c0c623e38954b0e90dc63",
267
- "version": "15.0.3",
268
- "timestamp": "2026-01-30T18:53:03.466Z"
269
- }
270
- },
271
- {
272
- "name": "Con clases de CSS aplicadas",
273
- "description": "Los parámetros <code>classes</code> nos permiten aplicar clases de Tailwind CSS a nuestro componente.",
274
- "data": {
275
- "idPrefix": "classes",
276
- "fieldset": {
277
- "legend": {
278
- "text": "¿Cómo prefieres que te contactemos?"
279
- }
280
- },
281
- "items": [
282
- {
283
- "name": "correo-electronico",
284
- "id": "correo-electronico-c",
285
- "value": "desy-correo-electronico",
286
- "text": "Correo electrónico",
287
- "hint": {
288
- "text": "Asegúrate de que el correo no llega a la bandeja de spam."
289
- },
290
- "classes": "bg-primary-light"
291
- },
292
- {
293
- "name": "correo-postal",
294
- "id": "desy-correo-postal-d",
295
- "value": "desy-correo-postal-d",
296
- "text": "Correo postal",
297
- "hint": {
298
- "text": "Asegúrate de haber introducido la dirección postal correctamente."
299
- },
300
- "classes": "bg-neutral-lighter"
301
- }
302
- ]
303
- },
304
- "visualDescription": "Grupo de checkboxes con fondo azul claro en la primera opción. Título en negro arriba del grupo. Dos checkboxes con cuadrados blancos de borde gris, labels en negro, y texto de ayuda gris debajo de cada label. Sin bordes divisorios entre opciones.",
305
- "_generated": {
306
- "hash": "b2fb4e8f402a12ecbca2df64fa9869b1",
307
- "version": "15.0.3",
308
- "timestamp": "2026-01-30T18:53:03.466Z"
309
- }
310
- },
311
- {
312
- "name": "con item deshabilitado",
313
- "data": {
314
- "idPrefix": "disabled-item",
315
- "name": "colours",
316
- "items": [
317
- {
318
- "value": "correo-electronico",
319
- "text": "Correo electrónico"
320
- },
321
- {
322
- "value": "correo-postal",
323
- "text": "Correo postal",
324
- "disabled": true,
325
- "checked": true
326
- },
327
- {
328
- "value": "telefono",
329
- "text": "Teléfono",
330
- "disabled": true
331
- }
332
- ]
333
- },
334
- "visualDescription": "Grupo de tres checkboxes sin bordes divisorios. Primer checkbox sin marcar con cuadrado blanco de borde gris y label negro. Segundo checkbox marcado con check verde y label negro. Tercer checkbox deshabilitado con cuadrado gris, label gris atenuado, sin posibilidad de interacción.",
335
- "_generated": {
336
- "hash": "d08d81692b28f58c743b0054b2605af8",
337
- "version": "15.0.3",
338
- "timestamp": "2026-01-30T18:53:03.466Z"
339
- }
340
- },
341
- {
342
- "name": "con un legend del tamaño de un encabezado h2",
343
- "data": {
344
- "idPrefix": "medium-legend",
345
- "name": "medium-legend",
346
- "fieldset": {
347
- "legend": {
348
- "text": "¿Cómo prefieres que te contactemos?",
349
- "classes": "c-h2"
350
- }
351
- },
352
- "hint": {
353
- "text": "Si lo deseas puedes seleccionar varios elementos."
354
- },
355
- "errorMessage": {
356
- "text": "Tienes que seleccionar al menos una opción. Soluciona el error."
357
- },
358
- "items": [
359
- {
360
- "value": "correo-electronico",
361
- "text": "Correo electrónico"
362
- },
363
- {
364
- "value": "correp-postal",
365
- "text": "Correo postal"
366
- },
367
- {
368
- "value": "telefono",
369
- "text": "Teléfono"
370
- }
371
- ]
372
- },
373
- "visualDescription": "Fieldset con borde gris claro de 1px, encabezado grande en texto negro preguntando sobre preferencias de contacto. Tres checkboxes verticales sin marcar (Correo electrónico, Correo postal, Teléfono) con labels en texto negro. Mensaje de error en rojo arriba indicando que se debe seleccionar al menos una opción.",
374
- "_generated": {
375
- "hash": "b08d35753a0856f5116cc7d9db4b21a2",
376
- "version": "15.0.3",
377
- "timestamp": "2026-01-30T18:53:13.889Z"
378
- }
379
- },
380
- {
381
- "name": "sin fieldset",
382
- "description": "Usa este ejemplo si vas a escribir tú mismo un fieldset, rodeándolo. Recuerda que el uso de fieldset es necesario por accesibilidad.",
383
- "data": {
384
- "idPrefix": "without-fieldset",
385
- "name": "without-fieldset",
386
- "items": [
387
- {
388
- "value": "correo-electronico",
389
- "text": "Correo electrónico"
390
- },
391
- {
392
- "value": "correp-postal",
393
- "text": "Correo postal"
394
- },
395
- {
396
- "value": "telefono",
397
- "text": "Teléfono"
398
- }
399
- ]
400
- },
401
- "visualDescription": "Grupo de tres checkboxes verticales sin borde contenedor, con título pequeño \"sin fieldset\" en gris oscuro arriba. Checkboxes sin marcar (Correo electrónico, Correo postal, Teléfono) con labels en texto negro, presentados en lista vertical sobre fondo blanco sin bordes delimitadores.",
402
- "_generated": {
403
- "hash": "0032e381b49bc66d24b36aa0a9d82439",
404
- "version": "15.0.3",
405
- "timestamp": "2026-01-30T18:53:13.889Z"
406
- }
407
- },
408
- {
409
- "name": "con una sóla opción usando 'aria-describedby' en el input",
410
- "description": "Por accesibilidad, los mensajes de error deben incluir la palabra \"error\", para que no recaiga tan sólo en el color el hecho de que es un mensaje de error.",
411
- "data": {
412
- "idPrefix": "describedby",
413
- "name": "describedby",
414
- "errorMessage": {
415
- "text": "Por favor, debes aceptar los términos y condiciones. Soluciona el error."
416
- },
417
- "items": [
418
- {
419
- "value": "acepto",
420
- "html": "Acepto los <a href='#' target='_blank' class='c-link' title='Se abre en ventana nueva del navegador'>términos y condiciones</a>"
421
- }
422
- ]
423
- },
424
- "visualDescription": "Fieldset con borde gris claro de 1px, título descriptivo en texto negro sobre el uso de aria-describedby. Checkbox individual sin marcar con label \"Acepto los\" seguido de enlace azul subrayado \"términos y condiciones\". Mensaje de error en rojo arriba solicitando aceptar los términos.",
425
- "_generated": {
426
- "hash": "e10048a2729a00674e0e1e8ea1cf6d70",
427
- "version": "15.0.3",
428
- "timestamp": "2026-01-30T18:53:13.889Z"
429
- }
430
- },
431
- {
432
- "name": "con una sóla opción (y pista) usando 'aria-describedby' en el input",
433
- "description": "Por accesibilidad, los mensajes de error deben incluir la palabra \"error\", para que no recaiga tan sólo en el color el hecho de que es un mensaje de error.",
434
- "data": {
435
- "name": "t-and-c-with-hint",
436
- "errorMessage": {
437
- "text": "Por favor, debes aceptar los términos y condiciones. Soluciona el error."
438
- },
439
- "items": [
440
- {
441
- "value": "acepto",
442
- "html": "Acepto los <a href='#' target='_blank' class='c-link' title='Se abre en ventana nueva del navegador'>términos y condiciones</a>",
443
- "hint": {
444
- "text": "Puedes visualizarlos en ventana nueva del navegador"
445
- }
446
- }
447
- ]
448
- },
449
- "visualDescription": "Checkbox sin marcar con borde rojo de 2px, acompañado de label en negro con texto secundario gris debajo. Fondo blanco, contenedor con borde gris claro. Mensaje de error en rojo encima del checkbox indica validación pendiente.",
450
- "_generated": {
451
- "hash": "f0fab73c491454b5e79f07634d9bc6f2",
452
- "version": "15.0.3",
453
- "timestamp": "2026-01-30T18:53:22.839Z"
454
- }
455
- },
456
- {
457
- "name": "con fieldset y mensaje de error",
458
- "description": "Por accesibilidad, los mensajes de error deben incluir la palabra \"error\", para que no recaiga tan sólo en el color el hecho de que es un mensaje de error.",
459
- "data": {
460
- "name": "colours",
461
- "errorMessage": {
462
- "text": "Tienes que seleccionar al menos una opción. Soluciona el error."
463
- },
464
- "fieldset": {
465
- "legend": {
466
- "text": "¿Cómo prefieres que te contactemos?"
467
- }
468
- },
469
- "items": [
470
- {
471
- "value": "correo-electronico",
472
- "text": "Correo electrónico"
473
- },
474
- {
475
- "value": "correo-postal",
476
- "text": "Correo postal"
477
- },
478
- {
479
- "value": "telefono",
480
- "text": "Teléfono"
481
- }
482
- ]
483
- },
484
- "visualDescription": "Grupo de tres checkboxes sin marcar con bordes rojos de 2px, labels en negro (\"Correo electrónico\", \"Correo postal\", \"Teléfono\"). Título de pregunta en negro arriba, mensaje de error en rojo debajo del título. Fondo blanco, contenedor con borde gris claro.",
485
- "_generated": {
486
- "hash": "90be10d247ee63f67a33ffea19d03878",
487
- "version": "15.0.3",
488
- "timestamp": "2026-01-30T18:53:22.839Z"
489
- }
490
- },
491
- {
492
- "name": "con mensaje de error",
493
- "description": "Por accesibilidad, los mensajes de error deben incluir la palabra \"error\", para que no recaiga tan sólo en el color el hecho de que es un mensaje de error.",
494
- "data": {
495
- "idPrefix": "error-message",
496
- "name": "error-message",
497
- "errorMessage": {
498
- "text": "Tienes que seleccionar al menos una opción. Soluciona el error."
499
- },
500
- "fieldset": {
501
- "legend": {
502
- "text": "¿Cómo prefieres que te contactemos?"
503
- }
504
- },
505
- "items": [
506
- {
507
- "value": "correo-electronico",
508
- "text": "Correo electrónico"
509
- },
510
- {
511
- "value": "correp-postal",
512
- "text": "Correo postal"
513
- },
514
- {
515
- "value": "telefono",
516
- "text": "Teléfono"
517
- }
518
- ]
519
- },
520
- "visualDescription": "Grupo de tres checkboxes sin marcar con bordes rojos de 2px, labels en negro para cada opción de contacto. Pregunta en negro encima, mensaje de validación en rojo debajo de la pregunta. Fondo blanco, layout vertical con espaciado uniforme entre elementos.",
521
- "_generated": {
522
- "hash": "487a697392d34c23813bb0cd56d14c98",
523
- "version": "15.0.3",
524
- "timestamp": "2026-01-30T18:53:22.839Z"
525
- }
526
- },
527
- {
528
- "name": "con mensaje de error y pistas en los items",
529
- "description": "Por accesibilidad, los mensajes de error deben incluir la palabra \"error\", para que no recaiga tan sólo en el color el hecho de que es un mensaje de error.",
530
- "data": {
531
- "idPrefix": "error-and-hints",
532
- "name": "error-and-hints",
533
- "errorMessage": {
534
- "text": "Tienes que seleccionar al menos una opción. Soluciona el error."
535
- },
536
- "fieldset": {
537
- "legend": {
538
- "text": "¿Cómo prefieres que te contactemos?"
539
- }
540
- },
541
- "items": [
542
- {
543
- "value": "correo-electronico",
544
- "text": "Correo electrónico",
545
- "hint": {
546
- "text": "Asegúrate de que nuestros correos no lleguen a la bandeja de spam."
547
- }
548
- },
549
- {
550
- "value": "correo-postal",
551
- "text": "Correo postal",
552
- "hint": {
553
- "text": "Asegúrate de haber introducido correctamente tu dirección."
554
- }
555
- },
556
- {
557
- "value": "telefono",
558
- "text": "Teléfono",
559
- "hint": {
560
- "text": "Sólo enviamos mensajes durante el día."
561
- }
562
- }
563
- ]
564
- },
565
- "visualDescription": "Grupo de checkboxes con borde rojo de 2px y fondo blanco. El título principal aparece en negro, seguido de texto de error en rojo con enlace subrayado en rojo. Cada checkbox sin marcar tiene borde gris, con label en negro y texto descriptivo secundario en gris debajo de cada opción.",
566
- "_generated": {
567
- "hash": "12763a8865daa39641e8fa91793786d2",
568
- "version": "15.0.3",
569
- "timestamp": "2026-01-30T18:53:32.934Z"
570
- }
571
- },
572
- {
573
- "name": "con un texto de item muy largo",
574
- "description": "Por accesibilidad, los mensajes de error deben incluir la palabra \"error\", para que no recaiga tan sólo en el color el hecho de que es un mensaje de error.",
575
- "data": {
576
- "idPrefix": "long-option",
577
- "name": "long-option",
578
- "hint": {
579
- "text": "Nullam id dolor id nibh ultricies vehicula ut id elit."
580
- },
581
- "errorMessage": {
582
- "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Soluciona el error."
583
- },
584
- "fieldset": {
585
- "legend": {
586
- "text": "Maecenas faucibus mollis interdum?"
587
- }
588
- },
589
- "items": [
590
- {
591
- "value": "nullam",
592
- "text": "Nullam id dolor id nibh ultricies vehicula ut id elit. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Maecenas faucibus mollis interdum. Donec id elit non mi porta gravida at eget metus."
593
- },
594
- {
595
- "value": "aenean",
596
- "text": "Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Donec sed odio dui. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Cras mattis consectetur purus sit amet fermentum."
597
- },
598
- {
599
- "value": "fusce",
600
- "text": "Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Etiam porta sem malesuada magna mollis euismod. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. Sed posuere consectetur est at lobortis."
601
- }
602
- ]
603
- },
604
- "visualDescription": "Grupo de checkboxes con borde gris de 1px y fondo blanco. El título principal en negro va seguido de subtítulo en gris y párrafo con texto negro y fragmentos en rojo subrayado. Dos checkboxes sin marcar con borde gris, cada uno con label en negro seguido de múltiples líneas de texto descriptivo en gris que ocupan varios renglones.",
605
- "_generated": {
606
- "hash": "2aafe56aa2d1c450b218c2ab11afdf0b",
607
- "version": "15.0.3",
608
- "timestamp": "2026-01-30T18:53:32.934Z"
609
- }
610
- },
611
- {
612
- "name": "con items condicionales",
613
- "description": "El contenido de cada condicional es una agrupación, y como tal, se deben agrupar con una etiqueta <code>&lt;fieldset&gt;</code> o bien de una etiqueta <code>&lt;div&gt;</code> con <code>role=\"group\"</code> que tenga un <code>aria-label</code> o <code>aria-labelledby</code>.",
614
- "data": {
615
- "idPrefix": "with-conditional-items",
616
- "name": "with-conditional-items",
617
- "idPrefix": "how-contacted",
618
- "fieldset": {
619
- "legend": {
620
- "text": "¿Cómo quieres que te contactemos?"
621
- }
622
- },
623
- "items": [
624
- {
625
- "value": "correo-electronico",
626
- "text": "Correo electrónico",
627
- "conditional": {
628
- "html": mobileContent('1').val
629
- }
630
- },
631
- {
632
- "value": "telefono",
633
- "text": "Teléfono",
634
- "conditional": {
635
- "html": telefonoContent('2').val
636
- }
637
- },
638
- {
639
- "value": "mensaje-SMS",
640
- "text": "Mensaje SMS",
641
- "conditional": {
642
- "html": mobileContent('2').val
643
- }
644
- }
645
- ]
646
- },
647
- "visualDescription": "Grupo de checkboxes con borde gris de 1px y fondo blanco. Título pregunta en negro encima de tres opciones verticales. Cada checkbox sin marcar tiene borde gris con label en negro alineado a la derecha, sin texto descriptivo adicional.",
648
- "_generated": {
649
- "hash": "41879fc0c8d6643feb4ede218bf6374b",
650
- "version": "15.0.3",
651
- "timestamp": "2026-01-30T18:53:32.934Z"
652
- }
653
- },
654
- {
655
- "name": "con item condicional seleccionado",
656
- "description": "Usa el parámetro <code>'checked': true</code> para mostrar un item condicional seleccionado. El contenido de cada condicional es una agrupación, y como tal, se deben agrupar con una etiqueta <code>&lt;fieldset&gt;</code> o bien de una etiqueta <code>&lt;div&gt;</code> con <code>role=\"group\"</code> que tenga un <code>aria-label</code> o <code>aria-labelledby</code>.",
657
- "data": {
658
- "idPrefix": "with-conditional-items-checked",
659
- "name": "with-conditional-items-checked",
660
- "fieldset": {
661
- "legend": {
662
- "text": "¿Cómo quieres que te contactemos?"
663
- }
664
- },
665
- "items": [
666
- {
667
- "value": "correo-electronico",
668
- "text": "Correo electrónico",
669
- "conditional": {
670
- "html": mobileContent('3').val
671
- }
672
- },
673
- {
674
- "value": "telefono",
675
- "text": "Teléfono",
676
- "checked": true,
677
- "conditional": {
678
- "html": telefonoContent('3').val
679
- }
680
- },
681
- {
682
- "value": "mensaje-SMS",
683
- "text": "Mensaje SMS",
684
- "conditional": {
685
- "html": mobileContent('4').val
686
- }
687
- }
688
- ]
689
- },
690
- "visualDescription": "Grupo de checkboxes con título en texto negro. Checkbox \"Teléfono\" marcado con checkmark blanco en fondo azul, revelando label \"Número de teléfono fijo\" en negro y campo de texto rectangular con borde gris. Checkboxes \"Correo electrónico\" y \"Mensaje SMS\" desmarcados con borde gris oscuro y fondo blanco.",
691
- "_generated": {
692
- "hash": "1b3fc7a37bb15b87d05330e064bf6043",
693
- "version": "15.0.3",
694
- "timestamp": "2026-01-30T18:53:42.047Z"
695
- }
696
- },
697
- {
698
- "name": "con clases opcionales del form-group mostrando un error del grupo",
699
- "data": {
700
- "idPrefix": "optional-classes-showing-error",
701
- "name": "optional-classes-showing-error",
702
- "formGroup": {
703
- "classes": "c-form-group--error"
704
- },
705
- "fieldset": {
706
- "legend": {
707
- "text": "¿Cómo quieres que te contactemos?"
708
- }
709
- },
710
- "items": [
711
- {
712
- "value": "correo-electronico",
713
- "text": "Correo electrónico",
714
- "conditional": {
715
- "html": mobileContent('5').val
716
- }
717
- },
718
- {
719
- "value": "telefono",
720
- "text": "Teléfono",
721
- "checked": true,
722
- "conditional": {
723
- "html": mobileErrorContent('1').val
724
- }
725
- },
726
- {
727
- "value": "mensaje-SMS",
728
- "text": "Mensaje SMS",
729
- "conditional": {
730
- "html": mobileContent('6').val
731
- }
732
- }
733
- ]
734
- },
735
- "visualDescription": "Grupo de checkboxes con título en texto negro. Checkbox \"Teléfono\" marcado con checkmark blanco en fondo azul, revelando label \"Número de teléfono móvil\" en negro, texto de error en rojo, y campo de texto con borde rojo grueso. Checkboxes \"Correo electrónico\" y \"Mensaje SMS\" desmarcados con borde rojo.",
736
- "_generated": {
737
- "hash": "2736892fbda93848e5d2988f108818f1",
738
- "version": "15.0.3",
739
- "timestamp": "2026-01-30T18:53:42.047Z"
740
- }
741
- },
742
- {
743
- "name": "peque",
744
- "data": {
745
- "idPrefix": "small",
746
- "name": "peque",
747
- "classes": "c-checkboxes--sm",
748
- "items": [
749
- {
750
- "value": "correo-electronico",
751
- "text": "Correo electrónico",
752
- "classes": "-mt-base",
753
- "label": {
754
- "classes": "text-sm -mt-1"
755
- }
756
- },
757
- {
758
- "value": "correo-postal",
759
- "text": "Correo postal",
760
- "classes": "-mt-base",
761
- "label": {
762
- "classes": "text-sm -mt-1"
763
- }
764
- },
765
- {
766
- "value": "telefono",
767
- "text": "Teléfono",
768
- "classes": "-mt-base",
769
- "label": {
770
- "classes": "text-sm -mt-1"
771
- }
772
- }
773
- ]
774
- },
775
- "visualDescription": "Lista vertical de tres checkboxes sin marcar: cada checkbox tiene borde gris oscuro y fondo blanco. Labels en texto negro regular alineados a la derecha de cada checkbox. Espaciado compacto entre elementos.",
776
- "_generated": {
777
- "hash": "17662ee9b3cb12d4d68cdca15572f6c6",
778
- "version": "15.0.3",
779
- "timestamp": "2026-01-30T18:53:42.047Z"
780
- }
781
- },
782
- {
783
- "name": "indeterminado",
784
- "description": "Usando el parámetro <code>'isIndeterminate': true</code> podemos crear un item del checkbox que tenga 3 estados: marcado, desmarcado o indeterminado. El estado indeterminado expresa que hay sólo algún item seleccionado pero no todos. Útil para selecciones múltiples.",
785
- "data": {
786
- "idPrefix": "indeterminate",
787
- "name": "indeterminate",
788
- "classes": "c-checkboxes--sm",
789
- "items": [
790
- {
791
- "value": "indeterminate",
792
- "text": "1 elemento seleccionado",
793
- "isIndeterminate": true,
794
- "classes": "-mt-base",
795
- "label": {
796
- "classes": "text-sm -mt-1"
797
- }
798
- }
799
- ]
800
- },
801
- "visualDescription": "Checkbox de tamaño pequeño con borde gris oscuro de 1px y fondo blanco, conteniendo un guion horizontal gris en el centro indicando estado indeterminado. Label de texto negro normal alineado a la derecha del checkbox, leyendo \"1 elemento seleccionado\".",
802
- "_generated": {
803
- "hash": "655e826fbb1a0317ca2018c37878a04d",
804
- "version": "15.0.3",
805
- "timestamp": "2026-01-30T18:53:48.604Z"
806
- }
807
- },
808
- {
809
- "name": "indeterminado marcado",
810
- "description": "Usando los parámetros <code>'isIndeterminate': true</code> y <code>'indeterminateChecked': true</code> podemos marcar como estado indeterminado un item que sea de tipo indeterminado.",
811
- "data": {
812
- "idPrefix": "indeterminate-checked",
813
- "name": "indeterminate-checked",
814
- "classes": "c-checkboxes--sm",
815
- "items": [
816
- {
817
- "value": "indeterminate-checked-item",
818
- "text": "1 elemento seleccionado",
819
- "isIndeterminate": true,
820
- "indeterminateChecked": true,
821
- "checked": false,
822
- "classes": "-mt-base",
823
- "label": {
824
- "classes": "text-sm -mt-1"
825
- }
826
- }
827
- ]
828
- },
829
- "visualDescription": "Checkbox de tamaño pequeño con borde gris oscuro de 1px y fondo blanco, conteniendo un guion horizontal gris en el centro indicando estado indeterminado. Label de texto negro normal alineado a la derecha del checkbox, leyendo \"1 elemento seleccionado\".",
830
- "_generated": {
831
- "hash": "5828c23f8c6e24052da6398ec22f32f4",
832
- "version": "15.0.3",
833
- "timestamp": "2026-01-30T18:53:48.604Z"
834
- }
835
- }
1
+ {% from "components/checkboxes/_macro.checkboxes.njk" import componentCheckboxes %}
2
+ {% from "components/fieldset/_macro.fieldset.njk" import componentFieldset %}
3
+ {% from "components/input/_macro.input.njk" import componentInput %}
4
+
5
+ {% macro telefonoContent(id='id') %}
6
+ {% call componentFieldset({
7
+ "legend": {
8
+ "text": "¿Cuál es tu número de teléfono fijo?",
9
+ "classes": "mb-sm sr-only"
10
+ }
11
+ }) %}
12
+ <div class="c-form-group">
13
+ {{ componentInput({
14
+ "label": {
15
+ "text": "Número de teléfono fijo"
16
+ },
17
+ "id": "telefono-" + id,
18
+ "name": "telefono-name-" + id
19
+ }) }}
20
+ </div>
21
+ {% endcall %}
22
+ {% endmacro %}
23
+
24
+ {% macro mobileContent(id='id') %}
25
+ {% call componentFieldset({
26
+ "legend": {
27
+ "text": "¿Cuál es tu número de teléfono móvil?",
28
+ "classes": "mb-sm sr-only"
29
+ }
30
+ }) %}
31
+ <div class="c-form-group">
32
+ {{ componentInput({
33
+ "label": {
34
+ "text": "Número de teléfono móvil"
35
+ },
36
+ "id": "mobile-" + id,
37
+ "name": "mobile-name-" + id
38
+ }) }}
39
+ </div>
40
+ {% endcall %}
41
+ {% endmacro %}
42
+
43
+ {% macro mobileErrorContent(id='id') %}
44
+ {% call componentFieldset({
45
+ "legend": {
46
+ "text": "¿Cuál es tu número de teléfono móvil?",
47
+ "classes": "mb-sm sr-only"
48
+ }
49
+ }) %}
50
+ <div class="c-form-group">
51
+ {{ componentInput({
52
+ "label": {
53
+ "text": "Número de teléfono móvil"
54
+ },
55
+ "id": "input-with-error-message-" + id,
56
+ "name": "test-name-" + id,
57
+ "errorMessage": {
58
+ "text": "Este campo no puede estar vacío"
59
+ }
60
+ }) }}
61
+ </div>
62
+ {% endcall %}
63
+ {% endmacro %}
64
+
65
+ {% macro grandchildContent(id='id') %}
66
+ {{ componentCheckboxes({
67
+ "idPrefix": "grandchild-" + id,
68
+ "name": "grandchild-" + id,
69
+ "items": [
70
+ {
71
+ "name": "oficina-principal",
72
+ "id": "oficina-principal-id",
73
+ "value": "oficina-principal",
74
+ "text": "Oficina principal"
75
+ },
76
+ {
77
+ "name": "oficina-secundaria",
78
+ "id": "oficina-secundaria-id",
79
+ "value": "oficina-secundaria",
80
+ "text": "Oficina secundaria"
81
+ }
82
+ ]
83
+ }) }}
84
+ {% endmacro %}
85
+
86
+ {% macro nestedContent(id='id') %}
87
+ {{ componentCheckboxes({
88
+ "idPrefix": "with-conditional-items-checked-nested-" + id,
89
+ "name": "with-conditional-items-checked-nested-" + id,
90
+ "items": [
91
+ {
92
+ "value": "oficinas-de-registro",
93
+ "text": "Oficinas de registro",
94
+ "checked": true,
95
+ "conditional": {
96
+ "html": grandchildContent(id).val
97
+ }
98
+ }
99
+ ]
100
+ }) }}
101
+ {% endmacro %}
102
+
103
+
104
+
105
+ {% set exampleComponent = "checkboxes" %}
106
+ {% set examples = [{
107
+ "name": "por defecto",
108
+ "data": {
109
+ "idPrefix": "default",
110
+ "name": "default",
111
+ "fieldset": {
112
+ "legend": {
113
+ "text": "¿Cómo prefieres que te contactemos?"
114
+ }
115
+ },
116
+ "hint": {
117
+ "text": "Si lo deseas puedes seleccionar varios elementos."
118
+ },
119
+ "items": [
120
+ {
121
+ "value": "correo-electronico",
122
+ "text": "Correo electrónico"
123
+ },
124
+ {
125
+ "value": "correo-postal",
126
+ "text": "Correo postal"
127
+ },
128
+ {
129
+ "value": "telefono",
130
+ "text": "Teléfono"
131
+ }
132
+ ]
133
+ },
134
+ "visualDescription": "Grupo de checkboxes sin marcar con labels en negro. Encabezado en negrita negro haciendo pregunta sobre preferencias de contacto.",
135
+ "_generated": {
136
+ "hash": "b35e6609f05ea9ee328a42e0da095a61",
137
+ "version": "15.0.3",
138
+ "timestamp": "2026-01-30T18:52:53.918Z"
139
+ }
140
+ },
141
+ {
142
+ "name": "Con id y name",
143
+ "data": {
144
+ "idPrefix": "with-id-and-name",
145
+ "name": "with-id-and-name",
146
+ "fieldset": {
147
+ "legend": {
148
+ "text": "¿Cómo prefieres que te contactemos?"
149
+ }
150
+ },
151
+ "hint": {
152
+ "text": "Si lo deseas puedes seleccionar varios elementos."
153
+ },
154
+ "items": [
155
+ {
156
+ "name": "correo-electronico",
157
+ "id": "correo-electronico-id",
158
+ "value": "correo-electronico",
159
+ "text": "Correo electrónico"
160
+ },
161
+ {
162
+ "name": "correo-postal",
163
+ "id": "correo-postal-id",
164
+ "value": "correo-postal",
165
+ "text": "Correo postal"
166
+ }
167
+ ]
168
+ },
169
+ "visualDescription": "Grupo de checkboxes sin marcar con labels en negro. Encabezado en negrita negro haciendo pregunta sobre preferencias de contacto. Cada checkbox tiene identificador único y nombre propio.",
170
+ "_generated": {
171
+ "hash": "e0540ce6682a0c05028cf634d18893d4",
172
+ "version": "15.0.3",
173
+ "timestamp": "2026-01-30T18:52:53.918Z"
174
+ }
175
+ },
176
+ {
177
+ "name": "con pistas en los items",
178
+ "data": {
179
+ "idPrefix": "hints-on-items",
180
+ "fieldset": {
181
+ "legend": {
182
+ "text": "¿Cómo prefieres que te contactemos?",
183
+ "isPageHeading": true
184
+ }
185
+ },
186
+ "items": [
187
+ {
188
+ "name": "correo-electronico",
189
+ "id": "correo-electronico-a",
190
+ "value": "desy-correo-electronico",
191
+ "text": "Correo electrónico",
192
+ "hint": {
193
+ "text": "Asegúrate de que el correo no llega a la bandeja de spam."
194
+ }
195
+ },
196
+ {
197
+ "name": "correo-postal",
198
+ "id": "desy-correo-postal-a",
199
+ "value": "desy-correo-postal-a",
200
+ "text": "Correo postal",
201
+ "hint": {
202
+ "text": "Asegúrate de haber introducido la dirección postal correctamente."
203
+ }
204
+ }
205
+ ]
206
+ },
207
+ "visualDescription": "Grupo de checkboxes sin marcar con labels en negro y texto de ayuda gris debajo de cada opción. Encabezado en negrita negro pregunta sobre preferencias de contacto. Texto secundario en gris proporciona contexto adicional para cada checkbox.",
208
+ "_generated": {
209
+ "hash": "004cf6deb01dee8dd239e4dae0d0e4c2",
210
+ "version": "15.0.3",
211
+ "timestamp": "2026-01-30T18:52:53.918Z"
212
+ }
213
+ },
214
+ {
215
+ "name": "Con líneas divisorias",
216
+ "data": {
217
+ "idPrefix": "has-dividers",
218
+ "fieldset": {
219
+ "legend": {
220
+ "text": "¿Cómo prefieres que te contactemos?"
221
+ }
222
+ },
223
+ "hint": {
224
+ "text": "Si lo deseas puedes seleccionar varios elementos."
225
+ },
226
+ "hasDividers": true,
227
+ "items": [
228
+ {
229
+ "name": "correo-electronico",
230
+ "id": "correo-electronico-b",
231
+ "value": "desy-correo-electronico",
232
+ "text": "Correo electrónico"
233
+ },
234
+ {
235
+ "name": "correo-postal",
236
+ "id": "desy-correo-postal-b",
237
+ "value": "desy-correo-postal-b",
238
+ "text": "Correo postal",
239
+ "hint": {
240
+ "text": "Asegúrate de haber introducido la dirección postal correctamente."
241
+ }
242
+ },
243
+ {
244
+ "name": "telefono",
245
+ "id": "telefono-b",
246
+ "value": "telefono",
247
+ "text": "Teléfono",
248
+ "checked": true,
249
+ "conditional": {
250
+ "html": telefonoContent('1').val
251
+ }
252
+ },
253
+ {
254
+ "name": "correo-postal",
255
+ "id": "desy-correo-postal-c",
256
+ "value": "desy-correo-postal-c",
257
+ "text": "Correo postal",
258
+ "hint": {
259
+ "text": "Asegúrate de haber introducido la dirección postal correctamente."
260
+ }
261
+ }
262
+ ]
263
+ },
264
+ "visualDescription": "Grupo de checkboxes con bordes grises claros separando cada opción. Encabezado en negro con texto de ayuda en rojo debajo. Checkboxes con cuadrados blancos de borde gris, labels en negro, texto de ayuda gris debajo de cada opción. Cuando se selecciona teléfono, aparece un campo de texto con label gris y borde gris.",
265
+ "_generated": {
266
+ "hash": "afe43a55114c0c623e38954b0e90dc63",
267
+ "version": "15.0.3",
268
+ "timestamp": "2026-01-30T18:53:03.466Z"
269
+ }
270
+ },
271
+ {
272
+ "name": "Con clases de CSS aplicadas",
273
+ "description": "Los parámetros <code>classes</code> nos permiten aplicar clases de Tailwind CSS a nuestro componente.",
274
+ "data": {
275
+ "idPrefix": "classes",
276
+ "fieldset": {
277
+ "legend": {
278
+ "text": "¿Cómo prefieres que te contactemos?"
279
+ }
280
+ },
281
+ "items": [
282
+ {
283
+ "name": "correo-electronico",
284
+ "id": "correo-electronico-c",
285
+ "value": "desy-correo-electronico",
286
+ "text": "Correo electrónico",
287
+ "hint": {
288
+ "text": "Asegúrate de que el correo no llega a la bandeja de spam."
289
+ },
290
+ "classes": "bg-primary-light"
291
+ },
292
+ {
293
+ "name": "correo-postal",
294
+ "id": "desy-correo-postal-d",
295
+ "value": "desy-correo-postal-d",
296
+ "text": "Correo postal",
297
+ "hint": {
298
+ "text": "Asegúrate de haber introducido la dirección postal correctamente."
299
+ },
300
+ "classes": "bg-neutral-lighter"
301
+ }
302
+ ]
303
+ },
304
+ "visualDescription": "Grupo de checkboxes con fondo azul claro en la primera opción. Título en negro arriba del grupo. Dos checkboxes con cuadrados blancos de borde gris, labels en negro, y texto de ayuda gris debajo de cada label. Sin bordes divisorios entre opciones.",
305
+ "_generated": {
306
+ "hash": "b2fb4e8f402a12ecbca2df64fa9869b1",
307
+ "version": "15.0.3",
308
+ "timestamp": "2026-01-30T18:53:03.466Z"
309
+ }
310
+ },
311
+ {
312
+ "name": "con item deshabilitado",
313
+ "data": {
314
+ "idPrefix": "disabled-item",
315
+ "name": "colours",
316
+ "items": [
317
+ {
318
+ "value": "correo-electronico",
319
+ "text": "Correo electrónico"
320
+ },
321
+ {
322
+ "value": "correo-postal",
323
+ "text": "Correo postal",
324
+ "disabled": true,
325
+ "checked": true
326
+ },
327
+ {
328
+ "value": "telefono",
329
+ "text": "Teléfono",
330
+ "disabled": true
331
+ }
332
+ ]
333
+ },
334
+ "visualDescription": "Grupo de checkboxes sin bordes divisorios. Primer checkbox sin marcar con cuadrado blanco de borde gris y label negro. Segundo checkbox marcado con check verde y label negro. Tercer checkbox deshabilitado con cuadrado gris, label gris atenuado, sin posibilidad de interacción.",
335
+ "_generated": {
336
+ "hash": "d08d81692b28f58c743b0054b2605af8",
337
+ "version": "15.0.3",
338
+ "timestamp": "2026-01-30T18:53:03.466Z"
339
+ }
340
+ },
341
+ {
342
+ "name": "con un legend del tamaño de un encabezado h2",
343
+ "data": {
344
+ "idPrefix": "medium-legend",
345
+ "name": "medium-legend",
346
+ "fieldset": {
347
+ "legend": {
348
+ "text": "¿Cómo prefieres que te contactemos?",
349
+ "classes": "c-h2"
350
+ }
351
+ },
352
+ "hint": {
353
+ "text": "Si lo deseas puedes seleccionar varios elementos."
354
+ },
355
+ "errorMessage": {
356
+ "text": "Tienes que seleccionar al menos una opción. Soluciona el error."
357
+ },
358
+ "items": [
359
+ {
360
+ "value": "correo-electronico",
361
+ "text": "Correo electrónico"
362
+ },
363
+ {
364
+ "value": "correp-postal",
365
+ "text": "Correo postal"
366
+ },
367
+ {
368
+ "value": "telefono",
369
+ "text": "Teléfono"
370
+ }
371
+ ]
372
+ },
373
+ "visualDescription": "Fieldset con borde gris claro de 1px, encabezado grande en texto negro preguntando sobre preferencias de contacto. Tres checkboxes verticales sin marcar (Correo electrónico, Correo postal, Teléfono) con labels en texto negro. Mensaje de error en rojo arriba indicando que se debe seleccionar al menos una opción.",
374
+ "_generated": {
375
+ "hash": "b08d35753a0856f5116cc7d9db4b21a2",
376
+ "version": "15.0.3",
377
+ "timestamp": "2026-01-30T18:53:13.889Z"
378
+ }
379
+ },
380
+ {
381
+ "name": "sin fieldset",
382
+ "description": "Usa este ejemplo si vas a escribir tú mismo un fieldset, rodeándolo. Recuerda que el uso de fieldset es necesario por accesibilidad.",
383
+ "data": {
384
+ "idPrefix": "without-fieldset",
385
+ "name": "without-fieldset",
386
+ "items": [
387
+ {
388
+ "value": "correo-electronico",
389
+ "text": "Correo electrónico"
390
+ },
391
+ {
392
+ "value": "correp-postal",
393
+ "text": "Correo postal"
394
+ },
395
+ {
396
+ "value": "telefono",
397
+ "text": "Teléfono"
398
+ }
399
+ ]
400
+ },
401
+ "visualDescription": "Grupo de checkboxes verticales sin borde contenedor, con título pequeño en gris oscuro arriba. Checkboxes sin marcar (Correo electrónico, Correo postal, Teléfono) con labels en texto negro, presentados en lista vertical sobre fondo blanco sin bordes delimitadores.",
402
+ "_generated": {
403
+ "hash": "0032e381b49bc66d24b36aa0a9d82439",
404
+ "version": "15.0.3",
405
+ "timestamp": "2026-01-30T18:53:13.889Z"
406
+ }
407
+ },
408
+ {
409
+ "name": "con una sóla opción usando 'aria-describedby' en el input",
410
+ "description": "Por accesibilidad, los mensajes de error deben incluir la palabra \"error\", para que no recaiga tan sólo en el color el hecho de que es un mensaje de error.",
411
+ "data": {
412
+ "idPrefix": "describedby",
413
+ "name": "describedby",
414
+ "errorMessage": {
415
+ "text": "Por favor, debes aceptar los términos y condiciones. Soluciona el error."
416
+ },
417
+ "items": [
418
+ {
419
+ "value": "acepto",
420
+ "html": "Acepto los <a href='#' target='_blank' class='c-link' title='Se abre en ventana nueva del navegador'>términos y condiciones</a>"
421
+ }
422
+ ]
423
+ },
424
+ "visualDescription": "Fieldset con borde gris claro de 1px, título descriptivo en texto negro sobre el uso de aria-describedby. Checkbox individual sin marcar con label. Mensaje de error en rojo arriba solicitando aceptar los términos.",
425
+ "_generated": {
426
+ "hash": "e10048a2729a00674e0e1e8ea1cf6d70",
427
+ "version": "15.0.3",
428
+ "timestamp": "2026-01-30T18:53:13.889Z"
429
+ }
430
+ },
431
+ {
432
+ "name": "con una sóla opción (y pista) usando 'aria-describedby' en el input",
433
+ "description": "Por accesibilidad, los mensajes de error deben incluir la palabra \"error\", para que no recaiga tan sólo en el color el hecho de que es un mensaje de error.",
434
+ "data": {
435
+ "name": "t-and-c-with-hint",
436
+ "errorMessage": {
437
+ "text": "Por favor, debes aceptar los términos y condiciones. Soluciona el error."
438
+ },
439
+ "items": [
440
+ {
441
+ "value": "acepto",
442
+ "html": "Acepto los <a href='#' target='_blank' class='c-link' title='Se abre en ventana nueva del navegador'>términos y condiciones</a>",
443
+ "hint": {
444
+ "text": "Puedes visualizarlos en ventana nueva del navegador"
445
+ }
446
+ }
447
+ ]
448
+ },
449
+ "visualDescription": "Checkbox sin marcar con borde rojo de 2px, acompañado de label en negro con texto secundario gris debajo. Mensaje de error en rojo encima del checkbox indica validación pendiente.",
450
+ "_generated": {
451
+ "hash": "f0fab73c491454b5e79f07634d9bc6f2",
452
+ "version": "15.0.3",
453
+ "timestamp": "2026-01-30T18:53:22.839Z"
454
+ }
455
+ },
456
+ {
457
+ "name": "con fieldset y mensaje de error",
458
+ "description": "Por accesibilidad, los mensajes de error deben incluir la palabra \"error\", para que no recaiga tan sólo en el color el hecho de que es un mensaje de error.",
459
+ "data": {
460
+ "name": "colours",
461
+ "errorMessage": {
462
+ "text": "Tienes que seleccionar al menos una opción. Soluciona el error."
463
+ },
464
+ "fieldset": {
465
+ "legend": {
466
+ "text": "¿Cómo prefieres que te contactemos?"
467
+ }
468
+ },
469
+ "items": [
470
+ {
471
+ "value": "correo-electronico",
472
+ "text": "Correo electrónico"
473
+ },
474
+ {
475
+ "value": "correo-postal",
476
+ "text": "Correo postal"
477
+ },
478
+ {
479
+ "value": "telefono",
480
+ "text": "Teléfono"
481
+ }
482
+ ]
483
+ },
484
+ "visualDescription": "Grupo de checkboxes sin marcar con bordes rojos de 2px, labels en negro. Título de pregunta en negro arriba, mensaje de error en rojo debajo del título.",
485
+ "_generated": {
486
+ "hash": "90be10d247ee63f67a33ffea19d03878",
487
+ "version": "15.0.3",
488
+ "timestamp": "2026-01-30T18:53:22.839Z"
489
+ }
490
+ },
491
+ {
492
+ "name": "con mensaje de error",
493
+ "description": "Por accesibilidad, los mensajes de error deben incluir la palabra \"error\", para que no recaiga tan sólo en el color el hecho de que es un mensaje de error.",
494
+ "data": {
495
+ "idPrefix": "error-message",
496
+ "name": "error-message",
497
+ "errorMessage": {
498
+ "text": "Tienes que seleccionar al menos una opción. Soluciona el error."
499
+ },
500
+ "fieldset": {
501
+ "legend": {
502
+ "text": "¿Cómo prefieres que te contactemos?"
503
+ }
504
+ },
505
+ "items": [
506
+ {
507
+ "value": "correo-electronico",
508
+ "text": "Correo electrónico"
509
+ },
510
+ {
511
+ "value": "correp-postal",
512
+ "text": "Correo postal"
513
+ },
514
+ {
515
+ "value": "telefono",
516
+ "text": "Teléfono"
517
+ }
518
+ ]
519
+ },
520
+ "visualDescription": "Grupo de checkboxes sin marcar con bordes rojos de 2px, labels en negro para cada opción de contacto. Pregunta en negro encima, mensaje de validación en rojo debajo de la pregunta. Fondo blanco, layout vertical con espaciado uniforme entre elementos.",
521
+ "_generated": {
522
+ "hash": "487a697392d34c23813bb0cd56d14c98",
523
+ "version": "15.0.3",
524
+ "timestamp": "2026-01-30T18:53:22.839Z"
525
+ }
526
+ },
527
+ {
528
+ "name": "con mensaje de error y pistas en los items",
529
+ "description": "Por accesibilidad, los mensajes de error deben incluir la palabra \"error\", para que no recaiga tan sólo en el color el hecho de que es un mensaje de error.",
530
+ "data": {
531
+ "idPrefix": "error-and-hints",
532
+ "name": "error-and-hints",
533
+ "errorMessage": {
534
+ "text": "Tienes que seleccionar al menos una opción. Soluciona el error."
535
+ },
536
+ "fieldset": {
537
+ "legend": {
538
+ "text": "¿Cómo prefieres que te contactemos?"
539
+ }
540
+ },
541
+ "items": [
542
+ {
543
+ "value": "correo-electronico",
544
+ "text": "Correo electrónico",
545
+ "hint": {
546
+ "text": "Asegúrate de que nuestros correos no lleguen a la bandeja de spam."
547
+ }
548
+ },
549
+ {
550
+ "value": "correo-postal",
551
+ "text": "Correo postal",
552
+ "hint": {
553
+ "text": "Asegúrate de haber introducido correctamente tu dirección."
554
+ }
555
+ },
556
+ {
557
+ "value": "telefono",
558
+ "text": "Teléfono",
559
+ "hint": {
560
+ "text": "Sólo enviamos mensajes durante el día."
561
+ }
562
+ }
563
+ ]
564
+ },
565
+ "visualDescription": "Grupo de checkboxes con borde rojo de 2px y fondo blanco. El título principal aparece en negro, seguido de texto de error en rojo con enlace subrayado en rojo. Cada checkbox sin marcar tiene borde gris, con label en negro y texto descriptivo secundario en gris debajo de cada opción.",
566
+ "_generated": {
567
+ "hash": "12763a8865daa39641e8fa91793786d2",
568
+ "version": "15.0.3",
569
+ "timestamp": "2026-01-30T18:53:32.934Z"
570
+ }
571
+ },
572
+ {
573
+ "name": "con un texto de item muy largo",
574
+ "description": "Por accesibilidad, los mensajes de error deben incluir la palabra \"error\", para que no recaiga tan sólo en el color el hecho de que es un mensaje de error.",
575
+ "data": {
576
+ "idPrefix": "long-option",
577
+ "name": "long-option",
578
+ "hint": {
579
+ "text": "Nullam id dolor id nibh ultricies vehicula ut id elit."
580
+ },
581
+ "errorMessage": {
582
+ "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Soluciona el error."
583
+ },
584
+ "fieldset": {
585
+ "legend": {
586
+ "text": "Maecenas faucibus mollis interdum?"
587
+ }
588
+ },
589
+ "items": [
590
+ {
591
+ "value": "nullam",
592
+ "text": "Nullam id dolor id nibh ultricies vehicula ut id elit. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Maecenas faucibus mollis interdum. Donec id elit non mi porta gravida at eget metus."
593
+ },
594
+ {
595
+ "value": "aenean",
596
+ "text": "Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Donec sed odio dui. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Cras mattis consectetur purus sit amet fermentum."
597
+ },
598
+ {
599
+ "value": "fusce",
600
+ "text": "Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Etiam porta sem malesuada magna mollis euismod. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. Sed posuere consectetur est at lobortis."
601
+ }
602
+ ]
603
+ },
604
+ "visualDescription": "Grupo de checkboxes con borde gris de 1px y fondo blanco. El título principal en negro va seguido de subtítulo en gris y párrafo con texto negro y fragmentos en rojo subrayado. Dos checkboxes sin marcar con borde gris, cada uno con label en negro seguido de múltiples líneas de texto descriptivo en gris que ocupan varios renglones.",
605
+ "_generated": {
606
+ "hash": "2aafe56aa2d1c450b218c2ab11afdf0b",
607
+ "version": "15.0.3",
608
+ "timestamp": "2026-01-30T18:53:32.934Z"
609
+ }
610
+ },
611
+ {
612
+ "name": "con items condicionales",
613
+ "description": "El contenido de cada condicional es una agrupación, y como tal, se deben agrupar con una etiqueta <code>&lt;fieldset&gt;</code> o bien de una etiqueta <code>&lt;div&gt;</code> con <code>role=\"group\"</code> que tenga un <code>aria-label</code> o <code>aria-labelledby</code>.",
614
+ "data": {
615
+ "idPrefix": "with-conditional-items",
616
+ "name": "with-conditional-items",
617
+ "idPrefix": "how-contacted",
618
+ "fieldset": {
619
+ "legend": {
620
+ "text": "¿Cómo quieres que te contactemos?"
621
+ }
622
+ },
623
+ "items": [
624
+ {
625
+ "value": "correo-electronico",
626
+ "text": "Correo electrónico",
627
+ "conditional": {
628
+ "html": mobileContent('1').val
629
+ }
630
+ },
631
+ {
632
+ "value": "telefono",
633
+ "text": "Teléfono",
634
+ "conditional": {
635
+ "html": telefonoContent('2').val
636
+ }
637
+ },
638
+ {
639
+ "value": "mensaje-SMS",
640
+ "text": "Mensaje SMS",
641
+ "conditional": {
642
+ "html": mobileContent('2').val
643
+ }
644
+ }
645
+ ]
646
+ },
647
+ "visualDescription": "Grupo de checkboxes con borde gris de 1px y fondo blanco. Título pregunta en negro encima de tres opciones verticales. Cada checkbox sin marcar tiene borde gris con label en negro alineado a la derecha, sin texto descriptivo adicional.",
648
+ "_generated": {
649
+ "hash": "41879fc0c8d6643feb4ede218bf6374b",
650
+ "version": "15.0.3",
651
+ "timestamp": "2026-01-30T18:53:32.934Z"
652
+ }
653
+ },
654
+ {
655
+ "name": "con item condicional seleccionado",
656
+ "description": "Usa el parámetro <code>'checked': true</code> para mostrar un item condicional seleccionado. El contenido de cada condicional es una agrupación, y como tal, se deben agrupar con una etiqueta <code>&lt;fieldset&gt;</code> o bien de una etiqueta <code>&lt;div&gt;</code> con <code>role=\"group\"</code> que tenga un <code>aria-label</code> o <code>aria-labelledby</code>.",
657
+ "data": {
658
+ "idPrefix": "with-conditional-items-checked",
659
+ "name": "with-conditional-items-checked",
660
+ "fieldset": {
661
+ "legend": {
662
+ "text": "¿Cómo quieres que te contactemos?"
663
+ }
664
+ },
665
+ "items": [
666
+ {
667
+ "value": "correo-electronico",
668
+ "text": "Correo electrónico",
669
+ "conditional": {
670
+ "html": mobileContent('3').val
671
+ }
672
+ },
673
+ {
674
+ "value": "telefono",
675
+ "text": "Teléfono",
676
+ "checked": true,
677
+ "conditional": {
678
+ "html": telefonoContent('3').val
679
+ }
680
+ },
681
+ {
682
+ "value": "mensaje-SMS",
683
+ "text": "Mensaje SMS",
684
+ "conditional": {
685
+ "html": mobileContent('4').val
686
+ }
687
+ }
688
+ ]
689
+ },
690
+ "visualDescription": "Grupo de checkboxes con título en texto negro. Checkbox marcado con checkmark blanco en fondo azul, revelando label en negro y campo de texto rectangular con borde gris. Checkboxes desmarcados con borde gris oscuro y fondo blanco.",
691
+ "_generated": {
692
+ "hash": "1b3fc7a37bb15b87d05330e064bf6043",
693
+ "version": "15.0.3",
694
+ "timestamp": "2026-01-30T18:53:42.047Z"
695
+ }
696
+ },
697
+ {
698
+ "name": "con clases opcionales del form-group mostrando un error del grupo",
699
+ "data": {
700
+ "idPrefix": "optional-classes-showing-error",
701
+ "name": "optional-classes-showing-error",
702
+ "formGroup": {
703
+ "classes": "c-form-group--error"
704
+ },
705
+ "fieldset": {
706
+ "legend": {
707
+ "text": "¿Cómo quieres que te contactemos?"
708
+ }
709
+ },
710
+ "items": [
711
+ {
712
+ "value": "correo-electronico",
713
+ "text": "Correo electrónico",
714
+ "conditional": {
715
+ "html": mobileContent('5').val
716
+ }
717
+ },
718
+ {
719
+ "value": "telefono",
720
+ "text": "Teléfono",
721
+ "checked": true,
722
+ "conditional": {
723
+ "html": mobileErrorContent('1').val
724
+ }
725
+ },
726
+ {
727
+ "value": "mensaje-SMS",
728
+ "text": "Mensaje SMS",
729
+ "conditional": {
730
+ "html": mobileContent('6').val
731
+ }
732
+ }
733
+ ]
734
+ },
735
+ "visualDescription": "Grupo de checkboxes con título en texto negro. Checkbox marcado con checkmark blanco en fondo azul, revelando label en negro, texto de error en rojo, y campo de texto con borde rojo grueso. Checkboxes desmarcados con borde rojo.",
736
+ "_generated": {
737
+ "hash": "2736892fbda93848e5d2988f108818f1",
738
+ "version": "15.0.3",
739
+ "timestamp": "2026-01-30T18:53:42.047Z"
740
+ }
741
+ },
742
+ {
743
+ "name": "peque",
744
+ "data": {
745
+ "idPrefix": "small",
746
+ "name": "peque",
747
+ "classes": "c-checkboxes--sm",
748
+ "items": [
749
+ {
750
+ "value": "correo-electronico",
751
+ "text": "Correo electrónico",
752
+ "classes": "-mt-base",
753
+ "label": {
754
+ "classes": "text-sm -mt-1"
755
+ }
756
+ },
757
+ {
758
+ "value": "correo-postal",
759
+ "text": "Correo postal",
760
+ "classes": "-mt-base",
761
+ "label": {
762
+ "classes": "text-sm -mt-1"
763
+ }
764
+ },
765
+ {
766
+ "value": "telefono",
767
+ "text": "Teléfono",
768
+ "classes": "-mt-base",
769
+ "label": {
770
+ "classes": "text-sm -mt-1"
771
+ }
772
+ }
773
+ ]
774
+ },
775
+ "visualDescription": "Lista vertical de tres checkboxes sin marcar: cada checkbox tiene borde gris oscuro y fondo blanco. Labels en texto negro regular alineados a la derecha de cada checkbox. Espaciado compacto entre elementos.",
776
+ "_generated": {
777
+ "hash": "17662ee9b3cb12d4d68cdca15572f6c6",
778
+ "version": "15.0.3",
779
+ "timestamp": "2026-01-30T18:53:42.047Z"
780
+ }
781
+ },
782
+ {
783
+ "name": "indeterminado",
784
+ "description": "Usando el parámetro <code>'isIndeterminate': true</code> podemos crear un item del checkbox que tenga 3 estados: marcado, desmarcado o indeterminado. El estado indeterminado expresa que hay sólo algún item seleccionado pero no todos. Útil para selecciones múltiples.",
785
+ "data": {
786
+ "idPrefix": "indeterminate",
787
+ "name": "indeterminate",
788
+ "classes": "c-checkboxes--sm",
789
+ "items": [
790
+ {
791
+ "value": "indeterminate",
792
+ "text": "1 elemento seleccionado",
793
+ "isIndeterminate": true,
794
+ "classes": "-mt-base",
795
+ "label": {
796
+ "classes": "text-sm -mt-1"
797
+ }
798
+ }
799
+ ]
800
+ },
801
+ "visualDescription": "Checkbox de tamaño pequeño con borde gris oscuro de 1px y fondo blanco, conteniendo un guion horizontal gris en el centro indicando estado indeterminado. Label de texto negro normal alineado a la derecha del checkbox.",
802
+ "_generated": {
803
+ "hash": "655e826fbb1a0317ca2018c37878a04d",
804
+ "version": "15.0.3",
805
+ "timestamp": "2026-01-30T18:53:48.604Z"
806
+ }
807
+ },
808
+ {
809
+ "name": "indeterminado marcado",
810
+ "description": "Usando los parámetros <code>'isIndeterminate': true</code> y <code>'indeterminateChecked': true</code> podemos marcar como estado indeterminado un item que sea de tipo indeterminado.",
811
+ "data": {
812
+ "idPrefix": "indeterminate-checked",
813
+ "name": "indeterminate-checked",
814
+ "classes": "c-checkboxes--sm",
815
+ "items": [
816
+ {
817
+ "value": "indeterminate-checked-item",
818
+ "text": "1 elemento seleccionado",
819
+ "isIndeterminate": true,
820
+ "indeterminateChecked": true,
821
+ "checked": false,
822
+ "classes": "-mt-base",
823
+ "label": {
824
+ "classes": "text-sm -mt-1"
825
+ }
826
+ }
827
+ ]
828
+ },
829
+ "visualDescription": "Checkbox de tamaño pequeño con borde gris oscuro de 1px y fondo blanco, conteniendo un guion horizontal gris en el centro indicando estado indeterminado. Label de texto negro normal alineado a la derecha del checkbox.",
830
+ "_generated": {
831
+ "hash": "5828c23f8c6e24052da6398ec22f32f4",
832
+ "version": "15.0.3",
833
+ "timestamp": "2026-01-30T18:53:48.604Z"
834
+ }
835
+ }
836
836
  ] %}