@navikt/ds-react 5.8.0 → 5.9.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 (118) hide show
  1. package/_docs.json +1794 -1749
  2. package/cjs/date/context/useDateInputContext.js +1 -5
  3. package/cjs/date/datepicker/DatePicker.js +26 -25
  4. package/cjs/date/hooks/useDatepicker.js +9 -17
  5. package/cjs/date/hooks/useMonthPicker.js +9 -17
  6. package/cjs/date/hooks/useRangeDatepicker.js +9 -20
  7. package/cjs/date/monthpicker/MonthPicker.js +11 -6
  8. package/cjs/date/{DateInput.js → parts/DateInput.js} +14 -10
  9. package/cjs/date/parts/DateWrapper.js +55 -0
  10. package/cjs/date/utils/labels.js +77 -1
  11. package/cjs/form/combobox/Combobox.js +2 -2
  12. package/cjs/form/combobox/ComboboxProvider.js +1 -2
  13. package/cjs/form/combobox/FilteredOptions/FilteredOptions.js +15 -14
  14. package/cjs/form/combobox/FilteredOptions/filtered-options-util.js +24 -0
  15. package/cjs/form/combobox/FilteredOptions/filteredOptionsContext.js +23 -106
  16. package/cjs/form/combobox/FilteredOptions/useVirtualFocus.js +55 -0
  17. package/cjs/form/combobox/Input/Input.js +22 -13
  18. package/cjs/form/combobox/customOptionsContext.js +2 -3
  19. package/cjs/modal/Modal.js +4 -1
  20. package/cjs/popover/Popover.js +5 -7
  21. package/cjs/util/useMedia.js +30 -0
  22. package/esm/date/context/useDateInputContext.d.ts +6 -2
  23. package/esm/date/context/useDateInputContext.js +1 -5
  24. package/esm/date/context/useDateInputContext.js.map +1 -1
  25. package/esm/date/datepicker/DatePicker.d.ts +1 -1
  26. package/esm/date/datepicker/DatePicker.js +28 -27
  27. package/esm/date/datepicker/DatePicker.js.map +1 -1
  28. package/esm/date/datepicker/types.d.ts +0 -5
  29. package/esm/date/hooks/useDatepicker.d.ts +8 -5
  30. package/esm/date/hooks/useDatepicker.js +10 -18
  31. package/esm/date/hooks/useDatepicker.js.map +1 -1
  32. package/esm/date/hooks/useMonthPicker.d.ts +7 -4
  33. package/esm/date/hooks/useMonthPicker.js +10 -18
  34. package/esm/date/hooks/useMonthPicker.js.map +1 -1
  35. package/esm/date/hooks/useRangeDatepicker.d.ts +9 -3
  36. package/esm/date/hooks/useRangeDatepicker.js +10 -21
  37. package/esm/date/hooks/useRangeDatepicker.js.map +1 -1
  38. package/esm/date/index.d.ts +1 -1
  39. package/esm/date/index.js.map +1 -1
  40. package/esm/date/monthpicker/MonthPicker.d.ts +1 -1
  41. package/esm/date/monthpicker/MonthPicker.js +13 -8
  42. package/esm/date/monthpicker/MonthPicker.js.map +1 -1
  43. package/esm/date/monthpicker/types.d.ts +0 -5
  44. package/esm/date/{DateInput.d.ts → parts/DateInput.d.ts} +5 -1
  45. package/esm/date/{DateInput.js → parts/DateInput.js} +15 -11
  46. package/esm/date/parts/DateInput.js.map +1 -0
  47. package/esm/date/parts/DateWrapper.d.ts +15 -0
  48. package/esm/date/parts/DateWrapper.js +26 -0
  49. package/esm/date/parts/DateWrapper.js.map +1 -0
  50. package/esm/date/utils/labels.d.ts +2 -0
  51. package/esm/date/utils/labels.js +74 -0
  52. package/esm/date/utils/labels.js.map +1 -1
  53. package/esm/form/combobox/Combobox.js +2 -2
  54. package/esm/form/combobox/Combobox.js.map +1 -1
  55. package/esm/form/combobox/ComboboxProvider.js +1 -2
  56. package/esm/form/combobox/ComboboxProvider.js.map +1 -1
  57. package/esm/form/combobox/FilteredOptions/FilteredOptions.js +15 -14
  58. package/esm/form/combobox/FilteredOptions/FilteredOptions.js.map +1 -1
  59. package/esm/form/combobox/FilteredOptions/filtered-options-util.d.ts +12 -0
  60. package/esm/form/combobox/FilteredOptions/filtered-options-util.js +23 -0
  61. package/esm/form/combobox/FilteredOptions/filtered-options-util.js.map +1 -0
  62. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.d.ts +10 -13
  63. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js +24 -107
  64. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js.map +1 -1
  65. package/esm/form/combobox/FilteredOptions/useVirtualFocus.d.ts +15 -0
  66. package/esm/form/combobox/FilteredOptions/useVirtualFocus.js +54 -0
  67. package/esm/form/combobox/FilteredOptions/useVirtualFocus.js.map +1 -0
  68. package/esm/form/combobox/Input/Input.js +22 -13
  69. package/esm/form/combobox/Input/Input.js.map +1 -1
  70. package/esm/form/combobox/customOptionsContext.d.ts +4 -1
  71. package/esm/form/combobox/customOptionsContext.js +2 -3
  72. package/esm/form/combobox/customOptionsContext.js.map +1 -1
  73. package/esm/modal/Modal.js +4 -1
  74. package/esm/modal/Modal.js.map +1 -1
  75. package/esm/popover/Popover.d.ts +0 -5
  76. package/esm/popover/Popover.js +5 -7
  77. package/esm/popover/Popover.js.map +1 -1
  78. package/esm/util/useMedia.d.ts +8 -0
  79. package/esm/util/useMedia.js +27 -0
  80. package/esm/util/useMedia.js.map +1 -0
  81. package/package.json +3 -3
  82. package/src/date/context/useDateInputContext.tsx +5 -5
  83. package/src/date/datepicker/DatePicker.tsx +58 -65
  84. package/src/date/datepicker/datepicker.stories.tsx +37 -46
  85. package/src/date/datepicker/types.ts +0 -5
  86. package/src/date/hooks/useDatepicker.tsx +20 -25
  87. package/src/date/hooks/useMonthPicker.tsx +18 -24
  88. package/src/date/hooks/useRangeDatepicker.tsx +27 -30
  89. package/src/date/index.ts +1 -1
  90. package/src/date/monthpicker/MonthPicker.tsx +39 -43
  91. package/src/date/monthpicker/types.ts +0 -5
  92. package/src/date/{DateInput.tsx → parts/DateInput.tsx} +23 -12
  93. package/src/date/parts/DateWrapper.tsx +80 -0
  94. package/src/date/utils/labels.ts +83 -0
  95. package/src/form/combobox/Combobox.tsx +2 -2
  96. package/src/form/combobox/ComboboxProvider.tsx +1 -2
  97. package/src/form/combobox/FilteredOptions/FilteredOptions.tsx +28 -16
  98. package/src/form/combobox/FilteredOptions/filtered-options-util.ts +38 -0
  99. package/src/form/combobox/FilteredOptions/filteredOptionsContext.tsx +70 -140
  100. package/src/form/combobox/FilteredOptions/useVirtualFocus.ts +87 -0
  101. package/src/form/combobox/Input/Input.tsx +22 -18
  102. package/src/form/combobox/customOptionsContext.tsx +10 -5
  103. package/src/guide-panel/guidepanel.stories.tsx +2 -2
  104. package/src/modal/Modal.tsx +4 -1
  105. package/src/popover/Popover.tsx +4 -12
  106. package/src/util/__tests__/useMedia.test.tsx +19 -0
  107. package/src/util/useMedia.ts +38 -0
  108. package/cjs/date/hooks/useEscape.js +0 -23
  109. package/cjs/date/hooks/useOutsideClickHandler.js +0 -26
  110. package/esm/date/DateInput.js.map +0 -1
  111. package/esm/date/hooks/useEscape.d.ts +0 -2
  112. package/esm/date/hooks/useEscape.js +0 -20
  113. package/esm/date/hooks/useEscape.js.map +0 -1
  114. package/esm/date/hooks/useOutsideClickHandler.d.ts +0 -1
  115. package/esm/date/hooks/useOutsideClickHandler.js +0 -23
  116. package/esm/date/hooks/useOutsideClickHandler.js.map +0 -1
  117. package/src/date/hooks/useEscape.tsx +0 -30
  118. package/src/date/hooks/useOutsideClickHandler.tsx +0 -34
@@ -2,11 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useDateInputContext = exports.DateContext = void 0;
4
4
  const react_1 = require("react");
5
- exports.DateContext = (0, react_1.createContext)({
6
- open: false,
7
- onOpen: () => null,
8
- ariaId: undefined,
9
- });
5
+ exports.DateContext = (0, react_1.createContext)(null);
10
6
  const useDateInputContext = () => {
11
7
  const context = (0, react_1.useContext)(exports.DateContext);
12
8
  if (!context) {
@@ -42,10 +42,10 @@ const clsx_1 = __importDefault(require("clsx"));
42
42
  const isWeekend_1 = __importDefault(require("date-fns/isWeekend"));
43
43
  const react_1 = __importStar(require("react"));
44
44
  const react_day_picker_1 = require("react-day-picker");
45
- const popover_1 = require("../../popover");
46
45
  const util_1 = require("../../util");
47
- const DateInput_1 = require("../DateInput");
48
46
  const context_1 = require("../context");
47
+ const DateInput_1 = require("../parts/DateInput");
48
+ const DateWrapper_1 = require("../parts/DateWrapper");
49
49
  const utils_1 = require("../utils");
50
50
  const DatePickerStandalone_1 = __importDefault(require("./DatePickerStandalone"));
51
51
  const Caption_1 = __importDefault(require("./parts/Caption"));
@@ -79,10 +79,11 @@ const WeekNumber_1 = __importDefault(require("./parts/WeekNumber"));
79
79
  */
80
80
  exports.DatePicker = (0, react_1.forwardRef)((_a, ref) => {
81
81
  var _b;
82
- var { children, locale = "nb", dropdownCaption, disabled = [], disableWeekends = false, showWeekNumber = false, selected, id, defaultSelected, className, wrapperClassName, open: _open, onClose, onOpenToggle, strategy, bubbleEscape = false, onWeekNumberClick } = _a, rest = __rest(_a, ["children", "locale", "dropdownCaption", "disabled", "disableWeekends", "showWeekNumber", "selected", "id", "defaultSelected", "className", "wrapperClassName", "open", "onClose", "onOpenToggle", "strategy", "bubbleEscape", "onWeekNumberClick"]);
82
+ var { children, locale = "nb", dropdownCaption, disabled = [], disableWeekends = false, showWeekNumber = false, selected, id, defaultSelected, className, wrapperClassName, open: _open, onClose, onOpenToggle, strategy, onWeekNumberClick } = _a, rest = __rest(_a, ["children", "locale", "dropdownCaption", "disabled", "disableWeekends", "showWeekNumber", "selected", "id", "defaultSelected", "className", "wrapperClassName", "open", "onClose", "onOpenToggle", "strategy", "onWeekNumberClick"]);
83
83
  const ariaId = (0, util_1.useId)(id);
84
84
  const [open, setOpen] = (0, react_1.useState)(_open !== null && _open !== void 0 ? _open : false);
85
85
  const wrapperRef = (0, react_1.useRef)(null);
86
+ const mergedRef = (0, react_1.useMemo)(() => (0, util_1.mergeRefs)([wrapperRef, ref]), [ref]);
86
87
  const [selectedDates, setSelectedDates] = react_1.default.useState(defaultSelected);
87
88
  const mode = (_b = rest.mode) !== null && _b !== void 0 ? _b : "single";
88
89
  /**
@@ -99,6 +100,22 @@ exports.DatePicker = (0, react_1.forwardRef)((_a, ref) => {
99
100
  }
100
101
  (_c = rest === null || rest === void 0 ? void 0 : rest.onSelect) === null || _c === void 0 ? void 0 : _c.call(rest, newSelected);
101
102
  };
103
+ const DatePickerComponent = (react_1.default.createElement(react_day_picker_1.DayPicker, Object.assign({ locale: (0, utils_1.getLocaleFromString)(locale), mode: mode, onSelect: handleSelect, selected: selected !== null && selected !== void 0 ? selected : selectedDates, components: {
104
+ Caption: dropdownCaption ? DropdownCaption_1.default : Caption_1.default,
105
+ Head: TableHead_1.default,
106
+ HeadRow: HeadRow_1.HeadRow,
107
+ WeekNumber: WeekNumber_1.default,
108
+ Row: Row_1.default,
109
+ Day: DayButton_1.default,
110
+ }, className: (0, clsx_1.default)("navds-date", className), classNames: {
111
+ vhidden: "navds-sr-only",
112
+ }, disabled: (day) => {
113
+ return (disableWeekends && (0, isWeekend_1.default)(day)) || (0, react_day_picker_1.isMatch)(day, disabled);
114
+ }, weekStartsOn: 1, initialFocus: false, labels: utils_1.labels, modifiers: {
115
+ weekend: (day) => disableWeekends && (0, isWeekend_1.default)(day),
116
+ }, modifiersClassNames: {
117
+ weekend: "rdp-day__weekend",
118
+ }, showWeekNumber: showWeekNumber, onWeekNumberClick: mode === "multiple" ? onWeekNumberClick : undefined, fixedWeeks: true, showOutsideDays: true }, (0, util_1.omit)(rest, ["onSelect"]))));
102
119
  return (react_1.default.createElement(context_1.DateContext.Provider, { value: {
103
120
  open: _open !== null && _open !== void 0 ? _open : open,
104
121
  onOpen: () => {
@@ -106,30 +123,14 @@ exports.DatePicker = (0, react_1.forwardRef)((_a, ref) => {
106
123
  onOpenToggle === null || onOpenToggle === void 0 ? void 0 : onOpenToggle();
107
124
  },
108
125
  ariaId,
126
+ defined: true,
109
127
  } },
110
- react_1.default.createElement("div", { ref: wrapperRef, className: (0, clsx_1.default)("navds-date__wrapper", wrapperClassName) },
128
+ react_1.default.createElement("div", { ref: mergedRef, className: (0, clsx_1.default)("navds-date__wrapper", wrapperClassName) },
111
129
  children,
112
- (_open !== null && _open !== void 0 ? _open : open) && (react_1.default.createElement(popover_1.Popover, { arrow: false, anchorEl: wrapperRef.current, open: _open !== null && _open !== void 0 ? _open : open, onClose: () => {
113
- var _a;
114
- (_a = onClose === null || onClose === void 0 ? void 0 : onClose()) !== null && _a !== void 0 ? _a : setOpen(false);
115
- }, placement: "bottom-start", id: ariaId, role: "dialog", ref: ref, strategy: strategy, className: "navds-date__popover", bubbleEscape: bubbleEscape, flip: false },
116
- react_1.default.createElement(react_day_picker_1.DayPicker, Object.assign({ locale: (0, utils_1.getLocaleFromString)(locale), mode: mode, onSelect: handleSelect, selected: selected !== null && selected !== void 0 ? selected : selectedDates, components: {
117
- Caption: dropdownCaption ? DropdownCaption_1.default : Caption_1.default,
118
- Head: TableHead_1.default,
119
- HeadRow: HeadRow_1.HeadRow,
120
- WeekNumber: WeekNumber_1.default,
121
- Row: Row_1.default,
122
- Day: DayButton_1.default,
123
- }, className: (0, clsx_1.default)("navds-date", className), classNames: {
124
- vhidden: "navds-sr-only",
125
- }, disabled: (day) => {
126
- return ((disableWeekends && (0, isWeekend_1.default)(day)) ||
127
- (0, react_day_picker_1.isMatch)(day, disabled));
128
- }, weekStartsOn: 1, initialFocus: false, labels: utils_1.labels, modifiers: {
129
- weekend: (day) => disableWeekends && (0, isWeekend_1.default)(day),
130
- }, modifiersClassNames: {
131
- weekend: "rdp-day__weekend",
132
- }, showWeekNumber: showWeekNumber, onWeekNumberClick: mode === "multiple" ? onWeekNumberClick : undefined, fixedWeeks: true, showOutsideDays: true }, (0, util_1.omit)(rest, ["onSelect"]))))))));
130
+ react_1.default.createElement(DateWrapper_1.DateWrapper, { open: _open !== null && _open !== void 0 ? _open : open, anchor: wrapperRef.current, onClose: () => { var _a; return (_a = onClose === null || onClose === void 0 ? void 0 : onClose()) !== null && _a !== void 0 ? _a : setOpen(false); }, locale: locale, variant: mode, popoverProps: {
131
+ id: ariaId,
132
+ strategy,
133
+ } }, DatePickerComponent))));
133
134
  });
134
135
  exports.DatePicker.Standalone = DatePickerStandalone_1.default;
135
136
  exports.DatePicker.Input = DateInput_1.DatePickerInput;
@@ -9,8 +9,6 @@ const isWeekend_1 = __importDefault(require("date-fns/isWeekend"));
9
9
  const react_1 = require("react");
10
10
  const react_day_picker_1 = require("react-day-picker");
11
11
  const utils_1 = require("../utils");
12
- const useEscape_1 = require("./useEscape");
13
- const useOutsideClickHandler_1 = require("./useOutsideClickHandler");
14
12
  const getValidationMessage = (val = {}) => (Object.assign({ isDisabled: false, isWeekend: false, isEmpty: false, isInvalid: false, isBefore: false, isAfter: false, isValidDate: true }, val));
15
13
  /**
16
14
  *
@@ -26,11 +24,10 @@ const getValidationMessage = (val = {}) => (Object.assign({ isDisabled: false, i
26
24
  * });
27
25
  */
28
26
  const useDatepicker = (opt = {}) => {
29
- var _a, _b;
30
- const { locale: _locale = "nb", required, defaultSelected: _defaultSelected, today = new Date(), fromDate, toDate, disabled, disableWeekends, onDateChange, inputFormat, onValidate, defaultMonth, allowTwoDigitYear = true, openOnFocus = true, } = opt;
27
+ var _a;
28
+ const { locale: _locale = "nb", required, defaultSelected: _defaultSelected, today = new Date(), fromDate, toDate, disabled, disableWeekends, onDateChange, inputFormat, onValidate, defaultMonth, allowTwoDigitYear = true, } = opt;
29
+ const [anchorRef, setAnchorRef] = (0, react_1.useState)(null);
31
30
  const locale = (0, utils_1.getLocaleFromString)(_locale);
32
- const inputRef = (0, react_1.useRef)(null);
33
- const [daypickerRef, setDaypickerRef] = (0, react_1.useState)();
34
31
  const [defaultSelected, setDefaultSelected] = (0, react_1.useState)(_defaultSelected);
35
32
  // Initialize states
36
33
  const [month, setMonth] = (0, react_1.useState)((_a = defaultSelected !== null && defaultSelected !== void 0 ? defaultSelected : defaultMonth) !== null && _a !== void 0 ? _a : today);
@@ -46,12 +43,6 @@ const useDatepicker = (opt = {}) => {
46
43
  newOpen &&
47
44
  setMonth((_b = (_a = selectedDay !== null && selectedDay !== void 0 ? selectedDay : defaultSelected) !== null && _a !== void 0 ? _a : defaultMonth) !== null && _b !== void 0 ? _b : today);
48
45
  }, [defaultMonth, defaultSelected, selectedDay, today]);
49
- (0, useOutsideClickHandler_1.useOutsideClickHandler)(open, handleOpen, [
50
- daypickerRef,
51
- inputRef.current,
52
- (_b = inputRef.current) === null || _b === void 0 ? void 0 : _b.nextSibling,
53
- ]);
54
- (0, useEscape_1.useEscape)(open, handleOpen, inputRef);
55
46
  const updateDate = (date) => {
56
47
  onDateChange === null || onDateChange === void 0 ? void 0 : onDateChange(date);
57
48
  setSelectedDay(date);
@@ -74,7 +65,6 @@ const useDatepicker = (opt = {}) => {
74
65
  if (e.target.readOnly) {
75
66
  return;
76
67
  }
77
- !open && openOnFocus && handleOpen(true);
78
68
  const day = (0, utils_1.parseDate)(e.target.value, today, locale, "date", allowTwoDigitYear);
79
69
  if ((0, utils_1.isValidDate)(day)) {
80
70
  setInputValue((0, utils_1.formatDateForInput)(day, locale, "date", inputFormat));
@@ -92,7 +82,7 @@ const useDatepicker = (opt = {}) => {
92
82
  const handleDayClick = (day, { selected }) => {
93
83
  if (day && !selected) {
94
84
  handleOpen(false);
95
- inputRef.current && inputRef.current.focus();
85
+ anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.focus();
96
86
  }
97
87
  if (!required && selected) {
98
88
  updateDate(undefined);
@@ -151,18 +141,20 @@ const useDatepicker = (opt = {}) => {
151
141
  toDate,
152
142
  today,
153
143
  open,
144
+ onClose: () => {
145
+ handleOpen(false);
146
+ anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.focus();
147
+ },
154
148
  onOpenToggle: () => handleOpen(!open),
155
149
  disabled,
156
150
  disableWeekends,
157
- bubbleEscape: true,
158
- ref: setDaypickerRef,
159
151
  };
160
152
  const inputProps = {
161
153
  onChange: handleChange,
162
154
  onFocus: handleFocus,
163
155
  onBlur: handleBlur,
164
156
  value: inputValue,
165
- ref: inputRef,
157
+ setAnchorRef,
166
158
  };
167
159
  return { datepickerProps, inputProps, reset, selectedDay, setSelected };
168
160
  };
@@ -3,8 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useMonthpicker = void 0;
4
4
  const react_1 = require("react");
5
5
  const utils_1 = require("../utils");
6
- const useEscape_1 = require("./useEscape");
7
- const useOutsideClickHandler_1 = require("./useOutsideClickHandler");
8
6
  const getValidationMessage = (val = {}) => (Object.assign({ isDisabled: false, isEmpty: false, isInvalid: false, isBefore: false, isAfter: false, isValidMonth: true }, val));
9
7
  const getIsBefore = (opt) => opt.fromDate &&
10
8
  opt.date &&
@@ -30,13 +28,12 @@ const getIsAfter = (opt) => opt.toDate &&
30
28
  * });
31
29
  */
32
30
  const useMonthpicker = (opt = {}) => {
33
- var _a, _b;
34
- const { locale: _locale = "nb", defaultSelected: _defaultSelected, fromDate, toDate, disabled, required, onMonthChange, inputFormat, onValidate, defaultYear, allowTwoDigitYear = true, openOnFocus = true, } = opt;
31
+ var _a;
32
+ const { locale: _locale = "nb", defaultSelected: _defaultSelected, fromDate, toDate, disabled, required, onMonthChange, inputFormat, onValidate, defaultYear, allowTwoDigitYear = true, } = opt;
33
+ const [anchorRef, setAnchorRef] = (0, react_1.useState)(null);
35
34
  const [defaultSelected, setDefaultSelected] = (0, react_1.useState)(_defaultSelected);
36
35
  const today = (0, react_1.useMemo)(() => new Date(), []);
37
36
  const locale = (0, utils_1.getLocaleFromString)(_locale);
38
- const inputRef = (0, react_1.useRef)(null);
39
- const [monthpickerRef, setMonthpickerRef] = (0, react_1.useState)();
40
37
  // Initialize states
41
38
  const [year, setYear] = (0, react_1.useState)((_a = defaultSelected !== null && defaultSelected !== void 0 ? defaultSelected : defaultYear) !== null && _a !== void 0 ? _a : today);
42
39
  const [selectedMonth, setSelectedMonth] = (0, react_1.useState)(defaultSelected);
@@ -51,12 +48,6 @@ const useMonthpicker = (opt = {}) => {
51
48
  newOpen &&
52
49
  setYear((_b = (_a = selectedMonth !== null && selectedMonth !== void 0 ? selectedMonth : defaultSelected) !== null && _a !== void 0 ? _a : defaultYear) !== null && _b !== void 0 ? _b : today);
53
50
  }, [defaultSelected, defaultYear, selectedMonth, today]);
54
- (0, useOutsideClickHandler_1.useOutsideClickHandler)(open, handleOpen, [
55
- monthpickerRef,
56
- inputRef.current,
57
- (_b = inputRef.current) === null || _b === void 0 ? void 0 : _b.nextSibling,
58
- ]);
59
- (0, useEscape_1.useEscape)(open, handleOpen, inputRef);
60
51
  const updateMonth = (date) => {
61
52
  onMonthChange === null || onMonthChange === void 0 ? void 0 : onMonthChange(date);
62
53
  setSelectedMonth(date);
@@ -80,7 +71,6 @@ const useMonthpicker = (opt = {}) => {
80
71
  if (e.target.readOnly) {
81
72
  return;
82
73
  }
83
- !open && openOnFocus && handleOpen(true);
84
74
  const day = (0, utils_1.parseDate)(e.target.value, today, locale, "month", allowTwoDigitYear);
85
75
  const isBefore = getIsBefore({ fromDate, date: day });
86
76
  const isAfter = getIsAfter({ toDate, date: day });
@@ -101,8 +91,8 @@ const useMonthpicker = (opt = {}) => {
101
91
  const handleMonthClick = (month) => {
102
92
  if (month) {
103
93
  handleOpen(false);
104
- inputRef.current && inputRef.current.focus();
105
94
  setYear(month);
95
+ anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.focus();
106
96
  }
107
97
  if (!required && !month) {
108
98
  updateMonth(undefined);
@@ -160,16 +150,18 @@ const useMonthpicker = (opt = {}) => {
160
150
  toDate,
161
151
  open,
162
152
  onOpenToggle: () => handleOpen(!open),
153
+ onClose: () => {
154
+ handleOpen(false);
155
+ anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.focus();
156
+ },
163
157
  disabled,
164
- bubbleEscape: true,
165
- ref: setMonthpickerRef,
166
158
  };
167
159
  const inputProps = {
168
160
  onChange: handleChange,
169
161
  onFocus: handleFocus,
170
162
  onBlur: handleBlur,
171
163
  value: inputValue,
172
- ref: inputRef,
164
+ setAnchorRef,
173
165
  };
174
166
  return { monthpickerProps, inputProps, reset, selectedMonth, setSelected };
175
167
  };
@@ -10,8 +10,6 @@ const isWeekend_1 = __importDefault(require("date-fns/isWeekend"));
10
10
  const react_1 = require("react");
11
11
  const react_day_picker_1 = require("react-day-picker");
12
12
  const utils_1 = require("../utils");
13
- const useEscape_1 = require("./useEscape");
14
- const useOutsideClickHandler_1 = require("./useOutsideClickHandler");
15
13
  const getValidationMessage = (from = {}, to = {}) => ({
16
14
  from: Object.assign({ isDisabled: false, isWeekend: false, isEmpty: false, isInvalid: false, isBefore: false, isAfter: false, isValidDate: true }, from),
17
15
  to: Object.assign({ isDisabled: false, isWeekend: false, isEmpty: false, isInvalid: false, isBefore: false, isAfter: false, isBeforeFrom: false, isValidDate: true }, to),
@@ -93,12 +91,9 @@ const initialValidation = (range, opt) => {
93
91
  * });
94
92
  */
95
93
  const useRangeDatepicker = (opt = {}) => {
96
- var _a, _b;
97
- const { locale: _locale = "nb", defaultSelected: _defaultSelected, today = new Date(), fromDate, toDate, disabled, disableWeekends, onRangeChange, inputFormat, onValidate, defaultMonth, allowTwoDigitYear = true, openOnFocus = true, } = opt;
94
+ const { locale: _locale = "nb", defaultSelected: _defaultSelected, today = new Date(), fromDate, toDate, disabled, disableWeekends, onRangeChange, inputFormat, onValidate, defaultMonth, allowTwoDigitYear = true, } = opt;
95
+ const [anchorRef, setAnchorRef] = (0, react_1.useState)(null);
98
96
  const locale = (0, utils_1.getLocaleFromString)(_locale);
99
- const inputRefTo = (0, react_1.useRef)(null);
100
- const inputRefFrom = (0, react_1.useRef)(null);
101
- const [daypickerRef, setDaypickerRef] = (0, react_1.useState)();
102
97
  const [defaultSelected, setDefaultSelected] = (0, react_1.useState)(_defaultSelected);
103
98
  // Initialize states
104
99
  const [month, setMonth] = (0, react_1.useState)(defaultSelected ? defaultSelected === null || defaultSelected === void 0 ? void 0 : defaultSelected.from : defaultMonth !== null && defaultMonth !== void 0 ? defaultMonth : today);
@@ -111,14 +106,6 @@ const useRangeDatepicker = (opt = {}) => {
111
106
  : "");
112
107
  const [validation, setValidation] = (0, react_1.useState)(initialValidation(selectedRange, opt));
113
108
  const [open, setOpen] = (0, react_1.useState)(false);
114
- (0, useOutsideClickHandler_1.useOutsideClickHandler)(open, setOpen, [
115
- daypickerRef,
116
- inputRefTo.current,
117
- inputRefFrom.current,
118
- (_a = inputRefTo.current) === null || _a === void 0 ? void 0 : _a.nextSibling,
119
- (_b = inputRefFrom.current) === null || _b === void 0 ? void 0 : _b.nextSibling,
120
- ]);
121
- (0, useEscape_1.useEscape)(open, setOpen, (selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.from) && !(selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.to) ? inputRefTo : inputRefFrom);
122
109
  const updateRange = (range) => {
123
110
  onRangeChange === null || onRangeChange === void 0 ? void 0 : onRangeChange(range);
124
111
  setSelectedRange(range);
@@ -154,7 +141,6 @@ const useRangeDatepicker = (opt = {}) => {
154
141
  if (e.target.readOnly) {
155
142
  return;
156
143
  }
157
- !open && openOnFocus && setOpen(true);
158
144
  const day = (0, utils_1.parseDate)(e.target.value, today, locale, "date", allowTwoDigitYear);
159
145
  if ((0, utils_1.isValidDate)(day)) {
160
146
  src === RANGE.FROM
@@ -185,6 +171,7 @@ const useRangeDatepicker = (opt = {}) => {
185
171
  const handleSelect = (range) => {
186
172
  if ((range === null || range === void 0 ? void 0 : range.from) && (range === null || range === void 0 ? void 0 : range.to)) {
187
173
  setOpen(false);
174
+ anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.focus();
188
175
  }
189
176
  const prevToRange = !(selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.from) && (selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.to) ? selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.to : range === null || range === void 0 ? void 0 : range.to;
190
177
  const resetTo = (0, isBefore_1.default)(prevToRange, range === null || range === void 0 ? void 0 : range.from);
@@ -301,24 +288,26 @@ const useRangeDatepicker = (opt = {}) => {
301
288
  mode: "range",
302
289
  open,
303
290
  onOpenToggle: () => setOpen((x) => !x),
291
+ onClose: () => {
292
+ setOpen(false);
293
+ anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.focus();
294
+ },
304
295
  disabled,
305
296
  disableWeekends,
306
- bubbleEscape: true,
307
- ref: setDaypickerRef,
308
297
  };
309
298
  const fromInputProps = {
310
299
  onChange: (e) => handleChange(e, RANGE.FROM),
311
300
  onFocus: (e) => handleFocus(e, RANGE.FROM),
312
301
  onBlur: (e) => handleBlur(e, RANGE.FROM),
313
302
  value: fromInputValue,
314
- ref: inputRefFrom,
303
+ setAnchorRef,
315
304
  };
316
305
  const toInputProps = {
317
306
  onChange: (e) => handleChange(e, RANGE.TO),
318
307
  onFocus: (e) => handleFocus(e, RANGE.TO),
319
308
  onBlur: (e) => handleBlur(e, RANGE.TO),
320
309
  value: toInputValue,
321
- ref: inputRefTo,
310
+ setAnchorRef,
322
311
  };
323
312
  return {
324
313
  datepickerProps,
@@ -30,10 +30,10 @@ exports.MonthPicker = void 0;
30
30
  const clsx_1 = __importDefault(require("clsx"));
31
31
  const react_1 = __importStar(require("react"));
32
32
  const react_day_picker_1 = require("react-day-picker");
33
- const popover_1 = require("../../popover");
34
33
  const util_1 = require("../../util");
35
- const DateInput_1 = require("../DateInput");
36
34
  const context_1 = require("../context");
35
+ const DateInput_1 = require("../parts/DateInput");
36
+ const DateWrapper_1 = require("../parts/DateWrapper");
37
37
  const utils_1 = require("../utils");
38
38
  const MonthCaption_1 = __importDefault(require("./MonthCaption"));
39
39
  const MonthPickerStandalone_1 = __importDefault(require("./MonthPickerStandalone"));
@@ -60,10 +60,11 @@ const MonthSelector_1 = __importDefault(require("./MonthSelector"));
60
60
  * );
61
61
  * ```
62
62
  */
63
- exports.MonthPicker = (0, react_1.forwardRef)(({ children, dropdownCaption = false, fromDate, toDate, disabled = [], selected, open: _open, id, onClose, onOpenToggle, locale = "nb", onMonthSelect, className, wrapperClassName, defaultSelected, year, onYearChange, strategy = "absolute", bubbleEscape = false, }, ref) => {
63
+ exports.MonthPicker = (0, react_1.forwardRef)(({ children, dropdownCaption = false, fromDate, toDate, disabled = [], selected, open: _open, id, onClose, onOpenToggle, locale = "nb", onMonthSelect, className, wrapperClassName, defaultSelected, year, onYearChange, strategy = "absolute", }, ref) => {
64
64
  const ariaId = (0, util_1.useId)(id);
65
65
  const [open, setOpen] = (0, react_1.useState)(_open !== null && _open !== void 0 ? _open : false);
66
66
  const wrapperRef = (0, react_1.useRef)(null);
67
+ const mergedRef = (0, react_1.useMemo)(() => (0, util_1.mergeRefs)([wrapperRef, ref]), [ref]);
67
68
  const [selectedMonth, setSelectedMonth] = (0, react_1.useState)(defaultSelected);
68
69
  const handleSelect = (month) => {
69
70
  var _a;
@@ -82,15 +83,19 @@ exports.MonthPicker = (0, react_1.forwardRef)(({ children, dropdownCaption = fal
82
83
  onOpenToggle === null || onOpenToggle === void 0 ? void 0 : onOpenToggle();
83
84
  },
84
85
  ariaId,
86
+ defined: true,
85
87
  } },
86
- react_1.default.createElement("div", { ref: wrapperRef, className: (0, clsx_1.default)("navds-date__wrapper", wrapperClassName) },
88
+ react_1.default.createElement("div", { ref: mergedRef, className: (0, clsx_1.default)("navds-date__wrapper", wrapperClassName) },
87
89
  children,
88
- (_open !== null && _open !== void 0 ? _open : open) && (react_1.default.createElement(popover_1.Popover, { arrow: false, anchorEl: wrapperRef.current, open: _open !== null && _open !== void 0 ? _open : open, onClose: () => { var _a; return (_a = onClose === null || onClose === void 0 ? void 0 : onClose()) !== null && _a !== void 0 ? _a : setOpen(false); }, placement: "bottom-start", role: "dialog", ref: ref, id: ariaId, className: "navds-date navds-date__popover", strategy: strategy, bubbleEscape: bubbleEscape, flip: false },
90
+ react_1.default.createElement(DateWrapper_1.DateWrapper, { open: _open !== null && _open !== void 0 ? _open : open, anchor: wrapperRef.current, onClose: () => { var _a; return (_a = onClose === null || onClose === void 0 ? void 0 : onClose()) !== null && _a !== void 0 ? _a : setOpen(false); }, locale: locale, variant: "month", popoverProps: {
91
+ id: ariaId,
92
+ strategy,
93
+ } },
89
94
  react_1.default.createElement(react_day_picker_1.RootProvider, { locale: (0, utils_1.getLocaleFromString)(locale), selected: selected !== null && selected !== void 0 ? selected : selectedMonth, toDate: toDate, fromDate: fromDate, month: selected !== null && selected !== void 0 ? selected : selectedMonth },
90
95
  react_1.default.createElement("div", { className: (0, clsx_1.default)("rdp-month", className) },
91
96
  react_1.default.createElement(context_1.SharedMonthProvider, { dropdownCaption: dropdownCaption, disabled: disabled, selected: selected !== null && selected !== void 0 ? selected : selectedMonth, onSelect: handleSelect, year: year, onYearChange: onYearChange },
92
97
  react_1.default.createElement(MonthCaption_1.default, null),
93
- react_1.default.createElement(MonthSelector_1.default, null)))))))));
98
+ react_1.default.createElement(MonthSelector_1.default, null))))))));
94
99
  });
95
100
  exports.MonthPicker.Standalone = MonthPickerStandalone_1.default;
96
101
  exports.MonthPicker.Input = DateInput_1.MonthPickerInput;
@@ -41,13 +41,14 @@ exports.MonthPickerInput = exports.DatePickerInput = void 0;
41
41
  const aksel_icons_1 = require("@navikt/aksel-icons");
42
42
  const clsx_1 = __importDefault(require("clsx"));
43
43
  const react_1 = __importStar(require("react"));
44
- const useFormField_1 = require("../form/useFormField");
45
- const context_1 = require("./context");
46
- const ReadOnlyIcon_1 = require("../form/ReadOnlyIcon");
47
- const typography_1 = require("../typography");
48
- const util_1 = require("../util");
44
+ const ReadOnlyIcon_1 = require("../../form/ReadOnlyIcon");
45
+ const useFormField_1 = require("../../form/useFormField");
46
+ const typography_1 = require("../../typography");
47
+ const util_1 = require("../../util");
48
+ const context_1 = require("../context");
49
49
  const DateInput = (0, react_1.forwardRef)((props, ref) => {
50
- const { className, hideLabel = false, label, description, variant = "datepicker" } = props, rest = __rest(props, ["className", "hideLabel", "label", "description", "variant"]);
50
+ const { className, hideLabel = false, label, description, variant = "datepicker", setAnchorRef } = props, rest = __rest(props, ["className", "hideLabel", "label", "description", "variant", "setAnchorRef"]);
51
+ const buttonRef = (0, react_1.useRef)(null);
51
52
  const isDatepickerVariant = variant === "datepicker";
52
53
  const conditionalVariables = {
53
54
  prefix: isDatepickerVariant ? "datepicker-input" : "monthpicker-input",
@@ -56,7 +57,7 @@ const DateInput = (0, react_1.forwardRef)((props, ref) => {
56
57
  close: isDatepickerVariant ? "Lukk datovelger" : "Lukk månedsvelger",
57
58
  },
58
59
  };
59
- const { onOpen, ariaId, open } = (0, context_1.useDateInputContext)();
60
+ const context = (0, context_1.useDateInputContext)();
60
61
  const { inputProps, size = "medium", inputDescriptionId, errorId, showErrorMsg, hasError, readOnly, } = (0, useFormField_1.useFormField)(props, conditionalVariables.prefix);
61
62
  return (react_1.default.createElement("div", { className: (0, clsx_1.default)(className, "navds-form-field", `navds-form-field--${size}`, "navds-date__field", {
62
63
  "navds-text-field--error": hasError,
@@ -76,9 +77,12 @@ const DateInput = (0, react_1.forwardRef)((props, ref) => {
76
77
  "navds-sr-only": hideLabel,
77
78
  }), id: inputDescriptionId, size: size }, description)),
78
79
  react_1.default.createElement("div", { className: "navds-date__field-wrapper" },
79
- react_1.default.createElement("input", Object.assign({ ref: ref }, (0, util_1.omit)(rest, ["error", "errorId", "size"]), inputProps, { autoComplete: "off", "aria-controls": open ? ariaId : undefined, readOnly: readOnly, className: (0, clsx_1.default)("navds-date__field-input", "navds-text-field__input", "navds-body-short", `navds-body-short--${size}`), size: isDatepickerVariant ? 10 : 14 })),
80
- react_1.default.createElement("button", { disabled: inputProps.disabled || readOnly, tabIndex: readOnly ? -1 : open ? -1 : 0, onClick: () => onOpen(), type: "button", className: "navds-date__field-button" },
81
- react_1.default.createElement(aksel_icons_1.CalendarIcon, { pointerEvents: "none", title: open
80
+ react_1.default.createElement("input", Object.assign({ ref: ref }, (0, util_1.omit)(rest, ["error", "errorId", "size"]), inputProps, { autoComplete: "off", "aria-controls": (context === null || context === void 0 ? void 0 : context.open) ? context.ariaId : undefined, readOnly: readOnly, className: (0, clsx_1.default)("navds-date__field-input", "navds-text-field__input", "navds-body-short", `navds-body-short--${size}`), size: isDatepickerVariant ? 11 : 14 })),
81
+ react_1.default.createElement("button", { disabled: inputProps.disabled || readOnly, tabIndex: readOnly ? -1 : (context === null || context === void 0 ? void 0 : context.open) ? -1 : 0, onClick: () => {
82
+ context === null || context === void 0 ? void 0 : context.onOpen();
83
+ setAnchorRef === null || setAnchorRef === void 0 ? void 0 : setAnchorRef(buttonRef.current);
84
+ }, type: "button", className: "navds-date__field-button", ref: buttonRef },
85
+ react_1.default.createElement(aksel_icons_1.CalendarIcon, { pointerEvents: "none", title: (context === null || context === void 0 ? void 0 : context.open)
82
86
  ? conditionalVariables.iconTitle.close
83
87
  : conditionalVariables.iconTitle.open }))),
84
88
  react_1.default.createElement("div", { className: "navds-form-field__error", id: errorId, "aria-relevant": "additions removals", "aria-live": "polite" }, showErrorMsg && react_1.default.createElement(typography_1.ErrorMessage, { size: size }, props.error))));
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.DateWrapper = void 0;
30
+ const clsx_1 = __importDefault(require("clsx"));
31
+ const react_1 = __importStar(require("react"));
32
+ const button_1 = require("../../button");
33
+ const modal_1 = require("../../modal");
34
+ const ModalContext_1 = require("../../modal/ModalContext");
35
+ const popover_1 = require("../../popover");
36
+ const useMedia_1 = require("../../util/useMedia");
37
+ const labels_1 = require("../utils/labels");
38
+ const DateWrapper = ({ open, children, onClose, anchor, locale, variant, popoverProps, }) => {
39
+ const modalRef = (0, react_1.useRef)(null);
40
+ const isInModal = (0, react_1.useContext)(ModalContext_1.ModalContext) !== null;
41
+ const hideModal = (0, useMedia_1.useMedia)("screen and (min-width: 768px)", true) && !isInModal;
42
+ if (hideModal) {
43
+ return (react_1.default.createElement(popover_1.Popover, Object.assign({ arrow: false, anchorEl: anchor, open: open, onClose: onClose, placement: "bottom-start", role: "dialog", className: (0, clsx_1.default)("navds-date__popover", {
44
+ "navds-date": variant === "month",
45
+ }), flip: false }, popoverProps), children));
46
+ }
47
+ return (react_1.default.createElement(modal_1.Modal, { ref: modalRef, open: open, onClose: onClose, "aria-label": (0, labels_1.modalLabel)(locale, variant), className: (0, clsx_1.default)("navds-date__modal", {
48
+ "navds-date__nested-modal": isInModal,
49
+ "navds-date": variant === "month",
50
+ }), closeOnBackdropClick: true },
51
+ react_1.default.createElement("div", { className: "navds-date__modal-body" },
52
+ children,
53
+ react_1.default.createElement(button_1.Button, { variant: "tertiary", onClick: () => { var _a; return (_a = modalRef === null || modalRef === void 0 ? void 0 : modalRef.current) === null || _a === void 0 ? void 0 : _a.close(); }, size: "small" }, (0, labels_1.modalCloseButtonLabel)(locale)))));
54
+ };
55
+ exports.DateWrapper = DateWrapper;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.labelWeek = exports.labelWeekNumberButton = exports.labelWeekNumber = exports.labels = exports.labelPrevYear = exports.labelNextYear = exports.labelMonthDropdown = exports.labelYearDropdown = void 0;
3
+ exports.modalCloseButtonLabel = exports.modalLabel = exports.labelWeek = exports.labelWeekNumberButton = exports.labelWeekNumber = exports.labels = exports.labelPrevYear = exports.labelNextYear = exports.labelMonthDropdown = exports.labelYearDropdown = void 0;
4
4
  const labelNext = (date, options) => {
5
5
  var _a;
6
6
  switch ((_a = options === null || options === void 0 ? void 0 : options.locale) === null || _a === void 0 ? void 0 : _a.code) {
@@ -122,3 +122,79 @@ const labelWeek = (localeCode) => {
122
122
  }
123
123
  };
124
124
  exports.labelWeek = labelWeek;
125
+ const modalLabelSingle = (localeCode) => {
126
+ switch (localeCode) {
127
+ case "nb":
128
+ return `Velg dato`;
129
+ case "nn":
130
+ return `Vel dato`;
131
+ case "en-GB":
132
+ return `Pick a date`;
133
+ default:
134
+ return `Velg dato`;
135
+ }
136
+ };
137
+ const modalLabelMultiple = (localeCode) => {
138
+ switch (localeCode) {
139
+ case "nb":
140
+ return `Velg datoer`;
141
+ case "nn":
142
+ return `Vel datoar`;
143
+ case "en-GB":
144
+ return `Pick dates`;
145
+ default:
146
+ return `Velg datoer`;
147
+ }
148
+ };
149
+ const modalLabelRanged = (localeCode) => {
150
+ switch (localeCode) {
151
+ case "nb":
152
+ return `Velg start- og sluttdato`;
153
+ case "nn":
154
+ return `Vel start- og sluttdato`;
155
+ case "en-GB":
156
+ return `Pick a start and end date`;
157
+ default:
158
+ return `Velg start- og sluttdato`;
159
+ }
160
+ };
161
+ const modalLabelMonth = (localeCode) => {
162
+ switch (localeCode) {
163
+ case "nb":
164
+ return `Velg måned`;
165
+ case "nn":
166
+ return `Vel månad`;
167
+ case "en-GB":
168
+ return `Pick a month`;
169
+ default:
170
+ return `Velg måned`;
171
+ }
172
+ };
173
+ const modalLabel = (localeCode, variant) => {
174
+ switch (variant) {
175
+ case "single":
176
+ return modalLabelSingle(localeCode);
177
+ case "multiple":
178
+ return modalLabelMultiple(localeCode);
179
+ case "range":
180
+ return modalLabelRanged(localeCode);
181
+ case "month":
182
+ return modalLabelMonth(localeCode);
183
+ default:
184
+ return modalLabelSingle(localeCode);
185
+ }
186
+ };
187
+ exports.modalLabel = modalLabel;
188
+ const modalCloseButtonLabel = (localeCode) => {
189
+ switch (localeCode) {
190
+ case "nb":
191
+ return `Lukk`;
192
+ case "nn":
193
+ return `Lukk`;
194
+ case "en-GB":
195
+ return `Close`;
196
+ default:
197
+ return `Lukk`;
198
+ }
199
+ };
200
+ exports.modalCloseButtonLabel = modalCloseButtonLabel;
@@ -54,7 +54,7 @@ const typography_1 = require("../../typography");
54
54
  exports.Combobox = (0, react_1.forwardRef)((props, ref) => {
55
55
  const { className, hideLabel = false, description, label, clearButton = true, clearButtonLabel, toggleListButton = true, toggleListButtonLabel, inputClassName, shouldShowSelectedOptions = true } = props, rest = __rest(props, ["className", "hideLabel", "description", "label", "clearButton", "clearButtonLabel", "toggleListButton", "toggleListButtonLabel", "inputClassName", "shouldShowSelectedOptions"]);
56
56
  const toggleListButtonRef = (0, react_1.useRef)(null);
57
- const { currentOption, toggleIsListOpen } = (0, filteredOptionsContext_1.useFilteredOptionsContext)();
57
+ const { activeDecendantId, toggleIsListOpen } = (0, filteredOptionsContext_1.useFilteredOptionsContext)();
58
58
  const { selectedOptions } = (0, selectedOptionsContext_1.useSelectedOptionsContext)();
59
59
  const { clearInput, error, errorId, focusInput, hasError, inputDescriptionId, inputProps, inputRef, value, showErrorMsg, size = "medium", } = (0, inputContext_1.useInputContext)();
60
60
  const mergedInputRef = (0, react_1.useMemo)(() => (0, util_1.mergeRefs)([inputRef, ref]), [inputRef, ref]);
@@ -67,7 +67,7 @@ exports.Combobox = (0, react_1.forwardRef)((props, ref) => {
67
67
  }), id: inputDescriptionId, size: size }, description)),
68
68
  react_1.default.createElement("div", { className: "navds-combobox__wrapper" },
69
69
  react_1.default.createElement("div", { className: (0, clsx_1.default)("navds-combobox__wrapper-inner navds-text-field__input", {
70
- "navds-combobox__wrapper-inner--virtually-unfocused": currentOption !== null,
70
+ "navds-combobox__wrapper-inner--virtually-unfocused": activeDecendantId !== null,
71
71
  }), onClick: focusInput },
72
72
  !shouldShowSelectedOptions ? (react_1.default.createElement(Input_1.default, Object.assign({ id: inputProps.id, ref: mergedInputRef, inputClassName: inputClassName }, rest))) : (react_1.default.createElement(SelectedOptions_1.default, { selectedOptions: selectedOptions, size: size },
73
73
  react_1.default.createElement(Input_1.default, Object.assign({ id: inputProps.id, ref: mergedInputRef, inputClassName: inputClassName }, rest)))),
@@ -78,7 +78,7 @@ const ComboboxProvider = (0, react_1.forwardRef)((props, ref) => {
78
78
  shouldAutocomplete,
79
79
  size,
80
80
  } },
81
- react_1.default.createElement(customOptionsContext_1.CustomOptionsProvider, null,
81
+ react_1.default.createElement(customOptionsContext_1.CustomOptionsProvider, { value: { isMultiSelect } },
82
82
  react_1.default.createElement(selectedOptionsContext_1.SelectedOptionsProvider, { value: {
83
83
  allowNewValues,
84
84
  isMultiSelect,
@@ -91,7 +91,6 @@ const ComboboxProvider = (0, react_1.forwardRef)((props, ref) => {
91
91
  filteredOptions,
92
92
  isListOpen,
93
93
  isLoading,
94
- isMultiSelect,
95
94
  options,
96
95
  } },
97
96
  react_1.default.createElement(Combobox_1.default, Object.assign({ ref: ref }, rest), children))))));