@equinor/eds-core-react 0.41.0 → 0.41.2

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.
@@ -1274,7 +1274,7 @@ const ToggleButton = /*#__PURE__*/react.forwardRef(function ToggleButton({
1274
1274
  }, [selectedIndexes]);
1275
1275
  function updateProps(child, isSelected, index) {
1276
1276
  const childElement = child;
1277
- if ( /*#__PURE__*/react.isValidElement(child) && child.type === Button$2) {
1277
+ if ( /*#__PURE__*/react.isValidElement(child)) {
1278
1278
  const buttonProps = {
1279
1279
  'aria-pressed': isSelected ? true : undefined,
1280
1280
  variant: isSelected ? 'contained' : 'outlined',
@@ -6193,7 +6193,8 @@ const Snackbar$1 = /*#__PURE__*/react.forwardRef(function Snackbar({
6193
6193
  }, autoHideDuration);
6194
6194
  }
6195
6195
  return () => clearTimeout(timer.current);
6196
- }, [open, setVisible, autoHideDuration, onClose]);
6196
+ // eslint-disable-next-line react-hooks/exhaustive-deps
6197
+ }, [open, autoHideDuration]);
6197
6198
  const props = {
6198
6199
  ref,
6199
6200
  ...rest
@@ -11192,23 +11193,58 @@ const GridColumn = styled__default.default.button.withConfig({
11192
11193
  })(["background-color:transparent;outline:none;border:none;display:flex;justify-content:center;cursor:pointer;padding:8px;font-size:", ";font-family:", ";font-weight:", ";line-height:", ";color:", ";border-radius:999px;", ";&:hover{background-color:#f0f0f0;}&:focus{outline:2px dashed ", ";}"], edsTokens.tokens.typography.navigation.button.fontSize, edsTokens.tokens.typography.navigation.button.fontFamily, edsTokens.tokens.typography.navigation.button.fontWeight, edsTokens.tokens.typography.navigation.button.lineHeight, edsTokens.tokens.colors.text.static_icons__default.rgba, ({
11193
11194
  $active
11194
11195
  }) => $active ? `background-color: ${edsTokens.tokens.colors.interactive.primary__selected_highlight.rgba}` : '', edsTokens.tokens.colors.interactive.primary__resting.rgba);
11196
+ const TOTAL_VISIBLE_YEARS = 36;
11197
+ const RANGE_OFFSET = 30 / 2;
11195
11198
  const GridFocusManager = ({
11196
11199
  year: selectedYear,
11197
- setFocusedYear
11200
+ setFocusedYear,
11201
+ yearPickerPage,
11202
+ setYearPickerPage
11198
11203
  }) => {
11199
11204
  const focusManager = reactAria.useFocusManager();
11200
- const onKeyDown = e => {
11205
+ const prevYear = react.useRef();
11206
+ const navByKeyboard = react.useRef(false);
11207
+ const page = yearPickerPage * TOTAL_VISIBLE_YEARS;
11208
+ const years = Array.from({
11209
+ length: TOTAL_VISIBLE_YEARS
11210
+ }, (_, i) => i + (selectedYear + page - RANGE_OFFSET));
11211
+ react.useEffect(() => {
11212
+ if (prevYear.current === undefined) {
11213
+ prevYear.current = yearPickerPage;
11214
+ return;
11215
+ }
11216
+ if (!navByKeyboard.current) {
11217
+ focusManager.focusFirst();
11218
+ return;
11219
+ }
11220
+ navByKeyboard.current = false;
11221
+ yearPickerPage > prevYear.current ? focusManager.focusFirst() : focusManager.focusLast();
11222
+ prevYear.current = yearPickerPage;
11223
+ }, [yearPickerPage, focusManager]);
11224
+ const onKeyDown = year => e => {
11201
11225
  const target = e.currentTarget;
11202
11226
  const parent = target.parentElement;
11227
+ const isFirstYear = years.at(0) === year;
11228
+ const isLastYear = years.at(-1) === year;
11203
11229
  switch (e.key) {
11204
11230
  case 'ArrowRight':
11205
11231
  e.preventDefault();
11232
+ if (isLastYear) {
11233
+ navByKeyboard.current = true;
11234
+ setYearPickerPage(page => page + 1);
11235
+ break;
11236
+ }
11206
11237
  focusManager.focusNext({
11207
11238
  wrap: true
11208
11239
  });
11209
11240
  break;
11210
11241
  case 'ArrowLeft':
11211
11242
  e.preventDefault();
11243
+ if (isFirstYear) {
11244
+ navByKeyboard.current = true;
11245
+ setYearPickerPage(page => page - 1);
11246
+ break;
11247
+ }
11212
11248
  focusManager.focusPrevious({
11213
11249
  wrap: true
11214
11250
  });
@@ -11216,6 +11252,11 @@ const GridFocusManager = ({
11216
11252
  case 'ArrowDown':
11217
11253
  {
11218
11254
  e.preventDefault();
11255
+ if (isLastYear) {
11256
+ navByKeyboard.current = true;
11257
+ setYearPickerPage(page => page + 1);
11258
+ break;
11259
+ }
11219
11260
  const selfIndex = Array.from(parent.children).indexOf(target);
11220
11261
  const focusElement = Array.from(parent.children).at(selfIndex + 5);
11221
11262
  focusManager.focusNext({
@@ -11226,6 +11267,11 @@ const GridFocusManager = ({
11226
11267
  case 'ArrowUp':
11227
11268
  {
11228
11269
  e.preventDefault();
11270
+ if (isFirstYear) {
11271
+ navByKeyboard.current = true;
11272
+ setYearPickerPage(page => page - 1);
11273
+ break;
11274
+ }
11229
11275
  const selfIndex = Array.from(parent.children).indexOf(target);
11230
11276
  const focusElement = Array.from(parent.children).at(selfIndex - 5);
11231
11277
  focusManager.focusPrevious({
@@ -11235,12 +11281,9 @@ const GridFocusManager = ({
11235
11281
  }
11236
11282
  }
11237
11283
  };
11238
- const years = Array.from({
11239
- length: 36
11240
- }, (_, i) => i + (selectedYear - 30 / 2));
11241
11284
  return years.map(year => /*#__PURE__*/jsxRuntime.jsx(GridColumn, {
11242
11285
  $active: selectedYear === year,
11243
- onKeyDown: onKeyDown,
11286
+ onKeyDown: onKeyDown(year),
11244
11287
  onClick: () => setFocusedYear(year),
11245
11288
  "aria-label": `Set year to ${year}`,
11246
11289
  tabIndex: 0,
@@ -11249,7 +11292,9 @@ const GridFocusManager = ({
11249
11292
  };
11250
11293
  const YearGrid = ({
11251
11294
  setFocusedYear,
11252
- year: selectedYear
11295
+ year: selectedYear,
11296
+ yearPickerPage,
11297
+ setYearPickerPage
11253
11298
  }) => {
11254
11299
  return /*#__PURE__*/jsxRuntime.jsx(Grid, {
11255
11300
  children: /*#__PURE__*/jsxRuntime.jsx(reactAria.FocusScope, {
@@ -11258,7 +11303,9 @@ const YearGrid = ({
11258
11303
  autoFocus: true,
11259
11304
  children: /*#__PURE__*/jsxRuntime.jsx(GridFocusManager, {
11260
11305
  year: selectedYear,
11261
- setFocusedYear: setFocusedYear
11306
+ setFocusedYear: setFocusedYear,
11307
+ yearPickerPage: yearPickerPage,
11308
+ setYearPickerPage: setYearPickerPage
11262
11309
  })
11263
11310
  })
11264
11311
  });
@@ -11266,10 +11313,15 @@ const YearGrid = ({
11266
11313
 
11267
11314
  /* eslint-disable react/no-array-index-key */
11268
11315
 
11316
+ /**
11317
+ * The grid laying out the cells for the calendars in {link Calendar} and {link RangeCalendar}
11318
+ */
11269
11319
  function CalendarGrid({
11270
11320
  state,
11271
11321
  showYearPicker,
11272
11322
  setShowYearPicker,
11323
+ yearPickerPage,
11324
+ setYearPickerPage,
11273
11325
  ...props
11274
11326
  }) {
11275
11327
  const {
@@ -11294,7 +11346,9 @@ function CalendarGrid({
11294
11346
  year
11295
11347
  }));
11296
11348
  setShowYearPicker(false);
11297
- }
11349
+ },
11350
+ yearPickerPage: yearPickerPage,
11351
+ setYearPickerPage: setYearPickerPage
11298
11352
  }) : /*#__PURE__*/jsxRuntime.jsxs("table", {
11299
11353
  ...gridProps,
11300
11354
  style: {
@@ -11355,15 +11409,16 @@ function CalendarHeader({
11355
11409
  previousMonthDisabled,
11356
11410
  nextMonthDisabled,
11357
11411
  showYearPicker,
11358
- setShowYearPicker
11412
+ setShowYearPicker,
11413
+ setYearPickerPage
11359
11414
  }) {
11360
11415
  return /*#__PURE__*/jsxRuntime.jsx(HeaderWrapper, {
11361
11416
  children: /*#__PURE__*/jsxRuntime.jsxs(HeaderActions, {
11362
11417
  children: [/*#__PURE__*/jsxRuntime.jsx(Button$1, {
11363
11418
  variant: 'ghost_icon',
11364
11419
  "aria-label": 'Previous month',
11365
- disabled: previousMonthDisabled || showYearPicker,
11366
- onClick: () => state.focusPreviousPage(),
11420
+ disabled: previousMonthDisabled,
11421
+ onClick: () => showYearPicker ? setYearPickerPage(page => page - 1) : state.focusPreviousPage(),
11367
11422
  children: /*#__PURE__*/jsxRuntime.jsx(Icon$1, {
11368
11423
  data: edsIcons.chevron_left
11369
11424
  })
@@ -11392,8 +11447,8 @@ function CalendarHeader({
11392
11447
  }
11393
11448
  }), /*#__PURE__*/jsxRuntime.jsx(Button$1, {
11394
11449
  variant: 'ghost_icon',
11395
- onClick: () => state.focusNextPage(),
11396
- disabled: nextMonthDisabled || showYearPicker,
11450
+ onClick: () => showYearPicker ? setYearPickerPage(page => page + 1) : state.focusNextPage(),
11451
+ disabled: nextMonthDisabled,
11397
11452
  "aria-label": 'Next month',
11398
11453
  children: /*#__PURE__*/jsxRuntime.jsx(Icon$1, {
11399
11454
  data: edsIcons.chevron_right
@@ -11414,6 +11469,7 @@ const Calendar = /*#__PURE__*/react.forwardRef(({
11414
11469
  ...props
11415
11470
  }, ref) => {
11416
11471
  const [showYearPicker, setShowYearPicker] = react.useState(false);
11472
+ const [yearPickerPage, setYearPickerPage] = react.useState(0);
11417
11473
  const {
11418
11474
  locale
11419
11475
  } = reactAria.useLocale();
@@ -11451,7 +11507,8 @@ const Calendar = /*#__PURE__*/react.forwardRef(({
11451
11507
  previousMonthDisabled: prevButtonProps.isDisabled,
11452
11508
  nextMonthDisabled: nextButtonProps.isDisabled,
11453
11509
  setShowYearPicker: setShowYearPicker,
11454
- showYearPicker: showYearPicker
11510
+ showYearPicker: showYearPicker,
11511
+ setYearPickerPage: setYearPickerPage
11455
11512
  })
11456
11513
  }), /*#__PURE__*/jsxRuntime.jsx(Popover.Content, {
11457
11514
  className: "calendar",
@@ -11461,7 +11518,9 @@ const Calendar = /*#__PURE__*/react.forwardRef(({
11461
11518
  children: /*#__PURE__*/jsxRuntime.jsx(CalendarGrid, {
11462
11519
  state: calendarState,
11463
11520
  setShowYearPicker: setShowYearPicker,
11464
- showYearPicker: showYearPicker
11521
+ showYearPicker: showYearPicker,
11522
+ yearPickerPage: yearPickerPage,
11523
+ setYearPickerPage: setYearPickerPage
11465
11524
  })
11466
11525
  }), Footer && /*#__PURE__*/jsxRuntime.jsx(Popover.Actions, {
11467
11526
  children: /*#__PURE__*/jsxRuntime.jsx(Footer, {
@@ -11997,6 +12056,7 @@ const RangeCalendar = /*#__PURE__*/react.forwardRef(({
11997
12056
  ...props
11998
12057
  }, ref) => {
11999
12058
  const [showYearPicker, setShowYearPicker] = react.useState(false);
12059
+ const [yearPickerPage, setYearPickerPage] = react.useState(0);
12000
12060
  const {
12001
12061
  locale
12002
12062
  } = reactAria.useLocale();
@@ -12027,13 +12087,16 @@ const RangeCalendar = /*#__PURE__*/react.forwardRef(({
12027
12087
  state: state,
12028
12088
  title: title,
12029
12089
  setShowYearPicker: setShowYearPicker,
12030
- showYearPicker: showYearPicker
12090
+ showYearPicker: showYearPicker,
12091
+ setYearPickerPage: setYearPickerPage
12031
12092
  })
12032
12093
  }), /*#__PURE__*/jsxRuntime.jsx(Popover.Content, {
12033
12094
  children: /*#__PURE__*/jsxRuntime.jsx(CalendarGrid, {
12034
12095
  state: state,
12035
12096
  setShowYearPicker: setShowYearPicker,
12036
- showYearPicker: showYearPicker
12097
+ showYearPicker: showYearPicker,
12098
+ yearPickerPage: yearPickerPage,
12099
+ setYearPickerPage: setYearPickerPage
12037
12100
  })
12038
12101
  }), Footer && /*#__PURE__*/jsxRuntime.jsx(Popover.Actions, {
12039
12102
  children: /*#__PURE__*/jsxRuntime.jsx(Footer, {
@@ -1,5 +1,4 @@
1
1
  import { forwardRef, useState, useEffect, Children, isValidElement, cloneElement } from 'react';
2
- import { Button } from '../Button.js';
3
2
  import { jsx } from 'react/jsx-runtime';
4
3
  import { Tooltip } from '../../Tooltip/Tooltip.js';
5
4
  import { ButtonGroup } from '../ButtonGroup/ButtonGroup.js';
@@ -19,7 +18,7 @@ const ToggleButton = /*#__PURE__*/forwardRef(function ToggleButton({
19
18
  }, [selectedIndexes]);
20
19
  function updateProps(child, isSelected, index) {
21
20
  const childElement = child;
22
- if ( /*#__PURE__*/isValidElement(child) && child.type === Button) {
21
+ if ( /*#__PURE__*/isValidElement(child)) {
23
22
  const buttonProps = {
24
23
  'aria-pressed': isSelected ? true : undefined,
25
24
  variant: isSelected ? 'contained' : 'outlined',
@@ -14,6 +14,7 @@ const Calendar = /*#__PURE__*/forwardRef(({
14
14
  ...props
15
15
  }, ref) => {
16
16
  const [showYearPicker, setShowYearPicker] = useState(false);
17
+ const [yearPickerPage, setYearPickerPage] = useState(0);
17
18
  const {
18
19
  locale
19
20
  } = useLocale();
@@ -51,7 +52,8 @@ const Calendar = /*#__PURE__*/forwardRef(({
51
52
  previousMonthDisabled: prevButtonProps.isDisabled,
52
53
  nextMonthDisabled: nextButtonProps.isDisabled,
53
54
  setShowYearPicker: setShowYearPicker,
54
- showYearPicker: showYearPicker
55
+ showYearPicker: showYearPicker,
56
+ setYearPickerPage: setYearPickerPage
55
57
  })
56
58
  }), /*#__PURE__*/jsx(Popover.Content, {
57
59
  className: "calendar",
@@ -61,7 +63,9 @@ const Calendar = /*#__PURE__*/forwardRef(({
61
63
  children: /*#__PURE__*/jsx(CalendarGrid, {
62
64
  state: calendarState,
63
65
  setShowYearPicker: setShowYearPicker,
64
- showYearPicker: showYearPicker
66
+ showYearPicker: showYearPicker,
67
+ yearPickerPage: yearPickerPage,
68
+ setYearPickerPage: setYearPickerPage
65
69
  })
66
70
  }), Footer && /*#__PURE__*/jsx(Popover.Actions, {
67
71
  children: /*#__PURE__*/jsx(Footer, {
@@ -6,10 +6,15 @@ import { jsx, jsxs } from 'react/jsx-runtime';
6
6
 
7
7
  /* eslint-disable react/no-array-index-key */
8
8
 
9
+ /**
10
+ * The grid laying out the cells for the calendars in {link Calendar} and {link RangeCalendar}
11
+ */
9
12
  function CalendarGrid({
10
13
  state,
11
14
  showYearPicker,
12
15
  setShowYearPicker,
16
+ yearPickerPage,
17
+ setYearPickerPage,
13
18
  ...props
14
19
  }) {
15
20
  const {
@@ -34,7 +39,9 @@ function CalendarGrid({
34
39
  year
35
40
  }));
36
41
  setShowYearPicker(false);
37
- }
42
+ },
43
+ yearPickerPage: yearPickerPage,
44
+ setYearPickerPage: setYearPickerPage
38
45
  }) : /*#__PURE__*/jsxs("table", {
39
46
  ...gridProps,
40
47
  style: {
@@ -39,15 +39,16 @@ function CalendarHeader({
39
39
  previousMonthDisabled,
40
40
  nextMonthDisabled,
41
41
  showYearPicker,
42
- setShowYearPicker
42
+ setShowYearPicker,
43
+ setYearPickerPage
43
44
  }) {
44
45
  return /*#__PURE__*/jsx(HeaderWrapper, {
45
46
  children: /*#__PURE__*/jsxs(HeaderActions, {
46
47
  children: [/*#__PURE__*/jsx(Button, {
47
48
  variant: 'ghost_icon',
48
49
  "aria-label": 'Previous month',
49
- disabled: previousMonthDisabled || showYearPicker,
50
- onClick: () => state.focusPreviousPage(),
50
+ disabled: previousMonthDisabled,
51
+ onClick: () => showYearPicker ? setYearPickerPage(page => page - 1) : state.focusPreviousPage(),
51
52
  children: /*#__PURE__*/jsx(Icon, {
52
53
  data: chevron_left
53
54
  })
@@ -76,8 +77,8 @@ function CalendarHeader({
76
77
  }
77
78
  }), /*#__PURE__*/jsx(Button, {
78
79
  variant: 'ghost_icon',
79
- onClick: () => state.focusNextPage(),
80
- disabled: nextMonthDisabled || showYearPicker,
80
+ onClick: () => showYearPicker ? setYearPickerPage(page => page + 1) : state.focusNextPage(),
81
+ disabled: nextMonthDisabled,
81
82
  "aria-label": 'Next month',
82
83
  children: /*#__PURE__*/jsx(Icon, {
83
84
  data: chevron_right
@@ -14,6 +14,7 @@ const RangeCalendar = /*#__PURE__*/forwardRef(({
14
14
  ...props
15
15
  }, ref) => {
16
16
  const [showYearPicker, setShowYearPicker] = useState(false);
17
+ const [yearPickerPage, setYearPickerPage] = useState(0);
17
18
  const {
18
19
  locale
19
20
  } = useLocale();
@@ -44,13 +45,16 @@ const RangeCalendar = /*#__PURE__*/forwardRef(({
44
45
  state: state,
45
46
  title: title,
46
47
  setShowYearPicker: setShowYearPicker,
47
- showYearPicker: showYearPicker
48
+ showYearPicker: showYearPicker,
49
+ setYearPickerPage: setYearPickerPage
48
50
  })
49
51
  }), /*#__PURE__*/jsx(Popover.Content, {
50
52
  children: /*#__PURE__*/jsx(CalendarGrid, {
51
53
  state: state,
52
54
  setShowYearPicker: setShowYearPicker,
53
- showYearPicker: showYearPicker
55
+ showYearPicker: showYearPicker,
56
+ yearPickerPage: yearPickerPage,
57
+ setYearPickerPage: setYearPickerPage
54
58
  })
55
59
  }), Footer && /*#__PURE__*/jsx(Popover.Actions, {
56
60
  children: /*#__PURE__*/jsx(Footer, {
@@ -1,6 +1,7 @@
1
1
  import styled from 'styled-components';
2
2
  import { tokens } from '@equinor/eds-tokens';
3
3
  import { FocusScope, useFocusManager } from 'react-aria';
4
+ import { useRef, useEffect } from 'react';
4
5
  import { jsx } from 'react/jsx-runtime';
5
6
 
6
7
  // Disable no-autofocus - it's not the native autofocus attribute, but react-aria's autoFocus prop
@@ -15,23 +16,58 @@ const GridColumn = styled.button.withConfig({
15
16
  })(["background-color:transparent;outline:none;border:none;display:flex;justify-content:center;cursor:pointer;padding:8px;font-size:", ";font-family:", ";font-weight:", ";line-height:", ";color:", ";border-radius:999px;", ";&:hover{background-color:#f0f0f0;}&:focus{outline:2px dashed ", ";}"], tokens.typography.navigation.button.fontSize, tokens.typography.navigation.button.fontFamily, tokens.typography.navigation.button.fontWeight, tokens.typography.navigation.button.lineHeight, tokens.colors.text.static_icons__default.rgba, ({
16
17
  $active
17
18
  }) => $active ? `background-color: ${tokens.colors.interactive.primary__selected_highlight.rgba}` : '', tokens.colors.interactive.primary__resting.rgba);
19
+ const TOTAL_VISIBLE_YEARS = 36;
20
+ const RANGE_OFFSET = 30 / 2;
18
21
  const GridFocusManager = ({
19
22
  year: selectedYear,
20
- setFocusedYear
23
+ setFocusedYear,
24
+ yearPickerPage,
25
+ setYearPickerPage
21
26
  }) => {
22
27
  const focusManager = useFocusManager();
23
- const onKeyDown = e => {
28
+ const prevYear = useRef();
29
+ const navByKeyboard = useRef(false);
30
+ const page = yearPickerPage * TOTAL_VISIBLE_YEARS;
31
+ const years = Array.from({
32
+ length: TOTAL_VISIBLE_YEARS
33
+ }, (_, i) => i + (selectedYear + page - RANGE_OFFSET));
34
+ useEffect(() => {
35
+ if (prevYear.current === undefined) {
36
+ prevYear.current = yearPickerPage;
37
+ return;
38
+ }
39
+ if (!navByKeyboard.current) {
40
+ focusManager.focusFirst();
41
+ return;
42
+ }
43
+ navByKeyboard.current = false;
44
+ yearPickerPage > prevYear.current ? focusManager.focusFirst() : focusManager.focusLast();
45
+ prevYear.current = yearPickerPage;
46
+ }, [yearPickerPage, focusManager]);
47
+ const onKeyDown = year => e => {
24
48
  const target = e.currentTarget;
25
49
  const parent = target.parentElement;
50
+ const isFirstYear = years.at(0) === year;
51
+ const isLastYear = years.at(-1) === year;
26
52
  switch (e.key) {
27
53
  case 'ArrowRight':
28
54
  e.preventDefault();
55
+ if (isLastYear) {
56
+ navByKeyboard.current = true;
57
+ setYearPickerPage(page => page + 1);
58
+ break;
59
+ }
29
60
  focusManager.focusNext({
30
61
  wrap: true
31
62
  });
32
63
  break;
33
64
  case 'ArrowLeft':
34
65
  e.preventDefault();
66
+ if (isFirstYear) {
67
+ navByKeyboard.current = true;
68
+ setYearPickerPage(page => page - 1);
69
+ break;
70
+ }
35
71
  focusManager.focusPrevious({
36
72
  wrap: true
37
73
  });
@@ -39,6 +75,11 @@ const GridFocusManager = ({
39
75
  case 'ArrowDown':
40
76
  {
41
77
  e.preventDefault();
78
+ if (isLastYear) {
79
+ navByKeyboard.current = true;
80
+ setYearPickerPage(page => page + 1);
81
+ break;
82
+ }
42
83
  const selfIndex = Array.from(parent.children).indexOf(target);
43
84
  const focusElement = Array.from(parent.children).at(selfIndex + 5);
44
85
  focusManager.focusNext({
@@ -49,6 +90,11 @@ const GridFocusManager = ({
49
90
  case 'ArrowUp':
50
91
  {
51
92
  e.preventDefault();
93
+ if (isFirstYear) {
94
+ navByKeyboard.current = true;
95
+ setYearPickerPage(page => page - 1);
96
+ break;
97
+ }
52
98
  const selfIndex = Array.from(parent.children).indexOf(target);
53
99
  const focusElement = Array.from(parent.children).at(selfIndex - 5);
54
100
  focusManager.focusPrevious({
@@ -58,12 +104,9 @@ const GridFocusManager = ({
58
104
  }
59
105
  }
60
106
  };
61
- const years = Array.from({
62
- length: 36
63
- }, (_, i) => i + (selectedYear - 30 / 2));
64
107
  return years.map(year => /*#__PURE__*/jsx(GridColumn, {
65
108
  $active: selectedYear === year,
66
- onKeyDown: onKeyDown,
109
+ onKeyDown: onKeyDown(year),
67
110
  onClick: () => setFocusedYear(year),
68
111
  "aria-label": `Set year to ${year}`,
69
112
  tabIndex: 0,
@@ -72,7 +115,9 @@ const GridFocusManager = ({
72
115
  };
73
116
  const YearGrid = ({
74
117
  setFocusedYear,
75
- year: selectedYear
118
+ year: selectedYear,
119
+ yearPickerPage,
120
+ setYearPickerPage
76
121
  }) => {
77
122
  return /*#__PURE__*/jsx(Grid, {
78
123
  children: /*#__PURE__*/jsx(FocusScope, {
@@ -81,7 +126,9 @@ const YearGrid = ({
81
126
  autoFocus: true,
82
127
  children: /*#__PURE__*/jsx(GridFocusManager, {
83
128
  year: selectedYear,
84
- setFocusedYear: setFocusedYear
129
+ setFocusedYear: setFocusedYear,
130
+ yearPickerPage: yearPickerPage,
131
+ setYearPickerPage: setYearPickerPage
85
132
  })
86
133
  })
87
134
  });
@@ -52,7 +52,8 @@ const Snackbar = /*#__PURE__*/forwardRef(function Snackbar({
52
52
  }, autoHideDuration);
53
53
  }
54
54
  return () => clearTimeout(timer.current);
55
- }, [open, setVisible, autoHideDuration, onClose]);
55
+ // eslint-disable-next-line react-hooks/exhaustive-deps
56
+ }, [open, autoHideDuration]);
56
57
  const props = {
57
58
  ref,
58
59
  ...rest
@@ -1,10 +1,13 @@
1
1
  import { CalendarState, RangeCalendarState } from '@react-stately/calendar';
2
2
  import { AriaCalendarGridProps } from 'react-aria';
3
+ import { Dispatch, SetStateAction } from 'react';
3
4
  /**
4
5
  * The grid laying out the cells for the calendars in {link Calendar} and {link RangeCalendar}
5
6
  */
6
- export declare function CalendarGrid({ state, showYearPicker, setShowYearPicker, ...props }: {
7
+ export declare function CalendarGrid({ state, showYearPicker, setShowYearPicker, yearPickerPage, setYearPickerPage, ...props }: {
7
8
  state: CalendarState | RangeCalendarState;
8
9
  showYearPicker: boolean;
9
10
  setShowYearPicker: (showYearPicker: boolean) => void;
11
+ yearPickerPage: number;
12
+ setYearPickerPage: Dispatch<SetStateAction<number>>;
10
13
  } & AriaCalendarGridProps): import("react/jsx-runtime").JSX.Element;
@@ -1,12 +1,14 @@
1
1
  import { CalendarState, RangeCalendarState } from '@react-stately/calendar';
2
+ import { Dispatch, SetStateAction } from 'react';
2
3
  /**
3
4
  * The default header for the calendar components if no custom header is provided
4
5
  */
5
- export declare function CalendarHeader({ state, title, previousMonthDisabled, nextMonthDisabled, showYearPicker, setShowYearPicker, }: {
6
+ export declare function CalendarHeader({ state, title, previousMonthDisabled, nextMonthDisabled, showYearPicker, setShowYearPicker, setYearPickerPage, }: {
6
7
  state: CalendarState | RangeCalendarState;
7
8
  title: string;
8
9
  previousMonthDisabled?: boolean;
9
10
  nextMonthDisabled?: boolean;
10
11
  showYearPicker: boolean;
11
12
  setShowYearPicker: (showYearPicker: boolean) => void;
13
+ setYearPickerPage?: Dispatch<SetStateAction<number>>;
12
14
  }): import("react/jsx-runtime").JSX.Element;
@@ -1,4 +1,7 @@
1
- export declare const YearGrid: ({ setFocusedYear, year: selectedYear, }: {
1
+ import { Dispatch, SetStateAction } from 'react';
2
+ export declare const YearGrid: ({ setFocusedYear, year: selectedYear, yearPickerPage, setYearPickerPage, }: {
2
3
  setFocusedYear: (year: number) => void;
3
4
  year: number;
5
+ yearPickerPage: number;
6
+ setYearPickerPage?: Dispatch<SetStateAction<number>>;
4
7
  }) => import("react/jsx-runtime").JSX.Element;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@equinor/eds-core-react",
3
- "version": "0.41.0",
3
+ "version": "0.41.2",
4
4
  "description": "The React implementation of the Equinor Design System",
5
5
  "sideEffects": [
6
6
  "**/*.css"