@navikt/ds-react 8.4.0 → 8.5.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 (89) hide show
  1. package/cjs/accordion/Accordion.d.ts +10 -0
  2. package/cjs/accordion/Accordion.js +2 -2
  3. package/cjs/accordion/Accordion.js.map +1 -1
  4. package/cjs/data/table/helpers/table-cell.d.ts +2 -2
  5. package/cjs/data/table/helpers/table-cell.js +2 -5
  6. package/cjs/data/table/helpers/table-cell.js.map +1 -1
  7. package/cjs/data/table/helpers/table-focus.d.ts +26 -2
  8. package/cjs/data/table/helpers/table-focus.js +60 -9
  9. package/cjs/data/table/helpers/table-focus.js.map +1 -1
  10. package/cjs/data/table/helpers/table-grid-nav.d.ts +45 -9
  11. package/cjs/data/table/helpers/table-grid-nav.js +108 -24
  12. package/cjs/data/table/helpers/table-grid-nav.js.map +1 -1
  13. package/cjs/data/table/helpers/table-keyboard.d.ts +24 -3
  14. package/cjs/data/table/helpers/table-keyboard.js +30 -5
  15. package/cjs/data/table/helpers/table-keyboard.js.map +1 -1
  16. package/cjs/data/table/hooks/useGridCache.d.ts +17 -0
  17. package/cjs/data/table/hooks/useGridCache.js +65 -0
  18. package/cjs/data/table/hooks/useGridCache.js.map +1 -0
  19. package/cjs/data/table/root/DataTableRoot.d.ts +1 -1
  20. package/cjs/data/table/root/DataTableRoot.js +2 -2
  21. package/cjs/data/table/root/DataTableRoot.js.map +1 -1
  22. package/cjs/data/table/root/useTableKeyboardNav.d.ts +9 -3
  23. package/cjs/data/table/root/useTableKeyboardNav.js +53 -95
  24. package/cjs/data/table/root/useTableKeyboardNav.js.map +1 -1
  25. package/cjs/data/table/th/DataTableTh.d.ts +1 -1
  26. package/cjs/data/table/th/DataTableTh.js +3 -1
  27. package/cjs/data/table/th/DataTableTh.js.map +1 -1
  28. package/cjs/data/table/tr/DataTableTr.d.ts +6 -2
  29. package/cjs/data/table/tr/DataTableTr.js +4 -2
  30. package/cjs/data/table/tr/DataTableTr.js.map +1 -1
  31. package/cjs/link-card/LinkCard.d.ts +13 -0
  32. package/cjs/link-card/LinkCard.js +2 -2
  33. package/cjs/link-card/LinkCard.js.map +1 -1
  34. package/cjs/process/Process.d.ts +1 -1
  35. package/cjs/utils/i18n/locales/nb.d.ts +154 -75
  36. package/cjs/utils/i18n/locales/nb.js +154 -75
  37. package/cjs/utils/i18n/locales/nb.js.map +1 -1
  38. package/esm/accordion/Accordion.d.ts +10 -0
  39. package/esm/accordion/Accordion.js +2 -2
  40. package/esm/accordion/Accordion.js.map +1 -1
  41. package/esm/data/table/helpers/table-cell.d.ts +2 -2
  42. package/esm/data/table/helpers/table-cell.js +2 -5
  43. package/esm/data/table/helpers/table-cell.js.map +1 -1
  44. package/esm/data/table/helpers/table-focus.d.ts +26 -2
  45. package/esm/data/table/helpers/table-focus.js +55 -9
  46. package/esm/data/table/helpers/table-focus.js.map +1 -1
  47. package/esm/data/table/helpers/table-grid-nav.d.ts +45 -9
  48. package/esm/data/table/helpers/table-grid-nav.js +102 -23
  49. package/esm/data/table/helpers/table-grid-nav.js.map +1 -1
  50. package/esm/data/table/helpers/table-keyboard.d.ts +24 -3
  51. package/esm/data/table/helpers/table-keyboard.js +29 -4
  52. package/esm/data/table/helpers/table-keyboard.js.map +1 -1
  53. package/esm/data/table/hooks/useGridCache.d.ts +17 -0
  54. package/esm/data/table/hooks/useGridCache.js +63 -0
  55. package/esm/data/table/hooks/useGridCache.js.map +1 -0
  56. package/esm/data/table/root/DataTableRoot.d.ts +1 -1
  57. package/esm/data/table/root/DataTableRoot.js +2 -2
  58. package/esm/data/table/root/DataTableRoot.js.map +1 -1
  59. package/esm/data/table/root/useTableKeyboardNav.d.ts +9 -3
  60. package/esm/data/table/root/useTableKeyboardNav.js +58 -100
  61. package/esm/data/table/root/useTableKeyboardNav.js.map +1 -1
  62. package/esm/data/table/th/DataTableTh.d.ts +1 -1
  63. package/esm/data/table/th/DataTableTh.js +3 -1
  64. package/esm/data/table/th/DataTableTh.js.map +1 -1
  65. package/esm/data/table/tr/DataTableTr.d.ts +6 -2
  66. package/esm/data/table/tr/DataTableTr.js +4 -2
  67. package/esm/data/table/tr/DataTableTr.js.map +1 -1
  68. package/esm/link-card/LinkCard.d.ts +13 -0
  69. package/esm/link-card/LinkCard.js +2 -2
  70. package/esm/link-card/LinkCard.js.map +1 -1
  71. package/esm/process/Process.d.ts +1 -1
  72. package/esm/utils/i18n/locales/nb.d.ts +154 -75
  73. package/esm/utils/i18n/locales/nb.js +154 -75
  74. package/esm/utils/i18n/locales/nb.js.map +1 -1
  75. package/package.json +3 -3
  76. package/src/accordion/Accordion.tsx +19 -2
  77. package/src/data/table/helpers/table-cell.ts +2 -7
  78. package/src/data/table/helpers/table-focus.ts +70 -9
  79. package/src/data/table/helpers/table-grid-nav.ts +146 -31
  80. package/src/data/table/helpers/table-keyboard.test.ts +27 -27
  81. package/src/data/table/helpers/table-keyboard.ts +43 -4
  82. package/src/data/table/hooks/useGridCache.ts +73 -0
  83. package/src/data/table/root/DataTableRoot.tsx +2 -3
  84. package/src/data/table/root/useTableKeyboardNav.ts +95 -125
  85. package/src/data/table/th/DataTableTh.tsx +7 -3
  86. package/src/data/table/tr/DataTableTr.tsx +7 -3
  87. package/src/link-card/LinkCard.tsx +15 -1
  88. package/src/process/Process.tsx +1 -1
  89. package/src/utils/i18n/locales/nb.ts +83 -4
@@ -2,217 +2,296 @@ import { nb } from "date-fns/locale";
2
2
  export default {
3
3
  global: {
4
4
  dateLocale: nb,
5
- /** @default "Vis mer" */
5
+ /** @default "Vis mer"
6
+ * @default "Vis mer" */
6
7
  showMore: "Vis mer",
7
- /** @default "Vis mindre" */
8
+ /** @default "Vis mindre"
9
+ * @default "Vis mindre" */
8
10
  showLess: "Vis mindre",
9
- /** @default "Skrivebeskyttet" */
11
+ /** @default "Skrivebeskyttet"
12
+ * @default "Skrivebeskyttet" */
10
13
  readOnly: "Skrivebeskyttet",
11
- /** @default "Lukk" */
14
+ /** @default "Lukk"
15
+ * @default "Lukk" */
12
16
  close: "Lukk",
13
- /** @default "Feil" */
17
+ /** @default "Feil"
18
+ * @default "Feil" */
14
19
  error: "Feil",
15
- /** @default "Informasjon" */
20
+ /** @default "Informasjon"
21
+ * @default "Informasjon" */
16
22
  info: "Informasjon",
17
- /** @default "Suksess" */
23
+ /** @default "Suksess"
24
+ * @default "Suksess" */
18
25
  success: "Suksess",
19
- /** @default "Advarsel" */
26
+ /** @default "Advarsel"
27
+ * @default "Advarsel" */
20
28
  warning: "Advarsel",
21
- /** @default "Kunngjøring" */
29
+ /** @default "Kunngjøring"
30
+ * @default "Kunngjøring" */
22
31
  announcement: "Kunngjøring",
23
32
  },
24
33
  Chips: {
25
34
  Removable: {
26
35
  /** Will be appended to the accessible name for the button.
36
+ * @default "slett"
27
37
  * @default "slett" */
28
38
  labelSuffix: "slett",
29
39
  },
30
40
  },
31
41
  Combobox: {
32
42
  /** The input value will be appended to the end of this text, e.g. `Legg til "input value"`.
43
+ * @default "Legg til"
33
44
  * @default "Legg til" */
34
45
  addOption: "Legg til",
35
- /** @default "Ingen søketreff" */
46
+ /** @default "Ingen søketreff"
47
+ * @default "Ingen søketreff" */
36
48
  noMatches: "Ingen søketreff",
37
49
  /** Loader title
50
+ * @default "Søker…"
38
51
  * @default "Søker…" */
39
52
  loading: "Søker…",
40
- /** @default "{selected} av maks {limit} er valgt." */
53
+ /** @default "{selected} av maks {limit} er valgt."
54
+ * @default "{selected} av maks {limit} er valgt." */
41
55
  maxSelected: "{selected} av maks {limit} er valgt.",
42
56
  },
43
57
  CopyButton: {
44
- /** @default "Kopier" */
58
+ /** @default "Kopier"
59
+ * @default "Kopier" */
45
60
  title: "Kopier",
46
- /** @default "Kopiert!" */
61
+ /** @default "Kopiert!"
62
+ * @default "Kopiert!" */
47
63
  activeText: "Kopiert!",
48
64
  },
49
65
  DatePicker: {
50
- /** @default "Velg dato" */
66
+ /** @default "Velg dato"
67
+ * @default "Velg dato" */
51
68
  chooseDate: "Velg dato",
52
- /** @default "Velg datoer" */
69
+ /** @default "Velg datoer"
70
+ * @default "Velg datoer" */
53
71
  chooseDates: "Velg datoer",
54
- /** @default "Velg start- og sluttdato" */
72
+ /** @default "Velg start- og sluttdato"
73
+ * @default "Velg start- og sluttdato" */
55
74
  chooseDateRange: "Velg start- og sluttdato",
56
- /** @default "Velg måned" */
75
+ /** @default "Velg måned"
76
+ * @default "Velg måned" */
57
77
  chooseMonth: "Velg måned",
58
- /** @default "Uke" */
78
+ /** @default "Uke"
79
+ * @default "Uke" */
59
80
  week: "Uke",
60
- /** @default "Uke {week}" */
81
+ /** @default "Uke {week}"
82
+ * @default "Uke {week}" */
61
83
  weekNumber: "Uke {week}",
62
- /** @default "Velg uke {week}" */
84
+ /** @default "Velg uke {week}"
85
+ * @default "Velg uke {week}" */
63
86
  selectWeekNumber: "Velg uke {week}",
64
- /** @default "Måned" */
87
+ /** @default "Måned"
88
+ * @default "Måned" */
65
89
  month: "Måned",
66
- /** @default "Gå til neste måned" */
90
+ /** @default "Gå til neste måned"
91
+ * @default "Gå til neste måned" */
67
92
  goToNextMonth: "Gå til neste måned",
68
- /** @default "Gå til forrige måned" */
93
+ /** @default "Gå til forrige måned"
94
+ * @default "Gå til forrige måned" */
69
95
  goToPreviousMonth: "Gå til forrige måned",
70
- /** @default "År" */
96
+ /** @default "År"
97
+ * @default "År" */
71
98
  year: "År",
72
- /** @default "Gå til neste år" */
99
+ /** @default "Gå til neste år"
100
+ * @default "Gå til neste år" */
73
101
  goToNextYear: "Gå til neste år",
74
- /** @default "Gå til forrige år" */
102
+ /** @default "Gå til forrige år"
103
+ * @default "Gå til forrige år" */
75
104
  goToPreviousYear: "Gå til forrige år",
76
- /** @default "Åpne datovelger" */
105
+ /** @default "Åpne datovelger"
106
+ * @default "Åpne datovelger" */
77
107
  openDatePicker: "Åpne datovelger",
78
- /** @default "Åpne månedsvelger" */
108
+ /** @default "Åpne månedsvelger"
109
+ * @default "Åpne månedsvelger" */
79
110
  openMonthPicker: "Åpne månedsvelger",
80
- /** @default "Lukk datovelger" */
111
+ /** @default "Lukk datovelger"
112
+ * @default "Lukk datovelger" */
81
113
  closeDatePicker: "Lukk datovelger",
82
- /** @default "Lukk månedsvelger" */
114
+ /** @default "Lukk månedsvelger"
115
+ * @default "Lukk månedsvelger" */
83
116
  closeMonthPicker: "Lukk månedsvelger",
84
117
  },
85
118
  ErrorSummary: {
86
- /** @default "Du må rette disse feilene før du kan fortsette:" */
119
+ /** @default "Du må rette disse feilene før du kan fortsette:"
120
+ * @default "Du må rette disse feilene før du kan fortsette:" */
87
121
  heading: "Du må rette disse feilene før du kan fortsette:",
88
122
  },
89
123
  FileUpload: {
90
124
  dropzone: {
91
- /** @default "Velg fil" */
125
+ /** @default "Velg fil"
126
+ * @default "Velg fil" */
92
127
  button: "Velg fil",
93
- /** @default "Velg filer" */
128
+ /** @default "Velg filer"
129
+ * @default "Velg filer" */
94
130
  buttonMultiple: "Velg filer",
95
- /** @default "Dra og slipp filen her" */
131
+ /** @default "Dra og slipp filen her"
132
+ * @default "Dra og slipp filen her" */
96
133
  dragAndDrop: "Dra og slipp filen her",
97
- /** @default "Dra og slipp filer her" */
134
+ /** @default "Dra og slipp filer her"
135
+ * @default "Dra og slipp filer her" */
98
136
  dragAndDropMultiple: "Dra og slipp filer her",
99
- /** @default "Slipp" */
137
+ /** @default "Slipp"
138
+ * @default "Slipp" */
100
139
  drop: "Slipp",
101
- /** @default "eller" */
140
+ /** @default "eller"
141
+ * @default "eller" */
102
142
  or: "eller",
103
- /** @default "Filopplasting er deaktivert" */
143
+ /** @default "Filopplasting er deaktivert"
144
+ * @default "Filopplasting er deaktivert" */
104
145
  disabled: "Filopplasting er deaktivert",
105
- /** @default "Du kan ikke laste opp flere filer" */
146
+ /** @default "Du kan ikke laste opp flere filer"
147
+ * @default "Du kan ikke laste opp flere filer" */
106
148
  disabledFilelimit: "Du kan ikke laste opp flere filer",
107
149
  },
108
150
  item: {
109
- /** @default "Prøv å laste opp filen på nytt" */
151
+ /** @default "Prøv å laste opp filen på nytt"
152
+ * @default "Prøv å laste opp filen på nytt" */
110
153
  retryButtonTitle: "Prøv å laste opp filen på nytt",
111
- /** @default "Slett filen" */
154
+ /** @default "Slett filen"
155
+ * @default "Slett filen" */
112
156
  deleteButtonTitle: "Slett filen",
113
- /** @default "Laster opp…" */
157
+ /** @default "Laster opp…"
158
+ * @default "Laster opp…" */
114
159
  uploading: "Laster opp…",
115
- /** @default "Laster ned…" */
160
+ /** @default "Laster ned…"
161
+ * @default "Laster ned…" */
116
162
  downloading: "Laster ned…",
117
163
  },
118
164
  },
119
165
  FormProgress: {
120
- /** @default "Steg {activeStep} av {totalSteps}" */
166
+ /** @default "Steg {activeStep} av {totalSteps}"
167
+ * @default "Steg {activeStep} av {totalSteps}" */
121
168
  step: "Steg {activeStep} av {totalSteps}",
122
- /** @default "Vis alle steg" */
169
+ /** @default "Vis alle steg"
170
+ * @default "Vis alle steg" */
123
171
  showAllSteps: "Vis alle steg",
124
- /** @default "Skjul alle steg" */
172
+ /** @default "Skjul alle steg"
173
+ * @default "Skjul alle steg" */
125
174
  hideAllSteps: "Skjul alle steg",
126
175
  },
127
176
  FormSummary: {
128
- /** @default "Endre svar" */
177
+ /** @default "Endre svar"
178
+ * @default "Endre svar" */
129
179
  editAnswer: "Endre svar",
130
180
  },
131
181
  GuidePanel: {
132
- /** @default "Illustrasjon av veileder" */
182
+ /** @default "Illustrasjon av veileder"
183
+ * @default "Illustrasjon av veileder" */
133
184
  illustrationLabel: "Illustrasjon av veileder",
134
185
  },
135
186
  HelpText: {
136
- /** @default "Mer informasjon" */
187
+ /** @default "Mer informasjon"
188
+ * @default "Mer informasjon" */
137
189
  title: "Mer informasjon",
138
190
  },
139
191
  Loader: {
140
- /** @default "Venter…" */
192
+ /** @default "Venter…"
193
+ * @default "Venter…" */
141
194
  title: "Venter…",
142
195
  },
143
196
  Pagination: {
144
- /** @default "Forrige" */
197
+ /** @default "Forrige"
198
+ * @default "Forrige" */
145
199
  previous: "Forrige",
146
- /** @default "Neste" */
200
+ /** @default "Neste"
201
+ * @default "Neste" */
147
202
  next: "Neste",
148
203
  },
149
204
  Process: {
150
- /** @default "Aktiv" */
205
+ /** @default "Aktiv"
206
+ * @default "Aktiv" */
151
207
  active: "Aktiv",
152
208
  },
153
209
  ProgressBar: {
154
- /** @default "{current} av {max}" */
210
+ /** @default "{current} av {max}"
211
+ * @default "{current} av {max}" */
155
212
  progress: "{current} av {max}",
156
- /** @default "Fremdrift kan ikke beregnes, antatt tid er {seconds} sekunder." */
213
+ /** @default "Fremdrift kan ikke beregnes, antatt tid er {seconds} sekunder."
214
+ * @default "Fremdrift kan ikke beregnes, antatt tid er {seconds} sekunder." */
157
215
  progressUnknown: "Fremdrift kan ikke beregnes, antatt tid er {seconds} sekunder.",
158
216
  },
159
217
  Search: {
160
- /** @default "Tøm feltet" */
218
+ /** @default "Tøm feltet"
219
+ * @default "Tøm feltet" */
161
220
  clear: "Tøm feltet",
162
- /** @default "Søk" */
221
+ /** @default "Søk"
222
+ * @default "Søk" */
163
223
  search: "Søk",
164
224
  },
165
225
  Textarea: {
166
226
  /** Screen readers only
227
+ * @default "Tekstområde med plass til {maxLength} tegn."
167
228
  * @default "Tekstområde med plass til {maxLength} tegn." */
168
229
  maxLength: "Tekstområde med plass til {maxLength} tegn.",
169
- /** @default "{chars} tegn for mye" */
230
+ /** @default "{chars} tegn for mye"
231
+ * @default "{chars} tegn for mye" */
170
232
  charsTooMany: "{chars} tegn for mye",
171
- /** @default "{chars} tegn igjen" */
233
+ /** @default "{chars} tegn igjen"
234
+ * @default "{chars} tegn igjen" */
172
235
  charsLeft: "{chars} tegn igjen",
173
236
  },
174
237
  Timeline: {
175
- /** @default "dd.MM.yyyy" */
238
+ /** @default "dd.MM.yyyy"
239
+ * @default "dd.MM.yyyy" */
176
240
  dateFormat: "dd.MM.yyyy",
177
- /** @default "dd.MM" */
241
+ /** @default "dd.MM"
242
+ * @default "dd.MM" */
178
243
  dayFormat: "dd.MM",
179
- /** @default "MMM yy" */
244
+ /** @default "MMM yy"
245
+ * @default "MMM yy" */
180
246
  monthFormat: "MMM yy",
181
- /** @default "yyyy" */
247
+ /** @default "yyyy"
248
+ * @default "yyyy" */
182
249
  yearFormat: "yyyy",
183
250
  Row: {
184
- /** @default "Ingen perioder" */
251
+ /** @default "Ingen perioder"
252
+ * @default "Ingen perioder" */
185
253
  noPeriods: "Ingen perioder",
186
- /** @default "{start} til {end}" */
254
+ /** @default "{start} til {end}"
255
+ * @default "{start} til {end}" */
187
256
  period: "{start} til {end}",
188
257
  },
189
258
  Period: {
190
- /** @default "Suksess" */
259
+ /** @default "Suksess"
260
+ * @default "Suksess" */
191
261
  success: "Suksess",
192
- /** @default "Advarsel" */
262
+ /** @default "Advarsel"
263
+ * @default "Advarsel" */
193
264
  warning: "Advarsel",
194
- /** @default "Fare" */
265
+ /** @default "Fare"
266
+ * @default "Fare" */
195
267
  danger: "Fare",
196
- /** @default "Info" */
268
+ /** @default "Info"
269
+ * @default "Info" */
197
270
  info: "Info",
198
- /** @default "Nøytral" */
271
+ /** @default "Nøytral"
272
+ * @default "Nøytral" */
199
273
  neutral: "Nøytral",
200
- /** @default "{status} fra {start} til {end}" */
274
+ /** @default "{status} fra {start} til {end}"
275
+ * @default "{status} fra {start} til {end}" */
201
276
  period: "{status} fra {start} til {end}",
202
277
  },
203
278
  Pin: {
204
- /** @default "Pin: {date}" */
279
+ /** @default "Pin: {date}"
280
+ * @default "Pin: {date}" */
205
281
  pin: "Pin: {date}",
206
282
  },
207
283
  Zoom: {
208
- /** @default "Zoom tidslinjen {start} til {end}" */
284
+ /** @default "Zoom tidslinjen {start} til {end}"
285
+ * @default "Zoom tidslinjen {start} til {end}" */
209
286
  zoom: "Zoom tidslinjen {start} til {end}",
210
- /** @default "Tilbakestill tidsperspektiv" */
287
+ /** @default "Tilbakestill tidsperspektiv"
288
+ * @default "Tilbakestill tidsperspektiv" */
211
289
  reset: "Tilbakestill tidsperspektiv",
212
290
  },
213
291
  },
214
292
  Tooltip: {
215
- /** @default "eller" */
293
+ /** @default "eller"
294
+ * @default "eller" */
216
295
  shortcutSeparator: "eller",
217
296
  },
218
297
  };
@@ -1 +1 @@
1
- {"version":3,"file":"nb.js","sourceRoot":"","sources":["../../../../src/utils/i18n/locales/nb.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nb.js","sourceRoot":"","sources":["../../../../src/utils/i18n/locales/nb.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@navikt/ds-react",
3
- "version": "8.4.0",
3
+ "version": "8.5.0",
4
4
  "description": "React components from the Norwegian Labour and Welfare Administration.",
5
5
  "author": "Aksel, a team part of the Norwegian Labour and Welfare Administration.",
6
6
  "license": "MIT",
@@ -705,8 +705,8 @@
705
705
  "dependencies": {
706
706
  "@floating-ui/react": "0.27.8",
707
707
  "@floating-ui/react-dom": "^2.1.6",
708
- "@navikt/aksel-icons": "^8.4.0",
709
- "@navikt/ds-tokens": "^8.4.0",
708
+ "@navikt/aksel-icons": "^8.5.0",
709
+ "@navikt/ds-tokens": "^8.5.0",
710
710
  "date-fns": "^4.0.0",
711
711
  "react-day-picker": "9.7.0"
712
712
  },
@@ -57,6 +57,16 @@ interface AccordionProps extends React.HTMLAttributes<HTMLDivElement> {
57
57
  * @see [📝 Documentation](https://aksel.nav.no/grunnleggende/styling/farger-tokens)
58
58
  */
59
59
  "data-color"?: Exclude<AkselColor, AkselStatusColorRole>;
60
+ /**
61
+ * Changes the HTML element used for the root element.
62
+ *
63
+ * **When using `section`, provide either `aria-label` or `aria-labelledby` for better accessibility.**
64
+ * `axe-core` might warn about unique landmarks if you have multiple Accordions on page with the same label.
65
+ * In those cases consider updating to unique `aria-label` or `aria-labelledby` props.
66
+ * @see [📝 Landmarks unique](https://dequeuniversity.com/rules/axe/4.6/landmark-unique)
67
+ * @default "div"
68
+ */
69
+ as?: "div" | "section";
60
70
  }
61
71
 
62
72
  /**
@@ -81,7 +91,14 @@ interface AccordionProps extends React.HTMLAttributes<HTMLDivElement> {
81
91
  */
82
92
  export const Accordion = forwardRef<HTMLDivElement, AccordionProps>(
83
93
  (
84
- { className, variant = "default", size = "medium", indent = true, ...rest },
94
+ {
95
+ className,
96
+ variant = "default",
97
+ size = "medium",
98
+ indent = true,
99
+ as: Component = "div",
100
+ ...rest
101
+ },
85
102
  ref,
86
103
  ) => {
87
104
  const localRef = useRef<HTMLDivElement | null>(null);
@@ -117,7 +134,7 @@ export const Accordion = forwardRef<HTMLDivElement, AccordionProps>(
117
134
  variant,
118
135
  }}
119
136
  >
120
- <div
137
+ <Component
121
138
  {...omit(rest, ["headingSize"])}
122
139
  className={cl(
123
140
  "aksel-accordion",
@@ -4,20 +4,15 @@ function getFirstCell(tableRef: HTMLTableElement): Element | null {
4
4
  return tableRef.querySelector("td, th");
5
5
  }
6
6
 
7
- function getActiveCell(
7
+ function focusInitialTableTarget(
8
8
  tableRef: HTMLTableElement | null,
9
- activeCell: Element | null,
10
9
  ): Element | null {
11
10
  if (!tableRef) {
12
11
  return null;
13
12
  }
14
13
 
15
- if (activeCell) {
16
- return activeCell;
17
- }
18
-
19
14
  const firstCell = getFirstCell(tableRef);
20
15
  return firstCell ? focusCell(firstCell) : null;
21
16
  }
22
17
 
23
- export { getActiveCell, getFirstCell };
18
+ export { getFirstCell, focusInitialTableTarget };
@@ -1,3 +1,29 @@
1
+ /**
2
+ * WeakMap to store original tabIndex values for cells.
3
+ * Used to restore tabIndex when navigation moves away from a cell.
4
+ */
5
+ const originalTabIndexMap = new WeakMap<Element, number>();
6
+
7
+ /**
8
+ * Stores the original tabIndex of a cell if not already stored, and returns it.
9
+ */
10
+ function syncOriginalTabIndex(cell: Element): void {
11
+ if (!originalTabIndexMap.has(cell)) {
12
+ const current = (cell as HTMLElement).tabIndex;
13
+ originalTabIndexMap.set(cell, current);
14
+ }
15
+ }
16
+
17
+ /**
18
+ * Restores the original tabIndex for a cell.
19
+ */
20
+ function restoreTabIndex(cell: Element): void {
21
+ const original = originalTabIndexMap.get(cell);
22
+ if (original !== undefined) {
23
+ (cell as HTMLElement).tabIndex = original;
24
+ }
25
+ }
26
+
1
27
  /**
2
28
  * Makes sure only focusable and non-disabled elements are targeted when navigating through the table using keyboard interactions.
3
29
  * Tries to find the most logical focus target inside a cell, by looking for commonly used interactive elements,
@@ -6,7 +32,7 @@
6
32
  * If the assumed focus target is not the cell itself, we check if that element is hidden or disabled, and fall back to the cell if so,
7
33
  * since we want to avoid/can't focus hidden/disabled elements.
8
34
  */
9
- function getFocusableTarget(cell: Element): HTMLElement | null {
35
+ function findFocusableElementInCell(cell: Element): HTMLElement | null {
10
36
  const el = cell as HTMLElement | null;
11
37
  if (!el || isHiddenElement(el)) {
12
38
  return null;
@@ -31,8 +57,7 @@ function getFocusableTarget(cell: Element): HTMLElement | null {
31
57
  }
32
58
 
33
59
  /**
34
- * TODO:
35
- * - validate this implementation against SR-only elements
60
+ * Checks if an element is visually hidden (but not SR-only).
36
61
  */
37
62
  function isHiddenElement(el: HTMLElement): boolean {
38
63
  if (el.hidden) {
@@ -43,6 +68,9 @@ function isHiddenElement(el: HTMLElement): boolean {
43
68
  return style.display === "none" || style.visibility === "hidden";
44
69
  }
45
70
 
71
+ /**
72
+ * Checks if an element is disabled (via aria-disabled, fieldset, or native disabled property).
73
+ */
46
74
  function isDisabledElement(el: HTMLElement): boolean {
47
75
  if (el.getAttribute("aria-disabled") === "true") {
48
76
  return true;
@@ -64,8 +92,12 @@ function isDisabledElement(el: HTMLElement): boolean {
64
92
  return false;
65
93
  }
66
94
 
67
- function focusCell(cell: Element): Element | null {
68
- const focusTarget = getFocusableTarget(cell);
95
+ /**
96
+ * Determines the focus target and updates tabIndex if the cell itself should be focused.
97
+ * Returns null if no focusable target found.
98
+ */
99
+ function prepareCellFocus(cell: Element): HTMLElement | null {
100
+ const focusTarget = findFocusableElementInCell(cell);
69
101
  if (!focusTarget) {
70
102
  return null;
71
103
  }
@@ -74,15 +106,34 @@ function focusCell(cell: Element): Element | null {
74
106
  (cell as HTMLElement).tabIndex = 0;
75
107
  }
76
108
 
77
- focusTarget.focus({
109
+ return focusTarget;
110
+ }
111
+
112
+ /**
113
+ * Applies focus and scroll to an element.
114
+ */
115
+ function applyFocusAndScroll(element: HTMLElement): void {
116
+ element.focus({
78
117
  preventScroll: true,
79
118
  });
80
119
 
81
- focusTarget.scrollIntoView({
120
+ element.scrollIntoView({
82
121
  behavior: "smooth",
83
122
  block: "nearest",
84
123
  inline: "nearest",
85
124
  });
125
+ }
126
+
127
+ /**
128
+ * Focuses a cell by finding its focusable target and applying focus with scroll.
129
+ */
130
+ function focusCell(cell: Element): Element | null {
131
+ const focusTarget = prepareCellFocus(cell);
132
+ if (!focusTarget) {
133
+ return null;
134
+ }
135
+
136
+ applyFocusAndScroll(focusTarget);
86
137
  return cell;
87
138
  }
88
139
 
@@ -92,7 +143,8 @@ function focusCellAndUpdateTabIndex(
92
143
  { shouldFocus = true }: { shouldFocus?: boolean } = {},
93
144
  ): Element | null {
94
145
  if (previousCell && previousCell !== nextCell) {
95
- (previousCell as HTMLElement).tabIndex = -1;
146
+ syncOriginalTabIndex(previousCell);
147
+ restoreTabIndex(previousCell);
96
148
  }
97
149
 
98
150
  if (!shouldFocus) {
@@ -102,4 +154,13 @@ function focusCellAndUpdateTabIndex(
102
154
  return focusCell(nextCell);
103
155
  }
104
156
 
105
- export { focusCell, focusCellAndUpdateTabIndex, getFocusableTarget };
157
+ export {
158
+ applyFocusAndScroll,
159
+ focusCell,
160
+ focusCellAndUpdateTabIndex,
161
+ findFocusableElementInCell,
162
+ isDisabledElement,
163
+ isHiddenElement,
164
+ prepareCellFocus,
165
+ restoreTabIndex,
166
+ };