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,698 +1,698 @@
1
- {% from "components/fieldset/_macro.fieldset.njk" import componentFieldset %}
2
- {% from "components/input/_macro.input.njk" import componentInput %}
3
- {% from "components/radios/_macro.radios.njk" import componentRadios %}
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
- {{ componentRadios({
67
- "idPrefix": "grandchild-" + id,
68
- "name": "grandchild-" + id,
69
- "items": [
70
- {
71
- "name": "oficina-principal-" + id,
72
- "id": "oficina-principal-id-" + id,
73
- "value": "oficina-principal-" + id,
74
- "checked": true,
75
- "html": "Oficina principal"
76
- },
77
- {
78
- "name": "oficina-secundaria-" + id,
79
- "id": "oficina-secundaria-id-" + id,
80
- "value": "oficina-secundaria-" + id,
81
- "html": "Oficina secundaria"
82
- }
83
- ]
84
- }) }}
85
- {% endmacro %}
86
-
87
- {% macro nestedContent(id='id') %}
88
- {{ componentRadios({
89
- "idPrefix": "with-conditional-items-checked-nested-" + id,
90
- "name": "with-conditional-items-checked-nested-" + id,
91
- "items": [
92
- {
93
- "value": "oficinas-de-registro",
94
- "text": "Oficinas de registro",
95
- "checked": true,
96
- "conditional": {
97
- "html": grandchildContent('oficinas-de-registro-' + id).val
98
- }
99
- },
100
- {
101
- "value": "oficinas-locales",
102
- "text": "Oficinas locales",
103
- "conditional": {
104
- "html": grandchildContent('oficinas-locales-' + id).val
105
- }
106
- }
107
- ]
108
- }) }}
109
- {% endmacro %}
110
-
111
- {% set exampleComponent = "radios" %}
112
- {% set examples = [
113
- {
114
- "name": "por defecto",
115
- "data": {
116
- "idPrefix": "default",
117
- "name": "por defecto",
118
- "fieldset": {
119
- "legend": {
120
- "text": "¿Quieres que te contactemos por correo electrónico?"
121
- }
122
- },
123
- "hint": {
124
- "text": "Sólo puedes seleccionar un elemento."
125
- },
126
- "items": [
127
- {
128
- "value": "si",
129
- "text": "Si"
130
- },
131
- {
132
- "value": "no",
133
- "text": "No",
134
- "checked": true
135
- }
136
- ]
137
- },
138
- "visualDescription": "Grupo de radio buttons con pregunta en negro bold, subtexto en gris debajo. Dos opciones apiladas verticalmente: \"Sí\" con círculo vacío blanco con borde gris, \"No\" con círculo relleno azul oscuro indicando selección. Fondo blanco con borde gris claro rodeando todo el componente.",
139
- "_generated": {
140
- "hash": "c0661da8ddbe3c662dd90dd77321057d",
141
- "version": "15.0.3",
142
- "timestamp": "2026-01-30T19:11:59.793Z"
143
- }
144
- },
145
- {
146
- "name": "En línea",
147
- "data": {
148
- "idPrefix": "inline",
149
- "classes": "flex",
150
- "name": "inline",
151
- "fieldset": {
152
- "legend": {
153
- "text": "¿Quieres que te contactemos por correo electrónico?"
154
- }
155
- },
156
- "hint": {
157
- "text": "Sólo puedes seleccionar un elemento."
158
- },
159
- "items": [
160
- {
161
- "value": "si",
162
- "text": "Si",
163
- "classes": "mr-sm"
164
- },
165
- {
166
- "value": "no",
167
- "text": "No",
168
- "classes": "mr-sm",
169
- "checked": true
170
- }
171
- ]
172
- },
173
- "visualDescription": "Grupo de radio buttons con pregunta en negro bold, subtexto en gris debajo. Dos opciones dispuestas horizontalmente: \"Sí\" con círculo vacío blanco con borde gris, \"No\" con círculo relleno azul con marca de selección blanca. Fondo blanco sin borde visible.",
174
- "_generated": {
175
- "hash": "89b65d904ea4cd559f9055034b3948f0",
176
- "version": "15.0.3",
177
- "timestamp": "2026-01-30T19:11:59.793Z"
178
- }
179
- },
180
- {
181
- "name": "Con deshabilitado",
182
- "data": {
183
- "idPrefix": "example-disabled",
184
- "name": "example-disabled",
185
- "fieldset": {
186
- "legend": {
187
- "text": "¿Quieres que te contactemos por correo electrónico?"
188
- }
189
- },
190
- "hint": {
191
- "text": "Sólo puedes seleccionar un elemento."
192
- },
193
- "items": [
194
- {
195
- "value": "si",
196
- "text": "Si",
197
- "disabled": true,
198
- "checked": true
199
- },
200
- {
201
- "value": "no",
202
- "text": "No",
203
- "disabled": true
204
- }
205
- ]
206
- },
207
- "visualDescription": "Grupo de radio buttons con pregunta en negro bold, subtexto en gris debajo. Dos opciones apiladas verticalmente en estado inactivo: ambos círculos en gris claro con borde gris tenue, uno con relleno gris y otro vacío. Fondo blanco con borde gris claro rodeando el componente, toda la sección presenta opacidad reducida.",
208
- "_generated": {
209
- "hash": "76d3dd45ed46bacb0935f0492fe74b22",
210
- "version": "15.0.3",
211
- "timestamp": "2026-01-30T19:11:59.793Z"
212
- }
213
- },
214
- {
215
- "name": "con un legend como encabezado",
216
- "description": "Usa el parámetro <code>'heading'</code> para añadir un encabezado asociado al componente. Usa el parámetro <code>'headingLevel'</code> para establecer el nivel del encabezado. Por ejemplo: <code>'headingLevel': 3</code> creará un encabezado <code>&lt;h3&gt;</code>.",
217
- "data": {
218
- "idPrefix": "legend-as-page-heading",
219
- "name": "legend-as-page-heading",
220
- "fieldset": {
221
- "legend": {
222
- "text": "¿Cómo prefieres que te contactemos?",
223
- "classes": "c-h2",
224
- "isPageHeading": true
225
- },
226
- "headingLevel": 2
227
- },
228
- "hint": {
229
- "text": "Selecciona una de las opciones."
230
- },
231
- "items": [
232
- {
233
- "value": "part-2",
234
- "text": "Por correo electrónico",
235
- "hint": {
236
- "text": "Asegúrate de que nuestros correos no lleguen a la bandeja de spam."
237
- }
238
- },
239
- {
240
- "value": "part-3",
241
- "text": "Por correo postal",
242
- "hint": {
243
- "text": "Asegúrate de haber introducido correctamente tu dirección."
244
- }
245
- }
246
- ]
247
- },
248
- "visualDescription": "Grupo de radio buttons con borde gris de 1px y esquinas redondeadas, fondo blanco. Título en negro tamaño mediano peso normal, pregunta en negro peso negrita, dos opciones con círculos vacíos alineados verticalmente, labels en negro peso normal y texto descriptivo gris claro debajo de cada opción.",
249
- "_generated": {
250
- "hash": "de3c20041e27faeae9f61e568dbd2654",
251
- "version": "15.0.3",
252
- "timestamp": "2026-01-30T19:12:09.514Z"
253
- }
254
- },
255
- {
256
- "name": "con un legend del tamaño de un encabezado h2",
257
- "data": {
258
- "idPrefix": "medium-legend",
259
- "name": "medium-legend",
260
- "fieldset": {
261
- "legend": {
262
- "text": "¿Cómo prefieres que te contactemos?",
263
- "classes": "c-h2"
264
- }
265
- },
266
- "hint": {
267
- "text": "Selecciona una de las opciones."
268
- },
269
- "items": [
270
- {
271
- "value": "part-2",
272
- "text": "Por correo electrónico",
273
- "hint": {
274
- "text": "Asegúrate de que nuestros correos no lleguen a la bandeja de spam."
275
- }
276
- },
277
- {
278
- "value": "part-3",
279
- "text": "Por correo postal",
280
- "hint": {
281
- "text": "Asegúrate de haber introducido correctamente tu dirección."
282
- }
283
- }
284
- ]
285
- },
286
- "visualDescription": "Grupo de radio buttons con borde gris de 1px y esquinas redondeadas, fondo blanco. Título en gris tamaño pequeño peso normal arriba, pregunta en negro tamaño grande peso negrita, dos opciones con círculos vacíos alineados verticalmente, labels en negro peso normal y texto descriptivo gris claro debajo de cada opción.",
287
- "_generated": {
288
- "hash": "b56321221bce74c0f9bf1cb04441eb60",
289
- "version": "15.0.3",
290
- "timestamp": "2026-01-30T19:12:09.514Z"
291
- }
292
- },
293
- {
294
- "name": "con un divisor",
295
- "data": {
296
- "idPrefix": "example-divider",
297
- "name": "example-divider",
298
- "fieldset": {
299
- "legend": {
300
- "text": "¿Cómo prefieres que te contactemos?"
301
- }
302
- },
303
- "items": [
304
- {
305
- "value": "correo-electronico",
306
- "text": "Correo electrónico"
307
- },
308
- {
309
- "value": "correo-postal",
310
- "text": "Correo postal"
311
- },
312
- {
313
- "divider": "o bien"
314
- },
315
- {
316
- "value": "telefono",
317
- "text": "Teléfono"
318
- }
319
- ]
320
- },
321
- "visualDescription": "Grupo de radio buttons con borde gris de 1px y esquinas redondeadas, fondo blanco. Título en gris tamaño pequeño peso normal arriba, pregunta en negro peso negrita debajo, cuatro opciones con círculos vacíos alineados verticalmente, labels en negro peso normal. Línea horizontal gris tenue separa visualmente la tercera y cuarta opción.",
322
- "_generated": {
323
- "hash": "74a74b319adb3a404bb7a5952619f265",
324
- "version": "15.0.3",
325
- "timestamp": "2026-01-30T19:12:09.514Z"
326
- }
327
- },
328
- {
329
- "name": "Con pistas en los items",
330
- "data": {
331
- "idPrefix": "hints-on-items",
332
- "name": "hints-on-items",
333
- "fieldset": {
334
- "legend": {
335
- "text": "¿Cómo prefieres que te contactemos?",
336
- "isPageHeading": true
337
- }
338
- },
339
- "items": [
340
- {
341
- "value": "correo-electronico",
342
- "text": "Correo electrónico",
343
- "hint": {
344
- "text": "Asegúrate de que el correo no llega a la bandeja de spam."
345
- }
346
- },
347
- {
348
- "value": "correo-postal",
349
- "text": "Correo postal",
350
- "hint": {
351
- "text": "Asegúrate de haber introducido la dirección postal correctamente."
352
- }
353
- }
354
- ]
355
- },
356
- "visualDescription": "Grupo de dos radio buttons con círculos vacíos color gris oscuro a la izquierda. Cada opción tiene un label en negro peso normal y texto de ayuda en gris peso normal debajo del label. Fondo blanco sin bordes divisores entre opciones, espaciado vertical generoso.",
357
- "_generated": {
358
- "hash": "5d302782a8e83b6f03f6f95638d8ee1b",
359
- "version": "15.0.3",
360
- "timestamp": "2026-01-30T19:12:18.726Z"
361
- }
362
- },
363
- {
364
- "name": "con líneas divisorias",
365
- "data": {
366
- "idPrefix": "has-dividers",
367
- "name": "has-dividers",
368
- "fieldset": {
369
- "legend": {
370
- "text": "¿Cómo prefieres que te contactemos?"
371
- }
372
- },
373
- "hint": {
374
- "text": "Sólo puedes elegir un elemento."
375
- },
376
- "hasDividers": true,
377
- "items": [
378
- {
379
- "value": "correo-electronico",
380
- "text": "Correo electrónico",
381
- "classes": "font-normal",
382
- "hint": {
383
- "text": "Asegúrate de que el correo no llega a la bandeja de spam."
384
- }
385
- },
386
- {
387
- "value": "correo-postal",
388
- "text": "Correo postal",
389
- "hint": {
390
- "text": "Asegúrate de haber introducido la dirección postal correctamente."
391
- }
392
- }
393
- ]
394
- },
395
- "visualDescription": "Grupo de dos radio buttons con círculos vacíos color gris oscuro a la izquierda. Cada opción tiene un label en negro peso normal y texto de ayuda en gris peso normal debajo del label. Línea divisora horizontal gris clara separa las dos opciones, fondo blanco, espaciado vertical generoso.",
396
- "_generated": {
397
- "hash": "b17432d8429d47b713eaf3e8954a1835",
398
- "version": "15.0.3",
399
- "timestamp": "2026-01-30T19:12:18.726Z"
400
- }
401
- },
402
- {
403
- "name": "Con clases de CSS aplicadas",
404
- "description": "Los parámetros <code>classes</code> nos permiten aplicar clases de Tailwind CSS a nuestro componente.",
405
- "data": {
406
- "idPrefix": "classes",
407
- "name": "classes",
408
- "fieldset": {
409
- "legend": {
410
- "text": "¿Cómo prefieres que te contactemos?",
411
- "isPageHeading": true
412
- }
413
- },
414
- "items": [
415
- {
416
- "value": "correo-electronico",
417
- "text": "Correo electrónico",
418
- "hint": {
419
- "text": "Asegúrate de que el correo no llega a la bandeja de spam."
420
- },
421
- "classes": "bg-primary-light"
422
- },
423
- {
424
- "value": "correo-postal",
425
- "text": "Correo postal",
426
- "hint": {
427
- "text": "Asegúrate de haber introducido la dirección postal correctamente."
428
- },
429
- "classes": "bg-neutral-lighter"
430
- }
431
- ]
432
- },
433
- "visualDescription": "Grupo de dos radio buttons con círculos vacíos color gris oscuro a la izquierda sobre fondo celeste claro. Cada opción tiene un label en negro peso normal y texto de ayuda en gris peso normal debajo del label. Línea divisora horizontal gris clara separa las dos opciones, espaciado vertical generoso.",
434
- "_generated": {
435
- "hash": "d00c76a8f4bdd98118baca3781c2efb8",
436
- "version": "15.0.3",
437
- "timestamp": "2026-01-30T19:12:18.726Z"
438
- }
439
- },
440
- {
441
- "name": "sin fieldset",
442
- "description": "Usa este ejemplo si vas a escribir tú mismo un fieldset, rodeándolo. Recuerda que el uso de fieldset es necesario por accesibilidad.",
443
- "data": {
444
- "idPrefix": "without-fieldset",
445
- "name": "without-fieldset",
446
- "items": [
447
- {
448
- "value": "correo-electronico",
449
- "text": "Correo electrónico"
450
- },
451
- {
452
- "value": "correp-postal",
453
- "text": "Correo postal"
454
- },
455
- {
456
- "value": "telefono",
457
- "text": "Teléfono"
458
- }
459
- ]
460
- },
461
- "visualDescription": "Grupo de tres radio buttons circulares no seleccionados con labels en texto negro tamaño regular. Fondo blanco sin contenedor visible. Título superior en negro pequeño.",
462
- "_generated": {
463
- "hash": "4290d8a36fbe37307edb99f35b807694",
464
- "version": "15.0.3",
465
- "timestamp": "2026-01-30T19:12:27.479Z"
466
- }
467
- },
468
- {
469
- "name": "con fieldset y mensaje de error",
470
- "data": {
471
- "idPrefix": "fieldset-and-error",
472
- "name": "fieldset-and-error",
473
- "errorMessage": {
474
- "text": "Tienes que seleccionar al menos una opción"
475
- },
476
- "fieldset": {
477
- "legend": {
478
- "text": "¿Quieres que te contactemos por correo electrónico?"
479
- }
480
- },
481
- "items": [
482
- {
483
- "value": "si",
484
- "text": "Si"
485
- },
486
- {
487
- "value": "no",
488
- "text": "No",
489
- "checked": true
490
- }
491
- ]
492
- },
493
- "visualDescription": "Fieldset con borde gris de 1px conteniendo pregunta en texto negro peso normal, mensaje de error rojo debajo, y dos radio buttons circulares donde el segundo está seleccionado con punto azul central. Fondo blanco y título superior en negro pequeño.",
494
- "_generated": {
495
- "hash": "9da9c1e5fd363b09b674d053e7ee9801",
496
- "version": "15.0.3",
497
- "timestamp": "2026-01-30T19:12:27.479Z"
498
- }
499
- },
500
- {
501
- "name": "con un texto de item muy largo",
502
- "data": {
503
- "idPrefix": "very-long",
504
- "name": "very-long",
505
- "hint": {
506
- "text": "Nullam id dolor id nibh ultricies vehicula ut id elit."
507
- },
508
- "errorMessage": {
509
- "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
510
- },
511
- "fieldset": {
512
- "legend": {
513
- "text": "Maecenas faucibus mollis interdum?"
514
- }
515
- },
516
- "items": [
517
- {
518
- "value": "nullam",
519
- "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."
520
- },
521
- {
522
- "value": "aenean",
523
- "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."
524
- },
525
- {
526
- "value": "fusce",
527
- "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."
528
- }
529
- ]
530
- },
531
- "visualDescription": "Pregunta en texto negro peso negrita seguida de subtexto gris claro tamaño pequeño. Advertencia en texto rojo debajo del subtexto. Tres radio buttons circulares no seleccionados con labels extensos en texto negro tamaño regular ocupando múltiples líneas. Fondo blanco y borde gris delgado alrededor del contenedor.",
532
- "_generated": {
533
- "hash": "3150ae62c72805a0b6d63bb1296dc5a2",
534
- "version": "15.0.3",
535
- "timestamp": "2026-01-30T19:12:27.479Z"
536
- }
537
- },
538
- {
539
- "name": "con items condicionales",
540
- "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>.",
541
- "data": {
542
- "idPrefix": "conditional-items",
543
- "name": "conditional-items",
544
- "fieldset": {
545
- "legend": {
546
- "text": "¿Cómo quieres que te contactemos?"
547
- }
548
- },
549
- "items": [
550
- {
551
- "value": "correo-electronico",
552
- "text": "Correo electrónico",
553
- "conditional": {
554
- "html": mobileContent('1').val
555
- }
556
- },
557
- {
558
- "value": "telefono",
559
- "text": "Teléfono",
560
- "checked": true,
561
- "conditional": {
562
- "html": telefonoContent('2').val
563
- }
564
- },
565
- {
566
- "value": "mensaje-SMS",
567
- "text": "Sin conditional"
568
- }
569
- ]
570
- },
571
- "visualDescription": "Grupo de radio buttons con pregunta en texto negro regular arriba. Tres opciones verticales: primera sin seleccionar, segunda seleccionada en azul con círculo relleno y campo de texto con label gris y borde gris de 1px indentado debajo, tercera sin seleccionar. Fondo blanco, espaciado vertical consistente entre opciones.",
572
- "_generated": {
573
- "hash": "470864e9ae3ad08027bd0a55ad4e8f19",
574
- "version": "15.0.3",
575
- "timestamp": "2026-01-30T19:12:38.592Z"
576
- }
577
- },
578
- {
579
- "name": "con item condicional seleccionado",
580
- "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>.",
581
- "data": {
582
- "idPrefix": "conditional-item-checked",
583
- "name": "conditional-item-checked",
584
- "fieldset": {
585
- "legend": {
586
- "text": "¿Cómo quieres que te contactemos?"
587
- }
588
- },
589
- "items": [
590
- {
591
- "value": "correo-electronico",
592
- "text": "Correo electrónico",
593
- "conditional": {
594
- "html": telefonoContent('4').val
595
- }
596
- },
597
- {
598
- "value": "telefono",
599
- "text": "Teléfono",
600
- "checked": true,
601
- "conditional": {
602
- "html": mobileContent('5').val
603
- }
604
- },
605
- {
606
- "value": "mensaje-SMS",
607
- "text": "Mensaje SMS",
608
- "conditional": {
609
- "html": mobileContent('6').val
610
- }
611
- }
612
- ]
613
- },
614
- "visualDescription": "Grupo de radio buttons con pregunta en texto negro regular arriba. Tres opciones verticales: primera sin seleccionar, segunda seleccionada con círculo azul relleno y campo de texto con label gris y borde gris de 1px indentado debajo, tercera sin seleccionar. Fondo blanco con borde gris claro envolviendo todo el grupo.",
615
- "_generated": {
616
- "hash": "6d91710ed77fa48707b34ce9df67c197",
617
- "version": "15.0.3",
618
- "timestamp": "2026-01-30T19:12:38.593Z"
619
- }
620
- },
621
- {
622
- "name": "con clases opcionales del form-group mostrando un error del grupo",
623
- "data": {
624
- "idPrefix": "classes-group-error",
625
- "name": "classes-group-error",
626
- "formGroup": {
627
- "classes": "c-form-group--error"
628
- },
629
- "fieldset": {
630
- "legend": {
631
- "text": "¿Cómo quieres que te contactemos?"
632
- }
633
- },
634
- "items": [
635
- {
636
- "value": "correo-electronico",
637
- "text": "Correo electrónico",
638
- "conditional": {
639
- "html": telefonoContent('5').val
640
- }
641
- },
642
- {
643
- "value": "telefono",
644
- "text": "Teléfono",
645
- "checked": true,
646
- "conditional": {
647
- "html": mobileErrorContent('1').val
648
- }
649
- },
650
- {
651
- "value": "mensaje-SMS",
652
- "text": "Mensaje SMS",
653
- "conditional": {
654
- "html": mobileContent('7').val
655
- }
656
- }
657
- ]
658
- },
659
- "visualDescription": "Grupo de radio buttons con pregunta en texto negro regular arriba. Tres opciones verticales: primera sin seleccionar, segunda seleccionada con círculo azul relleno y campo de texto con borde rojo de 2px más mensaje de error en texto rojo pequeño debajo, tercera con círculo rojo en estado error. Fondo blanco con borde gris claro envolviendo el grupo.",
660
- "_generated": {
661
- "hash": "fcc9b7451829b59a5fd3746bebf3a50d",
662
- "version": "15.0.3",
663
- "timestamp": "2026-01-30T19:12:38.593Z"
664
- }
665
- },
666
- {
667
- "name": "peque",
668
- "data": {
669
- "idPrefix": "small",
670
- "name": "peque",
671
- "classes": "c-radios--sm",
672
- "items": [
673
- {
674
- "value": "si",
675
- "text": "Si",
676
- "classes": "-mt-base",
677
- "label": {
678
- "classes": "text-sm -mt-1"
679
- }
680
- },
681
- {
682
- "value": "no",
683
- "text": "No",
684
- "classes": "-mt-base",
685
- "label": {
686
- "classes": "text-sm -mt-1"
687
- }
688
- }
689
- ]
690
- },
691
- "visualDescription": "Grupo de dos radio buttons con labels \"Si\" y \"No\" en texto negro de tamaño pequeño. Fondo blanco, radio buttons circulares con borde gris, espaciado vertical compacto entre opciones. Título \"peque\" en negro arriba del grupo.",
692
- "_generated": {
693
- "hash": "a01fcfd4da2fc1243bb0b1883e4df2ce",
694
- "version": "15.0.3",
695
- "timestamp": "2026-01-30T19:12:44.531Z"
696
- }
697
- }
698
- ] %}
1
+ {% from "components/fieldset/_macro.fieldset.njk" import componentFieldset %}
2
+ {% from "components/input/_macro.input.njk" import componentInput %}
3
+ {% from "components/radios/_macro.radios.njk" import componentRadios %}
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
+ {{ componentRadios({
67
+ "idPrefix": "grandchild-" + id,
68
+ "name": "grandchild-" + id,
69
+ "items": [
70
+ {
71
+ "name": "oficina-principal-" + id,
72
+ "id": "oficina-principal-id-" + id,
73
+ "value": "oficina-principal-" + id,
74
+ "checked": true,
75
+ "html": "Oficina principal"
76
+ },
77
+ {
78
+ "name": "oficina-secundaria-" + id,
79
+ "id": "oficina-secundaria-id-" + id,
80
+ "value": "oficina-secundaria-" + id,
81
+ "html": "Oficina secundaria"
82
+ }
83
+ ]
84
+ }) }}
85
+ {% endmacro %}
86
+
87
+ {% macro nestedContent(id='id') %}
88
+ {{ componentRadios({
89
+ "idPrefix": "with-conditional-items-checked-nested-" + id,
90
+ "name": "with-conditional-items-checked-nested-" + id,
91
+ "items": [
92
+ {
93
+ "value": "oficinas-de-registro",
94
+ "text": "Oficinas de registro",
95
+ "checked": true,
96
+ "conditional": {
97
+ "html": grandchildContent('oficinas-de-registro-' + id).val
98
+ }
99
+ },
100
+ {
101
+ "value": "oficinas-locales",
102
+ "text": "Oficinas locales",
103
+ "conditional": {
104
+ "html": grandchildContent('oficinas-locales-' + id).val
105
+ }
106
+ }
107
+ ]
108
+ }) }}
109
+ {% endmacro %}
110
+
111
+ {% set exampleComponent = "radios" %}
112
+ {% set examples = [
113
+ {
114
+ "name": "por defecto",
115
+ "data": {
116
+ "idPrefix": "default",
117
+ "name": "por defecto",
118
+ "fieldset": {
119
+ "legend": {
120
+ "text": "¿Quieres que te contactemos por correo electrónico?"
121
+ }
122
+ },
123
+ "hint": {
124
+ "text": "Sólo puedes seleccionar un elemento."
125
+ },
126
+ "items": [
127
+ {
128
+ "value": "si",
129
+ "text": "Si"
130
+ },
131
+ {
132
+ "value": "no",
133
+ "text": "No",
134
+ "checked": true
135
+ }
136
+ ]
137
+ },
138
+ "visualDescription": "Grupo de radio buttons con pregunta en negro bold, subtexto en gris debajo. Dos opciones apiladas verticalmente: primera con círculo vacío blanco con borde gris, segunda con círculo relleno azul oscuro indicando selección. Fondo blanco con borde gris claro rodeando todo el componente.",
139
+ "_generated": {
140
+ "hash": "c0661da8ddbe3c662dd90dd77321057d",
141
+ "version": "15.0.3",
142
+ "timestamp": "2026-01-30T19:11:59.793Z"
143
+ }
144
+ },
145
+ {
146
+ "name": "En línea",
147
+ "data": {
148
+ "idPrefix": "inline",
149
+ "classes": "flex",
150
+ "name": "inline",
151
+ "fieldset": {
152
+ "legend": {
153
+ "text": "¿Quieres que te contactemos por correo electrónico?"
154
+ }
155
+ },
156
+ "hint": {
157
+ "text": "Sólo puedes seleccionar un elemento."
158
+ },
159
+ "items": [
160
+ {
161
+ "value": "si",
162
+ "text": "Si",
163
+ "classes": "mr-sm"
164
+ },
165
+ {
166
+ "value": "no",
167
+ "text": "No",
168
+ "classes": "mr-sm",
169
+ "checked": true
170
+ }
171
+ ]
172
+ },
173
+ "visualDescription": "Grupo de radio buttons con pregunta en negro bold, subtexto en gris debajo. Dos opciones dispuestas horizontalmente: primera con círculo vacío blanco con borde gris, segunda con círculo relleno azul con marca de selección blanca. Fondo blanco sin borde visible.",
174
+ "_generated": {
175
+ "hash": "89b65d904ea4cd559f9055034b3948f0",
176
+ "version": "15.0.3",
177
+ "timestamp": "2026-01-30T19:11:59.793Z"
178
+ }
179
+ },
180
+ {
181
+ "name": "Con deshabilitado",
182
+ "data": {
183
+ "idPrefix": "example-disabled",
184
+ "name": "example-disabled",
185
+ "fieldset": {
186
+ "legend": {
187
+ "text": "¿Quieres que te contactemos por correo electrónico?"
188
+ }
189
+ },
190
+ "hint": {
191
+ "text": "Sólo puedes seleccionar un elemento."
192
+ },
193
+ "items": [
194
+ {
195
+ "value": "si",
196
+ "text": "Si",
197
+ "disabled": true,
198
+ "checked": true
199
+ },
200
+ {
201
+ "value": "no",
202
+ "text": "No",
203
+ "disabled": true
204
+ }
205
+ ]
206
+ },
207
+ "visualDescription": "Grupo de radio buttons con pregunta en negro bold, subtexto en gris debajo. Dos opciones apiladas verticalmente en estado inactivo: ambos círculos en gris claro con borde gris tenue, uno con relleno gris y otro vacío. Fondo blanco con borde gris claro rodeando el componente, toda la sección presenta opacidad reducida.",
208
+ "_generated": {
209
+ "hash": "76d3dd45ed46bacb0935f0492fe74b22",
210
+ "version": "15.0.3",
211
+ "timestamp": "2026-01-30T19:11:59.793Z"
212
+ }
213
+ },
214
+ {
215
+ "name": "con un legend como encabezado",
216
+ "description": "Usa el parámetro <code>'heading'</code> para añadir un encabezado asociado al componente. Usa el parámetro <code>'headingLevel'</code> para establecer el nivel del encabezado. Por ejemplo: <code>'headingLevel': 3</code> creará un encabezado <code>&lt;h3&gt;</code>.",
217
+ "data": {
218
+ "idPrefix": "legend-as-page-heading",
219
+ "name": "legend-as-page-heading",
220
+ "fieldset": {
221
+ "legend": {
222
+ "text": "¿Cómo prefieres que te contactemos?",
223
+ "classes": "c-h2",
224
+ "isPageHeading": true
225
+ },
226
+ "headingLevel": 2
227
+ },
228
+ "hint": {
229
+ "text": "Selecciona una de las opciones."
230
+ },
231
+ "items": [
232
+ {
233
+ "value": "part-2",
234
+ "text": "Por correo electrónico",
235
+ "hint": {
236
+ "text": "Asegúrate de que nuestros correos no lleguen a la bandeja de spam."
237
+ }
238
+ },
239
+ {
240
+ "value": "part-3",
241
+ "text": "Por correo postal",
242
+ "hint": {
243
+ "text": "Asegúrate de haber introducido correctamente tu dirección."
244
+ }
245
+ }
246
+ ]
247
+ },
248
+ "visualDescription": "Grupo de radio buttons con borde gris de 1px y esquinas redondeadas, fondo blanco. Título en negro tamaño mediano peso normal, pregunta en negro peso negrita, dos opciones con círculos vacíos alineados verticalmente, labels en negro peso normal y texto descriptivo gris claro debajo de cada opción.",
249
+ "_generated": {
250
+ "hash": "de3c20041e27faeae9f61e568dbd2654",
251
+ "version": "15.0.3",
252
+ "timestamp": "2026-01-30T19:12:09.514Z"
253
+ }
254
+ },
255
+ {
256
+ "name": "con un legend del tamaño de un encabezado h2",
257
+ "data": {
258
+ "idPrefix": "medium-legend",
259
+ "name": "medium-legend",
260
+ "fieldset": {
261
+ "legend": {
262
+ "text": "¿Cómo prefieres que te contactemos?",
263
+ "classes": "c-h2"
264
+ }
265
+ },
266
+ "hint": {
267
+ "text": "Selecciona una de las opciones."
268
+ },
269
+ "items": [
270
+ {
271
+ "value": "part-2",
272
+ "text": "Por correo electrónico",
273
+ "hint": {
274
+ "text": "Asegúrate de que nuestros correos no lleguen a la bandeja de spam."
275
+ }
276
+ },
277
+ {
278
+ "value": "part-3",
279
+ "text": "Por correo postal",
280
+ "hint": {
281
+ "text": "Asegúrate de haber introducido correctamente tu dirección."
282
+ }
283
+ }
284
+ ]
285
+ },
286
+ "visualDescription": "Grupo de radio buttons con borde gris de 1px y esquinas redondeadas, fondo blanco. Título en gris tamaño pequeño peso normal arriba, pregunta en negro tamaño grande peso negrita, dos opciones con círculos vacíos alineados verticalmente, labels en negro peso normal y texto descriptivo gris claro debajo de cada opción.",
287
+ "_generated": {
288
+ "hash": "b56321221bce74c0f9bf1cb04441eb60",
289
+ "version": "15.0.3",
290
+ "timestamp": "2026-01-30T19:12:09.514Z"
291
+ }
292
+ },
293
+ {
294
+ "name": "con un divisor",
295
+ "data": {
296
+ "idPrefix": "example-divider",
297
+ "name": "example-divider",
298
+ "fieldset": {
299
+ "legend": {
300
+ "text": "¿Cómo prefieres que te contactemos?"
301
+ }
302
+ },
303
+ "items": [
304
+ {
305
+ "value": "correo-electronico",
306
+ "text": "Correo electrónico"
307
+ },
308
+ {
309
+ "value": "correo-postal",
310
+ "text": "Correo postal"
311
+ },
312
+ {
313
+ "divider": "o bien"
314
+ },
315
+ {
316
+ "value": "telefono",
317
+ "text": "Teléfono"
318
+ }
319
+ ]
320
+ },
321
+ "visualDescription": "Grupo de radio buttons con borde gris de 1px y esquinas redondeadas, fondo blanco. Título en gris tamaño pequeño peso normal arriba, pregunta en negro peso negrita debajo, cuatro opciones con círculos vacíos alineados verticalmente, labels en negro peso normal. Línea horizontal gris tenue separa visualmente la tercera y cuarta opción.",
322
+ "_generated": {
323
+ "hash": "74a74b319adb3a404bb7a5952619f265",
324
+ "version": "15.0.3",
325
+ "timestamp": "2026-01-30T19:12:09.514Z"
326
+ }
327
+ },
328
+ {
329
+ "name": "Con pistas en los items",
330
+ "data": {
331
+ "idPrefix": "hints-on-items",
332
+ "name": "hints-on-items",
333
+ "fieldset": {
334
+ "legend": {
335
+ "text": "¿Cómo prefieres que te contactemos?",
336
+ "isPageHeading": true
337
+ }
338
+ },
339
+ "items": [
340
+ {
341
+ "value": "correo-electronico",
342
+ "text": "Correo electrónico",
343
+ "hint": {
344
+ "text": "Asegúrate de que el correo no llega a la bandeja de spam."
345
+ }
346
+ },
347
+ {
348
+ "value": "correo-postal",
349
+ "text": "Correo postal",
350
+ "hint": {
351
+ "text": "Asegúrate de haber introducido la dirección postal correctamente."
352
+ }
353
+ }
354
+ ]
355
+ },
356
+ "visualDescription": "Grupo de dos radio buttons con círculos vacíos color gris oscuro a la izquierda. Cada opción tiene un label en negro peso normal y texto de ayuda en gris peso normal debajo del label. Fondo blanco sin bordes divisores entre opciones, espaciado vertical generoso.",
357
+ "_generated": {
358
+ "hash": "5d302782a8e83b6f03f6f95638d8ee1b",
359
+ "version": "15.0.3",
360
+ "timestamp": "2026-01-30T19:12:18.726Z"
361
+ }
362
+ },
363
+ {
364
+ "name": "con líneas divisorias",
365
+ "data": {
366
+ "idPrefix": "has-dividers",
367
+ "name": "has-dividers",
368
+ "fieldset": {
369
+ "legend": {
370
+ "text": "¿Cómo prefieres que te contactemos?"
371
+ }
372
+ },
373
+ "hint": {
374
+ "text": "Sólo puedes elegir un elemento."
375
+ },
376
+ "hasDividers": true,
377
+ "items": [
378
+ {
379
+ "value": "correo-electronico",
380
+ "text": "Correo electrónico",
381
+ "classes": "font-normal",
382
+ "hint": {
383
+ "text": "Asegúrate de que el correo no llega a la bandeja de spam."
384
+ }
385
+ },
386
+ {
387
+ "value": "correo-postal",
388
+ "text": "Correo postal",
389
+ "hint": {
390
+ "text": "Asegúrate de haber introducido la dirección postal correctamente."
391
+ }
392
+ }
393
+ ]
394
+ },
395
+ "visualDescription": "Grupo de dos radio buttons con círculos vacíos color gris oscuro a la izquierda. Cada opción tiene un label en negro peso normal y texto de ayuda en gris peso normal debajo del label. Línea divisora horizontal gris clara separa las dos opciones, fondo blanco, espaciado vertical generoso.",
396
+ "_generated": {
397
+ "hash": "b17432d8429d47b713eaf3e8954a1835",
398
+ "version": "15.0.3",
399
+ "timestamp": "2026-01-30T19:12:18.726Z"
400
+ }
401
+ },
402
+ {
403
+ "name": "Con clases de CSS aplicadas",
404
+ "description": "Los parámetros <code>classes</code> nos permiten aplicar clases de Tailwind CSS a nuestro componente.",
405
+ "data": {
406
+ "idPrefix": "classes",
407
+ "name": "classes",
408
+ "fieldset": {
409
+ "legend": {
410
+ "text": "¿Cómo prefieres que te contactemos?",
411
+ "isPageHeading": true
412
+ }
413
+ },
414
+ "items": [
415
+ {
416
+ "value": "correo-electronico",
417
+ "text": "Correo electrónico",
418
+ "hint": {
419
+ "text": "Asegúrate de que el correo no llega a la bandeja de spam."
420
+ },
421
+ "classes": "bg-primary-light"
422
+ },
423
+ {
424
+ "value": "correo-postal",
425
+ "text": "Correo postal",
426
+ "hint": {
427
+ "text": "Asegúrate de haber introducido la dirección postal correctamente."
428
+ },
429
+ "classes": "bg-neutral-lighter"
430
+ }
431
+ ]
432
+ },
433
+ "visualDescription": "Grupo de dos radio buttons con círculos vacíos color gris oscuro a la izquierda sobre fondo celeste claro. Cada opción tiene un label en negro peso normal y texto de ayuda en gris peso normal debajo del label. Línea divisora horizontal gris clara separa las dos opciones, espaciado vertical generoso.",
434
+ "_generated": {
435
+ "hash": "d00c76a8f4bdd98118baca3781c2efb8",
436
+ "version": "15.0.3",
437
+ "timestamp": "2026-01-30T19:12:18.726Z"
438
+ }
439
+ },
440
+ {
441
+ "name": "sin fieldset",
442
+ "description": "Usa este ejemplo si vas a escribir tú mismo un fieldset, rodeándolo. Recuerda que el uso de fieldset es necesario por accesibilidad.",
443
+ "data": {
444
+ "idPrefix": "without-fieldset",
445
+ "name": "without-fieldset",
446
+ "items": [
447
+ {
448
+ "value": "correo-electronico",
449
+ "text": "Correo electrónico"
450
+ },
451
+ {
452
+ "value": "correp-postal",
453
+ "text": "Correo postal"
454
+ },
455
+ {
456
+ "value": "telefono",
457
+ "text": "Teléfono"
458
+ }
459
+ ]
460
+ },
461
+ "visualDescription": "Grupo de tres radio buttons circulares no seleccionados con labels en texto negro tamaño regular. Fondo blanco sin contenedor visible. Título superior en negro pequeño.",
462
+ "_generated": {
463
+ "hash": "4290d8a36fbe37307edb99f35b807694",
464
+ "version": "15.0.3",
465
+ "timestamp": "2026-01-30T19:12:27.479Z"
466
+ }
467
+ },
468
+ {
469
+ "name": "con fieldset y mensaje de error",
470
+ "data": {
471
+ "idPrefix": "fieldset-and-error",
472
+ "name": "fieldset-and-error",
473
+ "errorMessage": {
474
+ "text": "Tienes que seleccionar al menos una opción"
475
+ },
476
+ "fieldset": {
477
+ "legend": {
478
+ "text": "¿Quieres que te contactemos por correo electrónico?"
479
+ }
480
+ },
481
+ "items": [
482
+ {
483
+ "value": "si",
484
+ "text": "Si"
485
+ },
486
+ {
487
+ "value": "no",
488
+ "text": "No",
489
+ "checked": true
490
+ }
491
+ ]
492
+ },
493
+ "visualDescription": "Fieldset con borde gris de 1px conteniendo pregunta en texto negro peso normal, mensaje de error rojo debajo, y dos radio buttons circulares donde el segundo está seleccionado con punto azul central. Fondo blanco y título superior en negro pequeño.",
494
+ "_generated": {
495
+ "hash": "9da9c1e5fd363b09b674d053e7ee9801",
496
+ "version": "15.0.3",
497
+ "timestamp": "2026-01-30T19:12:27.479Z"
498
+ }
499
+ },
500
+ {
501
+ "name": "con un texto de item muy largo",
502
+ "data": {
503
+ "idPrefix": "very-long",
504
+ "name": "very-long",
505
+ "hint": {
506
+ "text": "Nullam id dolor id nibh ultricies vehicula ut id elit."
507
+ },
508
+ "errorMessage": {
509
+ "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
510
+ },
511
+ "fieldset": {
512
+ "legend": {
513
+ "text": "Maecenas faucibus mollis interdum?"
514
+ }
515
+ },
516
+ "items": [
517
+ {
518
+ "value": "nullam",
519
+ "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."
520
+ },
521
+ {
522
+ "value": "aenean",
523
+ "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."
524
+ },
525
+ {
526
+ "value": "fusce",
527
+ "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."
528
+ }
529
+ ]
530
+ },
531
+ "visualDescription": "Pregunta en texto negro peso negrita seguida de subtexto gris claro tamaño pequeño. Advertencia en texto rojo debajo del subtexto. Tres radio buttons circulares no seleccionados con labels extensos en texto negro tamaño regular ocupando múltiples líneas. Fondo blanco y borde gris delgado alrededor del contenedor.",
532
+ "_generated": {
533
+ "hash": "3150ae62c72805a0b6d63bb1296dc5a2",
534
+ "version": "15.0.3",
535
+ "timestamp": "2026-01-30T19:12:27.479Z"
536
+ }
537
+ },
538
+ {
539
+ "name": "con items condicionales",
540
+ "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>.",
541
+ "data": {
542
+ "idPrefix": "conditional-items",
543
+ "name": "conditional-items",
544
+ "fieldset": {
545
+ "legend": {
546
+ "text": "¿Cómo quieres que te contactemos?"
547
+ }
548
+ },
549
+ "items": [
550
+ {
551
+ "value": "correo-electronico",
552
+ "text": "Correo electrónico",
553
+ "conditional": {
554
+ "html": mobileContent('1').val
555
+ }
556
+ },
557
+ {
558
+ "value": "telefono",
559
+ "text": "Teléfono",
560
+ "checked": true,
561
+ "conditional": {
562
+ "html": telefonoContent('2').val
563
+ }
564
+ },
565
+ {
566
+ "value": "mensaje-SMS",
567
+ "text": "Sin conditional"
568
+ }
569
+ ]
570
+ },
571
+ "visualDescription": "Grupo de radio buttons con pregunta en texto negro regular arriba. Tres opciones verticales: primera sin seleccionar, segunda seleccionada en azul con círculo relleno y campo de texto con label gris y borde gris de 1px indentado debajo, tercera sin seleccionar. Fondo blanco, espaciado vertical consistente entre opciones.",
572
+ "_generated": {
573
+ "hash": "470864e9ae3ad08027bd0a55ad4e8f19",
574
+ "version": "15.0.3",
575
+ "timestamp": "2026-01-30T19:12:38.592Z"
576
+ }
577
+ },
578
+ {
579
+ "name": "con item condicional seleccionado",
580
+ "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>.",
581
+ "data": {
582
+ "idPrefix": "conditional-item-checked",
583
+ "name": "conditional-item-checked",
584
+ "fieldset": {
585
+ "legend": {
586
+ "text": "¿Cómo quieres que te contactemos?"
587
+ }
588
+ },
589
+ "items": [
590
+ {
591
+ "value": "correo-electronico",
592
+ "text": "Correo electrónico",
593
+ "conditional": {
594
+ "html": telefonoContent('4').val
595
+ }
596
+ },
597
+ {
598
+ "value": "telefono",
599
+ "text": "Teléfono",
600
+ "checked": true,
601
+ "conditional": {
602
+ "html": mobileContent('5').val
603
+ }
604
+ },
605
+ {
606
+ "value": "mensaje-SMS",
607
+ "text": "Mensaje SMS",
608
+ "conditional": {
609
+ "html": mobileContent('6').val
610
+ }
611
+ }
612
+ ]
613
+ },
614
+ "visualDescription": "Grupo de radio buttons con pregunta en texto negro regular arriba. Tres opciones verticales: primera sin seleccionar, segunda seleccionada con círculo azul relleno y campo de texto con label gris y borde gris de 1px indentado debajo, tercera sin seleccionar. Fondo blanco con borde gris claro envolviendo todo el grupo.",
615
+ "_generated": {
616
+ "hash": "6d91710ed77fa48707b34ce9df67c197",
617
+ "version": "15.0.3",
618
+ "timestamp": "2026-01-30T19:12:38.593Z"
619
+ }
620
+ },
621
+ {
622
+ "name": "con clases opcionales del form-group mostrando un error del grupo",
623
+ "data": {
624
+ "idPrefix": "classes-group-error",
625
+ "name": "classes-group-error",
626
+ "formGroup": {
627
+ "classes": "c-form-group--error"
628
+ },
629
+ "fieldset": {
630
+ "legend": {
631
+ "text": "¿Cómo quieres que te contactemos?"
632
+ }
633
+ },
634
+ "items": [
635
+ {
636
+ "value": "correo-electronico",
637
+ "text": "Correo electrónico",
638
+ "conditional": {
639
+ "html": telefonoContent('5').val
640
+ }
641
+ },
642
+ {
643
+ "value": "telefono",
644
+ "text": "Teléfono",
645
+ "checked": true,
646
+ "conditional": {
647
+ "html": mobileErrorContent('1').val
648
+ }
649
+ },
650
+ {
651
+ "value": "mensaje-SMS",
652
+ "text": "Mensaje SMS",
653
+ "conditional": {
654
+ "html": mobileContent('7').val
655
+ }
656
+ }
657
+ ]
658
+ },
659
+ "visualDescription": "Grupo de radio buttons con pregunta en texto negro regular arriba. Tres opciones verticales: primera sin seleccionar, segunda seleccionada con círculo azul relleno y campo de texto con borde rojo de 2px más mensaje de error en texto rojo pequeño debajo, tercera con círculo rojo en estado error. Fondo blanco con borde gris claro envolviendo el grupo.",
660
+ "_generated": {
661
+ "hash": "fcc9b7451829b59a5fd3746bebf3a50d",
662
+ "version": "15.0.3",
663
+ "timestamp": "2026-01-30T19:12:38.593Z"
664
+ }
665
+ },
666
+ {
667
+ "name": "peque",
668
+ "data": {
669
+ "idPrefix": "small",
670
+ "name": "peque",
671
+ "classes": "c-radios--sm",
672
+ "items": [
673
+ {
674
+ "value": "si",
675
+ "text": "Si",
676
+ "classes": "-mt-base",
677
+ "label": {
678
+ "classes": "text-sm -mt-1"
679
+ }
680
+ },
681
+ {
682
+ "value": "no",
683
+ "text": "No",
684
+ "classes": "-mt-base",
685
+ "label": {
686
+ "classes": "text-sm -mt-1"
687
+ }
688
+ }
689
+ ]
690
+ },
691
+ "visualDescription": "Grupo de dos radio buttons con labels \"Si\" y \"No\" en texto negro de tamaño pequeño. Fondo blanco, radio buttons circulares con borde gris, espaciado vertical compacto entre opciones. Título \"peque\" en negro arriba del grupo.",
692
+ "_generated": {
693
+ "hash": "a01fcfd4da2fc1243bb0b1883e4df2ce",
694
+ "version": "15.0.3",
695
+ "timestamp": "2026-01-30T19:12:44.531Z"
696
+ }
697
+ }
698
+ ] %}