@dnanpm/ui-components 0.9.0 → 0.10.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 (240) hide show
  1. package/README.md +13 -0
  2. package/dist/components/Accordion/Accordion.css +5 -1
  3. package/dist/components/AccordionItem/AccordionItem.cjs +4 -4
  4. package/dist/components/AccordionItem/AccordionItem.cjs.map +1 -1
  5. package/dist/components/AccordionItem/AccordionItem.css +4 -1
  6. package/dist/components/AccordionItem/AccordionItem.d.ts.map +1 -1
  7. package/dist/components/AccordionItem/AccordionItem.js +2 -2
  8. package/dist/components/AccordionItem/AccordionItem.js.map +1 -1
  9. package/dist/components/Avatar/Avatar.cjs +83 -0
  10. package/dist/components/Avatar/Avatar.cjs.map +1 -0
  11. package/dist/components/Avatar/Avatar.css +188 -0
  12. package/dist/components/Avatar/Avatar.d.ts +3 -0
  13. package/dist/components/Avatar/Avatar.d.ts.map +1 -0
  14. package/dist/components/Avatar/Avatar.js +83 -0
  15. package/dist/components/Avatar/Avatar.js.map +1 -0
  16. package/dist/components/Avatar/Avatar.module.css.cjs +40 -0
  17. package/dist/components/Avatar/Avatar.module.css.cjs.map +1 -0
  18. package/dist/components/Avatar/Avatar.module.css.js +40 -0
  19. package/dist/components/Avatar/Avatar.module.css.js.map +1 -0
  20. package/dist/components/Avatar/Avatar.types.d.ts +66 -0
  21. package/dist/components/Avatar/Avatar.types.d.ts.map +1 -0
  22. package/dist/components/Avatar/Avatar.utils.cjs +17 -0
  23. package/dist/components/Avatar/Avatar.utils.cjs.map +1 -0
  24. package/dist/components/Avatar/Avatar.utils.d.ts +6 -0
  25. package/dist/components/Avatar/Avatar.utils.d.ts.map +1 -0
  26. package/dist/components/Avatar/Avatar.utils.js +17 -0
  27. package/dist/components/Avatar/Avatar.utils.js.map +1 -0
  28. package/dist/components/Avatar/index.d.ts +3 -0
  29. package/dist/components/Avatar/index.d.ts.map +1 -0
  30. package/dist/components/Breadcrumb/Breadcrumb.cjs +9 -12
  31. package/dist/components/Breadcrumb/Breadcrumb.cjs.map +1 -1
  32. package/dist/components/Breadcrumb/Breadcrumb.css +16 -16
  33. package/dist/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  34. package/dist/components/Breadcrumb/Breadcrumb.js +2 -5
  35. package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -1
  36. package/dist/components/Breadcrumb/Breadcrumb.module.css.cjs +5 -8
  37. package/dist/components/Breadcrumb/Breadcrumb.module.css.cjs.map +1 -1
  38. package/dist/components/Breadcrumb/Breadcrumb.module.css.js +5 -8
  39. package/dist/components/Breadcrumb/Breadcrumb.module.css.js.map +1 -1
  40. package/dist/components/Button/Button.cjs +29 -3
  41. package/dist/components/Button/Button.cjs.map +1 -1
  42. package/dist/components/Button/Button.css +78 -31
  43. package/dist/components/Button/Button.d.ts +1 -1
  44. package/dist/components/Button/Button.d.ts.map +1 -1
  45. package/dist/components/Button/Button.js +28 -2
  46. package/dist/components/Button/Button.js.map +1 -1
  47. package/dist/components/Button/Button.module.css.cjs +19 -11
  48. package/dist/components/Button/Button.module.css.cjs.map +1 -1
  49. package/dist/components/Button/Button.module.css.js +19 -11
  50. package/dist/components/Button/Button.module.css.js.map +1 -1
  51. package/dist/components/Button/Button.types.d.ts +20 -3
  52. package/dist/components/Button/Button.types.d.ts.map +1 -1
  53. package/dist/components/Button/index.d.ts +1 -1
  54. package/dist/components/Button/index.d.ts.map +1 -1
  55. package/dist/components/ButtonCard/ButtonCard.cjs +19 -14
  56. package/dist/components/ButtonCard/ButtonCard.cjs.map +1 -1
  57. package/dist/components/ButtonCard/ButtonCard.css +63 -20
  58. package/dist/components/ButtonCard/ButtonCard.d.ts +2 -1
  59. package/dist/components/ButtonCard/ButtonCard.d.ts.map +1 -1
  60. package/dist/components/ButtonCard/ButtonCard.js +17 -12
  61. package/dist/components/ButtonCard/ButtonCard.js.map +1 -1
  62. package/dist/components/ButtonCard/ButtonCard.module.css.cjs +14 -12
  63. package/dist/components/ButtonCard/ButtonCard.module.css.cjs.map +1 -1
  64. package/dist/components/ButtonCard/ButtonCard.module.css.js +14 -12
  65. package/dist/components/ButtonCard/ButtonCard.module.css.js.map +1 -1
  66. package/dist/components/ButtonCard/ButtonCard.types.d.ts +3 -2
  67. package/dist/components/ButtonCard/ButtonCard.types.d.ts.map +1 -1
  68. package/dist/components/Checkbox/Checkbox.cjs +105 -0
  69. package/dist/components/Checkbox/Checkbox.cjs.map +1 -0
  70. package/dist/components/Checkbox/Checkbox.css +323 -0
  71. package/dist/components/Checkbox/Checkbox.d.ts +3 -0
  72. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
  73. package/dist/components/Checkbox/Checkbox.js +105 -0
  74. package/dist/components/Checkbox/Checkbox.js.map +1 -0
  75. package/dist/components/Checkbox/Checkbox.module.css.cjs +35 -0
  76. package/dist/components/Checkbox/Checkbox.module.css.cjs.map +1 -0
  77. package/dist/components/Checkbox/Checkbox.module.css.js +35 -0
  78. package/dist/components/Checkbox/Checkbox.module.css.js.map +1 -0
  79. package/dist/components/Checkbox/Checkbox.types.d.ts +47 -0
  80. package/dist/components/Checkbox/Checkbox.types.d.ts.map +1 -0
  81. package/dist/components/Checkbox/index.d.ts +3 -0
  82. package/dist/components/Checkbox/index.d.ts.map +1 -0
  83. package/dist/components/ContentCard/ContentCard.cjs +8 -7
  84. package/dist/components/ContentCard/ContentCard.cjs.map +1 -1
  85. package/dist/components/ContentCard/ContentCard.css +39 -34
  86. package/dist/components/ContentCard/ContentCard.d.ts.map +1 -1
  87. package/dist/components/ContentCard/ContentCard.js +3 -2
  88. package/dist/components/ContentCard/ContentCard.js.map +1 -1
  89. package/dist/components/ContentCard/ContentCard.module.css.cjs +18 -18
  90. package/dist/components/ContentCard/ContentCard.module.css.js +18 -18
  91. package/dist/components/ContentCard/ContentCard.types.d.ts +2 -1
  92. package/dist/components/ContentCard/ContentCard.types.d.ts.map +1 -1
  93. package/dist/components/Drawer/Drawer.cjs +15 -7
  94. package/dist/components/Drawer/Drawer.cjs.map +1 -1
  95. package/dist/components/Drawer/Drawer.css +48 -45
  96. package/dist/components/Drawer/Drawer.d.ts.map +1 -1
  97. package/dist/components/Drawer/Drawer.js +12 -4
  98. package/dist/components/Drawer/Drawer.js.map +1 -1
  99. package/dist/components/Drawer/Drawer.module.css.cjs +16 -16
  100. package/dist/components/Drawer/Drawer.module.css.js +16 -16
  101. package/dist/components/Footer/Footer.cjs +8 -9
  102. package/dist/components/Footer/Footer.cjs.map +1 -1
  103. package/dist/components/Footer/Footer.css +87 -83
  104. package/dist/components/Footer/Footer.d.ts.map +1 -1
  105. package/dist/components/Footer/Footer.js +1 -2
  106. package/dist/components/Footer/Footer.js.map +1 -1
  107. package/dist/components/Footer/Footer.module.css.cjs +39 -39
  108. package/dist/components/Footer/Footer.module.css.js +39 -39
  109. package/dist/components/FunctionButton/FunctionButton.cjs +2 -2
  110. package/dist/components/FunctionButton/FunctionButton.cjs.map +1 -1
  111. package/dist/components/FunctionButton/FunctionButton.css +5 -1
  112. package/dist/components/FunctionButton/FunctionButton.js +1 -1
  113. package/dist/components/FunctionButton/FunctionButton.js.map +1 -1
  114. package/dist/components/Hero/Hero.cjs +30 -27
  115. package/dist/components/Hero/Hero.cjs.map +1 -1
  116. package/dist/components/Hero/Hero.css +49 -44
  117. package/dist/components/Hero/Hero.d.ts +1 -1
  118. package/dist/components/Hero/Hero.d.ts.map +1 -1
  119. package/dist/components/Hero/Hero.js +30 -27
  120. package/dist/components/Hero/Hero.js.map +1 -1
  121. package/dist/components/Hero/Hero.module.css.cjs +18 -18
  122. package/dist/components/Hero/Hero.module.css.js +18 -18
  123. package/dist/components/Hero/Hero.types.d.ts +2 -6
  124. package/dist/components/Hero/Hero.types.d.ts.map +1 -1
  125. package/dist/components/IconButton/IconButton.cjs +3 -4
  126. package/dist/components/IconButton/IconButton.cjs.map +1 -1
  127. package/dist/components/IconButton/IconButton.css +5 -1
  128. package/dist/components/IconButton/IconButton.d.ts.map +1 -1
  129. package/dist/components/IconButton/IconButton.js +1 -2
  130. package/dist/components/IconButton/IconButton.js.map +1 -1
  131. package/dist/components/Label/Label.css +5 -1
  132. package/dist/components/MainNavigation/MainNavigation.cjs +216 -162
  133. package/dist/components/MainNavigation/MainNavigation.cjs.map +1 -1
  134. package/dist/components/MainNavigation/MainNavigation.css +206 -183
  135. package/dist/components/MainNavigation/MainNavigation.d.ts +1 -1
  136. package/dist/components/MainNavigation/MainNavigation.d.ts.map +1 -1
  137. package/dist/components/MainNavigation/MainNavigation.js +177 -123
  138. package/dist/components/MainNavigation/MainNavigation.js.map +1 -1
  139. package/dist/components/MainNavigation/MainNavigation.module.css.cjs +80 -78
  140. package/dist/components/MainNavigation/MainNavigation.module.css.cjs.map +1 -1
  141. package/dist/components/MainNavigation/MainNavigation.module.css.js +80 -78
  142. package/dist/components/MainNavigation/MainNavigation.module.css.js.map +1 -1
  143. package/dist/components/MainNavigation/MainNavigation.types.d.ts +0 -13
  144. package/dist/components/MainNavigation/MainNavigation.types.d.ts.map +1 -1
  145. package/dist/components/MainNavigation/MainNavigation.utils.cjs +8 -4
  146. package/dist/components/MainNavigation/MainNavigation.utils.cjs.map +1 -1
  147. package/dist/components/MainNavigation/MainNavigation.utils.d.ts +1 -0
  148. package/dist/components/MainNavigation/MainNavigation.utils.d.ts.map +1 -1
  149. package/dist/components/MainNavigation/MainNavigation.utils.js +8 -4
  150. package/dist/components/MainNavigation/MainNavigation.utils.js.map +1 -1
  151. package/dist/components/Modal/Modal.cjs +14 -6
  152. package/dist/components/Modal/Modal.cjs.map +1 -1
  153. package/dist/components/Modal/Modal.css +44 -40
  154. package/dist/components/Modal/Modal.d.ts.map +1 -1
  155. package/dist/components/Modal/Modal.js +12 -4
  156. package/dist/components/Modal/Modal.js.map +1 -1
  157. package/dist/components/Modal/Modal.module.css.cjs +18 -18
  158. package/dist/components/Modal/Modal.module.css.js +18 -18
  159. package/dist/components/Notification/Notification.cjs +3 -2
  160. package/dist/components/Notification/Notification.cjs.map +1 -1
  161. package/dist/components/Notification/Notification.css +16 -11
  162. package/dist/components/Notification/Notification.d.ts.map +1 -1
  163. package/dist/components/Notification/Notification.js +2 -1
  164. package/dist/components/Notification/Notification.js.map +1 -1
  165. package/dist/components/Notification/Notification.module.css.cjs +9 -9
  166. package/dist/components/Notification/Notification.module.css.js +9 -9
  167. package/dist/components/Pagination/Pagination.cjs +142 -0
  168. package/dist/components/Pagination/Pagination.cjs.map +1 -0
  169. package/dist/components/Pagination/Pagination.css +256 -0
  170. package/dist/components/Pagination/Pagination.d.ts +3 -0
  171. package/dist/components/Pagination/Pagination.d.ts.map +1 -0
  172. package/dist/components/Pagination/Pagination.js +142 -0
  173. package/dist/components/Pagination/Pagination.js.map +1 -0
  174. package/dist/components/Pagination/Pagination.module.css.cjs +34 -0
  175. package/dist/components/Pagination/Pagination.module.css.cjs.map +1 -0
  176. package/dist/components/Pagination/Pagination.module.css.js +34 -0
  177. package/dist/components/Pagination/Pagination.module.css.js.map +1 -0
  178. package/dist/components/Pagination/Pagination.types.d.ts +20 -0
  179. package/dist/components/Pagination/Pagination.types.d.ts.map +1 -0
  180. package/dist/components/Pagination/Pagination.utils.cjs +76 -0
  181. package/dist/components/Pagination/Pagination.utils.cjs.map +1 -0
  182. package/dist/components/Pagination/Pagination.utils.d.ts +21 -0
  183. package/dist/components/Pagination/Pagination.utils.d.ts.map +1 -0
  184. package/dist/components/Pagination/Pagination.utils.js +76 -0
  185. package/dist/components/Pagination/Pagination.utils.js.map +1 -0
  186. package/dist/components/Pagination/index.d.ts +3 -0
  187. package/dist/components/Pagination/index.d.ts.map +1 -0
  188. package/dist/components/Pictograph/Pictograph.css +5 -1
  189. package/dist/components/Pictograph/PictographItem.css +5 -1
  190. package/dist/components/Quote/Quote.css +5 -1
  191. package/dist/components/Spinner/Spinner.css +5 -1
  192. package/dist/design-tokens/dist/tokens.cjs +5 -0
  193. package/dist/design-tokens/dist/tokens.cjs.map +1 -0
  194. package/dist/design-tokens/dist/tokens.js +5 -0
  195. package/dist/design-tokens/dist/tokens.js.map +1 -0
  196. package/dist/index.cjs +6 -0
  197. package/dist/index.cjs.map +1 -1
  198. package/dist/index.d.ts +7 -1
  199. package/dist/index.d.ts.map +1 -1
  200. package/dist/index.js +6 -0
  201. package/dist/index.js.map +1 -1
  202. package/dist/styles/utilities.css +6 -0
  203. package/dist/styles/utils/elevation.css +35 -26
  204. package/dist/styles/utils/focus.css +63 -68
  205. package/dist/styles/utils/index.cjs +33 -0
  206. package/dist/styles/utils/index.cjs.map +1 -0
  207. package/dist/styles/utils/index.d.ts +20 -0
  208. package/dist/styles/utils/index.d.ts.map +1 -0
  209. package/dist/styles/utils/index.js +33 -0
  210. package/dist/styles/utils/index.js.map +1 -0
  211. package/dist/styles/utils/overlay.css +35 -27
  212. package/dist/styles/utils/text-decoration.css +20 -12
  213. package/dist/styles.css +27 -3
  214. package/dist/utils/index.d.ts +1 -0
  215. package/dist/utils/index.d.ts.map +1 -1
  216. package/dist/utils/isRenderable/index.d.ts +2 -0
  217. package/dist/utils/isRenderable/index.d.ts.map +1 -0
  218. package/dist/utils/isRenderable/isRenderable.cjs +5 -0
  219. package/dist/utils/isRenderable/isRenderable.cjs.map +1 -0
  220. package/dist/utils/isRenderable/isRenderable.d.ts +4 -0
  221. package/dist/utils/isRenderable/isRenderable.d.ts.map +1 -0
  222. package/dist/utils/isRenderable/isRenderable.js +5 -0
  223. package/dist/utils/isRenderable/isRenderable.js.map +1 -0
  224. package/package.json +12 -4
  225. package/dist/styles/utils/elevation.module.css.cjs +0 -16
  226. package/dist/styles/utils/elevation.module.css.cjs.map +0 -1
  227. package/dist/styles/utils/elevation.module.css.js +0 -16
  228. package/dist/styles/utils/elevation.module.css.js.map +0 -1
  229. package/dist/styles/utils/focus.module.css.cjs +0 -16
  230. package/dist/styles/utils/focus.module.css.cjs.map +0 -1
  231. package/dist/styles/utils/focus.module.css.js +0 -16
  232. package/dist/styles/utils/focus.module.css.js.map +0 -1
  233. package/dist/styles/utils/overlay.module.css.cjs +0 -13
  234. package/dist/styles/utils/overlay.module.css.cjs.map +0 -1
  235. package/dist/styles/utils/overlay.module.css.js +0 -13
  236. package/dist/styles/utils/overlay.module.css.js.map +0 -1
  237. package/dist/styles/utils/text-decoration.module.css.cjs +0 -13
  238. package/dist/styles/utils/text-decoration.module.css.cjs.map +0 -1
  239. package/dist/styles/utils/text-decoration.module.css.js +0 -13
  240. package/dist/styles/utils/text-decoration.module.css.js.map +0 -1
@@ -9,7 +9,7 @@
9
9
  * so focus-soft sits outside at 10.49:1.
10
10
  */
11
11
 
12
- ._footer_1lum3_8 {
12
+ ._footer_1iwfy_8 {
13
13
  container-name: footer;
14
14
  container-type: inline-size;
15
15
  color: var(--color-semantic-foreground-inverse);
@@ -17,59 +17,59 @@
17
17
  }
18
18
 
19
19
  /* Zero specificity so modifier classes can still set their own colour. */
20
- :where(._footer_1lum3_8 a) {
20
+ :where(._footer_1iwfy_8 a) {
21
21
  color: inherit;
22
22
  }
23
23
 
24
24
  /* Resets the base list styles from styles/typography.css (li carries margin). */
25
- ._footer_1lum3_8 ul {
25
+ ._footer_1iwfy_8 ul {
26
26
  margin: 0;
27
27
  padding: 0;
28
28
  list-style: none;
29
29
  }
30
30
 
31
- ._footer_1lum3_8 li {
31
+ ._footer_1iwfy_8 li {
32
32
  margin: 0;
33
33
  }
34
34
 
35
- ._footer__inner_1lum3_31 {
36
- max-width: 1280px;
35
+ ._footer__inner_1iwfy_31 {
36
+ max-width: var(--layout-semantic-container-wide);
37
37
  margin-inline: auto;
38
38
  }
39
39
 
40
- ._footer__top_1lum3_36,
41
- ._footer__bottom_1lum3_37 {
40
+ ._footer__top_1iwfy_36,
41
+ ._footer__bottom_1iwfy_37 {
42
42
  padding: var(--spacing-space-32) var(--spacing-space-16);
43
43
  }
44
44
 
45
45
  @container footer (min-width: 768px) {
46
- ._footer__top_1lum3_36,
47
- ._footer__bottom_1lum3_37 {
46
+ ._footer__top_1iwfy_36,
47
+ ._footer__bottom_1iwfy_37 {
48
48
  padding: var(--spacing-space-40) var(--spacing-space-32);
49
49
  }
50
50
  }
51
51
 
52
52
  @container footer (min-width: 1024px) {
53
- ._footer__top_1lum3_36,
54
- ._footer__bottom_1lum3_37 {
53
+ ._footer__top_1iwfy_36,
54
+ ._footer__bottom_1iwfy_37 {
55
55
  padding: var(--spacing-space-40) var(--spacing-space-40);
56
56
  }
57
57
  }
58
58
 
59
59
  /* === Top section === */
60
60
 
61
- ._footer__top_1lum3_36 {
61
+ ._footer__top_1iwfy_36 {
62
62
  background: var(--color-semantic-surface-secondary-mid);
63
63
  }
64
64
 
65
- ._footer__top-row_1lum3_61 {
65
+ ._footer__top-row_1iwfy_61 {
66
66
  display: flex;
67
67
  flex-direction: column;
68
68
  gap: var(--spacing-space-32);
69
69
  }
70
70
 
71
71
  @container footer (min-width: 768px) {
72
- ._footer__top-row_1lum3_61 {
72
+ ._footer__top-row_1iwfy_61 {
73
73
  flex-direction: row;
74
74
  align-items: flex-start;
75
75
  justify-content: space-between;
@@ -77,7 +77,7 @@
77
77
  }
78
78
  }
79
79
 
80
- ._footer__top-column_1lum3_76 {
80
+ ._footer__top-column_1iwfy_76 {
81
81
  display: flex;
82
82
  flex: 1 0 0;
83
83
  flex-direction: column;
@@ -85,25 +85,25 @@
85
85
  min-width: 0;
86
86
  }
87
87
 
88
- ._footer__top-heading_1lum3_84 {
88
+ ._footer__top-heading_1iwfy_84 {
89
89
  display: flex;
90
90
  flex-direction: column;
91
91
  gap: var(--spacing-space-20);
92
92
  align-items: flex-start;
93
93
  }
94
94
 
95
- ._footer__top-icon_1lum3_91 {
95
+ ._footer__top-icon_1iwfy_91 {
96
96
  width: 48px;
97
97
  height: 48px;
98
98
  fill: currentColor;
99
99
  }
100
100
 
101
- ._footer__top-title_1lum3_97 {
101
+ ._footer__top-title_1iwfy_97 {
102
102
  margin: 0;
103
103
  font: var(--typography-heading-xs);
104
104
  }
105
105
 
106
- ._footer__top-links_1lum3_102 {
106
+ ._footer__top-links_1iwfy_102 {
107
107
  display: flex;
108
108
  flex-direction: column;
109
109
  gap: var(--spacing-space-8);
@@ -111,19 +111,19 @@
111
111
  }
112
112
 
113
113
  /* Removes the line box around the inline-flex child so the gap is exactly space/8. */
114
- ._footer__top-links_1lum3_102 li,
115
- ._footer__link-list_1lum3_111 li {
114
+ ._footer__top-links_1iwfy_102 li,
115
+ ._footer__link-list_1iwfy_111 li {
116
116
  display: flex;
117
117
  }
118
118
 
119
119
  /* IconButton owns its own label typography and underline behaviour. */
120
- ._footer__top-link_1lum3_102 {
120
+ ._footer__top-link_1iwfy_102 {
121
121
  max-width: 100%;
122
122
  }
123
123
 
124
124
  /* === Bottom section === */
125
125
 
126
- ._footer__container_1lum3_122 {
126
+ ._footer__container_1iwfy_122 {
127
127
  display: flex;
128
128
  flex-direction: column;
129
129
  gap: var(--spacing-space-40);
@@ -136,20 +136,20 @@
136
136
  * button, which is wrong when the content is permanently visible. display:none
137
137
  * removes the inactive branch from both the tab order and the a11y tree.
138
138
  */
139
- ._footer__nav-accordions_1lum3_135 {
139
+ ._footer__nav-accordions_1iwfy_135 {
140
140
  display: block;
141
141
  }
142
142
 
143
- ._footer__nav-columns_1lum3_139 {
143
+ ._footer__nav-columns_1iwfy_139 {
144
144
  display: none;
145
145
  }
146
146
 
147
147
  @container footer (min-width: 768px) {
148
- ._footer__nav-accordions_1lum3_135 {
148
+ ._footer__nav-accordions_1iwfy_135 {
149
149
  display: none;
150
150
  }
151
151
 
152
- ._footer__nav-columns_1lum3_139 {
152
+ ._footer__nav-columns_1iwfy_139 {
153
153
  display: flex;
154
154
  align-items: flex-start;
155
155
  justify-content: space-between;
@@ -157,7 +157,7 @@
157
157
  }
158
158
  }
159
159
 
160
- ._footer__column_1lum3_156 {
160
+ ._footer__column_1iwfy_156 {
161
161
  display: flex;
162
162
  flex: 1 0 0;
163
163
  flex-direction: column;
@@ -165,12 +165,12 @@
165
165
  min-width: 0;
166
166
  }
167
167
 
168
- ._footer__column-heading_1lum3_164 {
168
+ ._footer__column-heading_1iwfy_164 {
169
169
  margin: 0;
170
170
  font: var(--typography-heading-xs);
171
171
  }
172
172
 
173
- ._footer__link-list_1lum3_111 {
173
+ ._footer__link-list_1iwfy_111 {
174
174
  display: flex;
175
175
  flex-direction: column;
176
176
  gap: var(--spacing-space-8);
@@ -182,8 +182,8 @@
182
182
  * left-aligned) but it stops narrow labels sitting between wider neighbours,
183
183
  * which leaves overlapping target regions under SC 2.5.8.
184
184
  */
185
- ._footer__link-list_1lum3_111 a,
186
- ._footer__link-list_1lum3_111 button {
185
+ ._footer__link-list_1iwfy_111 a,
186
+ ._footer__link-list_1iwfy_111 button {
187
187
  flex: 1 1 auto;
188
188
  }
189
189
 
@@ -191,8 +191,8 @@
191
191
  * Underline styling comes from the shared text-decoration utility; only its
192
192
  * visibility is toggled here, matching how IconButton handles the same case.
193
193
  */
194
- ._footer__link_1lum3_111,
195
- ._footer__action_1lum3_191 {
194
+ ._footer__link_1iwfy_111,
195
+ ._footer__action_1iwfy_191 {
196
196
  display: inline-block;
197
197
  max-width: 100%;
198
198
  /* Keeps short labels such as "5G" at the 24px minimum target size (SC 2.5.8). */
@@ -202,15 +202,15 @@
202
202
  text-decoration-color: transparent;
203
203
  }
204
204
 
205
- ._footer__link_1lum3_111:hover,
206
- ._footer__link_1lum3_111:focus-visible,
207
- ._footer__action_1lum3_191:hover,
208
- ._footer__action_1lum3_191:focus-visible {
205
+ ._footer__link_1iwfy_111:hover,
206
+ ._footer__link_1iwfy_111:focus-visible,
207
+ ._footer__action_1iwfy_191:hover,
208
+ ._footer__action_1iwfy_191:focus-visible {
209
209
  color: var(--color-semantic-foreground-link-inverse-hover);
210
210
  text-decoration-color: currentColor;
211
211
  }
212
212
 
213
- ._footer__action_1lum3_191 {
213
+ ._footer__action_1iwfy_191 {
214
214
  padding: 0;
215
215
  color: inherit;
216
216
  background: none;
@@ -225,32 +225,32 @@
225
225
  * is adjusted so link text aligns with the footer gutter. The block-start
226
226
  * padding also keeps the first link off the ::details-content clip edge.
227
227
  */
228
- ._footer__accordion_1lum3_224 > summary {
228
+ ._footer__accordion_1iwfy_224 > summary {
229
229
  padding-inline: 0;
230
230
  }
231
231
 
232
- ._footer__accordion_1lum3_224 > summary + div {
232
+ ._footer__accordion_1iwfy_224 > summary + div {
233
233
  padding-block: var(--spacing-space-8) var(--spacing-space-16);
234
234
  padding-inline: 0;
235
235
  }
236
236
 
237
237
  /* === Divider === */
238
238
 
239
- ._footer__divider_1lum3_235 {
239
+ ._footer__divider_1iwfy_235 {
240
240
  height: 1px;
241
241
  background: var(--color-semantic-border-neutral-mid);
242
242
  }
243
243
 
244
244
  /* The accordion branch already ends with a rule, so avoid doubling it. */
245
245
  @container footer (max-width: 767px) {
246
- ._footer__divider--after-nav_1lum3_242 {
246
+ ._footer__divider--after-nav_1iwfy_242 {
247
247
  display: none;
248
248
  }
249
249
  }
250
250
 
251
251
  /* === Meta row === */
252
252
 
253
- ._footer__meta_1lum3_249 {
253
+ ._footer__meta_1iwfy_249 {
254
254
  display: flex;
255
255
  flex-direction: column;
256
256
  gap: var(--spacing-space-32);
@@ -258,7 +258,7 @@
258
258
  }
259
259
 
260
260
  @container footer (min-width: 768px) {
261
- ._footer__meta_1lum3_249 {
261
+ ._footer__meta_1iwfy_249 {
262
262
  flex-direction: row;
263
263
  align-items: flex-start;
264
264
  justify-content: center;
@@ -266,7 +266,7 @@
266
266
  }
267
267
  }
268
268
 
269
- ._footer__meta-center_1lum3_265 {
269
+ ._footer__meta-center_1iwfy_265 {
270
270
  display: flex;
271
271
  flex-direction: column;
272
272
  gap: var(--spacing-space-32);
@@ -277,14 +277,14 @@
277
277
 
278
278
  /* === Language selector === */
279
279
 
280
- ._footer__language-list_1lum3_276 {
280
+ ._footer__language-list_1iwfy_276 {
281
281
  display: flex;
282
282
  gap: var(--spacing-space-4);
283
283
  align-items: center;
284
284
  flex: 0 0 auto;
285
285
  }
286
286
 
287
- ._footer__language_1lum3_276 {
287
+ ._footer__language_1iwfy_276 {
288
288
  display: inline-flex;
289
289
  align-items: center;
290
290
  justify-content: center;
@@ -295,8 +295,8 @@
295
295
  border-radius: var(--radius-semantic-full);
296
296
  }
297
297
 
298
- ._footer__language_1lum3_276:hover,
299
- ._footer__language_1lum3_276:focus-visible {
298
+ ._footer__language_1iwfy_276:hover,
299
+ ._footer__language_1iwfy_276:focus-visible {
300
300
  background: var(--color-semantic-surface-secondary-soft);
301
301
  }
302
302
 
@@ -304,19 +304,19 @@
304
304
  * The active entry is marked with aria-current plus a filled pill, so selection
305
305
  * is never conveyed by colour alone.
306
306
  */
307
- ._footer__language--current_1lum3_303 {
307
+ ._footer__language--current_1iwfy_303 {
308
308
  color: var(--color-semantic-foreground-default);
309
309
  background: var(--color-semantic-surface-base);
310
310
  }
311
311
 
312
- ._footer__language--current_1lum3_303:hover,
313
- ._footer__language--current_1lum3_303:focus-visible {
312
+ ._footer__language--current_1iwfy_303:hover,
313
+ ._footer__language--current_1iwfy_303:focus-visible {
314
314
  background: var(--color-semantic-surface-base);
315
315
  }
316
316
 
317
317
  /* === Social media === */
318
318
 
319
- ._footer__social-list_1lum3_315 {
319
+ ._footer__social-list_1iwfy_315 {
320
320
  display: flex;
321
321
  flex-wrap: wrap;
322
322
  gap: var(--spacing-space-16);
@@ -324,7 +324,7 @@
324
324
  justify-content: center;
325
325
  }
326
326
 
327
- ._footer__social-link_1lum3_323 {
327
+ ._footer__social-link_1iwfy_323 {
328
328
  display: inline-flex;
329
329
  align-items: center;
330
330
  justify-content: center;
@@ -334,12 +334,12 @@
334
334
  border-radius: var(--radius-semantic-full);
335
335
  }
336
336
 
337
- ._footer__social-link_1lum3_323:hover,
338
- ._footer__social-link_1lum3_323:focus-visible {
337
+ ._footer__social-link_1iwfy_323:hover,
338
+ ._footer__social-link_1iwfy_323:focus-visible {
339
339
  background: var(--color-semantic-surface-secondary-soft);
340
340
  }
341
341
 
342
- ._footer__social-icon_1lum3_338 {
342
+ ._footer__social-icon_1iwfy_338 {
343
343
  width: 24px;
344
344
  height: 24px;
345
345
  fill: currentColor;
@@ -347,7 +347,7 @@
347
347
 
348
348
  /* === Organization selector === */
349
349
 
350
- ._footer__organization-list_1lum3_346 {
350
+ ._footer__organization-list_1iwfy_346 {
351
351
  display: flex;
352
352
  flex-wrap: wrap;
353
353
  gap: var(--spacing-space-8);
@@ -355,7 +355,7 @@
355
355
  justify-content: center;
356
356
  }
357
357
 
358
- ._footer__organization_1lum3_346 {
358
+ ._footer__organization_1iwfy_346 {
359
359
  display: inline-flex;
360
360
  align-items: center;
361
361
  justify-content: center;
@@ -366,25 +366,25 @@
366
366
  border-radius: var(--radius-semantic-full);
367
367
  }
368
368
 
369
- ._footer__organization_1lum3_346:hover,
370
- ._footer__organization_1lum3_346:focus-visible {
369
+ ._footer__organization_1iwfy_346:hover,
370
+ ._footer__organization_1iwfy_346:focus-visible {
371
371
  background: var(--color-semantic-surface-secondary-soft);
372
372
  }
373
373
 
374
- ._footer__organization--current_1lum3_370 {
374
+ ._footer__organization--current_1iwfy_370 {
375
375
  font: var(--typography-body-sm-medium);
376
376
  color: var(--color-semantic-foreground-default);
377
377
  background: var(--color-semantic-surface-base);
378
378
  }
379
379
 
380
- ._footer__organization--current_1lum3_370:hover,
381
- ._footer__organization--current_1lum3_370:focus-visible {
380
+ ._footer__organization--current_1iwfy_370:hover,
381
+ ._footer__organization--current_1iwfy_370:focus-visible {
382
382
  background: var(--color-semantic-surface-base);
383
383
  }
384
384
 
385
385
  /* === Legal links === */
386
386
 
387
- ._footer__legal-list_1lum3_383 {
387
+ ._footer__legal-list_1iwfy_383 {
388
388
  display: flex;
389
389
  flex-wrap: wrap;
390
390
  gap: var(--spacing-space-8) var(--spacing-space-16);
@@ -392,29 +392,29 @@
392
392
  justify-content: center;
393
393
  }
394
394
 
395
- ._footer__legal-list_1lum3_383 li {
395
+ ._footer__legal-list_1iwfy_383 li {
396
396
  display: flex;
397
397
  gap: var(--spacing-space-16);
398
398
  align-items: center;
399
399
  }
400
400
 
401
401
  /* Decorative; kept out of the accessibility tree by using ::before rather than a real element. */
402
- ._footer__legal-list_1lum3_383 li + li::before {
402
+ ._footer__legal-list_1iwfy_383 li + li::before {
403
403
  content: '';
404
404
  width: 1px;
405
405
  height: 12px;
406
406
  background: var(--color-semantic-foreground-inverse);
407
407
  }
408
408
 
409
- ._footer__legal-list_1lum3_383 ._footer__link_1lum3_111,
410
- ._footer__legal-list_1lum3_383 ._footer__action_1lum3_191,
411
- ._footer__copyright_1lum3_407 {
409
+ ._footer__legal-list_1iwfy_383 ._footer__link_1iwfy_111,
410
+ ._footer__legal-list_1iwfy_383 ._footer__action_1iwfy_191,
411
+ ._footer__copyright_1iwfy_407 {
412
412
  font: var(--typography-body-sm);
413
413
  }
414
414
 
415
415
  /* === App badges === */
416
416
 
417
- ._footer__apps_1lum3_413 {
417
+ ._footer__apps_1iwfy_413 {
418
418
  display: flex;
419
419
  flex-direction: column;
420
420
  gap: var(--spacing-space-8);
@@ -423,16 +423,16 @@
423
423
  }
424
424
 
425
425
  @container footer (min-width: 768px) {
426
- ._footer__apps_1lum3_413 {
426
+ ._footer__apps_1iwfy_413 {
427
427
  align-items: flex-start;
428
428
  }
429
429
  }
430
430
 
431
- ._footer__apps-title_1lum3_427 {
431
+ ._footer__apps-title_1iwfy_427 {
432
432
  font: var(--typography-body-md-medium);
433
433
  }
434
434
 
435
- ._footer__badges_1lum3_431 {
435
+ ._footer__badges_1iwfy_431 {
436
436
  display: flex;
437
437
  flex-wrap: wrap;
438
438
  gap: var(--spacing-space-8);
@@ -440,18 +440,18 @@
440
440
  }
441
441
 
442
442
  @container footer (min-width: 768px) {
443
- ._footer__badges_1lum3_431 {
443
+ ._footer__badges_1iwfy_431 {
444
444
  flex-direction: column;
445
445
  align-items: flex-start;
446
446
  }
447
447
  }
448
448
 
449
- ._footer__badge_1lum3_431 {
449
+ ._footer__badge_1iwfy_431 {
450
450
  display: inline-flex;
451
451
  border-radius: var(--radius-semantic-md);
452
452
  }
453
453
 
454
- ._footer__badge_1lum3_431 img {
454
+ ._footer__badge_1iwfy_431 img {
455
455
  display: block;
456
456
  width: 140px;
457
457
  height: 40px;
@@ -465,12 +465,16 @@
465
465
  }
466
466
 
467
467
  @media (forced-colors: active) {
468
- ._footer__divider_1lum3_235 {
468
+ ._footer__divider_1iwfy_235 {
469
469
  background: CanvasText;
470
470
  }
471
471
 
472
- ._footer__language--current_1lum3_303,
473
- ._footer__organization--current_1lum3_370 {
472
+ ._footer__language--current_1iwfy_303,
473
+ ._footer__organization--current_1iwfy_370 {
474
474
  outline: 2px solid Highlight;
475
475
  }
476
- } }
476
+ }
477
+
478
+ /**
479
+ * Do not edit directly, this file was auto-generated.
480
+ */ }
@@ -1 +1 @@
1
- {"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../src/components/Footer/Footer.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAIR,WAAW,EAEd,MAAM,gBAAgB,CAAC;AAgCxB,eAAO,MAAM,MAAM,GAAI,yTAsBpB,WAAW,4CA2Sb,CAAC"}
1
+ {"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../src/components/Footer/Footer.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAIR,WAAW,EAEd,MAAM,gBAAgB,CAAC;AAgCxB,eAAO,MAAM,MAAM,GAAI,yTAsBpB,WAAW,4CA2Sb,CAAC"}
@@ -1,8 +1,7 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import { useId } from "react";
3
3
  import { ArrowRight } from "@dnanpm/icons";
4
- import focusStyles from "../../styles/utils/focus.module.css.js";
5
- import textDecorationStyles from "../../styles/utils/text-decoration.module.css.js";
4
+ import { focusStyles, textDecorationStyles } from "../../styles/utils/index.js";
6
5
  import appStoreBadge from "./assets/app-store-badge.svg.js";
7
6
  import googlePlayBadge from "./assets/google-play-badge.svg.js";
8
7
  import styles from "./Footer.module.css.js";
@@ -1 +1 @@
1
- {"version":3,"file":"Footer.js","sources":["../../../src/components/Footer/Footer.tsx"],"sourcesContent":["import { useId } from 'react';\nimport { ArrowRight } from '@dnanpm/icons';\nimport { AccordionItem } from '../AccordionItem';\nimport { IconButton } from '../IconButton';\nimport { cn } from '../../utils/cn';\nimport focusStyles from '../../styles/utils/focus.module.css';\nimport textDecorationStyles from '../../styles/utils/text-decoration.module.css';\nimport appStoreBadge from './assets/app-store-badge.svg';\nimport googlePlayBadge from './assets/google-play-badge.svg';\nimport styles from './Footer.module.css';\nimport {\n defaultAppStoreAriaLabel,\n defaultCopyrightLabel,\n defaultGooglePlayAriaLabel,\n defaultRenderLink,\n defaultSocialAriaLabel,\n resolveSocialIcon,\n resolveTopSectionIcon,\n} from './Footer.utils';\nimport type {\n FooterAppLink,\n FooterLink,\n FooterLinkProps,\n FooterProps,\n FooterRenderLink,\n} from './Footer.types';\n\nconst linkClasses = (extra?: string) =>\n cn(styles.footer__link, textDecorationStyles.underlineLink, focusStyles.focusable, extra);\n\nconst renderNavLink = (link: FooterLink, renderLink: FooterRenderLink) =>\n renderLink(\n {\n href: link.href,\n className: linkClasses(),\n 'aria-label': link.ariaLabel,\n children: link.label,\n },\n { external: link.external ?? false },\n );\n\nconst renderBadge = (\n link: FooterAppLink,\n src: string,\n renderLink: FooterRenderLink,\n fallbackAriaLabel: string,\n) =>\n renderLink(\n {\n href: link.href,\n className: cn(styles.footer__badge, focusStyles.focusable),\n 'aria-label': link.ariaLabel ?? fallbackAriaLabel,\n children: <img src={src} alt=\"\" aria-hidden=\"true\" />,\n },\n { external: true },\n );\n\nexport const Footer = ({\n topSection,\n navigation,\n socialLinks,\n organizations,\n currentOrganizationId,\n languages,\n currentLanguageCode,\n appLinks,\n mandatoryLinks,\n copyrightLabel,\n renderLink = defaultRenderLink,\n onChatOpen,\n onCookieSettingsClick,\n navigationLabel = 'Footer linkit',\n socialLabel = 'DNA sosiaalisessa mediassa',\n organizationsLabel = 'Valitse sivusto',\n languagesLabel = 'Valitse kieli',\n mandatoryLinksLabel = 'Lakisääteiset linkit',\n className,\n ref,\n ...props\n}: FooterProps) => {\n const visibleMandatoryLinks = (mandatoryLinks ?? []).filter(\n (link) => !link.opensCookieSettings || onCookieSettingsClick,\n );\n\n const hasBadges = Boolean(appLinks?.appStore || appLinks?.googlePlay);\n const topSectionHeadingId = useId();\n\n return (\n <footer\n ref={ref}\n data-color-scheme=\"dark\"\n className={cn(styles.footer, className)}\n {...props}\n >\n {topSection && topSection.length > 0 && (\n <div className={styles.footer__top}>\n <div className={cn(styles.footer__inner, styles['footer__top-row'])}>\n {topSection.map((group, index) => {\n const Icon = resolveTopSectionIcon(group.icon);\n const links = group.links.filter(\n (link) => !link.opensChat || onChatOpen,\n );\n // Names the section as a landmark so it is discoverable alongside the main nav.\n const headingId = `${topSectionHeadingId}-${index}`;\n\n return (\n <section\n key={group.title}\n aria-labelledby={headingId}\n className={styles['footer__top-column']}\n >\n <div className={styles['footer__top-heading']}>\n {Icon && (\n <Icon\n className={styles['footer__top-icon']}\n aria-hidden=\"true\"\n />\n )}\n <h2 id={headingId} className={styles['footer__top-title']}>\n {group.title}\n </h2>\n </div>\n {links.length > 0 && (\n <ul className={styles['footer__top-links']}>\n {links.map((link) => (\n <li key={link.label}>\n {link.opensChat ? (\n <IconButton\n icon={ArrowRight}\n onClick={onChatOpen}\n className={styles['footer__top-link']}\n labelBehavior=\"wrap\"\n >\n {link.label}\n </IconButton>\n ) : (\n <IconButton\n icon={ArrowRight}\n href={link.href}\n aria-label={link.ariaLabel}\n className={styles['footer__top-link']}\n labelBehavior=\"wrap\"\n renderLink={(linkProps) =>\n renderLink(\n linkProps as FooterLinkProps,\n {\n external:\n link.external ?? false,\n },\n )\n }\n >\n {link.label}\n </IconButton>\n )}\n </li>\n ))}\n </ul>\n )}\n </section>\n );\n })}\n </div>\n </div>\n )}\n\n <div className={styles.footer__bottom}>\n <div className={cn(styles.footer__inner, styles.footer__container)}>\n {navigation && navigation.length > 0 && (\n <nav aria-label={navigationLabel}>\n {/* Accordions below 768px; the columns branch is display:none here. */}\n <div className={styles['footer__nav-accordions']}>\n {navigation.map((group) => (\n <AccordionItem\n key={group.heading}\n variant=\"panel\"\n label={group.heading}\n className={styles.footer__accordion}\n >\n <ul className={styles['footer__link-list']}>\n {group.links.map((link) => (\n <li key={link.label}>\n {renderNavLink(link, renderLink)}\n </li>\n ))}\n </ul>\n </AccordionItem>\n ))}\n </div>\n\n <div className={styles['footer__nav-columns']}>\n {navigation.map((group) => (\n <div key={group.heading} className={styles.footer__column}>\n <h2 className={styles['footer__column-heading']}>\n {group.heading}\n </h2>\n <ul className={styles['footer__link-list']}>\n {group.links.map((link) => (\n <li key={link.label}>\n {renderNavLink(link, renderLink)}\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </nav>\n )}\n\n {/* The bottom bar always renders: it carries the copyright. */}\n <div\n className={cn(\n styles.footer__divider,\n Boolean(navigation?.length) && styles['footer__divider--after-nav'],\n )}\n />\n\n <div className={styles.footer__meta}>\n {languages && languages.length > 0 && (\n <ul\n className={styles['footer__language-list']}\n aria-label={languagesLabel}\n >\n {languages.map((language) => {\n const isCurrent = language.code === currentLanguageCode;\n\n return (\n <li key={language.code}>\n {renderLink(\n {\n href: language.href,\n className: cn(\n styles.footer__language,\n isCurrent &&\n styles['footer__language--current'],\n focusStyles.focusable,\n ),\n 'aria-label': language.ariaLabel,\n 'aria-current': isCurrent ? 'true' : undefined,\n children: language.label,\n },\n { external: language.external ?? false },\n )}\n </li>\n );\n })}\n </ul>\n )}\n\n <div className={styles['footer__meta-center']}>\n {socialLinks && socialLinks.length > 0 && (\n <ul\n className={styles['footer__social-list']}\n aria-label={socialLabel}\n >\n {socialLinks.map((social) => {\n const Icon = resolveSocialIcon(social.platform);\n\n return (\n <li key={social.platform}>\n {renderLink(\n {\n href: social.href,\n className: cn(\n styles['footer__social-link'],\n focusStyles.focusable,\n ),\n 'aria-label':\n social.ariaLabel ??\n defaultSocialAriaLabel(social.platform),\n children: Icon ? (\n <Icon\n className={\n styles['footer__social-icon']\n }\n aria-hidden=\"true\"\n />\n ) : null,\n },\n { external: true },\n )}\n </li>\n );\n })}\n </ul>\n )}\n\n {organizations && organizations.length > 0 && (\n <ul\n className={styles['footer__organization-list']}\n aria-label={organizationsLabel}\n >\n {organizations.map((organization) => {\n const isCurrent = organization.id === currentOrganizationId;\n\n return (\n <li key={organization.id}>\n {renderLink(\n {\n href: organization.href,\n className: cn(\n styles.footer__organization,\n isCurrent &&\n styles[\n 'footer__organization--current'\n ],\n focusStyles.focusable,\n ),\n 'aria-current': isCurrent\n ? 'true'\n : undefined,\n children: organization.label,\n },\n {\n external: organization.external ?? false,\n },\n )}\n </li>\n );\n })}\n </ul>\n )}\n\n <ul\n className={styles['footer__legal-list']}\n aria-label={mandatoryLinksLabel}\n >\n {visibleMandatoryLinks.map((link) => (\n <li key={link.label}>\n {link.opensCookieSettings ? (\n <button\n type=\"button\"\n onClick={onCookieSettingsClick}\n className={linkClasses(styles.footer__action)}\n >\n {link.label}\n </button>\n ) : (\n renderNavLink(link, renderLink)\n )}\n </li>\n ))}\n <li className={styles.footer__copyright}>\n {copyrightLabel ?? defaultCopyrightLabel()}\n </li>\n </ul>\n </div>\n\n {hasBadges && (\n <div className={styles.footer__apps}>\n {appLinks?.title && (\n <span className={styles['footer__apps-title']}>\n {appLinks.title}\n </span>\n )}\n <div className={styles.footer__badges}>\n {appLinks?.appStore &&\n renderBadge(\n appLinks.appStore,\n appStoreBadge,\n renderLink,\n defaultAppStoreAriaLabel,\n )}\n {appLinks?.googlePlay &&\n renderBadge(\n appLinks.googlePlay,\n googlePlayBadge,\n renderLink,\n defaultGooglePlayAriaLabel,\n )}\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n </footer>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Footer.js","sources":["../../../src/components/Footer/Footer.tsx"],"sourcesContent":["import { useId } from 'react';\nimport { ArrowRight } from '@dnanpm/icons';\nimport { AccordionItem } from '../AccordionItem';\nimport { IconButton } from '../IconButton';\nimport { cn } from '../../utils/cn';\nimport { focusStyles, textDecorationStyles } from '../../styles/utils';\nimport appStoreBadge from './assets/app-store-badge.svg';\nimport googlePlayBadge from './assets/google-play-badge.svg';\nimport styles from './Footer.module.css';\nimport {\n defaultAppStoreAriaLabel,\n defaultCopyrightLabel,\n defaultGooglePlayAriaLabel,\n defaultRenderLink,\n defaultSocialAriaLabel,\n resolveSocialIcon,\n resolveTopSectionIcon,\n} from './Footer.utils';\nimport type {\n FooterAppLink,\n FooterLink,\n FooterLinkProps,\n FooterProps,\n FooterRenderLink,\n} from './Footer.types';\n\nconst linkClasses = (extra?: string) =>\n cn(styles.footer__link, textDecorationStyles.underlineLink, focusStyles.focusable, extra);\n\nconst renderNavLink = (link: FooterLink, renderLink: FooterRenderLink) =>\n renderLink(\n {\n href: link.href,\n className: linkClasses(),\n 'aria-label': link.ariaLabel,\n children: link.label,\n },\n { external: link.external ?? false },\n );\n\nconst renderBadge = (\n link: FooterAppLink,\n src: string,\n renderLink: FooterRenderLink,\n fallbackAriaLabel: string,\n) =>\n renderLink(\n {\n href: link.href,\n className: cn(styles.footer__badge, focusStyles.focusable),\n 'aria-label': link.ariaLabel ?? fallbackAriaLabel,\n children: <img src={src} alt=\"\" aria-hidden=\"true\" />,\n },\n { external: true },\n );\n\nexport const Footer = ({\n topSection,\n navigation,\n socialLinks,\n organizations,\n currentOrganizationId,\n languages,\n currentLanguageCode,\n appLinks,\n mandatoryLinks,\n copyrightLabel,\n renderLink = defaultRenderLink,\n onChatOpen,\n onCookieSettingsClick,\n navigationLabel = 'Footer linkit',\n socialLabel = 'DNA sosiaalisessa mediassa',\n organizationsLabel = 'Valitse sivusto',\n languagesLabel = 'Valitse kieli',\n mandatoryLinksLabel = 'Lakisääteiset linkit',\n className,\n ref,\n ...props\n}: FooterProps) => {\n const visibleMandatoryLinks = (mandatoryLinks ?? []).filter(\n (link) => !link.opensCookieSettings || onCookieSettingsClick,\n );\n\n const hasBadges = Boolean(appLinks?.appStore || appLinks?.googlePlay);\n const topSectionHeadingId = useId();\n\n return (\n <footer\n ref={ref}\n data-color-scheme=\"dark\"\n className={cn(styles.footer, className)}\n {...props}\n >\n {topSection && topSection.length > 0 && (\n <div className={styles.footer__top}>\n <div className={cn(styles.footer__inner, styles['footer__top-row'])}>\n {topSection.map((group, index) => {\n const Icon = resolveTopSectionIcon(group.icon);\n const links = group.links.filter(\n (link) => !link.opensChat || onChatOpen,\n );\n // Names the section as a landmark so it is discoverable alongside the main nav.\n const headingId = `${topSectionHeadingId}-${index}`;\n\n return (\n <section\n key={group.title}\n aria-labelledby={headingId}\n className={styles['footer__top-column']}\n >\n <div className={styles['footer__top-heading']}>\n {Icon && (\n <Icon\n className={styles['footer__top-icon']}\n aria-hidden=\"true\"\n />\n )}\n <h2 id={headingId} className={styles['footer__top-title']}>\n {group.title}\n </h2>\n </div>\n {links.length > 0 && (\n <ul className={styles['footer__top-links']}>\n {links.map((link) => (\n <li key={link.label}>\n {link.opensChat ? (\n <IconButton\n icon={ArrowRight}\n onClick={onChatOpen}\n className={styles['footer__top-link']}\n labelBehavior=\"wrap\"\n >\n {link.label}\n </IconButton>\n ) : (\n <IconButton\n icon={ArrowRight}\n href={link.href}\n aria-label={link.ariaLabel}\n className={styles['footer__top-link']}\n labelBehavior=\"wrap\"\n renderLink={(linkProps) =>\n renderLink(\n linkProps as FooterLinkProps,\n {\n external:\n link.external ?? false,\n },\n )\n }\n >\n {link.label}\n </IconButton>\n )}\n </li>\n ))}\n </ul>\n )}\n </section>\n );\n })}\n </div>\n </div>\n )}\n\n <div className={styles.footer__bottom}>\n <div className={cn(styles.footer__inner, styles.footer__container)}>\n {navigation && navigation.length > 0 && (\n <nav aria-label={navigationLabel}>\n {/* Accordions below 768px; the columns branch is display:none here. */}\n <div className={styles['footer__nav-accordions']}>\n {navigation.map((group) => (\n <AccordionItem\n key={group.heading}\n variant=\"panel\"\n label={group.heading}\n className={styles.footer__accordion}\n >\n <ul className={styles['footer__link-list']}>\n {group.links.map((link) => (\n <li key={link.label}>\n {renderNavLink(link, renderLink)}\n </li>\n ))}\n </ul>\n </AccordionItem>\n ))}\n </div>\n\n <div className={styles['footer__nav-columns']}>\n {navigation.map((group) => (\n <div key={group.heading} className={styles.footer__column}>\n <h2 className={styles['footer__column-heading']}>\n {group.heading}\n </h2>\n <ul className={styles['footer__link-list']}>\n {group.links.map((link) => (\n <li key={link.label}>\n {renderNavLink(link, renderLink)}\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </nav>\n )}\n\n {/* The bottom bar always renders: it carries the copyright. */}\n <div\n className={cn(\n styles.footer__divider,\n Boolean(navigation?.length) && styles['footer__divider--after-nav'],\n )}\n />\n\n <div className={styles.footer__meta}>\n {languages && languages.length > 0 && (\n <ul\n className={styles['footer__language-list']}\n aria-label={languagesLabel}\n >\n {languages.map((language) => {\n const isCurrent = language.code === currentLanguageCode;\n\n return (\n <li key={language.code}>\n {renderLink(\n {\n href: language.href,\n className: cn(\n styles.footer__language,\n isCurrent &&\n styles['footer__language--current'],\n focusStyles.focusable,\n ),\n 'aria-label': language.ariaLabel,\n 'aria-current': isCurrent ? 'true' : undefined,\n children: language.label,\n },\n { external: language.external ?? false },\n )}\n </li>\n );\n })}\n </ul>\n )}\n\n <div className={styles['footer__meta-center']}>\n {socialLinks && socialLinks.length > 0 && (\n <ul\n className={styles['footer__social-list']}\n aria-label={socialLabel}\n >\n {socialLinks.map((social) => {\n const Icon = resolveSocialIcon(social.platform);\n\n return (\n <li key={social.platform}>\n {renderLink(\n {\n href: social.href,\n className: cn(\n styles['footer__social-link'],\n focusStyles.focusable,\n ),\n 'aria-label':\n social.ariaLabel ??\n defaultSocialAriaLabel(social.platform),\n children: Icon ? (\n <Icon\n className={\n styles['footer__social-icon']\n }\n aria-hidden=\"true\"\n />\n ) : null,\n },\n { external: true },\n )}\n </li>\n );\n })}\n </ul>\n )}\n\n {organizations && organizations.length > 0 && (\n <ul\n className={styles['footer__organization-list']}\n aria-label={organizationsLabel}\n >\n {organizations.map((organization) => {\n const isCurrent = organization.id === currentOrganizationId;\n\n return (\n <li key={organization.id}>\n {renderLink(\n {\n href: organization.href,\n className: cn(\n styles.footer__organization,\n isCurrent &&\n styles[\n 'footer__organization--current'\n ],\n focusStyles.focusable,\n ),\n 'aria-current': isCurrent\n ? 'true'\n : undefined,\n children: organization.label,\n },\n {\n external: organization.external ?? false,\n },\n )}\n </li>\n );\n })}\n </ul>\n )}\n\n <ul\n className={styles['footer__legal-list']}\n aria-label={mandatoryLinksLabel}\n >\n {visibleMandatoryLinks.map((link) => (\n <li key={link.label}>\n {link.opensCookieSettings ? (\n <button\n type=\"button\"\n onClick={onCookieSettingsClick}\n className={linkClasses(styles.footer__action)}\n >\n {link.label}\n </button>\n ) : (\n renderNavLink(link, renderLink)\n )}\n </li>\n ))}\n <li className={styles.footer__copyright}>\n {copyrightLabel ?? defaultCopyrightLabel()}\n </li>\n </ul>\n </div>\n\n {hasBadges && (\n <div className={styles.footer__apps}>\n {appLinks?.title && (\n <span className={styles['footer__apps-title']}>\n {appLinks.title}\n </span>\n )}\n <div className={styles.footer__badges}>\n {appLinks?.appStore &&\n renderBadge(\n appLinks.appStore,\n appStoreBadge,\n renderLink,\n defaultAppStoreAriaLabel,\n )}\n {appLinks?.googlePlay &&\n renderBadge(\n appLinks.googlePlay,\n googlePlayBadge,\n renderLink,\n defaultGooglePlayAriaLabel,\n )}\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n </footer>\n );\n};\n"],"names":[],"mappings":"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"}