@salt-ds/lab 1.0.0-alpha.55 → 1.0.0-alpha.57

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 (188) hide show
  1. package/CHANGELOG.md +167 -0
  2. package/css/salt-lab.css +44 -7
  3. package/dist-cjs/calendar/Calendar.js +12 -12
  4. package/dist-cjs/calendar/Calendar.js.map +1 -1
  5. package/dist-cjs/calendar/CalendarGrid.css.js +6 -0
  6. package/dist-cjs/calendar/CalendarGrid.css.js.map +1 -0
  7. package/dist-cjs/calendar/CalendarGrid.js +107 -0
  8. package/dist-cjs/calendar/CalendarGrid.js.map +1 -0
  9. package/dist-cjs/calendar/CalendarNavigation.js +219 -201
  10. package/dist-cjs/calendar/CalendarNavigation.js.map +1 -1
  11. package/dist-cjs/calendar/CalendarWeekHeader.js +10 -4
  12. package/dist-cjs/calendar/CalendarWeekHeader.js.map +1 -1
  13. package/dist-cjs/calendar/internal/CalendarContext.js +6 -2
  14. package/dist-cjs/calendar/internal/CalendarContext.js.map +1 -1
  15. package/dist-cjs/calendar/internal/CalendarDay.js +6 -9
  16. package/dist-cjs/calendar/internal/CalendarDay.js.map +1 -1
  17. package/dist-cjs/calendar/internal/CalendarMonth.css.js +1 -1
  18. package/dist-cjs/calendar/internal/CalendarMonth.js +47 -54
  19. package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -1
  20. package/dist-cjs/calendar/internal/useFocusManagement.js +18 -18
  21. package/dist-cjs/calendar/internal/useFocusManagement.js.map +1 -1
  22. package/dist-cjs/calendar/internal/utils.js +33 -48
  23. package/dist-cjs/calendar/internal/utils.js.map +1 -1
  24. package/dist-cjs/calendar/useCalendar.js +46 -38
  25. package/dist-cjs/calendar/useCalendar.js.map +1 -1
  26. package/dist-cjs/calendar/useCalendarDay.js +15 -21
  27. package/dist-cjs/calendar/useCalendarDay.js.map +1 -1
  28. package/dist-cjs/calendar/useCalendarSelection.js +44 -35
  29. package/dist-cjs/calendar/useCalendarSelection.js.map +1 -1
  30. package/dist-cjs/date-input/DateInput.css.js +1 -1
  31. package/dist-cjs/date-input/DateInputRange.js +102 -107
  32. package/dist-cjs/date-input/DateInputRange.js.map +1 -1
  33. package/dist-cjs/date-input/DateInputSingle.js +39 -51
  34. package/dist-cjs/date-input/DateInputSingle.js.map +1 -1
  35. package/dist-cjs/date-picker/DatePicker.js +15 -13
  36. package/dist-cjs/date-picker/DatePicker.js.map +1 -1
  37. package/dist-cjs/date-picker/DatePickerActions.js +3 -8
  38. package/dist-cjs/date-picker/DatePickerActions.js.map +1 -1
  39. package/dist-cjs/date-picker/DatePickerContext.js +6 -2
  40. package/dist-cjs/date-picker/DatePickerContext.js.map +1 -1
  41. package/dist-cjs/date-picker/DatePickerOverlay.js +1 -0
  42. package/dist-cjs/date-picker/DatePickerOverlay.js.map +1 -1
  43. package/dist-cjs/date-picker/DatePickerOverlayProvider.js +21 -8
  44. package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -1
  45. package/dist-cjs/date-picker/DatePickerRangeInput.js +77 -28
  46. package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -1
  47. package/dist-cjs/date-picker/DatePickerRangePanel.js +45 -40
  48. package/dist-cjs/date-picker/DatePickerRangePanel.js.map +1 -1
  49. package/dist-cjs/date-picker/DatePickerSingleInput.js +123 -84
  50. package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -1
  51. package/dist-cjs/date-picker/DatePickerSinglePanel.js +17 -20
  52. package/dist-cjs/date-picker/DatePickerSinglePanel.js.map +1 -1
  53. package/dist-cjs/date-picker/DatePickerTrigger.js +32 -0
  54. package/dist-cjs/date-picker/DatePickerTrigger.js.map +1 -0
  55. package/dist-cjs/date-picker/useDatePicker.js +60 -110
  56. package/dist-cjs/date-picker/useDatePicker.js.map +1 -1
  57. package/dist-cjs/dropdown/DropdownButton.js.map +1 -1
  58. package/dist-cjs/index.js +19 -20
  59. package/dist-cjs/index.js.map +1 -1
  60. package/dist-cjs/localization-provider/LocalizationProvider.js +48 -0
  61. package/dist-cjs/localization-provider/LocalizationProvider.js.map +1 -0
  62. package/dist-cjs/overlay/OverlayHeader.css.js +6 -0
  63. package/dist-cjs/overlay/OverlayHeader.css.js.map +1 -0
  64. package/dist-cjs/overlay/OverlayHeader.js +35 -0
  65. package/dist-cjs/overlay/OverlayHeader.js.map +1 -0
  66. package/dist-cjs/system-status/SystemStatus.css.js +1 -1
  67. package/dist-cjs/tabs-next/TabListNext.css.js +1 -1
  68. package/dist-cjs/tabs-next/TabListNext.js +4 -0
  69. package/dist-cjs/tabs-next/TabListNext.js.map +1 -1
  70. package/dist-es/calendar/Calendar.js +12 -12
  71. package/dist-es/calendar/Calendar.js.map +1 -1
  72. package/dist-es/calendar/CalendarGrid.css.js +4 -0
  73. package/dist-es/calendar/CalendarGrid.css.js.map +1 -0
  74. package/dist-es/calendar/CalendarGrid.js +105 -0
  75. package/dist-es/calendar/CalendarGrid.js.map +1 -0
  76. package/dist-es/calendar/CalendarNavigation.js +220 -202
  77. package/dist-es/calendar/CalendarNavigation.js.map +1 -1
  78. package/dist-es/calendar/CalendarWeekHeader.js +11 -5
  79. package/dist-es/calendar/CalendarWeekHeader.js.map +1 -1
  80. package/dist-es/calendar/internal/CalendarContext.js +6 -2
  81. package/dist-es/calendar/internal/CalendarContext.js.map +1 -1
  82. package/dist-es/calendar/internal/CalendarDay.js +6 -9
  83. package/dist-es/calendar/internal/CalendarDay.js.map +1 -1
  84. package/dist-es/calendar/internal/CalendarMonth.css.js +1 -1
  85. package/dist-es/calendar/internal/CalendarMonth.js +48 -55
  86. package/dist-es/calendar/internal/CalendarMonth.js.map +1 -1
  87. package/dist-es/calendar/internal/useFocusManagement.js +15 -15
  88. package/dist-es/calendar/internal/useFocusManagement.js.map +1 -1
  89. package/dist-es/calendar/internal/utils.js +32 -45
  90. package/dist-es/calendar/internal/utils.js.map +1 -1
  91. package/dist-es/calendar/useCalendar.js +40 -32
  92. package/dist-es/calendar/useCalendar.js.map +1 -1
  93. package/dist-es/calendar/useCalendarDay.js +11 -17
  94. package/dist-es/calendar/useCalendarDay.js.map +1 -1
  95. package/dist-es/calendar/useCalendarSelection.js +40 -29
  96. package/dist-es/calendar/useCalendarSelection.js.map +1 -1
  97. package/dist-es/date-input/DateInput.css.js +1 -1
  98. package/dist-es/date-input/DateInputRange.js +101 -107
  99. package/dist-es/date-input/DateInputRange.js.map +1 -1
  100. package/dist-es/date-input/DateInputSingle.js +39 -51
  101. package/dist-es/date-input/DateInputSingle.js.map +1 -1
  102. package/dist-es/date-picker/DatePicker.js +15 -13
  103. package/dist-es/date-picker/DatePicker.js.map +1 -1
  104. package/dist-es/date-picker/DatePickerActions.js +3 -8
  105. package/dist-es/date-picker/DatePickerActions.js.map +1 -1
  106. package/dist-es/date-picker/DatePickerContext.js +6 -2
  107. package/dist-es/date-picker/DatePickerContext.js.map +1 -1
  108. package/dist-es/date-picker/DatePickerOverlay.js +1 -0
  109. package/dist-es/date-picker/DatePickerOverlay.js.map +1 -1
  110. package/dist-es/date-picker/DatePickerOverlayProvider.js +21 -8
  111. package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -1
  112. package/dist-es/date-picker/DatePickerRangeInput.js +78 -30
  113. package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -1
  114. package/dist-es/date-picker/DatePickerRangePanel.js +44 -39
  115. package/dist-es/date-picker/DatePickerRangePanel.js.map +1 -1
  116. package/dist-es/date-picker/DatePickerSingleInput.js +124 -85
  117. package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -1
  118. package/dist-es/date-picker/DatePickerSinglePanel.js +17 -20
  119. package/dist-es/date-picker/DatePickerSinglePanel.js.map +1 -1
  120. package/dist-es/date-picker/DatePickerTrigger.js +30 -0
  121. package/dist-es/date-picker/DatePickerTrigger.js.map +1 -0
  122. package/dist-es/date-picker/useDatePicker.js +61 -111
  123. package/dist-es/date-picker/useDatePicker.js.map +1 -1
  124. package/dist-es/dropdown/DropdownButton.js.map +1 -1
  125. package/dist-es/index.js +8 -7
  126. package/dist-es/index.js.map +1 -1
  127. package/dist-es/localization-provider/LocalizationProvider.js +44 -0
  128. package/dist-es/localization-provider/LocalizationProvider.js.map +1 -0
  129. package/dist-es/overlay/OverlayHeader.css.js +4 -0
  130. package/dist-es/overlay/OverlayHeader.css.js.map +1 -0
  131. package/dist-es/overlay/OverlayHeader.js +33 -0
  132. package/dist-es/overlay/OverlayHeader.js.map +1 -0
  133. package/dist-es/system-status/SystemStatus.css.js +1 -1
  134. package/dist-es/tabs-next/TabListNext.css.js +1 -1
  135. package/dist-es/tabs-next/TabListNext.js +5 -1
  136. package/dist-es/tabs-next/TabListNext.js.map +1 -1
  137. package/dist-types/calendar/Calendar.d.ts +11 -6
  138. package/dist-types/calendar/CalendarGrid.d.ts +13 -0
  139. package/dist-types/calendar/CalendarNavigation.d.ts +9 -11
  140. package/dist-types/calendar/CalendarWeekHeader.d.ts +4 -3
  141. package/dist-types/calendar/index.d.ts +1 -2
  142. package/dist-types/calendar/internal/CalendarContext.d.ts +5 -6
  143. package/dist-types/calendar/internal/CalendarDay.d.ts +6 -8
  144. package/dist-types/calendar/internal/CalendarMonth.d.ts +5 -6
  145. package/dist-types/calendar/internal/useFocusManagement.d.ts +3 -4
  146. package/dist-types/calendar/internal/utils.d.ts +7 -11
  147. package/dist-types/calendar/useCalendar.d.ts +207 -55
  148. package/dist-types/calendar/useCalendarDay.d.ts +5 -7
  149. package/dist-types/calendar/useCalendarSelection.d.ts +92 -58
  150. package/dist-types/date-input/DateInputRange.d.ts +38 -56
  151. package/dist-types/date-input/DateInputSingle.d.ts +32 -49
  152. package/dist-types/date-input/index.d.ts +0 -1
  153. package/dist-types/date-picker/DatePicker.d.ts +23 -5
  154. package/dist-types/date-picker/DatePickerActions.d.ts +13 -12
  155. package/dist-types/date-picker/DatePickerContext.d.ts +42 -59
  156. package/dist-types/date-picker/DatePickerOverlayProvider.d.ts +10 -0
  157. package/dist-types/date-picker/DatePickerRangeInput.d.ts +13 -3
  158. package/dist-types/date-picker/DatePickerRangePanel.d.ts +17 -17
  159. package/dist-types/date-picker/DatePickerSingleInput.d.ts +12 -3
  160. package/dist-types/date-picker/DatePickerSinglePanel.d.ts +11 -11
  161. package/dist-types/date-picker/DatePickerTrigger.d.ts +9 -0
  162. package/dist-types/date-picker/index.d.ts +3 -2
  163. package/dist-types/date-picker/useDatePicker.d.ts +52 -59
  164. package/dist-types/index.d.ts +2 -0
  165. package/dist-types/localization-provider/LocalizationProvider.d.ts +62 -0
  166. package/dist-types/localization-provider/index.d.ts +1 -0
  167. package/dist-types/overlay/OverlayHeader.d.ts +20 -0
  168. package/dist-types/overlay/index.d.ts +1 -0
  169. package/package.json +11 -3
  170. package/dist-cjs/calendar/CalendarDateGrid.css.js +0 -6
  171. package/dist-cjs/calendar/CalendarDateGrid.css.js.map +0 -1
  172. package/dist-cjs/calendar/CalendarDateGrid.js +0 -105
  173. package/dist-cjs/calendar/CalendarDateGrid.js.map +0 -1
  174. package/dist-cjs/calendar/formatDate.js +0 -51
  175. package/dist-cjs/calendar/formatDate.js.map +0 -1
  176. package/dist-cjs/date-input/utils.js +0 -63
  177. package/dist-cjs/date-input/utils.js.map +0 -1
  178. package/dist-es/calendar/CalendarDateGrid.css.js +0 -4
  179. package/dist-es/calendar/CalendarDateGrid.css.js.map +0 -1
  180. package/dist-es/calendar/CalendarDateGrid.js +0 -103
  181. package/dist-es/calendar/CalendarDateGrid.js.map +0 -1
  182. package/dist-es/calendar/formatDate.js +0 -48
  183. package/dist-es/calendar/formatDate.js.map +0 -1
  184. package/dist-es/date-input/utils.js +0 -57
  185. package/dist-es/date-input/utils.js.map +0 -1
  186. package/dist-types/calendar/CalendarDateGrid.d.ts +0 -10
  187. package/dist-types/calendar/formatDate.d.ts +0 -14
  188. package/dist-types/date-input/utils.d.ts +0 -43
@@ -2,15 +2,13 @@
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var core = require('@salt-ds/core');
5
- var clsx = require('clsx');
6
- var react = require('react');
7
- var CalendarContext = require('./internal/CalendarContext.js');
8
- var useCalendarSelection = require('./useCalendarSelection.js');
9
- var date = require('@internationalized/date');
10
5
  var styles = require('@salt-ds/styles');
11
6
  var window = require('@salt-ds/window');
7
+ var clsx = require('clsx');
8
+ var react = require('react');
9
+ var LocalizationProvider = require('../localization-provider/LocalizationProvider.js');
12
10
  var CalendarNavigation$1 = require('./CalendarNavigation.css.js');
13
- var formatDate = require('./formatDate.js');
11
+ var CalendarContext = require('./internal/CalendarContext.js');
14
12
  var utils = require('./internal/utils.js');
15
13
 
16
14
  const withBaseName = core.makePrefixer("saltCalendarNavigation");
@@ -24,16 +22,18 @@ const ConditionalTooltip = ({
24
22
  }
25
23
  return /* @__PURE__ */ jsxRuntime.jsx(core.Tooltip, { ...rest, children });
26
24
  };
27
- function generateYearsBetweenRange(minYear, maxYear) {
25
+ function generateYearsBetweenRange(dateAdapter, minYear, maxYear) {
28
26
  const years = [];
29
27
  for (let year = minYear; year <= maxYear; year++) {
30
- years.push(new date.CalendarDate(year, 1, 1));
28
+ let startOfYear = dateAdapter.today();
29
+ startOfYear = dateAdapter.set(startOfYear, { day: 1, month: 1, year });
30
+ years.push(startOfYear);
31
31
  }
32
32
  return years;
33
33
  }
34
34
  function useCalendarNavigation() {
35
35
  const {
36
- state: { visibleMonth, minDate, maxDate, locale, timeZone },
36
+ state: { visibleMonth, locale, minDate, maxDate },
37
37
  helpers: {
38
38
  setVisibleMonth,
39
39
  isDayVisible,
@@ -41,77 +41,87 @@ function useCalendarNavigation() {
41
41
  isOutsideAllowedMonths
42
42
  }
43
43
  } = CalendarContext.useCalendarContext();
44
+ const { dateAdapter } = LocalizationProvider.useLocalization();
44
45
  const moveToNextMonth = react.useCallback(
45
46
  (event, step = 1) => {
46
- setVisibleMonth(event, visibleMonth.add({ months: step }));
47
+ setVisibleMonth(event, dateAdapter.add(visibleMonth, { months: step }));
47
48
  },
48
- [setVisibleMonth, visibleMonth]
49
+ [dateAdapter, setVisibleMonth, visibleMonth]
49
50
  );
50
51
  const moveToPreviousMonth = react.useCallback(
51
52
  (event, step = 1) => {
52
- setVisibleMonth(event, visibleMonth.subtract({ months: step }));
53
+ setVisibleMonth(
54
+ event,
55
+ dateAdapter.subtract(visibleMonth, { months: step })
56
+ );
53
57
  },
54
- [setVisibleMonth, visibleMonth]
58
+ [dateAdapter, setVisibleMonth, visibleMonth]
55
59
  );
56
60
  const moveToMonth = react.useCallback(
57
61
  (event, month) => {
58
62
  let newMonth = month;
59
- if (!isOutsideAllowedYears(newMonth)) {
60
- if (isOutsideAllowedMonths(newMonth)) {
61
- const navigableMonths = utils.monthsForLocale(visibleMonth, locale).filter(
62
- (n) => !isOutsideAllowedMonths(n)
63
- );
64
- newMonth = navigableMonths.reduce(
65
- (closestMonth, currentMonth) => Math.abs(utils.monthDiff(currentMonth, newMonth)) < Math.abs(utils.monthDiff(closestMonth, newMonth)) ? currentMonth : closestMonth
66
- );
67
- }
68
- setVisibleMonth(event, newMonth);
63
+ if (isOutsideAllowedMonths(newMonth)) {
64
+ const navigableMonths = utils.generateMonthsForYear(
65
+ dateAdapter,
66
+ visibleMonth
67
+ ).filter((n) => !isOutsideAllowedMonths(n));
68
+ newMonth = navigableMonths.reduce(
69
+ (closestMonth, currentMonth) => Math.abs(utils.monthDiff(dateAdapter, currentMonth, newMonth)) < Math.abs(utils.monthDiff(dateAdapter, closestMonth, newMonth)) ? currentMonth : closestMonth
70
+ );
69
71
  }
72
+ setVisibleMonth(event, newMonth);
70
73
  },
71
74
  [
75
+ dateAdapter,
72
76
  isOutsideAllowedYears,
73
77
  isOutsideAllowedMonths,
74
78
  setVisibleMonth,
75
- visibleMonth,
76
- locale
79
+ visibleMonth
77
80
  ]
78
81
  );
79
82
  const months = react.useMemo(
80
- () => utils.monthsForLocale(visibleMonth, locale),
81
- [visibleMonth, locale]
83
+ () => utils.generateMonthsForYear(dateAdapter, visibleMonth),
84
+ [visibleMonth]
82
85
  );
83
86
  const years = react.useMemo(
84
87
  () => generateYearsBetweenRange(
85
- Math.min(minDate ? minDate.year : useCalendarSelection.CALENDAR_MIN_YEAR, visibleMonth.year),
86
- Math.max(maxDate ? maxDate.year : useCalendarSelection.CALENDAR_MAX_YEAR, visibleMonth.year)
88
+ dateAdapter,
89
+ Math.min(
90
+ dateAdapter.getYear(minDate),
91
+ dateAdapter.getYear(visibleMonth)
92
+ ),
93
+ Math.max(
94
+ dateAdapter.getYear(maxDate),
95
+ dateAdapter.getYear(visibleMonth)
96
+ )
87
97
  ),
88
- [minDate, maxDate, visibleMonth.year]
98
+ [dateAdapter, minDate, maxDate, visibleMonth]
89
99
  );
90
100
  const selectedMonth = months.find(
91
- (month) => date.isSameMonth(month, visibleMonth)
101
+ (month) => dateAdapter.isSame(month, visibleMonth, "month")
92
102
  );
93
103
  const selectedYear = years.find(
94
- (year) => date.isSameYear(year, visibleMonth)
104
+ (year) => dateAdapter.isSame(year, visibleMonth, "year")
95
105
  );
96
- const canNavigatePrevious = !(minDate && isDayVisible(minDate));
97
- const canNavigateNext = !(maxDate && isDayVisible(maxDate));
106
+ const canNavigatePrevious = !isDayVisible(minDate);
107
+ const canNavigateNext = !isDayVisible(maxDate);
98
108
  return react.useMemo(
99
109
  () => ({
100
110
  moveToNextMonth,
101
111
  moveToPreviousMonth,
102
112
  moveToMonth,
103
113
  visibleMonth,
114
+ locale,
104
115
  months,
105
116
  years,
106
117
  canNavigateNext,
107
118
  canNavigatePrevious,
108
119
  selectedMonth,
109
120
  selectedYear,
110
- isOutsideAllowedMonths,
111
- locale,
112
- timeZone
121
+ isOutsideAllowedMonths
113
122
  }),
114
123
  [
124
+ locale,
115
125
  months,
116
126
  moveToPreviousMonth,
117
127
  moveToNextMonth,
@@ -122,18 +132,16 @@ function useCalendarNavigation() {
122
132
  canNavigatePrevious,
123
133
  selectedMonth,
124
134
  selectedYear,
125
- isOutsideAllowedMonths,
126
- locale,
127
- timeZone
135
+ isOutsideAllowedMonths
128
136
  ]
129
137
  );
130
138
  }
131
- const OptionWithTooltip = ({
139
+ function OptionWithTooltip({
132
140
  value,
133
141
  children,
134
142
  disabled = false,
135
143
  tooltipContent
136
- }) => {
144
+ }) {
137
145
  const { activeState, openState } = core.useListControlContext();
138
146
  const open = (activeState == null ? void 0 : activeState.value) === value;
139
147
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -148,174 +156,184 @@ const OptionWithTooltip = ({
148
156
  children: /* @__PURE__ */ jsxRuntime.jsx(core.Option, { value, disabled, children })
149
157
  }
150
158
  );
151
- };
152
- const CalendarNavigation = react.forwardRef(function CalendarNavigation2(props, ref) {
153
- const {
154
- className,
155
- formatMonth: formatMonthProp,
156
- formatYear: formatYearProp,
157
- MonthDropdownProps,
158
- YearDropdownProps,
159
- hideYearDropdown,
160
- step = 1,
161
- ...rest
162
- } = props;
163
- const targetWindow = window.useWindow();
164
- styles.useComponentCssInjection({
165
- testId: "salt-calendar-navigation",
166
- css: CalendarNavigation$1,
167
- window: targetWindow
168
- });
169
- const { NextIcon, PreviousIcon } = core.useIcon();
170
- const {
171
- moveToPreviousMonth,
172
- moveToNextMonth,
173
- moveToMonth,
174
- months,
175
- years,
176
- canNavigateNext,
177
- canNavigatePrevious,
178
- selectedMonth,
179
- selectedYear,
180
- isOutsideAllowedMonths,
181
- locale
182
- } = useCalendarNavigation();
183
- const handleNavigatePrevious = react.useCallback(
184
- (event) => {
185
- moveToPreviousMonth(event, step);
186
- },
187
- [moveToPreviousMonth, step]
188
- );
189
- const handleNavigateNext = react.useCallback(
190
- (event) => {
191
- moveToNextMonth(event, step);
192
- },
193
- [moveToNextMonth, step]
194
- );
195
- const handleMonthSelect = react.useCallback(
196
- (event, month) => {
197
- moveToMonth(event, month[0]);
198
- },
199
- [moveToMonth]
200
- );
201
- const handleYearSelect = react.useCallback(
202
- (event, year) => {
203
- moveToMonth(event, year[0]);
204
- },
205
- [moveToMonth]
206
- );
207
- const formatMonth = react.useCallback(
208
- (date) => {
209
- if (date && formatMonthProp) {
210
- return formatMonthProp(date);
211
- }
212
- return !date ? "" : formatDate.formatDate(date, locale, {
213
- month: hideYearDropdown ? "long" : "short",
214
- day: void 0,
215
- year: void 0
216
- });
217
- },
218
- [formatMonthProp]
219
- );
220
- const formatYear = react.useCallback(
221
- (date) => {
222
- if (date && formatYearProp) {
223
- return formatYearProp(date);
224
- }
225
- return !date ? "" : `${date.year}`;
226
- },
227
- [formatYearProp]
228
- );
229
- return /* @__PURE__ */ jsxRuntime.jsxs(
230
- "div",
231
- {
232
- className: clsx.clsx(
233
- withBaseName(),
234
- { [withBaseName("hideYearDropdown")]: hideYearDropdown },
235
- className
236
- ),
237
- ref,
238
- ...rest,
239
- children: [
240
- /* @__PURE__ */ jsxRuntime.jsx(
241
- ConditionalTooltip,
242
- {
243
- placement: "top",
244
- disabled: canNavigatePrevious,
245
- content: "Past dates are out of range",
246
- enterDelay: 0,
247
- leaveDelay: 0,
248
- children: /* @__PURE__ */ jsxRuntime.jsx(
249
- core.Button,
250
- {
251
- disabled: !canNavigatePrevious,
252
- appearance: "transparent",
253
- sentiment: "neutral",
254
- onClick: handleNavigatePrevious,
255
- focusableWhenDisabled: true,
256
- children: /* @__PURE__ */ jsxRuntime.jsx(PreviousIcon, { "aria-label": "Previous Month" })
257
- }
258
- )
259
- }
159
+ }
160
+ const CalendarNavigation = react.forwardRef(
161
+ (props, ref) => {
162
+ const {
163
+ className,
164
+ formatMonth: formatMonthProp,
165
+ formatYear: formatYearProp,
166
+ MonthDropdownProps,
167
+ YearDropdownProps,
168
+ hideYearDropdown,
169
+ step = 1,
170
+ ...rest
171
+ } = props;
172
+ const { dateAdapter } = LocalizationProvider.useLocalization();
173
+ const targetWindow = window.useWindow();
174
+ styles.useComponentCssInjection({
175
+ testId: "salt-calendar-navigation",
176
+ css: CalendarNavigation$1,
177
+ window: targetWindow
178
+ });
179
+ const { NextIcon, PreviousIcon } = core.useIcon();
180
+ const {
181
+ locale,
182
+ moveToPreviousMonth,
183
+ moveToNextMonth,
184
+ moveToMonth,
185
+ months,
186
+ years,
187
+ canNavigateNext,
188
+ canNavigatePrevious,
189
+ selectedMonth,
190
+ selectedYear,
191
+ isOutsideAllowedMonths,
192
+ visibleMonth
193
+ } = useCalendarNavigation();
194
+ const handleNavigatePrevious = react.useCallback(
195
+ (event) => {
196
+ moveToPreviousMonth(event, step);
197
+ },
198
+ [moveToPreviousMonth, step]
199
+ );
200
+ const handleNavigateNext = react.useCallback(
201
+ (event) => {
202
+ moveToNextMonth(event, step);
203
+ },
204
+ [moveToNextMonth, step]
205
+ );
206
+ const handleMonthSelect = react.useCallback(
207
+ (event, month) => {
208
+ moveToMonth(event, month[0]);
209
+ },
210
+ [moveToMonth]
211
+ );
212
+ const handleYearSelect = react.useCallback(
213
+ (event, year) => {
214
+ let newVisibleMonth = dateAdapter.clone(visibleMonth);
215
+ newVisibleMonth = dateAdapter.set(newVisibleMonth, {
216
+ year: dateAdapter.getYear(year[0])
217
+ });
218
+ moveToMonth(event, newVisibleMonth);
219
+ },
220
+ [moveToMonth, visibleMonth]
221
+ );
222
+ const formatMonth = react.useCallback(
223
+ (date) => {
224
+ if (date && formatMonthProp) {
225
+ return dateAdapter.format(date, formatMonthProp, locale);
226
+ }
227
+ return date ? dateAdapter.format(date, hideYearDropdown ? "MMMM" : "MMM") : "";
228
+ },
229
+ [dateAdapter, formatMonthProp, locale]
230
+ );
231
+ const formatYear = react.useCallback(
232
+ (date) => {
233
+ if (date && formatYearProp) {
234
+ return dateAdapter.format(date, formatYearProp);
235
+ }
236
+ return !date ? "" : `${dateAdapter.format(date, "YYYY")}`;
237
+ },
238
+ [dateAdapter, formatYearProp]
239
+ );
240
+ return /* @__PURE__ */ jsxRuntime.jsxs(
241
+ "div",
242
+ {
243
+ className: clsx.clsx(
244
+ withBaseName(),
245
+ { [withBaseName("hideYearDropdown")]: hideYearDropdown },
246
+ className
260
247
  ),
261
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: clsx.clsx({ [withBaseName("dropdowns")]: !hideYearDropdown }), children: [
248
+ ref,
249
+ ...rest,
250
+ children: [
262
251
  /* @__PURE__ */ jsxRuntime.jsx(
263
- core.Dropdown,
252
+ ConditionalTooltip,
264
253
  {
265
- "aria-label": "Month Dropdown",
266
- selected: selectedMonth ? [selectedMonth] : [],
267
- value: formatMonth(selectedMonth),
268
- onSelectionChange: handleMonthSelect,
269
- ...MonthDropdownProps,
270
- children: months.map((month) => /* @__PURE__ */ jsxRuntime.jsx(
271
- OptionWithTooltip,
254
+ placement: "top",
255
+ disabled: canNavigatePrevious,
256
+ content: "Past dates are out of range",
257
+ enterDelay: 0,
258
+ leaveDelay: 0,
259
+ children: /* @__PURE__ */ jsxRuntime.jsx(
260
+ core.Button,
272
261
  {
273
- value: month,
274
- disabled: isOutsideAllowedMonths(month),
275
- tooltipContent: "This month is out of range",
276
- children: formatMonth(month)
277
- },
278
- formatMonth(month)
279
- ))
262
+ disabled: !canNavigatePrevious,
263
+ appearance: "transparent",
264
+ sentiment: "neutral",
265
+ onClick: handleNavigatePrevious,
266
+ focusableWhenDisabled: true,
267
+ children: /* @__PURE__ */ jsxRuntime.jsx(PreviousIcon, { "aria-label": "Previous Month" })
268
+ }
269
+ )
280
270
  }
281
271
  ),
282
- !hideYearDropdown && /* @__PURE__ */ jsxRuntime.jsx(
283
- core.Dropdown,
272
+ /* @__PURE__ */ jsxRuntime.jsxs(
273
+ "div",
284
274
  {
285
- "aria-label": "Year Dropdown",
286
- selected: selectedYear ? [selectedYear] : [],
287
- value: formatYear(selectedYear),
288
- onSelectionChange: handleYearSelect,
289
- ...YearDropdownProps,
290
- children: years.map((year) => /* @__PURE__ */ jsxRuntime.jsx(OptionWithTooltip, { value: year, children: formatYear(year) }, formatYear(year)))
275
+ className: clsx.clsx({ [withBaseName("dropdowns")]: !hideYearDropdown }),
276
+ children: [
277
+ /* @__PURE__ */ jsxRuntime.jsx(
278
+ core.Dropdown,
279
+ {
280
+ "aria-label": "Month Dropdown",
281
+ selected: selectedMonth ? [selectedMonth] : [],
282
+ value: formatMonth(selectedMonth),
283
+ onSelectionChange: handleMonthSelect,
284
+ ...MonthDropdownProps,
285
+ children: months.map((month) => /* @__PURE__ */ jsxRuntime.jsx(
286
+ OptionWithTooltip,
287
+ {
288
+ value: month,
289
+ disabled: isOutsideAllowedMonths(month),
290
+ tooltipContent: "This month is out of range",
291
+ children: formatMonth(month)
292
+ },
293
+ formatMonth(month)
294
+ ))
295
+ }
296
+ ),
297
+ !hideYearDropdown && /* @__PURE__ */ jsxRuntime.jsx(
298
+ core.Dropdown,
299
+ {
300
+ "aria-label": "Year Dropdown",
301
+ selected: selectedYear ? [selectedYear] : [],
302
+ value: formatYear(selectedYear),
303
+ onSelectionChange: handleYearSelect,
304
+ ...YearDropdownProps,
305
+ children: years.map((year) => /* @__PURE__ */ jsxRuntime.jsx(OptionWithTooltip, { value: year, children: formatYear(year) }, formatYear(year)))
306
+ }
307
+ )
308
+ ]
309
+ }
310
+ ),
311
+ /* @__PURE__ */ jsxRuntime.jsx(
312
+ ConditionalTooltip,
313
+ {
314
+ placement: "top",
315
+ disabled: canNavigateNext,
316
+ content: "Future dates are out of range",
317
+ enterDelay: 0,
318
+ leaveDelay: 0,
319
+ children: /* @__PURE__ */ jsxRuntime.jsx(
320
+ core.Button,
321
+ {
322
+ disabled: !canNavigateNext,
323
+ appearance: "transparent",
324
+ sentiment: "neutral",
325
+ onClick: handleNavigateNext,
326
+ focusableWhenDisabled: true,
327
+ children: /* @__PURE__ */ jsxRuntime.jsx(NextIcon, { "aria-label": "Next Month" })
328
+ }
329
+ )
291
330
  }
292
331
  )
293
- ] }),
294
- /* @__PURE__ */ jsxRuntime.jsx(
295
- ConditionalTooltip,
296
- {
297
- placement: "top",
298
- disabled: canNavigateNext,
299
- content: "Future dates are out of range",
300
- enterDelay: 0,
301
- leaveDelay: 0,
302
- children: /* @__PURE__ */ jsxRuntime.jsx(
303
- core.Button,
304
- {
305
- disabled: !canNavigateNext,
306
- appearance: "transparent",
307
- sentiment: "neutral",
308
- onClick: handleNavigateNext,
309
- focusableWhenDisabled: true,
310
- children: /* @__PURE__ */ jsxRuntime.jsx(NextIcon, { "aria-label": "Next Month" })
311
- }
312
- )
313
- }
314
- )
315
- ]
316
- }
317
- );
318
- });
332
+ ]
333
+ }
334
+ );
335
+ }
336
+ );
319
337
 
320
338
  exports.CalendarNavigation = CalendarNavigation;
321
339
  //# sourceMappingURL=CalendarNavigation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarNavigation.js","sources":["../src/calendar/CalendarNavigation.tsx"],"sourcesContent":["import {\n Button,\n type ButtonProps,\n Dropdown,\n type DropdownProps,\n Option,\n type OptionProps,\n Tooltip,\n type TooltipProps,\n makePrefixer,\n useIcon,\n useListControlContext,\n} from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithRef,\n type MouseEventHandler,\n type SyntheticEvent,\n forwardRef,\n useCallback,\n useMemo,\n} from \"react\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\nimport { CALENDAR_MAX_YEAR, CALENDAR_MIN_YEAR } from \"./useCalendarSelection\";\n\nimport {\n CalendarDate,\n type DateValue,\n isSameMonth,\n isSameYear,\n} from \"@internationalized/date\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport calendarNavigationCss from \"./CalendarNavigation.css\";\nimport { formatDate } from \"./formatDate\";\nimport { monthDiff, monthsForLocale } from \"./internal/utils\";\n\ntype DateDropdownProps = DropdownProps<DateValue>;\n\n/**\n * Props for the CalendarNavigation component.\n */\nexport interface CalendarNavigationProps extends ComponentPropsWithRef<\"div\"> {\n /**\n * Props for the month dropdown component.\n */\n MonthDropdownProps?: DateDropdownProps;\n\n /**\n * Props for the year dropdown component.\n */\n YearDropdownProps?: DateDropdownProps;\n\n /**\n * Callback fired when a month is selected.\n * @param event - The change event.\n */\n onMonthSelect?: DateDropdownProps[\"onChange\"];\n\n /**\n * Callback fired when a year is selected.\n * @param event - The change event.\n */\n onYearSelect?: DateDropdownProps[\"onChange\"];\n\n /**\n * Callback fired when navigating to the next month.\n * @param event - The click event.\n */\n onNavigateNext?: ButtonProps[\"onClick\"];\n\n /**\n * Callback fired when navigating to the previous month.\n * @param event - The click event.\n */\n onNavigatePrevious?: ButtonProps[\"onClick\"];\n\n /**\n * If `true`, hides the year dropdown.\n */\n hideYearDropdown?: boolean;\n\n /**\n * The step value for navigation. Defaults to 1.\n */\n step?: number;\n /**\n * Format the month dropdown values\n * @param date\n */\n formatMonth?: (date: DateValue) => string;\n /**\n * Format the year dropdown values\n * @param date\n */\n formatYear?: (date: DateValue) => string;\n}\n\ninterface OptionWithTooltipProps extends OptionProps {\n value: DateValue;\n tooltipContent?: string;\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarNavigation\");\n\nconst ConditionalTooltip: React.FC<TooltipProps> = ({\n children,\n disabled = true,\n ...rest\n}) => {\n if (disabled) {\n return <>{children}</>;\n }\n return <Tooltip {...rest}>{children}</Tooltip>;\n};\n\nfunction generateYearsBetweenRange(\n minYear: number,\n maxYear: number,\n): DateValue[] {\n const years: DateValue[] = [];\n for (let year = minYear; year <= maxYear; year++) {\n years.push(new CalendarDate(year, 1, 1));\n }\n return years;\n}\n\nfunction useCalendarNavigation() {\n const {\n state: { visibleMonth, minDate, maxDate, locale, timeZone },\n helpers: {\n setVisibleMonth,\n isDayVisible,\n isOutsideAllowedYears,\n isOutsideAllowedMonths,\n },\n } = useCalendarContext();\n\n const moveToNextMonth = useCallback(\n (event: SyntheticEvent, step = 1) => {\n setVisibleMonth(event, visibleMonth.add({ months: step }));\n },\n [setVisibleMonth, visibleMonth],\n );\n\n const moveToPreviousMonth = useCallback(\n (event: SyntheticEvent, step = 1) => {\n setVisibleMonth(event, visibleMonth.subtract({ months: step }));\n },\n [setVisibleMonth, visibleMonth],\n );\n\n const moveToMonth = useCallback(\n (event: SyntheticEvent, month: DateValue) => {\n let newMonth = month;\n\n if (!isOutsideAllowedYears(newMonth)) {\n if (isOutsideAllowedMonths(newMonth)) {\n // If month is navigable we should move to the closest navigable month\n const navigableMonths = monthsForLocale(visibleMonth, locale).filter(\n (n) => !isOutsideAllowedMonths(n),\n );\n newMonth = navigableMonths.reduce((closestMonth, currentMonth) =>\n Math.abs(monthDiff(currentMonth, newMonth)) <\n Math.abs(monthDiff(closestMonth, newMonth))\n ? currentMonth\n : closestMonth,\n );\n }\n setVisibleMonth(event, newMonth);\n }\n },\n [\n isOutsideAllowedYears,\n isOutsideAllowedMonths,\n setVisibleMonth,\n visibleMonth,\n locale,\n ],\n );\n\n const months: DateValue[] = useMemo(\n () => monthsForLocale(visibleMonth, locale),\n [visibleMonth, locale],\n );\n\n const years: DateValue[] = useMemo(\n () =>\n generateYearsBetweenRange(\n Math.min(minDate ? minDate.year : CALENDAR_MIN_YEAR, visibleMonth.year),\n Math.max(maxDate ? maxDate.year : CALENDAR_MAX_YEAR, visibleMonth.year),\n ),\n [minDate, maxDate, visibleMonth.year],\n );\n\n const selectedMonth: DateValue | undefined = months.find((month: DateValue) =>\n isSameMonth(month, visibleMonth),\n );\n const selectedYear: DateValue | undefined = years.find((year: DateValue) =>\n isSameYear(year, visibleMonth),\n );\n\n const canNavigatePrevious = !(minDate && isDayVisible(minDate));\n const canNavigateNext = !(maxDate && isDayVisible(maxDate));\n\n return useMemo(\n () => ({\n moveToNextMonth,\n moveToPreviousMonth,\n moveToMonth,\n visibleMonth,\n months,\n years,\n canNavigateNext,\n canNavigatePrevious,\n selectedMonth,\n selectedYear,\n isOutsideAllowedMonths,\n locale,\n timeZone,\n }),\n [\n months,\n moveToPreviousMonth,\n moveToNextMonth,\n moveToMonth,\n visibleMonth,\n years,\n canNavigateNext,\n canNavigatePrevious,\n selectedMonth,\n selectedYear,\n isOutsideAllowedMonths,\n locale,\n timeZone,\n ],\n );\n}\n\nconst OptionWithTooltip = ({\n value,\n children,\n disabled = false,\n tooltipContent,\n}: OptionWithTooltipProps) => {\n const { activeState, openState } = useListControlContext();\n const open = activeState?.value === value;\n return (\n <ConditionalTooltip\n placement=\"right\"\n open={open && openState}\n disabled={!disabled}\n content={tooltipContent}\n enterDelay={0} // --salt-duration-instant\n leaveDelay={0} // --salt-duration-instant\n >\n <Option value={value} disabled={disabled}>\n {children}\n </Option>\n </ConditionalTooltip>\n );\n};\n\nexport const CalendarNavigation = forwardRef<\n HTMLDivElement,\n CalendarNavigationProps\n>(function CalendarNavigation(props, ref) {\n const {\n className,\n formatMonth: formatMonthProp,\n formatYear: formatYearProp,\n MonthDropdownProps,\n YearDropdownProps,\n hideYearDropdown,\n step = 1,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar-navigation\",\n css: calendarNavigationCss,\n window: targetWindow,\n });\n\n const { NextIcon, PreviousIcon } = useIcon();\n\n const {\n moveToPreviousMonth,\n moveToNextMonth,\n moveToMonth,\n months,\n years,\n canNavigateNext,\n canNavigatePrevious,\n selectedMonth,\n selectedYear,\n isOutsideAllowedMonths,\n locale,\n } = useCalendarNavigation();\n\n const handleNavigatePrevious: MouseEventHandler<HTMLButtonElement> =\n useCallback(\n (event) => {\n moveToPreviousMonth(event, step);\n },\n [moveToPreviousMonth, step],\n );\n\n const handleNavigateNext: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n moveToNextMonth(event, step);\n },\n [moveToNextMonth, step],\n );\n\n const handleMonthSelect = useCallback(\n (event: SyntheticEvent, month: DateValue[]) => {\n moveToMonth(event, month[0]);\n },\n [moveToMonth],\n );\n\n const handleYearSelect = useCallback(\n (event: SyntheticEvent, year: DateValue[]) => {\n moveToMonth(event, year[0]);\n },\n [moveToMonth],\n );\n\n const formatMonth = useCallback(\n (date?: DateValue) => {\n if (date && formatMonthProp) {\n return formatMonthProp(date);\n }\n return !date\n ? \"\"\n : formatDate(date, locale, {\n month: hideYearDropdown ? \"long\" : \"short\",\n day: undefined,\n year: undefined,\n });\n },\n [formatMonthProp],\n );\n\n const formatYear = useCallback(\n (date?: DateValue) => {\n if (date && formatYearProp) {\n return formatYearProp(date);\n }\n return !date ? \"\" : `${date.year}`;\n },\n [formatYearProp],\n );\n\n return (\n <div\n className={clsx(\n withBaseName(),\n { [withBaseName(\"hideYearDropdown\")]: hideYearDropdown },\n className,\n )}\n ref={ref}\n {...rest}\n >\n <ConditionalTooltip\n placement=\"top\"\n disabled={canNavigatePrevious}\n content=\"Past dates are out of range\"\n enterDelay={0} // --salt-duration-instant\n leaveDelay={0} // --salt-duration-instant\n >\n <Button\n disabled={!canNavigatePrevious}\n appearance=\"transparent\"\n sentiment=\"neutral\"\n onClick={handleNavigatePrevious}\n focusableWhenDisabled={true}\n >\n <PreviousIcon aria-label=\"Previous Month\" />\n </Button>\n </ConditionalTooltip>\n <div className={clsx({ [withBaseName(\"dropdowns\")]: !hideYearDropdown })}>\n <Dropdown\n aria-label=\"Month Dropdown\"\n selected={selectedMonth ? [selectedMonth] : []}\n value={formatMonth(selectedMonth)}\n onSelectionChange={handleMonthSelect}\n {...MonthDropdownProps}\n >\n {months.map((month) => (\n <OptionWithTooltip\n key={formatMonth(month)}\n value={month}\n disabled={isOutsideAllowedMonths(month)}\n tooltipContent=\"This month is out of range\"\n >\n {formatMonth(month)}\n </OptionWithTooltip>\n ))}\n </Dropdown>\n {!hideYearDropdown && (\n <Dropdown\n aria-label=\"Year Dropdown\"\n selected={selectedYear ? [selectedYear] : []}\n value={formatYear(selectedYear)}\n onSelectionChange={handleYearSelect}\n {...YearDropdownProps}\n >\n {years.map((year) => (\n <OptionWithTooltip key={formatYear(year)} value={year}>\n {formatYear(year)}\n </OptionWithTooltip>\n ))}\n </Dropdown>\n )}\n </div>\n <ConditionalTooltip\n placement=\"top\"\n disabled={canNavigateNext}\n content=\"Future dates are out of range\"\n enterDelay={0} // --salt-duration-instant\n leaveDelay={0} // --salt-duration-instant\n >\n <Button\n disabled={!canNavigateNext}\n appearance=\"transparent\"\n sentiment=\"neutral\"\n onClick={handleNavigateNext}\n focusableWhenDisabled={true}\n >\n <NextIcon aria-label=\"Next Month\" />\n </Button>\n </ConditionalTooltip>\n </div>\n );\n});\n"],"names":["makePrefixer","jsx","Tooltip","CalendarDate","useCalendarContext","useCallback","monthsForLocale","monthDiff","useMemo","CALENDAR_MIN_YEAR","CALENDAR_MAX_YEAR","isSameMonth","isSameYear","useListControlContext","Option","forwardRef","CalendarNavigation","useWindow","useComponentCssInjection","calendarNavigationCss","useIcon","formatDate","jsxs","clsx","Button","Dropdown"],"mappings":"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"}
1
+ {"version":3,"file":"CalendarNavigation.js","sources":["../src/calendar/CalendarNavigation.tsx"],"sourcesContent":["import {\n Button,\n type ButtonProps,\n Dropdown,\n type DropdownProps,\n Option,\n type OptionProps,\n Tooltip,\n type TooltipProps,\n makePrefixer,\n useIcon,\n useListControlContext,\n} from \"@salt-ds/core\";\nimport type {\n DateFrameworkType,\n SaltDateAdapter,\n} from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithRef,\n type MouseEventHandler,\n type SyntheticEvent,\n forwardRef,\n useCallback,\n useMemo,\n} from \"react\";\nimport { useLocalization } from \"../localization-provider\";\nimport calendarNavigationCss from \"./CalendarNavigation.css\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\nimport { generateMonthsForYear, monthDiff } from \"./internal/utils\";\n\n/**\n * Props for the CalendarNavigation component.\n */\nexport interface CalendarNavigationProps<TDate extends DateFrameworkType>\n extends ComponentPropsWithRef<\"div\"> {\n /**\n * Props for the month dropdown component.\n */\n MonthDropdownProps?: DropdownProps<TDate>;\n\n /**\n * Props for the year dropdown component.\n */\n YearDropdownProps?: DropdownProps<TDate>;\n\n /**\n * Callback fired when a month is selected.\n * @param event - The change event.\n */\n onMonthSelect?: DropdownProps<TDate>[\"onChange\"];\n\n /**\n * Callback fired when a year is selected.\n * @param event - The change event.\n */\n onYearSelect?: DropdownProps<TDate>[\"onChange\"];\n\n /**\n * Callback fired when navigating to the next month.\n * @param event - The click event.\n */\n onNavigateNext?: ButtonProps[\"onClick\"];\n\n /**\n * Callback fired when navigating to the previous month.\n * @param event - The click event.\n */\n onNavigatePrevious?: ButtonProps[\"onClick\"];\n\n /**\n * If `true`, hides the year dropdown.\n */\n hideYearDropdown?: boolean;\n\n /**\n * The step value for navigation. Defaults to 1.\n */\n step?: number;\n /**\n * Format the month dropdown values\n * @param date\n */\n formatMonth?: string;\n /**\n * Format the year dropdown values\n * @param date\n */\n formatYear?: string;\n}\n\ninterface OptionWithTooltipProps<TDate> extends OptionProps {\n value: TDate;\n tooltipContent?: string;\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarNavigation\");\n\nconst ConditionalTooltip: React.FC<TooltipProps> = ({\n children,\n disabled = true,\n ...rest\n}) => {\n if (disabled) {\n return <>{children}</>;\n }\n return <Tooltip {...rest}>{children}</Tooltip>;\n};\n\nfunction generateYearsBetweenRange<TDate extends DateFrameworkType>(\n dateAdapter: SaltDateAdapter<TDate>,\n minYear: number,\n maxYear: number,\n): TDate[] {\n const years: TDate[] = [];\n for (let year = minYear; year <= maxYear; year++) {\n let startOfYear = dateAdapter.today();\n startOfYear = dateAdapter.set(startOfYear, { day: 1, month: 1, year });\n years.push(startOfYear);\n }\n return years;\n}\n\nfunction useCalendarNavigation<TDate extends DateFrameworkType>() {\n const {\n state: { visibleMonth, locale, minDate, maxDate },\n helpers: {\n setVisibleMonth,\n isDayVisible,\n isOutsideAllowedYears,\n isOutsideAllowedMonths,\n },\n } = useCalendarContext<TDate>();\n\n const { dateAdapter } = useLocalization<TDate>();\n\n const moveToNextMonth = useCallback(\n (event: SyntheticEvent, step = 1) => {\n setVisibleMonth(event, dateAdapter.add(visibleMonth, { months: step }));\n },\n [dateAdapter, setVisibleMonth, visibleMonth],\n );\n\n const moveToPreviousMonth = useCallback(\n (event: SyntheticEvent, step = 1) => {\n setVisibleMonth(\n event,\n dateAdapter.subtract(visibleMonth, { months: step }),\n );\n },\n [dateAdapter, setVisibleMonth, visibleMonth],\n );\n\n const moveToMonth = useCallback(\n (event: SyntheticEvent, month: TDate) => {\n let newMonth = month;\n\n if (isOutsideAllowedMonths(newMonth)) {\n // If month is navigable we should move to the closest navigable month\n const navigableMonths = generateMonthsForYear(\n dateAdapter,\n visibleMonth,\n ).filter((n) => !isOutsideAllowedMonths(n));\n newMonth = navigableMonths.reduce((closestMonth, currentMonth) =>\n Math.abs(monthDiff(dateAdapter, currentMonth, newMonth)) <\n Math.abs(monthDiff(dateAdapter, closestMonth, newMonth))\n ? currentMonth\n : closestMonth,\n );\n }\n setVisibleMonth(event, newMonth);\n },\n [\n dateAdapter,\n isOutsideAllowedYears,\n isOutsideAllowedMonths,\n setVisibleMonth,\n visibleMonth,\n ],\n );\n\n const months: TDate[] = useMemo(\n () => generateMonthsForYear<TDate>(dateAdapter, visibleMonth),\n [visibleMonth],\n );\n\n const years: TDate[] = useMemo(\n () =>\n generateYearsBetweenRange<TDate>(\n dateAdapter,\n Math.min(\n dateAdapter.getYear(minDate),\n dateAdapter.getYear(visibleMonth),\n ),\n Math.max(\n dateAdapter.getYear(maxDate),\n dateAdapter.getYear(visibleMonth),\n ),\n ),\n [dateAdapter, minDate, maxDate, visibleMonth],\n );\n\n const selectedMonth: TDate | undefined = months.find((month: TDate) =>\n dateAdapter.isSame(month, visibleMonth, \"month\"),\n );\n const selectedYear: TDate | undefined = years.find((year: TDate) =>\n dateAdapter.isSame(year, visibleMonth, \"year\"),\n );\n\n const canNavigatePrevious = !isDayVisible(minDate);\n const canNavigateNext = !isDayVisible(maxDate);\n\n return useMemo(\n () => ({\n moveToNextMonth,\n moveToPreviousMonth,\n moveToMonth,\n visibleMonth,\n locale,\n months,\n years,\n canNavigateNext,\n canNavigatePrevious,\n selectedMonth,\n selectedYear,\n isOutsideAllowedMonths,\n }),\n [\n locale,\n months,\n moveToPreviousMonth,\n moveToNextMonth,\n moveToMonth,\n visibleMonth,\n years,\n canNavigateNext,\n canNavigatePrevious,\n selectedMonth,\n selectedYear,\n isOutsideAllowedMonths,\n ],\n );\n}\n\nfunction OptionWithTooltip<TDate extends DateFrameworkType>({\n value,\n children,\n disabled = false,\n tooltipContent,\n}: OptionWithTooltipProps<TDate>) {\n const { activeState, openState } = useListControlContext();\n const open = activeState?.value === value;\n return (\n <ConditionalTooltip\n placement=\"right\"\n open={open && openState}\n disabled={!disabled}\n content={tooltipContent}\n enterDelay={0} // --salt-duration-instant\n leaveDelay={0} // --salt-duration-instant\n >\n <Option value={value} disabled={disabled}>\n {children}\n </Option>\n </ConditionalTooltip>\n );\n}\n\nexport const CalendarNavigation = forwardRef<\n HTMLDivElement,\n CalendarNavigationProps<any>\n>(\n <TDate extends DateFrameworkType>(\n props: CalendarNavigationProps<TDate>,\n ref: React.Ref<HTMLDivElement>,\n ) => {\n const {\n className,\n formatMonth: formatMonthProp,\n formatYear: formatYearProp,\n MonthDropdownProps,\n YearDropdownProps,\n hideYearDropdown,\n step = 1,\n ...rest\n } = props;\n\n const { dateAdapter } = useLocalization<TDate>();\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar-navigation\",\n css: calendarNavigationCss,\n window: targetWindow,\n });\n\n const { NextIcon, PreviousIcon } = useIcon();\n\n const {\n locale,\n moveToPreviousMonth,\n moveToNextMonth,\n moveToMonth,\n months,\n years,\n canNavigateNext,\n canNavigatePrevious,\n selectedMonth,\n selectedYear,\n isOutsideAllowedMonths,\n visibleMonth,\n } = useCalendarNavigation<TDate>();\n\n const handleNavigatePrevious: MouseEventHandler<HTMLButtonElement> =\n useCallback(\n (event) => {\n moveToPreviousMonth(event, step);\n },\n [moveToPreviousMonth, step],\n );\n\n const handleNavigateNext: MouseEventHandler<HTMLButtonElement> =\n useCallback(\n (event) => {\n moveToNextMonth(event, step);\n },\n [moveToNextMonth, step],\n );\n\n const handleMonthSelect = useCallback(\n (event: SyntheticEvent, month: TDate[]) => {\n moveToMonth(event, month[0]);\n },\n [moveToMonth],\n );\n\n const handleYearSelect = useCallback(\n (event: SyntheticEvent, year: TDate[]) => {\n let newVisibleMonth = dateAdapter.clone(visibleMonth);\n newVisibleMonth = dateAdapter.set(newVisibleMonth, {\n year: dateAdapter.getYear(year[0]),\n });\n moveToMonth(event, newVisibleMonth);\n },\n [moveToMonth, visibleMonth],\n );\n\n const formatMonth = useCallback(\n (date?: TDate) => {\n if (date && formatMonthProp) {\n return dateAdapter.format(date, formatMonthProp, locale);\n }\n return date\n ? dateAdapter.format(date, hideYearDropdown ? \"MMMM\" : \"MMM\")\n : \"\";\n },\n [dateAdapter, formatMonthProp, locale],\n );\n\n const formatYear = useCallback(\n (date?: TDate) => {\n if (date && formatYearProp) {\n return dateAdapter.format(date, formatYearProp);\n }\n return !date ? \"\" : `${dateAdapter.format(date, \"YYYY\")}`;\n },\n [dateAdapter, formatYearProp],\n );\n\n return (\n <div\n className={clsx(\n withBaseName(),\n { [withBaseName(\"hideYearDropdown\")]: hideYearDropdown },\n className,\n )}\n ref={ref}\n {...rest}\n >\n <ConditionalTooltip\n placement=\"top\"\n disabled={canNavigatePrevious}\n content=\"Past dates are out of range\"\n enterDelay={0} // --salt-duration-instant\n leaveDelay={0} // --salt-duration-instant\n >\n <Button\n disabled={!canNavigatePrevious}\n appearance=\"transparent\"\n sentiment=\"neutral\"\n onClick={handleNavigatePrevious}\n focusableWhenDisabled={true}\n >\n <PreviousIcon aria-label=\"Previous Month\" />\n </Button>\n </ConditionalTooltip>\n <div\n className={clsx({ [withBaseName(\"dropdowns\")]: !hideYearDropdown })}\n >\n <Dropdown\n aria-label=\"Month Dropdown\"\n selected={selectedMonth ? [selectedMonth] : []}\n value={formatMonth(selectedMonth)}\n onSelectionChange={handleMonthSelect}\n {...MonthDropdownProps}\n >\n {months.map((month) => (\n <OptionWithTooltip\n key={formatMonth(month)}\n value={month}\n disabled={isOutsideAllowedMonths(month)}\n tooltipContent=\"This month is out of range\"\n >\n {formatMonth(month)}\n </OptionWithTooltip>\n ))}\n </Dropdown>\n {!hideYearDropdown && (\n <Dropdown\n aria-label=\"Year Dropdown\"\n selected={selectedYear ? [selectedYear] : []}\n value={formatYear(selectedYear)}\n onSelectionChange={handleYearSelect}\n {...YearDropdownProps}\n >\n {years.map((year) => (\n <OptionWithTooltip key={formatYear(year)} value={year}>\n {formatYear(year)}\n </OptionWithTooltip>\n ))}\n </Dropdown>\n )}\n </div>\n <ConditionalTooltip\n placement=\"top\"\n disabled={canNavigateNext}\n content=\"Future dates are out of range\"\n enterDelay={0} // --salt-duration-instant\n leaveDelay={0} // --salt-duration-instant\n >\n <Button\n disabled={!canNavigateNext}\n appearance=\"transparent\"\n sentiment=\"neutral\"\n onClick={handleNavigateNext}\n focusableWhenDisabled={true}\n >\n <NextIcon aria-label=\"Next Month\" />\n </Button>\n </ConditionalTooltip>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","jsx","Tooltip","useCalendarContext","useLocalization","useCallback","generateMonthsForYear","monthDiff","useMemo","useListControlContext","Option","forwardRef","useWindow","useComponentCssInjection","calendarNavigationCss","useIcon","jsxs","clsx","Button","Dropdown"],"mappings":"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"}
@@ -7,13 +7,19 @@ var react = require('react');
7
7
  var utils = require('./internal/utils.js');
8
8
  var styles = require('@salt-ds/styles');
9
9
  var window = require('@salt-ds/window');
10
+ var LocalizationProvider = require('../localization-provider/LocalizationProvider.js');
10
11
  var CalendarWeekHeader$1 = require('./CalendarWeekHeader.css.js');
11
- var formatDate = require('./formatDate.js');
12
+ var CalendarContext = require('./internal/CalendarContext.js');
12
13
 
13
14
  const withBaseName = core.makePrefixer("saltCalendarWeekHeader");
14
- const CalendarWeekHeader = react.forwardRef(function CalendarWeekHeader2({ className, locale = formatDate.getCurrentLocale(), ...rest }, ref) {
15
- const weekdaysShort = utils.daysForLocale("narrow", locale);
16
- const weekdaysLong = utils.daysForLocale("long", locale);
15
+ const CalendarWeekHeader = react.forwardRef(function CalendarWeekHeader2(props, ref) {
16
+ const { className, ...rest } = props;
17
+ const { dateAdapter } = LocalizationProvider.useLocalization();
18
+ const {
19
+ state: { locale }
20
+ } = CalendarContext.useCalendarContext();
21
+ const weekdaysShort = utils.daysOfWeek(dateAdapter, "narrow", locale);
22
+ const weekdaysLong = utils.daysOfWeek(dateAdapter, "long", locale);
17
23
  const targetWindow = window.useWindow();
18
24
  styles.useComponentCssInjection({
19
25
  testId: "salt-calendar-week-header",