@salt-ds/lab 1.0.0-alpha.51 → 1.0.0-alpha.52

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 (276) hide show
  1. package/css/salt-lab.css +256 -268
  2. package/dist-cjs/calendar/Calendar.css.js +1 -1
  3. package/dist-cjs/calendar/Calendar.js +6 -17
  4. package/dist-cjs/calendar/Calendar.js.map +1 -1
  5. package/dist-cjs/calendar/CalendarNavigation.css.js +6 -0
  6. package/dist-cjs/calendar/{internal/CalendarNavigation.js → CalendarNavigation.js} +160 -66
  7. package/dist-cjs/calendar/CalendarNavigation.js.map +1 -0
  8. package/dist-cjs/calendar/formatDate.js +56 -0
  9. package/dist-cjs/calendar/formatDate.js.map +1 -0
  10. package/dist-cjs/calendar/internal/CalendarCarousel.js +3 -3
  11. package/dist-cjs/calendar/internal/CalendarCarousel.js.map +1 -1
  12. package/dist-cjs/calendar/internal/CalendarDay.js +45 -33
  13. package/dist-cjs/calendar/internal/CalendarDay.js.map +1 -1
  14. package/dist-cjs/calendar/internal/CalendarMonth.js +3 -2
  15. package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -1
  16. package/dist-cjs/calendar/internal/CalendarWeekHeader.js +3 -3
  17. package/dist-cjs/calendar/internal/CalendarWeekHeader.js.map +1 -1
  18. package/dist-cjs/calendar/internal/useFocusManagement.js +7 -4
  19. package/dist-cjs/calendar/internal/useFocusManagement.js.map +1 -1
  20. package/dist-cjs/calendar/internal/utils.js +28 -23
  21. package/dist-cjs/calendar/internal/utils.js.map +1 -1
  22. package/dist-cjs/calendar/useCalendar.js +94 -45
  23. package/dist-cjs/calendar/useCalendar.js.map +1 -1
  24. package/dist-cjs/calendar/useCalendarDay.js +19 -10
  25. package/dist-cjs/calendar/useCalendarDay.js.map +1 -1
  26. package/dist-cjs/calendar/useCalendarSelection.js +360 -0
  27. package/dist-cjs/calendar/useCalendarSelection.js.map +1 -0
  28. package/dist-cjs/cascading-menu/internal/useMouseHandlers.js.map +1 -1
  29. package/dist-cjs/color-chooser/ColorChooser.js.map +1 -1
  30. package/dist-cjs/combo-box-deprecated/ComboBox.css.js +1 -1
  31. package/dist-cjs/common-hooks/useCollectionItems.js.map +1 -1
  32. package/dist-cjs/content-status/ContentStatus.css.js +1 -1
  33. package/dist-cjs/date-input/DateInput.css.js +1 -1
  34. package/dist-cjs/date-input/DateInputRange.js +355 -0
  35. package/dist-cjs/date-input/DateInputRange.js.map +1 -0
  36. package/dist-cjs/date-input/DateInputSingle.js +229 -0
  37. package/dist-cjs/date-input/DateInputSingle.js.map +1 -0
  38. package/dist-cjs/date-input/utils.js +65 -0
  39. package/dist-cjs/date-input/utils.js.map +1 -0
  40. package/dist-cjs/date-picker/DatePicker.js +40 -150
  41. package/dist-cjs/date-picker/DatePicker.js.map +1 -1
  42. package/dist-cjs/date-picker/DatePickerActions.css.js +6 -0
  43. package/dist-cjs/date-picker/DatePickerActions.css.js.map +1 -0
  44. package/dist-cjs/date-picker/DatePickerActions.js +102 -0
  45. package/dist-cjs/date-picker/DatePickerActions.js.map +1 -0
  46. package/dist-cjs/date-picker/DatePickerContext.js +23 -17
  47. package/dist-cjs/date-picker/DatePickerContext.js.map +1 -1
  48. package/dist-cjs/date-picker/DatePickerOverlay.css.js +6 -0
  49. package/dist-cjs/date-picker/DatePickerOverlay.css.js.map +1 -0
  50. package/dist-cjs/date-picker/DatePickerOverlay.js +50 -0
  51. package/dist-cjs/date-picker/DatePickerOverlay.js.map +1 -0
  52. package/dist-cjs/date-picker/DatePickerOverlayProvider.js +105 -0
  53. package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -0
  54. package/dist-cjs/date-picker/DatePickerPanel.css.js +1 -1
  55. package/dist-cjs/date-picker/DatePickerRangeInput.js +118 -0
  56. package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -0
  57. package/dist-cjs/date-picker/DatePickerRangePanel.js +206 -0
  58. package/dist-cjs/date-picker/DatePickerRangePanel.js.map +1 -0
  59. package/dist-cjs/date-picker/DatePickerSingleInput.js +97 -0
  60. package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -0
  61. package/dist-cjs/date-picker/DatePickerSinglePanel.js +138 -0
  62. package/dist-cjs/date-picker/DatePickerSinglePanel.js.map +1 -0
  63. package/dist-cjs/date-picker/useDatePicker.js +179 -0
  64. package/dist-cjs/date-picker/useDatePicker.js.map +1 -0
  65. package/dist-cjs/dropdown/useDropdown.js.map +1 -1
  66. package/dist-cjs/form-field-legacy/FormLabel.js.map +1 -1
  67. package/dist-cjs/index.js +43 -10
  68. package/dist-cjs/index.js.map +1 -1
  69. package/dist-cjs/list/List.js.map +1 -1
  70. package/dist-cjs/menu-button/MenuButtonTrigger.css.js +1 -1
  71. package/dist-cjs/query-input/QueryInput.css.js +1 -1
  72. package/dist-cjs/slider/Slider.css.js +1 -1
  73. package/dist-cjs/slider/Slider.js +53 -105
  74. package/dist-cjs/slider/Slider.js.map +1 -1
  75. package/dist-cjs/slider/internal/SliderContext.js +21 -0
  76. package/dist-cjs/slider/internal/SliderContext.js.map +1 -0
  77. package/dist-cjs/slider/internal/SliderMarks.js +31 -0
  78. package/dist-cjs/slider/internal/SliderMarks.js.map +1 -0
  79. package/dist-cjs/slider/internal/SliderSelection.js +17 -10
  80. package/dist-cjs/slider/internal/SliderSelection.js.map +1 -1
  81. package/dist-cjs/slider/internal/SliderThumb.js +77 -0
  82. package/dist-cjs/slider/internal/SliderThumb.js.map +1 -0
  83. package/dist-cjs/slider/internal/SliderTrack.js +91 -0
  84. package/dist-cjs/slider/internal/SliderTrack.js.map +1 -0
  85. package/dist-cjs/slider/internal/useKeyDownThumb.js +53 -0
  86. package/dist-cjs/slider/internal/useKeyDownThumb.js.map +1 -0
  87. package/dist-cjs/slider/internal/utils.js +78 -116
  88. package/dist-cjs/slider/internal/utils.js.map +1 -1
  89. package/dist-cjs/tabs/TabActivationIndicator.css.js +1 -1
  90. package/dist-cjs/tabs/useTabs.js.map +1 -1
  91. package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  92. package/dist-es/calendar/Calendar.css.js +1 -1
  93. package/dist-es/calendar/Calendar.js +7 -18
  94. package/dist-es/calendar/Calendar.js.map +1 -1
  95. package/dist-es/calendar/CalendarNavigation.css.js +4 -0
  96. package/dist-es/calendar/CalendarNavigation.js +308 -0
  97. package/dist-es/calendar/CalendarNavigation.js.map +1 -0
  98. package/dist-es/calendar/formatDate.js +51 -0
  99. package/dist-es/calendar/formatDate.js.map +1 -0
  100. package/dist-es/calendar/internal/CalendarCarousel.js +3 -3
  101. package/dist-es/calendar/internal/CalendarCarousel.js.map +1 -1
  102. package/dist-es/calendar/internal/CalendarDay.js +45 -33
  103. package/dist-es/calendar/internal/CalendarDay.js.map +1 -1
  104. package/dist-es/calendar/internal/CalendarMonth.js +3 -2
  105. package/dist-es/calendar/internal/CalendarMonth.js.map +1 -1
  106. package/dist-es/calendar/internal/CalendarWeekHeader.js +3 -3
  107. package/dist-es/calendar/internal/CalendarWeekHeader.js.map +1 -1
  108. package/dist-es/calendar/internal/useFocusManagement.js +7 -4
  109. package/dist-es/calendar/internal/useFocusManagement.js.map +1 -1
  110. package/dist-es/calendar/internal/utils.js +29 -23
  111. package/dist-es/calendar/internal/utils.js.map +1 -1
  112. package/dist-es/calendar/useCalendar.js +96 -47
  113. package/dist-es/calendar/useCalendar.js.map +1 -1
  114. package/dist-es/calendar/useCalendarDay.js +20 -11
  115. package/dist-es/calendar/useCalendarDay.js.map +1 -1
  116. package/dist-es/calendar/useCalendarSelection.js +350 -0
  117. package/dist-es/calendar/useCalendarSelection.js.map +1 -0
  118. package/dist-es/cascading-menu/internal/useMouseHandlers.js.map +1 -1
  119. package/dist-es/color-chooser/ColorChooser.js.map +1 -1
  120. package/dist-es/combo-box-deprecated/ComboBox.css.js +1 -1
  121. package/dist-es/common-hooks/useCollectionItems.js.map +1 -1
  122. package/dist-es/content-status/ContentStatus.css.js +1 -1
  123. package/dist-es/date-input/DateInput.css.js +1 -1
  124. package/dist-es/date-input/DateInputRange.js +351 -0
  125. package/dist-es/date-input/DateInputRange.js.map +1 -0
  126. package/dist-es/date-input/DateInputSingle.js +225 -0
  127. package/dist-es/date-input/DateInputSingle.js.map +1 -0
  128. package/dist-es/date-input/utils.js +57 -0
  129. package/dist-es/date-input/utils.js.map +1 -0
  130. package/dist-es/date-picker/DatePicker.js +43 -154
  131. package/dist-es/date-picker/DatePicker.js.map +1 -1
  132. package/dist-es/date-picker/DatePickerActions.css.js +4 -0
  133. package/dist-es/date-picker/DatePickerActions.css.js.map +1 -0
  134. package/dist-es/date-picker/DatePickerActions.js +98 -0
  135. package/dist-es/date-picker/DatePickerActions.js.map +1 -0
  136. package/dist-es/date-picker/DatePickerContext.js +22 -17
  137. package/dist-es/date-picker/DatePickerContext.js.map +1 -1
  138. package/dist-es/date-picker/DatePickerOverlay.css.js +4 -0
  139. package/dist-es/date-picker/DatePickerOverlay.css.js.map +1 -0
  140. package/dist-es/date-picker/DatePickerOverlay.js +46 -0
  141. package/dist-es/date-picker/DatePickerOverlay.js.map +1 -0
  142. package/dist-es/date-picker/DatePickerOverlayProvider.js +100 -0
  143. package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -0
  144. package/dist-es/date-picker/DatePickerPanel.css.js +1 -1
  145. package/dist-es/date-picker/DatePickerRangeInput.js +114 -0
  146. package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -0
  147. package/dist-es/date-picker/DatePickerRangePanel.js +198 -0
  148. package/dist-es/date-picker/DatePickerRangePanel.js.map +1 -0
  149. package/dist-es/date-picker/DatePickerSingleInput.js +93 -0
  150. package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -0
  151. package/dist-es/date-picker/DatePickerSinglePanel.js +130 -0
  152. package/dist-es/date-picker/DatePickerSinglePanel.js.map +1 -0
  153. package/dist-es/date-picker/useDatePicker.js +175 -0
  154. package/dist-es/date-picker/useDatePicker.js.map +1 -0
  155. package/dist-es/dropdown/useDropdown.js.map +1 -1
  156. package/dist-es/form-field-legacy/FormLabel.js.map +1 -1
  157. package/dist-es/index.js +14 -3
  158. package/dist-es/index.js.map +1 -1
  159. package/dist-es/list/List.js.map +1 -1
  160. package/dist-es/menu-button/MenuButtonTrigger.css.js +1 -1
  161. package/dist-es/query-input/QueryInput.css.js +1 -1
  162. package/dist-es/slider/Slider.css.js +1 -1
  163. package/dist-es/slider/Slider.js +55 -107
  164. package/dist-es/slider/Slider.js.map +1 -1
  165. package/dist-es/slider/internal/SliderContext.js +16 -0
  166. package/dist-es/slider/internal/SliderContext.js.map +1 -0
  167. package/dist-es/slider/internal/SliderMarks.js +27 -0
  168. package/dist-es/slider/internal/SliderMarks.js.map +1 -0
  169. package/dist-es/slider/internal/SliderSelection.js +17 -10
  170. package/dist-es/slider/internal/SliderSelection.js.map +1 -1
  171. package/dist-es/slider/internal/SliderThumb.js +73 -0
  172. package/dist-es/slider/internal/SliderThumb.js.map +1 -0
  173. package/dist-es/slider/internal/SliderTrack.js +87 -0
  174. package/dist-es/slider/internal/SliderTrack.js.map +1 -0
  175. package/dist-es/slider/internal/useKeyDownThumb.js +49 -0
  176. package/dist-es/slider/internal/useKeyDownThumb.js.map +1 -0
  177. package/dist-es/slider/internal/utils.js +70 -111
  178. package/dist-es/slider/internal/utils.js.map +1 -1
  179. package/dist-es/tabs/TabActivationIndicator.css.js +1 -1
  180. package/dist-es/tabs/useTabs.js.map +1 -1
  181. package/dist-es/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  182. package/dist-types/calendar/Calendar.d.ts +63 -6
  183. package/dist-types/calendar/CalendarNavigation.d.ts +57 -0
  184. package/dist-types/calendar/formatDate.d.ts +14 -0
  185. package/dist-types/calendar/index.d.ts +3 -1
  186. package/dist-types/calendar/internal/CalendarDay.d.ts +2 -1
  187. package/dist-types/calendar/internal/CalendarWeekHeader.d.ts +4 -4
  188. package/dist-types/calendar/internal/useFocusManagement.d.ts +2 -1
  189. package/dist-types/calendar/internal/utils.d.ts +7 -8
  190. package/dist-types/calendar/useCalendar.d.ts +100 -16
  191. package/dist-types/calendar/useCalendarDay.d.ts +38 -0
  192. package/dist-types/calendar/useCalendarSelection.d.ts +189 -0
  193. package/dist-types/date-input/DateInputRange.d.ts +150 -0
  194. package/dist-types/date-input/DateInputSingle.d.ts +117 -0
  195. package/dist-types/date-input/index.d.ts +3 -1
  196. package/dist-types/date-input/utils.d.ts +43 -0
  197. package/dist-types/date-picker/DatePicker.d.ts +20 -62
  198. package/dist-types/date-picker/DatePickerActions.d.ts +80 -0
  199. package/dist-types/date-picker/DatePickerContext.d.ts +180 -17
  200. package/dist-types/date-picker/DatePickerOverlay.d.ts +11 -0
  201. package/dist-types/date-picker/DatePickerOverlayProvider.d.ts +67 -0
  202. package/dist-types/date-picker/DatePickerRangeInput.d.ts +7 -0
  203. package/dist-types/date-picker/DatePickerRangePanel.d.ts +64 -0
  204. package/dist-types/date-picker/DatePickerSingleInput.d.ts +7 -0
  205. package/dist-types/date-picker/DatePickerSinglePanel.d.ts +42 -0
  206. package/dist-types/date-picker/index.d.ts +7 -0
  207. package/dist-types/date-picker/useDatePicker.d.ts +112 -0
  208. package/dist-types/slider/Slider.d.ts +23 -10
  209. package/dist-types/slider/internal/SliderContext.d.ts +11 -0
  210. package/dist-types/slider/internal/SliderMarks.d.ts +7 -0
  211. package/dist-types/slider/internal/SliderSelection.d.ts +3 -3
  212. package/dist-types/slider/internal/SliderThumb.d.ts +8 -0
  213. package/dist-types/slider/internal/SliderTrack.d.ts +4 -0
  214. package/dist-types/slider/internal/index.d.ts +3 -0
  215. package/dist-types/slider/internal/useKeyDownThumb.d.ts +2 -0
  216. package/dist-types/slider/internal/utils.d.ts +18 -10
  217. package/dist-types/slider/types.d.ts +3 -1
  218. package/package.json +3 -3
  219. package/dist-cjs/calendar/internal/CalendarNavigation.css.js +0 -6
  220. package/dist-cjs/calendar/internal/CalendarNavigation.js.map +0 -1
  221. package/dist-cjs/calendar/useSelection.js +0 -249
  222. package/dist-cjs/calendar/useSelection.js.map +0 -1
  223. package/dist-cjs/date-input/DateInput.js +0 -283
  224. package/dist-cjs/date-input/DateInput.js.map +0 -1
  225. package/dist-cjs/date-picker/DatePickerPanel.js +0 -155
  226. package/dist-cjs/date-picker/DatePickerPanel.js.map +0 -1
  227. package/dist-cjs/slider/internal/SliderHandle.js +0 -44
  228. package/dist-cjs/slider/internal/SliderHandle.js.map +0 -1
  229. package/dist-cjs/slider/internal/SliderMarkLabels.js +0 -45
  230. package/dist-cjs/slider/internal/SliderMarkLabels.js.map +0 -1
  231. package/dist-cjs/slider/internal/SliderRail.js +0 -25
  232. package/dist-cjs/slider/internal/SliderRail.js.map +0 -1
  233. package/dist-cjs/slider/internal/SliderRailMarks.js +0 -48
  234. package/dist-cjs/slider/internal/SliderRailMarks.js.map +0 -1
  235. package/dist-cjs/slider/internal/styles.js +0 -99
  236. package/dist-cjs/slider/internal/styles.js.map +0 -1
  237. package/dist-cjs/slider/internal/useSliderKeyDown.js +0 -50
  238. package/dist-cjs/slider/internal/useSliderKeyDown.js.map +0 -1
  239. package/dist-cjs/slider/internal/useSliderMouseDown.js +0 -96
  240. package/dist-cjs/slider/internal/useSliderMouseDown.js.map +0 -1
  241. package/dist-es/calendar/internal/CalendarNavigation.css.js +0 -4
  242. package/dist-es/calendar/internal/CalendarNavigation.js +0 -214
  243. package/dist-es/calendar/internal/CalendarNavigation.js.map +0 -1
  244. package/dist-es/calendar/useSelection.js +0 -242
  245. package/dist-es/calendar/useSelection.js.map +0 -1
  246. package/dist-es/date-input/DateInput.js +0 -279
  247. package/dist-es/date-input/DateInput.js.map +0 -1
  248. package/dist-es/date-picker/DatePickerPanel.js +0 -151
  249. package/dist-es/date-picker/DatePickerPanel.js.map +0 -1
  250. package/dist-es/slider/internal/SliderHandle.js +0 -40
  251. package/dist-es/slider/internal/SliderHandle.js.map +0 -1
  252. package/dist-es/slider/internal/SliderMarkLabels.js +0 -41
  253. package/dist-es/slider/internal/SliderMarkLabels.js.map +0 -1
  254. package/dist-es/slider/internal/SliderRail.js +0 -21
  255. package/dist-es/slider/internal/SliderRail.js.map +0 -1
  256. package/dist-es/slider/internal/SliderRailMarks.js +0 -44
  257. package/dist-es/slider/internal/SliderRailMarks.js.map +0 -1
  258. package/dist-es/slider/internal/styles.js +0 -91
  259. package/dist-es/slider/internal/styles.js.map +0 -1
  260. package/dist-es/slider/internal/useSliderKeyDown.js +0 -46
  261. package/dist-es/slider/internal/useSliderKeyDown.js.map +0 -1
  262. package/dist-es/slider/internal/useSliderMouseDown.js +0 -92
  263. package/dist-es/slider/internal/useSliderMouseDown.js.map +0 -1
  264. package/dist-types/calendar/internal/CalendarNavigation.d.ts +0 -16
  265. package/dist-types/calendar/useSelection.d.ts +0 -78
  266. package/dist-types/date-input/DateInput.d.ts +0 -60
  267. package/dist-types/date-picker/DatePickerPanel.d.ts +0 -10
  268. package/dist-types/slider/internal/SliderHandle.d.ts +0 -11
  269. package/dist-types/slider/internal/SliderMarkLabels.d.ts +0 -7
  270. package/dist-types/slider/internal/SliderRail.d.ts +0 -1
  271. package/dist-types/slider/internal/SliderRailMarks.d.ts +0 -12
  272. package/dist-types/slider/internal/styles.d.ts +0 -10
  273. package/dist-types/slider/internal/useSliderKeyDown.d.ts +0 -4
  274. package/dist-types/slider/internal/useSliderMouseDown.d.ts +0 -4
  275. /package/dist-cjs/calendar/{internal/CalendarNavigation.css.js.map → CalendarNavigation.css.js.map} +0 -0
  276. /package/dist-es/calendar/{internal/CalendarNavigation.css.js.map → CalendarNavigation.css.js.map} +0 -0
@@ -2,130 +2,92 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var react = require('react');
6
-
7
- const updateValueItemNotPushable = (oldValue, index, valueItem, min, max) => {
8
- const newValue = [...oldValue];
9
- if (valueItem < oldValue[index]) {
10
- const constraint = index === 0 ? min : newValue[index - 1];
11
- newValue[index] = Math.max(constraint, valueItem);
12
- } else {
13
- const constraint = index === newValue.length - 1 ? max : newValue[index + 1];
14
- newValue[index] = Math.min(constraint, valueItem);
15
- }
16
- return newValue;
5
+ const getValue = (trackRef, min, max, step, clientX) => {
6
+ const { width, x } = trackRef.current.getBoundingClientRect();
7
+ const localX = clientX - x;
8
+ const normaliseBetweenValues = localX / width * (max - min) + min;
9
+ const roundedToStep = roundToStep(normaliseBetweenValues, step);
10
+ const decimals = countDecimalPlaces(step);
11
+ const rounded = Number(roundedToStep.toFixed(decimals));
12
+ const value = clampValue(rounded, [min, max]);
13
+ return value;
17
14
  };
18
- const updateValueItemPushable = (oldValue, index, valueItem, min, max, pushDistance) => {
19
- const newValue = [...oldValue];
20
- newValue[index] = valueItem;
21
- if (valueItem < oldValue[index]) {
22
- for (let i = index - 1; i >= 0; --i) {
23
- if (newValue[i + 1] - newValue[i] < pushDistance) {
24
- newValue[i] = newValue[i + 1] - pushDistance;
25
- } else {
26
- break;
27
- }
28
- }
29
- const distToMin = newValue[0] - min;
30
- if (distToMin < 0) {
31
- for (let i = index; i >= 0; --i) {
32
- newValue[i] -= distToMin;
33
- }
34
- }
35
- } else {
36
- for (let i = index + 1; i < newValue.length; ++i) {
37
- if (newValue[i] - newValue[i - 1] < pushDistance) {
38
- newValue[i] = newValue[i - 1] + pushDistance;
39
- } else {
40
- break;
41
- }
42
- }
43
- const distToMax = max - newValue[newValue.length - 1];
44
- if (distToMax < 0) {
45
- for (let i = index; i < newValue.length; ++i) {
46
- newValue[i] += distToMax;
47
- }
48
- }
15
+ const setValue = (value, newValue, index, onChange) => {
16
+ if (value.length === 2) {
17
+ const newValueArray = [...value];
18
+ newValueArray.splice(index, 1, newValue);
19
+ onChange(newValueArray);
20
+ return;
49
21
  }
50
- return newValue;
22
+ onChange([newValue]);
51
23
  };
52
- function useValueUpdater(pushable, pushDistance, min, max) {
53
- return react.useMemo(() => {
54
- const updater = pushable ? (oldValue, index, valueItem) => updateValueItemPushable(
55
- oldValue,
56
- index,
57
- valueItem,
58
- min,
59
- max,
60
- pushDistance
61
- ) : (oldValue, index, valueItem) => updateValueItemNotPushable(oldValue, index, valueItem, min, max);
62
- return (oldValue, index, valueItem) => {
63
- if (!Array.isArray(oldValue)) {
64
- return valueItem;
65
- }
66
- if (oldValue[index] === valueItem) {
67
- return oldValue;
68
- }
69
- const newValue = updater(oldValue, index, valueItem);
70
- if (-1 === newValue.findIndex((v, i) => oldValue[i] !== v)) {
71
- return oldValue;
72
- }
73
- return newValue;
74
- };
75
- }, [pushable, pushDistance, min, max]);
76
- }
77
- const roundValue = (v, step) => Math.round(v / step) * step;
78
- const clampValue = (v, min, max) => {
79
- if (v < min) {
80
- return min;
81
- }
82
- if (v > max) {
24
+ const roundToStep = (value, step) => Math.round(value / step) * step;
25
+ const clampValue = (value, [min, max]) => {
26
+ if (value > max) {
83
27
  return max;
84
28
  }
85
- return v;
86
- };
87
- function getSliderAriaLabel(count, index) {
88
- if (count < 2) {
89
- return;
90
- }
91
- if (count === 2) {
92
- return index === 0 ? "Min" : "Max";
29
+ if (value < min) {
30
+ return min;
93
31
  }
94
- if (index >= 0 && index < 10) {
95
- return [
96
- "First",
97
- "Second",
98
- "Third",
99
- "Fourth",
100
- "Fifth",
101
- "Sixth",
102
- "Seventh",
103
- "Eighth",
104
- "Ninth",
105
- "Tenth"
106
- ][index];
32
+ return value;
33
+ };
34
+ const getPercentage = (min, max, value) => {
35
+ const percentage = (value - min) / (max - min) * 100;
36
+ return Math.min(Math.max(percentage, 0), 100);
37
+ };
38
+ const countDecimalPlaces = (num) => {
39
+ const parts = num.toString().split(".");
40
+ return parts.length > 1 ? parts[1].length : 0;
41
+ };
42
+ const getMarkStyles = (min, max, step) => {
43
+ const marks = [];
44
+ for (let i = min; i <= max; i = Number((i + step).toPrecision(4))) {
45
+ const value = Number(i.toPrecision(4));
46
+ const position = `${getPercentage(min, max, value)}%`;
47
+ marks.push({ value, position });
107
48
  }
108
- return;
109
- }
110
- function getHandleIndex(element) {
111
- const handleIndexAttribute = element.getAttribute("data-handle-index");
112
- if (handleIndexAttribute) {
113
- return Number.parseInt(handleIndexAttribute, 10);
49
+ const decimals = Math.max(
50
+ ...marks.map((mark) => countDecimalPlaces(mark.value))
51
+ );
52
+ return marks.map((mark) => ({
53
+ ...mark,
54
+ label: mark.value.toFixed(decimals)
55
+ }));
56
+ };
57
+ const getNearestIndex = (value, newValue) => {
58
+ if (value.length === 1)
59
+ return 0;
60
+ if (value[0] === value[1]) {
61
+ if (newValue < value[0])
62
+ return 0;
63
+ return 1;
114
64
  }
115
- return getHandleIndex(element.parentElement);
116
- }
117
- function isLabeledMark(mark) {
118
- return typeof mark !== "number";
119
- }
120
- function isMarkAtMax(max, mark) {
121
- return max === (isLabeledMark(mark) ? mark.value : mark);
122
- }
65
+ const distances = value.map((value2) => Math.abs(newValue - value2));
66
+ const minDistance = Math.min(...distances);
67
+ const nearestIndex = distances.indexOf(minDistance);
68
+ return nearestIndex;
69
+ };
70
+ const preventOverlappingValues = (value, newValue, index) => value.length === 2 ? index === 0 ? Math.min(newValue, value[1]) : Math.max(newValue, value[0]) : newValue;
71
+ const parseValueProp = (value, min, max) => {
72
+ if (typeof value === "undefined" || value.length < 1)
73
+ return;
74
+ const a = clampValue(value[0], [min, max]);
75
+ if (value.length === 1)
76
+ return [a];
77
+ const b = clampValue(value[1], [min, max]);
78
+ if (a > b)
79
+ return [a, a];
80
+ return [a, b];
81
+ };
123
82
 
124
83
  exports.clampValue = clampValue;
125
- exports.getHandleIndex = getHandleIndex;
126
- exports.getSliderAriaLabel = getSliderAriaLabel;
127
- exports.isLabeledMark = isLabeledMark;
128
- exports.isMarkAtMax = isMarkAtMax;
129
- exports.roundValue = roundValue;
130
- exports.useValueUpdater = useValueUpdater;
84
+ exports.countDecimalPlaces = countDecimalPlaces;
85
+ exports.getMarkStyles = getMarkStyles;
86
+ exports.getNearestIndex = getNearestIndex;
87
+ exports.getPercentage = getPercentage;
88
+ exports.getValue = getValue;
89
+ exports.parseValueProp = parseValueProp;
90
+ exports.preventOverlappingValues = preventOverlappingValues;
91
+ exports.roundToStep = roundToStep;
92
+ exports.setValue = setValue;
131
93
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../src/slider/internal/utils.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport type { SliderValue } from \"../types\";\nimport type { LabeledMark, SliderMark } from \"./SliderRailMarks\";\n\nconst updateValueItemNotPushable = (\n oldValue: number[],\n index: number,\n valueItem: number,\n min: number,\n max: number,\n) => {\n const newValue = [...oldValue];\n if (valueItem < oldValue[index]) {\n const constraint = index === 0 ? min : newValue[index - 1];\n newValue[index] = Math.max(constraint, valueItem);\n } else {\n const constraint =\n index === newValue.length - 1 ? max : newValue[index + 1];\n newValue[index] = Math.min(constraint, valueItem);\n }\n return newValue;\n};\n\nconst updateValueItemPushable = (\n oldValue: number[],\n index: number,\n valueItem: number,\n min: number,\n max: number,\n pushDistance: number,\n) => {\n const newValue = [...oldValue];\n newValue[index] = valueItem;\n if (valueItem < oldValue[index]) {\n for (let i = index - 1; i >= 0; --i) {\n if (newValue[i + 1] - newValue[i] < pushDistance) {\n newValue[i] = newValue[i + 1] - pushDistance;\n } else {\n break;\n }\n }\n const distToMin = newValue[0] - min;\n if (distToMin < 0) {\n for (let i = index; i >= 0; --i) {\n newValue[i] -= distToMin;\n }\n }\n } else {\n for (let i = index + 1; i < newValue.length; ++i) {\n if (newValue[i] - newValue[i - 1] < pushDistance) {\n newValue[i] = newValue[i - 1] + pushDistance;\n } else {\n break;\n }\n }\n const distToMax = max - newValue[newValue.length - 1];\n if (distToMax < 0) {\n for (let i = index; i < newValue.length; ++i) {\n newValue[i] += distToMax;\n }\n }\n }\n return newValue;\n};\n\nexport type UpdateValueItem = (\n oldValue: SliderValue,\n index: number,\n valueItem: number,\n) => SliderValue;\n\nexport function useValueUpdater(\n pushable: boolean | undefined,\n pushDistance: number,\n min: number,\n max: number,\n): UpdateValueItem {\n return useMemo(() => {\n const updater = pushable\n ? (oldValue: number[], index: number, valueItem: number) =>\n updateValueItemPushable(\n oldValue,\n index,\n valueItem,\n min,\n max,\n pushDistance,\n )\n : (oldValue: number[], index: number, valueItem: number) =>\n updateValueItemNotPushable(oldValue, index, valueItem, min, max);\n return (oldValue: SliderValue, index: number, valueItem: number) => {\n if (!Array.isArray(oldValue)) {\n return valueItem;\n }\n if (oldValue[index] === valueItem) {\n return oldValue;\n }\n const newValue = updater(oldValue, index, valueItem);\n if (-1 === newValue.findIndex((v, i) => oldValue[i] !== v)) {\n return oldValue;\n }\n return newValue;\n };\n }, [pushable, pushDistance, min, max]);\n}\n\nexport const roundValue = (v: number, step: number) =>\n Math.round(v / step) * step;\n\nexport const clampValue = (v: number, min: number, max: number) => {\n if (v < min) {\n return min;\n }\n if (v > max) {\n return max;\n }\n return v;\n};\n\nexport function getSliderAriaLabel(count: number, index: number) {\n if (count < 2) {\n return;\n }\n if (count === 2) {\n return index === 0 ? \"Min\" : \"Max\";\n }\n if (index >= 0 && index < 10) {\n return [\n \"First\",\n \"Second\",\n \"Third\",\n \"Fourth\",\n \"Fifth\",\n \"Sixth\",\n \"Seventh\",\n \"Eighth\",\n \"Ninth\",\n \"Tenth\",\n ][index];\n }\n return;\n}\n\nexport function getHandleIndex(element: HTMLElement): number {\n const handleIndexAttribute = element.getAttribute(\"data-handle-index\");\n if (handleIndexAttribute) {\n return Number.parseInt(handleIndexAttribute, 10);\n }\n return getHandleIndex(element.parentElement as HTMLElement);\n}\n\nexport function isLabeledMark(mark: SliderMark): mark is LabeledMark {\n return typeof mark !== \"number\";\n}\n\nexport function isMarkAtMax(max: number, mark: SliderMark) {\n return max === (isLabeledMark(mark) ? mark.value : mark);\n}\n"],"names":["useMemo"],"mappings":";;;;;;AAIA,MAAM,6BAA6B,CACjC,QAAA,EACA,KACA,EAAA,SAAA,EACA,KACA,GACG,KAAA;AACH,EAAM,MAAA,QAAA,GAAW,CAAC,GAAG,QAAQ,CAAA,CAAA;AAC7B,EAAI,IAAA,SAAA,GAAY,SAAS,KAAQ,CAAA,EAAA;AAC/B,IAAA,MAAM,UAAa,GAAA,KAAA,KAAU,CAAI,GAAA,GAAA,GAAM,SAAS,KAAQ,GAAA,CAAA,CAAA,CAAA;AACxD,IAAA,QAAA,CAAS,KAAS,CAAA,GAAA,IAAA,CAAK,GAAI,CAAA,UAAA,EAAY,SAAS,CAAA,CAAA;AAAA,GAC3C,MAAA;AACL,IAAA,MAAM,aACJ,KAAU,KAAA,QAAA,CAAS,SAAS,CAAI,GAAA,GAAA,GAAM,SAAS,KAAQ,GAAA,CAAA,CAAA,CAAA;AACzD,IAAA,QAAA,CAAS,KAAS,CAAA,GAAA,IAAA,CAAK,GAAI,CAAA,UAAA,EAAY,SAAS,CAAA,CAAA;AAAA,GAClD;AACA,EAAO,OAAA,QAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,0BAA0B,CAC9B,QAAA,EACA,OACA,SACA,EAAA,GAAA,EACA,KACA,YACG,KAAA;AACH,EAAM,MAAA,QAAA,GAAW,CAAC,GAAG,QAAQ,CAAA,CAAA;AAC7B,EAAA,QAAA,CAAS,KAAS,CAAA,GAAA,SAAA,CAAA;AAClB,EAAI,IAAA,SAAA,GAAY,SAAS,KAAQ,CAAA,EAAA;AAC/B,IAAA,KAAA,IAAS,IAAI,KAAQ,GAAA,CAAA,EAAG,CAAK,IAAA,CAAA,EAAG,EAAE,CAAG,EAAA;AACnC,MAAA,IAAI,QAAS,CAAA,CAAA,GAAI,CAAK,CAAA,GAAA,QAAA,CAAS,KAAK,YAAc,EAAA;AAChD,QAAS,QAAA,CAAA,CAAA,CAAA,GAAK,QAAS,CAAA,CAAA,GAAI,CAAK,CAAA,GAAA,YAAA,CAAA;AAAA,OAC3B,MAAA;AACL,QAAA,MAAA;AAAA,OACF;AAAA,KACF;AACA,IAAM,MAAA,SAAA,GAAY,SAAS,CAAK,CAAA,GAAA,GAAA,CAAA;AAChC,IAAA,IAAI,YAAY,CAAG,EAAA;AACjB,MAAA,KAAA,IAAS,CAAI,GAAA,KAAA,EAAO,CAAK,IAAA,CAAA,EAAG,EAAE,CAAG,EAAA;AAC/B,QAAA,QAAA,CAAS,CAAM,CAAA,IAAA,SAAA,CAAA;AAAA,OACjB;AAAA,KACF;AAAA,GACK,MAAA;AACL,IAAA,KAAA,IAAS,IAAI,KAAQ,GAAA,CAAA,EAAG,IAAI,QAAS,CAAA,MAAA,EAAQ,EAAE,CAAG,EAAA;AAChD,MAAA,IAAI,QAAS,CAAA,CAAA,CAAA,GAAK,QAAS,CAAA,CAAA,GAAI,KAAK,YAAc,EAAA;AAChD,QAAS,QAAA,CAAA,CAAA,CAAA,GAAK,QAAS,CAAA,CAAA,GAAI,CAAK,CAAA,GAAA,YAAA,CAAA;AAAA,OAC3B,MAAA;AACL,QAAA,MAAA;AAAA,OACF;AAAA,KACF;AACA,IAAA,MAAM,SAAY,GAAA,GAAA,GAAM,QAAS,CAAA,QAAA,CAAS,MAAS,GAAA,CAAA,CAAA,CAAA;AACnD,IAAA,IAAI,YAAY,CAAG,EAAA;AACjB,MAAA,KAAA,IAAS,IAAI,KAAO,EAAA,CAAA,GAAI,QAAS,CAAA,MAAA,EAAQ,EAAE,CAAG,EAAA;AAC5C,QAAA,QAAA,CAAS,CAAM,CAAA,IAAA,SAAA,CAAA;AAAA,OACjB;AAAA,KACF;AAAA,GACF;AACA,EAAO,OAAA,QAAA,CAAA;AACT,CAAA,CAAA;AAQO,SAAS,eACd,CAAA,QAAA,EACA,YACA,EAAA,GAAA,EACA,GACiB,EAAA;AACjB,EAAA,OAAOA,cAAQ,MAAM;AACnB,IAAA,MAAM,OAAU,GAAA,QAAA,GACZ,CAAC,QAAA,EAAoB,OAAe,SAClC,KAAA,uBAAA;AAAA,MACE,QAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA;AAAA,MACA,GAAA;AAAA,MACA,GAAA;AAAA,MACA,YAAA;AAAA,KACF,GACF,CAAC,QAAA,EAAoB,KAAe,EAAA,SAAA,KAClC,2BAA2B,QAAU,EAAA,KAAA,EAAO,SAAW,EAAA,GAAA,EAAK,GAAG,CAAA,CAAA;AACrE,IAAO,OAAA,CAAC,QAAuB,EAAA,KAAA,EAAe,SAAsB,KAAA;AAClE,MAAA,IAAI,CAAC,KAAA,CAAM,OAAQ,CAAA,QAAQ,CAAG,EAAA;AAC5B,QAAO,OAAA,SAAA,CAAA;AAAA,OACT;AACA,MAAI,IAAA,QAAA,CAAS,WAAW,SAAW,EAAA;AACjC,QAAO,OAAA,QAAA,CAAA;AAAA,OACT;AACA,MAAA,MAAM,QAAW,GAAA,OAAA,CAAQ,QAAU,EAAA,KAAA,EAAO,SAAS,CAAA,CAAA;AACnD,MAAI,IAAA,CAAA,CAAA,KAAO,SAAS,SAAU,CAAA,CAAC,GAAG,CAAM,KAAA,QAAA,CAAS,CAAO,CAAA,KAAA,CAAC,CAAG,EAAA;AAC1D,QAAO,OAAA,QAAA,CAAA;AAAA,OACT;AACA,MAAO,OAAA,QAAA,CAAA;AAAA,KACT,CAAA;AAAA,KACC,CAAC,QAAA,EAAU,YAAc,EAAA,GAAA,EAAK,GAAG,CAAC,CAAA,CAAA;AACvC,CAAA;AAEa,MAAA,UAAA,GAAa,CAAC,CAAW,EAAA,IAAA,KACpC,KAAK,KAAM,CAAA,CAAA,GAAI,IAAI,CAAI,GAAA,KAAA;AAElB,MAAM,UAAa,GAAA,CAAC,CAAW,EAAA,GAAA,EAAa,GAAgB,KAAA;AACjE,EAAA,IAAI,IAAI,GAAK,EAAA;AACX,IAAO,OAAA,GAAA,CAAA;AAAA,GACT;AACA,EAAA,IAAI,IAAI,GAAK,EAAA;AACX,IAAO,OAAA,GAAA,CAAA;AAAA,GACT;AACA,EAAO,OAAA,CAAA,CAAA;AACT,EAAA;AAEgB,SAAA,kBAAA,CAAmB,OAAe,KAAe,EAAA;AAC/D,EAAA,IAAI,QAAQ,CAAG,EAAA;AACb,IAAA,OAAA;AAAA,GACF;AACA,EAAA,IAAI,UAAU,CAAG,EAAA;AACf,IAAO,OAAA,KAAA,KAAU,IAAI,KAAQ,GAAA,KAAA,CAAA;AAAA,GAC/B;AACA,EAAI,IAAA,KAAA,IAAS,CAAK,IAAA,KAAA,GAAQ,EAAI,EAAA;AAC5B,IAAO,OAAA;AAAA,MACL,OAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,KACA,CAAA,KAAA,CAAA,CAAA;AAAA,GACJ;AACA,EAAA,OAAA;AACF,CAAA;AAEO,SAAS,eAAe,OAA8B,EAAA;AAC3D,EAAM,MAAA,oBAAA,GAAuB,OAAQ,CAAA,YAAA,CAAa,mBAAmB,CAAA,CAAA;AACrE,EAAA,IAAI,oBAAsB,EAAA;AACxB,IAAO,OAAA,MAAA,CAAO,QAAS,CAAA,oBAAA,EAAsB,EAAE,CAAA,CAAA;AAAA,GACjD;AACA,EAAO,OAAA,cAAA,CAAe,QAAQ,aAA4B,CAAA,CAAA;AAC5D,CAAA;AAEO,SAAS,cAAc,IAAuC,EAAA;AACnE,EAAA,OAAO,OAAO,IAAS,KAAA,QAAA,CAAA;AACzB,CAAA;AAEgB,SAAA,WAAA,CAAY,KAAa,IAAkB,EAAA;AACzD,EAAA,OAAO,GAAS,MAAA,aAAA,CAAc,IAAI,CAAA,GAAI,KAAK,KAAQ,GAAA,IAAA,CAAA,CAAA;AACrD;;;;;;;;;;"}
1
+ {"version":3,"file":"utils.js","sources":["../src/slider/internal/utils.ts"],"sourcesContent":["import type { RefObject } from \"react\";\nimport type { SliderChangeHandler, SliderValue, ThumbIndex } from \"../types\";\n\nexport const getValue = (\n trackRef: RefObject<Element>,\n min: number,\n max: number,\n step: number,\n clientX: number,\n) => {\n const { width, x } = trackRef.current!.getBoundingClientRect();\n const localX = clientX - x;\n const normaliseBetweenValues = (localX / width) * (max - min) + min;\n const roundedToStep = roundToStep(normaliseBetweenValues, step);\n const decimals = countDecimalPlaces(step);\n const rounded = Number(roundedToStep.toFixed(decimals));\n const value = clampValue(rounded, [min, max]);\n return value;\n};\n\nexport const setValue = (\n value: SliderValue,\n newValue: number,\n index: ThumbIndex,\n onChange: SliderChangeHandler,\n) => {\n if (value.length === 2) {\n const newValueArray = [...value];\n newValueArray.splice(index, 1, newValue);\n onChange(newValueArray as SliderValue);\n return;\n }\n onChange([newValue]);\n};\n\nexport const roundToStep = (value: number, step: number) =>\n Math.round(value / step) * step;\n\nexport const clampValue = (value: number, [min, max]: number[]) => {\n if (value > max) {\n return max;\n }\n if (value < min) {\n return min;\n }\n return value;\n};\n\nexport const getPercentage = (min: number, max: number, value: number) => {\n const percentage = ((value - min) / (max - min)) * 100;\n return Math.min(Math.max(percentage, 0), 100);\n};\n\nexport const getPercentageDifference = (\n min: number,\n max: number,\n value: number[],\n) => {\n const valueDiff = value[1] - value[0];\n const percentage = ((valueDiff - min) / (max - min)) * 100;\n return `${Math.min(Math.max(percentage, 0), 100)}%`;\n};\n\nexport const getPercentageOffset = (\n min: number,\n max: number,\n value: number[],\n) => {\n const offsetLeft = ((value[0] - min) / (max - min)) * 100;\n return `${Math.min(Math.max(offsetLeft, 0), 100)}%`;\n};\n\nexport const countDecimalPlaces = (num: number) => {\n const parts = num.toString().split(\".\");\n return parts.length > 1 ? parts[1].length : 0;\n};\n\nexport const getMarkStyles = (min: number, max: number, step: number) => {\n const marks = [];\n for (let i = min; i <= max; i = Number((i + step).toPrecision(4))) {\n const value = Number(i.toPrecision(4));\n const position = `${getPercentage(min, max, value)}%`;\n marks.push({ value, position });\n }\n const decimals = Math.max(\n ...marks.map((mark) => countDecimalPlaces(mark.value)),\n );\n return marks.map((mark) => ({\n ...mark,\n label: mark.value.toFixed(decimals),\n }));\n};\n\nexport const getNearestIndex = (value: SliderValue, newValue: number) => {\n if (value.length === 1) return 0;\n\n if (value[0] === value[1]) {\n if (newValue < value[0]) return 0;\n return 1;\n }\n\n const distances = value.map((value) => Math.abs(newValue - value));\n const minDistance = Math.min(...distances);\n const nearestIndex = distances.indexOf(minDistance);\n\n return nearestIndex as ThumbIndex;\n};\n\nexport const preventOverlappingValues = (\n value: SliderValue,\n newValue: number,\n index: ThumbIndex,\n) =>\n value.length === 2\n ? index === 0\n ? Math.min(newValue, value[1])\n : Math.max(newValue, value[0])\n : newValue;\n\nexport const parseValueProp = (\n value: number[] | undefined,\n min: number,\n max: number,\n) => {\n if (typeof value === \"undefined\" || value.length < 1) return;\n const a = clampValue(value[0], [min, max]);\n if (value.length === 1) return [a] as SliderValue;\n const b = clampValue(value[1], [min, max]);\n if (a > b) return [a, a] as SliderValue;\n return [a, b] as SliderValue;\n};\n"],"names":["value"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = ".saltTabActivationIndicator-no-background {\n --tabs-activationIndicator-background: transparent !important;\n}\n\n.saltTabActivationIndicator {\n --tabs-activationIndicator-background: var(--salt-container-primary-borderColor);\n\n background: var(--saltTabs-activationIndicator-background, var(--tabs-activationIndicator-background));\n bottom: 0;\n height: var(--saltTabs-activationIndicator-height, auto);\n inset: var(--tabs-activationIndicator-inset);\n position: absolute;\n width: var(--tabs-activationIndicator-width, auto);\n}\n\n/* the Active Tab indicator, uses navigable styles */\n.saltTabActivationIndicator-thumb {\n inset: var(--saltTabs-activationIndicator-thumb-inset);\n position: absolute;\n height: var(--tabs-activationIndicator-thumb-height, auto);\n background: var(--salt-navigable-indicator-active);\n transition: var(--saltTabs-activationIndicator-transition, var(--tabs-activationIndicator-transition, left 0.3s ease));\n width: var(--tabs-activationIndicator-thumb-width, auto);\n z-index: 1;\n}\n";
3
+ var css_248z = ".saltTabActivationIndicator-no-background {\n --tabs-activationIndicator-background: transparent !important;\n}\n\n.saltTabActivationIndicator {\n --tabs-activationIndicator-background: var(--salt-container-primary-borderColor);\n\n background: var(--saltTabs-activationIndicator-background, var(--tabs-activationIndicator-background));\n height: var(--saltTabs-activationIndicator-height, auto);\n inset: var(--tabs-activationIndicator-inset);\n position: absolute;\n width: var(--tabs-activationIndicator-width, auto);\n}\n\n/* the Active Tab indicator, uses navigable styles */\n.saltTabActivationIndicator-thumb {\n inset: var(--saltTabs-activationIndicator-thumb-inset);\n position: absolute;\n height: var(--tabs-activationIndicator-thumb-height, auto);\n background: var(--salt-navigable-indicator-active);\n transition: var(--saltTabs-activationIndicator-transition, var(--tabs-activationIndicator-transition, left 0.3s ease));\n width: var(--tabs-activationIndicator-thumb-width, auto);\n z-index: 1;\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=TabActivationIndicator.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTabs.js","sources":["../src/tabs/useTabs.ts"],"sourcesContent":["import { useControlled, useIdMemo } from \"@salt-ds/core\";\nimport { type ReactNode, useCallback } from \"react\";\nimport type { TabDescriptor } from \"./TabsTypes\";\nimport { useItemsWithIds } from \"./useItemsWithIds\";\n\nexport interface TabsHookProps {\n activeTabIndex?: number | null;\n children: ReactNode;\n defaultActiveTabIndex?: number;\n id?: string;\n onActiveChange?: (tabIndex: number) => void;\n}\n\nexport interface TabsHookResult {\n activeTabIndex?: number | null;\n id: string;\n onActiveChange?: (tabIndex: number) => void;\n tabPanel?: ReactNode;\n tabs: TabDescriptor[];\n}\n\nexport const useTabs = ({\n activeTabIndex: activeTabIndexProp,\n children,\n defaultActiveTabIndex,\n id: idProp,\n onActiveChange,\n}: TabsHookProps): TabsHookResult => {\n const id = useIdMemo(idProp);\n const [itemsWithIds] = useItemsWithIds(children, id);\n\n const [activeTabIndex, setActiveTabIndex] = useControlled({\n controlled: activeTabIndexProp,\n default: defaultActiveTabIndex ?? 0,\n name: \"useTabs\",\n state: \"activeTabIndex\",\n });\n\n const handleTabActivated = useCallback(\n (tabIndex: number) => {\n setActiveTabIndex(tabIndex);\n onActiveChange?.(tabIndex);\n },\n [onActiveChange],\n );\n\n return {\n id,\n onActiveChange: handleTabActivated,\n activeTabIndex,\n tabs: itemsWithIds,\n tabPanel:\n activeTabIndex === null\n ? null\n : itemsWithIds[activeTabIndex]?.element ?? null,\n };\n};\n"],"names":["useIdMemo","useItemsWithIds","useControlled","useCallback"],"mappings":";;;;;;;;AAqBO,MAAM,UAAU,CAAC;AAAA,EACtB,cAAgB,EAAA,kBAAA;AAAA,EAChB,QAAA;AAAA,EACA,qBAAA;AAAA,EACA,EAAI,EAAA,MAAA;AAAA,EACJ,cAAA;AACF,CAAqC,KAAA;AA3BrC,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AA4BE,EAAM,MAAA,EAAA,GAAKA,eAAU,MAAM,CAAA,CAAA;AAC3B,EAAA,MAAM,CAAC,YAAY,CAAI,GAAAC,+BAAA,CAAgB,UAAU,EAAE,CAAA,CAAA;AAEnD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIC,kBAAc,CAAA;AAAA,IACxD,UAAY,EAAA,kBAAA;AAAA,IACZ,SAAS,qBAAyB,IAAA,IAAA,GAAA,qBAAA,GAAA,CAAA;AAAA,IAClC,IAAM,EAAA,SAAA;AAAA,IACN,KAAO,EAAA,gBAAA;AAAA,GACR,CAAA,CAAA;AAED,EAAA,MAAM,kBAAqB,GAAAC,iBAAA;AAAA,IACzB,CAAC,QAAqB,KAAA;AACpB,MAAA,iBAAA,CAAkB,QAAQ,CAAA,CAAA;AAC1B,MAAiB,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAA,QAAA,CAAA,CAAA;AAAA,KACnB;AAAA,IACA,CAAC,cAAc,CAAA;AAAA,GACjB,CAAA;AAEA,EAAO,OAAA;AAAA,IACL,EAAA;AAAA,IACA,cAAgB,EAAA,kBAAA;AAAA,IAChB,cAAA;AAAA,IACA,IAAM,EAAA,YAAA;AAAA,IACN,QAAA,EACE,mBAAmB,IACf,GAAA,IAAA,GAAA,CACA,wBAAa,cAAb,CAAA,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA8B,YAA9B,IAAyC,GAAA,EAAA,GAAA,IAAA;AAAA,GACjD,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"useTabs.js","sources":["../src/tabs/useTabs.ts"],"sourcesContent":["import { useControlled, useIdMemo } from \"@salt-ds/core\";\nimport { type ReactNode, useCallback } from \"react\";\nimport type { TabDescriptor } from \"./TabsTypes\";\nimport { useItemsWithIds } from \"./useItemsWithIds\";\n\nexport interface TabsHookProps {\n activeTabIndex?: number | null;\n children: ReactNode;\n defaultActiveTabIndex?: number;\n id?: string;\n onActiveChange?: (tabIndex: number) => void;\n}\n\nexport interface TabsHookResult {\n activeTabIndex?: number | null;\n id: string;\n onActiveChange?: (tabIndex: number) => void;\n tabPanel?: ReactNode;\n tabs: TabDescriptor[];\n}\n\nexport const useTabs = ({\n activeTabIndex: activeTabIndexProp,\n children,\n defaultActiveTabIndex,\n id: idProp,\n onActiveChange,\n}: TabsHookProps): TabsHookResult => {\n const id = useIdMemo(idProp);\n const [itemsWithIds] = useItemsWithIds(children, id);\n\n const [activeTabIndex, setActiveTabIndex] = useControlled({\n controlled: activeTabIndexProp,\n default: defaultActiveTabIndex ?? 0,\n name: \"useTabs\",\n state: \"activeTabIndex\",\n });\n\n const handleTabActivated = useCallback(\n (tabIndex: number) => {\n setActiveTabIndex(tabIndex);\n onActiveChange?.(tabIndex);\n },\n [onActiveChange],\n );\n\n return {\n id,\n onActiveChange: handleTabActivated,\n activeTabIndex,\n tabs: itemsWithIds,\n tabPanel:\n activeTabIndex === null\n ? null\n : (itemsWithIds[activeTabIndex]?.element ?? null),\n };\n};\n"],"names":["useIdMemo","useItemsWithIds","useControlled","useCallback"],"mappings":";;;;;;;;AAqBO,MAAM,UAAU,CAAC;AAAA,EACtB,cAAgB,EAAA,kBAAA;AAAA,EAChB,QAAA;AAAA,EACA,qBAAA;AAAA,EACA,EAAI,EAAA,MAAA;AAAA,EACJ,cAAA;AACF,CAAqC,KAAA;AA3BrC,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AA4BE,EAAM,MAAA,EAAA,GAAKA,eAAU,MAAM,CAAA,CAAA;AAC3B,EAAA,MAAM,CAAC,YAAY,CAAI,GAAAC,+BAAA,CAAgB,UAAU,EAAE,CAAA,CAAA;AAEnD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIC,kBAAc,CAAA;AAAA,IACxD,UAAY,EAAA,kBAAA;AAAA,IACZ,SAAS,qBAAyB,IAAA,IAAA,GAAA,qBAAA,GAAA,CAAA;AAAA,IAClC,IAAM,EAAA,SAAA;AAAA,IACN,KAAO,EAAA,gBAAA;AAAA,GACR,CAAA,CAAA;AAED,EAAA,MAAM,kBAAqB,GAAAC,iBAAA;AAAA,IACzB,CAAC,QAAqB,KAAA;AACpB,MAAA,iBAAA,CAAkB,QAAQ,CAAA,CAAA;AAC1B,MAAiB,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAA,QAAA,CAAA,CAAA;AAAA,KACnB;AAAA,IACA,CAAC,cAAc,CAAA;AAAA,GACjB,CAAA;AAEA,EAAO,OAAA;AAAA,IACL,EAAA;AAAA,IACA,cAAgB,EAAA,kBAAA;AAAA,IAChB,cAAA;AAAA,IACA,IAAM,EAAA,YAAA;AAAA,IACN,QAAA,EACE,mBAAmB,IACf,GAAA,IAAA,GAAA,CACC,wBAAa,cAAb,CAAA,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA8B,YAA9B,IAAyC,GAAA,EAAA,GAAA,IAAA;AAAA,GAClD,CAAA;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"OverflowPanel.js","sources":["../src/toolbar/overflow-panel/OverflowPanel.tsx"],"sourcesContent":["import {\n Button,\n makePrefixer,\n useControlled,\n useIdMemo as useId,\n} from \"@salt-ds/core\";\nimport { OverflowMenuIcon } from \"@salt-ds/icons\";\nimport { clsx } from \"clsx\";\nimport {\n type ForwardedRef,\n type MouseEvent,\n type ReactElement,\n cloneElement,\n forwardRef,\n useCallback,\n useRef,\n} from \"react\";\nimport { ToolbarField, type ToolbarFieldProps } from \"../toolbar-field\";\nimport { OverflowSeparator } from \"./OverflowSeparator\";\n\nimport {\n useCollectionItems,\n useKeyboardNavigationPanel,\n} from \"../../common-hooks\";\n\nimport { DropdownBase, type DropdownBaseProps } from \"../../dropdown\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport overflowPanelCss from \"./OverflowPanel.css\";\n\nconst withBaseName = makePrefixer(\"saltOverflowPanel\");\n\nexport interface DropdownPanelProps extends DropdownBaseProps {\n /**\n * Trigger button icon\n */\n triggerButtonIcon?: JSX.Element;\n /**\n * Trigger button text\n */\n triggerButtonLabel?: string;\n}\n\nexport const OverflowPanel = forwardRef(function DropdownPanel(\n {\n children,\n className,\n defaultIsOpen,\n isOpen: isOpenProp,\n onOpenChange,\n triggerButtonIcon,\n triggerButtonLabel,\n ...props\n }: DropdownPanelProps,\n forwardedRef?: ForwardedRef<HTMLDivElement>,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-overflow-panel\",\n css: overflowPanelCss,\n window: targetWindow,\n });\n\n const id = useId();\n const collectionHook = useCollectionItems<ReactElement>({\n id,\n children,\n });\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n const [isOpen, setIsOpen] = useControlled<boolean>({\n controlled: isOpenProp,\n default: defaultIsOpen || false,\n name: \"DropdownPanel\",\n });\n\n const { highlightedIndex: highlightedIdx, ...keyboardHook } =\n useKeyboardNavigationPanel({\n cycleFocus: true,\n defaultHighlightedIndex: 0,\n focusOnHighlight: true,\n indexPositions: collectionHook.data,\n });\n\n const focusTrigger = useCallback(() => {\n if (triggerRef.current) {\n triggerRef.current.focus();\n }\n }, []);\n\n const setPanelRef = useCallback((el: HTMLElement | null) => el?.focus(), []);\n\n const handleItemClick = (evt: MouseEvent) => {\n // if (sourceItem.props[\"data-close-on-click\"] !== false) closeMenu();\n setIsOpen(false);\n focusTrigger();\n };\n\n const handleOpenChange = (open: boolean) => {\n setIsOpen(open);\n onOpenChange?.(open);\n };\n\n const getTriggerButtonIcon = () =>\n triggerButtonIcon ?? triggerButtonLabel === undefined ? (\n <OverflowMenuIcon />\n ) : undefined;\n\n return (\n <DropdownBase\n {...props}\n className={clsx(withBaseName(), className)}\n isOpen={isOpen}\n onOpenChange={handleOpenChange}\n placement=\"bottom-end\"\n ref={forwardedRef}\n >\n <Button variant=\"secondary\" ref={triggerRef}>\n {getTriggerButtonIcon()}\n {triggerButtonLabel}\n </Button>\n <div\n className={withBaseName(\"content\")}\n ref={setPanelRef}\n tabIndex={-1}\n {...keyboardHook.listProps}\n >\n {collectionHook.data.map((item) => {\n const { type } = item.value as ReactElement;\n if (type === OverflowSeparator) {\n return item.value;\n }\n const formFieldProps = {\n id: item.id,\n inOverflowPanel: true,\n key: item.id,\n onClick: handleItemClick,\n } as ToolbarFieldProps;\n\n if (type === ToolbarField) {\n return cloneElement(item.value as ReactElement, formFieldProps);\n }\n return (\n <ToolbarField {...formFieldProps} key={item.id}>\n {item.value}\n </ToolbarField>\n );\n })}\n </div>\n </DropdownBase>\n );\n});\n"],"names":["makePrefixer","forwardRef","useWindow","useComponentCssInjection","overflowPanelCss","useId","useCollectionItems","useRef","useControlled","useKeyboardNavigationPanel","useCallback","jsx","OverflowMenuIcon","jsxs","DropdownBase","clsx","Button","OverflowSeparator","ToolbarField","cloneElement","createElement"],"mappings":"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"}
1
+ {"version":3,"file":"OverflowPanel.js","sources":["../src/toolbar/overflow-panel/OverflowPanel.tsx"],"sourcesContent":["import {\n Button,\n makePrefixer,\n useControlled,\n useIdMemo as useId,\n} from \"@salt-ds/core\";\nimport { OverflowMenuIcon } from \"@salt-ds/icons\";\nimport { clsx } from \"clsx\";\nimport {\n type ForwardedRef,\n type MouseEvent,\n type ReactElement,\n cloneElement,\n forwardRef,\n useCallback,\n useRef,\n} from \"react\";\nimport { ToolbarField, type ToolbarFieldProps } from \"../toolbar-field\";\nimport { OverflowSeparator } from \"./OverflowSeparator\";\n\nimport {\n useCollectionItems,\n useKeyboardNavigationPanel,\n} from \"../../common-hooks\";\n\nimport { DropdownBase, type DropdownBaseProps } from \"../../dropdown\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport overflowPanelCss from \"./OverflowPanel.css\";\n\nconst withBaseName = makePrefixer(\"saltOverflowPanel\");\n\nexport interface DropdownPanelProps extends DropdownBaseProps {\n /**\n * Trigger button icon\n */\n triggerButtonIcon?: JSX.Element;\n /**\n * Trigger button text\n */\n triggerButtonLabel?: string;\n}\n\nexport const OverflowPanel = forwardRef(function DropdownPanel(\n {\n children,\n className,\n defaultIsOpen,\n isOpen: isOpenProp,\n onOpenChange,\n triggerButtonIcon,\n triggerButtonLabel,\n ...props\n }: DropdownPanelProps,\n forwardedRef?: ForwardedRef<HTMLDivElement>,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-overflow-panel\",\n css: overflowPanelCss,\n window: targetWindow,\n });\n\n const id = useId();\n const collectionHook = useCollectionItems<ReactElement>({\n id,\n children,\n });\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n const [isOpen, setIsOpen] = useControlled<boolean>({\n controlled: isOpenProp,\n default: defaultIsOpen || false,\n name: \"DropdownPanel\",\n });\n\n const { highlightedIndex: highlightedIdx, ...keyboardHook } =\n useKeyboardNavigationPanel({\n cycleFocus: true,\n defaultHighlightedIndex: 0,\n focusOnHighlight: true,\n indexPositions: collectionHook.data,\n });\n\n const focusTrigger = useCallback(() => {\n if (triggerRef.current) {\n triggerRef.current.focus();\n }\n }, []);\n\n const setPanelRef = useCallback((el: HTMLElement | null) => el?.focus(), []);\n\n const handleItemClick = (evt: MouseEvent) => {\n // if (sourceItem.props[\"data-close-on-click\"] !== false) closeMenu();\n setIsOpen(false);\n focusTrigger();\n };\n\n const handleOpenChange = (open: boolean) => {\n setIsOpen(open);\n onOpenChange?.(open);\n };\n\n const getTriggerButtonIcon = () =>\n (triggerButtonIcon ?? triggerButtonLabel === undefined) ? (\n <OverflowMenuIcon />\n ) : undefined;\n\n return (\n <DropdownBase\n {...props}\n className={clsx(withBaseName(), className)}\n isOpen={isOpen}\n onOpenChange={handleOpenChange}\n placement=\"bottom-end\"\n ref={forwardedRef}\n >\n <Button variant=\"secondary\" ref={triggerRef}>\n {getTriggerButtonIcon()}\n {triggerButtonLabel}\n </Button>\n <div\n className={withBaseName(\"content\")}\n ref={setPanelRef}\n tabIndex={-1}\n {...keyboardHook.listProps}\n >\n {collectionHook.data.map((item) => {\n const { type } = item.value as ReactElement;\n if (type === OverflowSeparator) {\n return item.value;\n }\n const formFieldProps = {\n id: item.id,\n inOverflowPanel: true,\n key: item.id,\n onClick: handleItemClick,\n } as ToolbarFieldProps;\n\n if (type === ToolbarField) {\n return cloneElement(item.value as ReactElement, formFieldProps);\n }\n return (\n <ToolbarField {...formFieldProps} key={item.id}>\n {item.value}\n </ToolbarField>\n );\n })}\n </div>\n </DropdownBase>\n );\n});\n"],"names":["makePrefixer","forwardRef","useWindow","useComponentCssInjection","overflowPanelCss","useId","useCollectionItems","useRef","useControlled","useKeyboardNavigationPanel","useCallback","jsx","OverflowMenuIcon","jsxs","DropdownBase","clsx","Button","OverflowSeparator","ToolbarField","cloneElement","createElement"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- var css_248z = ".saltCalendar {\n width: min-content;\n background: var(--salt-container-primary-background);\n padding: var(--salt-spacing-100);\n}\n";
1
+ var css_248z = ".saltCalendar {\n background: var(--salt-container-primary-background);\n padding: var(--salt-spacing-100);\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=Calendar.css.js.map
@@ -4,26 +4,17 @@ import { clsx } from 'clsx';
4
4
  import { forwardRef, useCallback } from 'react';
5
5
  import { CalendarCarousel } from './internal/CalendarCarousel.js';
6
6
  import { CalendarContext } from './internal/CalendarContext.js';
7
- import { CalendarNavigation } from './internal/CalendarNavigation.js';
8
7
  import { CalendarWeekHeader } from './internal/CalendarWeekHeader.js';
9
8
  import { useCalendar } from './useCalendar.js';
10
9
  import { useComponentCssInjection } from '@salt-ds/styles';
11
10
  import { useWindow } from '@salt-ds/window';
12
- import { DateFormatter, getLocalTimeZone } from '@internationalized/date';
11
+ import { DateFormatter } from '@internationalized/date';
13
12
  import css_248z from './Calendar.css.js';
14
- import { getCurrentLocale } from './internal/utils.js';
15
13
 
16
14
  const withBaseName = makePrefixer("saltCalendar");
17
15
  const Calendar = forwardRef(
18
16
  function Calendar2(props, ref) {
19
- const {
20
- className,
21
- renderDayContents,
22
- hideYearDropdown,
23
- TooltipProps,
24
- borderedDropdown,
25
- ...rest
26
- } = props;
17
+ const { children, className, renderDayContents, TooltipProps, ...rest } = props;
27
18
  const targetWindow = useWindow();
28
19
  useComponentCssInjection({
29
20
  testId: "salt-calendar",
@@ -31,7 +22,6 @@ const Calendar = forwardRef(
31
22
  window: targetWindow
32
23
  });
33
24
  const { state, helpers } = useCalendar({
34
- hideYearDropdown,
35
25
  ...rest
36
26
  });
37
27
  const { setCalendarFocused } = helpers;
@@ -41,10 +31,10 @@ const Calendar = forwardRef(
41
31
  const handleBlur = useCallback(() => {
42
32
  setCalendarFocused(false);
43
33
  }, [setCalendarFocused]);
44
- const calendarLabel = new DateFormatter(getCurrentLocale(), {
34
+ const calendarLabel = new DateFormatter(state.locale, {
45
35
  month: "long",
46
36
  year: "numeric"
47
- }).format(state.visibleMonth.toDate(getLocalTimeZone()));
37
+ }).format(state.visibleMonth.toDate(state.timeZone));
48
38
  return /* @__PURE__ */ jsx(CalendarContext.Provider, {
49
39
  value: {
50
40
  state,
@@ -56,11 +46,10 @@ const Calendar = forwardRef(
56
46
  "aria-label": calendarLabel,
57
47
  ref,
58
48
  children: [
59
- /* @__PURE__ */ jsx(CalendarNavigation, {
60
- borderedDropdown,
61
- hideYearDropdown
49
+ children != null ? children : null,
50
+ /* @__PURE__ */ jsx(CalendarWeekHeader, {
51
+ locale: state.locale
62
52
  }),
63
- /* @__PURE__ */ jsx(CalendarWeekHeader, {}),
64
53
  /* @__PURE__ */ jsx(CalendarCarousel, {
65
54
  onFocus: handleFocus,
66
55
  onBlur: handleBlur,
@@ -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 { forwardRef, useCallback } from \"react\";\nimport {\n CalendarCarousel,\n type CalendarCarouselProps,\n} from \"./internal/CalendarCarousel\";\nimport { CalendarContext } from \"./internal/CalendarContext\";\nimport {\n CalendarNavigation,\n type CalendarNavigationProps,\n} from \"./internal/CalendarNavigation\";\nimport { CalendarWeekHeader } from \"./internal/CalendarWeekHeader\";\nimport { useCalendar, type useCalendarProps } from \"./useCalendar\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport { DateFormatter, getLocalTimeZone } from \"@internationalized/date\";\nimport calendarCss from \"./Calendar.css\";\nimport { getCurrentLocale } from \"./internal/utils\";\n\nexport type CalendarProps = useCalendarProps & {\n className?: string;\n renderDayContents?: CalendarCarouselProps[\"renderDayContents\"];\n hideYearDropdown?: CalendarNavigationProps[\"hideYearDropdown\"];\n borderedDropdown?: CalendarNavigationProps[\"borderedDropdown\"];\n TooltipProps?: CalendarCarouselProps[\"TooltipProps\"];\n hideOutOfRangeDates?: CalendarCarouselProps[\"hideOutOfRangeDates\"];\n};\n\nconst withBaseName = makePrefixer(\"saltCalendar\");\n\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps>(\n function Calendar(props, ref) {\n const {\n className,\n renderDayContents,\n hideYearDropdown,\n TooltipProps,\n borderedDropdown,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar\",\n css: calendarCss,\n window: targetWindow,\n });\n\n const { state, helpers } = useCalendar({\n hideYearDropdown,\n ...rest,\n });\n\n const { setCalendarFocused } = helpers;\n\n const handleFocus = useCallback(() => {\n setCalendarFocused(true);\n }, [setCalendarFocused]);\n\n const handleBlur = useCallback(() => {\n setCalendarFocused(false);\n }, [setCalendarFocused]);\n\n const calendarLabel = new DateFormatter(getCurrentLocale(), {\n month: \"long\",\n year: \"numeric\",\n }).format(state.visibleMonth.toDate(getLocalTimeZone()));\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 >\n <CalendarNavigation\n borderedDropdown={borderedDropdown}\n hideYearDropdown={hideYearDropdown}\n />\n <CalendarWeekHeader />\n <CalendarCarousel\n onFocus={handleFocus}\n onBlur={handleBlur}\n renderDayContents={renderDayContents}\n TooltipProps={TooltipProps}\n />\n </div>\n </CalendarContext.Provider>\n );\n },\n);\n"],"names":["Calendar","calendarCss"],"mappings":";;;;;;;;;;;;;;;AA+BA,MAAM,YAAA,GAAe,aAAa,cAAc,CAAA,CAAA;AAEzC,MAAM,QAAW,GAAA,UAAA;AAAA,EACtB,SAASA,SAAS,CAAA,KAAA,EAAO,GAAK,EAAA;AAC5B,IAAM,MAAA;AAAA,MACJ,SAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,YAAA;AAAA,MACA,gBAAA;AAAA,MACG,GAAA,IAAA;AAAA,KACD,GAAA,KAAA,CAAA;AAEJ,IAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,IAAyB,wBAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,eAAA;AAAA,MACR,GAAK,EAAAC,QAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAA,MAAM,EAAE,KAAA,EAAO,OAAQ,EAAA,GAAI,WAAY,CAAA;AAAA,MACrC,gBAAA;AAAA,MACA,GAAG,IAAA;AAAA,KACJ,CAAA,CAAA;AAED,IAAM,MAAA,EAAE,oBAAuB,GAAA,OAAA,CAAA;AAE/B,IAAM,MAAA,WAAA,GAAc,YAAY,MAAM;AACpC,MAAA,kBAAA,CAAmB,IAAI,CAAA,CAAA;AAAA,KACzB,EAAG,CAAC,kBAAkB,CAAC,CAAA,CAAA;AAEvB,IAAM,MAAA,UAAA,GAAa,YAAY,MAAM;AACnC,MAAA,kBAAA,CAAmB,KAAK,CAAA,CAAA;AAAA,KAC1B,EAAG,CAAC,kBAAkB,CAAC,CAAA,CAAA;AAEvB,IAAA,MAAM,aAAgB,GAAA,IAAI,aAAc,CAAA,gBAAA,EAAoB,EAAA;AAAA,MAC1D,KAAO,EAAA,MAAA;AAAA,MACP,IAAM,EAAA,SAAA;AAAA,KACP,EAAE,MAAO,CAAA,KAAA,CAAM,aAAa,MAAO,CAAA,gBAAA,EAAkB,CAAC,CAAA,CAAA;AACvD,IACE,uBAAA,GAAA,CAAC,gBAAgB,QAAhB,EAAA;AAAA,MACC,KAAO,EAAA;AAAA,QACL,KAAA;AAAA,QACA,OAAA;AAAA,OACF;AAAA,MAEA,QAAC,kBAAA,IAAA,CAAA,KAAA,EAAA;AAAA,QACC,SAAW,EAAA,IAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,QACzC,IAAK,EAAA,aAAA;AAAA,QACL,YAAY,EAAA,aAAA;AAAA,QACZ,GAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAC,GAAA,CAAA,kBAAA,EAAA;AAAA,YACC,gBAAA;AAAA,YACA,gBAAA;AAAA,WACF,CAAA;AAAA,8BACC,kBAAmB,EAAA,EAAA,CAAA;AAAA,0BACnB,GAAA,CAAA,gBAAA,EAAA;AAAA,YACC,OAAS,EAAA,WAAA;AAAA,YACT,MAAQ,EAAA,UAAA;AAAA,YACR,iBAAA;AAAA,YACA,YAAA;AAAA,WACF,CAAA;AAAA,SAAA;AAAA,OACF,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
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 useCallback,\n} from \"react\";\nimport {\n CalendarCarousel,\n type CalendarCarouselProps,\n} from \"./internal/CalendarCarousel\";\nimport { CalendarContext } from \"./internal/CalendarContext\";\nimport { CalendarWeekHeader } from \"./internal/CalendarWeekHeader\";\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 /**\n * Additional class names to apply to the Calendar.\n */\n className?: string;\n\n /**\n * Function to render the contents of a day.\n */\n renderDayContents?: CalendarCarouselProps[\"renderDayContents\"];\n\n /**\n * Props for the tooltip component.\n */\n TooltipProps?: CalendarCarouselProps[\"TooltipProps\"];\n\n /**\n * If `true`, hides dates that are out of the selectable range.\n */\n hideOutOfRangeDates?: CalendarCarouselProps[\"hideOutOfRangeDates\"];\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 { children, className, renderDayContents, TooltipProps, ...rest } =\n props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar\",\n css: calendarCss,\n window: targetWindow,\n });\n\n const { state, helpers } = useCalendar({\n ...rest,\n });\n\n const { setCalendarFocused } = helpers;\n\n const handleFocus = useCallback(() => {\n setCalendarFocused(true);\n }, [setCalendarFocused]);\n\n const handleBlur = useCallback(() => {\n setCalendarFocused(false);\n }, [setCalendarFocused]);\n\n const calendarLabel = new DateFormatter(state.locale, {\n month: \"long\",\n year: \"numeric\",\n }).format(state.visibleMonth.toDate(state.timeZone));\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 >\n {children ?? null}\n <CalendarWeekHeader locale={state.locale} />\n <CalendarCarousel\n onFocus={handleFocus}\n onBlur={handleBlur}\n renderDayContents={renderDayContents}\n TooltipProps={TooltipProps}\n />\n </div>\n </CalendarContext.Provider>\n );\n },\n);\n"],"names":["Calendar","calendarCss"],"mappings":";;;;;;;;;;;;;AAmHA,MAAM,YAAA,GAAe,aAAa,cAAc,CAAA,CAAA;AAEzC,MAAM,QAAW,GAAA,UAAA;AAAA,EACtB,SAASA,SAAS,CAAA,KAAA,EAAO,GAAK,EAAA;AAC5B,IAAA,MAAM,EAAE,QAAU,EAAA,SAAA,EAAW,iBAAmB,EAAA,YAAA,EAAA,GAAiB,MAC/D,GAAA,KAAA,CAAA;AAEF,IAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,IAAyB,wBAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,eAAA;AAAA,MACR,GAAK,EAAAC,QAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAA,MAAM,EAAE,KAAA,EAAO,OAAQ,EAAA,GAAI,WAAY,CAAA;AAAA,MACrC,GAAG,IAAA;AAAA,KACJ,CAAA,CAAA;AAED,IAAM,MAAA,EAAE,oBAAuB,GAAA,OAAA,CAAA;AAE/B,IAAM,MAAA,WAAA,GAAc,YAAY,MAAM;AACpC,MAAA,kBAAA,CAAmB,IAAI,CAAA,CAAA;AAAA,KACzB,EAAG,CAAC,kBAAkB,CAAC,CAAA,CAAA;AAEvB,IAAM,MAAA,UAAA,GAAa,YAAY,MAAM;AACnC,MAAA,kBAAA,CAAmB,KAAK,CAAA,CAAA;AAAA,KAC1B,EAAG,CAAC,kBAAkB,CAAC,CAAA,CAAA;AAEvB,IAAA,MAAM,aAAgB,GAAA,IAAI,aAAc,CAAA,KAAA,CAAM,MAAQ,EAAA;AAAA,MACpD,KAAO,EAAA,MAAA;AAAA,MACP,IAAM,EAAA,SAAA;AAAA,KACP,EAAE,MAAO,CAAA,KAAA,CAAM,aAAa,MAAO,CAAA,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAA;AACnD,IACE,uBAAA,GAAA,CAAC,gBAAgB,QAAhB,EAAA;AAAA,MACC,KAAO,EAAA;AAAA,QACL,KAAA;AAAA,QACA,OAAA;AAAA,OACF;AAAA,MAEA,QAAC,kBAAA,IAAA,CAAA,KAAA,EAAA;AAAA,QACC,SAAW,EAAA,IAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,QACzC,IAAK,EAAA,aAAA;AAAA,QACL,YAAY,EAAA,aAAA;AAAA,QACZ,GAAA;AAAA,QAEC,QAAA,EAAA;AAAA,UAAY,QAAA,IAAA,IAAA,GAAA,QAAA,GAAA,IAAA;AAAA,0BACZ,GAAA,CAAA,kBAAA,EAAA;AAAA,YAAmB,QAAQ,KAAM,CAAA,MAAA;AAAA,WAAQ,CAAA;AAAA,0BACzC,GAAA,CAAA,gBAAA,EAAA;AAAA,YACC,OAAS,EAAA,WAAA;AAAA,YACT,MAAQ,EAAA,UAAA;AAAA,YACR,iBAAA;AAAA,YACA,YAAA;AAAA,WACF,CAAA;AAAA,SAAA;AAAA,OACF,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
@@ -0,0 +1,4 @@
1
+ var css_248z = ".saltCalendarNavigation {\n display: grid;\n grid-template-columns: min-content auto min-content;\n padding-bottom: var(--salt-spacing-100);\n grid-gap: var(--salt-spacing-25);\n align-items: center;\n box-sizing: border-box;\n}\n\n.saltCalendarNavigation-hideYearDropdown {\n grid-template-columns: min-content auto min-content;\n grid-gap: var(--salt-spacing-300);\n}\n\n.saltCalendarNavigation-dropdowns {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-gap: var(--salt-spacing-100);\n}\n";
2
+
3
+ export { css_248z as default };
4
+ //# sourceMappingURL=CalendarNavigation.css.js.map