@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
package/CHANGELOG.md CHANGED
@@ -1,5 +1,172 @@
1
1
  # @salt-ds/lab
2
2
 
3
+ ## 1.0.0-alpha.57
4
+
5
+ ### Patch Changes
6
+
7
+ - f3ae565: Fixed `format` not working on `DatePickerRangeInput`. Closes #4474.
8
+
9
+ ## 1.0.0-alpha.56
10
+
11
+ ### Minor Changes
12
+
13
+ - e7b0406: Added `OverlayHeader` component to lab.
14
+
15
+ ```tsx
16
+ <Overlay {...args}>
17
+ <OverlayTrigger>
18
+ <Button>Show Overlay</Button>
19
+ </OverlayTrigger>
20
+ <OverlayPanel aria-labelledby={id}>
21
+ <OverlayHeader
22
+ id={id}
23
+ header="Title"
24
+ actions={
25
+ <Button
26
+ aria-label="Close overlay"
27
+ appearance="transparent"
28
+ sentiment="neutral"
29
+ >
30
+ <CloseIcon aria-hidden />
31
+ </Button>
32
+ }
33
+ />
34
+ <OverlayPanelContent>Content of Overlay</OverlayPanelContent>
35
+ </OverlayPanel>
36
+ </Overlay>
37
+ ```
38
+
39
+ ### Patch Changes
40
+
41
+ - b272497: DatePicker, DateInput, Calendar Lab updates
42
+
43
+ We are excited to introduce a new Salt package, `@salt-ds/date-adapters`, currently in pre-release/lab status to gather your valuable feedback.
44
+
45
+ This package includes supported adapters for Salt's date-based controls:
46
+
47
+ - `AdapterDateFns` for [date-fns](https://date-fns.org/)
48
+ - `AdapterDayjs` for [dayjs](https://day.js.org/)
49
+ - `AdapterLuxon` for [luxon](https://moment.github.io/luxon/)
50
+ - `AdapterMoment` (legacy) for [moment](https://momentjs.com/)
51
+
52
+ > **Note:** As `moment` is no longer actively maintained by its creators, `AdapterMoment` is published in a deprecated form to assist in transitioning to a newer date framework.
53
+
54
+ Salt adapters are integrated with a new `LocalizationProvider`, enabling a date-based API accessible through `useLocalization`. Typically, you only need to add one `LocalizationProvider` per application, although they can be nested if necessary.
55
+
56
+ `@salt-ds/adapters` uses peer dependencies for the supported date libraries. It is the responsibility of the application author to include the required dependencies in their build. Additionally, the application author is responsible for configuring the date libraries, including any necessary extensions or loading dependencies for supported locales.
57
+
58
+ **Example Usage**
59
+
60
+ An app that renders a Salt date-based control may look like this:
61
+
62
+ ```jsx
63
+ import { AdapterDateFns } from "@salt-ds/date-adapters";
64
+ import {
65
+ Calendar,
66
+ CalendarNavigation,
67
+ CalendarWeekHeader,
68
+ CalendarGrid,
69
+ LocalizationProvider,
70
+ } from "@salt-ds/lab";
71
+
72
+ const MyApp = () => (
73
+ <SaltProvider density="high" mode="light">
74
+ <LocalizationProvider DateAdapter={AdapterDateFns}>
75
+ <Calendar selectionVariant="single">
76
+ <CalendarNavigation />
77
+ <CalendarWeekHeader />
78
+ <CalendarGrid />
79
+ </Calendar>
80
+ </LocalizationProvider>
81
+ </SaltProvider>
82
+ );
83
+ ```
84
+
85
+ A `DateInput` within an app that uses `LocalizationProvider` might be implemented as follows:
86
+
87
+ ```jsx
88
+ const MyDateInput = () => {
89
+ const { dateAdapter } = useLocalization();
90
+
91
+ function handleDateChange<TDate extends DateFrameworkType>(
92
+ event: SyntheticEvent,
93
+ date: TDate | null,
94
+ details: DateInputSingleDetails
95
+ ) {
96
+ console.log(
97
+ `Selected date: ${dateAdapter.isValid(date) ? dateAdapter.format(date, "DD MMM YYYY") : date}`
98
+ );
99
+
100
+ const { value, errors } = details;
101
+ if (errors?.length && value) {
102
+ console.log(
103
+ `Error(s): ${errors
104
+ .map(({ type, message }) => `type=${type} message=${message}`)
105
+ .join(", ")}`
106
+ );
107
+ console.log(`Original Value: ${value}`);
108
+ }
109
+ }
110
+
111
+ return <DateInputSingle onDateChange={handleDateChange} />;
112
+ };
113
+ ```
114
+
115
+ A `DatePicker` within an app that uses `LocalizationProvider` might be implemented as follows:
116
+
117
+ ```jsx
118
+ const MyDatePicker = () => {
119
+ const { dateAdapter } = useLocalization();
120
+ const handleSelectionChange = useCallback(
121
+ (
122
+ event: SyntheticEvent,
123
+ date: SingleDateSelection<DateFrameworkType> | null,
124
+ details: DateInputSingleDetails | undefined,
125
+ ) => {
126
+ const { value, errors } = details || {};
127
+ console.log(
128
+ `Selected date: ${dateAdapter.isValid(date) ? dateAdapter.format(date, "DD MMM YYYY") : date}`
129
+ );
130
+ if (errors?.length && value) {
131
+ console.log(
132
+ `Error(s): ${errors
133
+ .map(({ type, message }) => `type=${type} message=${message}`)
134
+ .join(", ")}`
135
+ );
136
+ console.log(`Original Value: ${value}`);
137
+ }
138
+ },
139
+ );
140
+
141
+ return (
142
+ <DatePicker
143
+ selectionVariant="single"
144
+ onSelectionChange={handleSelectionChange}
145
+ >
146
+ <DatePickerTrigger>
147
+ <DatePickerSingleInput />
148
+ </DatePickerTrigger>
149
+ <DatePickerOverlay>
150
+ <DatePickerSinglePanel />
151
+ </DatePickerOverlay>
152
+ </DatePicker>
153
+ );
154
+ };
155
+ ```
156
+
157
+ In addition to configuring adapters, `LocalizationProvider` offers props to define locale and fallback min/max dates for all date-based controls.
158
+
159
+ Additional date adapters can be added , as long as they conform to the `SaltDateAdapter` interface.
160
+
161
+ For more detailed examples, please refer to the documentation for `DateInput`, `Calendar`, and `DatePicker`.
162
+
163
+ - 33c8da5: Fix system status icons in content from using the component styles override
164
+ - Updated dependencies [5cf214c]
165
+ - Updated dependencies [bae6882]
166
+ - Updated dependencies [b272497]
167
+ - @salt-ds/core@1.37.3
168
+ - @salt-ds/date-adapters@0.1.0
169
+
3
170
  ## 1.0.0-alpha.55
4
171
 
5
172
  ### Minor Changes
package/css/salt-lab.css CHANGED
@@ -199,17 +199,17 @@
199
199
  padding: var(--salt-spacing-100);
200
200
  }
201
201
 
202
- /* src/calendar/CalendarDateGrid.css */
203
- .saltCalendarDateGrid-grid {
202
+ /* src/calendar/CalendarGrid.css */
203
+ .saltCalendarGrid-grid {
204
204
  display: grid;
205
205
  grid-auto-flow: column;
206
206
  }
207
- .saltCalendarDateGrid-grid > * {
207
+ .saltCalendarGrid-grid > * {
208
208
  position: absolute;
209
209
  left: 0;
210
210
  width: 100%;
211
211
  }
212
- .saltCalendarDateGrid-grid > :nth-child(2) {
212
+ .saltCalendarGrid-grid > :nth-child(2) {
213
213
  position: relative;
214
214
  }
215
215
 
@@ -1021,6 +1021,12 @@
1021
1021
  cursor: var(--salt-editable-cursor-disabled);
1022
1022
  color: var(--saltDateInput-color-disabled, var(--salt-content-primary-foreground-disabled));
1023
1023
  }
1024
+ .saltInput-startAdornmentContainer {
1025
+ align-items: center;
1026
+ display: inline-flex;
1027
+ padding-right: var(--salt-spacing-100);
1028
+ column-gap: var(--salt-spacing-100);
1029
+ }
1024
1030
  .saltDateInput-endAdornmentContainer {
1025
1031
  display: inline-flex;
1026
1032
  padding-left: var(--salt-spacing-100);
@@ -2385,6 +2391,34 @@
2385
2391
  align-items: flex-end;
2386
2392
  }
2387
2393
 
2394
+ /* src/overlay/OverlayHeader.css */
2395
+ .saltOverlayHeader {
2396
+ padding: var(--salt-spacing-100);
2397
+ width: 100%;
2398
+ align-items: center;
2399
+ display: flex;
2400
+ flex-direction: row;
2401
+ justify-content: stretch;
2402
+ gap: var(--salt-spacing-100);
2403
+ box-sizing: border-box;
2404
+ }
2405
+ .saltOverlayHeader-container {
2406
+ flex-grow: 1;
2407
+ margin: 0;
2408
+ display: flex;
2409
+ flex-direction: column;
2410
+ gap: var(--salt-spacing-50);
2411
+ }
2412
+ .saltOverlayHeader-header > .saltText {
2413
+ margin: 0;
2414
+ }
2415
+ .saltOverlayHeader-actionsContainer {
2416
+ align-self: flex-start;
2417
+ }
2418
+ .saltOverlayHeader ~ .saltOverlayPanelContent {
2419
+ padding-top: 0;
2420
+ }
2421
+
2388
2422
  /* src/query-input/QueryInput.css */
2389
2423
  .saltQueryInputBody {
2390
2424
  display: flex;
@@ -2931,7 +2965,6 @@
2931
2965
 
2932
2966
  /* src/system-status/SystemStatus.css */
2933
2967
  .saltSystemStatus {
2934
- --saltIcon-color: var(--salt-content-bold-foreground);
2935
2968
  background: var(--saltSystemStatus-background, var(--systemStatus-background));
2936
2969
  border-color: var(--saltSystemStatus-borderColor, var(--systemStatus-borderColor));
2937
2970
  border-width: var(--saltSystemStatus-borderWidth, var(--salt-size-border));
@@ -2949,6 +2982,7 @@
2949
2982
  }
2950
2983
  .saltSystemStatus-icon.saltIcon {
2951
2984
  min-height: var(--salt-size-base);
2985
+ --saltIcon-color: var(--salt-content-bold-foreground);
2952
2986
  }
2953
2987
  .saltSystemStatus-info {
2954
2988
  --systemStatus-borderColor: var(--salt-status-info-bold-background);
@@ -3335,6 +3369,9 @@
3335
3369
  .saltTabListNext-activeColorTertiary {
3336
3370
  --saltTabListNext-activeColor: var(--salt-container-tertiary-background);
3337
3371
  }
3372
+ .saltTabListNext-overflowWarning {
3373
+ display: none;
3374
+ }
3338
3375
 
3339
3376
  /* src/tabs-next/TabNext.css */
3340
3377
  .saltTabNext {
@@ -4321,7 +4358,7 @@
4321
4358
  }
4322
4359
 
4323
4360
  /* src/calendar/internal/CalendarMonth.css */
4324
- .saltCalendarMonth-dateGrid {
4361
+ .saltCalendarMonth-grid {
4325
4362
  display: grid;
4326
4363
  gap: var(--salt-size-border);
4327
4364
  grid-template-columns: repeat(7, var(--salt-size-base));
@@ -4532,4 +4569,4 @@
4532
4569
  margin: calc(var(--salt-size-unit) / 2) 0;
4533
4570
  }
4534
4571
 
4535
- /* src/af7c52bf-6cbd-4d27-940f-b761495ee395.css */
4572
+ /* src/ed092e1f-b9df-46b0-8077-975db17781fb.css */
@@ -8,13 +8,14 @@ var CalendarContext = require('./internal/CalendarContext.js');
8
8
  var useCalendar = require('./useCalendar.js');
9
9
  var styles = require('@salt-ds/styles');
10
10
  var window = require('@salt-ds/window');
11
- var date = require('@internationalized/date');
11
+ var LocalizationProvider = require('../localization-provider/LocalizationProvider.js');
12
12
  var Calendar$1 = require('./Calendar.css.js');
13
13
 
14
14
  const withBaseName = core.makePrefixer("saltCalendar");
15
15
  const Calendar = react.forwardRef(
16
- function Calendar2(props, ref) {
16
+ (props, ref) => {
17
17
  const targetWindow = window.useWindow();
18
+ const { dateAdapter } = LocalizationProvider.useLocalization();
18
19
  styles.useComponentCssInjection({
19
20
  testId: "salt-calendar",
20
21
  css: Calendar$1,
@@ -26,15 +27,14 @@ const Calendar = react.forwardRef(
26
27
  selectedDate,
27
28
  defaultSelectedDate,
28
29
  visibleMonth: visibleMonthProp,
29
- timeZone,
30
- locale,
31
30
  defaultVisibleMonth,
32
- onSelectedDateChange,
31
+ onSelectionChange,
33
32
  onVisibleMonthChange,
34
33
  hideOutOfRangeDates,
35
34
  isDayUnselectable,
36
35
  isDayHighlighted,
37
36
  isDayDisabled,
37
+ locale,
38
38
  minDate,
39
39
  maxDate,
40
40
  selectionVariant,
@@ -54,14 +54,13 @@ const Calendar = react.forwardRef(
54
54
  selectedDate,
55
55
  defaultSelectedDate,
56
56
  visibleMonth: visibleMonthProp,
57
- timeZone,
58
- locale,
59
57
  defaultVisibleMonth,
60
- onSelectedDateChange,
58
+ onSelectionChange,
61
59
  onVisibleMonthChange,
62
60
  isDayUnselectable,
63
61
  isDayHighlighted,
64
62
  isDayDisabled,
63
+ locale,
65
64
  minDate,
66
65
  maxDate,
67
66
  selectionVariant,
@@ -72,10 +71,11 @@ const Calendar = react.forwardRef(
72
71
  endDateOffset
73
72
  };
74
73
  const { state, helpers } = useCalendar.useCalendar(useCalendarProps);
75
- const calendarLabel = new date.DateFormatter(state.locale, {
76
- month: "long",
77
- year: "numeric"
78
- }).format(state.visibleMonth.toDate(state.timeZone));
74
+ const calendarLabel = dateAdapter.format(
75
+ state.visibleMonth,
76
+ "MMMM YYYY",
77
+ locale
78
+ );
79
79
  return /* @__PURE__ */ jsxRuntime.jsx(
80
80
  CalendarContext.CalendarContext.Provider,
81
81
  {
@@ -1 +1 @@
1
- {"version":3,"file":"Calendar.js","sources":["../src/calendar/Calendar.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type ReactNode,\n forwardRef,\n} from \"react\";\nimport { CalendarContext } from \"./internal/CalendarContext\";\nimport {\n type UseCalendarMultiSelectProps,\n type UseCalendarOffsetProps,\n type UseCalendarRangeProps,\n type UseCalendarSingleProps,\n useCalendar,\n} from \"./useCalendar\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport { DateFormatter } from \"@internationalized/date\";\nimport calendarCss from \"./Calendar.css\";\n\n/**\n * Base props for the Calendar component.\n */\nexport interface CalendarBaseProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * The content to be rendered inside the Calendar.\n */\n children: ReactNode;\n /**\n * If `true`, hides dates that are out of the selectable range.\n */\n hideOutOfRangeDates?: boolean;\n}\n\n/**\n * Props for the Calendar component with single date selection.\n */\nexport interface CalendarSingleProps\n extends CalendarBaseProps,\n UseCalendarSingleProps {\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: \"single\";\n}\n\n/**\n * Props for the Calendar component with date range selection.\n */\nexport interface CalendarRangeProps\n extends CalendarBaseProps,\n UseCalendarRangeProps {\n /**\n * The selection variant, set to \"range\".\n */\n selectionVariant: \"range\";\n}\n\n/**\n * Props for the Calendar component with multi-select date selection.\n */\nexport interface CalendarMultiSelectProps\n extends CalendarBaseProps,\n UseCalendarMultiSelectProps {\n /**\n * The selection variant, set to \"multiselect\".\n */\n selectionVariant: \"multiselect\";\n}\n\n/**\n * Props for the Calendar component with offset date selection.\n */\nexport interface CalendarOffsetProps\n extends CalendarBaseProps,\n UseCalendarOffsetProps {\n /**\n * The selection variant, set to \"offset\".\n */\n selectionVariant: \"offset\";\n}\n\n/**\n * Type representing the props for the Calendar component with various selection variants.\n */\nexport type CalendarProps =\n | CalendarSingleProps\n | CalendarRangeProps\n | CalendarMultiSelectProps\n | CalendarOffsetProps;\n\nconst withBaseName = makePrefixer(\"saltCalendar\");\n\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps>(\n function Calendar(props, ref) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar\",\n css: calendarCss,\n window: targetWindow,\n });\n const {\n children,\n className,\n selectedDate,\n defaultSelectedDate,\n visibleMonth: visibleMonthProp,\n timeZone,\n locale,\n defaultVisibleMonth,\n onSelectedDateChange,\n onVisibleMonthChange,\n hideOutOfRangeDates,\n isDayUnselectable,\n isDayHighlighted,\n isDayDisabled,\n minDate,\n maxDate,\n selectionVariant,\n onHoveredDateChange,\n hoveredDate,\n ...propsRest\n } = props;\n let startDateOffset: CalendarOffsetProps[\"startDateOffset\"];\n let endDateOffset: CalendarOffsetProps[\"startDateOffset\"];\n let rest: Partial<typeof props>;\n if (selectionVariant === \"offset\") {\n ({ startDateOffset, endDateOffset, ...rest } =\n propsRest as CalendarOffsetProps);\n } else {\n rest = propsRest;\n }\n // biome-ignore lint/suspicious/noExplicitAny: type guard\n const useCalendarProps: any = {\n selectedDate,\n defaultSelectedDate,\n visibleMonth: visibleMonthProp,\n timeZone,\n locale,\n defaultVisibleMonth,\n onSelectedDateChange,\n onVisibleMonthChange,\n isDayUnselectable,\n isDayHighlighted,\n isDayDisabled,\n minDate,\n maxDate,\n selectionVariant,\n onHoveredDateChange,\n hideOutOfRangeDates,\n hoveredDate,\n startDateOffset,\n endDateOffset,\n };\n const { state, helpers } = useCalendar(useCalendarProps);\n const calendarLabel = new DateFormatter(state.locale, {\n month: \"long\",\n year: \"numeric\",\n }).format(state.visibleMonth.toDate(state.timeZone));\n\n return (\n <CalendarContext.Provider\n value={{\n state,\n helpers,\n }}\n >\n <div\n className={clsx(withBaseName(), className)}\n role=\"application\"\n aria-label={calendarLabel}\n ref={ref}\n {...rest}\n >\n {children}\n </div>\n </CalendarContext.Provider>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","Calendar","useWindow","useComponentCssInjection","calendarCss","useCalendar","DateFormatter","jsx","CalendarContext","clsx"],"mappings":";;;;;;;;;;;;;AA6FA,MAAM,YAAA,GAAeA,kBAAa,cAAc,CAAA;AAEzC,MAAM,QAAW,GAAAC,gBAAA;AAAA,EACtB,SAASC,SAAS,CAAA,KAAA,EAAO,GAAK,EAAA;AAC5B,IAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,eAAA;AAAA,MACR,GAAK,EAAAC,UAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AACD,IAAM,MAAA;AAAA,MACJ,QAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA,mBAAA;AAAA,MACA,YAAc,EAAA,gBAAA;AAAA,MACd,QAAA;AAAA,MACA,MAAA;AAAA,MACA,mBAAA;AAAA,MACA,oBAAA;AAAA,MACA,oBAAA;AAAA,MACA,mBAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,aAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,WAAA;AAAA,MACA,GAAG;AAAA,KACD,GAAA,KAAA;AACJ,IAAI,IAAA,eAAA;AACJ,IAAI,IAAA,aAAA;AACJ,IAAI,IAAA,IAAA;AACJ,IAAA,IAAI,qBAAqB,QAAU,EAAA;AACjC,MAAA,CAAC,EAAE,eAAA,EAAiB,aAAe,EAAA,GAAG,MACpC,GAAA,SAAA;AAAA,KACG,MAAA;AACL,MAAO,IAAA,GAAA,SAAA;AAAA;AAGT,IAAA,MAAM,gBAAwB,GAAA;AAAA,MAC5B,YAAA;AAAA,MACA,mBAAA;AAAA,MACA,YAAc,EAAA,gBAAA;AAAA,MACd,QAAA;AAAA,MACA,MAAA;AAAA,MACA,mBAAA;AAAA,MACA,oBAAA;AAAA,MACA,oBAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,aAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA,WAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAM,EAAE,KAAA,EAAO,OAAQ,EAAA,GAAIC,wBAAY,gBAAgB,CAAA;AACvD,IAAA,MAAM,aAAgB,GAAA,IAAIC,kBAAc,CAAA,KAAA,CAAM,MAAQ,EAAA;AAAA,MACpD,KAAO,EAAA,MAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACP,EAAE,MAAO,CAAA,KAAA,CAAM,aAAa,MAAO,CAAA,KAAA,CAAM,QAAQ,CAAC,CAAA;AAEnD,IACE,uBAAAC,cAAA;AAAA,MAACC,+BAAgB,CAAA,QAAA;AAAA,MAAhB;AAAA,QACC,KAAO,EAAA;AAAA,UACL,KAAA;AAAA,UACA;AAAA,SACF;AAAA,QAEA,QAAA,kBAAAD,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAW,EAAAE,SAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,YACzC,IAAK,EAAA,aAAA;AAAA,YACL,YAAY,EAAA,aAAA;AAAA,YACZ,GAAA;AAAA,YACC,GAAG,IAAA;AAAA,YAEH;AAAA;AAAA;AACH;AAAA,KACF;AAAA;AAGN;;;;"}
1
+ {"version":3,"file":"Calendar.js","sources":["../src/calendar/Calendar.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type ReactNode,\n forwardRef,\n} from \"react\";\nimport { CalendarContext } from \"./internal/CalendarContext\";\nimport {\n type UseCalendarMultiSelectProps,\n type UseCalendarOffsetProps,\n type UseCalendarRangeProps,\n type UseCalendarSingleProps,\n useCalendar,\n} from \"./useCalendar\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport type { DateFrameworkType } from \"@salt-ds/date-adapters\";\nimport { useLocalization } from \"../localization-provider\";\nimport calendarCss from \"./Calendar.css\";\n\n/**\n * Base props for the Calendar component.\n */\nexport interface CalendarBaseProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * The content to be rendered inside the Calendar.\n */\n children: ReactNode;\n /**\n * If `true`, hides dates that are out of the selectable range.\n */\n hideOutOfRangeDates?: boolean;\n /**\n * Locale for date formatting\n */\n locale?: any;\n}\n\n/**\n * Props for the Calendar component with single date selection.\n */\nexport interface CalendarSingleProps<TDate extends DateFrameworkType>\n extends CalendarBaseProps,\n UseCalendarSingleProps<TDate> {\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: \"single\";\n}\n\n/**\n * Props for the Calendar component with date range selection.\n */\nexport interface CalendarRangeProps<TDate extends DateFrameworkType>\n extends CalendarBaseProps,\n UseCalendarRangeProps<TDate> {\n /**\n * The selection variant, set to \"range\".\n */\n selectionVariant: \"range\";\n}\n\n/**\n * Props for the Calendar component with multi-select date selection.\n */\nexport interface CalendarMultiSelectProps<TDate extends DateFrameworkType>\n extends CalendarBaseProps,\n UseCalendarMultiSelectProps<TDate> {\n /**\n * The selection variant, set to \"multiselect\".\n */\n selectionVariant: \"multiselect\";\n}\n\n/**\n * Props for the Calendar component with offset date selection.\n */\nexport interface CalendarOffsetProps<TDate extends DateFrameworkType>\n extends CalendarBaseProps,\n UseCalendarOffsetProps<TDate> {\n /**\n * The selection variant, set to \"offset\".\n */\n selectionVariant: \"offset\";\n}\n\n/**\n * Type representing the props for the Calendar component with various selection variants.\n */\nexport type CalendarProps<TDate extends DateFrameworkType> =\n | CalendarSingleProps<TDate>\n | CalendarRangeProps<TDate>\n | CalendarMultiSelectProps<TDate>\n | CalendarOffsetProps<TDate>;\n\nconst withBaseName = makePrefixer(\"saltCalendar\");\n\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps<any>>(\n <TDate extends DateFrameworkType>(\n props: CalendarProps<TDate>,\n ref: React.Ref<HTMLDivElement>,\n ) => {\n const targetWindow = useWindow();\n const { dateAdapter } = useLocalization<TDate>();\n useComponentCssInjection({\n testId: \"salt-calendar\",\n css: calendarCss,\n window: targetWindow,\n });\n const {\n children,\n className,\n selectedDate,\n defaultSelectedDate,\n visibleMonth: visibleMonthProp,\n defaultVisibleMonth,\n onSelectionChange,\n onVisibleMonthChange,\n hideOutOfRangeDates,\n isDayUnselectable,\n isDayHighlighted,\n isDayDisabled,\n locale,\n minDate,\n maxDate,\n selectionVariant,\n onHoveredDateChange,\n hoveredDate,\n ...propsRest\n } = props;\n let startDateOffset: CalendarOffsetProps<TDate>[\"startDateOffset\"];\n let endDateOffset: CalendarOffsetProps<TDate>[\"startDateOffset\"];\n let rest: Partial<typeof props>;\n if (selectionVariant === \"offset\") {\n ({ startDateOffset, endDateOffset, ...rest } =\n propsRest as CalendarOffsetProps<TDate>);\n } else {\n rest = propsRest;\n }\n // biome-ignore lint/suspicious/noExplicitAny: type guard\n const useCalendarProps: any = {\n selectedDate,\n defaultSelectedDate,\n visibleMonth: visibleMonthProp,\n defaultVisibleMonth,\n onSelectionChange,\n onVisibleMonthChange,\n isDayUnselectable,\n isDayHighlighted,\n isDayDisabled,\n locale,\n minDate,\n maxDate,\n selectionVariant,\n onHoveredDateChange,\n hideOutOfRangeDates,\n hoveredDate,\n startDateOffset,\n endDateOffset,\n };\n const { state, helpers } = useCalendar<TDate>(useCalendarProps);\n const calendarLabel = dateAdapter.format(\n state.visibleMonth,\n \"MMMM YYYY\",\n locale,\n );\n\n return (\n <CalendarContext.Provider\n value={{\n state,\n helpers,\n }}\n >\n <div\n className={clsx(withBaseName(), className)}\n role=\"application\"\n aria-label={calendarLabel}\n ref={ref}\n {...rest}\n >\n {children}\n </div>\n </CalendarContext.Provider>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","useWindow","useLocalization","useComponentCssInjection","calendarCss","useCalendar","jsx","CalendarContext","clsx"],"mappings":";;;;;;;;;;;;;AAkGA,MAAM,YAAA,GAAeA,kBAAa,cAAc,CAAA;AAEzC,MAAM,QAAW,GAAAC,gBAAA;AAAA,EACtB,CACE,OACA,GACG,KAAA;AACH,IAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,IAAM,MAAA,EAAE,WAAY,EAAA,GAAIC,oCAAuB,EAAA;AAC/C,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,eAAA;AAAA,MACR,GAAK,EAAAC,UAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AACD,IAAM,MAAA;AAAA,MACJ,QAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA,mBAAA;AAAA,MACA,YAAc,EAAA,gBAAA;AAAA,MACd,mBAAA;AAAA,MACA,iBAAA;AAAA,MACA,oBAAA;AAAA,MACA,mBAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,aAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,WAAA;AAAA,MACA,GAAG;AAAA,KACD,GAAA,KAAA;AACJ,IAAI,IAAA,eAAA;AACJ,IAAI,IAAA,aAAA;AACJ,IAAI,IAAA,IAAA;AACJ,IAAA,IAAI,qBAAqB,QAAU,EAAA;AACjC,MAAA,CAAC,EAAE,eAAA,EAAiB,aAAe,EAAA,GAAG,MACpC,GAAA,SAAA;AAAA,KACG,MAAA;AACL,MAAO,IAAA,GAAA,SAAA;AAAA;AAGT,IAAA,MAAM,gBAAwB,GAAA;AAAA,MAC5B,YAAA;AAAA,MACA,mBAAA;AAAA,MACA,YAAc,EAAA,gBAAA;AAAA,MACd,mBAAA;AAAA,MACA,iBAAA;AAAA,MACA,oBAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,aAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA,WAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAM,EAAE,KAAA,EAAO,OAAQ,EAAA,GAAIC,wBAAmB,gBAAgB,CAAA;AAC9D,IAAA,MAAM,gBAAgB,WAAY,CAAA,MAAA;AAAA,MAChC,KAAM,CAAA,YAAA;AAAA,MACN,WAAA;AAAA,MACA;AAAA,KACF;AAEA,IACE,uBAAAC,cAAA;AAAA,MAACC,+BAAgB,CAAA,QAAA;AAAA,MAAhB;AAAA,QACC,KAAO,EAAA;AAAA,UACL,KAAA;AAAA,UACA;AAAA,SACF;AAAA,QAEA,QAAA,kBAAAD,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAW,EAAAE,SAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,YACzC,IAAK,EAAA,aAAA;AAAA,YACL,YAAY,EAAA,aAAA;AAAA,YACZ,GAAA;AAAA,YACC,GAAG,IAAA;AAAA,YAEH;AAAA;AAAA;AACH;AAAA,KACF;AAAA;AAGN;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var css_248z = ".saltCalendarGrid-grid {\n display: grid;\n grid-auto-flow: column;\n}\n\n.saltCalendarGrid-grid > * {\n position: absolute;\n left: 0;\n width: 100%;\n}\n\n.saltCalendarGrid-grid > :nth-child(2) {\n position: relative;\n}\n";
4
+
5
+ module.exports = css_248z;
6
+ //# sourceMappingURL=CalendarGrid.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CalendarGrid.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,107 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var core = require('@salt-ds/core');
5
+ var react = require('react');
6
+ var CalendarContext = require('./internal/CalendarContext.js');
7
+ var CalendarMonth = require('./internal/CalendarMonth.js');
8
+ var styles = require('@salt-ds/styles');
9
+ var window = require('@salt-ds/window');
10
+ var LocalizationProvider = require('../localization-provider/LocalizationProvider.js');
11
+ var CalendarGrid$1 = require('./CalendarGrid.css.js');
12
+ var utils = require('./internal/utils.js');
13
+
14
+ const withBaseName = core.makePrefixer("saltCalendarGrid");
15
+ const CalendarGrid = react.forwardRef(
16
+ (props, ref) => {
17
+ const {
18
+ onFocus,
19
+ onBlur,
20
+ getCalendarMonthProps = () => void 0,
21
+ ...rest
22
+ } = props;
23
+ const { dateAdapter } = LocalizationProvider.useLocalization();
24
+ const targetWindow = window.useWindow();
25
+ styles.useComponentCssInjection({
26
+ testId: "salt-calendar-grid",
27
+ css: CalendarGrid$1,
28
+ window: targetWindow
29
+ });
30
+ const {
31
+ state: { visibleMonth, locale },
32
+ helpers: { setCalendarFocused }
33
+ } = CalendarContext.useCalendarContext();
34
+ const containerRef = react.useRef(null);
35
+ const diffIndex = (a, b) => utils.monthDiff(dateAdapter, a, b);
36
+ const { current: baseIndex } = react.useRef(visibleMonth);
37
+ core.useIsomorphicLayoutEffect(() => {
38
+ if (containerRef.current) {
39
+ containerRef.current.style.transform = `translate3d(${diffIndex(baseIndex, visibleMonth) * -101}%, 0, 0)`;
40
+ }
41
+ });
42
+ const getMonths = react.useCallback(
43
+ (month) => {
44
+ return [
45
+ dateAdapter.subtract(month, { months: 1 }),
46
+ month,
47
+ dateAdapter.add(month, { months: 1 })
48
+ ];
49
+ },
50
+ [dateAdapter.subtract]
51
+ );
52
+ const handleFocus = react.useCallback(
53
+ (event) => {
54
+ setCalendarFocused(true);
55
+ onFocus == null ? void 0 : onFocus(event);
56
+ },
57
+ [setCalendarFocused, onFocus]
58
+ );
59
+ const handleBlur = react.useCallback(
60
+ (event) => {
61
+ setCalendarFocused(false);
62
+ onBlur == null ? void 0 : onBlur(event);
63
+ },
64
+ [setCalendarFocused, onBlur]
65
+ );
66
+ const months = react.useMemo(() => {
67
+ return getMonths(visibleMonth);
68
+ }, [dateAdapter.format(visibleMonth)]);
69
+ return /* @__PURE__ */ jsxRuntime.jsx(
70
+ "div",
71
+ {
72
+ className: withBaseName(),
73
+ tabIndex: -1,
74
+ style: {
75
+ overflowX: "hidden",
76
+ position: "relative"
77
+ },
78
+ ref,
79
+ children: /* @__PURE__ */ jsxRuntime.jsx(
80
+ "div",
81
+ {
82
+ className: withBaseName("grid"),
83
+ ref: containerRef,
84
+ onBlur: handleBlur,
85
+ onFocus: handleFocus,
86
+ ...rest,
87
+ children: months.map((date, index) => /* @__PURE__ */ jsxRuntime.jsx(
88
+ "div",
89
+ {
90
+ className: withBaseName("slide"),
91
+ style: {
92
+ transform: `translateX(${diffIndex(date, baseIndex) * -101}%)`
93
+ },
94
+ "aria-hidden": index !== 1 ? "true" : void 0,
95
+ children: /* @__PURE__ */ jsxRuntime.jsx(CalendarMonth.CalendarMonth, { ...getCalendarMonthProps(date), date })
96
+ },
97
+ dateAdapter.format(date, locale)
98
+ ))
99
+ }
100
+ )
101
+ }
102
+ );
103
+ }
104
+ );
105
+
106
+ exports.CalendarGrid = CalendarGrid;
107
+ //# sourceMappingURL=CalendarGrid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CalendarGrid.js","sources":["../src/calendar/CalendarGrid.tsx"],"sourcesContent":["import { makePrefixer, useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport {\n type ComponentPropsWithoutRef,\n type FocusEventHandler,\n forwardRef,\n useCallback,\n useMemo,\n useRef,\n} from \"react\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\nimport {\n CalendarMonth,\n type CalendarMonthProps,\n} from \"./internal/CalendarMonth\";\n\nimport type { DateFrameworkType } from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useLocalization } from \"../localization-provider\";\nimport calendarGridCss from \"./CalendarGrid.css\";\nimport { monthDiff } from \"./internal/utils\";\n\n/**\n * Props for the CalendarGrid component.\n */\nexport interface CalendarGridProps<TDate extends DateFrameworkType>\n extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Props getter to pass to each CalendarMonth element\n */\n getCalendarMonthProps?: (\n date: TDate,\n ) => Omit<CalendarMonthProps<TDate>, \"date\">;\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarGrid\");\n\nexport const CalendarGrid = forwardRef<HTMLDivElement, CalendarGridProps<any>>(\n <TDate extends DateFrameworkType>(\n props: CalendarGridProps<TDate>,\n ref: React.Ref<HTMLDivElement>,\n ) => {\n const {\n onFocus,\n onBlur,\n getCalendarMonthProps = () => undefined,\n ...rest\n } = props;\n\n const { dateAdapter } = useLocalization<TDate>();\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar-grid\",\n css: calendarGridCss,\n window: targetWindow,\n });\n\n const {\n state: { visibleMonth, locale },\n helpers: { setCalendarFocused },\n } = useCalendarContext<TDate>();\n const containerRef = useRef<HTMLDivElement>(null);\n const diffIndex = (a: TDate, b: TDate) =>\n monthDiff<TDate>(dateAdapter, a, b);\n\n const { current: baseIndex } = useRef(visibleMonth);\n\n useIsomorphicLayoutEffect(() => {\n if (containerRef.current) {\n containerRef.current.style.transform = `translate3d(${\n diffIndex(baseIndex, visibleMonth) * -101 // needs to be higher than 100% so the next month doesn't show on the edges\n }%, 0, 0)`;\n }\n });\n\n const getMonths = useCallback(\n (month: TDate) => {\n return [\n dateAdapter.subtract(month, { months: 1 }),\n month,\n dateAdapter.add(month, { months: 1 }),\n ];\n },\n [dateAdapter.subtract],\n );\n\n const handleFocus: FocusEventHandler<HTMLDivElement> = useCallback(\n (event) => {\n setCalendarFocused(true);\n onFocus?.(event);\n },\n [setCalendarFocused, onFocus],\n );\n\n const handleBlur: FocusEventHandler<HTMLDivElement> = useCallback(\n (event) => {\n setCalendarFocused(false);\n onBlur?.(event);\n },\n [setCalendarFocused, onBlur],\n );\n\n const months = useMemo(() => {\n return getMonths(visibleMonth);\n }, [dateAdapter.format(visibleMonth)]);\n\n return (\n <div\n className={withBaseName()}\n tabIndex={-1} // https://bugzilla.mozilla.org/show_bug.cgi?id=1069739\n style={{\n overflowX: \"hidden\",\n position: \"relative\",\n }}\n ref={ref}\n >\n <div\n className={withBaseName(\"grid\")}\n ref={containerRef}\n onBlur={handleBlur}\n onFocus={handleFocus}\n {...rest}\n >\n {months.map((date, index) => (\n <div\n key={dateAdapter.format(date, locale)}\n className={withBaseName(\"slide\")}\n style={{\n transform: `translateX(${diffIndex(date, baseIndex) * -101}%)`,\n }}\n aria-hidden={index !== 1 ? \"true\" : undefined}\n >\n <CalendarMonth {...getCalendarMonthProps(date)} date={date} />\n </div>\n ))}\n </div>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","useLocalization","useWindow","useComponentCssInjection","calendarGridCss","useCalendarContext","useRef","monthDiff","useIsomorphicLayoutEffect","useCallback","useMemo","jsx","CalendarMonth"],"mappings":"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"}