@salt-ds/lab 1.0.0-alpha.50 → 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 (295) hide show
  1. package/css/salt-lab.css +279 -267
  2. package/dist-cjs/calendar/Calendar.css.js +1 -1
  3. package/dist-cjs/calendar/Calendar.js +6 -15
  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 -63
  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.css.js +1 -1
  13. package/dist-cjs/calendar/internal/CalendarDay.js +45 -33
  14. package/dist-cjs/calendar/internal/CalendarDay.js.map +1 -1
  15. package/dist-cjs/calendar/internal/CalendarMonth.js +3 -2
  16. package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -1
  17. package/dist-cjs/calendar/internal/CalendarWeekHeader.js +3 -3
  18. package/dist-cjs/calendar/internal/CalendarWeekHeader.js.map +1 -1
  19. package/dist-cjs/calendar/internal/useFocusManagement.js +7 -4
  20. package/dist-cjs/calendar/internal/useFocusManagement.js.map +1 -1
  21. package/dist-cjs/calendar/internal/utils.js +28 -23
  22. package/dist-cjs/calendar/internal/utils.js.map +1 -1
  23. package/dist-cjs/calendar/useCalendar.js +94 -45
  24. package/dist-cjs/calendar/useCalendar.js.map +1 -1
  25. package/dist-cjs/calendar/useCalendarDay.js +19 -10
  26. package/dist-cjs/calendar/useCalendarDay.js.map +1 -1
  27. package/dist-cjs/calendar/useCalendarSelection.js +360 -0
  28. package/dist-cjs/calendar/useCalendarSelection.js.map +1 -0
  29. package/dist-cjs/cascading-menu/internal/useMouseHandlers.js.map +1 -1
  30. package/dist-cjs/color-chooser/ColorChooser.js.map +1 -1
  31. package/dist-cjs/combo-box-deprecated/ComboBox.css.js +1 -1
  32. package/dist-cjs/common-hooks/useCollectionItems.js.map +1 -1
  33. package/dist-cjs/content-status/ContentStatus.css.js +1 -1
  34. package/dist-cjs/date-input/DateInput.css.js +1 -1
  35. package/dist-cjs/date-input/DateInputRange.js +355 -0
  36. package/dist-cjs/date-input/DateInputRange.js.map +1 -0
  37. package/dist-cjs/date-input/DateInputSingle.js +229 -0
  38. package/dist-cjs/date-input/DateInputSingle.js.map +1 -0
  39. package/dist-cjs/date-input/utils.js +65 -0
  40. package/dist-cjs/date-input/utils.js.map +1 -0
  41. package/dist-cjs/date-picker/DatePicker.js +40 -148
  42. package/dist-cjs/date-picker/DatePicker.js.map +1 -1
  43. package/dist-cjs/date-picker/DatePickerActions.css.js +6 -0
  44. package/dist-cjs/date-picker/DatePickerActions.css.js.map +1 -0
  45. package/dist-cjs/date-picker/DatePickerActions.js +102 -0
  46. package/dist-cjs/date-picker/DatePickerActions.js.map +1 -0
  47. package/dist-cjs/date-picker/DatePickerContext.js +23 -17
  48. package/dist-cjs/date-picker/DatePickerContext.js.map +1 -1
  49. package/dist-cjs/date-picker/DatePickerOverlay.css.js +6 -0
  50. package/dist-cjs/date-picker/DatePickerOverlay.css.js.map +1 -0
  51. package/dist-cjs/date-picker/DatePickerOverlay.js +50 -0
  52. package/dist-cjs/date-picker/DatePickerOverlay.js.map +1 -0
  53. package/dist-cjs/date-picker/DatePickerOverlayProvider.js +105 -0
  54. package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -0
  55. package/dist-cjs/date-picker/DatePickerPanel.css.js +1 -1
  56. package/dist-cjs/date-picker/DatePickerRangeInput.js +118 -0
  57. package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -0
  58. package/dist-cjs/date-picker/DatePickerRangePanel.js +206 -0
  59. package/dist-cjs/date-picker/DatePickerRangePanel.js.map +1 -0
  60. package/dist-cjs/date-picker/DatePickerSingleInput.js +97 -0
  61. package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -0
  62. package/dist-cjs/date-picker/DatePickerSinglePanel.js +138 -0
  63. package/dist-cjs/date-picker/DatePickerSinglePanel.js.map +1 -0
  64. package/dist-cjs/date-picker/useDatePicker.js +179 -0
  65. package/dist-cjs/date-picker/useDatePicker.js.map +1 -0
  66. package/dist-cjs/dropdown/Dropdown.css.js +1 -1
  67. package/dist-cjs/dropdown/DropdownBase.js +1 -1
  68. package/dist-cjs/dropdown/DropdownBase.js.map +1 -1
  69. package/dist-cjs/dropdown/useDropdown.js.map +1 -1
  70. package/dist-cjs/form-field-legacy/FormLabel.js.map +1 -1
  71. package/dist-cjs/index.js +43 -10
  72. package/dist-cjs/index.js.map +1 -1
  73. package/dist-cjs/list/List.js.map +1 -1
  74. package/dist-cjs/menu-button/MenuButtonTrigger.css.js +1 -1
  75. package/dist-cjs/query-input/QueryInput.css.js +1 -1
  76. package/dist-cjs/slider/Slider.css.js +1 -1
  77. package/dist-cjs/slider/Slider.js +53 -105
  78. package/dist-cjs/slider/Slider.js.map +1 -1
  79. package/dist-cjs/slider/internal/SliderContext.js +21 -0
  80. package/dist-cjs/slider/internal/SliderContext.js.map +1 -0
  81. package/dist-cjs/slider/internal/SliderMarks.js +31 -0
  82. package/dist-cjs/slider/internal/SliderMarks.js.map +1 -0
  83. package/dist-cjs/slider/internal/SliderSelection.js +17 -10
  84. package/dist-cjs/slider/internal/SliderSelection.js.map +1 -1
  85. package/dist-cjs/slider/internal/SliderThumb.js +77 -0
  86. package/dist-cjs/slider/internal/SliderThumb.js.map +1 -0
  87. package/dist-cjs/slider/internal/SliderTrack.js +91 -0
  88. package/dist-cjs/slider/internal/SliderTrack.js.map +1 -0
  89. package/dist-cjs/slider/internal/useKeyDownThumb.js +53 -0
  90. package/dist-cjs/slider/internal/useKeyDownThumb.js.map +1 -0
  91. package/dist-cjs/slider/internal/utils.js +78 -116
  92. package/dist-cjs/slider/internal/utils.js.map +1 -1
  93. package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.css.js +1 -1
  94. package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.js +29 -25
  95. package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.js.map +1 -1
  96. package/dist-cjs/tabs/TabActivationIndicator.css.js +1 -1
  97. package/dist-cjs/tabs/Tabstrip.css.js +1 -1
  98. package/dist-cjs/tabs/useTabs.js.map +1 -1
  99. package/dist-cjs/toolbar/overflow-panel/OverflowPanel.css.js +1 -1
  100. package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  101. package/dist-es/calendar/Calendar.css.js +1 -1
  102. package/dist-es/calendar/Calendar.js +7 -16
  103. package/dist-es/calendar/Calendar.js.map +1 -1
  104. package/dist-es/calendar/CalendarNavigation.css.js +4 -0
  105. package/dist-es/calendar/CalendarNavigation.js +308 -0
  106. package/dist-es/calendar/CalendarNavigation.js.map +1 -0
  107. package/dist-es/calendar/formatDate.js +51 -0
  108. package/dist-es/calendar/formatDate.js.map +1 -0
  109. package/dist-es/calendar/internal/CalendarCarousel.js +3 -3
  110. package/dist-es/calendar/internal/CalendarCarousel.js.map +1 -1
  111. package/dist-es/calendar/internal/CalendarDay.css.js +1 -1
  112. package/dist-es/calendar/internal/CalendarDay.js +45 -33
  113. package/dist-es/calendar/internal/CalendarDay.js.map +1 -1
  114. package/dist-es/calendar/internal/CalendarMonth.js +3 -2
  115. package/dist-es/calendar/internal/CalendarMonth.js.map +1 -1
  116. package/dist-es/calendar/internal/CalendarWeekHeader.js +3 -3
  117. package/dist-es/calendar/internal/CalendarWeekHeader.js.map +1 -1
  118. package/dist-es/calendar/internal/useFocusManagement.js +7 -4
  119. package/dist-es/calendar/internal/useFocusManagement.js.map +1 -1
  120. package/dist-es/calendar/internal/utils.js +29 -23
  121. package/dist-es/calendar/internal/utils.js.map +1 -1
  122. package/dist-es/calendar/useCalendar.js +96 -47
  123. package/dist-es/calendar/useCalendar.js.map +1 -1
  124. package/dist-es/calendar/useCalendarDay.js +20 -11
  125. package/dist-es/calendar/useCalendarDay.js.map +1 -1
  126. package/dist-es/calendar/useCalendarSelection.js +350 -0
  127. package/dist-es/calendar/useCalendarSelection.js.map +1 -0
  128. package/dist-es/cascading-menu/internal/useMouseHandlers.js.map +1 -1
  129. package/dist-es/color-chooser/ColorChooser.js.map +1 -1
  130. package/dist-es/combo-box-deprecated/ComboBox.css.js +1 -1
  131. package/dist-es/common-hooks/useCollectionItems.js.map +1 -1
  132. package/dist-es/content-status/ContentStatus.css.js +1 -1
  133. package/dist-es/date-input/DateInput.css.js +1 -1
  134. package/dist-es/date-input/DateInputRange.js +351 -0
  135. package/dist-es/date-input/DateInputRange.js.map +1 -0
  136. package/dist-es/date-input/DateInputSingle.js +225 -0
  137. package/dist-es/date-input/DateInputSingle.js.map +1 -0
  138. package/dist-es/date-input/utils.js +57 -0
  139. package/dist-es/date-input/utils.js.map +1 -0
  140. package/dist-es/date-picker/DatePicker.js +43 -152
  141. package/dist-es/date-picker/DatePicker.js.map +1 -1
  142. package/dist-es/date-picker/DatePickerActions.css.js +4 -0
  143. package/dist-es/date-picker/DatePickerActions.css.js.map +1 -0
  144. package/dist-es/date-picker/DatePickerActions.js +98 -0
  145. package/dist-es/date-picker/DatePickerActions.js.map +1 -0
  146. package/dist-es/date-picker/DatePickerContext.js +22 -17
  147. package/dist-es/date-picker/DatePickerContext.js.map +1 -1
  148. package/dist-es/date-picker/DatePickerOverlay.css.js +4 -0
  149. package/dist-es/date-picker/DatePickerOverlay.css.js.map +1 -0
  150. package/dist-es/date-picker/DatePickerOverlay.js +46 -0
  151. package/dist-es/date-picker/DatePickerOverlay.js.map +1 -0
  152. package/dist-es/date-picker/DatePickerOverlayProvider.js +100 -0
  153. package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -0
  154. package/dist-es/date-picker/DatePickerPanel.css.js +1 -1
  155. package/dist-es/date-picker/DatePickerRangeInput.js +114 -0
  156. package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -0
  157. package/dist-es/date-picker/DatePickerRangePanel.js +198 -0
  158. package/dist-es/date-picker/DatePickerRangePanel.js.map +1 -0
  159. package/dist-es/date-picker/DatePickerSingleInput.js +93 -0
  160. package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -0
  161. package/dist-es/date-picker/DatePickerSinglePanel.js +130 -0
  162. package/dist-es/date-picker/DatePickerSinglePanel.js.map +1 -0
  163. package/dist-es/date-picker/useDatePicker.js +175 -0
  164. package/dist-es/date-picker/useDatePicker.js.map +1 -0
  165. package/dist-es/dropdown/Dropdown.css.js +1 -1
  166. package/dist-es/dropdown/DropdownBase.js +1 -1
  167. package/dist-es/dropdown/DropdownBase.js.map +1 -1
  168. package/dist-es/dropdown/useDropdown.js.map +1 -1
  169. package/dist-es/form-field-legacy/FormLabel.js.map +1 -1
  170. package/dist-es/index.js +14 -3
  171. package/dist-es/index.js.map +1 -1
  172. package/dist-es/list/List.js.map +1 -1
  173. package/dist-es/menu-button/MenuButtonTrigger.css.js +1 -1
  174. package/dist-es/query-input/QueryInput.css.js +1 -1
  175. package/dist-es/slider/Slider.css.js +1 -1
  176. package/dist-es/slider/Slider.js +55 -107
  177. package/dist-es/slider/Slider.js.map +1 -1
  178. package/dist-es/slider/internal/SliderContext.js +16 -0
  179. package/dist-es/slider/internal/SliderContext.js.map +1 -0
  180. package/dist-es/slider/internal/SliderMarks.js +27 -0
  181. package/dist-es/slider/internal/SliderMarks.js.map +1 -0
  182. package/dist-es/slider/internal/SliderSelection.js +17 -10
  183. package/dist-es/slider/internal/SliderSelection.js.map +1 -1
  184. package/dist-es/slider/internal/SliderThumb.js +73 -0
  185. package/dist-es/slider/internal/SliderThumb.js.map +1 -0
  186. package/dist-es/slider/internal/SliderTrack.js +87 -0
  187. package/dist-es/slider/internal/SliderTrack.js.map +1 -0
  188. package/dist-es/slider/internal/useKeyDownThumb.js +49 -0
  189. package/dist-es/slider/internal/useKeyDownThumb.js.map +1 -0
  190. package/dist-es/slider/internal/utils.js +70 -111
  191. package/dist-es/slider/internal/utils.js.map +1 -1
  192. package/dist-es/stepped-tracker/TrackerStep/TrackerStep.css.js +1 -1
  193. package/dist-es/stepped-tracker/TrackerStep/TrackerStep.js +30 -26
  194. package/dist-es/stepped-tracker/TrackerStep/TrackerStep.js.map +1 -1
  195. package/dist-es/tabs/TabActivationIndicator.css.js +1 -1
  196. package/dist-es/tabs/Tabstrip.css.js +1 -1
  197. package/dist-es/tabs/useTabs.js.map +1 -1
  198. package/dist-es/toolbar/overflow-panel/OverflowPanel.css.js +1 -1
  199. package/dist-es/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  200. package/dist-types/calendar/Calendar.d.ts +63 -5
  201. package/dist-types/calendar/CalendarNavigation.d.ts +57 -0
  202. package/dist-types/calendar/formatDate.d.ts +14 -0
  203. package/dist-types/calendar/index.d.ts +3 -1
  204. package/dist-types/calendar/internal/CalendarDay.d.ts +2 -1
  205. package/dist-types/calendar/internal/CalendarWeekHeader.d.ts +4 -4
  206. package/dist-types/calendar/internal/useFocusManagement.d.ts +2 -1
  207. package/dist-types/calendar/internal/utils.d.ts +7 -8
  208. package/dist-types/calendar/useCalendar.d.ts +100 -16
  209. package/dist-types/calendar/useCalendarDay.d.ts +38 -0
  210. package/dist-types/calendar/useCalendarSelection.d.ts +189 -0
  211. package/dist-types/date-input/DateInputRange.d.ts +150 -0
  212. package/dist-types/date-input/DateInputSingle.d.ts +117 -0
  213. package/dist-types/date-input/index.d.ts +3 -1
  214. package/dist-types/date-input/utils.d.ts +43 -0
  215. package/dist-types/date-picker/DatePicker.d.ts +20 -62
  216. package/dist-types/date-picker/DatePickerActions.d.ts +80 -0
  217. package/dist-types/date-picker/DatePickerContext.d.ts +180 -17
  218. package/dist-types/date-picker/DatePickerOverlay.d.ts +11 -0
  219. package/dist-types/date-picker/DatePickerOverlayProvider.d.ts +67 -0
  220. package/dist-types/date-picker/DatePickerRangeInput.d.ts +7 -0
  221. package/dist-types/date-picker/DatePickerRangePanel.d.ts +64 -0
  222. package/dist-types/date-picker/DatePickerSingleInput.d.ts +7 -0
  223. package/dist-types/date-picker/DatePickerSinglePanel.d.ts +42 -0
  224. package/dist-types/date-picker/index.d.ts +7 -0
  225. package/dist-types/date-picker/useDatePicker.d.ts +112 -0
  226. package/dist-types/slider/Slider.d.ts +23 -10
  227. package/dist-types/slider/internal/SliderContext.d.ts +11 -0
  228. package/dist-types/slider/internal/SliderMarks.d.ts +7 -0
  229. package/dist-types/slider/internal/SliderSelection.d.ts +3 -3
  230. package/dist-types/slider/internal/SliderThumb.d.ts +8 -0
  231. package/dist-types/slider/internal/SliderTrack.d.ts +4 -0
  232. package/dist-types/slider/internal/index.d.ts +3 -0
  233. package/dist-types/slider/internal/useKeyDownThumb.d.ts +2 -0
  234. package/dist-types/slider/internal/utils.d.ts +18 -10
  235. package/dist-types/slider/types.d.ts +3 -1
  236. package/dist-types/stepped-tracker/TrackerStep/TrackerStep.d.ts +11 -3
  237. package/package.json +3 -3
  238. package/dist-cjs/calendar/internal/CalendarNavigation.css.js +0 -6
  239. package/dist-cjs/calendar/internal/CalendarNavigation.js.map +0 -1
  240. package/dist-cjs/calendar/useSelection.js +0 -249
  241. package/dist-cjs/calendar/useSelection.js.map +0 -1
  242. package/dist-cjs/date-input/DateInput.js +0 -281
  243. package/dist-cjs/date-input/DateInput.js.map +0 -1
  244. package/dist-cjs/date-picker/DatePickerPanel.js +0 -155
  245. package/dist-cjs/date-picker/DatePickerPanel.js.map +0 -1
  246. package/dist-cjs/slider/internal/SliderHandle.js +0 -44
  247. package/dist-cjs/slider/internal/SliderHandle.js.map +0 -1
  248. package/dist-cjs/slider/internal/SliderMarkLabels.js +0 -45
  249. package/dist-cjs/slider/internal/SliderMarkLabels.js.map +0 -1
  250. package/dist-cjs/slider/internal/SliderRail.js +0 -25
  251. package/dist-cjs/slider/internal/SliderRail.js.map +0 -1
  252. package/dist-cjs/slider/internal/SliderRailMarks.js +0 -48
  253. package/dist-cjs/slider/internal/SliderRailMarks.js.map +0 -1
  254. package/dist-cjs/slider/internal/styles.js +0 -99
  255. package/dist-cjs/slider/internal/styles.js.map +0 -1
  256. package/dist-cjs/slider/internal/useSliderKeyDown.js +0 -50
  257. package/dist-cjs/slider/internal/useSliderKeyDown.js.map +0 -1
  258. package/dist-cjs/slider/internal/useSliderMouseDown.js +0 -96
  259. package/dist-cjs/slider/internal/useSliderMouseDown.js.map +0 -1
  260. package/dist-es/calendar/internal/CalendarNavigation.css.js +0 -4
  261. package/dist-es/calendar/internal/CalendarNavigation.js +0 -211
  262. package/dist-es/calendar/internal/CalendarNavigation.js.map +0 -1
  263. package/dist-es/calendar/useSelection.js +0 -242
  264. package/dist-es/calendar/useSelection.js.map +0 -1
  265. package/dist-es/date-input/DateInput.js +0 -277
  266. package/dist-es/date-input/DateInput.js.map +0 -1
  267. package/dist-es/date-picker/DatePickerPanel.js +0 -151
  268. package/dist-es/date-picker/DatePickerPanel.js.map +0 -1
  269. package/dist-es/slider/internal/SliderHandle.js +0 -40
  270. package/dist-es/slider/internal/SliderHandle.js.map +0 -1
  271. package/dist-es/slider/internal/SliderMarkLabels.js +0 -41
  272. package/dist-es/slider/internal/SliderMarkLabels.js.map +0 -1
  273. package/dist-es/slider/internal/SliderRail.js +0 -21
  274. package/dist-es/slider/internal/SliderRail.js.map +0 -1
  275. package/dist-es/slider/internal/SliderRailMarks.js +0 -44
  276. package/dist-es/slider/internal/SliderRailMarks.js.map +0 -1
  277. package/dist-es/slider/internal/styles.js +0 -91
  278. package/dist-es/slider/internal/styles.js.map +0 -1
  279. package/dist-es/slider/internal/useSliderKeyDown.js +0 -46
  280. package/dist-es/slider/internal/useSliderKeyDown.js.map +0 -1
  281. package/dist-es/slider/internal/useSliderMouseDown.js +0 -92
  282. package/dist-es/slider/internal/useSliderMouseDown.js.map +0 -1
  283. package/dist-types/calendar/internal/CalendarNavigation.d.ts +0 -15
  284. package/dist-types/calendar/useSelection.d.ts +0 -78
  285. package/dist-types/date-input/DateInput.d.ts +0 -56
  286. package/dist-types/date-picker/DatePickerPanel.d.ts +0 -10
  287. package/dist-types/slider/internal/SliderHandle.d.ts +0 -11
  288. package/dist-types/slider/internal/SliderMarkLabels.d.ts +0 -7
  289. package/dist-types/slider/internal/SliderRail.d.ts +0 -1
  290. package/dist-types/slider/internal/SliderRailMarks.d.ts +0 -12
  291. package/dist-types/slider/internal/styles.d.ts +0 -10
  292. package/dist-types/slider/internal/useSliderKeyDown.d.ts +0 -4
  293. package/dist-types/slider/internal/useSliderMouseDown.d.ts +0 -4
  294. /package/dist-cjs/calendar/{internal/CalendarNavigation.css.js.map → CalendarNavigation.css.js.map} +0 -0
  295. /package/dist-es/calendar/{internal/CalendarNavigation.css.js.map → CalendarNavigation.css.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDatePicker.js","sources":["../src/date-picker/useDatePicker.ts"],"sourcesContent":["import {\n CalendarDate,\n type DateValue,\n endOfMonth,\n getLocalTimeZone,\n startOfMonth,\n} from \"@internationalized/date\";\nimport { useControlled, useForkRef, useFormFieldProps } from \"@salt-ds/core\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n CALENDAR_MAX_YEAR,\n CALENDAR_MIN_YEAR,\n type DateRangeSelection,\n type SingleDateSelection,\n getCurrentLocale,\n} from \"../calendar\";\nimport type {\n RangeDatePickerError,\n RangeDatePickerState,\n SingleDatePickerError,\n SingleDatePickerState,\n} from \"./DatePickerContext\";\nimport { useDatePickerOverlay } from \"./DatePickerOverlayProvider\";\n\ninterface UseDatePickerBaseProps<T> {\n /** If `true`, the component is disabled. */\n disabled?: boolean;\n /** If `true`, the component is read-only. */\n readOnly?: boolean;\n /**\n * The selected date. The selected date will be controlled when this prop is provided.\n */\n selectedDate?: T | null;\n /**\n * The initial selected date, when the selected date is uncontrolled.\n */\n defaultSelectedDate?: UseDatePickerBaseProps<T>[\"selectedDate\"];\n /**\n * The minimum date for the range, default is 1900.\n */\n minDate?: DateValue;\n /**\n * The maximum date for the range, default is 2100.\n */\n maxDate?: DateValue;\n /**\n * Handler for when the date selection is cancelled.\n */\n onCancel?: () => void;\n /**\n * Time zone of the date selection, defaults to the current time zone of the user.\n */\n timeZone?: string;\n /**\n * Locale of the date selection, defaults to the current locale of the user.\n */\n locale?: string;\n}\n\n/**\n * Props for single date selection.\n *\n * @typedef {UseDatePickerBaseProps<SingleDateSelection>} UseDatePickerSingleProps\n * @property {\"single\"} selectionVariant - Single date selection.\n * @property {(selectedSingleDate: SingleDateSelection | null, singleError: string | false) => void} [onSelectedDateChange] - Handler called when the selected date changes.\n * @property {(appliedSingleDate: SingleDateSelection | null, singleError: string | false) => void} [onApply] - Handler called when the selected date is confirmed/applied.\n */\nexport interface UseDatePickerSingleProps\n extends UseDatePickerBaseProps<SingleDateSelection> {\n /**\n * Single date selection.\n */\n selectionVariant: \"single\";\n /**\n * Handler called when the selected date changes.\n * @param {SingleDateSelection | null} selectedSingleDate - The selected date.\n * @param {string | false} singleError - Error returned by the parser or `false`.\n */\n onSelectedDateChange?: (\n selectedSingleDate: SingleDateSelection | null,\n singleError: string | false,\n ) => void;\n /**\n * Handler called when the selected date is confirmed/applied.\n * @param {SingleDateSelection | null} appliedSingleDate - The selected date.\n * @param {string | false} singleError - Error returned by the parser or `false`.\n */\n onApply?: (\n appliedSingleDate: SingleDateSelection | null,\n singleError: string | false,\n ) => void;\n}\n\n/**\n * Props for date range selection.\n *\n * @typedef {UseDatePickerBaseProps<DateRangeSelection>} UseDatePickerRangeProps\n * @property {\"range\"} selectionVariant - Date range selection.\n * @property {(selectedRangeDate: DateRangeSelection | null, rangeError: { startDate: string | false; endDate: string | false }) => void} [onSelectedDateChange] - Handler called when the selected date changes.\n * @property {(appliedRangeDate: DateRangeSelection | null, rangeError: { startDate: string | false; endDate: string | false }) => void} [onApply] - Handler called when the selected date is confirmed/applied.\n */\nexport interface UseDatePickerRangeProps\n extends UseDatePickerBaseProps<DateRangeSelection> {\n /**\n * Date range selection.\n */\n selectionVariant: \"range\";\n /**\n * Handler called when the selected date changes.\n * @param {DateRangeSelection | null} selectedRangeDate - The selected date.\n * @param {{ startDate: string | false; endDate: string | false }} rangeError - Error returned by the parser or `false`.\n */\n onSelectedDateChange?: (\n selectedRangeDate: DateRangeSelection | null,\n rangeError: { startDate: string | false; endDate: string | false },\n ) => void;\n /**\n * Handler called when the selected date is confirmed/applied.\n * @param {DateRangeSelection | null} appliedRangeDate - The selected date.\n * @param {{ startDate: string | false; endDate: string | false }} rangeError - Error returned by the parser or `false`.\n */\n onApply?: (\n appliedRangeDate: DateRangeSelection | null,\n rangeError: { startDate: string | false; endDate: string | false },\n ) => void;\n}\n\n/**\n * Props for the useDatePicker hook.\n *\n * @template SelectionVariant\n * @typedef {SelectionVariant extends \"single\" ? UseDatePickerSingleProps : SelectionVariant extends \"range\" ? UseDatePickerRangeProps : never} UseDatePickerProps\n */\nexport type UseDatePickerProps<SelectionVariant> =\n SelectionVariant extends \"single\"\n ? UseDatePickerSingleProps\n : SelectionVariant extends \"range\"\n ? UseDatePickerRangeProps\n : never;\n\n/**\n * Custom hook for managing date picker state.\n *\n * @template SelectionVariant\n * @param {UseDatePickerProps<SelectionVariant>} props - The props for the date picker.\n * @param {React.ForwardedRef<HTMLDivElement>} ref - The ref for the date picker container.\n * @returns {DatePickerState<SelectionVariant extends \"single\" ? SingleDateSelection : DateRangeSelection>} The date picker state and helpers.\n */\nexport function useDatePicker<SelectionVariant extends \"single\" | \"range\">(\n props: UseDatePickerProps<SelectionVariant>,\n ref: React.ForwardedRef<HTMLDivElement>,\n): SingleDatePickerState | RangeDatePickerState {\n const {\n readOnly = false,\n disabled,\n selectionVariant,\n defaultSelectedDate = null,\n selectedDate: selectedDateProp,\n onSelectedDateChange,\n onApply,\n minDate: minDateProp,\n maxDate: maxDateProp,\n timeZone = getLocalTimeZone(),\n locale = getCurrentLocale(),\n onCancel,\n ...rest\n } = props;\n\n const minDate: DateValue =\n minDateProp ?? startOfMonth(new CalendarDate(CALENDAR_MIN_YEAR, 1, 1));\n const maxDate: DateValue =\n maxDateProp ?? endOfMonth(new CalendarDate(CALENDAR_MAX_YEAR, 1, 1));\n\n const datePickerRef = useRef<HTMLDivElement>(null);\n const containerRef = useForkRef(ref, datePickerRef);\n\n const {\n state: { open },\n helpers: { setOpen },\n } = useDatePickerOverlay();\n\n const [selectedDate, setSelectedDate] = useControlled({\n controlled: selectedDateProp,\n default: defaultSelectedDate,\n name: \"DatePicker\",\n state: \"selectedDate\",\n });\n\n const [enableApply, setEnableApply] = useState<boolean>(false);\n const [cancelled, setCancelled] = useState<boolean>(false);\n\n useEffect(() => {\n if (open) {\n setCancelled(false);\n }\n }, [open]);\n\n const { disabled: formFieldDisabled, readOnly: formFieldReadOnly } =\n useFormFieldProps();\n const isReadOnly = readOnly || formFieldReadOnly || false;\n const isDisabled = disabled || formFieldDisabled || false;\n\n const applySingle = (\n appliedDate: SingleDateSelection | null,\n error: SingleDatePickerError,\n ): void => {\n setCancelled(false);\n setOpen(false);\n if (selectionVariant === \"single\") {\n onApply?.(appliedDate, error);\n }\n };\n\n const setSelectedSingleDate = (\n selection: SingleDateSelection | null,\n error: SingleDatePickerError,\n ) => {\n let nextDate: typeof selection;\n let nextError = error;\n if (error || !selection) {\n nextDate = selection;\n } else {\n let dateAfterMinDate = true;\n let dateBeforeMaxDate = true;\n if (minDate && selection) {\n dateAfterMinDate = selection.compare(minDate) >= 0;\n }\n if (maxDate && selection) {\n dateBeforeMaxDate = selection.compare(maxDate) <= 0;\n }\n nextDate = dateAfterMinDate && dateBeforeMaxDate ? selection : null;\n nextError = !dateAfterMinDate ? \"is before min date\" : nextError;\n nextError = !dateBeforeMaxDate ? \"is after max date\" : nextError;\n }\n setSelectedDate(nextDate);\n if (selectionVariant === \"single\") {\n onSelectedDateChange?.(nextDate, error);\n }\n\n if (!enableApply) {\n setOpen(false);\n }\n };\n\n const applyRange = (\n appliedDate: DateRangeSelection | null,\n error: RangeDatePickerError,\n ): void => {\n setCancelled(false);\n if (appliedDate?.startDate && appliedDate?.endDate) {\n setOpen(false);\n }\n if (selectionVariant === \"range\") {\n onApply?.(appliedDate, error);\n }\n };\n\n const setSelectedRangeDate = (\n selection: DateRangeSelection | null,\n error: RangeDatePickerError,\n ) => {\n let nextDate: typeof selection;\n let nextError = { ...error };\n let startDateInRange = true;\n let endDateInRange = true;\n if (error?.startDate || error?.endDate || !selection) {\n nextDate = selection;\n } else {\n if (maxDate && selection?.startDate) {\n startDateInRange = selection.startDate.compare(minDate) >= 0;\n }\n if (maxDate && selection?.endDate) {\n endDateInRange =\n selection?.endDate && selection.endDate.compare(maxDate) <= 0;\n }\n if (!startDateInRange && !endDateInRange) {\n nextDate = null;\n nextError = {\n startDate: \"is before min date\",\n endDate: \"is after max date\",\n };\n } else {\n nextDate = {\n startDate: selection.startDate || null,\n endDate: selection.endDate || null,\n };\n nextError = {\n startDate: !startDateInRange\n ? \"is before min date\"\n : nextError.startDate,\n endDate: !endDateInRange ? \"is after max date\" : nextError.endDate,\n };\n }\n }\n setSelectedDate(nextDate);\n if (selectionVariant === \"range\") {\n onSelectedDateChange?.(nextDate, nextError);\n }\n if (!enableApply && nextDate?.startDate && nextDate?.endDate) {\n setOpen(false);\n }\n };\n\n const cancel = () => {\n setCancelled(true);\n setOpen(false);\n onCancel?.();\n };\n\n const returnValue = {\n state: {\n selectionVariant,\n selectedDate,\n cancelled,\n enableApply,\n disabled: isDisabled,\n readOnly: isReadOnly,\n containerRef,\n minDate,\n maxDate,\n locale,\n timeZone,\n ...rest,\n },\n helpers: {\n cancel,\n setEnableApply,\n },\n };\n if (props.selectionVariant === \"range\") {\n return {\n ...returnValue,\n helpers: {\n ...returnValue.helpers,\n apply: applyRange,\n setSelectedDate: setSelectedRangeDate,\n },\n } as RangeDatePickerState;\n }\n return {\n ...returnValue,\n helpers: {\n ...returnValue.helpers,\n apply: applySingle,\n setSelectedDate: setSelectedSingleDate,\n },\n } as SingleDatePickerState;\n}\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- var css_248z = ".saltDropdown {\n --saltIcon-margin: 2px 0 0 8px;\n display: inline-block;\n line-height: 0;\n position: relative;\n}\n\n.saltDropdown-fullWidth {\n width: 100%;\n}\n\n.saltDropdown-popup {\n background: var(--salt-container-primary-background);\n z-index: calc(var(--salt-zIndex-flyover) - 1);\n}\n";
1
+ var css_248z = ".saltDropdownBase {\n --saltIcon-margin: 2px 0 0 8px;\n display: inline-block;\n line-height: 0;\n position: relative;\n}\n\n.saltDropdownBase-fullWidth {\n width: 100%;\n}\n\n.saltDropdownBase-popup {\n background: var(--salt-container-primary-background);\n z-index: calc(var(--salt-zIndex-flyover) - 1);\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=Dropdown.css.js.map
@@ -12,7 +12,7 @@ import { useDropdownBase } from './useDropdownBase.js';
12
12
  import { useWindow } from '@salt-ds/window';
13
13
  import css_248z from './Dropdown.css.js';
14
14
 
15
- const withBaseName = makePrefixer("saltDropdown");
15
+ const withBaseName = makePrefixer("saltDropdownBase");
16
16
  const DropdownBase = forwardRef(
17
17
  function Dropdown({
18
18
  "aria-labelledby": ariaLabelledByProp,
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownBase.js","sources":["../src/dropdown/DropdownBase.tsx"],"sourcesContent":["import { flip, limitShift, shift, size } from \"@floating-ui/react\";\nimport {\n makePrefixer,\n useFloatingUI,\n useForkRef,\n useIdMemo as useId,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { clsx } from \"clsx\";\nimport { Children, cloneElement, forwardRef, useRef, useState } from \"react\";\nimport { Portal } from \"../portal\";\nimport { forwardCallbackProps } from \"../utils\";\nimport { isDesktop, useWindow as usePortalWindow } from \"../window\";\nimport type { DropdownBaseProps } from \"./dropdownTypes\";\nimport { useDropdownBase } from \"./useDropdownBase\";\n\nimport { useWindow } from \"@salt-ds/window\";\n\nimport dropdownCss from \"./Dropdown.css\";\n// Any component may be passed as our trigger or popup component.\n// Define the common props that we will act on, if present,\n// so we can type them.\nexport type MaybeChildProps = {\n className?: string;\n id?: string;\n role?: string;\n width: number | string;\n};\n\nconst withBaseName = makePrefixer(\"saltDropdown\");\n\nexport const DropdownBase = forwardRef<HTMLDivElement, DropdownBaseProps>(\n function Dropdown(\n {\n \"aria-labelledby\": ariaLabelledByProp,\n children,\n className: classNameProp,\n container,\n defaultIsOpen,\n disabled,\n disablePortal,\n fullWidth,\n id: idProp,\n isOpen: isOpenProp,\n onKeyDown,\n onOpenChange,\n openOnFocus,\n placement = \"bottom-start\",\n popupWidth,\n width,\n ...htmlAttributes\n },\n forwardedRef,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-dropdown\",\n css: dropdownCss,\n window: targetWindow,\n });\n\n const rootRef = useRef<HTMLDivElement>(null);\n const className = clsx(withBaseName(), classNameProp, {\n [withBaseName(\"fullWidth\")]: fullWidth,\n [withBaseName(\"disabled\")]: disabled,\n });\n const [trigger, popupComponent] = Children.toArray(\n children,\n ) as JSX.Element[];\n const id = useId(idProp);\n const Window = usePortalWindow();\n\n const { componentProps, popperRef, isOpen, triggerProps } = useDropdownBase(\n {\n ariaLabelledBy: ariaLabelledByProp,\n defaultIsOpen,\n disabled,\n fullWidth,\n id,\n isOpen: isOpenProp,\n onOpenChange,\n onKeyDown,\n openOnFocus,\n popupComponent,\n popupWidth,\n rootRef,\n width,\n },\n );\n const [maxPopupHeight, setMaxPopupHeight] = useState<number | undefined>(\n undefined,\n );\n\n const middleware = isDesktop\n ? []\n : [\n flip({\n fallbackPlacements: [\"bottom-start\", \"top-start\"],\n }),\n shift({ limiter: limitShift() }),\n size({\n apply({ availableHeight }) {\n setMaxPopupHeight(availableHeight);\n },\n }),\n ];\n\n const { reference, floating, x, y, strategy } = useFloatingUI({\n placement,\n middleware,\n });\n\n const handlePopperListAdapterRef = useForkRef<HTMLDivElement>(\n reference,\n forwardedRef,\n );\n const handleRootRef = useForkRef(rootRef, handlePopperListAdapterRef);\n const handleFloatingRef = useForkRef<HTMLDivElement>(floating, popperRef);\n // TODO maybe we should pass style, with maxHeight, to the popupComponent\n\n const getTriggerComponent = () => {\n const {\n id: defaultId,\n role: defaultRole,\n ...restTriggerProps\n } = triggerProps;\n\n const {\n id = defaultId,\n role = defaultRole,\n ...ownProps\n } = trigger.props as MaybeChildProps;\n\n return cloneElement(\n trigger,\n forwardCallbackProps(ownProps, {\n ...restTriggerProps,\n id,\n role,\n }),\n );\n };\n\n const getPopupComponent = () => {\n const { id: defaultId, width, ...restComponentProps } = componentProps;\n const {\n className,\n id = defaultId,\n width: ownWidth,\n ...ownProps\n } = popupComponent.props as MaybeChildProps;\n return cloneElement(popupComponent, {\n ...ownProps,\n ...restComponentProps,\n className: clsx(className, withBaseName(\"popup-component\")),\n id,\n width: ownWidth ?? width,\n });\n };\n\n return (\n <div\n {...htmlAttributes}\n className={className}\n data-testid=\"dropdown\"\n id={idProp}\n ref={handleRootRef}\n >\n {getTriggerComponent()}\n {isOpen && (\n <Portal disablePortal={disablePortal} container={container}>\n <Window\n className={clsx(withBaseName(\"popup\"), classNameProp)}\n id={`${id}-popup`}\n style={{\n top: y ?? 0,\n left: x ?? 0,\n position: strategy,\n maxHeight: maxPopupHeight,\n }}\n ref={handleFloatingRef}\n >\n {getPopupComponent()}\n </Window>\n </Portal>\n )}\n </div>\n );\n },\n);\n"],"names":["dropdownCss","useId","usePortalWindow","id","width","className"],"mappings":"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"}
1
+ {"version":3,"file":"DropdownBase.js","sources":["../src/dropdown/DropdownBase.tsx"],"sourcesContent":["import { flip, limitShift, shift, size } from \"@floating-ui/react\";\nimport {\n makePrefixer,\n useFloatingUI,\n useForkRef,\n useIdMemo as useId,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { clsx } from \"clsx\";\nimport { Children, cloneElement, forwardRef, useRef, useState } from \"react\";\nimport { Portal } from \"../portal\";\nimport { forwardCallbackProps } from \"../utils\";\nimport { isDesktop, useWindow as usePortalWindow } from \"../window\";\nimport type { DropdownBaseProps } from \"./dropdownTypes\";\nimport { useDropdownBase } from \"./useDropdownBase\";\n\nimport { useWindow } from \"@salt-ds/window\";\n\nimport dropdownCss from \"./Dropdown.css\";\n// Any component may be passed as our trigger or popup component.\n// Define the common props that we will act on, if present,\n// so we can type them.\nexport type MaybeChildProps = {\n className?: string;\n id?: string;\n role?: string;\n width: number | string;\n};\n\nconst withBaseName = makePrefixer(\"saltDropdownBase\");\n\nexport const DropdownBase = forwardRef<HTMLDivElement, DropdownBaseProps>(\n function Dropdown(\n {\n \"aria-labelledby\": ariaLabelledByProp,\n children,\n className: classNameProp,\n container,\n defaultIsOpen,\n disabled,\n disablePortal,\n fullWidth,\n id: idProp,\n isOpen: isOpenProp,\n onKeyDown,\n onOpenChange,\n openOnFocus,\n placement = \"bottom-start\",\n popupWidth,\n width,\n ...htmlAttributes\n },\n forwardedRef,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-dropdown\",\n css: dropdownCss,\n window: targetWindow,\n });\n\n const rootRef = useRef<HTMLDivElement>(null);\n const className = clsx(withBaseName(), classNameProp, {\n [withBaseName(\"fullWidth\")]: fullWidth,\n [withBaseName(\"disabled\")]: disabled,\n });\n const [trigger, popupComponent] = Children.toArray(\n children,\n ) as JSX.Element[];\n const id = useId(idProp);\n const Window = usePortalWindow();\n\n const { componentProps, popperRef, isOpen, triggerProps } = useDropdownBase(\n {\n ariaLabelledBy: ariaLabelledByProp,\n defaultIsOpen,\n disabled,\n fullWidth,\n id,\n isOpen: isOpenProp,\n onOpenChange,\n onKeyDown,\n openOnFocus,\n popupComponent,\n popupWidth,\n rootRef,\n width,\n },\n );\n const [maxPopupHeight, setMaxPopupHeight] = useState<number | undefined>(\n undefined,\n );\n\n const middleware = isDesktop\n ? []\n : [\n flip({\n fallbackPlacements: [\"bottom-start\", \"top-start\"],\n }),\n shift({ limiter: limitShift() }),\n size({\n apply({ availableHeight }) {\n setMaxPopupHeight(availableHeight);\n },\n }),\n ];\n\n const { reference, floating, x, y, strategy } = useFloatingUI({\n placement,\n middleware,\n });\n\n const handlePopperListAdapterRef = useForkRef<HTMLDivElement>(\n reference,\n forwardedRef,\n );\n const handleRootRef = useForkRef(rootRef, handlePopperListAdapterRef);\n const handleFloatingRef = useForkRef<HTMLDivElement>(floating, popperRef);\n // TODO maybe we should pass style, with maxHeight, to the popupComponent\n\n const getTriggerComponent = () => {\n const {\n id: defaultId,\n role: defaultRole,\n ...restTriggerProps\n } = triggerProps;\n\n const {\n id = defaultId,\n role = defaultRole,\n ...ownProps\n } = trigger.props as MaybeChildProps;\n\n return cloneElement(\n trigger,\n forwardCallbackProps(ownProps, {\n ...restTriggerProps,\n id,\n role,\n }),\n );\n };\n\n const getPopupComponent = () => {\n const { id: defaultId, width, ...restComponentProps } = componentProps;\n const {\n className,\n id = defaultId,\n width: ownWidth,\n ...ownProps\n } = popupComponent.props as MaybeChildProps;\n return cloneElement(popupComponent, {\n ...ownProps,\n ...restComponentProps,\n className: clsx(className, withBaseName(\"popup-component\")),\n id,\n width: ownWidth ?? width,\n });\n };\n\n return (\n <div\n {...htmlAttributes}\n className={className}\n data-testid=\"dropdown\"\n id={idProp}\n ref={handleRootRef}\n >\n {getTriggerComponent()}\n {isOpen && (\n <Portal disablePortal={disablePortal} container={container}>\n <Window\n className={clsx(withBaseName(\"popup\"), classNameProp)}\n id={`${id}-popup`}\n style={{\n top: y ?? 0,\n left: x ?? 0,\n position: strategy,\n maxHeight: maxPopupHeight,\n }}\n ref={handleFloatingRef}\n >\n {getPopupComponent()}\n </Window>\n </Portal>\n )}\n </div>\n );\n },\n);\n"],"names":["dropdownCss","useId","usePortalWindow","id","width","className"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDropdown.js","sources":["../src/dropdown/useDropdown.ts"],"sourcesContent":["import { useControlled } from \"@salt-ds/core\";\nimport { useCallback, useMemo } from \"react\";\nimport {\n type CollectionItem,\n type SelectHandler,\n type SelectionChangeHandler,\n type SelectionStrategy,\n itemToString as defaultItemToString,\n} from \"../common-hooks\";\nimport { type ListHookProps, type ListHookResult, useList } from \"../list\";\nimport type { DropdownHookProps, DropdownHookResult } from \"./dropdownTypes\";\n\nconst NULL_REF = { current: null };\n\nexport interface DropdownListHookProps<Item, Strategy extends SelectionStrategy>\n extends Partial<Omit<DropdownHookProps, \"onKeyDown\">>,\n Omit<ListHookProps<Item, Strategy>, \"containerRef\"> {\n itemToString?: (item: Item) => string;\n}\n\nexport interface DropdownListHookResult<\n Item,\n Selection extends SelectionStrategy,\n> extends Partial<ListHookResult<Item, Selection>>,\n Partial<DropdownHookResult> {\n onOpenChange: any;\n triggerLabel?: string;\n}\n\nexport const useDropdown = <\n Item,\n Selection extends SelectionStrategy = \"default\",\n>({\n collectionHook,\n defaultHighlightedIndex: defaultHighlightedIndexProp,\n defaultIsOpen,\n defaultSelected,\n highlightedIndex: highlightedIndexProp,\n isOpen: isOpenProp,\n itemToString = defaultItemToString,\n onHighlight,\n onOpenChange,\n onSelectionChange,\n onSelect,\n selected,\n selectionStrategy,\n}: DropdownListHookProps<Item, Selection>): DropdownListHookResult<\n Item,\n Selection\n> => {\n const isMultiSelect =\n selectionStrategy === \"multiple\" || selectionStrategy === \"extended\";\n\n const [isOpen, setIsOpen] = useControlled<boolean>({\n controlled: isOpenProp,\n default: defaultIsOpen ?? false,\n name: \"useDropdownList\",\n });\n\n const handleSelectionChange = useCallback<\n SelectionChangeHandler<Item, Selection>\n >(\n (evt, selected) => {\n if (!isMultiSelect) {\n setIsOpen(false);\n onOpenChange?.(false);\n }\n onSelectionChange?.(evt, selected);\n },\n [isMultiSelect, onOpenChange, onSelectionChange],\n );\n\n const handleSelect = useCallback<SelectHandler<Item>>(\n (evt, selected) => {\n if (!isMultiSelect) {\n setIsOpen(false);\n onOpenChange?.(false);\n }\n onSelect?.(evt, selected);\n },\n [isMultiSelect, onOpenChange, onSelect],\n );\n\n const listHook = useList<Item, Selection>({\n collectionHook,\n defaultHighlightedIndex:\n defaultHighlightedIndexProp ?? highlightedIndexProp === undefined\n ? 0\n : undefined,\n defaultSelected,\n label: \"useDropDownList\",\n onSelectionChange: handleSelectionChange,\n onSelect: handleSelect,\n containerRef: NULL_REF,\n highlightedIndex: highlightedIndexProp,\n onHighlight,\n selected,\n selectionStrategy,\n tabToSelect: !isMultiSelect,\n });\n\n const handleOpenChange = useCallback(\n (open: boolean) => {\n setIsOpen(open);\n onOpenChange?.(open);\n },\n [onOpenChange],\n );\n\n const triggerLabel = useMemo(() => {\n if (isMultiSelect && Array.isArray(listHook.selected)) {\n const selectedItems = listHook.selected as CollectionItem<Item>[];\n if (selectedItems.length === 0) {\n return undefined;\n }\n if (selectedItems.length === 1) {\n const { value } = selectedItems[0];\n return value === null ? undefined : itemToString(value);\n }\n return `${selectedItems.length} items selected`;\n }\n const selectedItem = listHook.selected as CollectionItem<Item>;\n return selectedItem == null || selectedItem.value === null\n ? undefined\n : itemToString(selectedItem.value);\n }, [isMultiSelect, itemToString, listHook.selected]);\n\n return {\n isOpen,\n onOpenChange: handleOpenChange,\n triggerLabel,\n ...listHook,\n };\n};\n"],"names":["itemToString","defaultItemToString","selected"],"mappings":"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"}
1
+ {"version":3,"file":"useDropdown.js","sources":["../src/dropdown/useDropdown.ts"],"sourcesContent":["import { useControlled } from \"@salt-ds/core\";\nimport { useCallback, useMemo } from \"react\";\nimport {\n type CollectionItem,\n type SelectHandler,\n type SelectionChangeHandler,\n type SelectionStrategy,\n itemToString as defaultItemToString,\n} from \"../common-hooks\";\nimport { type ListHookProps, type ListHookResult, useList } from \"../list\";\nimport type { DropdownHookProps, DropdownHookResult } from \"./dropdownTypes\";\n\nconst NULL_REF = { current: null };\n\nexport interface DropdownListHookProps<Item, Strategy extends SelectionStrategy>\n extends Partial<Omit<DropdownHookProps, \"onKeyDown\">>,\n Omit<ListHookProps<Item, Strategy>, \"containerRef\"> {\n itemToString?: (item: Item) => string;\n}\n\nexport interface DropdownListHookResult<\n Item,\n Selection extends SelectionStrategy,\n> extends Partial<ListHookResult<Item, Selection>>,\n Partial<DropdownHookResult> {\n onOpenChange: any;\n triggerLabel?: string;\n}\n\nexport const useDropdown = <\n Item,\n Selection extends SelectionStrategy = \"default\",\n>({\n collectionHook,\n defaultHighlightedIndex: defaultHighlightedIndexProp,\n defaultIsOpen,\n defaultSelected,\n highlightedIndex: highlightedIndexProp,\n isOpen: isOpenProp,\n itemToString = defaultItemToString,\n onHighlight,\n onOpenChange,\n onSelectionChange,\n onSelect,\n selected,\n selectionStrategy,\n}: DropdownListHookProps<Item, Selection>): DropdownListHookResult<\n Item,\n Selection\n> => {\n const isMultiSelect =\n selectionStrategy === \"multiple\" || selectionStrategy === \"extended\";\n\n const [isOpen, setIsOpen] = useControlled<boolean>({\n controlled: isOpenProp,\n default: defaultIsOpen ?? false,\n name: \"useDropdownList\",\n });\n\n const handleSelectionChange = useCallback<\n SelectionChangeHandler<Item, Selection>\n >(\n (evt, selected) => {\n if (!isMultiSelect) {\n setIsOpen(false);\n onOpenChange?.(false);\n }\n onSelectionChange?.(evt, selected);\n },\n [isMultiSelect, onOpenChange, onSelectionChange],\n );\n\n const handleSelect = useCallback<SelectHandler<Item>>(\n (evt, selected) => {\n if (!isMultiSelect) {\n setIsOpen(false);\n onOpenChange?.(false);\n }\n onSelect?.(evt, selected);\n },\n [isMultiSelect, onOpenChange, onSelect],\n );\n\n const listHook = useList<Item, Selection>({\n collectionHook,\n defaultHighlightedIndex:\n (defaultHighlightedIndexProp ?? highlightedIndexProp === undefined)\n ? 0\n : undefined,\n defaultSelected,\n label: \"useDropDownList\",\n onSelectionChange: handleSelectionChange,\n onSelect: handleSelect,\n containerRef: NULL_REF,\n highlightedIndex: highlightedIndexProp,\n onHighlight,\n selected,\n selectionStrategy,\n tabToSelect: !isMultiSelect,\n });\n\n const handleOpenChange = useCallback(\n (open: boolean) => {\n setIsOpen(open);\n onOpenChange?.(open);\n },\n [onOpenChange],\n );\n\n const triggerLabel = useMemo(() => {\n if (isMultiSelect && Array.isArray(listHook.selected)) {\n const selectedItems = listHook.selected as CollectionItem<Item>[];\n if (selectedItems.length === 0) {\n return undefined;\n }\n if (selectedItems.length === 1) {\n const { value } = selectedItems[0];\n return value === null ? undefined : itemToString(value);\n }\n return `${selectedItems.length} items selected`;\n }\n const selectedItem = listHook.selected as CollectionItem<Item>;\n return selectedItem == null || selectedItem.value === null\n ? undefined\n : itemToString(selectedItem.value);\n }, [isMultiSelect, itemToString, listHook.selected]);\n\n return {\n isOpen,\n onOpenChange: handleOpenChange,\n triggerLabel,\n ...listHook,\n };\n};\n"],"names":["itemToString","defaultItemToString","selected"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FormLabel.js","sources":["../src/form-field-legacy/FormLabel.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport type { ElementType, HTMLAttributes } from \"react\";\nimport type { FormFieldValidationStatus } from \"./FormFieldLegacy\";\nimport {\n NecessityIndicator as DefaultNecessityIndicator,\n type NecessityIndicatorOptions,\n} from \"./NecessityIndicator\";\nimport { StatusIndicator, type StatusIndicatorProps } from \"./StatusIndicator\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport formLabelCss from \"./FormLabel.css\";\n\nconst withBaseName = makePrefixer(\"saltFormLabel\");\nexport interface FormLabelProps\n extends HTMLAttributes<HTMLLabelElement>,\n NecessityIndicatorOptions {\n /**\n * Whether the form field is disabled.\n */\n disabled?: boolean;\n /**\n * Adjusts whether the StatusIndicator component is shown\n */\n hasStatusIndicator?: boolean;\n /**\n * The label value for the FormLabel\n */\n label?: string;\n /**\n * An optional renderer function used to customize the necessity adornment\n */\n NecessityIndicator?: ElementType<NecessityIndicatorOptions>;\n /**\n * Whether the form field is readOnly.\n */\n readOnly?: boolean;\n /**\n * Props used to configure the StatusIndicator component if hasStatusIndicator is true\n */\n StatusIndicatorProps?: Partial<StatusIndicatorProps>;\n /**\n * The status for the FormField: Must be one of: 'error'|'warning'|undefined\n */\n validationStatus?: FormFieldValidationStatus;\n /**\n * Text to be shown in the Tooltip.\n */\n tooltipText?: string;\n}\n\nexport const FormLabel = ({\n label,\n NecessityIndicator = DefaultNecessityIndicator,\n required,\n displayedNecessity,\n hasStatusIndicator = false,\n StatusIndicatorProps,\n validationStatus,\n necessityText,\n className,\n disabled,\n readOnly,\n tooltipText,\n ...restProps\n}: FormLabelProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-form-label\",\n css: formLabelCss,\n window: targetWindow,\n });\n\n return (\n <label\n className={clsx(withBaseName(), className, {\n [withBaseName(\"disabled\")]: disabled,\n })}\n {...restProps}\n >\n {label}\n\n <NecessityIndicator\n required={required}\n displayedNecessity={displayedNecessity}\n necessityText={necessityText}\n className={withBaseName(\"necessityIndicator\")}\n />\n {hasStatusIndicator && (\n <StatusIndicator\n className={withBaseName(\"statusIndicator\")}\n status={validationStatus}\n tooltipText={tooltipText}\n hasTooltip\n {...StatusIndicatorProps}\n />\n )}\n </label>\n );\n};\n"],"names":["NecessityIndicator","DefaultNecessityIndicator","formLabelCss"],"mappings":";;;;;;;;;AAeA,MAAM,YAAA,GAAe,aAAa,eAAe,CAAA,CAAA;AAsC1C,MAAM,YAAY,CAAC;AAAA,EACxB,KAAA;AAAA,sBACAA,oBAAqB,GAAAC,kBAAA;AAAA,EACrB,QAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAqB,GAAA,KAAA;AAAA,EACrB,oBAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACG,GAAA,SAAA;AACL,CAAsB,KAAA;AACpB,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAAC,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,uBACG,IAAA,CAAA,OAAA,EAAA;AAAA,IACC,SAAW,EAAA,IAAA,CAAK,YAAa,EAAA,EAAG,SAAW,EAAA;AAAA,MACzC,CAAC,YAAa,CAAA,UAAU,CAAI,GAAA,QAAA;AAAA,KAC7B,CAAA;AAAA,IACA,GAAG,SAAA;AAAA,IAEH,QAAA,EAAA;AAAA,MAAA,KAAA;AAAA,sBAEA,GAAA,CAAAF,oBAAA,EAAA;AAAA,QACC,QAAA;AAAA,QACA,kBAAA;AAAA,QACA,aAAA;AAAA,QACA,SAAA,EAAW,aAAa,oBAAoB,CAAA;AAAA,OAC9C,CAAA;AAAA,MACC,sCACE,GAAA,CAAA,eAAA,EAAA;AAAA,QACC,SAAA,EAAW,aAAa,iBAAiB,CAAA;AAAA,QACzC,MAAQ,EAAA,gBAAA;AAAA,QACR,WAAA;AAAA,QACA,UAAU,EAAA,IAAA;AAAA,QACT,GAAG,oBAAA;AAAA,OACN,CAAA;AAAA,KAAA;AAAA,GAEJ,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"FormLabel.js","sources":["../src/form-field-legacy/FormLabel.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport type { ElementType, HTMLAttributes } from \"react\";\nimport type { FormFieldValidationStatus } from \"./FormFieldLegacy\";\nimport {\n NecessityIndicator as DefaultNecessityIndicator,\n type NecessityIndicatorOptions,\n} from \"./NecessityIndicator\";\nimport { StatusIndicator, type StatusIndicatorProps } from \"./StatusIndicator\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport formLabelCss from \"./FormLabel.css\";\n\nconst withBaseName = makePrefixer(\"saltFormLabel\");\nexport interface FormLabelProps\n extends HTMLAttributes<HTMLLabelElement>,\n NecessityIndicatorOptions {\n /**\n * Whether the form field is disabled.\n */\n disabled?: boolean;\n /**\n * Adjusts whether the StatusIndicator component is shown\n */\n hasStatusIndicator?: boolean;\n /**\n * The label value for the FormLabel\n */\n label?: string;\n /**\n * An optional renderer function used to customize the necessity adornment\n */\n NecessityIndicator?: ElementType<NecessityIndicatorOptions>;\n /**\n * Whether the form field is readOnly.\n */\n readOnly?: boolean;\n /**\n * Props used to configure the StatusIndicator component if hasStatusIndicator is true\n */\n StatusIndicatorProps?: Partial<StatusIndicatorProps>;\n /**\n * The status for the FormField: Must be one of: 'error'|'warning'|undefined\n */\n validationStatus?: FormFieldValidationStatus;\n /**\n * Text to be shown in the Tooltip.\n */\n tooltipText?: string;\n}\n\nexport const FormLabel = ({\n label,\n NecessityIndicator = DefaultNecessityIndicator,\n required,\n displayedNecessity,\n hasStatusIndicator = false,\n StatusIndicatorProps,\n validationStatus,\n necessityText,\n className,\n disabled,\n readOnly,\n tooltipText,\n ...restProps\n}: FormLabelProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-form-label\",\n css: formLabelCss,\n window: targetWindow,\n });\n\n return (\n // biome-ignore lint/a11y/noLabelWithoutControl: this is a label for a form field and will wrap a form control\n <label\n className={clsx(withBaseName(), className, {\n [withBaseName(\"disabled\")]: disabled,\n })}\n {...restProps}\n >\n {label}\n\n <NecessityIndicator\n required={required}\n displayedNecessity={displayedNecessity}\n necessityText={necessityText}\n className={withBaseName(\"necessityIndicator\")}\n />\n {hasStatusIndicator && (\n <StatusIndicator\n className={withBaseName(\"statusIndicator\")}\n status={validationStatus}\n tooltipText={tooltipText}\n hasTooltip\n {...StatusIndicatorProps}\n />\n )}\n </label>\n );\n};\n"],"names":["NecessityIndicator","DefaultNecessityIndicator","formLabelCss"],"mappings":";;;;;;;;;AAeA,MAAM,YAAA,GAAe,aAAa,eAAe,CAAA,CAAA;AAsC1C,MAAM,YAAY,CAAC;AAAA,EACxB,KAAA;AAAA,sBACAA,oBAAqB,GAAAC,kBAAA;AAAA,EACrB,QAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAqB,GAAA,KAAA;AAAA,EACrB,oBAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACG,GAAA,SAAA;AACL,CAAsB,KAAA;AACpB,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAAC,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,uBAEG,IAAA,CAAA,OAAA,EAAA;AAAA,IACC,SAAW,EAAA,IAAA,CAAK,YAAa,EAAA,EAAG,SAAW,EAAA;AAAA,MACzC,CAAC,YAAa,CAAA,UAAU,CAAI,GAAA,QAAA;AAAA,KAC7B,CAAA;AAAA,IACA,GAAG,SAAA;AAAA,IAEH,QAAA,EAAA;AAAA,MAAA,KAAA;AAAA,sBAEA,GAAA,CAAAF,oBAAA,EAAA;AAAA,QACC,QAAA;AAAA,QACA,kBAAA;AAAA,QACA,aAAA;AAAA,QACA,SAAA,EAAW,aAAa,oBAAoB,CAAA;AAAA,OAC9C,CAAA;AAAA,MACC,sCACE,GAAA,CAAA,eAAA,EAAA;AAAA,QACC,SAAA,EAAW,aAAa,iBAAiB,CAAA;AAAA,QACzC,MAAQ,EAAA,gBAAA;AAAA,QACR,WAAA;AAAA,QACA,UAAU,EAAA,IAAA;AAAA,QACT,GAAG,oBAAA;AAAA,OACN,CAAA;AAAA,KAAA;AAAA,GAEJ,CAAA,CAAA;AAEJ;;;;"}
package/dist-es/index.js CHANGED
@@ -25,9 +25,11 @@ export { Breadcrumbs } from './breadcrumbs/Breadcrumbs.js';
25
25
  export { ButtonBar, DefaultButtonsOrderByVariant } from './button-bar/ButtonBar.js';
26
26
  export { OrderedButton } from './button-bar/OrderedButton.js';
27
27
  export { Calendar } from './calendar/Calendar.js';
28
+ export { CalendarNavigation } from './calendar/CalendarNavigation.js';
28
29
  export { useCalendarDay } from './calendar/useCalendarDay.js';
29
30
  export { useCalendar } from './calendar/useCalendar.js';
30
- export { isRangeOrOffsetSelectionValue, isRangeOrOffsetSelectionWithStartDate, useSelectionCalendar, useSelectionDay } from './calendar/useSelection.js';
31
+ export { CALENDAR_MAX_YEAR, CALENDAR_MIN_YEAR, isDateRangeSelection, isMultipleDateSelection, isSingleSelectionValueType, useCalendarSelection, useCalendarSelectionDay } from './calendar/useCalendarSelection.js';
32
+ export { formatDate, getCurrentLocale } from './calendar/formatDate.js';
31
33
  export { Carousel } from './carousel/Carousel.js';
32
34
  export { CarouselSlide } from './carousel/CarouselSlide.js';
33
35
  export { CascadingMenu } from './cascading-menu/CascadingMenu.js';
@@ -54,8 +56,17 @@ export { ContactTertiaryInfo } from './contact-details/ContactTertiaryInfo.js';
54
56
  export { ContactFavoriteToggle } from './contact-details/ContactFavoriteToggle.js';
55
57
  export { MailLinkComponent } from './contact-details/MailLinkComponent.js';
56
58
  export { ContentStatus } from './content-status/ContentStatus.js';
57
- export { DateInput } from './date-input/DateInput.js';
58
- export { DatePicker } from './date-picker/DatePicker.js';
59
+ export { DateInputSingle } from './date-input/DateInputSingle.js';
60
+ export { DateInputRange } from './date-input/DateInputRange.js';
61
+ export { dateSupportsTime, extractTimeFieldsFromDate, extractTimeFieldsFromDateRange, parseCalendarDate, parseZonedDateTime } from './date-input/utils.js';
62
+ export { DatePicker, DatePickerMain } from './date-picker/DatePicker.js';
63
+ export { DatePickerActions } from './date-picker/DatePickerActions.js';
64
+ export { DateRangeSelectionContext, SingleDateSelectionContext, useDatePickerContext } from './date-picker/DatePickerContext.js';
65
+ export { DatePickerOverlay } from './date-picker/DatePickerOverlay.js';
66
+ export { DatePickerSingleInput } from './date-picker/DatePickerSingleInput.js';
67
+ export { DatePickerSinglePanel } from './date-picker/DatePickerSinglePanel.js';
68
+ export { DatePickerRangeInput } from './date-picker/DatePickerRangeInput.js';
69
+ export { DatePickerRangePanel } from './date-picker/DatePickerRangePanel.js';
59
70
  export { DeckItem } from './deck-item/DeckItem.js';
60
71
  export { DeckLayout } from './deck-layout/DeckLayout.js';
61
72
  export { DropdownBase } from './dropdown/DropdownBase.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"List.js","sources":["../src/list/List.tsx"],"sourcesContent":["import { makePrefixer, useForkRef, useIdMemo } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport {\n type ForwardedRef,\n type ReactElement,\n cloneElement,\n forwardRef,\n isValidElement,\n useRef,\n} from \"react\";\nimport {\n type CollectionIndexer,\n type CollectionItem,\n LIST_FOCUS_VISIBLE,\n type ScrollingAPI,\n type SelectionStrategy,\n itemToString as defaultItemToString,\n isSelected,\n useCollectionItems,\n useImperativeScrollingAPI,\n} from \"../common-hooks\";\n\nimport { ListItem as DefaultListItem, ListItemProxy } from \"./ListItem\";\nimport type { ListItemProps, ListProps } from \"./listTypes\";\nimport { useList } from \"./useList\";\nimport { useListHeight } from \"./useListHeight\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport listCss from \"./List.css\";\n\nconst defaultEmptyMessage = \"No data to display\";\n\nconst withBaseName = makePrefixer(\"saltList\");\n\nexport const List = forwardRef(function List<\n Item,\n Selection extends SelectionStrategy = \"default\",\n>(\n {\n ListItem = DefaultListItem,\n ListPlaceholder,\n borderless,\n children,\n className,\n collapsibleHeaders = false,\n defaultHighlightedIndex,\n defaultSelected,\n disabled: listDisabled = false,\n disableFocus = false,\n disableTypeToSelect,\n displayedItemCount = 10,\n emptyMessage,\n focusVisible: focusVisibleProp,\n getItemHeight: getItemHeightProp,\n getItemId,\n height,\n highlightedIndex: highlightedIndexProp,\n id: idProp,\n itemGapSize = 0,\n itemHeight: itemHeightProp,\n itemTextHighlightPattern,\n itemToString = defaultItemToString,\n listHandlers: listHandlersProp,\n maxHeight,\n maxWidth,\n minHeight,\n minWidth,\n onSelect,\n onSelectionChange,\n onHighlight,\n restoreLastFocus,\n selected: selectedProp,\n selectionStrategy,\n checkable = selectionStrategy === \"multiple\",\n scrollingApiRef,\n // TODO do we still need these ?\n selectionKeys,\n showEmptyMessage = false,\n source,\n style: styleProp,\n stickyHeaders,\n tabToSelect,\n width,\n ...htmlAttributes\n }: ListProps<Item, Selection>,\n forwardedRef?: ForwardedRef<HTMLDivElement>,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-list\",\n css: listCss,\n window: targetWindow,\n });\n\n const id = useIdMemo(idProp);\n const rootRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const rowHeightProxyRef = useRef<HTMLDivElement>(null);\n\n const collectionHook = useCollectionItems<Item>({\n id,\n label: \"List\",\n source,\n children,\n options: {\n collapsibleHeaders,\n // Add Group ChildTypes to options\n getItemId,\n itemToString,\n },\n });\n\n const { preferredHeight } = useListHeight({\n borderless,\n displayedItemCount,\n getItemHeight: getItemHeightProp,\n height,\n itemCount: collectionHook.data.length,\n itemGapSize,\n itemHeight: itemHeightProp,\n rowHeightRef: rowHeightProxyRef,\n });\n\n const {\n focusVisible,\n highlightedIndex,\n listControlProps,\n listHandlers,\n listItemHeaderHandlers,\n scrollIntoView,\n selected,\n } = useList<Item, Selection>({\n collapsibleHeaders,\n collectionHook,\n containerRef: rootRef,\n contentRef,\n defaultHighlightedIndex,\n defaultSelected: collectionHook.itemToCollectionItem<\n Selection,\n typeof defaultSelected\n >(defaultSelected),\n disabled: listDisabled,\n disableTypeToSelect,\n highlightedIndex: highlightedIndexProp,\n label: id,\n listHandlers: listHandlersProp, // should this be in context ?\n onSelect,\n onSelectionChange,\n onHighlight,\n restoreLastFocus,\n selected: collectionHook.itemToCollectionItem<\n Selection,\n typeof defaultSelected\n >(selectedProp),\n selectionStrategy,\n selectionKeys,\n stickyHeaders,\n tabToSelect,\n });\n\n useImperativeScrollingAPI({\n collectionHook,\n forwardedRef: scrollingApiRef,\n scrollableRef: rootRef,\n scrollIntoView,\n });\n\n // focusVisible passes as a prop takes precedence\n const appliedFocusVisible = focusVisibleProp ?? focusVisible;\n\n const createHeader: (\n idx: { value: number },\n headerId: string,\n title: string,\n expanded?: boolean,\n ) => ReactElement = function createHeader(idx, headerId, title, expanded) {\n const header = (\n <ListItem\n {...listItemHeaderHandlers}\n className={clsx(\"saltListItemHeader\", {\n focusVisible: collapsibleHeaders && appliedFocusVisible === idx.value,\n })}\n aria-expanded={expanded}\n data-idx={collapsibleHeaders ? idx.value : undefined}\n data-highlighted={idx.value === highlightedIndex || undefined}\n data-sticky={stickyHeaders}\n data-selectable={false}\n id={headerId}\n key={`header-${idx.value}`}\n label={title}\n // role=\"presentation\"\n />\n );\n idx.value += 1;\n return header;\n };\n\n const getItemHeight =\n getItemHeightProp === undefined ? () => itemHeightProp : getItemHeightProp;\n\n function renderCollectionItem(\n list: ReactElement[],\n item: CollectionItem<Item>,\n idx: { value: number },\n ) {\n // Note, a number of these props are specific to ListItem. What if user\n // implements a custom ListItem but neglects to handle all these props.\n // Is that on them ?\n const { disabled, value, id: itemId, label } = item;\n const isChildItem = isValidElement(value);\n const listItemProps: ListItemProps<Item> & {\n key: string;\n \"data-idx\": number;\n } = {\n className: clsx({\n saltHighlighted: idx.value === highlightedIndex,\n saltFocusVisible: appliedFocusVisible === idx.value,\n }),\n disabled: disabled || listDisabled,\n id: itemId,\n item: isChildItem ? undefined : item?.value ?? undefined,\n itemHeight: getItemHeight(idx.value),\n itemTextHighlightPattern,\n key: itemId,\n \"data-idx\": idx.value,\n label,\n role: \"option\",\n selected: isSelected<Item>(selected, item),\n showCheckbox: checkable,\n };\n list.push(\n isChildItem ? (\n cloneElement(value, listItemProps)\n ) : (\n <ListItem {...listItemProps} />\n ),\n );\n\n idx.value += 1;\n }\n\n const addGroup: (\n list: ReactElement[],\n items: CollectionItem<Item>[],\n idx: { value: number },\n ) => void = function addGroup(\n list: ReactElement[],\n items: CollectionItem<Item>[],\n idx: { value: number },\n ) {\n const { count = 0, id, expanded, label = \"\" } = items[idx.value];\n const header = createHeader(idx, id, label, expanded);\n const childItems: ReactElement | ReactElement[] =\n expanded !== false\n ? [header].concat(\n renderCollectionItems(items, idx, idx.value + count) || [],\n )\n : header;\n\n list.push(\n <div key={id} role=\"group\">\n {childItems}\n </div>,\n );\n };\n\n const renderCollectionItems = (\n items: CollectionItem<Item>[],\n idx: CollectionIndexer = { value: 0 },\n end = items.length,\n ): ReactElement[] | undefined => {\n const listItems: ReactElement[] = [];\n while (idx.value < end) {\n const item = items[idx.value];\n if (item.header && item.label != null) {\n listItems.push(\n createHeader(idx, item.id, item.label, item.expanded === false),\n );\n } else if (item.childNodes) {\n addGroup(listItems, items, idx);\n } else {\n renderCollectionItem(listItems, item, idx);\n }\n }\n return listItems;\n };\n\n function renderEmpty() {\n if (emptyMessage || showEmptyMessage) {\n return (\n <span className={withBaseName(\"empty-message\")}>\n {emptyMessage ?? defaultEmptyMessage}\n </span>\n );\n }\n return null;\n }\n\n const renderContent = () => {\n if (collectionHook.data.length) {\n return renderCollectionItems(collectionHook.data);\n }\n renderEmpty();\n };\n\n const contentHeight = \"auto\";\n const sizeStyles = {\n \"--list-item-gap\": itemGapSize ? `${itemGapSize}px` : undefined,\n minWidth,\n minHeight,\n width: width ?? \"100%\",\n height: height ?? \"100%\",\n maxWidth: maxWidth ?? width,\n maxHeight: maxHeight ?? preferredHeight,\n };\n return (\n <div\n aria-multiselectable={\n selectionStrategy === \"multiple\" ||\n selectionStrategy === \"extended\" ||\n selectionStrategy === \"extended-multi-range\" ||\n undefined\n }\n {...htmlAttributes}\n {...listHandlers}\n {...listControlProps}\n className={clsx(withBaseName(), className, {\n // TODO low-emphasis\n [withBaseName(\"borderless\")]: borderless,\n saltDisabled: listDisabled,\n [withBaseName(\"collapsible\")]: collapsibleHeaders,\n saltFocusVisible: highlightedIndex === LIST_FOCUS_VISIBLE,\n })}\n id={`${id}`}\n ref={useForkRef<HTMLDivElement>(rootRef, forwardedRef)}\n role=\"listbox\"\n style={{ ...styleProp, ...sizeStyles }}\n tabIndex={listDisabled || disableFocus ? undefined : 0}\n >\n <ListItemProxy ref={rowHeightProxyRef} />\n {collectionHook.data.length === 0 && ListPlaceholder !== undefined ? (\n <>\n <ListPlaceholder />\n </>\n ) : (\n <div\n className={withBaseName(\"scrollingContentContainer\")}\n ref={contentRef}\n style={{ height: contentHeight }}\n >\n {renderContent()}\n </div>\n )}\n </div>\n );\n}) as <Item = string, Selection extends SelectionStrategy = \"default\">(\n props: ListProps<Item, Selection> & {\n ref?: ForwardedRef<ScrollingAPI<Item>>;\n },\n) => ReactElement<ListProps<Item, Selection>>;\n"],"names":["List","ListItem","DefaultListItem","itemToString","defaultItemToString","listCss","createHeader","addGroup","id"],"mappings":";;;;;;;;;;;;;;;;;;;AAgCA,MAAM,mBAAsB,GAAA,oBAAA,CAAA;AAE5B,MAAM,YAAA,GAAe,aAAa,UAAU,CAAA,CAAA;AAE/B,MAAA,IAAA,GAAO,UAAW,CAAA,SAASA,KAItC,CAAA;AAAA,YACEC,UAAW,GAAAC,QAAA;AAAA,EACX,eAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,kBAAqB,GAAA,KAAA;AAAA,EACrB,uBAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAU,YAAe,GAAA,KAAA;AAAA,EACzB,YAAe,GAAA,KAAA;AAAA,EACf,mBAAA;AAAA,EACA,kBAAqB,GAAA,EAAA;AAAA,EACrB,YAAA;AAAA,EACA,YAAc,EAAA,gBAAA;AAAA,EACd,aAAe,EAAA,iBAAA;AAAA,EACf,SAAA;AAAA,EACA,MAAA;AAAA,EACA,gBAAkB,EAAA,oBAAA;AAAA,EAClB,EAAI,EAAA,MAAA;AAAA,EACJ,WAAc,GAAA,CAAA;AAAA,EACd,UAAY,EAAA,cAAA;AAAA,EACZ,wBAAA;AAAA,gBACAC,cAAe,GAAAC,YAAA;AAAA,EACf,YAAc,EAAA,gBAAA;AAAA,EACd,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,iBAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,QAAU,EAAA,YAAA;AAAA,EACV,iBAAA;AAAA,EACA,YAAY,iBAAsB,KAAA,UAAA;AAAA,EAClC,eAAA;AAAA,EAEA,aAAA;AAAA,EACA,gBAAmB,GAAA,KAAA;AAAA,EACnB,MAAA;AAAA,EACA,KAAO,EAAA,SAAA;AAAA,EACP,aAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACG,GAAA,cAAA;AACL,CAAA,EACA,YACA,EAAA;AACA,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,WAAA;AAAA,IACR,GAAK,EAAAC,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,EAAA,GAAK,UAAU,MAAM,CAAA,CAAA;AAC3B,EAAM,MAAA,OAAA,GAAU,OAAuB,IAAI,CAAA,CAAA;AAC3C,EAAM,MAAA,UAAA,GAAa,OAAuB,IAAI,CAAA,CAAA;AAC9C,EAAM,MAAA,iBAAA,GAAoB,OAAuB,IAAI,CAAA,CAAA;AAErD,EAAA,MAAM,iBAAiB,kBAAyB,CAAA;AAAA,IAC9C,EAAA;AAAA,IACA,KAAO,EAAA,MAAA;AAAA,IACP,MAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAS,EAAA;AAAA,MACP,kBAAA;AAAA,MAEA,SAAA;AAAA,oBACAF,cAAA;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,EAAE,eAAgB,EAAA,GAAI,aAAc,CAAA;AAAA,IACxC,UAAA;AAAA,IACA,kBAAA;AAAA,IACA,aAAe,EAAA,iBAAA;AAAA,IACf,MAAA;AAAA,IACA,SAAA,EAAW,eAAe,IAAK,CAAA,MAAA;AAAA,IAC/B,WAAA;AAAA,IACA,UAAY,EAAA,cAAA;AAAA,IACZ,YAAc,EAAA,iBAAA;AAAA,GACf,CAAA,CAAA;AAED,EAAM,MAAA;AAAA,IACJ,YAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,YAAA;AAAA,IACA,sBAAA;AAAA,IACA,cAAA;AAAA,IACA,QAAA;AAAA,MACE,OAAyB,CAAA;AAAA,IAC3B,kBAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAc,EAAA,OAAA;AAAA,IACd,UAAA;AAAA,IACA,uBAAA;AAAA,IACA,eAAA,EAAiB,cAAe,CAAA,oBAAA,CAG9B,eAAe,CAAA;AAAA,IACjB,QAAU,EAAA,YAAA;AAAA,IACV,mBAAA;AAAA,IACA,gBAAkB,EAAA,oBAAA;AAAA,IAClB,KAAO,EAAA,EAAA;AAAA,IACP,YAAc,EAAA,gBAAA;AAAA,IACd,QAAA;AAAA,IACA,iBAAA;AAAA,IACA,WAAA;AAAA,IACA,gBAAA;AAAA,IACA,QAAA,EAAU,cAAe,CAAA,oBAAA,CAGvB,YAAY,CAAA;AAAA,IACd,iBAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,GACD,CAAA,CAAA;AAED,EAA0B,yBAAA,CAAA;AAAA,IACxB,cAAA;AAAA,IACA,YAAc,EAAA,eAAA;AAAA,IACd,aAAe,EAAA,OAAA;AAAA,IACf,cAAA;AAAA,GACD,CAAA,CAAA;AAGD,EAAA,MAAM,sBAAsB,gBAAoB,IAAA,IAAA,GAAA,gBAAA,GAAA,YAAA,CAAA;AAEhD,EAAA,MAAM,eAKc,SAASG,aAAAA,CAAa,GAAK,EAAA,QAAA,EAAU,OAAO,QAAU,EAAA;AACxE,IAAA,MAAM,yBACH,aAAA,CAAAL,UAAA,EAAA;AAAA,MACE,GAAG,sBAAA;AAAA,MACJ,SAAA,EAAW,KAAK,oBAAsB,EAAA;AAAA,QACpC,YAAA,EAAc,kBAAsB,IAAA,mBAAA,KAAwB,GAAI,CAAA,KAAA;AAAA,OACjE,CAAA;AAAA,MACD,eAAe,EAAA,QAAA;AAAA,MACf,UAAA,EAAU,kBAAqB,GAAA,GAAA,CAAI,KAAQ,GAAA,KAAA,CAAA;AAAA,MAC3C,kBAAA,EAAkB,GAAI,CAAA,KAAA,KAAU,gBAAoB,IAAA,KAAA,CAAA;AAAA,MACpD,aAAa,EAAA,aAAA;AAAA,MACb,iBAAiB,EAAA,KAAA;AAAA,MACjB,EAAI,EAAA,QAAA;AAAA,MACJ,GAAA,EAAK,UAAU,GAAI,CAAA,KAAA,CAAA,CAAA;AAAA,MACnB,KAAO,EAAA,KAAA;AAAA,KAET,CAAA,CAAA;AAEF,IAAA,GAAA,CAAI,KAAS,IAAA,CAAA,CAAA;AACb,IAAO,OAAA,MAAA,CAAA;AAAA,GACT,CAAA;AAEA,EAAA,MAAM,aACJ,GAAA,iBAAA,KAAsB,KAAY,CAAA,GAAA,MAAM,cAAiB,GAAA,iBAAA,CAAA;AAE3D,EAAS,SAAA,oBAAA,CACP,IACA,EAAA,IAAA,EACA,GACA,EAAA;AA9MJ,IAAA,IAAA,EAAA,CAAA;AAkNI,IAAA,MAAM,EAAE,QAAU,EAAA,KAAA,EAAO,EAAI,EAAA,MAAA,EAAQ,OAAU,GAAA,IAAA,CAAA;AAC/C,IAAM,MAAA,WAAA,GAAc,eAAe,KAAK,CAAA,CAAA;AACxC,IAAA,MAAM,aAGF,GAAA;AAAA,MACF,WAAW,IAAK,CAAA;AAAA,QACd,eAAA,EAAiB,IAAI,KAAU,KAAA,gBAAA;AAAA,QAC/B,gBAAA,EAAkB,wBAAwB,GAAI,CAAA,KAAA;AAAA,OAC/C,CAAA;AAAA,MACD,UAAU,QAAY,IAAA,YAAA;AAAA,MACtB,EAAI,EAAA,MAAA;AAAA,MACJ,IAAM,EAAA,WAAA,GAAc,KAAY,CAAA,GAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAM,UAAN,IAAe,GAAA,EAAA,GAAA,KAAA,CAAA;AAAA,MAC/C,UAAA,EAAY,aAAc,CAAA,GAAA,CAAI,KAAK,CAAA;AAAA,MACnC,wBAAA;AAAA,MACA,GAAK,EAAA,MAAA;AAAA,MACL,YAAY,GAAI,CAAA,KAAA;AAAA,MAChB,KAAA;AAAA,MACA,IAAM,EAAA,QAAA;AAAA,MACN,QAAA,EAAU,UAAiB,CAAA,QAAA,EAAU,IAAI,CAAA;AAAA,MACzC,YAAc,EAAA,SAAA;AAAA,KAChB,CAAA;AACA,IAAK,IAAA,CAAA,IAAA;AAAA,MACH,WACE,GAAA,YAAA,CAAa,KAAO,EAAA,aAAa,oBAEhC,GAAA,CAAAA,UAAA,EAAA;AAAA,QAAU,GAAG,aAAA;AAAA,OAAe,CAAA;AAAA,KAEjC,CAAA;AAEA,IAAA,GAAA,CAAI,KAAS,IAAA,CAAA,CAAA;AAAA,GACf;AAEA,EAAA,MAAM,QAIM,GAAA,SAASM,SACnB,CAAA,IAAA,EACA,OACA,GACA,EAAA;AACA,IAAM,MAAA,EAAE,KAAQ,GAAA,CAAA,EAAG,EAAAC,EAAAA,GAAAA,EAAI,UAAU,KAAQ,GAAA,EAAA,EAAO,GAAA,KAAA,CAAM,GAAI,CAAA,KAAA,CAAA,CAAA;AAC1D,IAAA,MAAM,MAAS,GAAA,YAAA,CAAa,GAAKA,EAAAA,GAAAA,EAAI,OAAO,QAAQ,CAAA,CAAA;AACpD,IAAA,MAAM,UACJ,GAAA,QAAA,KAAa,KACT,GAAA,CAAC,MAAM,CAAE,CAAA,MAAA;AAAA,MACP,sBAAsB,KAAO,EAAA,GAAA,EAAK,IAAI,KAAQ,GAAA,KAAK,KAAK,EAAC;AAAA,KAE3D,GAAA,MAAA,CAAA;AAEN,IAAK,IAAA,CAAA,IAAA;AAAA,sBACF,GAAA,CAAA,KAAA,EAAA;AAAA,QAAa,IAAK,EAAA,OAAA;AAAA,QAChB,QAAA,EAAA,UAAA;AAAA,OAAA,EADOA,GAEV,CAAA;AAAA,KACF,CAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,qBAAA,GAAwB,CAC5B,KAAA,EACA,GAAyB,GAAA,EAAE,OAAO,CAAE,EAAA,EACpC,GAAM,GAAA,KAAA,CAAM,MACmB,KAAA;AAC/B,IAAA,MAAM,YAA4B,EAAC,CAAA;AACnC,IAAO,OAAA,GAAA,CAAI,QAAQ,GAAK,EAAA;AACtB,MAAM,MAAA,IAAA,GAAO,MAAM,GAAI,CAAA,KAAA,CAAA,CAAA;AACvB,MAAA,IAAI,IAAK,CAAA,MAAA,IAAU,IAAK,CAAA,KAAA,IAAS,IAAM,EAAA;AACrC,QAAU,SAAA,CAAA,IAAA;AAAA,UACR,YAAA,CAAa,KAAK,IAAK,CAAA,EAAA,EAAI,KAAK,KAAO,EAAA,IAAA,CAAK,aAAa,KAAK,CAAA;AAAA,SAChE,CAAA;AAAA,OACF,MAAA,IAAW,KAAK,UAAY,EAAA;AAC1B,QAAS,QAAA,CAAA,SAAA,EAAW,OAAO,GAAG,CAAA,CAAA;AAAA,OACzB,MAAA;AACL,QAAqB,oBAAA,CAAA,SAAA,EAAW,MAAM,GAAG,CAAA,CAAA;AAAA,OAC3C;AAAA,KACF;AACA,IAAO,OAAA,SAAA,CAAA;AAAA,GACT,CAAA;AAEA,EAAA,SAAS,WAAc,GAAA;AACrB,IAAA,IAAI,gBAAgB,gBAAkB,EAAA;AACpC,MAAA,uBACG,GAAA,CAAA,MAAA,EAAA;AAAA,QAAK,SAAA,EAAW,aAAa,eAAe,CAAA;AAAA,QAC1C,QAAgB,EAAA,YAAA,IAAA,IAAA,GAAA,YAAA,GAAA,mBAAA;AAAA,OACnB,CAAA,CAAA;AAAA,KAEJ;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAI,IAAA,cAAA,CAAe,KAAK,MAAQ,EAAA;AAC9B,MAAO,OAAA,qBAAA,CAAsB,eAAe,IAAI,CAAA,CAAA;AAAA,KAClD;AACA,IAAY,WAAA,EAAA,CAAA;AAAA,GACd,CAAA;AAEA,EAAA,MAAM,aAAgB,GAAA,MAAA,CAAA;AACtB,EAAA,MAAM,UAAa,GAAA;AAAA,IACjB,iBAAA,EAAmB,WAAc,GAAA,CAAA,EAAG,WAAkB,CAAA,EAAA,CAAA,GAAA,KAAA,CAAA;AAAA,IACtD,QAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAO,KAAS,IAAA,IAAA,GAAA,KAAA,GAAA,MAAA;AAAA,IAChB,QAAQ,MAAU,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA;AAAA,IAClB,UAAU,QAAY,IAAA,IAAA,GAAA,QAAA,GAAA,KAAA;AAAA,IACtB,WAAW,SAAa,IAAA,IAAA,GAAA,SAAA,GAAA,eAAA;AAAA,GAC1B,CAAA;AACA,EAAA,uBACG,IAAA,CAAA,KAAA,EAAA;AAAA,IACC,wBACE,iBAAsB,KAAA,UAAA,IACtB,iBAAsB,KAAA,UAAA,IACtB,sBAAsB,sBACtB,IAAA,KAAA,CAAA;AAAA,IAED,GAAG,cAAA;AAAA,IACH,GAAG,YAAA;AAAA,IACH,GAAG,gBAAA;AAAA,IACJ,SAAW,EAAA,IAAA,CAAK,YAAa,EAAA,EAAG,SAAW,EAAA;AAAA,MAEzC,CAAC,YAAa,CAAA,YAAY,CAAI,GAAA,UAAA;AAAA,MAC9B,YAAc,EAAA,YAAA;AAAA,MACd,CAAC,YAAa,CAAA,aAAa,CAAI,GAAA,kBAAA;AAAA,MAC/B,kBAAkB,gBAAqB,KAAA,kBAAA;AAAA,KACxC,CAAA;AAAA,IACD,IAAI,CAAG,EAAA,EAAA,CAAA,CAAA;AAAA,IACP,GAAA,EAAK,UAA2B,CAAA,OAAA,EAAS,YAAY,CAAA;AAAA,IACrD,IAAK,EAAA,SAAA;AAAA,IACL,KAAO,EAAA,EAAE,GAAG,SAAA,EAAW,GAAG,UAAW,EAAA;AAAA,IACrC,QAAA,EAAU,YAAgB,IAAA,YAAA,GAAe,KAAY,CAAA,GAAA,CAAA;AAAA,IAErD,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,aAAA,EAAA;AAAA,QAAc,GAAK,EAAA,iBAAA;AAAA,OAAmB,CAAA;AAAA,MACtC,cAAe,CAAA,IAAA,CAAK,MAAW,KAAA,CAAA,IAAK,oBAAoB,KACvD,CAAA,mBAAA,GAAA,CAAA,QAAA,EAAA;AAAA,QACE,8BAAC,eAAgB,EAAA,EAAA,CAAA;AAAA,OACnB,oBAEC,GAAA,CAAA,KAAA,EAAA;AAAA,QACC,SAAA,EAAW,aAAa,2BAA2B,CAAA;AAAA,QACnD,GAAK,EAAA,UAAA;AAAA,QACL,KAAA,EAAO,EAAE,MAAA,EAAQ,aAAc,EAAA;AAAA,QAE9B,QAAc,EAAA,aAAA,EAAA;AAAA,OACjB,CAAA;AAAA,KAAA;AAAA,GAEJ,CAAA,CAAA;AAEJ,CAAC;;;;"}
1
+ {"version":3,"file":"List.js","sources":["../src/list/List.tsx"],"sourcesContent":["import { makePrefixer, useForkRef, useIdMemo } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport {\n type ForwardedRef,\n type ReactElement,\n cloneElement,\n forwardRef,\n isValidElement,\n useRef,\n} from \"react\";\nimport {\n type CollectionIndexer,\n type CollectionItem,\n LIST_FOCUS_VISIBLE,\n type ScrollingAPI,\n type SelectionStrategy,\n itemToString as defaultItemToString,\n isSelected,\n useCollectionItems,\n useImperativeScrollingAPI,\n} from \"../common-hooks\";\n\nimport { ListItem as DefaultListItem, ListItemProxy } from \"./ListItem\";\nimport type { ListItemProps, ListProps } from \"./listTypes\";\nimport { useList } from \"./useList\";\nimport { useListHeight } from \"./useListHeight\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport listCss from \"./List.css\";\n\nconst defaultEmptyMessage = \"No data to display\";\n\nconst withBaseName = makePrefixer(\"saltList\");\n\nexport const List = forwardRef(function List<\n Item,\n Selection extends SelectionStrategy = \"default\",\n>(\n {\n ListItem = DefaultListItem,\n ListPlaceholder,\n borderless,\n children,\n className,\n collapsibleHeaders = false,\n defaultHighlightedIndex,\n defaultSelected,\n disabled: listDisabled = false,\n disableFocus = false,\n disableTypeToSelect,\n displayedItemCount = 10,\n emptyMessage,\n focusVisible: focusVisibleProp,\n getItemHeight: getItemHeightProp,\n getItemId,\n height,\n highlightedIndex: highlightedIndexProp,\n id: idProp,\n itemGapSize = 0,\n itemHeight: itemHeightProp,\n itemTextHighlightPattern,\n itemToString = defaultItemToString,\n listHandlers: listHandlersProp,\n maxHeight,\n maxWidth,\n minHeight,\n minWidth,\n onSelect,\n onSelectionChange,\n onHighlight,\n restoreLastFocus,\n selected: selectedProp,\n selectionStrategy,\n checkable = selectionStrategy === \"multiple\",\n scrollingApiRef,\n // TODO do we still need these ?\n selectionKeys,\n showEmptyMessage = false,\n source,\n style: styleProp,\n stickyHeaders,\n tabToSelect,\n width,\n ...htmlAttributes\n }: ListProps<Item, Selection>,\n forwardedRef?: ForwardedRef<HTMLDivElement>,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-list\",\n css: listCss,\n window: targetWindow,\n });\n\n const id = useIdMemo(idProp);\n const rootRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const rowHeightProxyRef = useRef<HTMLDivElement>(null);\n\n const collectionHook = useCollectionItems<Item>({\n id,\n label: \"List\",\n source,\n children,\n options: {\n collapsibleHeaders,\n // Add Group ChildTypes to options\n getItemId,\n itemToString,\n },\n });\n\n const { preferredHeight } = useListHeight({\n borderless,\n displayedItemCount,\n getItemHeight: getItemHeightProp,\n height,\n itemCount: collectionHook.data.length,\n itemGapSize,\n itemHeight: itemHeightProp,\n rowHeightRef: rowHeightProxyRef,\n });\n\n const {\n focusVisible,\n highlightedIndex,\n listControlProps,\n listHandlers,\n listItemHeaderHandlers,\n scrollIntoView,\n selected,\n } = useList<Item, Selection>({\n collapsibleHeaders,\n collectionHook,\n containerRef: rootRef,\n contentRef,\n defaultHighlightedIndex,\n defaultSelected: collectionHook.itemToCollectionItem<\n Selection,\n typeof defaultSelected\n >(defaultSelected),\n disabled: listDisabled,\n disableTypeToSelect,\n highlightedIndex: highlightedIndexProp,\n label: id,\n listHandlers: listHandlersProp, // should this be in context ?\n onSelect,\n onSelectionChange,\n onHighlight,\n restoreLastFocus,\n selected: collectionHook.itemToCollectionItem<\n Selection,\n typeof defaultSelected\n >(selectedProp),\n selectionStrategy,\n selectionKeys,\n stickyHeaders,\n tabToSelect,\n });\n\n useImperativeScrollingAPI({\n collectionHook,\n forwardedRef: scrollingApiRef,\n scrollableRef: rootRef,\n scrollIntoView,\n });\n\n // focusVisible passes as a prop takes precedence\n const appliedFocusVisible = focusVisibleProp ?? focusVisible;\n\n const createHeader: (\n idx: { value: number },\n headerId: string,\n title: string,\n expanded?: boolean,\n ) => ReactElement = function createHeader(idx, headerId, title, expanded) {\n const header = (\n <ListItem\n {...listItemHeaderHandlers}\n className={clsx(\"saltListItemHeader\", {\n focusVisible: collapsibleHeaders && appliedFocusVisible === idx.value,\n })}\n aria-expanded={expanded}\n data-idx={collapsibleHeaders ? idx.value : undefined}\n data-highlighted={idx.value === highlightedIndex || undefined}\n data-sticky={stickyHeaders}\n data-selectable={false}\n id={headerId}\n key={`header-${idx.value}`}\n label={title}\n // role=\"presentation\"\n />\n );\n idx.value += 1;\n return header;\n };\n\n const getItemHeight =\n getItemHeightProp === undefined ? () => itemHeightProp : getItemHeightProp;\n\n function renderCollectionItem(\n list: ReactElement[],\n item: CollectionItem<Item>,\n idx: { value: number },\n ) {\n // Note, a number of these props are specific to ListItem. What if user\n // implements a custom ListItem but neglects to handle all these props.\n // Is that on them ?\n const { disabled, value, id: itemId, label } = item;\n const isChildItem = isValidElement(value);\n const listItemProps: ListItemProps<Item> & {\n key: string;\n \"data-idx\": number;\n } = {\n className: clsx({\n saltHighlighted: idx.value === highlightedIndex,\n saltFocusVisible: appliedFocusVisible === idx.value,\n }),\n disabled: disabled || listDisabled,\n id: itemId,\n item: isChildItem ? undefined : (item?.value ?? undefined),\n itemHeight: getItemHeight(idx.value),\n itemTextHighlightPattern,\n key: itemId,\n \"data-idx\": idx.value,\n label,\n role: \"option\",\n selected: isSelected<Item>(selected, item),\n showCheckbox: checkable,\n };\n list.push(\n isChildItem ? (\n cloneElement(value, listItemProps)\n ) : (\n <ListItem {...listItemProps} />\n ),\n );\n\n idx.value += 1;\n }\n\n const addGroup: (\n list: ReactElement[],\n items: CollectionItem<Item>[],\n idx: { value: number },\n ) => void = function addGroup(\n list: ReactElement[],\n items: CollectionItem<Item>[],\n idx: { value: number },\n ) {\n const { count = 0, id, expanded, label = \"\" } = items[idx.value];\n const header = createHeader(idx, id, label, expanded);\n const childItems: ReactElement | ReactElement[] =\n expanded !== false\n ? [header].concat(\n renderCollectionItems(items, idx, idx.value + count) || [],\n )\n : header;\n\n list.push(\n <div key={id} role=\"group\">\n {childItems}\n </div>,\n );\n };\n\n const renderCollectionItems = (\n items: CollectionItem<Item>[],\n idx: CollectionIndexer = { value: 0 },\n end = items.length,\n ): ReactElement[] | undefined => {\n const listItems: ReactElement[] = [];\n while (idx.value < end) {\n const item = items[idx.value];\n if (item.header && item.label != null) {\n listItems.push(\n createHeader(idx, item.id, item.label, item.expanded === false),\n );\n } else if (item.childNodes) {\n addGroup(listItems, items, idx);\n } else {\n renderCollectionItem(listItems, item, idx);\n }\n }\n return listItems;\n };\n\n function renderEmpty() {\n if (emptyMessage || showEmptyMessage) {\n return (\n <span className={withBaseName(\"empty-message\")}>\n {emptyMessage ?? defaultEmptyMessage}\n </span>\n );\n }\n return null;\n }\n\n const renderContent = () => {\n if (collectionHook.data.length) {\n return renderCollectionItems(collectionHook.data);\n }\n renderEmpty();\n };\n\n const contentHeight = \"auto\";\n const sizeStyles = {\n \"--list-item-gap\": itemGapSize ? `${itemGapSize}px` : undefined,\n minWidth,\n minHeight,\n width: width ?? \"100%\",\n height: height ?? \"100%\",\n maxWidth: maxWidth ?? width,\n maxHeight: maxHeight ?? preferredHeight,\n };\n return (\n <div\n aria-multiselectable={\n selectionStrategy === \"multiple\" ||\n selectionStrategy === \"extended\" ||\n selectionStrategy === \"extended-multi-range\" ||\n undefined\n }\n {...htmlAttributes}\n {...listHandlers}\n {...listControlProps}\n className={clsx(withBaseName(), className, {\n // TODO low-emphasis\n [withBaseName(\"borderless\")]: borderless,\n saltDisabled: listDisabled,\n [withBaseName(\"collapsible\")]: collapsibleHeaders,\n saltFocusVisible: highlightedIndex === LIST_FOCUS_VISIBLE,\n })}\n id={`${id}`}\n ref={useForkRef<HTMLDivElement>(rootRef, forwardedRef)}\n role=\"listbox\"\n style={{ ...styleProp, ...sizeStyles }}\n tabIndex={listDisabled || disableFocus ? undefined : 0}\n >\n <ListItemProxy ref={rowHeightProxyRef} />\n {collectionHook.data.length === 0 && ListPlaceholder !== undefined ? (\n <>\n <ListPlaceholder />\n </>\n ) : (\n <div\n className={withBaseName(\"scrollingContentContainer\")}\n ref={contentRef}\n style={{ height: contentHeight }}\n >\n {renderContent()}\n </div>\n )}\n </div>\n );\n}) as <Item = string, Selection extends SelectionStrategy = \"default\">(\n props: ListProps<Item, Selection> & {\n ref?: ForwardedRef<ScrollingAPI<Item>>;\n },\n) => ReactElement<ListProps<Item, Selection>>;\n"],"names":["List","ListItem","DefaultListItem","itemToString","defaultItemToString","listCss","createHeader","addGroup","id"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- var css_248z = ".saltMenuButtonTrigger {\n --menuButton-trigger-open-color: var(--saltMenuButton-trigger-open-color, var(--salt-actionable-primary-foreground-active));\n}\n\n.saltMenuButtonTrigger {\n display: inline-flex;\n line-height: 1;\n}\n\n.saltMenuButtonTrigger-buttonOpen {\n background: var(--saltMenuButton-trigger-open-background, var(--salt-actionable-primary-background-active));\n color: var(--menuButton-trigger-open-color);\n}\n\n.saltMenuButtonTrigger-buttonOpen:not(:hover) .saltMenuButtonTrigger-caretIcon {\n color: var(--menuButton-trigger-open-color);\n}\n\n.saltMenuButtonTrigger-buttonOpen:not(:hover) .saltMenuButtonTrigger-icon {\n color: var(--menuButton-trigger-open-color);\n}\n\n.saltMenuButtonTrigger-icon {\n}\n\n.saltMenuButtonTrigger-caretIcon {\n --saltIcon-margin: 0 0 0 var(--salt-size-unit);\n}\n";
1
+ var css_248z = ".saltMenuButtonTrigger {\n --menuButton-trigger-open-color: var(--saltMenuButton-trigger-open-color, var(--salt-actionable-primary-foreground-active));\n}\n\n.saltMenuButtonTrigger {\n display: inline-flex;\n line-height: 1;\n}\n\n.saltMenuButtonTrigger-buttonOpen {\n background: var(--saltMenuButton-trigger-open-background, var(--salt-actionable-primary-background-active));\n color: var(--menuButton-trigger-open-color);\n}\n\n.saltMenuButtonTrigger-buttonOpen:not(:hover) .saltMenuButtonTrigger-caretIcon {\n color: var(--menuButton-trigger-open-color);\n}\n\n.saltMenuButtonTrigger-buttonOpen:not(:hover) .saltMenuButtonTrigger-icon {\n color: var(--menuButton-trigger-open-color);\n}\n\n.saltMenuButtonTrigger-caretIcon {\n --saltIcon-margin: 0 0 0 var(--salt-size-unit);\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=MenuButtonTrigger.css.js.map
@@ -1,4 +1,4 @@
1
- var css_248z = ".saltQueryInput {\n}\n\n.saltQueryInputBody {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n\n.saltQueryInputBody > .saltIcon {\n padding: var(--salt-size-unit);\n align-self: start;\n}\n\n.saltQueryInputBody-separator {\n width: 1px;\n background: var(--salt-separable-secondary-borderColor);\n margin: 0 var(--salt-size-unit);\n align-self: stretch;\n}\n\n.saltQueryInputBody-buttonGroup {\n flex-shrink: 0;\n align-self: start;\n margin-bottom: var(--salt-size-unit);\n}\n\n.saltQueryInputBody-input {\n flex-grow: 1;\n}\n\n.saltQueryInputValueSelector {\n}\n\n.saltQueryInputValueSelector-content {\n display: flex;\n flex-direction: row;\n}\n\n.saltCategoryList-categoryWidthMeasure {\n position: fixed;\n left: -1000px;\n top: 0;\n border: solid 1px black;\n}\n\n.saltCategoryList-category {\n font-size: var(--salt-text-fontSize);\n}\n\n.saltCategoryListItem-text {\n flex-shrink: 0;\n margin-right: calc(var(--salt-size-unit) * 1.5);\n}\n\n.saltCategoryListItem-valuesContainer {\n font-style: italic;\n color: var(--salt-content-secondary-foreground);\n flex-grow: 1;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n}\n\n.saltCategoryListItem-values {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.saltCategoryListItem-chevron {\n flex-shrink: 0;\n margin-left: var(--salt-size-unit);\n}\n\n.saltListItem-selected .saltIcon {\n fill: var(--list-item-text-color-active);\n}\n\n.saltQueryInputValueList {\n border: solid 1px var(--salt-container-primary-borderColor);\n}\n\n.saltQueryInputValueList-back {\n display: flex;\n flex-direction: row;\n align-items: center;\n border-bottom: solid 1px var(--salt-separable-secondary-borderColor);\n cursor: pointer;\n}\n\n.saltQueryInputValueList-back .saltIcon {\n margin-right: var(--salt-size-unit);\n}\n\n.saltQueryInputValueList-category {\n font-size: var(--salt-text-fontSize);\n flex-grow: 1;\n}\n\n.saltQueryInputSearchList {\n}\n\n.saltQueryInputSearchList-group {\n}\n\n.saltQueryInputSearchList-addKeyword {\n border-top: solid 1px var(--salt-separable-secondary-borderColor);\n}\n\n.saltQueryInputSearchList-categoryTitle {\n color: var(--salt-content-primary-foreground);\n background: var(--salt-container-primary-background);\n font-size: var(--salt-text-fontSize);\n font-weight: var(--salt-text-fontWeight-strong);\n display: flex;\n align-items: center;\n padding: 0 var(--salt-size-unit);\n position: sticky;\n top: 0;\n z-index: var(--salt-zIndex-default);\n}\n\n.saltQueryInputSearchList-value {\n}\n";
1
+ var css_248z = ".saltQueryInputBody {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n\n.saltQueryInputBody > .saltIcon {\n padding: var(--salt-size-unit);\n align-self: start;\n}\n\n.saltQueryInputBody-separator {\n width: 1px;\n background: var(--salt-separable-secondary-borderColor);\n margin: 0 var(--salt-size-unit);\n align-self: stretch;\n}\n\n.saltQueryInputBody-buttonGroup {\n flex-shrink: 0;\n align-self: start;\n margin-bottom: var(--salt-size-unit);\n}\n\n.saltQueryInputBody-input {\n flex-grow: 1;\n}\n\n.saltQueryInputValueSelector-content {\n display: flex;\n flex-direction: row;\n}\n\n.saltCategoryList-categoryWidthMeasure {\n position: fixed;\n left: -1000px;\n top: 0;\n border: solid 1px black;\n}\n\n.saltCategoryList-category {\n font-size: var(--salt-text-fontSize);\n}\n\n.saltCategoryListItem-text {\n flex-shrink: 0;\n margin-right: calc(var(--salt-size-unit) * 1.5);\n}\n\n.saltCategoryListItem-valuesContainer {\n font-style: italic;\n color: var(--salt-content-secondary-foreground);\n flex-grow: 1;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n}\n\n.saltCategoryListItem-values {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.saltCategoryListItem-chevron {\n flex-shrink: 0;\n margin-left: var(--salt-size-unit);\n}\n\n.saltListItem-selected .saltIcon {\n fill: var(--list-item-text-color-active);\n}\n\n.saltQueryInputValueList {\n border: solid 1px var(--salt-container-primary-borderColor);\n}\n\n.saltQueryInputValueList-back {\n display: flex;\n flex-direction: row;\n align-items: center;\n border-bottom: solid 1px var(--salt-separable-secondary-borderColor);\n cursor: pointer;\n}\n\n.saltQueryInputValueList-back .saltIcon {\n margin-right: var(--salt-size-unit);\n}\n\n.saltQueryInputValueList-category {\n font-size: var(--salt-text-fontSize);\n flex-grow: 1;\n}\n\n.saltQueryInputSearchList-addKeyword {\n border-top: solid 1px var(--salt-separable-secondary-borderColor);\n}\n\n.saltQueryInputSearchList-categoryTitle {\n color: var(--salt-content-primary-foreground);\n background: var(--salt-container-primary-background);\n font-size: var(--salt-text-fontSize);\n font-weight: var(--salt-text-fontWeight-strong);\n display: flex;\n align-items: center;\n padding: 0 var(--salt-size-unit);\n position: sticky;\n top: 0;\n z-index: var(--salt-zIndex-default);\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=QueryInput.css.js.map
@@ -1,4 +1,4 @@
1
- var css_248z = ".salt-density-high {\n --slider-clickable-paddingTop: var(--saltSlider-clickable-paddingTop, 2px);\n --slider-clickable-paddingBottom: var(--saltSlider-clickable-paddingBottom, 2px);\n --slider-paddingTop: var(--saltSlider-paddingTop, 3px);\n --slider-paddingBottom: var(--saltSlider-paddingBottom, 0);\n}\n\n.salt-density-medium {\n --slider-clickable-paddingTop: var(--saltSlider-clickable-paddingTop, 4px);\n --slider-clickable-paddingBottom: var(--saltSlider-clickable-paddingBottom, 4px);\n --slider-paddingTop: var(--saltSlider-paddingTop, 6px);\n --slider-paddingBottom: var(--saltSlider-paddingBottom, 0);\n}\n\n.salt-density-low {\n --slider-clickable-paddingTop: var(--saltSlider-clickable-paddingTop, 8px);\n --slider-clickable-paddingBottom: var(--saltSlider-clickable-paddingBottom, 8px);\n --slider-paddingTop: var(--saltSlider-paddingTop, 9px);\n --slider-paddingBottom: var(--saltSlider-paddingBottom, 0);\n}\n\n.salt-density-touch {\n --slider-clickable-paddingTop: var(--saltSlider-clickable-paddingTop, 12px);\n --slider-clickable-paddingBottom: var(--saltSlider-clickable-paddingBottom, 12px);\n --slider-paddingTop: var(--saltSlider-paddingTop, 12px);\n --slider-paddingBottom: var(--saltSlider-paddingBottom, 0);\n}\n\n.saltSlider {\n --slider-rail-height: var(--saltSlider-rail-height, 8px);\n --slider-rail-color: var(--saltSlider-rail-color, var(--salt-track-borderColor));\n\n --slider-rail-mark-height: var(--saltSlider-rail-mark-height, 7px);\n --slider-rail-mark-color: var(--saltSlider-rail-mark-color, var(--slider-rail-color));\n\n --slider-selection-color: var(--saltSlider-selection-color, var(--salt-accent-background));\n --slider-selection-height: var(--saltSlider-selection-height, 2px);\n\n --slider-handle-size: var(--saltSlider-handle-size, calc(var(--salt-size-base) * 0.5));\n --slider-handle-outlineStyle: var(--saltSlider-handle-outlineStyle, var(--salt-focused-outlineStyle));\n --slider-handle-outlineWidth: var(--saltSlider-handle-outlineWidth, var(--salt-focused-outlineWidth));\n --slider-handle-outlineColor: var(--saltSlider-handle-outlineColor, var(--salt-focused-outlineColor));\n --slider-handle-outlineOffset: var(--saltSlider-handle-outlineOffset, var(--salt-focused-outlineOffset));\n\n --slider-arrow-height: var(--saltSlider-arrow-height, 6px);\n --slider-arrow-width: var(--saltSlider-arrow-width, 8px);\n --slider-arrow-color: var(--saltSlider-arrow-color, var(--slider-selection-color));\n\n --slider-borderStyle: var(--saltSlider-borderStyle, none);\n --slider-borderWidth: var(--saltSlider-borderWidth, 0);\n --slider-borderColor: var(--saltSlider-borderColor, transparent);\n --slider-width: var(--saltSlider-width, 300px);\n\n --slider-clickable-paddingLeft: var(--saltSlider-clickable-paddingLeft, calc(var(--salt-size-base) * 0.5));\n --slider-clickable-paddingRight: var(--saltSlider-clickable-paddingRight, calc(var(--salt-size-base) * 0.5));\n\n --slider-label-fontSize: var(--saltSlider-label-fontSize, var(--salt-text-label-fontSize));\n --slider-label-paddingLeft: var(--saltSlider-label-paddingLeft, 0);\n --slider-label-paddingRight: var(--saltSlider-label-paddingRight, 0);\n}\n\n.saltSlider {\n width: var(--slider-width);\n border-style: var(--slider-borderStyle);\n border-width: var(--slider-borderWidth);\n border-color: var(--slider-borderColor);\n\n display: flex;\n flex-direction: column;\n align-items: stretch;\n\n padding-top: var(--slider-paddingTop);\n padding-bottom: var(--slider-paddingBottom);\n}\n\n.saltSlider-disabled {\n}\n\n.saltSlider-clickable {\n padding: var(--slider-clickable-paddingTop) var(--slider-clickable-paddingRight) var(--slider-clickable-paddingBottom) var(--slider-clickable-paddingLeft);\n margin-right: calc(-1 * var(--slider-clickable-paddingRight));\n margin-left: calc(-1 * var(--slider-clickable-paddingLeft));\n\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: stretch;\n}\n\n.saltSlider-track {\n display: grid;\n grid-template-rows: auto auto auto;\n align-items: end;\n grid-template-columns: auto auto auto;\n row-gap: 0;\n transition: grid-template-columns 100ms ease;\n}\n\n.saltSliderRail {\n grid-row: 1;\n grid-column-start: 1;\n grid-column-end: -1;\n height: var(--slider-rail-height);\n border-style: solid;\n border-width: 0 1px 1px 1px;\n border-color: var(--slider-rail-color);\n}\n\n.saltSliderRailMarks {\n grid-row: 2;\n grid-column-start: 1;\n grid-column-end: -1;\n /*height: var(--markedRail-height);*/\n display: grid;\n grid-template-rows: auto;\n}\n\n.saltSliderRailMarks-mark {\n grid-row: 1;\n width: 0;\n height: var(--slider-rail-mark-height);\n border-left: 1px solid var(--slider-rail-mark-color);\n}\n\n.saltSliderRailMarks-max {\n margin-left: -1px;\n}\n\n.saltSliderMarkLabels {\n grid-row: 3;\n grid-column-start: 1;\n grid-column-end: -1;\n\n display: grid;\n grid-template-rows: auto;\n justify-items: center;\n}\n\n.saltSliderMarkLabels-label {\n color: var(--saltSlider-label-text-color, var(--salt-content-secondary-foreground));\n font-size: var(--slider-label-fontSize);\n margin-top: var(--saltSlider-label-marginTop);\n line-height: var(--saltSlider-label-lineHeight, var(--salt-text-lineHeight));\n\n white-space: nowrap;\n}\n\n.saltSliderSelection {\n grid-row: 1;\n grid-column-start: 1;\n grid-column-end: -2;\n height: var(--slider-selection-height);\n background: var(--slider-selection-color);\n}\n\n.saltSliderSelection-range {\n grid-row: 1;\n grid-column-start: 2;\n grid-column-end: -2;\n height: var(--slider-selection-height);\n background: var(--slider-selection-color);\n}\n\n.saltSliderHandle-box:focus-visible {\n outline-style: var(--slider-handle-outlineStyle);\n outline-width: var(--slider-handle-outlineWidth);\n outline-color: var(--slider-handle-outlineColor);\n outline-offset: var(--slider-handle-outlineOffset);\n}\n\n.saltSliderHandle {\n margin-left: calc(var(--slider-arrow-width) * -0.5);\n grid-row: 1;\n width: 0;\n height: 0;\n border-left: calc(var(--slider-arrow-width) * 0.5) solid transparent;\n border-right: calc(var(--slider-arrow-width) * 0.5) solid transparent;\n border-bottom: calc(var(--slider-arrow-height)) solid var(--slider-arrow-color);\n position: relative;\n}\n\n.saltSliderHandle-min {\n border-left: none;\n margin-left: 0;\n}\n\n.saltSliderHandle-max {\n border-right: none;\n}\n\n.saltSlider-label {\n color: var(--saltSlider-label-text-color, var(--salt-content-secondary-foreground));\n font-size: var(--slider-label-fontSize);\n margin-top: var(--saltSlider-label-marginTop);\n line-height: var(--saltSlider-label-lineHeight, var(--salt-text-lineHeight));\n\n padding-left: var(--slider-label-paddingLeft);\n padding-right: var(--slider-label-paddingRight);\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n";
1
+ var css_248z = ".saltSlider {\n display: grid;\n gap: var(--salt-spacing-100);\n grid-template-columns: auto 1fr auto;\n user-select: none;\n}\n\n.saltSlider-label {\n height: var(--salt-size-base);\n display: flex;\n align-items: center;\n}\n\n.saltSlider-bottomLabel {\n grid-template-columns: 1fr;\n gap: 0;\n}\n.saltSlider-bottomLabel .saltSlider-label {\n height: auto;\n}\n\n.saltSlider-labelMinBottom {\n grid-row: 2;\n grid-column: 1;\n justify-self: start;\n width: min-content;\n}\n\n.saltSlider-labelMaxBottom {\n grid-row: 2;\n grid-column: 1;\n justify-self: end;\n width: min-content;\n}\n\n.saltSliderTrack {\n display: flex;\n position: relative;\n cursor: pointer;\n align-items: center;\n height: var(--salt-size-base);\n}\n\n.saltSliderTrack-rail {\n height: var(--salt-size-bar);\n background: var(--salt-track-borderColor);\n width: 100%;\n position: absolute;\n}\n\n.saltSliderTrack:active {\n cursor: grabbing;\n}\n\n.saltSliderThumb-container {\n position: absolute;\n display: flex;\n align-items: center;\n justify-content: center;\n transform: translate(-50%, 0%);\n width: var(--salt-size-base);\n height: var(--salt-size-base);\n}\n\n.saltSliderThumb-tooltip {\n background: var(--salt-container-primary-background);\n border-color: var(--salt-status-info-borderColor);\n border-style: var(--salt-container-borderStyle);\n border-width: var(--salt-size-border);\n line-height: var(--salt-text-lineHeight);\n box-shadow: var(--salt-overlayable-shadow-popout);\n color: var(--salt-content-primary-foreground);\n max-width: var(--saltTooltip-maxWidth, 230px);\n padding: var(--saltTooltip-padding, var(--salt-size-unit));\n position: absolute;\n z-index: var(--salt-zIndex-flyover);\n transform: translate(0, -100%);\n display: none;\n}\n\n.saltSliderThumb-tooltip-arrow {\n position: absolute;\n pointer-events: none;\n top: 100%;\n left: 50%;\n transform: translate(-50%, 0);\n stroke: none;\n fill: var(--salt-container-primary-background);\n stroke: var(--salt-status-info-borderColor);\n stroke-width: var(--salt-size-border);\n width: var(--salt-size-icon);\n height: var(--salt-size-icon);\n}\n\n.saltSliderThumb-tooltip-visible {\n display: block;\n}\n\n.saltSliderThumb-container:hover .saltSliderThumb-tooltip {\n display: block;\n}\n\n.saltSliderThumb {\n position: relative;\n width: var(--salt-size-indicator);\n height: var(--salt-size-selectable);\n background: var(--salt-accent-borderColor);\n}\n\n.saltSliderThumb:focus-visible {\n outline-style: var(--salt-focused-outlineStyle);\n outline-width: var(--salt-focused-outlineWidth);\n outline-offset: var(--salt-focused-outlineOffset);\n outline-color: var(--salt-focused-outlineColor);\n}\n\n.saltSliderSelection {\n height: var(--salt-size-bar);\n background: var(--salt-accent-borderColor);\n align-items: start;\n position: absolute;\n}\n\n.saltSliderSelection-range {\n align-items: center;\n}\n\n.saltSliderMarks {\n position: relative;\n}\n\n.saltSliderMarks-mark {\n position: absolute;\n transform: translate(-50%);\n line-height: var(--salt-text-lineHeight);\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=Slider.css.js.map
@@ -1,41 +1,30 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { makePrefixer, useControlled } from '@salt-ds/core';
3
- import { clsx } from 'clsx';
4
- import { forwardRef, useRef, useMemo } from 'react';
5
- import { SliderHandle } from './internal/SliderHandle.js';
6
- import { SliderMarkLabels } from './internal/SliderMarkLabels.js';
7
- import { SliderRail } from './internal/SliderRail.js';
8
- import { SliderRailMarks } from './internal/SliderRailMarks.js';
9
- import { SliderSelection } from './internal/SliderSelection.js';
10
- import { createTrackStyle, createHandleStyles } from './internal/styles.js';
11
- import { useSliderKeyDown } from './internal/useSliderKeyDown.js';
12
- import { useSliderMouseDown } from './internal/useSliderMouseDown.js';
13
- import { useValueUpdater } from './internal/utils.js';
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { makePrefixer, useControlled, Label } from '@salt-ds/core';
14
3
  import { useComponentCssInjection } from '@salt-ds/styles';
15
4
  import { useWindow } from '@salt-ds/window';
5
+ import { clsx } from 'clsx';
6
+ import { forwardRef } from 'react';
7
+ import { SliderTrack } from './internal/SliderTrack.js';
8
+ import { SliderMarks } from './internal/SliderMarks.js';
9
+ import { SliderContext } from './internal/SliderContext.js';
16
10
  import css_248z from './Slider.css.js';
11
+ import { parseValueProp } from './internal/utils.js';
17
12
 
18
13
  const withBaseName = makePrefixer("saltSlider");
19
14
  const defaultMin = 0;
20
- const defaultMax = 100;
15
+ const defaultMax = 10;
21
16
  const defaultStep = 1;
22
17
  const Slider = forwardRef(function Slider2({
23
18
  min = defaultMin,
24
19
  max = defaultMax,
25
20
  step = defaultStep,
26
- pageStep = step,
27
21
  value: valueProp,
28
- defaultValue = defaultMin,
22
+ defaultValue = [0],
29
23
  onChange,
30
- label,
31
24
  className,
32
- pushable,
33
- pushDistance = 0,
34
- disabled,
35
- marks,
36
- hideMarks,
37
- hideMarkLabels,
38
- ...restProps
25
+ "aria-label": ariaLabel,
26
+ marks = "inline",
27
+ ...rest
39
28
  }, ref) {
40
29
  const targetWindow = useWindow();
41
30
  useComponentCssInjection({
@@ -43,95 +32,54 @@ const Slider = forwardRef(function Slider2({
43
32
  css: css_248z,
44
33
  window: targetWindow
45
34
  });
46
- const trackRef = useRef(null);
47
35
  const [value, setValue] = useControlled({
48
- controlled: valueProp,
36
+ controlled: parseValueProp(valueProp, min, max),
49
37
  default: defaultValue,
50
38
  name: "Slider",
51
39
  state: "Value"
52
40
  });
53
- const updateValueItem = useValueUpdater(pushable, pushDistance, min, max);
54
- const trackStyle = useMemo(
55
- () => createTrackStyle(min, max, value),
56
- [min, max, value]
57
- );
58
- const valueLength = Array.isArray(value) ? value.length : 1;
59
- const handleStyles = useMemo(
60
- () => createHandleStyles(valueLength),
61
- [valueLength]
62
- );
63
- const onMouseDown = useSliderMouseDown(
64
- trackRef,
65
- value,
66
- min,
67
- max,
68
- step,
69
- updateValueItem,
70
- setValue,
71
- onChange
72
- );
73
- const onKeyDown = useSliderKeyDown(
74
- value,
75
- min,
76
- max,
77
- pageStep,
78
- step,
79
- updateValueItem,
80
- setValue,
81
- onChange
82
- );
83
- return /* @__PURE__ */ jsxs("div", {
84
- className: clsx(
85
- withBaseName(),
86
- {
87
- [withBaseName("disabled")]: disabled
88
- },
89
- className
90
- ),
91
- ref,
92
- onKeyDown: disabled ? void 0 : onKeyDown,
93
- "aria-label": `${label} slider from ${min} to ${max}`,
94
- role: "group",
95
- children: [
96
- label !== void 0 ? /* @__PURE__ */ jsx("div", {
97
- className: withBaseName("label"),
98
- children: label
99
- }) : null,
100
- /* @__PURE__ */ jsx("div", {
101
- className: withBaseName("clickable"),
102
- onMouseDown: disabled ? void 0 : onMouseDown,
103
- children: /* @__PURE__ */ jsxs("div", {
104
- className: withBaseName("track"),
105
- style: trackStyle,
106
- ref: trackRef,
107
- children: [
108
- /* @__PURE__ */ jsx(SliderRail, {}),
109
- marks && !hideMarks ? /* @__PURE__ */ jsx(SliderRailMarks, {
110
- min,
111
- max,
112
- marks
113
- }) : null,
114
- marks && !hideMarkLabels ? /* @__PURE__ */ jsx(SliderMarkLabels, {
115
- min,
116
- max,
117
- marks
118
- }) : null,
119
- /* @__PURE__ */ jsx(SliderSelection, {
120
- valueLength
121
- }),
122
- (Array.isArray(value) ? value : [value]).map((v, i) => /* @__PURE__ */ jsx(SliderHandle, {
123
- min,
124
- max,
125
- value: v,
126
- index: i,
127
- disabled: !!disabled,
128
- valueLength,
129
- style: handleStyles[i]
130
- }, i))
131
- ]
41
+ const handleSliderChange = (value2) => {
42
+ setValue(value2);
43
+ onChange == null ? void 0 : onChange(value2);
44
+ };
45
+ return /* @__PURE__ */ jsx(SliderContext.Provider, {
46
+ value: {
47
+ value,
48
+ min,
49
+ max,
50
+ step,
51
+ onChange: handleSliderChange,
52
+ ariaLabel
53
+ },
54
+ children: /* @__PURE__ */ jsxs("div", {
55
+ ref,
56
+ className: clsx(
57
+ withBaseName(),
58
+ { [withBaseName("bottomLabel")]: marks !== "inline" },
59
+ className
60
+ ),
61
+ ...rest,
62
+ children: [
63
+ marks !== "all" && /* @__PURE__ */ jsx(Label, {
64
+ className: clsx(withBaseName("label"), {
65
+ [withBaseName("labelMinBottom")]: marks !== "inline"
66
+ }),
67
+ children: min
68
+ }),
69
+ /* @__PURE__ */ jsx(SliderTrack, {}),
70
+ marks !== "all" && /* @__PURE__ */ jsx(Label, {
71
+ className: clsx(withBaseName("label"), {
72
+ [withBaseName("labelMaxBottom")]: marks !== "inline"
73
+ }),
74
+ children: max
75
+ }),
76
+ marks === "all" && /* @__PURE__ */ jsx(SliderMarks, {
77
+ max,
78
+ min,
79
+ step
132
80
  })
133
- })
134
- ]
81
+ ]
82
+ })
135
83
  });
136
84
  });
137
85