@ebrains/components 3.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (371) hide show
  1. package/dist/cjs/color-primary-palette_6.cjs.entry.js +14 -14
  2. package/dist/cjs/components-section.cjs.entry.js +1 -1
  3. package/dist/cjs/components.cjs.js +1 -1
  4. package/dist/cjs/correct-use-of-colors.cjs.entry.js +1 -1
  5. package/dist/cjs/docs-palettes.cjs.entry.js +1 -1
  6. package/dist/cjs/docs-tokens.cjs.entry.js +1 -1
  7. package/dist/cjs/{eds-accordion_52.cjs.entry.js → eds-accordion_53.cjs.entry.js} +847 -207
  8. package/dist/cjs/eds-app-root.cjs.entry.js +1 -1
  9. package/dist/cjs/eds-cookies-preference.cjs.entry.js +1 -1
  10. package/dist/cjs/eds-feedback.cjs.entry.js +1 -1
  11. package/dist/cjs/eds-frame.cjs.entry.js +1 -1
  12. package/dist/cjs/eds-gauge.cjs.entry.js +1 -1
  13. package/dist/cjs/eds-gitlab-contributors.cjs.entry.js +9 -2
  14. package/dist/cjs/eds-icon-bluesky.cjs.entry.js +1 -1
  15. package/dist/cjs/eds-icon-eu.cjs.entry.js +1 -1
  16. package/dist/cjs/eds-icon-facebook.cjs.entry.js +1 -1
  17. package/dist/cjs/eds-icon-gitlab.cjs.entry.js +1 -1
  18. package/dist/cjs/eds-icon-linkedin.cjs.entry.js +1 -1
  19. package/dist/cjs/eds-icon-mastodon.cjs.entry.js +1 -1
  20. package/dist/cjs/eds-icon-twitter.cjs.entry.js +1 -1
  21. package/dist/cjs/eds-icon-youtube.cjs.entry.js +1 -1
  22. package/dist/cjs/eds-input-search.cjs.entry.js +76 -0
  23. package/dist/cjs/eds-section-core_2.cjs.entry.js +3 -3
  24. package/dist/cjs/eds-timeline.cjs.entry.js +1 -1
  25. package/dist/cjs/eds-toast-manager.cjs.entry.js +1 -1
  26. package/dist/cjs/eds-trl-badge.cjs.entry.js +181 -0
  27. package/dist/cjs/incorrect-use-of-colors.cjs.entry.js +1 -1
  28. package/dist/cjs/index-50bc1aa4.js +10 -2
  29. package/dist/cjs/loader.cjs.js +1 -1
  30. package/dist/cjs/logo-space.cjs.entry.js +1 -1
  31. package/dist/cjs/logo-variations-horizontal_2.cjs.entry.js +2 -2
  32. package/dist/cjs/logo-variations-tabs.cjs.entry.js +1 -1
  33. package/dist/cjs/logo-wrong-usage.cjs.entry.js +1 -1
  34. package/dist/cjs/svg-repository.cjs.entry.js +1 -1
  35. package/dist/cjs/token-list_3.cjs.entry.js +3 -3
  36. package/dist/cjs/token-ratios.cjs.entry.js +1 -1
  37. package/dist/cjs/token-spacing.cjs.entry.js +1 -1
  38. package/dist/cjs/token-typography.cjs.entry.js +1 -1
  39. package/dist/collection/collection-manifest.json +4 -1
  40. package/dist/collection/components/eds-accordion/eds-accordion.css +3 -2
  41. package/dist/collection/components/eds-accordion/eds-accordion.js +1 -1
  42. package/dist/collection/components/eds-accordion/eds-accordion.stories.js +7 -19
  43. package/dist/collection/components/eds-alert/eds-alert.stories.js +19 -147
  44. package/dist/collection/components/eds-avatar/eds-avatar.js +1 -1
  45. package/dist/collection/components/eds-avatar/eds-avatar.stories.js +2 -2
  46. package/dist/collection/components/eds-block-break/eds-block-break.js +1 -1
  47. package/dist/collection/components/eds-breadcrump/eds-breadcrump.js +1 -1
  48. package/dist/collection/components/eds-button/eds-button.css +15 -0
  49. package/dist/collection/components/eds-button/eds-button.js +13 -6
  50. package/dist/collection/components/eds-cards/eds-card-composer/eds-card-desc/eds-card-desc.js +1 -1
  51. package/dist/collection/components/eds-cards/eds-card-cta/eds-card-cta.css +10 -1
  52. package/dist/collection/components/eds-cards/eds-card-cta/eds-card-cta.js +1 -1
  53. package/dist/collection/components/eds-cards/eds-card-feature/eds-card-feature.js +1 -1
  54. package/dist/collection/components/eds-cards/eds-card-generic/eds-card-generic.js +1 -1
  55. package/dist/collection/components/eds-cards/eds-card-hero/eds-card-hero.js +1 -1
  56. package/dist/collection/components/eds-cards/eds-card-stat/eds-card-stat.js +1 -1
  57. package/dist/collection/components/eds-charts/eds-gauge/eds-gauge.js +1 -1
  58. package/dist/collection/components/eds-code-block/eds-code-block.js +1 -1
  59. package/dist/collection/components/eds-dropdown/eds-dropdown.js +30 -4
  60. package/dist/collection/components/eds-feedback/eds-feedback.js +1 -1
  61. package/dist/collection/components/eds-footer/eds-footer.css +143 -203
  62. package/dist/collection/components/eds-footer/eds-footer.js +173 -76
  63. package/dist/collection/components/eds-footer/eds-footer.stories.js +108 -15
  64. package/dist/collection/components/eds-form/eds-form.css +37 -1
  65. package/dist/collection/components/eds-form/eds-form.js +45 -7
  66. package/dist/collection/components/eds-frame/eds-frame.js +1 -1
  67. package/dist/collection/components/eds-header/eds-header.js +1 -1
  68. package/dist/collection/components/eds-header/eds-header.stories.js +26 -12
  69. package/dist/collection/components/eds-icon-wrapper/eds-icon-wrapper.js +20 -1
  70. package/dist/collection/components/eds-icons/eds-icon-eu/eds-icon-eu.js +1 -1
  71. package/dist/collection/components/eds-icons/eds-icon-gitlab/eds-icon-gitlab.js +1 -1
  72. package/dist/collection/components/eds-icons/social/eds-icon-bluesky/eds-icon-bluesky.js +1 -1
  73. package/dist/collection/components/eds-icons/social/eds-icon-facebook/eds-icon-facebook.js +1 -1
  74. package/dist/collection/components/eds-icons/social/eds-icon-linkedin/eds-icon-linkedin.js +1 -1
  75. package/dist/collection/components/eds-icons/social/eds-icon-mastodon/eds-icon-mastodon.js +1 -1
  76. package/dist/collection/components/eds-icons/social/eds-icon-twitter/eds-icon-twitter.js +1 -1
  77. package/dist/collection/components/eds-icons/social/eds-icon-youtube/eds-icon-youtube.js +1 -1
  78. package/dist/collection/components/eds-img/eds-img.js +2 -2
  79. package/dist/collection/components/eds-img/eds-img.stories.js +29 -52
  80. package/dist/collection/components/eds-input-dropzone/eds-input-dropzone.js +1 -1
  81. package/dist/collection/components/eds-input-elements/eds-input/eds-input.js +20 -2
  82. package/dist/collection/components/eds-input-elements/eds-input-footer/eds-input-footer.css +29 -0
  83. package/dist/collection/components/eds-input-elements/eds-input-footer/eds-input-footer.js +2 -1
  84. package/dist/collection/components/eds-input-elements/eds-input-label/eds-input-label.js +1 -1
  85. package/dist/collection/components/eds-input-elements/eds-input-range/eds-input-range.js +1 -1
  86. package/dist/collection/components/eds-input-elements/eds-input-search/eds-input-search.js +1 -1
  87. package/dist/collection/components/eds-input-elements/eds-input-search/eds-input-search.stories.js +30 -0
  88. package/dist/collection/components/eds-input-elements/eds-input-select/eds-input-select.js +2 -2
  89. package/dist/collection/components/eds-input-field/eds-input-field.js +11 -5
  90. package/dist/collection/components/eds-input-field/eds-input-field.stories.js +82 -130
  91. package/dist/collection/components/eds-input-file/eds-input-file.js +1 -1
  92. package/dist/collection/components/eds-link/eds-link.js +1 -1
  93. package/dist/collection/components/eds-link/eds-link.stories.js +13 -8
  94. package/dist/collection/components/eds-logo/eds-logo.js +1 -1
  95. package/dist/collection/components/eds-modal/eds-modal.stories.js +9 -8
  96. package/dist/collection/components/eds-nps/eds-nps.css +32 -0
  97. package/dist/collection/components/eds-nps/eds-nps.js +3 -3
  98. package/dist/collection/components/eds-pagination/eds-pagination.js +2 -2
  99. package/dist/collection/components/eds-rating/eds-rating.css +9 -0
  100. package/dist/collection/components/eds-rating/eds-rating.js +2 -2
  101. package/dist/collection/components/eds-section/eds-section-core/eds-section-core.js +1 -1
  102. package/dist/collection/components/eds-section/eds-section-heading/eds-section-heading.js +2 -2
  103. package/dist/collection/components/eds-sidebar/eds-sidebar.js +2 -2
  104. package/dist/collection/components/eds-social-networks/eds-social-networks.js +1 -1
  105. package/dist/collection/components/eds-spinner/eds-spinner.js +1 -1
  106. package/dist/collection/components/eds-steps-v2/eds-steps-v2.js +1 -1
  107. package/dist/collection/components/eds-table/eds-table.css +21 -4
  108. package/dist/collection/components/eds-table/eds-table.js +17 -50
  109. package/dist/collection/components/eds-table/eds-table.stories.js +5 -109
  110. package/dist/collection/components/eds-tabs/eds-tabs.css +7 -1
  111. package/dist/collection/components/eds-tabs/eds-tabs.js +47 -9
  112. package/dist/collection/components/eds-tag/eds-tag.js +1 -1
  113. package/dist/collection/components/eds-timeline/eds-timeline.js +1 -1
  114. package/dist/collection/components/eds-toast-manager/eds-toast-manager.js +1 -1
  115. package/dist/collection/components/eds-tooltip/eds-tooltip.js +1 -1
  116. package/dist/collection/components/eds-tooltip/eds-tooltip.stories.js +1 -1
  117. package/dist/collection/components/eds-user/eds-user.js +1 -1
  118. package/dist/collection/eds-docs-ui/colors/color-palette/primary.js +1 -1
  119. package/dist/collection/eds-docs-ui/colors/color-palette/secondary.js +1 -1
  120. package/dist/collection/eds-docs-ui/colors/color-palette/support.js +1 -1
  121. package/dist/collection/eds-docs-ui/colors/gradient-palette/primary.js +1 -1
  122. package/dist/collection/eds-docs-ui/colors/gradient-palette/secondary.js +7 -7
  123. package/dist/collection/eds-docs-ui/colors/gradient-palette/support.js +3 -3
  124. package/dist/collection/eds-docs-ui/colors/use-of-colors/correct-use-of-colors.js +1 -1
  125. package/dist/collection/eds-docs-ui/colors/use-of-colors/incorrect-use-of-colors.js +1 -1
  126. package/dist/collection/eds-docs-ui/components-section/components-section.js +1 -1
  127. package/dist/collection/eds-docs-ui/design-tokens/docs-tokens/docs-tokens.js +1 -1
  128. package/dist/collection/eds-docs-ui/design-tokens/token-list/token-list.js +1 -1
  129. package/dist/collection/eds-docs-ui/design-tokens/token-radii/token-radii.js +1 -1
  130. package/dist/collection/eds-docs-ui/design-tokens/token-ratios/token-ratios.js +1 -1
  131. package/dist/collection/eds-docs-ui/design-tokens/token-shadows/token-shadows.js +1 -1
  132. package/dist/collection/eds-docs-ui/design-tokens/token-spacing/token-spacing.js +1 -1
  133. package/dist/collection/eds-docs-ui/design-tokens/token-typography/token-typography.js +1 -1
  134. package/dist/collection/eds-docs-ui/docs-palettes/docs-palettes.js +1 -1
  135. package/dist/collection/eds-docs-ui/logo/logo-space/logo-space.js +1 -1
  136. package/dist/collection/eds-docs-ui/logo/logo-variations/horizontal/logo-variations-horizontal.js +1 -1
  137. package/dist/collection/eds-docs-ui/logo/logo-variations/vertical/logo-variations-vertical.js +1 -1
  138. package/dist/collection/eds-docs-ui/logo/logo-variations-tabs/logo-variations.js +1 -1
  139. package/dist/collection/eds-docs-ui/logo/logo-wrong-usage/logo-wrong-usage.js +1 -1
  140. package/dist/collection/eds-docs-ui/svg-repository/svg-repository.js +1 -1
  141. package/dist/collection/shared-ui/eds-cookies-preference/eds-cookies-preference.js +1 -1
  142. package/dist/collection/shared-ui/eds-gitlab-contributors/eds-gitlab-contributors.css +19 -0
  143. package/dist/collection/shared-ui/eds-gitlab-contributors/eds-gitlab-contributors.js +8 -1
  144. package/dist/collection/shared-ui/eds-global-search/eds-global-search.css +166 -0
  145. package/dist/collection/shared-ui/eds-global-search/eds-global-search.js +62 -6
  146. package/dist/collection/shared-ui/eds-kg-learning-resources/eds-kg-learning-resources.css +205 -0
  147. package/dist/collection/shared-ui/eds-kg-learning-resources/eds-kg-learning-resources.js +257 -0
  148. package/dist/collection/shared-ui/eds-matomo-notice/eds-matomo-notice.css +23 -102
  149. package/dist/collection/shared-ui/eds-matomo-notice/eds-matomo-notice.js +7 -1
  150. package/dist/collection/shared-ui/eds-search-select/eds-search-select.css +203 -0
  151. package/dist/collection/shared-ui/eds-search-select/eds-search-select.js +685 -0
  152. package/dist/collection/shared-ui/eds-search-select/eds-search-select.stories.js +85 -0
  153. package/dist/collection/shared-ui/eds-trl-badge/ebrains-mark.js +26 -0
  154. package/dist/collection/shared-ui/eds-trl-badge/eds-trl-badge.css +22 -0
  155. package/dist/collection/shared-ui/eds-trl-badge/eds-trl-badge.js +321 -0
  156. package/dist/collection/shared-ui/eds-trl-badge/eds-trl-badge.stories.js +96 -0
  157. package/dist/collection/shared-ui/examples/eds-app-root/eds-app-root.js +1 -1
  158. package/dist/collection/utils/eds-form/formValidators.js +2 -1
  159. package/dist/collection/utils/eds-form/safeFormat.js +39 -0
  160. package/dist/components/components-section.js +1 -1
  161. package/dist/components/components.css +3 -4
  162. package/dist/components/components.esm.js +1 -1
  163. package/dist/components/correct-use-of-colors.js +1 -1
  164. package/dist/components/docs-palettes.js +1 -1
  165. package/dist/components/docs-tokens.js +1 -1
  166. package/dist/components/eds-accordion2.js +2 -2
  167. package/dist/components/eds-app-root.js +1 -1
  168. package/dist/components/eds-avatar2.js +1 -1
  169. package/dist/components/eds-block-break2.js +1 -1
  170. package/dist/components/eds-breadcrumb.js +1 -1
  171. package/dist/components/eds-button2.js +12 -5
  172. package/dist/components/eds-card-cta.js +2 -2
  173. package/dist/components/eds-card-desc2.js +1 -1
  174. package/dist/components/eds-card-feature.js +1 -1
  175. package/dist/components/eds-card-generic2.js +1 -1
  176. package/dist/components/eds-card-hero.js +1 -1
  177. package/dist/components/eds-card-stat.js +1 -1
  178. package/dist/components/eds-code-block2.js +1 -1
  179. package/dist/components/eds-cookies-preference.js +1 -1
  180. package/dist/components/eds-dropdown2.js +30 -4
  181. package/dist/components/eds-feedback.js +1 -1
  182. package/dist/components/eds-footer2.js +115 -26
  183. package/dist/components/eds-form.js +61 -23
  184. package/dist/components/eds-frame.js +1 -1
  185. package/dist/components/eds-gauge.js +1 -1
  186. package/dist/components/eds-gitlab-contributors.js +9 -2
  187. package/dist/components/eds-global-search.js +48 -69
  188. package/dist/components/eds-header.js +1 -1
  189. package/dist/components/eds-icon-bluesky.js +1 -1
  190. package/dist/components/eds-icon-eu.js +1 -1
  191. package/dist/components/eds-icon-facebook.js +1 -1
  192. package/dist/components/eds-icon-gitlab.js +1 -1
  193. package/dist/components/eds-icon-linkedin.js +1 -1
  194. package/dist/components/eds-icon-mastodon.js +1 -1
  195. package/dist/components/eds-icon-twitter.js +1 -1
  196. package/dist/components/eds-icon-wrapper2.js +5 -2
  197. package/dist/components/eds-icon-youtube.js +1 -1
  198. package/dist/components/eds-img2.js +2 -2
  199. package/dist/components/eds-input-dropzone2.js +1 -1
  200. package/dist/components/eds-input-field2.js +25 -25
  201. package/dist/components/eds-input-file2.js +1 -1
  202. package/dist/components/eds-input-footer2.js +43 -3
  203. package/dist/components/eds-input-label2.js +1 -1
  204. package/dist/components/eds-input-range2.js +1 -1
  205. package/dist/components/eds-input-search.js +100 -1
  206. package/dist/components/eds-input-select2.js +2 -2
  207. package/dist/components/eds-input2.js +4 -2
  208. package/dist/components/eds-kg-learning-resources.d.ts +11 -0
  209. package/dist/components/eds-kg-learning-resources.js +221 -0
  210. package/dist/components/eds-kg-web-services-select2.js +16 -22
  211. package/dist/components/eds-link2.js +1 -1
  212. package/dist/components/eds-logo2.js +1 -1
  213. package/dist/components/eds-matomo-notice2.js +8 -2
  214. package/dist/components/eds-nps2.js +4 -4
  215. package/dist/components/eds-pagination2.js +2 -2
  216. package/dist/components/eds-rating2.js +3 -3
  217. package/dist/components/eds-search-select.d.ts +11 -0
  218. package/dist/components/eds-search-select.js +6 -0
  219. package/dist/components/eds-search-select2.js +361 -0
  220. package/dist/components/eds-section-core2.js +1 -1
  221. package/dist/components/eds-section-heading2.js +2 -2
  222. package/dist/components/eds-sidebar.js +2 -2
  223. package/dist/components/eds-social-networks2.js +1 -1
  224. package/dist/components/eds-spinner2.js +1 -1
  225. package/dist/components/eds-steps-v2.js +1 -1
  226. package/dist/components/eds-table2.js +31 -53
  227. package/dist/components/eds-tabs.js +48 -10
  228. package/dist/components/eds-tag2.js +1 -1
  229. package/dist/components/eds-timeline.js +1 -1
  230. package/dist/components/eds-toast-manager.js +1 -1
  231. package/dist/components/eds-tooltip2.js +1 -1
  232. package/dist/components/eds-trl-badge.d.ts +11 -0
  233. package/dist/components/eds-trl-badge.js +204 -0
  234. package/dist/components/eds-user.js +1 -1
  235. package/dist/components/incorrect-use-of-colors.js +1 -1
  236. package/dist/components/logo-space.js +19 -25
  237. package/dist/components/logo-variations-horizontal2.js +1 -1
  238. package/dist/components/logo-variations-tabs.js +1 -1
  239. package/dist/components/logo-variations-vertical2.js +1 -1
  240. package/dist/components/logo-wrong-usage.js +1 -1
  241. package/dist/components/p-00ba405d.entry.js +1 -0
  242. package/dist/components/p-03342030.entry.js +1 -0
  243. package/dist/components/{p-0fe10e6c.entry.js → p-0e2bac0f.entry.js} +1 -1
  244. package/dist/components/{p-7aa4edef.entry.js → p-12acc48d.entry.js} +1 -1
  245. package/dist/components/p-18399fe1.entry.js +1 -0
  246. package/dist/components/p-1e6f0572.entry.js +1 -0
  247. package/dist/components/{p-c46675c8.entry.js → p-1fbcc480.entry.js} +1 -1
  248. package/dist/components/{p-dfe93385.entry.js → p-25729ade.entry.js} +1 -1
  249. package/dist/components/p-27e093c3.entry.js +1 -0
  250. package/dist/components/{p-a6dc1f88.entry.js → p-37ef07d9.entry.js} +1 -1
  251. package/dist/components/{p-74b9c9a8.entry.js → p-3d1bb2fe.entry.js} +1 -1
  252. package/dist/components/{p-940a2d42.entry.js → p-42791331.entry.js} +1 -1
  253. package/dist/components/p-5ff4b1d0.entry.js +1 -0
  254. package/dist/components/{p-d16b5363.entry.js → p-62580004.entry.js} +1 -1
  255. package/dist/components/{p-d2576747.entry.js → p-62f53e7a.entry.js} +1 -1
  256. package/dist/components/p-6be1730a.entry.js +1 -0
  257. package/dist/components/p-786ff09b.entry.js +1 -0
  258. package/dist/components/p-80a32e20.entry.js +1 -0
  259. package/dist/components/p-85476a6f.entry.js +9 -0
  260. package/dist/components/{p-a63e14bb.entry.js → p-8a483358.entry.js} +1 -1
  261. package/dist/components/{p-04e9c2d7.entry.js → p-b1a10842.entry.js} +1 -1
  262. package/dist/components/p-bdcb71e1.entry.js +1 -0
  263. package/dist/components/p-c2127276.entry.js +1 -0
  264. package/dist/components/p-c3ee9163.entry.js +1 -0
  265. package/dist/components/{p-f55dd314.entry.js → p-c4cfbf98.entry.js} +1 -1
  266. package/dist/components/p-c65082fe.entry.js +1 -0
  267. package/dist/components/p-cc096938.entry.js +1 -0
  268. package/dist/components/p-d59d6fda.entry.js +1 -0
  269. package/dist/components/p-e027bc90.entry.js +1 -0
  270. package/dist/components/{p-f364296f.entry.js → p-e339d0b5.entry.js} +1 -1
  271. package/dist/components/{p-0d7aee0b.entry.js → p-e4df206e.entry.js} +1 -1
  272. package/dist/components/{p-c2fc62f7.entry.js → p-e71a4f29.entry.js} +1 -1
  273. package/dist/components/{p-773bd015.entry.js → p-e9e6ec19.entry.js} +1 -1
  274. package/dist/components/p-f4d2f882.entry.js +1 -0
  275. package/dist/components/{p-d1b3aa52.entry.js → p-f9a9fa34.entry.js} +1 -1
  276. package/dist/components/primary.js +1 -1
  277. package/dist/components/primary2.js +1 -1
  278. package/dist/components/secondary.js +1 -1
  279. package/dist/components/secondary2.js +7 -7
  280. package/dist/components/support.js +1 -1
  281. package/dist/components/support2.js +3 -3
  282. package/dist/components/svg-repository.js +19 -25
  283. package/dist/components/token-list2.js +1 -1
  284. package/dist/components/token-radii2.js +1 -1
  285. package/dist/components/token-ratios.js +1 -1
  286. package/dist/components/token-shadows2.js +1 -1
  287. package/dist/components/token-spacing.js +1 -1
  288. package/dist/components/token-typography.js +1 -1
  289. package/dist/esm/color-primary-palette_6.entry.js +14 -14
  290. package/dist/esm/components-section.entry.js +1 -1
  291. package/dist/esm/components.js +1 -1
  292. package/dist/esm/correct-use-of-colors.entry.js +1 -1
  293. package/dist/esm/docs-palettes.entry.js +1 -1
  294. package/dist/esm/docs-tokens.entry.js +1 -1
  295. package/dist/esm/{eds-accordion_52.entry.js → eds-accordion_53.entry.js} +846 -207
  296. package/dist/esm/eds-app-root.entry.js +1 -1
  297. package/dist/esm/eds-cookies-preference.entry.js +1 -1
  298. package/dist/esm/eds-feedback.entry.js +1 -1
  299. package/dist/esm/eds-frame.entry.js +1 -1
  300. package/dist/esm/eds-gauge.entry.js +1 -1
  301. package/dist/esm/eds-gitlab-contributors.entry.js +9 -2
  302. package/dist/esm/eds-icon-bluesky.entry.js +1 -1
  303. package/dist/esm/eds-icon-eu.entry.js +1 -1
  304. package/dist/esm/eds-icon-facebook.entry.js +1 -1
  305. package/dist/esm/eds-icon-gitlab.entry.js +1 -1
  306. package/dist/esm/eds-icon-linkedin.entry.js +1 -1
  307. package/dist/esm/eds-icon-mastodon.entry.js +1 -1
  308. package/dist/esm/eds-icon-twitter.entry.js +1 -1
  309. package/dist/esm/eds-icon-youtube.entry.js +1 -1
  310. package/dist/{components/eds-input-search2.js → esm/eds-input-search.entry.js} +9 -39
  311. package/dist/esm/eds-section-core_2.entry.js +3 -3
  312. package/dist/esm/eds-timeline.entry.js +1 -1
  313. package/dist/esm/eds-toast-manager.entry.js +1 -1
  314. package/dist/esm/eds-trl-badge.entry.js +177 -0
  315. package/dist/esm/incorrect-use-of-colors.entry.js +1 -1
  316. package/dist/esm/index-870ab08f.js +10 -2
  317. package/dist/esm/loader.js +1 -1
  318. package/dist/esm/logo-space.entry.js +1 -1
  319. package/dist/esm/logo-variations-horizontal_2.entry.js +2 -2
  320. package/dist/esm/logo-variations-tabs.entry.js +1 -1
  321. package/dist/esm/logo-wrong-usage.entry.js +1 -1
  322. package/dist/esm/svg-repository.entry.js +1 -1
  323. package/dist/esm/token-list_3.entry.js +3 -3
  324. package/dist/esm/token-ratios.entry.js +1 -1
  325. package/dist/esm/token-spacing.entry.js +1 -1
  326. package/dist/esm/token-typography.entry.js +1 -1
  327. package/dist/hydrate/index.js +1222 -207
  328. package/dist/hydrate/index.mjs +1222 -207
  329. package/dist/types/components/eds-accordion/eds-accordion.stories.d.ts +4 -8
  330. package/dist/types/components/eds-alert/eds-alert.stories.d.ts +7 -73
  331. package/dist/types/components/eds-button/eds-button.d.ts +1 -1
  332. package/dist/types/components/eds-dropdown/eds-dropdown.d.ts +1 -0
  333. package/dist/types/components/eds-footer/eds-footer.d.ts +84 -55
  334. package/dist/types/components/eds-footer/eds-footer.stories.d.ts +62 -1
  335. package/dist/types/components/eds-form/eds-form.d.ts +10 -0
  336. package/dist/types/components/eds-header/eds-header.stories.d.ts +6 -6
  337. package/dist/types/components/eds-icon-wrapper/eds-icon-wrapper.d.ts +8 -0
  338. package/dist/types/components/eds-img/eds-img.stories.d.ts +6 -20
  339. package/dist/types/components/eds-input-elements/eds-input/eds-input.d.ts +7 -0
  340. package/dist/types/components/eds-input-elements/eds-input-search/eds-input-search.stories.d.ts +36 -0
  341. package/dist/types/components/eds-input-field/eds-input-field.stories.d.ts +97 -38
  342. package/dist/types/components/eds-link/eds-link.stories.d.ts +9 -6
  343. package/dist/types/components/eds-table/eds-table.d.ts +8 -14
  344. package/dist/types/components/eds-table/eds-table.stories.d.ts +0 -107
  345. package/dist/types/components/eds-tabs/eds-tabs.d.ts +10 -0
  346. package/dist/types/components.d.ts +507 -86
  347. package/dist/types/shared-ui/eds-global-search/eds-global-search.d.ts +12 -0
  348. package/dist/types/shared-ui/eds-kg-learning-resources/eds-kg-learning-resources.d.ts +60 -0
  349. package/dist/types/shared-ui/eds-search-select/eds-search-select.d.ts +98 -0
  350. package/dist/types/shared-ui/eds-search-select/eds-search-select.stories.d.ts +81 -0
  351. package/dist/types/shared-ui/eds-trl-badge/ebrains-mark.d.ts +7 -0
  352. package/dist/types/shared-ui/eds-trl-badge/eds-trl-badge.d.ts +54 -0
  353. package/dist/types/shared-ui/eds-trl-badge/eds-trl-badge.stories.d.ts +112 -0
  354. package/dist/types/utils/eds-form/safeFormat.d.ts +21 -0
  355. package/package.json +1 -1
  356. package/dist/components/p-18e852e1.entry.js +0 -1
  357. package/dist/components/p-3ccd6948.entry.js +0 -1
  358. package/dist/components/p-3d3841d6.entry.js +0 -1
  359. package/dist/components/p-3f38df99.entry.js +0 -1
  360. package/dist/components/p-527e71d0.entry.js +0 -1
  361. package/dist/components/p-55047f7f.entry.js +0 -9
  362. package/dist/components/p-64c23098.entry.js +0 -1
  363. package/dist/components/p-7b93a385.entry.js +0 -1
  364. package/dist/components/p-878f65a6.entry.js +0 -1
  365. package/dist/components/p-92f6d9c0.entry.js +0 -1
  366. package/dist/components/p-9eedf771.entry.js +0 -1
  367. package/dist/components/p-b4355cec.entry.js +0 -1
  368. package/dist/components/p-d2f17fac.entry.js +0 -1
  369. package/dist/components/p-db5eea95.entry.js +0 -1
  370. package/dist/components/p-e205c269.entry.js +0 -1
  371. package/dist/components/p-f88b5f21.entry.js +0 -1
@@ -1,46 +1,127 @@
1
1
  import { h } from "@stencil/core";
2
2
  /**
3
- * `EdsFooter` is a footer component designed for the EBRAINS platform, featuring social links,
4
- * legal information, and an optional cookie preferences button. It includes a "Back to top"
5
- * button and displays an acknowledgment for Horizon Europe funding.
3
+ * EBRAINS-wide default link columns. Used when a consumer doesn't pass
4
+ * the `columns` prop. URLs are absolute so the same footer renders
5
+ * correctly from any app's domain (handbook.ebrains.eu, forms.ebrains.eu,
6
+ * design.ebrains.eu, …) — the previous eds-docs design used relative
7
+ * paths which only worked from design.ebrains.eu itself.
6
8
  *
7
- * Key Features:
8
- * - Social Network Links: Optionally display a section for social media links.
9
- * - Legal and Funding Information: Includes text for legal disclaimers and funding acknowledgments.
10
- * - Cookie Preferences: Optionally display a "Cookies Preferences" button.
11
- * - Back to Top Button: Smoothly scrolls the page back to the top when clicked.
9
+ * If EBRAINS adds / renames a canonical resource, change it here once
10
+ * and every consumer's footer updates on the next component release.
11
+ */
12
+ const DEFAULT_COLUMNS = [
13
+ {
14
+ heading: 'Resources',
15
+ links: [
16
+ { label: 'Documentation', href: 'https://design.ebrains.eu/get-started/', external: true },
17
+ { label: 'Components', href: 'https://design.ebrains.eu/ui-components/', external: true },
18
+ { label: 'Foundations', href: 'https://design.ebrains.eu/foundations/', external: true },
19
+ { label: 'Analytics', href: 'https://design.ebrains.eu/analytics/', external: true },
20
+ ],
21
+ },
22
+ {
23
+ heading: 'Community',
24
+ links: [
25
+ { label: 'GitLab', href: 'https://gitlab.ebrains.eu/ri/tech-hub/ebrains-ui-ecosystem/', external: true },
26
+ { label: 'Storybook', href: 'https://storybook.design.ebrains.eu', external: true },
27
+ { label: 'Report Issues', href: 'https://gitlab.ebrains.eu/ri/tech-hub/ebrains-ui-ecosystem/-/issues', external: true },
28
+ { label: 'Contribute', href: 'https://design.ebrains.eu/get-started/contributing/', external: true },
29
+ ],
30
+ },
31
+ {
32
+ heading: 'Legal',
33
+ links: [
34
+ { label: 'MIT License' },
35
+ { label: 'Cookie Preferences', action: 'cookies' },
36
+ ],
37
+ },
38
+ ];
39
+ /**
40
+ * `EdsFooter` is the EBRAINS-wide footer component.
41
+ *
42
+ * Renders a 4-column layout matching the eds-docs landing footer:
43
+ * [ Brand (EU flag + funding text + copyright) | Resources | Community | Legal ]
12
44
  *
13
- * This component is ideal for maintaining consistent branding, legal disclaimers, and navigational elements
14
- * across the EBRAINS platform, with options for social links and a "Back to top" button.
45
+ * Defaults are designed so a consumer that writes `<eds-footer></eds-footer>`
46
+ * with no props gets the full canonical EBRAINS footer rendered same
47
+ * brand block, same link columns, same dark theme as the eds-docs
48
+ * landing page. The previous minimal-strip footer is replaced; consumers
49
+ * that need different link content pass the `columns` prop (array or
50
+ * JSON-stringified array for HTML attribute use).
51
+ *
52
+ * Configurability without breakage:
53
+ * - All previous props remain (`social`, `variant`, `fundedBy`,
54
+ * `rightsReserved`, `enableScrollTop`, `enableCookiesSettings`,
55
+ * `cookiesPreferences`, `backToTopAriaLabel`). Their meanings are
56
+ * preserved.
57
+ * - New `columns` prop is optional — omit it for the defaults.
58
+ * - The `enableCookiesSettings` toggle now decides whether any column
59
+ * link with `action: 'cookies'` is rendered (default false; pass
60
+ * true to surface the Cookie Preferences entry in the Legal column).
15
61
  */
16
62
  export class EdsFooter {
17
63
  constructor() {
18
- /**
19
- * Scrolls the page smoothly back to the top.
20
- * Called when the "Back to top" button is clicked.
21
- * @private
22
- */
23
64
  this.backToTop = () => {
24
65
  window.scrollTo({ top: 0, behavior: 'smooth' });
25
66
  };
67
+ this.emitCookies = () => {
68
+ this.cookies.emit('toggle');
69
+ };
26
70
  this.social = false;
27
- this.variant = 'default';
71
+ this.variant = 'inverse';
28
72
  this.enableScrollTop = false;
29
73
  this.fundedBy = 'EBRAINS is funded by the Horizon Europe Framework Programme.';
30
74
  this.rightsReserved = `${new Date().getFullYear()} EBRAINS. All rights reserved.`;
31
- this.cookiesPreferences = 'Cookies preferences';
75
+ this.cookiesPreferences = 'Cookie Preferences';
32
76
  this.enableCookiesSettings = false;
33
77
  this.backToTopAriaLabel = 'Back to Top';
34
- this.showMatomoNotice = false;
78
+ this.columns = undefined;
79
+ this.resolvedColumns = DEFAULT_COLUMNS;
80
+ }
81
+ componentWillLoad() {
82
+ this.resolvedColumns = this.parseColumns(this.columns);
83
+ }
84
+ onColumnsChange(value) {
85
+ this.resolvedColumns = this.parseColumns(value);
86
+ }
87
+ /**
88
+ * Resolve the `columns` prop to a usable array.
89
+ * - undefined / null → defaults
90
+ * - JSON-parseable str → parsed array
91
+ * - already an array → used as-is
92
+ * - anything else (malformed JSON, wrong shape) → defaults + console warning
93
+ *
94
+ * Defensive parsing so a typo in a Hugo template's attribute doesn't
95
+ * render an empty footer in production. Failure logs a warning but
96
+ * keeps the footer working with sensible defaults.
97
+ */
98
+ parseColumns(value) {
99
+ if (value === undefined || value === null || value === '')
100
+ return DEFAULT_COLUMNS;
101
+ if (Array.isArray(value))
102
+ return value;
103
+ if (typeof value === 'string') {
104
+ try {
105
+ const parsed = JSON.parse(value);
106
+ if (Array.isArray(parsed))
107
+ return parsed;
108
+ console.warn('eds-footer: `columns` JSON parsed but is not an array; using defaults');
109
+ return DEFAULT_COLUMNS;
110
+ }
111
+ catch (e) {
112
+ console.warn('eds-footer: failed to parse `columns` JSON, using defaults', e);
113
+ return DEFAULT_COLUMNS;
114
+ }
115
+ }
116
+ return DEFAULT_COLUMNS;
35
117
  }
36
118
  componentDidLoad() {
37
119
  var _a;
38
120
  this.backBtn = (_a = this.el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#toTop');
39
121
  }
40
122
  handleScroll() {
41
- if (!this.backBtn) {
123
+ if (!this.backBtn)
42
124
  return;
43
- }
44
125
  const shouldShow = window.scrollY > 100 && document.body.scrollHeight > window.innerHeight;
45
126
  this.backBtn.style.opacity = shouldShow ? '1' : '0';
46
127
  this.backBtn.style.pointerEvents = shouldShow ? 'auto' : 'none';
@@ -50,24 +131,35 @@ export class EdsFooter {
50
131
  btn.setAttribute('tabindex', shouldShow ? '0' : '-1');
51
132
  }
52
133
  }
53
- toggleCookiesConsent() {
54
- this.cookies.emit('toggle');
55
- }
56
134
  /**
57
- * Renders the footer component with optional sections and elements,
58
- * including social network links, a Horizon Europe funding acknowledgment, and
59
- * legal links such as "Cookies Preferences" and copyright information.
135
+ * Render one link inside a column.
136
+ * - `action: 'cookies'` button-like anchor that fires the cookies event
137
+ * - `href` present → real anchor (target=_blank when `external`)
138
+ * - neither → plain text span (e.g. "MIT License")
60
139
  */
140
+ renderLink(link, index) {
141
+ if (link.action === 'cookies') {
142
+ if (!this.enableCookiesSettings)
143
+ return null;
144
+ return (h("li", { key: `cookies-${index}` }, h("a", { href: "javascript:void(0)", class: "footer-link", onClick: this.emitCookies, role: "button" }, this.cookiesPreferences || link.label)));
145
+ }
146
+ if (link.href) {
147
+ const external = link.external === true;
148
+ return (h("li", { key: `${link.label}-${index}` }, h("a", Object.assign({ class: "footer-link", href: link.href }, (external ? { target: '_blank', rel: 'noopener noreferrer' } : {})), link.label)));
149
+ }
150
+ return (h("li", { key: `text-${index}` }, h("span", { class: "footer-text-item" }, link.label)));
151
+ }
61
152
  render() {
62
153
  const year = new Date().getFullYear();
63
154
  const rights = this.rightsReserved || `${year} EBRAINS. All rights reserved.`;
64
155
  const isInverse = this.variant === 'inverse';
65
- const footerClasses = isInverse ? 'bg-strongest text-inverse' : '';
66
- const borderClasses = isInverse ? 'border-inverse-softer' : 'border-softest';
67
- const textClasses = isInverse ? 'text-inverse' : 'text-default';
68
- return (h("footer", { key: 'ffe47afda9981e367f24d2525a5b21e96f4f3d10', class: footerClasses }, this.social ? (h("div", { class: `${borderClasses} border-t-2 pt-20 md:pt-28` }, h("div", { class: "container pb-20" }, h("div", { class: "grid-layout" }, h("div", { class: "grid-col-span-12 lg:grid-col-span-5" }, h("eds-social-networks", { class: "mt-28", variant: this.variant })))))) : null, h("div", { key: '2e884f06ca55ea5837aabfd7d726a79b72365ab3', class: `${borderClasses} ${this.social ? 'border-t-2' : ''} pb-28 pt-20 md:pt-28` }, h("div", { key: 'f601602dd39c564ce77d978325cbacaa752bd5f0', class: "container flex items-center gap-20 lg:flex-nowrap" }, h("div", { key: '94d6bf12bca8a37560124de2a9114a4566494883', class: "flex items-center gap-x-12" }, h("a", { key: '8c9bf0a41cce7e043311b39c6418d2dc3541694f', target: "_blank", rel: "noopener noreferrer", class: "effect-focus focus-visible:rounded-xs flex w-[54px] ml-0", href: "https://research-and-innovation.ec.europa.eu/funding/funding-opportunities/funding-programmes-and-open-calls/horizon-europe_en", "aria-label": "Learn about Horizon Europe funding" }, h("svg", { key: '5d0c96911aa0069dd7c0ef6a5690d5ac59dbc737', class: "h-auto w-full", width: "63", height: "50", viewBox: "0 0 640 480", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, h("path", { key: 'bab3fd3f37857e99c2a525b7a9553d4c706d247c', d: "M0 0h640v480H0V0z", fill: "#039" }), h("path", { key: 'e77d6f1fc21f36083196adcb4f6b7a3e70105b0f', d: "M325.032 93.15l17.513-.398-14.401 9.972 5.789 16.53L320 108.639l-13.933 10.615 5.789-16.531-14.399-9.97 17.51.396L320 76.374l5.032 16.775zm0 284.444l17.513-.398-14.401 9.972 5.789 16.53L320 393.083l-13.933 10.615 5.789-16.531-14.399-9.97 17.51.397L320 360.818l5.032 16.776zm-147.25-158.983l5.029 16.761 17.511-.397-14.4 9.969 5.79 16.533-13.933-10.616-13.932 10.616 5.788-16.531-14.401-9.971 17.511.397 5.028-16.761.004-.015.001.003.001-.003.003.015zm77.885-105.334l17.511-.397-14.401 9.971 5.79 16.531-13.932-10.614-13.933 10.615 5.788-16.531-14.4-9.971h.005l-.003-.001 17.51.397 5.033-16.775 5.032 16.775zm-52.729 52.729l17.511-.398h.002l-14.402 9.971 5.79 16.531-13.933-10.615-13.932 10.615 5.789-16.532-14.4-9.97 17.51.397 5.033-16.776 5.032 16.777zm-5.001 125.803l5.027 16.759 17.513-.397-14.401 9.971 5.79 16.531-.005-.005.003.006-13.932-10.615-13.933 10.615 5.788-16.532-14.398-9.97 17.51.396 5.029-16.759.004-.016v.003l.002-.003.003.016zm51.445 47.71l5.027 16.76 17.513-.397-14.401 9.97 5.791 16.532-.004-.004.002.004-13.933-10.615-13.933 10.615 5.788-16.532-14.398-9.97 17.51.397 5.029-16.76.004-.016v.003l.002-.003.003.016zm217.873-104.147l17.511-.397-14.401 9.969 5.79 16.533-13.934-10.616-13.931 10.616 5.789-16.533-14.399-9.969 17.509.397 5.034-16.776 5.032 16.776zm-63.958-95.997l-5.786-16.522 14.401-9.972-17.511.398-5.033-16.778-5.034 16.777-17.51-.398 14.4 9.972-5.789 16.53 13.932-10.614 13.934 10.614-.004-.007zm38.797 42.122l13.934 10.614-.004-.007-5.787-16.524 14.401-9.971-17.51.399-5.033-16.778-5.033 16.777-17.51-.398h-.001l14.399 9.972-5.787 16.529 13.931-10.613zm5.007 127.071l17.51-.397-14.4 9.971 5.79 16.531-13.933-10.614-13.932 10.615 5.788-16.531-14.401-9.971h.005l-.003-.001 17.51.397 5.033-16.775 5.033 16.775zm-51.446 47.711l17.511-.397-14.4 9.97 5.79 16.532-13.933-10.615-13.933 10.615 5.789-16.531-14.401-9.971h.002l17.51.397 5.033-16.776 5.032 16.776z", fill: "#FC0" })))), h("div", { key: '3057a627d8cc6e524f6381f21bb34b549d45021f' }, h("div", { key: 'd6397eaa434f15d415bff0c5171b4f71295dabc3', class: `f-ui-02 ${textClasses}` }, h("p", { key: 'cc9e370cd5b4238fcd76bc8f1f84c54af2873bab' }, this.fundedBy), h("div", { key: '9af9a16cf3cc6fc4223c1b5eac13f96894b92962', class: "mt-4 flex flex-wrap gap-12 lg:flex-nowrap inline-block" }, h("span", { key: 'e86c83c7504f60831dc9d4239b3e2b551b2765b6', class: "effect-focus !no-underline decoration-2 underline-offset-4 hover:!underline mr-4" }, "\u00A9 ", rights), this.enableCookiesSettings ? (h("eds-link", { label: this.cookiesPreferences, intent: "underline", size: "small", onClick: () => {
69
- this.toggleCookiesConsent();
70
- } })) : null))), h("div", { key: 'd2dcb8a3a99c5aa368d6d710e125e3a9f8fefd25', class: "ml-auto pl-12" }, this.enableScrollTop ? (h("div", { id: "toTop", class: "transition-all transition duration-75 opacity-0" }, h("eds-button", { id: "backToTop", "aria-label": this.backToTopAriaLabel, intent: isInverse ? 'ghostInverse' : 'ghost', size: "large", icon: "chevron-up", onClick: this.backToTop, tabindex: "-1" }))) : null)))));
156
+ // Class hooks driven by variant the CSS file styles each
157
+ // selector independently rather than relying on prop-based
158
+ // inline styles, so theme tokens stay overridable from outside
159
+ // via the host's CSS custom properties.
160
+ const rootClasses = ['eds-footer-root', isInverse ? 'theme-inverse' : 'theme-default']
161
+ .join(' ');
162
+ return (h("footer", { key: 'b09063376e3bd78845302473a96884bd473cea09', class: rootClasses }, this.social ? (h("div", { class: "footer-social" }, h("div", { class: "footer-container" }, h("eds-social-networks", { variant: this.variant })))) : null, h("div", { key: '3aeb8f496bb4c3c73da907ba9b9fbb72841be213', class: "footer-container" }, h("div", { key: 'e7e33ce7dee8079a9aff17d45963dfaff9576121', class: "footer-grid" }, h("div", { key: 'e6fc738e086774e114c5ceef1b82fea2e2840990', class: "footer-brand" }, h("div", { key: '96f7030269174c122ffe0117897a79b00020dd29', class: "footer-brand-row" }, h("a", { key: '5967c33efff435ceee2a45c21cae67749b91b9ba', target: "_blank", rel: "noopener noreferrer", class: "footer-flag-link", href: "https://research-and-innovation.ec.europa.eu/funding/funding-opportunities/funding-programmes-and-open-calls/horizon-europe_en", "aria-label": "Learn about Horizon Europe funding" }, h("svg", { key: '3de7debe64d431152e47a4daefb7c9facf7bf951', class: "footer-flag-svg", width: "63", height: "50", viewBox: "0 0 640 480", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, h("path", { key: '50e3f0c5ae41e3e7cc5689ddf01a8944a6c5d2eb', d: "M0 0h640v480H0V0z", fill: "#039" }), h("path", { key: '2c0f61e6de734d7214accd10cefd3a39e31f36a1', d: "M325.032 93.15l17.513-.398-14.401 9.972 5.789 16.53L320 108.639l-13.933 10.615 5.789-16.531-14.399-9.97 17.51.396L320 76.374l5.032 16.775zm0 284.444l17.513-.398-14.401 9.972 5.789 16.53L320 393.083l-13.933 10.615 5.789-16.531-14.399-9.97 17.51.397L320 360.818l5.032 16.776zm-147.25-158.983l5.029 16.761 17.511-.397-14.4 9.969 5.79 16.533-13.933-10.616-13.932 10.616 5.788-16.531-14.401-9.971 17.511.397 5.028-16.761.004-.015.001.003.001-.003.003.015zm77.885-105.334l17.511-.397-14.401 9.971 5.79 16.531-13.932-10.614-13.933 10.615 5.788-16.531-14.4-9.971h.005l-.003-.001 17.51.397 5.033-16.775 5.032 16.775zm-52.729 52.729l17.511-.398h.002l-14.402 9.971 5.79 16.531-13.933-10.615-13.932 10.615 5.789-16.532-14.4-9.97 17.51.397 5.033-16.776 5.032 16.777zm-5.001 125.803l5.027 16.759 17.513-.397-14.401 9.971 5.79 16.531-.005-.005.003.006-13.932-10.615-13.933 10.615 5.788-16.532-14.398-9.97 17.51.396 5.029-16.759.004-.016v.003l.002-.003.003.016zm51.445 47.71l5.027 16.76 17.513-.397-14.401 9.97 5.791 16.532-.004-.004.002.004-13.933-10.615-13.933 10.615 5.788-16.532-14.398-9.97 17.51.397 5.029-16.76.004-.016v.003l.002-.003.003.016zm217.873-104.147l17.511-.397-14.401 9.969 5.79 16.533-13.934-10.616-13.931 10.616 5.789-16.533-14.399-9.969 17.509.397 5.034-16.776 5.032 16.776zm-63.958-95.997l-5.786-16.522 14.401-9.972-17.511.398-5.033-16.778-5.034 16.777-17.51-.398 14.4 9.972-5.789 16.53 13.932-10.614 13.934 10.614-.004-.007zm38.797 42.122l13.934 10.614-.004-.007-5.787-16.524 14.401-9.971-17.51.399-5.033-16.778-5.033 16.777-17.51-.398h-.001l14.399 9.972-5.787 16.529 13.931-10.613zm5.007 127.071l17.51-.397-14.4 9.971 5.79 16.531-13.933-10.614-13.932 10.615 5.788-16.531-14.401-9.971h.005l-.003-.001 17.51.397 5.033-16.775 5.033 16.775zm-51.446 47.711l17.511-.397-14.4 9.97 5.79 16.532-13.933-10.615-13.933 10.615 5.789-16.531-14.401-9.971h.002l17.51.397 5.033-16.776 5.032 16.776z", fill: "#FC0" }))), h("p", { key: '9ff8e10db0e213754bfc73bcce1b3dd36bc62e30', class: "footer-funded" }, this.fundedBy)), h("p", { key: 'a24c4fbfe48c4c3c8d076f24da9c84b739a982d8', class: "footer-copyright" }, "\u00A9 ", rights)), this.resolvedColumns.map((col, ci) => (h("div", { class: "footer-column", key: `col-${ci}` }, h("h4", { class: "footer-column-heading" }, col.heading), h("ul", { class: "footer-column-list" }, (col.links || []).map((link, li) => this.renderLink(link, li)))))))), this.enableScrollTop ? (h("div", { id: "toTop", class: "footer-back-to-top" }, h("eds-button", { id: "backToTop", "aria-label": this.backToTopAriaLabel, intent: isInverse ? 'ghostInverse' : 'ghost', size: "large", icon: "chevron-up", onClick: this.backToTop, tabindex: "-1" }))) : null));
71
163
  }
72
164
  static get is() { return "eds-footer"; }
73
165
  static get encapsulation() { return "shadow"; }
@@ -94,11 +186,8 @@ export class EdsFooter {
94
186
  "required": false,
95
187
  "optional": false,
96
188
  "docs": {
97
- "tags": [{
98
- "name": "type",
99
- "text": "{boolean}"
100
- }],
101
- "text": "Determines if the social network section should be displayed.\nAdds top padding when true."
189
+ "tags": [],
190
+ "text": "Show the eds-social-networks section above the main grid."
102
191
  },
103
192
  "attribute": "social",
104
193
  "reflect": false,
@@ -115,15 +204,12 @@ export class EdsFooter {
115
204
  "required": false,
116
205
  "optional": false,
117
206
  "docs": {
118
- "tags": [{
119
- "name": "type",
120
- "text": "{'default' | 'inverse'}"
121
- }],
122
- "text": "Controls the visual variant of the footer.\n- 'default': Light background with dark text\n- 'inverse': Dark/black background with white text"
207
+ "tags": [],
208
+ "text": "Theme variant. Defaults to `inverse` (dark) because the canonical\nEBRAINS footer design uses a dark backdrop with light text. Pass\n`variant=\"default\"` for the light-on-light treatment if an app's\npage palette demands it."
123
209
  },
124
210
  "attribute": "variant",
125
- "reflect": false,
126
- "defaultValue": "'default'"
211
+ "reflect": true,
212
+ "defaultValue": "'inverse'"
127
213
  },
128
214
  "enableScrollTop": {
129
215
  "type": "boolean",
@@ -136,11 +222,8 @@ export class EdsFooter {
136
222
  "required": false,
137
223
  "optional": false,
138
224
  "docs": {
139
- "tags": [{
140
- "name": "type",
141
- "text": "{boolean}"
142
- }],
143
- "text": "Controls the display of the \"Back to Top\" button.\nWhen true, the button appears in the footer."
225
+ "tags": [],
226
+ "text": "Float a \"Back to top\" button at the top-right of the footer."
144
227
  },
145
228
  "attribute": "enable-scroll-top",
146
229
  "reflect": false,
@@ -157,11 +240,8 @@ export class EdsFooter {
157
240
  "required": false,
158
241
  "optional": false,
159
242
  "docs": {
160
- "tags": [{
161
- "name": "type",
162
- "text": "{string}"
163
- }],
164
- "text": "Controls the display of the \"Founded By\" text."
243
+ "tags": [],
244
+ "text": "\"EBRAINS is funded by\u2026\" line shown next to the EU flag in the brand column."
165
245
  },
166
246
  "attribute": "funded-by",
167
247
  "reflect": false,
@@ -178,11 +258,8 @@ export class EdsFooter {
178
258
  "required": false,
179
259
  "optional": false,
180
260
  "docs": {
181
- "tags": [{
182
- "name": "type",
183
- "text": "{string}"
184
- }],
185
- "text": "Controls the display of the \"Rights Reserved\" text."
261
+ "tags": [],
262
+ "text": "\"\u00A9 {year} EBRAINS. All rights reserved.\" line shown below the funding text."
186
263
  },
187
264
  "attribute": "rights-reserved",
188
265
  "reflect": false,
@@ -199,15 +276,12 @@ export class EdsFooter {
199
276
  "required": false,
200
277
  "optional": false,
201
278
  "docs": {
202
- "tags": [{
203
- "name": "type",
204
- "text": "{string}"
205
- }],
206
- "text": "Controls the display of the \"Cookies preferences\" text."
279
+ "tags": [],
280
+ "text": "Label used for any link with `action: 'cookies'` \u2014 overrides the column's `label`."
207
281
  },
208
282
  "attribute": "cookies-preferences",
209
283
  "reflect": false,
210
- "defaultValue": "'Cookies preferences'"
284
+ "defaultValue": "'Cookie Preferences'"
211
285
  },
212
286
  "enableCookiesSettings": {
213
287
  "type": "boolean",
@@ -220,11 +294,8 @@ export class EdsFooter {
220
294
  "required": false,
221
295
  "optional": false,
222
296
  "docs": {
223
- "tags": [{
224
- "name": "type",
225
- "text": "{string}"
226
- }],
227
- "text": "Controls the display of the \"Cookies preferences\" link."
297
+ "tags": [],
298
+ "text": "When false, any column link with `action: 'cookies'` is hidden.\nDefault false so adding the footer to a page without a Matomo\nnotice / cookie banner doesn't surface a non-functional link.\nSet true once you've also mounted `<eds-matomo-notice>` on the page."
228
299
  },
229
300
  "attribute": "enable-cookies-settings",
230
301
  "reflect": false,
@@ -241,21 +312,41 @@ export class EdsFooter {
241
312
  "required": false,
242
313
  "optional": false,
243
314
  "docs": {
244
- "tags": [{
245
- "name": "type",
246
- "text": "{string}"
247
- }],
248
- "text": "Controls the display of the \"Back to Top\" aria label text."
315
+ "tags": [],
316
+ "text": "ARIA label for the \"Back to top\" floating button."
249
317
  },
250
318
  "attribute": "back-to-top-aria-label",
251
319
  "reflect": false,
252
320
  "defaultValue": "'Back to Top'"
321
+ },
322
+ "columns": {
323
+ "type": "string",
324
+ "mutable": false,
325
+ "complexType": {
326
+ "original": "EdsFooterColumn[] | string",
327
+ "resolved": "EdsFooterColumn[] | string",
328
+ "references": {
329
+ "EdsFooterColumn": {
330
+ "location": "local",
331
+ "path": "/Users/nikolaosgeorgomanolis/Documents/EBRAINS/Projects/ebrains-ui-ecosystem/packages/components/src/components/eds-footer/eds-footer.tsx",
332
+ "id": "../../../packages/components/src/components/eds-footer/eds-footer.tsx::EdsFooterColumn"
333
+ }
334
+ }
335
+ },
336
+ "required": false,
337
+ "optional": true,
338
+ "docs": {
339
+ "tags": [],
340
+ "text": "Custom link columns. Accepts an array (Vue/React/JS bindings) OR\na JSON-stringified array (HTML attribute use). When omitted, the\ncanonical EBRAINS-wide columns above are used.\n\nShape: see EdsFooterColumn / EdsFooterLink at the top of this file."
341
+ },
342
+ "attribute": "columns",
343
+ "reflect": false
253
344
  }
254
345
  };
255
346
  }
256
347
  static get states() {
257
348
  return {
258
- "showMatomoNotice": {}
349
+ "resolvedColumns": {}
259
350
  };
260
351
  }
261
352
  static get events() {
@@ -277,6 +368,12 @@ export class EdsFooter {
277
368
  }];
278
369
  }
279
370
  static get elementRef() { return "el"; }
371
+ static get watchers() {
372
+ return [{
373
+ "propName": "columns",
374
+ "methodName": "onColumnsChange"
375
+ }];
376
+ }
280
377
  static get listeners() {
281
378
  return [{
282
379
  "name": "scroll",
@@ -1,57 +1,123 @@
1
+ // Sensible sample for the `columns` control — used as the default
2
+ // value of the CustomColumns story so the JSON editor in Storybook
3
+ // opens with something realistic to mutate rather than `null`. The
4
+ // canonical EBRAINS defaults baked into the component differ from
5
+ // this on purpose: leaving the control empty (null) demonstrates the
6
+ // "no overrides" path; this sample demonstrates the override path.
7
+ const SAMPLE_COLUMNS = [
8
+ {
9
+ heading: 'Product',
10
+ links: [
11
+ { label: 'Home', href: '/' },
12
+ { label: 'Pricing', href: '/pricing' },
13
+ { label: 'Docs', href: '/docs' }
14
+ ]
15
+ },
16
+ {
17
+ heading: 'Company',
18
+ links: [
19
+ { label: 'About', href: '/about' },
20
+ { label: 'Blog', href: 'https://example.com/blog', external: true },
21
+ { label: 'Careers', href: '/careers' }
22
+ ]
23
+ },
24
+ {
25
+ heading: 'Legal',
26
+ links: [
27
+ { label: 'Privacy', href: '/privacy' },
28
+ { label: 'Terms', href: '/terms' },
29
+ { label: 'Cookie Preferences', action: 'cookies' }
30
+ ]
31
+ }
32
+ ];
1
33
  export default {
2
34
  title: 'Components/Footer',
3
35
  component: 'eds-footer',
4
36
  argTypes: {
37
+ variant: {
38
+ control: 'select',
39
+ options: ['default', 'inverse'],
40
+ description: 'Theme. Default is `inverse` (dark) — the canonical EBRAINS footer.'
41
+ },
5
42
  social: {
6
43
  control: 'boolean',
7
- description: 'Controls if the social section is displayed'
44
+ description: 'Show the social-networks section above the main grid'
8
45
  },
9
46
  fundedBy: {
10
47
  control: 'text',
11
- description: 'Control for the funded by text'
48
+ description: 'Text shown next to the EU flag in the brand column'
12
49
  },
13
50
  rightsReserved: {
14
51
  control: 'text',
15
- description: 'Control for the rights reserved text'
52
+ description: 'Text shown after the © symbol below the funding line'
16
53
  },
17
54
  enableScrollTop: {
18
55
  control: 'boolean',
19
- description: 'Scroll to top button'
56
+ description: 'Float a "Back to top" button at the top-right of the footer'
20
57
  },
21
58
  enableCookiesSettings: {
22
59
  control: 'boolean',
23
- description: 'Enable cookies consent preferences'
60
+ description: 'Render the "Cookie Preferences" entry (column links with action="cookies")'
24
61
  },
25
62
  cookiesPreferences: {
26
63
  control: 'text',
27
- description: 'Control for the cookies preferences text'
64
+ description: 'Label used for the cookies-action link'
28
65
  },
29
66
  backToTopAriaLabel: {
30
67
  control: 'text',
31
- description: 'Control for the back to top aria label text'
68
+ description: 'ARIA label for the floating back-to-top button'
69
+ },
70
+ columns: {
71
+ // `object` opens a live JSON editor in the Storybook controls
72
+ // panel — visitors can edit headings, links, hrefs, action,
73
+ // external flag etc. and see the footer re-render. Each story
74
+ // sets its own default (null for the canonical-defaults path,
75
+ // SAMPLE_COLUMNS for the override demo).
76
+ control: 'object',
77
+ description: 'Custom link columns. Array of `{ heading, links: [{ label, href?, external?, action? }] }`. Leave null to use the canonical EBRAINS defaults baked into the component.'
32
78
  }
33
79
  },
34
80
  args: {
81
+ variant: 'inverse',
35
82
  social: false,
36
83
  fundedBy: 'EBRAINS is funded by the Horizon Europe Framework Programme.',
37
- rightsReserved: '2024 EBRAINS. All rights reserved.',
84
+ rightsReserved: `${new Date().getFullYear()} EBRAINS. All rights reserved.`,
38
85
  enableScrollTop: false,
39
86
  enableCookiesSettings: false,
40
- cookiesPreferences: 'Cookies Preferences',
41
- backToTopAriaLabel: 'Back to Top'
42
- },
43
- parameters: {}
87
+ cookiesPreferences: 'Cookie Preferences',
88
+ backToTopAriaLabel: 'Back to Top',
89
+ columns: null
90
+ }
44
91
  };
92
+ // Helper — JSON-stringify the columns array and escape single quotes so
93
+ // the resulting HTML attribute (wrapped in single quotes for readability)
94
+ // stays valid even if a link label or href contains one. Shared by every
95
+ // render function below.
96
+ function columnsAttr(columns) {
97
+ if (columns == null)
98
+ return '';
99
+ const json = JSON.stringify(columns).replace(/'/g, '&#39;');
100
+ return `columns='${json}'`;
101
+ }
102
+ /**
103
+ * Default — what a consumer gets from `<eds-footer></eds-footer>`
104
+ * with no overrides. Dark theme, EBRAINS canonical link columns,
105
+ * EU funding ack + copyright.
106
+ *
107
+ * Leave `columns` null in the controls panel to see the canonical
108
+ * defaults baked into the component; set it to a JSON array (use the
109
+ * object editor) to live-preview an override.
110
+ */
45
111
  export const Default = {
46
112
  render: (args) => {
47
113
  const notice = args.enableCookiesSettings
48
- ? `
49
- <eds-matomo-notice></eds-matomo-notice>`
114
+ ? `<eds-matomo-notice></eds-matomo-notice>`
50
115
  : '';
51
116
  return `
52
- <eds-alert message="When cookies consent is enabled, please include <code>eds-matomo-notice</code> in your page"></eds-alert>
117
+ <eds-alert message="When cookies consent is enabled, please include <code>eds-matomo-notice</code> in your page" class="mb-16"></eds-alert>
53
118
  ${notice}
54
119
  <eds-footer
120
+ variant="${args.variant}"
55
121
  social="${args.social}"
56
122
  funded-by="${args.fundedBy}"
57
123
  rights-reserved="${args.rightsReserved}"
@@ -59,7 +125,34 @@ export const Default = {
59
125
  enable-cookies-settings="${args.enableCookiesSettings}"
60
126
  cookies-preferences="${args.cookiesPreferences}"
61
127
  back-to-top-aria-label="${args.backToTopAriaLabel}"
128
+ ${columnsAttr(args.columns)}
62
129
  ></eds-footer>
63
130
  `;
64
131
  }
65
132
  };
133
+ /**
134
+ * Custom link columns — pre-fills the `columns` control with a
135
+ * sensible non-EBRAINS example so the Storybook JSON editor opens
136
+ * with something realistic to mutate. Edit headings, links, hrefs,
137
+ * `external`, and `action` directly in the Controls panel to see
138
+ * the footer re-render.
139
+ *
140
+ * Shape: `[{ heading, links: [{ label, href?, external?, action? }] }]`
141
+ * - `href` present → renders as an anchor (target=_blank if `external`)
142
+ * - `href` absent → renders as plain text (e.g. "MIT License")
143
+ * - `action: 'cookies'` → fires the `cookies` event (gated by
144
+ * enable-cookies-settings)
145
+ */
146
+ export const CustomColumns = {
147
+ args: {
148
+ enableCookiesSettings: true,
149
+ columns: SAMPLE_COLUMNS
150
+ },
151
+ render: (args) => `
152
+ <eds-footer
153
+ variant="${args.variant}"
154
+ enable-cookies-settings="${args.enableCookiesSettings}"
155
+ ${columnsAttr(args.columns)}
156
+ ></eds-footer>
157
+ `
158
+ };
@@ -264,4 +264,40 @@
264
264
  .md\:pt-64 {
265
265
  padding-top: 4rem;
266
266
  }
267
- }
267
+ }
268
+ /* Inline links in the form/step description and Text Blocks — exact match of
269
+ eds-link's "underline" intent (.animated-underline): green bar animates in
270
+ on hover. */
271
+ .eds-desc-link {
272
+ position: relative;
273
+ display: inline-block;
274
+ color: var(--brand-black);
275
+ text-decoration: none;
276
+ }
277
+ .eds-desc-link::after {
278
+ content: '';
279
+ position: absolute;
280
+ bottom: -2px;
281
+ left: 0;
282
+ width: 0;
283
+ height: 2px;
284
+ background-color: var(--brand-green);
285
+ transition: width 0.3s ease;
286
+ }
287
+ .eds-desc-link:hover::after {
288
+ width: 100%;
289
+ }
290
+ .eds-desc-link:focus-visible::after {
291
+ width: 0;
292
+ }
293
+
294
+ /* Presentational "Text Block" field (type=content): body text the author drops
295
+ anywhere in the form. Links inside reuse .eds-desc-link above. */
296
+ .eds-content-block {
297
+ line-height: 1.5;
298
+ color: var(--brand-black, #07140d);
299
+ }
300
+ .eds-content-block strong { font-weight: 600; }
301
+ /* In Text Blocks, make links a touch bolder than body text so they read as
302
+ links at a glance (the eds-link underline still animates on hover). */
303
+ .eds-content-block .eds-desc-link { font-weight: 600; }