react-stately 3.46.0 → 3.47.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (496) hide show
  1. package/dist/exports/Color.cjs.map +1 -1
  2. package/dist/exports/Color.js.map +1 -1
  3. package/dist/exports/Color.mjs.map +1 -1
  4. package/dist/exports/index.cjs.map +1 -1
  5. package/dist/exports/index.js.map +1 -1
  6. package/dist/exports/index.mjs.map +1 -1
  7. package/dist/exports/private/autocomplete/useAutocompleteState.cjs.map +1 -1
  8. package/dist/exports/private/autocomplete/useAutocompleteState.js.map +1 -1
  9. package/dist/exports/private/autocomplete/useAutocompleteState.mjs.map +1 -1
  10. package/dist/exports/private/collections/getChildNodes.cjs.map +1 -1
  11. package/dist/exports/private/collections/getChildNodes.js.map +1 -1
  12. package/dist/exports/private/collections/getChildNodes.mjs.map +1 -1
  13. package/dist/exports/private/flags/flags.cjs.map +1 -1
  14. package/dist/exports/private/flags/flags.js.map +1 -1
  15. package/dist/exports/private/flags/flags.mjs.map +1 -1
  16. package/dist/exports/private/form/useFormValidationState.cjs.map +1 -1
  17. package/dist/exports/private/form/useFormValidationState.js.map +1 -1
  18. package/dist/exports/private/form/useFormValidationState.mjs.map +1 -1
  19. package/dist/exports/private/grid/GridCollection.cjs.map +1 -1
  20. package/dist/exports/private/grid/GridCollection.js.map +1 -1
  21. package/dist/exports/private/grid/GridCollection.mjs.map +1 -1
  22. package/dist/exports/private/steplist/useStepListState.cjs.map +1 -1
  23. package/dist/exports/private/steplist/useStepListState.js.map +1 -1
  24. package/dist/exports/private/steplist/useStepListState.mjs.map +1 -1
  25. package/dist/exports/private/table/TableCollection.cjs.map +1 -1
  26. package/dist/exports/private/table/TableCollection.js.map +1 -1
  27. package/dist/exports/private/table/TableCollection.mjs.map +1 -1
  28. package/dist/exports/private/table/useTreeGridState.cjs.map +1 -1
  29. package/dist/exports/private/table/useTreeGridState.js.map +1 -1
  30. package/dist/exports/private/table/useTreeGridState.mjs.map +1 -1
  31. package/dist/exports/useAsyncList.cjs.map +1 -1
  32. package/dist/exports/useAsyncList.js.map +1 -1
  33. package/dist/exports/useAsyncList.mjs.map +1 -1
  34. package/dist/exports/useCalendarState.cjs.map +1 -1
  35. package/dist/exports/useCalendarState.js.map +1 -1
  36. package/dist/exports/useCalendarState.mjs.map +1 -1
  37. package/dist/exports/useColorAreaState.cjs.map +1 -1
  38. package/dist/exports/useColorAreaState.js.map +1 -1
  39. package/dist/exports/useColorAreaState.mjs.map +1 -1
  40. package/dist/exports/useColorFieldState.cjs.map +1 -1
  41. package/dist/exports/useColorFieldState.js.map +1 -1
  42. package/dist/exports/useColorFieldState.mjs.map +1 -1
  43. package/dist/exports/useColorPickerState.cjs.map +1 -1
  44. package/dist/exports/useColorPickerState.js.map +1 -1
  45. package/dist/exports/useColorPickerState.mjs.map +1 -1
  46. package/dist/exports/useColorSliderState.cjs.map +1 -1
  47. package/dist/exports/useColorSliderState.js.map +1 -1
  48. package/dist/exports/useColorSliderState.mjs.map +1 -1
  49. package/dist/exports/useColorWheelState.cjs.map +1 -1
  50. package/dist/exports/useColorWheelState.js.map +1 -1
  51. package/dist/exports/useColorWheelState.mjs.map +1 -1
  52. package/dist/exports/useComboBoxState.cjs +1 -1
  53. package/dist/exports/useComboBoxState.cjs.map +1 -1
  54. package/dist/exports/useComboBoxState.js +1 -1
  55. package/dist/exports/useComboBoxState.js.map +1 -1
  56. package/dist/exports/useComboBoxState.mjs +1 -1
  57. package/dist/exports/useComboBoxState.mjs.map +1 -1
  58. package/dist/exports/useDateFieldState.cjs.map +1 -1
  59. package/dist/exports/useDateFieldState.js.map +1 -1
  60. package/dist/exports/useDateFieldState.mjs.map +1 -1
  61. package/dist/exports/useDatePickerState.cjs.map +1 -1
  62. package/dist/exports/useDatePickerState.js.map +1 -1
  63. package/dist/exports/useDatePickerState.mjs.map +1 -1
  64. package/dist/exports/useDateRangePickerState.cjs.map +1 -1
  65. package/dist/exports/useDateRangePickerState.js.map +1 -1
  66. package/dist/exports/useDateRangePickerState.mjs.map +1 -1
  67. package/dist/exports/useDisclosureGroupState.cjs.map +1 -1
  68. package/dist/exports/useDisclosureGroupState.js.map +1 -1
  69. package/dist/exports/useDisclosureGroupState.mjs.map +1 -1
  70. package/dist/exports/useDraggableCollectionState.cjs.map +1 -1
  71. package/dist/exports/useDraggableCollectionState.js.map +1 -1
  72. package/dist/exports/useDraggableCollectionState.mjs.map +1 -1
  73. package/dist/exports/useDroppableCollectionState.cjs.map +1 -1
  74. package/dist/exports/useDroppableCollectionState.js.map +1 -1
  75. package/dist/exports/useDroppableCollectionState.mjs.map +1 -1
  76. package/dist/exports/useMenuTriggerState.cjs.map +1 -1
  77. package/dist/exports/useMenuTriggerState.js.map +1 -1
  78. package/dist/exports/useMenuTriggerState.mjs.map +1 -1
  79. package/dist/exports/useMultipleSelectionState.cjs.map +1 -1
  80. package/dist/exports/useMultipleSelectionState.js.map +1 -1
  81. package/dist/exports/useMultipleSelectionState.mjs.map +1 -1
  82. package/dist/exports/useOverlayTriggerState.cjs.map +1 -1
  83. package/dist/exports/useOverlayTriggerState.js.map +1 -1
  84. package/dist/exports/useOverlayTriggerState.mjs.map +1 -1
  85. package/dist/exports/useRangeCalendarState.cjs.map +1 -1
  86. package/dist/exports/useRangeCalendarState.js.map +1 -1
  87. package/dist/exports/useRangeCalendarState.mjs.map +1 -1
  88. package/dist/exports/useSelectState.cjs.map +1 -1
  89. package/dist/exports/useSelectState.js.map +1 -1
  90. package/dist/exports/useSelectState.mjs.map +1 -1
  91. package/dist/exports/useSingleSelectListState.cjs.map +1 -1
  92. package/dist/exports/useSingleSelectListState.js.map +1 -1
  93. package/dist/exports/useSingleSelectListState.mjs.map +1 -1
  94. package/dist/exports/useTableState.cjs.map +1 -1
  95. package/dist/exports/useTableState.js.map +1 -1
  96. package/dist/exports/useTableState.mjs.map +1 -1
  97. package/dist/exports/useTimeFieldState.cjs.map +1 -1
  98. package/dist/exports/useTimeFieldState.js.map +1 -1
  99. package/dist/exports/useTimeFieldState.mjs.map +1 -1
  100. package/dist/exports/useToastState.cjs.map +1 -1
  101. package/dist/exports/useToastState.js.map +1 -1
  102. package/dist/exports/useToastState.mjs.map +1 -1
  103. package/dist/private/autocomplete/useAutocompleteState.cjs.map +1 -1
  104. package/dist/private/autocomplete/useAutocompleteState.js.map +1 -1
  105. package/dist/private/autocomplete/useAutocompleteState.mjs.map +1 -1
  106. package/dist/private/calendar/useCalendarState.cjs +82 -30
  107. package/dist/private/calendar/useCalendarState.cjs.map +1 -1
  108. package/dist/private/calendar/useCalendarState.js +85 -32
  109. package/dist/private/calendar/useCalendarState.js.map +1 -1
  110. package/dist/private/calendar/useCalendarState.mjs +84 -32
  111. package/dist/private/calendar/useCalendarState.mjs.map +1 -1
  112. package/dist/private/calendar/useRangeCalendarState.cjs +53 -40
  113. package/dist/private/calendar/useRangeCalendarState.cjs.map +1 -1
  114. package/dist/private/calendar/useRangeCalendarState.js +55 -43
  115. package/dist/private/calendar/useRangeCalendarState.js.map +1 -1
  116. package/dist/private/calendar/useRangeCalendarState.mjs +55 -42
  117. package/dist/private/calendar/useRangeCalendarState.mjs.map +1 -1
  118. package/dist/private/calendar/utils.cjs +6 -1
  119. package/dist/private/calendar/utils.cjs.map +1 -1
  120. package/dist/private/calendar/utils.js +6 -2
  121. package/dist/private/calendar/utils.js.map +1 -1
  122. package/dist/private/calendar/utils.mjs +6 -2
  123. package/dist/private/calendar/utils.mjs.map +1 -1
  124. package/dist/private/checkbox/useCheckboxGroupState.cjs.map +1 -1
  125. package/dist/private/checkbox/useCheckboxGroupState.js.map +1 -1
  126. package/dist/private/checkbox/useCheckboxGroupState.mjs.map +1 -1
  127. package/dist/private/collections/CollectionBuilder.cjs.map +1 -1
  128. package/dist/private/collections/CollectionBuilder.js.map +1 -1
  129. package/dist/private/collections/CollectionBuilder.mjs.map +1 -1
  130. package/dist/private/collections/Item.cjs +1 -0
  131. package/dist/private/collections/Item.cjs.map +1 -1
  132. package/dist/private/collections/Item.js +1 -0
  133. package/dist/private/collections/Item.js.map +1 -1
  134. package/dist/private/collections/Item.mjs +1 -0
  135. package/dist/private/collections/Item.mjs.map +1 -1
  136. package/dist/private/collections/Section.cjs +1 -0
  137. package/dist/private/collections/Section.cjs.map +1 -1
  138. package/dist/private/collections/Section.js +1 -0
  139. package/dist/private/collections/Section.js.map +1 -1
  140. package/dist/private/collections/Section.mjs +1 -0
  141. package/dist/private/collections/Section.mjs.map +1 -1
  142. package/dist/private/collections/getChildNodes.cjs.map +1 -1
  143. package/dist/private/collections/getChildNodes.js.map +1 -1
  144. package/dist/private/collections/getChildNodes.mjs.map +1 -1
  145. package/dist/private/collections/useCollection.cjs.map +1 -1
  146. package/dist/private/collections/useCollection.js.map +1 -1
  147. package/dist/private/collections/useCollection.mjs.map +1 -1
  148. package/dist/private/color/Color.cjs +15 -9
  149. package/dist/private/color/Color.cjs.map +1 -1
  150. package/dist/private/color/Color.js +15 -9
  151. package/dist/private/color/Color.js.map +1 -1
  152. package/dist/private/color/Color.mjs +15 -9
  153. package/dist/private/color/Color.mjs.map +1 -1
  154. package/dist/private/color/useColorAreaState.cjs.map +1 -1
  155. package/dist/private/color/useColorAreaState.js.map +1 -1
  156. package/dist/private/color/useColorAreaState.mjs.map +1 -1
  157. package/dist/private/color/useColorChannelFieldState.cjs.map +1 -1
  158. package/dist/private/color/useColorChannelFieldState.js.map +1 -1
  159. package/dist/private/color/useColorChannelFieldState.mjs.map +1 -1
  160. package/dist/private/color/useColorFieldState.cjs.map +1 -1
  161. package/dist/private/color/useColorFieldState.js.map +1 -1
  162. package/dist/private/color/useColorFieldState.mjs.map +1 -1
  163. package/dist/private/color/useColorPickerState.cjs.map +1 -1
  164. package/dist/private/color/useColorPickerState.js.map +1 -1
  165. package/dist/private/color/useColorPickerState.mjs.map +1 -1
  166. package/dist/private/color/useColorSliderState.cjs +5 -3
  167. package/dist/private/color/useColorSliderState.cjs.map +1 -1
  168. package/dist/private/color/useColorSliderState.js +5 -3
  169. package/dist/private/color/useColorSliderState.js.map +1 -1
  170. package/dist/private/color/useColorSliderState.mjs +5 -3
  171. package/dist/private/color/useColorSliderState.mjs.map +1 -1
  172. package/dist/private/color/useColorWheelState.cjs.map +1 -1
  173. package/dist/private/color/useColorWheelState.js.map +1 -1
  174. package/dist/private/color/useColorWheelState.mjs.map +1 -1
  175. package/dist/private/combobox/useComboBoxState.cjs +8 -2
  176. package/dist/private/combobox/useComboBoxState.cjs.map +1 -1
  177. package/dist/private/combobox/useComboBoxState.js +8 -2
  178. package/dist/private/combobox/useComboBoxState.js.map +1 -1
  179. package/dist/private/combobox/useComboBoxState.mjs +8 -2
  180. package/dist/private/combobox/useComboBoxState.mjs.map +1 -1
  181. package/dist/private/data/useAsyncList.cjs.map +1 -1
  182. package/dist/private/data/useAsyncList.js.map +1 -1
  183. package/dist/private/data/useAsyncList.mjs.map +1 -1
  184. package/dist/private/data/useListData.cjs.map +1 -1
  185. package/dist/private/data/useListData.js.map +1 -1
  186. package/dist/private/data/useListData.mjs.map +1 -1
  187. package/dist/private/data/useTreeData.cjs.map +1 -1
  188. package/dist/private/data/useTreeData.js.map +1 -1
  189. package/dist/private/data/useTreeData.mjs.map +1 -1
  190. package/dist/private/datepicker/IncompleteDate.cjs +8 -2
  191. package/dist/private/datepicker/IncompleteDate.cjs.map +1 -1
  192. package/dist/private/datepicker/IncompleteDate.js +8 -2
  193. package/dist/private/datepicker/IncompleteDate.js.map +1 -1
  194. package/dist/private/datepicker/IncompleteDate.mjs +8 -2
  195. package/dist/private/datepicker/IncompleteDate.mjs.map +1 -1
  196. package/dist/private/datepicker/placeholders.cjs +5 -0
  197. package/dist/private/datepicker/placeholders.cjs.map +1 -1
  198. package/dist/private/datepicker/placeholders.js +5 -0
  199. package/dist/private/datepicker/placeholders.js.map +1 -1
  200. package/dist/private/datepicker/placeholders.mjs +5 -0
  201. package/dist/private/datepicker/placeholders.mjs.map +1 -1
  202. package/dist/private/datepicker/useDateFieldState.cjs.map +1 -1
  203. package/dist/private/datepicker/useDateFieldState.js.map +1 -1
  204. package/dist/private/datepicker/useDateFieldState.mjs.map +1 -1
  205. package/dist/private/datepicker/useDatePickerState.cjs.map +1 -1
  206. package/dist/private/datepicker/useDatePickerState.js.map +1 -1
  207. package/dist/private/datepicker/useDatePickerState.mjs.map +1 -1
  208. package/dist/private/datepicker/useDateRangePickerState.cjs +1 -1
  209. package/dist/private/datepicker/useDateRangePickerState.cjs.map +1 -1
  210. package/dist/private/datepicker/useDateRangePickerState.js +1 -1
  211. package/dist/private/datepicker/useDateRangePickerState.js.map +1 -1
  212. package/dist/private/datepicker/useDateRangePickerState.mjs +1 -1
  213. package/dist/private/datepicker/useDateRangePickerState.mjs.map +1 -1
  214. package/dist/private/datepicker/useTimeFieldState.cjs.map +1 -1
  215. package/dist/private/datepicker/useTimeFieldState.js.map +1 -1
  216. package/dist/private/datepicker/useTimeFieldState.mjs.map +1 -1
  217. package/dist/private/datepicker/utils.cjs +2 -2
  218. package/dist/private/datepicker/utils.cjs.map +1 -1
  219. package/dist/private/datepicker/utils.js +2 -2
  220. package/dist/private/datepicker/utils.js.map +1 -1
  221. package/dist/private/datepicker/utils.mjs +2 -2
  222. package/dist/private/datepicker/utils.mjs.map +1 -1
  223. package/dist/private/disclosure/useDisclosureGroupState.cjs.map +1 -1
  224. package/dist/private/disclosure/useDisclosureGroupState.js.map +1 -1
  225. package/dist/private/disclosure/useDisclosureGroupState.mjs.map +1 -1
  226. package/dist/private/disclosure/useDisclosureState.cjs.map +1 -1
  227. package/dist/private/disclosure/useDisclosureState.js.map +1 -1
  228. package/dist/private/disclosure/useDisclosureState.mjs.map +1 -1
  229. package/dist/private/dnd/useDraggableCollectionState.cjs.map +1 -1
  230. package/dist/private/dnd/useDraggableCollectionState.js.map +1 -1
  231. package/dist/private/dnd/useDraggableCollectionState.mjs.map +1 -1
  232. package/dist/private/dnd/useDroppableCollectionState.cjs.map +1 -1
  233. package/dist/private/dnd/useDroppableCollectionState.js.map +1 -1
  234. package/dist/private/dnd/useDroppableCollectionState.mjs.map +1 -1
  235. package/dist/private/form/useFormValidationState.cjs.map +1 -1
  236. package/dist/private/form/useFormValidationState.js.map +1 -1
  237. package/dist/private/form/useFormValidationState.mjs.map +1 -1
  238. package/dist/private/grid/GridCollection.cjs.map +1 -1
  239. package/dist/private/grid/GridCollection.js.map +1 -1
  240. package/dist/private/grid/GridCollection.mjs.map +1 -1
  241. package/dist/private/grid/useGridState.cjs.map +1 -1
  242. package/dist/private/grid/useGridState.js.map +1 -1
  243. package/dist/private/grid/useGridState.mjs.map +1 -1
  244. package/dist/private/layout/GridLayout.cjs +8 -3
  245. package/dist/private/layout/GridLayout.cjs.map +1 -1
  246. package/dist/private/layout/GridLayout.js +8 -3
  247. package/dist/private/layout/GridLayout.js.map +1 -1
  248. package/dist/private/layout/GridLayout.mjs +8 -3
  249. package/dist/private/layout/GridLayout.mjs.map +1 -1
  250. package/dist/private/layout/ListLayout.cjs +1 -1
  251. package/dist/private/layout/ListLayout.cjs.map +1 -1
  252. package/dist/private/layout/ListLayout.js +2 -1
  253. package/dist/private/layout/ListLayout.js.map +1 -1
  254. package/dist/private/layout/ListLayout.mjs +1 -1
  255. package/dist/private/layout/ListLayout.mjs.map +1 -1
  256. package/dist/private/layout/TableLayout.cjs +60 -35
  257. package/dist/private/layout/TableLayout.cjs.map +1 -1
  258. package/dist/private/layout/TableLayout.js +65 -38
  259. package/dist/private/layout/TableLayout.js.map +1 -1
  260. package/dist/private/layout/TableLayout.mjs +61 -36
  261. package/dist/private/layout/TableLayout.mjs.map +1 -1
  262. package/dist/private/layout/WaterfallLayout.cjs.map +1 -1
  263. package/dist/private/layout/WaterfallLayout.js.map +1 -1
  264. package/dist/private/layout/WaterfallLayout.mjs.map +1 -1
  265. package/dist/private/list/ListCollection.cjs.map +1 -1
  266. package/dist/private/list/ListCollection.js.map +1 -1
  267. package/dist/private/list/ListCollection.mjs.map +1 -1
  268. package/dist/private/list/useListState.cjs.map +1 -1
  269. package/dist/private/list/useListState.js.map +1 -1
  270. package/dist/private/list/useListState.mjs.map +1 -1
  271. package/dist/private/list/useSingleSelectListState.cjs.map +1 -1
  272. package/dist/private/list/useSingleSelectListState.js.map +1 -1
  273. package/dist/private/list/useSingleSelectListState.mjs.map +1 -1
  274. package/dist/private/menu/useMenuTriggerState.cjs.map +1 -1
  275. package/dist/private/menu/useMenuTriggerState.js.map +1 -1
  276. package/dist/private/menu/useMenuTriggerState.mjs.map +1 -1
  277. package/dist/private/menu/useSubmenuTriggerState.cjs.map +1 -1
  278. package/dist/private/menu/useSubmenuTriggerState.js.map +1 -1
  279. package/dist/private/menu/useSubmenuTriggerState.mjs.map +1 -1
  280. package/dist/private/numberfield/useNumberFieldState.cjs +13 -1
  281. package/dist/private/numberfield/useNumberFieldState.cjs.map +1 -1
  282. package/dist/private/numberfield/useNumberFieldState.js +13 -1
  283. package/dist/private/numberfield/useNumberFieldState.js.map +1 -1
  284. package/dist/private/numberfield/useNumberFieldState.mjs +13 -1
  285. package/dist/private/numberfield/useNumberFieldState.mjs.map +1 -1
  286. package/dist/private/overlays/useOverlayTriggerState.cjs.map +1 -1
  287. package/dist/private/overlays/useOverlayTriggerState.js.map +1 -1
  288. package/dist/private/overlays/useOverlayTriggerState.mjs.map +1 -1
  289. package/dist/private/radio/useRadioGroupState.cjs.map +1 -1
  290. package/dist/private/radio/useRadioGroupState.js.map +1 -1
  291. package/dist/private/radio/useRadioGroupState.mjs.map +1 -1
  292. package/dist/private/searchfield/useSearchFieldState.cjs.map +1 -1
  293. package/dist/private/searchfield/useSearchFieldState.js.map +1 -1
  294. package/dist/private/searchfield/useSearchFieldState.mjs.map +1 -1
  295. package/dist/private/select/useSelectState.cjs.map +1 -1
  296. package/dist/private/select/useSelectState.js.map +1 -1
  297. package/dist/private/select/useSelectState.mjs.map +1 -1
  298. package/dist/private/selection/SelectionManager.cjs +2 -1
  299. package/dist/private/selection/SelectionManager.cjs.map +1 -1
  300. package/dist/private/selection/SelectionManager.js +3 -2
  301. package/dist/private/selection/SelectionManager.js.map +1 -1
  302. package/dist/private/selection/SelectionManager.mjs +2 -1
  303. package/dist/private/selection/SelectionManager.mjs.map +1 -1
  304. package/dist/private/selection/useMultipleSelectionState.cjs.map +1 -1
  305. package/dist/private/selection/useMultipleSelectionState.js.map +1 -1
  306. package/dist/private/selection/useMultipleSelectionState.mjs.map +1 -1
  307. package/dist/private/slider/useSliderState.cjs +22 -2
  308. package/dist/private/slider/useSliderState.cjs.map +1 -1
  309. package/dist/private/slider/useSliderState.js +22 -2
  310. package/dist/private/slider/useSliderState.js.map +1 -1
  311. package/dist/private/slider/useSliderState.mjs +22 -2
  312. package/dist/private/slider/useSliderState.mjs.map +1 -1
  313. package/dist/private/steplist/useStepListState.cjs.map +1 -1
  314. package/dist/private/steplist/useStepListState.js.map +1 -1
  315. package/dist/private/steplist/useStepListState.mjs.map +1 -1
  316. package/dist/private/table/Cell.cjs +2 -1
  317. package/dist/private/table/Cell.cjs.map +1 -1
  318. package/dist/private/table/Cell.js +2 -1
  319. package/dist/private/table/Cell.js.map +1 -1
  320. package/dist/private/table/Cell.mjs +2 -1
  321. package/dist/private/table/Cell.mjs.map +1 -1
  322. package/dist/private/table/Column.cjs +1 -0
  323. package/dist/private/table/Column.cjs.map +1 -1
  324. package/dist/private/table/Column.js +1 -0
  325. package/dist/private/table/Column.js.map +1 -1
  326. package/dist/private/table/Column.mjs +1 -0
  327. package/dist/private/table/Column.mjs.map +1 -1
  328. package/dist/private/table/Row.cjs +2 -1
  329. package/dist/private/table/Row.cjs.map +1 -1
  330. package/dist/private/table/Row.js +2 -1
  331. package/dist/private/table/Row.js.map +1 -1
  332. package/dist/private/table/Row.mjs +2 -1
  333. package/dist/private/table/Row.mjs.map +1 -1
  334. package/dist/private/table/TableBody.cjs +4 -2
  335. package/dist/private/table/TableBody.cjs.map +1 -1
  336. package/dist/private/table/TableBody.js +4 -2
  337. package/dist/private/table/TableBody.js.map +1 -1
  338. package/dist/private/table/TableBody.mjs +4 -2
  339. package/dist/private/table/TableBody.mjs.map +1 -1
  340. package/dist/private/table/TableCollection.cjs +1 -1
  341. package/dist/private/table/TableCollection.cjs.map +1 -1
  342. package/dist/private/table/TableCollection.js +1 -1
  343. package/dist/private/table/TableCollection.js.map +1 -1
  344. package/dist/private/table/TableCollection.mjs +1 -1
  345. package/dist/private/table/TableCollection.mjs.map +1 -1
  346. package/dist/private/table/TableColumnLayout.cjs +4 -1
  347. package/dist/private/table/TableColumnLayout.cjs.map +1 -1
  348. package/dist/private/table/TableColumnLayout.js +4 -1
  349. package/dist/private/table/TableColumnLayout.js.map +1 -1
  350. package/dist/private/table/TableColumnLayout.mjs +4 -1
  351. package/dist/private/table/TableColumnLayout.mjs.map +1 -1
  352. package/dist/private/table/TableHeader.cjs +4 -2
  353. package/dist/private/table/TableHeader.cjs.map +1 -1
  354. package/dist/private/table/TableHeader.js +4 -2
  355. package/dist/private/table/TableHeader.js.map +1 -1
  356. package/dist/private/table/TableHeader.mjs +4 -2
  357. package/dist/private/table/TableHeader.mjs.map +1 -1
  358. package/dist/private/table/TableUtils.cjs +1 -1
  359. package/dist/private/table/TableUtils.cjs.map +1 -1
  360. package/dist/private/table/TableUtils.js +1 -1
  361. package/dist/private/table/TableUtils.js.map +1 -1
  362. package/dist/private/table/TableUtils.mjs +1 -1
  363. package/dist/private/table/TableUtils.mjs.map +1 -1
  364. package/dist/private/table/useTableColumnResizeState.cjs.map +1 -1
  365. package/dist/private/table/useTableColumnResizeState.js.map +1 -1
  366. package/dist/private/table/useTableColumnResizeState.mjs.map +1 -1
  367. package/dist/private/table/useTableState.cjs +2 -1
  368. package/dist/private/table/useTableState.cjs.map +1 -1
  369. package/dist/private/table/useTableState.js +2 -1
  370. package/dist/private/table/useTableState.js.map +1 -1
  371. package/dist/private/table/useTableState.mjs +2 -1
  372. package/dist/private/table/useTableState.mjs.map +1 -1
  373. package/dist/private/table/useTreeGridState.cjs +2 -1
  374. package/dist/private/table/useTreeGridState.cjs.map +1 -1
  375. package/dist/private/table/useTreeGridState.js +2 -1
  376. package/dist/private/table/useTreeGridState.js.map +1 -1
  377. package/dist/private/table/useTreeGridState.mjs +2 -1
  378. package/dist/private/table/useTreeGridState.mjs.map +1 -1
  379. package/dist/private/tabs/useTabListState.cjs.map +1 -1
  380. package/dist/private/tabs/useTabListState.js.map +1 -1
  381. package/dist/private/tabs/useTabListState.mjs.map +1 -1
  382. package/dist/private/toast/useToastState.cjs.map +1 -1
  383. package/dist/private/toast/useToastState.js.map +1 -1
  384. package/dist/private/toast/useToastState.mjs.map +1 -1
  385. package/dist/private/toggle/useToggleGroupState.cjs.map +1 -1
  386. package/dist/private/toggle/useToggleGroupState.js.map +1 -1
  387. package/dist/private/toggle/useToggleGroupState.mjs.map +1 -1
  388. package/dist/private/toggle/useToggleState.cjs.map +1 -1
  389. package/dist/private/toggle/useToggleState.js.map +1 -1
  390. package/dist/private/toggle/useToggleState.mjs.map +1 -1
  391. package/dist/private/tooltip/useTooltipTriggerState.cjs.map +1 -1
  392. package/dist/private/tooltip/useTooltipTriggerState.js.map +1 -1
  393. package/dist/private/tooltip/useTooltipTriggerState.mjs.map +1 -1
  394. package/dist/private/tree/TreeCollection.cjs.map +1 -1
  395. package/dist/private/tree/TreeCollection.js.map +1 -1
  396. package/dist/private/tree/TreeCollection.mjs.map +1 -1
  397. package/dist/private/tree/useTreeState.cjs.map +1 -1
  398. package/dist/private/tree/useTreeState.js.map +1 -1
  399. package/dist/private/tree/useTreeState.mjs.map +1 -1
  400. package/dist/private/utils/number.cjs +2 -1
  401. package/dist/private/utils/number.cjs.map +1 -1
  402. package/dist/private/utils/number.js +2 -1
  403. package/dist/private/utils/number.js.map +1 -1
  404. package/dist/private/utils/number.mjs +2 -1
  405. package/dist/private/utils/number.mjs.map +1 -1
  406. package/dist/private/utils/useControlledState.cjs.map +1 -1
  407. package/dist/private/utils/useControlledState.js.map +1 -1
  408. package/dist/private/utils/useControlledState.mjs.map +1 -1
  409. package/dist/private/virtualizer/Layout.cjs.map +1 -1
  410. package/dist/private/virtualizer/Layout.js.map +1 -1
  411. package/dist/private/virtualizer/Layout.mjs.map +1 -1
  412. package/dist/private/virtualizer/LayoutInfo.cjs +4 -2
  413. package/dist/private/virtualizer/LayoutInfo.cjs.map +1 -1
  414. package/dist/private/virtualizer/LayoutInfo.js +4 -2
  415. package/dist/private/virtualizer/LayoutInfo.js.map +1 -1
  416. package/dist/private/virtualizer/LayoutInfo.mjs +4 -2
  417. package/dist/private/virtualizer/LayoutInfo.mjs.map +1 -1
  418. package/dist/private/virtualizer/Rect.cjs +4 -0
  419. package/dist/private/virtualizer/Rect.cjs.map +1 -1
  420. package/dist/private/virtualizer/Rect.js +4 -0
  421. package/dist/private/virtualizer/Rect.js.map +1 -1
  422. package/dist/private/virtualizer/Rect.mjs +4 -0
  423. package/dist/private/virtualizer/Rect.mjs.map +1 -1
  424. package/dist/private/virtualizer/ReusableView.cjs.map +1 -1
  425. package/dist/private/virtualizer/ReusableView.js.map +1 -1
  426. package/dist/private/virtualizer/ReusableView.mjs.map +1 -1
  427. package/dist/private/virtualizer/Size.cjs.map +1 -1
  428. package/dist/private/virtualizer/Size.js.map +1 -1
  429. package/dist/private/virtualizer/Size.mjs.map +1 -1
  430. package/dist/private/virtualizer/Virtualizer.cjs +4 -4
  431. package/dist/private/virtualizer/Virtualizer.cjs.map +1 -1
  432. package/dist/private/virtualizer/Virtualizer.js +4 -4
  433. package/dist/private/virtualizer/Virtualizer.js.map +1 -1
  434. package/dist/private/virtualizer/Virtualizer.mjs +4 -4
  435. package/dist/private/virtualizer/Virtualizer.mjs.map +1 -1
  436. package/dist/private/virtualizer/useVirtualizerState.cjs.map +1 -1
  437. package/dist/private/virtualizer/useVirtualizerState.js.map +1 -1
  438. package/dist/private/virtualizer/useVirtualizerState.mjs.map +1 -1
  439. package/dist/types/exports/useCalendarState.d.ts +1 -1
  440. package/dist/types/src/autocomplete/useAutocompleteState.d.ts +4 -1
  441. package/dist/types/src/calendar/types.d.ts +50 -14
  442. package/dist/types/src/calendar/useCalendarState.d.ts +20 -6
  443. package/dist/types/src/calendar/useRangeCalendarState.d.ts +14 -5
  444. package/dist/types/src/calendar/utils.d.ts +1 -0
  445. package/dist/types/src/checkbox/useCheckboxGroupState.d.ts +1 -0
  446. package/dist/types/src/collections/useCollection.d.ts +1 -1
  447. package/dist/types/src/color/useColorAreaState.d.ts +21 -8
  448. package/dist/types/src/color/useColorFieldState.d.ts +2 -3
  449. package/dist/types/src/color/useColorSliderState.d.ts +4 -1
  450. package/dist/types/src/color/useColorWheelState.d.ts +5 -1
  451. package/dist/types/src/combobox/useComboBoxState.d.ts +19 -6
  452. package/dist/types/src/data/useAsyncList.d.ts +2 -2
  453. package/dist/types/src/data/useListData.d.ts +13 -1
  454. package/dist/types/src/data/useTreeData.d.ts +11 -0
  455. package/dist/types/src/datepicker/IncompleteDate.d.ts +11 -5
  456. package/dist/types/src/datepicker/types.d.ts +37 -11
  457. package/dist/types/src/datepicker/useDateFieldState.d.ts +13 -4
  458. package/dist/types/src/datepicker/useDatePickerState.d.ts +10 -4
  459. package/dist/types/src/datepicker/useDateRangePickerState.d.ts +12 -3
  460. package/dist/types/src/dnd/useDraggableCollectionState.d.ts +4 -1
  461. package/dist/types/src/form/useFormValidationState.d.ts +4 -1
  462. package/dist/types/src/grid/GridCollection.d.ts +2 -1
  463. package/dist/types/src/grid/useGridState.d.ts +7 -3
  464. package/dist/types/src/layout/GridLayout.d.ts +18 -2
  465. package/dist/types/src/layout/ListLayout.d.ts +34 -12
  466. package/dist/types/src/layout/TableLayout.d.ts +11 -4
  467. package/dist/types/src/layout/WaterfallLayout.d.ts +9 -2
  468. package/dist/types/src/list/useListState.d.ts +2 -2
  469. package/dist/types/src/menu/useMenuTriggerState.d.ts +3 -1
  470. package/dist/types/src/menu/useSubmenuTriggerState.d.ts +2 -2
  471. package/dist/types/src/numberfield/useNumberFieldState.d.ts +15 -11
  472. package/dist/types/src/radio/useRadioGroupState.d.ts +4 -1
  473. package/dist/types/src/select/useSelectState.d.ts +13 -2
  474. package/dist/types/src/selection/types.d.ts +4 -1
  475. package/dist/types/src/selection/useMultipleSelectionState.d.ts +2 -0
  476. package/dist/types/src/slider/useSliderState.d.ts +22 -2
  477. package/dist/types/src/table/Column.d.ts +4 -1
  478. package/dist/types/src/table/Row.d.ts +5 -3
  479. package/dist/types/src/table/TableBody.d.ts +3 -2
  480. package/dist/types/src/table/TableCollection.d.ts +4 -1
  481. package/dist/types/src/table/TableColumnLayout.d.ts +4 -1
  482. package/dist/types/src/table/TableHeader.d.ts +7 -3
  483. package/dist/types/src/table/TableUtils.d.ts +19 -16
  484. package/dist/types/src/table/useTableColumnResizeState.d.ts +5 -3
  485. package/dist/types/src/table/useTableState.d.ts +15 -6
  486. package/dist/types/src/table/useTreeGridState.d.ts +3 -2
  487. package/dist/types/src/toggle/useToggleGroupState.d.ts +1 -0
  488. package/dist/types/src/toggle/useToggleState.d.ts +2 -1
  489. package/dist/types/src/tooltip/useTooltipTriggerState.d.ts +8 -2
  490. package/dist/types/src/tree/useTreeState.d.ts +1 -1
  491. package/dist/types/src/utils/number.d.ts +2 -1
  492. package/dist/types/src/virtualizer/Layout.d.ts +5 -2
  493. package/dist/types/src/virtualizer/LayoutInfo.d.ts +10 -3
  494. package/dist/types/src/virtualizer/Rect.d.ts +4 -0
  495. package/dist/types/src/virtualizer/Virtualizer.d.ts +5 -4
  496. package/package.json +8 -7
@@ -106,8 +106,28 @@ function $f9570b296a78cc5e$export$e5fda3247f5d67f9(props) {
106
106
  // Call onChangeEnd if no handles are dragging.
107
107
  if (onChangeEnd && wasDragging && !isDraggingsRef.current.some(Boolean)) onChangeEnd(valuesRef.current);
108
108
  }
109
- function getFormattedValue(value) {
110
- return formatter.format(value);
109
+ let listFormatRef = (0, $h6QKk$react.useRef)(null);
110
+ function getFormattedValue(valueParam = values) {
111
+ if (typeof valueParam === 'number') valueParam = [
112
+ valueParam
113
+ ];
114
+ switch(valueParam.length){
115
+ case 0:
116
+ return '';
117
+ case 1:
118
+ return formatter.format(valueParam[0]);
119
+ case 2:
120
+ return formatter.formatRange(valueParam[0], valueParam[1]);
121
+ default:
122
+ {
123
+ let formatted = valueParam.map((value)=>formatter.format(value));
124
+ let listFormat = listFormatRef.current;
125
+ if (!listFormat || listFormat.resolvedOptions().locale !== formatter.resolvedOptions().locale) listFormat = listFormatRef.current = new Intl.ListFormat(formatter.resolvedOptions().locale, {
126
+ type: 'unit'
127
+ });
128
+ return listFormat.format(formatted);
129
+ }
130
+ }
111
131
  }
112
132
  function setThumbPercent(index, percent) {
113
133
  updateValue(index, getPercentValue(percent));
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/react-stately/src/slider/useSliderState.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {clamp, snapValueToStep} from '../utils/number';\n\nimport {LabelableProps, Orientation, RangeInputBase, ValueBase} from '@react-types/shared';\nimport {useCallback, useMemo, useRef, useState} from 'react';\nimport {useControlledState} from '../utils/useControlledState';\n\nexport interface SliderProps<T = number | number[]> extends RangeInputBase<number>, ValueBase<T>, LabelableProps {\n /**\n * The orientation of the Slider.\n * @default 'horizontal'\n */\n orientation?: Orientation,\n /** Whether the whole Slider is disabled. */\n isDisabled?: boolean,\n /** Fired when the slider stops moving, due to being let go. */\n onChangeEnd?: (value: T) => void,\n // These are duplicated from ValueBase to define defaults for the docs.\n /**\n * The slider's minimum value.\n * @default 0\n */\n minValue?: number,\n /**\n * The slider's maximum value.\n * @default 100\n */\n maxValue?: number,\n /**\n * The slider's step value.\n * @default 1\n */\n step?: number\n}\n\nexport interface SliderState {\n /**\n * Values managed by the slider by thumb index.\n */\n readonly values: number[],\n /**\n * The default values for each thumb.\n */\n readonly defaultValues: number[],\n /**\n * Get the value for the specified thumb.\n * @param index\n */\n getThumbValue(index: number): number,\n\n /**\n * Sets the value for the specified thumb.\n * The actual value set will be clamped and rounded according to min/max/step.\n * @param index\n * @param value\n */\n setThumbValue(index: number, value: number): void,\n\n /**\n * Sets value for the specified thumb by percent offset (between 0 and 1).\n * @param index\n * @param percent\n */\n setThumbPercent(index: number, percent: number): void,\n\n /**\n * Whether the specific thumb is being dragged.\n * @param index\n */\n isThumbDragging(index: number): boolean,\n /**\n * Set is dragging on the specified thumb.\n * @param index\n * @param dragging\n */\n setThumbDragging(index: number, dragging: boolean): void,\n\n /**\n * Currently-focused thumb index.\n */\n readonly focusedThumb: number | undefined,\n /**\n * Set focused true on specified thumb. This will remove focus from\n * any thumb that had it before.\n * @param index\n */\n setFocusedThumb(index: number | undefined): void,\n\n /**\n * Returns the specified thumb's value as a percentage from 0 to 1.\n * @param index\n */\n getThumbPercent(index: number): number,\n\n /**\n * Returns the value as a percent between the min and max of the slider.\n * @param index\n */\n getValuePercent(value: number): number,\n\n /**\n * Returns the string label for the specified thumb's value, per props.formatOptions.\n * @param index\n */\n getThumbValueLabel(index: number): string,\n\n /**\n * Returns the string label for the value, per props.formatOptions.\n * @param index\n */\n getFormattedValue(value: number): string,\n\n /**\n * Returns the min allowed value for the specified thumb.\n * @param index\n */\n getThumbMinValue(index: number): number,\n\n /**\n * Returns the max allowed value for the specified thumb.\n * @param index\n */\n getThumbMaxValue(index: number): number,\n\n /**\n * Converts a percent along track (between 0 and 1) to the corresponding value.\n * @param percent\n */\n getPercentValue(percent: number): number,\n\n /**\n * Returns if the specified thumb is editable.\n * @param index\n */\n isThumbEditable(index: number): boolean,\n\n /**\n * Set the specified thumb's editable state.\n * @param index\n * @param editable\n */\n setThumbEditable(index: number, editable: boolean): void,\n\n /**\n * Increments the value of the thumb by the step or page amount.\n */\n incrementThumb(index: number, stepSize?: number): void,\n /**\n * Decrements the value of the thumb by the step or page amount.\n */\n decrementThumb(index: number, stepSize?: number): void,\n\n /**\n * The step amount for the slider.\n */\n readonly step: number,\n\n /**\n * The page size for the slider, used to do a bigger step.\n */\n readonly pageSize: number,\n\n /** The orientation of the slider. */\n readonly orientation: Orientation,\n\n /** Whether the slider is disabled. */\n readonly isDisabled: boolean\n}\n\nconst DEFAULT_MIN_VALUE = 0;\nconst DEFAULT_MAX_VALUE = 100;\nconst DEFAULT_STEP_VALUE = 1;\n\nexport interface SliderStateOptions<T> extends SliderProps<T> {\n numberFormatter: Intl.NumberFormat\n}\n\n/**\n * Provides state management for a slider component. Stores values for all thumbs,\n * formats values for localization, and provides methods to update the position\n * of any thumbs.\n * @param props\n */\nexport function useSliderState<T extends number | number[]>(props: SliderStateOptions<T>): SliderState {\n const {\n isDisabled = false,\n minValue = DEFAULT_MIN_VALUE,\n maxValue = DEFAULT_MAX_VALUE,\n numberFormatter: formatter,\n step = DEFAULT_STEP_VALUE,\n orientation = 'horizontal'\n } = props;\n\n // Page step should be at least equal to step and always a multiple of the step.\n let pageSize = useMemo(() => {\n let calcPageSize = (maxValue - minValue) / 10;\n calcPageSize = snapValueToStep(calcPageSize, 0, calcPageSize + step, step);\n return Math.max(calcPageSize, step);\n }, [step, maxValue, minValue]);\n\n let restrictValues = useCallback((values: number[] | undefined) => values?.map((val, idx) => {\n let min = idx === 0 ? minValue : values[idx - 1];\n let max = idx === values.length - 1 ? maxValue : values[idx + 1];\n return snapValueToStep(val, min, max, step);\n }), [minValue, maxValue, step]);\n\n let value = useMemo(() => restrictValues(convertValue(props.value)), [props.value, restrictValues]);\n let defaultValue = useMemo(() => restrictValues(convertValue(props.defaultValue) ?? [minValue])!, [props.defaultValue, minValue, restrictValues]);\n let onChange = createOnChange(props.value, props.defaultValue, props.onChange);\n let onChangeEnd = createOnChange(props.value, props.defaultValue, props.onChangeEnd);\n\n const [values, setValuesState] = useControlledState<number[]>(\n value,\n defaultValue,\n onChange\n );\n let [initialValues] = useState(values);\n const [isDraggings, setDraggingsState] = useState<boolean[]>(new Array(values.length).fill(false));\n const isEditablesRef = useRef<boolean[]>(new Array(values.length).fill(true));\n const [focusedIndex, setFocusedIndex] = useState<number | undefined>(undefined);\n\n const valuesRef = useRef<number[]>(values);\n const isDraggingsRef = useRef<boolean[]>(isDraggings);\n\n let setValues = (values: number[]) => {\n valuesRef.current = values;\n setValuesState(values);\n };\n\n let setDraggings = (draggings: boolean[]) => {\n isDraggingsRef.current = draggings;\n setDraggingsState(draggings);\n };\n\n function getValuePercent(value: number) {\n return (value - minValue) / (maxValue - minValue);\n }\n\n function getThumbMinValue(index: number) {\n return index === 0 ? minValue : values[index - 1];\n }\n function getThumbMaxValue(index: number) {\n return index === values.length - 1 ? maxValue : values[index + 1];\n }\n\n function isThumbEditable(index: number) {\n return isEditablesRef.current[index];\n }\n\n function setThumbEditable(index: number, editable: boolean) {\n isEditablesRef.current[index] = editable;\n }\n\n function updateValue(index: number, value: number) {\n if (isDisabled || !isThumbEditable(index)) {\n return;\n }\n const thisMin = getThumbMinValue(index);\n const thisMax = getThumbMaxValue(index);\n\n // Round value to multiple of step, clamp value between min and max\n value = snapValueToStep(value, thisMin, thisMax, step);\n let newValues = replaceIndex(valuesRef.current, index, value);\n setValues(newValues);\n }\n\n function updateDragging(index: number, dragging: boolean) {\n if (isDisabled || !isThumbEditable(index)) {\n return;\n }\n if (dragging) {\n valuesRef.current = values;\n }\n\n const wasDragging = isDraggingsRef.current[index];\n isDraggingsRef.current = replaceIndex(isDraggingsRef.current, index, dragging);\n setDraggings(isDraggingsRef.current);\n\n // Call onChangeEnd if no handles are dragging.\n if (onChangeEnd && wasDragging && !isDraggingsRef.current.some(Boolean)) {\n onChangeEnd(valuesRef.current);\n }\n }\n\n function getFormattedValue(value: number) {\n return formatter.format(value);\n }\n\n function setThumbPercent(index: number, percent: number) {\n updateValue(index, getPercentValue(percent));\n }\n\n function getRoundedValue(value: number) {\n return Math.round((value - minValue) / step) * step + minValue;\n }\n\n function getPercentValue(percent: number) {\n const val = percent * (maxValue - minValue) + minValue;\n return clamp(getRoundedValue(val), minValue, maxValue);\n }\n\n function incrementThumb(index: number, stepSize: number = 1) {\n let s = Math.max(stepSize, step);\n updateValue(index, snapValueToStep(values[index] + s, minValue, maxValue, step));\n }\n\n function decrementThumb(index: number, stepSize: number = 1) {\n let s = Math.max(stepSize, step);\n updateValue(index, snapValueToStep(values[index] - s, minValue, maxValue, step));\n }\n\n return {\n values: values,\n defaultValues: props.defaultValue !== undefined ? defaultValue : initialValues,\n getThumbValue: (index: number) => values[index],\n setThumbValue: updateValue,\n setThumbPercent,\n isThumbDragging: (index: number) => isDraggings[index],\n setThumbDragging: updateDragging,\n focusedThumb: focusedIndex,\n setFocusedThumb: setFocusedIndex,\n getThumbPercent: (index: number) => getValuePercent(values[index]),\n getValuePercent,\n getThumbValueLabel: (index: number) => getFormattedValue(values[index]),\n getFormattedValue,\n getThumbMinValue,\n getThumbMaxValue,\n getPercentValue,\n isThumbEditable,\n setThumbEditable,\n incrementThumb,\n decrementThumb,\n step,\n pageSize,\n orientation,\n isDisabled\n };\n}\n\nfunction replaceIndex<T>(array: T[], index: number, value: T) {\n if (array[index] === value) {\n return array;\n }\n\n return [...array.slice(0, index), value, ...array.slice(index + 1)];\n}\n\nfunction convertValue(value?: number | number[]) {\n if (value == null) {\n return undefined;\n }\n\n return Array.isArray(value) ? value : [value];\n}\n\nfunction createOnChange(value, defaultValue, onChange) {\n return (newValue: number[]) => {\n if (typeof value === 'number' || typeof defaultValue === 'number') {\n onChange?.(newValue[0]);\n } else {\n onChange?.(newValue);\n }\n };\n}\n"],"names":[],"version":3,"file":"useSliderState.cjs.map"}
1
+ {"mappings":";;;;;;;;;;AAAA;;;;;;;;;;CAUC;;;AA8LD,MAAM,0CAAoB;AAC1B,MAAM,0CAAoB;AAC1B,MAAM,2CAAqB;AAapB,SAAS,0CACd,KAA4B;IAE5B,MAAM,cACJ,aAAa,iBACb,WAAW,mDACX,WAAW,yCACX,iBAAiB,SAAS,QAC1B,OAAO,uDACP,cAAc,cACf,GAAG;IAEJ,gFAAgF;IAChF,IAAI,WAAW,CAAA,GAAA,oBAAM,EAAE;QACrB,IAAI,eAAe,AAAC,CAAA,WAAW,QAAO,IAAK;QAC3C,eAAe,CAAA,GAAA,yCAAc,EAAE,cAAc,GAAG,eAAe,MAAM;QACrE,OAAO,KAAK,GAAG,CAAC,cAAc;IAChC,GAAG;QAAC;QAAM;QAAU;KAAS;IAE7B,IAAI,iBAAiB,CAAA,GAAA,wBAAU,EAC7B,CAAC,SACC,QAAQ,IAAI,CAAC,KAAK;YAChB,IAAI,MAAM,QAAQ,IAAI,WAAW,MAAM,CAAC,MAAM,EAAE;YAChD,IAAI,MAAM,QAAQ,OAAO,MAAM,GAAG,IAAI,WAAW,MAAM,CAAC,MAAM,EAAE;YAChE,OAAO,CAAA,GAAA,yCAAc,EAAE,KAAK,KAAK,KAAK;QACxC,IACF;QAAC;QAAU;QAAU;KAAK;IAG5B,IAAI,QAAQ,CAAA,GAAA,oBAAM,EAChB,IAAM,eAAe,mCAAa,MAAM,KAAK,IAC7C;QAAC,MAAM,KAAK;QAAE;KAAe;IAE/B,IAAI,eAAe,CAAA,GAAA,oBAAM,EACvB,IAAM,eAAe,mCAAa,MAAM,YAAY,KAAK;YAAC;SAAS,GACnE;QAAC,MAAM,YAAY;QAAE;QAAU;KAAe;IAEhD,IAAI,WAAW,qCAAe,MAAM,KAAK,EAAE,MAAM,YAAY,EAAE,MAAM,QAAQ;IAC7E,IAAI,cAAc,qCAAe,MAAM,KAAK,EAAE,MAAM,YAAY,EAAE,MAAM,WAAW;IAEnF,MAAM,CAAC,QAAQ,eAAe,GAAG,CAAA,GAAA,4CAAiB,EAAY,OAAO,cAAc;IACnF,IAAI,CAAC,cAAc,GAAG,CAAA,GAAA,qBAAO,EAAE;IAC/B,MAAM,CAAC,aAAa,kBAAkB,GAAG,CAAA,GAAA,qBAAO,EAC9C,IAAI,MAAM,OAAO,MAAM,EAAE,IAAI,CAAC;IAEhC,MAAM,iBAAiB,CAAA,GAAA,mBAAK,EAAa,IAAI,MAAM,OAAO,MAAM,EAAE,IAAI,CAAC;IACvE,MAAM,CAAC,cAAc,gBAAgB,GAAG,CAAA,GAAA,qBAAO,EAAsB;IAErE,MAAM,YAAY,CAAA,GAAA,mBAAK,EAAY;IACnC,MAAM,iBAAiB,CAAA,GAAA,mBAAK,EAAa;IAEzC,IAAI,YAAY,CAAC;QACf,UAAU,OAAO,GAAG;QACpB,eAAe;IACjB;IAEA,IAAI,eAAe,CAAC;QAClB,eAAe,OAAO,GAAG;QACzB,kBAAkB;IACpB;IAEA,SAAS,gBAAgB,KAAa;QACpC,OAAO,AAAC,CAAA,QAAQ,QAAO,IAAM,CAAA,WAAW,QAAO;IACjD;IAEA,SAAS,iBAAiB,KAAa;QACrC,OAAO,UAAU,IAAI,WAAW,MAAM,CAAC,QAAQ,EAAE;IACnD;IACA,SAAS,iBAAiB,KAAa;QACrC,OAAO,UAAU,OAAO,MAAM,GAAG,IAAI,WAAW,MAAM,CAAC,QAAQ,EAAE;IACnE;IAEA,SAAS,gBAAgB,KAAa;QACpC,OAAO,eAAe,OAAO,CAAC,MAAM;IACtC;IAEA,SAAS,iBAAiB,KAAa,EAAE,QAAiB;QACxD,eAAe,OAAO,CAAC,MAAM,GAAG;IAClC;IAEA,SAAS,YAAY,KAAa,EAAE,KAAa;QAC/C,IAAI,cAAc,CAAC,gBAAgB,QACjC;QAEF,MAAM,UAAU,iBAAiB;QACjC,MAAM,UAAU,iBAAiB;QAEjC,mEAAmE;QACnE,QAAQ,CAAA,GAAA,yCAAc,EAAE,OAAO,SAAS,SAAS;QACjD,IAAI,YAAY,mCAAa,UAAU,OAAO,EAAE,OAAO;QACvD,UAAU;IACZ;IAEA,SAAS,eAAe,KAAa,EAAE,QAAiB;QACtD,IAAI,cAAc,CAAC,gBAAgB,QACjC;QAEF,IAAI,UACF,UAAU,OAAO,GAAG;QAGtB,MAAM,cAAc,eAAe,OAAO,CAAC,MAAM;QACjD,eAAe,OAAO,GAAG,mCAAa,eAAe,OAAO,EAAE,OAAO;QACrE,aAAa,eAAe,OAAO;QAEnC,+CAA+C;QAC/C,IAAI,eAAe,eAAe,CAAC,eAAe,OAAO,CAAC,IAAI,CAAC,UAC7D,YAAY,UAAU,OAAO;IAEjC;IAEA,IAAI,gBAAgB,CAAA,GAAA,mBAAK,EAA0B;IAEnD,SAAS,kBAAkB,aAAgC,MAAM;QAC/D,IAAI,OAAO,eAAe,UACxB,aAAa;YAAC;SAAW;QAG3B,OAAQ,WAAW,MAAM;YACvB,KAAK;gBACH,OAAO;YACT,KAAK;gBACH,OAAO,UAAU,MAAM,CAAC,UAAU,CAAC,EAAE;YACvC,KAAK;gBACH,OAAO,UAAU,WAAW,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE;YAC3D;gBAAS;oBACP,IAAI,YAAY,WAAW,GAAG,CAAC,CAAA,QAAS,UAAU,MAAM,CAAC;oBACzD,IAAI,aAAa,cAAc,OAAO;oBACtC,IACE,CAAC,cACD,WAAW,eAAe,GAAG,MAAM,KAAK,UAAU,eAAe,GAAG,MAAM,EAE1E,aAAa,cAAc,OAAO,GAAG,IAAI,KAAK,UAAU,CACtD,UAAU,eAAe,GAAG,MAAM,EAClC;wBAAC,MAAM;oBAAM;oBAGjB,OAAO,WAAW,MAAM,CAAC;gBAC3B;QACF;IACF;IAEA,SAAS,gBAAgB,KAAa,EAAE,OAAe;QACrD,YAAY,OAAO,gBAAgB;IACrC;IAEA,SAAS,gBAAgB,KAAa;QACpC,OAAO,KAAK,KAAK,CAAC,AAAC,CAAA,QAAQ,QAAO,IAAK,QAAQ,OAAO;IACxD;IAEA,SAAS,gBAAgB,OAAe;QACtC,MAAM,MAAM,UAAW,CAAA,WAAW,QAAO,IAAK;QAC9C,OAAO,CAAA,GAAA,+BAAI,EAAE,gBAAgB,MAAM,UAAU;IAC/C;IAEA,SAAS,eAAe,KAAa,EAAE,WAAmB,CAAC;QACzD,IAAI,IAAI,KAAK,GAAG,CAAC,UAAU;QAC3B,YAAY,OAAO,CAAA,GAAA,yCAAc,EAAE,MAAM,CAAC,MAAM,GAAG,GAAG,UAAU,UAAU;IAC5E;IAEA,SAAS,eAAe,KAAa,EAAE,WAAmB,CAAC;QACzD,IAAI,IAAI,KAAK,GAAG,CAAC,UAAU;QAC3B,YAAY,OAAO,CAAA,GAAA,yCAAc,EAAE,MAAM,CAAC,MAAM,GAAG,GAAG,UAAU,UAAU;IAC5E;IAEA,OAAO;QACL,QAAQ;QACR,eAAe,MAAM,YAAY,KAAK,YAAY,eAAe;QACjE,eAAe,CAAC,QAAkB,MAAM,CAAC,MAAM;QAC/C,eAAe;yBACf;QACA,iBAAiB,CAAC,QAAkB,WAAW,CAAC,MAAM;QACtD,kBAAkB;QAClB,cAAc;QACd,iBAAiB;QACjB,iBAAiB,CAAC,QAAkB,gBAAgB,MAAM,CAAC,MAAM;yBACjE;QACA,oBAAoB,CAAC,QAAkB,kBAAkB,MAAM,CAAC,MAAM;2BACtE;0BACA;0BACA;yBACA;yBACA;0BACA;wBACA;wBACA;cACA;kBACA;qBACA;oBACA;IACF;AACF;AAEA,SAAS,mCAAgB,KAAU,EAAE,KAAa,EAAE,KAAQ;IAC1D,IAAI,KAAK,CAAC,MAAM,KAAK,OACnB,OAAO;IAGT,OAAO;WAAI,MAAM,KAAK,CAAC,GAAG;QAAQ;WAAU,MAAM,KAAK,CAAC,QAAQ;KAAG;AACrE;AAEA,SAAS,mCAAa,KAAyB;IAC7C,IAAI,SAAS,MACX,OAAO;IAGT,OAAO,MAAM,OAAO,CAAC,SAAS,QAAQ;QAAC;KAAM;AAC/C;AAEA,SAAS,qCAAe,KAAK,EAAE,YAAY,EAAE,QAAQ;IACnD,OAAO,CAAC;QACN,IAAI,OAAO,UAAU,YAAY,OAAO,iBAAiB,UACvD,WAAW,QAAQ,CAAC,EAAE;aAEtB,WAAW;IAEf;AACF","sources":["packages/react-stately/src/slider/useSliderState.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {clamp, snapValueToStep} from '../utils/number';\n\nimport {LabelableProps, Orientation, RangeInputBase, ValueBase} from '@react-types/shared';\nimport {useCallback, useMemo, useRef, useState} from 'react';\nimport {useControlledState} from '../utils/useControlledState';\n\nexport interface SliderProps<T = number | number[]>\n extends RangeInputBase<number>, ValueBase<T>, LabelableProps {\n /**\n * The orientation of the Slider.\n *\n * @default 'horizontal'\n */\n orientation?: Orientation;\n /** Whether the whole Slider is disabled. */\n isDisabled?: boolean;\n /** Fired when the slider stops moving, due to being let go. */\n onChangeEnd?: (value: T) => void;\n // These are duplicated from ValueBase to define defaults for the docs.\n /**\n * The slider's minimum value.\n *\n * @default 0\n */\n minValue?: number;\n /**\n * The slider's maximum value.\n *\n * @default 100\n */\n maxValue?: number;\n /**\n * The slider's step value.\n *\n * @default 1\n */\n step?: number;\n}\n\nexport interface SliderState {\n /**\n * Values managed by the slider by thumb index.\n */\n readonly values: number[];\n /**\n * The default values for each thumb.\n */\n readonly defaultValues: number[];\n /**\n * Get the value for the specified thumb.\n *\n * @param index\n */\n getThumbValue(index: number): number;\n\n /**\n * Sets the value for the specified thumb.\n * The actual value set will be clamped and rounded according to min/max/step.\n *\n * @param index\n * @param value\n */\n setThumbValue(index: number, value: number): void;\n\n /**\n * Sets value for the specified thumb by percent offset (between 0 and 1).\n *\n * @param index\n * @param percent\n */\n setThumbPercent(index: number, percent: number): void;\n\n /**\n * Whether the specific thumb is being dragged.\n *\n * @param index\n */\n isThumbDragging(index: number): boolean;\n /**\n * Set is dragging on the specified thumb.\n *\n * @param index\n * @param dragging\n */\n setThumbDragging(index: number, dragging: boolean): void;\n\n /**\n * Currently-focused thumb index.\n */\n readonly focusedThumb: number | undefined;\n /**\n * Set focused true on specified thumb. This will remove focus from\n * any thumb that had it before.\n *\n * @param index\n */\n setFocusedThumb(index: number | undefined): void;\n\n /**\n * Returns the specified thumb's value as a percentage from 0 to 1.\n *\n * @param index\n */\n getThumbPercent(index: number): number;\n\n /**\n * Returns the value as a percent between the min and max of the slider.\n *\n * @param index\n */\n getValuePercent(value: number): number;\n\n /**\n * Returns the string label for the specified thumb's value, per props.formatOptions.\n *\n * @param index\n */\n getThumbValueLabel(index: number): string;\n\n /**\n * Returns the string label for the value, per props.formatOptions.\n *\n * @param value\n */\n getFormattedValue(value?: number | number[]): string;\n\n /**\n * Returns the min allowed value for the specified thumb.\n *\n * @param index\n */\n getThumbMinValue(index: number): number;\n\n /**\n * Returns the max allowed value for the specified thumb.\n *\n * @param index\n */\n getThumbMaxValue(index: number): number;\n\n /**\n * Converts a percent along track (between 0 and 1) to the corresponding value.\n *\n * @param percent\n */\n getPercentValue(percent: number): number;\n\n /**\n * Returns if the specified thumb is editable.\n *\n * @param index\n */\n isThumbEditable(index: number): boolean;\n\n /**\n * Set the specified thumb's editable state.\n *\n * @param index\n * @param editable\n */\n setThumbEditable(index: number, editable: boolean): void;\n\n /**\n * Increments the value of the thumb by the step or page amount.\n */\n incrementThumb(index: number, stepSize?: number): void;\n /**\n * Decrements the value of the thumb by the step or page amount.\n */\n decrementThumb(index: number, stepSize?: number): void;\n\n /**\n * The step amount for the slider.\n */\n readonly step: number;\n\n /**\n * The page size for the slider, used to do a bigger step.\n */\n readonly pageSize: number;\n\n /** The orientation of the slider. */\n readonly orientation: Orientation;\n\n /** Whether the slider is disabled. */\n readonly isDisabled: boolean;\n}\n\nconst DEFAULT_MIN_VALUE = 0;\nconst DEFAULT_MAX_VALUE = 100;\nconst DEFAULT_STEP_VALUE = 1;\n\nexport interface SliderStateOptions<T> extends SliderProps<T> {\n numberFormatter: Intl.NumberFormat;\n}\n\n/**\n * Provides state management for a slider component. Stores values for all thumbs,\n * formats values for localization, and provides methods to update the position\n * of any thumbs.\n *\n * @param props\n */\nexport function useSliderState<T extends number | number[]>(\n props: SliderStateOptions<T>\n): SliderState {\n const {\n isDisabled = false,\n minValue = DEFAULT_MIN_VALUE,\n maxValue = DEFAULT_MAX_VALUE,\n numberFormatter: formatter,\n step = DEFAULT_STEP_VALUE,\n orientation = 'horizontal'\n } = props;\n\n // Page step should be at least equal to step and always a multiple of the step.\n let pageSize = useMemo(() => {\n let calcPageSize = (maxValue - minValue) / 10;\n calcPageSize = snapValueToStep(calcPageSize, 0, calcPageSize + step, step);\n return Math.max(calcPageSize, step);\n }, [step, maxValue, minValue]);\n\n let restrictValues = useCallback(\n (values: number[] | undefined) =>\n values?.map((val, idx) => {\n let min = idx === 0 ? minValue : values[idx - 1];\n let max = idx === values.length - 1 ? maxValue : values[idx + 1];\n return snapValueToStep(val, min, max, step);\n }),\n [minValue, maxValue, step]\n );\n\n let value = useMemo(\n () => restrictValues(convertValue(props.value)),\n [props.value, restrictValues]\n );\n let defaultValue = useMemo(\n () => restrictValues(convertValue(props.defaultValue) ?? [minValue])!,\n [props.defaultValue, minValue, restrictValues]\n );\n let onChange = createOnChange(props.value, props.defaultValue, props.onChange);\n let onChangeEnd = createOnChange(props.value, props.defaultValue, props.onChangeEnd);\n\n const [values, setValuesState] = useControlledState<number[]>(value, defaultValue, onChange);\n let [initialValues] = useState(values);\n const [isDraggings, setDraggingsState] = useState<boolean[]>(\n new Array(values.length).fill(false)\n );\n const isEditablesRef = useRef<boolean[]>(new Array(values.length).fill(true));\n const [focusedIndex, setFocusedIndex] = useState<number | undefined>(undefined);\n\n const valuesRef = useRef<number[]>(values);\n const isDraggingsRef = useRef<boolean[]>(isDraggings);\n\n let setValues = (values: number[]) => {\n valuesRef.current = values;\n setValuesState(values);\n };\n\n let setDraggings = (draggings: boolean[]) => {\n isDraggingsRef.current = draggings;\n setDraggingsState(draggings);\n };\n\n function getValuePercent(value: number) {\n return (value - minValue) / (maxValue - minValue);\n }\n\n function getThumbMinValue(index: number) {\n return index === 0 ? minValue : values[index - 1];\n }\n function getThumbMaxValue(index: number) {\n return index === values.length - 1 ? maxValue : values[index + 1];\n }\n\n function isThumbEditable(index: number) {\n return isEditablesRef.current[index];\n }\n\n function setThumbEditable(index: number, editable: boolean) {\n isEditablesRef.current[index] = editable;\n }\n\n function updateValue(index: number, value: number) {\n if (isDisabled || !isThumbEditable(index)) {\n return;\n }\n const thisMin = getThumbMinValue(index);\n const thisMax = getThumbMaxValue(index);\n\n // Round value to multiple of step, clamp value between min and max\n value = snapValueToStep(value, thisMin, thisMax, step);\n let newValues = replaceIndex(valuesRef.current, index, value);\n setValues(newValues);\n }\n\n function updateDragging(index: number, dragging: boolean) {\n if (isDisabled || !isThumbEditable(index)) {\n return;\n }\n if (dragging) {\n valuesRef.current = values;\n }\n\n const wasDragging = isDraggingsRef.current[index];\n isDraggingsRef.current = replaceIndex(isDraggingsRef.current, index, dragging);\n setDraggings(isDraggingsRef.current);\n\n // Call onChangeEnd if no handles are dragging.\n if (onChangeEnd && wasDragging && !isDraggingsRef.current.some(Boolean)) {\n onChangeEnd(valuesRef.current);\n }\n }\n\n let listFormatRef = useRef<Intl.ListFormat | null>(null);\n\n function getFormattedValue(valueParam: number | number[] = values) {\n if (typeof valueParam === 'number') {\n valueParam = [valueParam];\n }\n\n switch (valueParam.length) {\n case 0:\n return '';\n case 1:\n return formatter.format(valueParam[0]);\n case 2:\n return formatter.formatRange(valueParam[0], valueParam[1]);\n default: {\n let formatted = valueParam.map(value => formatter.format(value));\n let listFormat = listFormatRef.current;\n if (\n !listFormat ||\n listFormat.resolvedOptions().locale !== formatter.resolvedOptions().locale\n ) {\n listFormat = listFormatRef.current = new Intl.ListFormat(\n formatter.resolvedOptions().locale,\n {type: 'unit'}\n );\n }\n return listFormat.format(formatted);\n }\n }\n }\n\n function setThumbPercent(index: number, percent: number) {\n updateValue(index, getPercentValue(percent));\n }\n\n function getRoundedValue(value: number) {\n return Math.round((value - minValue) / step) * step + minValue;\n }\n\n function getPercentValue(percent: number) {\n const val = percent * (maxValue - minValue) + minValue;\n return clamp(getRoundedValue(val), minValue, maxValue);\n }\n\n function incrementThumb(index: number, stepSize: number = 1) {\n let s = Math.max(stepSize, step);\n updateValue(index, snapValueToStep(values[index] + s, minValue, maxValue, step));\n }\n\n function decrementThumb(index: number, stepSize: number = 1) {\n let s = Math.max(stepSize, step);\n updateValue(index, snapValueToStep(values[index] - s, minValue, maxValue, step));\n }\n\n return {\n values: values,\n defaultValues: props.defaultValue !== undefined ? defaultValue : initialValues,\n getThumbValue: (index: number) => values[index],\n setThumbValue: updateValue,\n setThumbPercent,\n isThumbDragging: (index: number) => isDraggings[index],\n setThumbDragging: updateDragging,\n focusedThumb: focusedIndex,\n setFocusedThumb: setFocusedIndex,\n getThumbPercent: (index: number) => getValuePercent(values[index]),\n getValuePercent,\n getThumbValueLabel: (index: number) => getFormattedValue(values[index]),\n getFormattedValue,\n getThumbMinValue,\n getThumbMaxValue,\n getPercentValue,\n isThumbEditable,\n setThumbEditable,\n incrementThumb,\n decrementThumb,\n step,\n pageSize,\n orientation,\n isDisabled\n };\n}\n\nfunction replaceIndex<T>(array: T[], index: number, value: T) {\n if (array[index] === value) {\n return array;\n }\n\n return [...array.slice(0, index), value, ...array.slice(index + 1)];\n}\n\nfunction convertValue(value?: number | number[]) {\n if (value == null) {\n return undefined;\n }\n\n return Array.isArray(value) ? value : [value];\n}\n\nfunction createOnChange(value, defaultValue, onChange) {\n return (newValue: number[]) => {\n if (typeof value === 'number' || typeof defaultValue === 'number') {\n onChange?.(newValue[0]);\n } else {\n onChange?.(newValue);\n }\n };\n}\n"],"names":[],"version":3,"file":"useSliderState.cjs.map"}
@@ -103,8 +103,28 @@ function $194316de6a67a627$export$e5fda3247f5d67f9(props) {
103
103
  // Call onChangeEnd if no handles are dragging.
104
104
  if (onChangeEnd && wasDragging && !isDraggingsRef.current.some(Boolean)) onChangeEnd(valuesRef.current);
105
105
  }
106
- function getFormattedValue(value) {
107
- return formatter.format(value);
106
+ let listFormatRef = (0, $7Bs6O$useRef)(null);
107
+ function getFormattedValue(valueParam = values) {
108
+ if (typeof valueParam === 'number') valueParam = [
109
+ valueParam
110
+ ];
111
+ switch(valueParam.length){
112
+ case 0:
113
+ return '';
114
+ case 1:
115
+ return formatter.format(valueParam[0]);
116
+ case 2:
117
+ return formatter.formatRange(valueParam[0], valueParam[1]);
118
+ default:
119
+ {
120
+ let formatted = valueParam.map((value)=>formatter.format(value));
121
+ let listFormat = listFormatRef.current;
122
+ if (!listFormat || listFormat.resolvedOptions().locale !== formatter.resolvedOptions().locale) listFormat = listFormatRef.current = new Intl.ListFormat(formatter.resolvedOptions().locale, {
123
+ type: 'unit'
124
+ });
125
+ return listFormat.format(formatted);
126
+ }
127
+ }
108
128
  }
109
129
  function setThumbPercent(index, percent) {
110
130
  updateValue(index, getPercentValue(percent));
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/react-stately/src/slider/useSliderState.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {clamp, snapValueToStep} from '../utils/number';\n\nimport {LabelableProps, Orientation, RangeInputBase, ValueBase} from '@react-types/shared';\nimport {useCallback, useMemo, useRef, useState} from 'react';\nimport {useControlledState} from '../utils/useControlledState';\n\nexport interface SliderProps<T = number | number[]> extends RangeInputBase<number>, ValueBase<T>, LabelableProps {\n /**\n * The orientation of the Slider.\n * @default 'horizontal'\n */\n orientation?: Orientation,\n /** Whether the whole Slider is disabled. */\n isDisabled?: boolean,\n /** Fired when the slider stops moving, due to being let go. */\n onChangeEnd?: (value: T) => void,\n // These are duplicated from ValueBase to define defaults for the docs.\n /**\n * The slider's minimum value.\n * @default 0\n */\n minValue?: number,\n /**\n * The slider's maximum value.\n * @default 100\n */\n maxValue?: number,\n /**\n * The slider's step value.\n * @default 1\n */\n step?: number\n}\n\nexport interface SliderState {\n /**\n * Values managed by the slider by thumb index.\n */\n readonly values: number[],\n /**\n * The default values for each thumb.\n */\n readonly defaultValues: number[],\n /**\n * Get the value for the specified thumb.\n * @param index\n */\n getThumbValue(index: number): number,\n\n /**\n * Sets the value for the specified thumb.\n * The actual value set will be clamped and rounded according to min/max/step.\n * @param index\n * @param value\n */\n setThumbValue(index: number, value: number): void,\n\n /**\n * Sets value for the specified thumb by percent offset (between 0 and 1).\n * @param index\n * @param percent\n */\n setThumbPercent(index: number, percent: number): void,\n\n /**\n * Whether the specific thumb is being dragged.\n * @param index\n */\n isThumbDragging(index: number): boolean,\n /**\n * Set is dragging on the specified thumb.\n * @param index\n * @param dragging\n */\n setThumbDragging(index: number, dragging: boolean): void,\n\n /**\n * Currently-focused thumb index.\n */\n readonly focusedThumb: number | undefined,\n /**\n * Set focused true on specified thumb. This will remove focus from\n * any thumb that had it before.\n * @param index\n */\n setFocusedThumb(index: number | undefined): void,\n\n /**\n * Returns the specified thumb's value as a percentage from 0 to 1.\n * @param index\n */\n getThumbPercent(index: number): number,\n\n /**\n * Returns the value as a percent between the min and max of the slider.\n * @param index\n */\n getValuePercent(value: number): number,\n\n /**\n * Returns the string label for the specified thumb's value, per props.formatOptions.\n * @param index\n */\n getThumbValueLabel(index: number): string,\n\n /**\n * Returns the string label for the value, per props.formatOptions.\n * @param index\n */\n getFormattedValue(value: number): string,\n\n /**\n * Returns the min allowed value for the specified thumb.\n * @param index\n */\n getThumbMinValue(index: number): number,\n\n /**\n * Returns the max allowed value for the specified thumb.\n * @param index\n */\n getThumbMaxValue(index: number): number,\n\n /**\n * Converts a percent along track (between 0 and 1) to the corresponding value.\n * @param percent\n */\n getPercentValue(percent: number): number,\n\n /**\n * Returns if the specified thumb is editable.\n * @param index\n */\n isThumbEditable(index: number): boolean,\n\n /**\n * Set the specified thumb's editable state.\n * @param index\n * @param editable\n */\n setThumbEditable(index: number, editable: boolean): void,\n\n /**\n * Increments the value of the thumb by the step or page amount.\n */\n incrementThumb(index: number, stepSize?: number): void,\n /**\n * Decrements the value of the thumb by the step or page amount.\n */\n decrementThumb(index: number, stepSize?: number): void,\n\n /**\n * The step amount for the slider.\n */\n readonly step: number,\n\n /**\n * The page size for the slider, used to do a bigger step.\n */\n readonly pageSize: number,\n\n /** The orientation of the slider. */\n readonly orientation: Orientation,\n\n /** Whether the slider is disabled. */\n readonly isDisabled: boolean\n}\n\nconst DEFAULT_MIN_VALUE = 0;\nconst DEFAULT_MAX_VALUE = 100;\nconst DEFAULT_STEP_VALUE = 1;\n\nexport interface SliderStateOptions<T> extends SliderProps<T> {\n numberFormatter: Intl.NumberFormat\n}\n\n/**\n * Provides state management for a slider component. Stores values for all thumbs,\n * formats values for localization, and provides methods to update the position\n * of any thumbs.\n * @param props\n */\nexport function useSliderState<T extends number | number[]>(props: SliderStateOptions<T>): SliderState {\n const {\n isDisabled = false,\n minValue = DEFAULT_MIN_VALUE,\n maxValue = DEFAULT_MAX_VALUE,\n numberFormatter: formatter,\n step = DEFAULT_STEP_VALUE,\n orientation = 'horizontal'\n } = props;\n\n // Page step should be at least equal to step and always a multiple of the step.\n let pageSize = useMemo(() => {\n let calcPageSize = (maxValue - minValue) / 10;\n calcPageSize = snapValueToStep(calcPageSize, 0, calcPageSize + step, step);\n return Math.max(calcPageSize, step);\n }, [step, maxValue, minValue]);\n\n let restrictValues = useCallback((values: number[] | undefined) => values?.map((val, idx) => {\n let min = idx === 0 ? minValue : values[idx - 1];\n let max = idx === values.length - 1 ? maxValue : values[idx + 1];\n return snapValueToStep(val, min, max, step);\n }), [minValue, maxValue, step]);\n\n let value = useMemo(() => restrictValues(convertValue(props.value)), [props.value, restrictValues]);\n let defaultValue = useMemo(() => restrictValues(convertValue(props.defaultValue) ?? [minValue])!, [props.defaultValue, minValue, restrictValues]);\n let onChange = createOnChange(props.value, props.defaultValue, props.onChange);\n let onChangeEnd = createOnChange(props.value, props.defaultValue, props.onChangeEnd);\n\n const [values, setValuesState] = useControlledState<number[]>(\n value,\n defaultValue,\n onChange\n );\n let [initialValues] = useState(values);\n const [isDraggings, setDraggingsState] = useState<boolean[]>(new Array(values.length).fill(false));\n const isEditablesRef = useRef<boolean[]>(new Array(values.length).fill(true));\n const [focusedIndex, setFocusedIndex] = useState<number | undefined>(undefined);\n\n const valuesRef = useRef<number[]>(values);\n const isDraggingsRef = useRef<boolean[]>(isDraggings);\n\n let setValues = (values: number[]) => {\n valuesRef.current = values;\n setValuesState(values);\n };\n\n let setDraggings = (draggings: boolean[]) => {\n isDraggingsRef.current = draggings;\n setDraggingsState(draggings);\n };\n\n function getValuePercent(value: number) {\n return (value - minValue) / (maxValue - minValue);\n }\n\n function getThumbMinValue(index: number) {\n return index === 0 ? minValue : values[index - 1];\n }\n function getThumbMaxValue(index: number) {\n return index === values.length - 1 ? maxValue : values[index + 1];\n }\n\n function isThumbEditable(index: number) {\n return isEditablesRef.current[index];\n }\n\n function setThumbEditable(index: number, editable: boolean) {\n isEditablesRef.current[index] = editable;\n }\n\n function updateValue(index: number, value: number) {\n if (isDisabled || !isThumbEditable(index)) {\n return;\n }\n const thisMin = getThumbMinValue(index);\n const thisMax = getThumbMaxValue(index);\n\n // Round value to multiple of step, clamp value between min and max\n value = snapValueToStep(value, thisMin, thisMax, step);\n let newValues = replaceIndex(valuesRef.current, index, value);\n setValues(newValues);\n }\n\n function updateDragging(index: number, dragging: boolean) {\n if (isDisabled || !isThumbEditable(index)) {\n return;\n }\n if (dragging) {\n valuesRef.current = values;\n }\n\n const wasDragging = isDraggingsRef.current[index];\n isDraggingsRef.current = replaceIndex(isDraggingsRef.current, index, dragging);\n setDraggings(isDraggingsRef.current);\n\n // Call onChangeEnd if no handles are dragging.\n if (onChangeEnd && wasDragging && !isDraggingsRef.current.some(Boolean)) {\n onChangeEnd(valuesRef.current);\n }\n }\n\n function getFormattedValue(value: number) {\n return formatter.format(value);\n }\n\n function setThumbPercent(index: number, percent: number) {\n updateValue(index, getPercentValue(percent));\n }\n\n function getRoundedValue(value: number) {\n return Math.round((value - minValue) / step) * step + minValue;\n }\n\n function getPercentValue(percent: number) {\n const val = percent * (maxValue - minValue) + minValue;\n return clamp(getRoundedValue(val), minValue, maxValue);\n }\n\n function incrementThumb(index: number, stepSize: number = 1) {\n let s = Math.max(stepSize, step);\n updateValue(index, snapValueToStep(values[index] + s, minValue, maxValue, step));\n }\n\n function decrementThumb(index: number, stepSize: number = 1) {\n let s = Math.max(stepSize, step);\n updateValue(index, snapValueToStep(values[index] - s, minValue, maxValue, step));\n }\n\n return {\n values: values,\n defaultValues: props.defaultValue !== undefined ? defaultValue : initialValues,\n getThumbValue: (index: number) => values[index],\n setThumbValue: updateValue,\n setThumbPercent,\n isThumbDragging: (index: number) => isDraggings[index],\n setThumbDragging: updateDragging,\n focusedThumb: focusedIndex,\n setFocusedThumb: setFocusedIndex,\n getThumbPercent: (index: number) => getValuePercent(values[index]),\n getValuePercent,\n getThumbValueLabel: (index: number) => getFormattedValue(values[index]),\n getFormattedValue,\n getThumbMinValue,\n getThumbMaxValue,\n getPercentValue,\n isThumbEditable,\n setThumbEditable,\n incrementThumb,\n decrementThumb,\n step,\n pageSize,\n orientation,\n isDisabled\n };\n}\n\nfunction replaceIndex<T>(array: T[], index: number, value: T) {\n if (array[index] === value) {\n return array;\n }\n\n return [...array.slice(0, index), value, ...array.slice(index + 1)];\n}\n\nfunction convertValue(value?: number | number[]) {\n if (value == null) {\n return undefined;\n }\n\n return Array.isArray(value) ? value : [value];\n}\n\nfunction createOnChange(value, defaultValue, onChange) {\n return (newValue: number[]) => {\n if (typeof value === 'number' || typeof defaultValue === 'number') {\n onChange?.(newValue[0]);\n } else {\n onChange?.(newValue);\n }\n };\n}\n"],"names":[],"version":3,"file":"useSliderState.js.map"}
1
+ {"mappings":"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","sources":["packages/react-stately/src/slider/useSliderState.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {clamp, snapValueToStep} from '../utils/number';\n\nimport {LabelableProps, Orientation, RangeInputBase, ValueBase} from '@react-types/shared';\nimport {useCallback, useMemo, useRef, useState} from 'react';\nimport {useControlledState} from '../utils/useControlledState';\n\nexport interface SliderProps<T = number | number[]>\n extends RangeInputBase<number>, ValueBase<T>, LabelableProps {\n /**\n * The orientation of the Slider.\n *\n * @default 'horizontal'\n */\n orientation?: Orientation;\n /** Whether the whole Slider is disabled. */\n isDisabled?: boolean;\n /** Fired when the slider stops moving, due to being let go. */\n onChangeEnd?: (value: T) => void;\n // These are duplicated from ValueBase to define defaults for the docs.\n /**\n * The slider's minimum value.\n *\n * @default 0\n */\n minValue?: number;\n /**\n * The slider's maximum value.\n *\n * @default 100\n */\n maxValue?: number;\n /**\n * The slider's step value.\n *\n * @default 1\n */\n step?: number;\n}\n\nexport interface SliderState {\n /**\n * Values managed by the slider by thumb index.\n */\n readonly values: number[];\n /**\n * The default values for each thumb.\n */\n readonly defaultValues: number[];\n /**\n * Get the value for the specified thumb.\n *\n * @param index\n */\n getThumbValue(index: number): number;\n\n /**\n * Sets the value for the specified thumb.\n * The actual value set will be clamped and rounded according to min/max/step.\n *\n * @param index\n * @param value\n */\n setThumbValue(index: number, value: number): void;\n\n /**\n * Sets value for the specified thumb by percent offset (between 0 and 1).\n *\n * @param index\n * @param percent\n */\n setThumbPercent(index: number, percent: number): void;\n\n /**\n * Whether the specific thumb is being dragged.\n *\n * @param index\n */\n isThumbDragging(index: number): boolean;\n /**\n * Set is dragging on the specified thumb.\n *\n * @param index\n * @param dragging\n */\n setThumbDragging(index: number, dragging: boolean): void;\n\n /**\n * Currently-focused thumb index.\n */\n readonly focusedThumb: number | undefined;\n /**\n * Set focused true on specified thumb. This will remove focus from\n * any thumb that had it before.\n *\n * @param index\n */\n setFocusedThumb(index: number | undefined): void;\n\n /**\n * Returns the specified thumb's value as a percentage from 0 to 1.\n *\n * @param index\n */\n getThumbPercent(index: number): number;\n\n /**\n * Returns the value as a percent between the min and max of the slider.\n *\n * @param index\n */\n getValuePercent(value: number): number;\n\n /**\n * Returns the string label for the specified thumb's value, per props.formatOptions.\n *\n * @param index\n */\n getThumbValueLabel(index: number): string;\n\n /**\n * Returns the string label for the value, per props.formatOptions.\n *\n * @param value\n */\n getFormattedValue(value?: number | number[]): string;\n\n /**\n * Returns the min allowed value for the specified thumb.\n *\n * @param index\n */\n getThumbMinValue(index: number): number;\n\n /**\n * Returns the max allowed value for the specified thumb.\n *\n * @param index\n */\n getThumbMaxValue(index: number): number;\n\n /**\n * Converts a percent along track (between 0 and 1) to the corresponding value.\n *\n * @param percent\n */\n getPercentValue(percent: number): number;\n\n /**\n * Returns if the specified thumb is editable.\n *\n * @param index\n */\n isThumbEditable(index: number): boolean;\n\n /**\n * Set the specified thumb's editable state.\n *\n * @param index\n * @param editable\n */\n setThumbEditable(index: number, editable: boolean): void;\n\n /**\n * Increments the value of the thumb by the step or page amount.\n */\n incrementThumb(index: number, stepSize?: number): void;\n /**\n * Decrements the value of the thumb by the step or page amount.\n */\n decrementThumb(index: number, stepSize?: number): void;\n\n /**\n * The step amount for the slider.\n */\n readonly step: number;\n\n /**\n * The page size for the slider, used to do a bigger step.\n */\n readonly pageSize: number;\n\n /** The orientation of the slider. */\n readonly orientation: Orientation;\n\n /** Whether the slider is disabled. */\n readonly isDisabled: boolean;\n}\n\nconst DEFAULT_MIN_VALUE = 0;\nconst DEFAULT_MAX_VALUE = 100;\nconst DEFAULT_STEP_VALUE = 1;\n\nexport interface SliderStateOptions<T> extends SliderProps<T> {\n numberFormatter: Intl.NumberFormat;\n}\n\n/**\n * Provides state management for a slider component. Stores values for all thumbs,\n * formats values for localization, and provides methods to update the position\n * of any thumbs.\n *\n * @param props\n */\nexport function useSliderState<T extends number | number[]>(\n props: SliderStateOptions<T>\n): SliderState {\n const {\n isDisabled = false,\n minValue = DEFAULT_MIN_VALUE,\n maxValue = DEFAULT_MAX_VALUE,\n numberFormatter: formatter,\n step = DEFAULT_STEP_VALUE,\n orientation = 'horizontal'\n } = props;\n\n // Page step should be at least equal to step and always a multiple of the step.\n let pageSize = useMemo(() => {\n let calcPageSize = (maxValue - minValue) / 10;\n calcPageSize = snapValueToStep(calcPageSize, 0, calcPageSize + step, step);\n return Math.max(calcPageSize, step);\n }, [step, maxValue, minValue]);\n\n let restrictValues = useCallback(\n (values: number[] | undefined) =>\n values?.map((val, idx) => {\n let min = idx === 0 ? minValue : values[idx - 1];\n let max = idx === values.length - 1 ? maxValue : values[idx + 1];\n return snapValueToStep(val, min, max, step);\n }),\n [minValue, maxValue, step]\n );\n\n let value = useMemo(\n () => restrictValues(convertValue(props.value)),\n [props.value, restrictValues]\n );\n let defaultValue = useMemo(\n () => restrictValues(convertValue(props.defaultValue) ?? [minValue])!,\n [props.defaultValue, minValue, restrictValues]\n );\n let onChange = createOnChange(props.value, props.defaultValue, props.onChange);\n let onChangeEnd = createOnChange(props.value, props.defaultValue, props.onChangeEnd);\n\n const [values, setValuesState] = useControlledState<number[]>(value, defaultValue, onChange);\n let [initialValues] = useState(values);\n const [isDraggings, setDraggingsState] = useState<boolean[]>(\n new Array(values.length).fill(false)\n );\n const isEditablesRef = useRef<boolean[]>(new Array(values.length).fill(true));\n const [focusedIndex, setFocusedIndex] = useState<number | undefined>(undefined);\n\n const valuesRef = useRef<number[]>(values);\n const isDraggingsRef = useRef<boolean[]>(isDraggings);\n\n let setValues = (values: number[]) => {\n valuesRef.current = values;\n setValuesState(values);\n };\n\n let setDraggings = (draggings: boolean[]) => {\n isDraggingsRef.current = draggings;\n setDraggingsState(draggings);\n };\n\n function getValuePercent(value: number) {\n return (value - minValue) / (maxValue - minValue);\n }\n\n function getThumbMinValue(index: number) {\n return index === 0 ? minValue : values[index - 1];\n }\n function getThumbMaxValue(index: number) {\n return index === values.length - 1 ? maxValue : values[index + 1];\n }\n\n function isThumbEditable(index: number) {\n return isEditablesRef.current[index];\n }\n\n function setThumbEditable(index: number, editable: boolean) {\n isEditablesRef.current[index] = editable;\n }\n\n function updateValue(index: number, value: number) {\n if (isDisabled || !isThumbEditable(index)) {\n return;\n }\n const thisMin = getThumbMinValue(index);\n const thisMax = getThumbMaxValue(index);\n\n // Round value to multiple of step, clamp value between min and max\n value = snapValueToStep(value, thisMin, thisMax, step);\n let newValues = replaceIndex(valuesRef.current, index, value);\n setValues(newValues);\n }\n\n function updateDragging(index: number, dragging: boolean) {\n if (isDisabled || !isThumbEditable(index)) {\n return;\n }\n if (dragging) {\n valuesRef.current = values;\n }\n\n const wasDragging = isDraggingsRef.current[index];\n isDraggingsRef.current = replaceIndex(isDraggingsRef.current, index, dragging);\n setDraggings(isDraggingsRef.current);\n\n // Call onChangeEnd if no handles are dragging.\n if (onChangeEnd && wasDragging && !isDraggingsRef.current.some(Boolean)) {\n onChangeEnd(valuesRef.current);\n }\n }\n\n let listFormatRef = useRef<Intl.ListFormat | null>(null);\n\n function getFormattedValue(valueParam: number | number[] = values) {\n if (typeof valueParam === 'number') {\n valueParam = [valueParam];\n }\n\n switch (valueParam.length) {\n case 0:\n return '';\n case 1:\n return formatter.format(valueParam[0]);\n case 2:\n return formatter.formatRange(valueParam[0], valueParam[1]);\n default: {\n let formatted = valueParam.map(value => formatter.format(value));\n let listFormat = listFormatRef.current;\n if (\n !listFormat ||\n listFormat.resolvedOptions().locale !== formatter.resolvedOptions().locale\n ) {\n listFormat = listFormatRef.current = new Intl.ListFormat(\n formatter.resolvedOptions().locale,\n {type: 'unit'}\n );\n }\n return listFormat.format(formatted);\n }\n }\n }\n\n function setThumbPercent(index: number, percent: number) {\n updateValue(index, getPercentValue(percent));\n }\n\n function getRoundedValue(value: number) {\n return Math.round((value - minValue) / step) * step + minValue;\n }\n\n function getPercentValue(percent: number) {\n const val = percent * (maxValue - minValue) + minValue;\n return clamp(getRoundedValue(val), minValue, maxValue);\n }\n\n function incrementThumb(index: number, stepSize: number = 1) {\n let s = Math.max(stepSize, step);\n updateValue(index, snapValueToStep(values[index] + s, minValue, maxValue, step));\n }\n\n function decrementThumb(index: number, stepSize: number = 1) {\n let s = Math.max(stepSize, step);\n updateValue(index, snapValueToStep(values[index] - s, minValue, maxValue, step));\n }\n\n return {\n values: values,\n defaultValues: props.defaultValue !== undefined ? defaultValue : initialValues,\n getThumbValue: (index: number) => values[index],\n setThumbValue: updateValue,\n setThumbPercent,\n isThumbDragging: (index: number) => isDraggings[index],\n setThumbDragging: updateDragging,\n focusedThumb: focusedIndex,\n setFocusedThumb: setFocusedIndex,\n getThumbPercent: (index: number) => getValuePercent(values[index]),\n getValuePercent,\n getThumbValueLabel: (index: number) => getFormattedValue(values[index]),\n getFormattedValue,\n getThumbMinValue,\n getThumbMaxValue,\n getPercentValue,\n isThumbEditable,\n setThumbEditable,\n incrementThumb,\n decrementThumb,\n step,\n pageSize,\n orientation,\n isDisabled\n };\n}\n\nfunction replaceIndex<T>(array: T[], index: number, value: T) {\n if (array[index] === value) {\n return array;\n }\n\n return [...array.slice(0, index), value, ...array.slice(index + 1)];\n}\n\nfunction convertValue(value?: number | number[]) {\n if (value == null) {\n return undefined;\n }\n\n return Array.isArray(value) ? value : [value];\n}\n\nfunction createOnChange(value, defaultValue, onChange) {\n return (newValue: number[]) => {\n if (typeof value === 'number' || typeof defaultValue === 'number') {\n onChange?.(newValue[0]);\n } else {\n onChange?.(newValue);\n }\n };\n}\n"],"names":[],"version":3,"file":"useSliderState.js.map"}
@@ -100,8 +100,28 @@ function $d806310b82f07e9d$export$e5fda3247f5d67f9(props) {
100
100
  // Call onChangeEnd if no handles are dragging.
101
101
  if (onChangeEnd && wasDragging && !isDraggingsRef.current.some(Boolean)) onChangeEnd(valuesRef.current);
102
102
  }
103
- function getFormattedValue(value) {
104
- return formatter.format(value);
103
+ let listFormatRef = (0, $eJ8ml$useRef)(null);
104
+ function getFormattedValue(valueParam = values) {
105
+ if (typeof valueParam === 'number') valueParam = [
106
+ valueParam
107
+ ];
108
+ switch(valueParam.length){
109
+ case 0:
110
+ return '';
111
+ case 1:
112
+ return formatter.format(valueParam[0]);
113
+ case 2:
114
+ return formatter.formatRange(valueParam[0], valueParam[1]);
115
+ default:
116
+ {
117
+ let formatted = valueParam.map((value)=>formatter.format(value));
118
+ let listFormat = listFormatRef.current;
119
+ if (!listFormat || listFormat.resolvedOptions().locale !== formatter.resolvedOptions().locale) listFormat = listFormatRef.current = new Intl.ListFormat(formatter.resolvedOptions().locale, {
120
+ type: 'unit'
121
+ });
122
+ return listFormat.format(formatted);
123
+ }
124
+ }
105
125
  }
106
126
  function setThumbPercent(index, percent) {
107
127
  updateValue(index, getPercentValue(percent));
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/react-stately/src/slider/useSliderState.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {clamp, snapValueToStep} from '../utils/number';\n\nimport {LabelableProps, Orientation, RangeInputBase, ValueBase} from '@react-types/shared';\nimport {useCallback, useMemo, useRef, useState} from 'react';\nimport {useControlledState} from '../utils/useControlledState';\n\nexport interface SliderProps<T = number | number[]> extends RangeInputBase<number>, ValueBase<T>, LabelableProps {\n /**\n * The orientation of the Slider.\n * @default 'horizontal'\n */\n orientation?: Orientation,\n /** Whether the whole Slider is disabled. */\n isDisabled?: boolean,\n /** Fired when the slider stops moving, due to being let go. */\n onChangeEnd?: (value: T) => void,\n // These are duplicated from ValueBase to define defaults for the docs.\n /**\n * The slider's minimum value.\n * @default 0\n */\n minValue?: number,\n /**\n * The slider's maximum value.\n * @default 100\n */\n maxValue?: number,\n /**\n * The slider's step value.\n * @default 1\n */\n step?: number\n}\n\nexport interface SliderState {\n /**\n * Values managed by the slider by thumb index.\n */\n readonly values: number[],\n /**\n * The default values for each thumb.\n */\n readonly defaultValues: number[],\n /**\n * Get the value for the specified thumb.\n * @param index\n */\n getThumbValue(index: number): number,\n\n /**\n * Sets the value for the specified thumb.\n * The actual value set will be clamped and rounded according to min/max/step.\n * @param index\n * @param value\n */\n setThumbValue(index: number, value: number): void,\n\n /**\n * Sets value for the specified thumb by percent offset (between 0 and 1).\n * @param index\n * @param percent\n */\n setThumbPercent(index: number, percent: number): void,\n\n /**\n * Whether the specific thumb is being dragged.\n * @param index\n */\n isThumbDragging(index: number): boolean,\n /**\n * Set is dragging on the specified thumb.\n * @param index\n * @param dragging\n */\n setThumbDragging(index: number, dragging: boolean): void,\n\n /**\n * Currently-focused thumb index.\n */\n readonly focusedThumb: number | undefined,\n /**\n * Set focused true on specified thumb. This will remove focus from\n * any thumb that had it before.\n * @param index\n */\n setFocusedThumb(index: number | undefined): void,\n\n /**\n * Returns the specified thumb's value as a percentage from 0 to 1.\n * @param index\n */\n getThumbPercent(index: number): number,\n\n /**\n * Returns the value as a percent between the min and max of the slider.\n * @param index\n */\n getValuePercent(value: number): number,\n\n /**\n * Returns the string label for the specified thumb's value, per props.formatOptions.\n * @param index\n */\n getThumbValueLabel(index: number): string,\n\n /**\n * Returns the string label for the value, per props.formatOptions.\n * @param index\n */\n getFormattedValue(value: number): string,\n\n /**\n * Returns the min allowed value for the specified thumb.\n * @param index\n */\n getThumbMinValue(index: number): number,\n\n /**\n * Returns the max allowed value for the specified thumb.\n * @param index\n */\n getThumbMaxValue(index: number): number,\n\n /**\n * Converts a percent along track (between 0 and 1) to the corresponding value.\n * @param percent\n */\n getPercentValue(percent: number): number,\n\n /**\n * Returns if the specified thumb is editable.\n * @param index\n */\n isThumbEditable(index: number): boolean,\n\n /**\n * Set the specified thumb's editable state.\n * @param index\n * @param editable\n */\n setThumbEditable(index: number, editable: boolean): void,\n\n /**\n * Increments the value of the thumb by the step or page amount.\n */\n incrementThumb(index: number, stepSize?: number): void,\n /**\n * Decrements the value of the thumb by the step or page amount.\n */\n decrementThumb(index: number, stepSize?: number): void,\n\n /**\n * The step amount for the slider.\n */\n readonly step: number,\n\n /**\n * The page size for the slider, used to do a bigger step.\n */\n readonly pageSize: number,\n\n /** The orientation of the slider. */\n readonly orientation: Orientation,\n\n /** Whether the slider is disabled. */\n readonly isDisabled: boolean\n}\n\nconst DEFAULT_MIN_VALUE = 0;\nconst DEFAULT_MAX_VALUE = 100;\nconst DEFAULT_STEP_VALUE = 1;\n\nexport interface SliderStateOptions<T> extends SliderProps<T> {\n numberFormatter: Intl.NumberFormat\n}\n\n/**\n * Provides state management for a slider component. Stores values for all thumbs,\n * formats values for localization, and provides methods to update the position\n * of any thumbs.\n * @param props\n */\nexport function useSliderState<T extends number | number[]>(props: SliderStateOptions<T>): SliderState {\n const {\n isDisabled = false,\n minValue = DEFAULT_MIN_VALUE,\n maxValue = DEFAULT_MAX_VALUE,\n numberFormatter: formatter,\n step = DEFAULT_STEP_VALUE,\n orientation = 'horizontal'\n } = props;\n\n // Page step should be at least equal to step and always a multiple of the step.\n let pageSize = useMemo(() => {\n let calcPageSize = (maxValue - minValue) / 10;\n calcPageSize = snapValueToStep(calcPageSize, 0, calcPageSize + step, step);\n return Math.max(calcPageSize, step);\n }, [step, maxValue, minValue]);\n\n let restrictValues = useCallback((values: number[] | undefined) => values?.map((val, idx) => {\n let min = idx === 0 ? minValue : values[idx - 1];\n let max = idx === values.length - 1 ? maxValue : values[idx + 1];\n return snapValueToStep(val, min, max, step);\n }), [minValue, maxValue, step]);\n\n let value = useMemo(() => restrictValues(convertValue(props.value)), [props.value, restrictValues]);\n let defaultValue = useMemo(() => restrictValues(convertValue(props.defaultValue) ?? [minValue])!, [props.defaultValue, minValue, restrictValues]);\n let onChange = createOnChange(props.value, props.defaultValue, props.onChange);\n let onChangeEnd = createOnChange(props.value, props.defaultValue, props.onChangeEnd);\n\n const [values, setValuesState] = useControlledState<number[]>(\n value,\n defaultValue,\n onChange\n );\n let [initialValues] = useState(values);\n const [isDraggings, setDraggingsState] = useState<boolean[]>(new Array(values.length).fill(false));\n const isEditablesRef = useRef<boolean[]>(new Array(values.length).fill(true));\n const [focusedIndex, setFocusedIndex] = useState<number | undefined>(undefined);\n\n const valuesRef = useRef<number[]>(values);\n const isDraggingsRef = useRef<boolean[]>(isDraggings);\n\n let setValues = (values: number[]) => {\n valuesRef.current = values;\n setValuesState(values);\n };\n\n let setDraggings = (draggings: boolean[]) => {\n isDraggingsRef.current = draggings;\n setDraggingsState(draggings);\n };\n\n function getValuePercent(value: number) {\n return (value - minValue) / (maxValue - minValue);\n }\n\n function getThumbMinValue(index: number) {\n return index === 0 ? minValue : values[index - 1];\n }\n function getThumbMaxValue(index: number) {\n return index === values.length - 1 ? maxValue : values[index + 1];\n }\n\n function isThumbEditable(index: number) {\n return isEditablesRef.current[index];\n }\n\n function setThumbEditable(index: number, editable: boolean) {\n isEditablesRef.current[index] = editable;\n }\n\n function updateValue(index: number, value: number) {\n if (isDisabled || !isThumbEditable(index)) {\n return;\n }\n const thisMin = getThumbMinValue(index);\n const thisMax = getThumbMaxValue(index);\n\n // Round value to multiple of step, clamp value between min and max\n value = snapValueToStep(value, thisMin, thisMax, step);\n let newValues = replaceIndex(valuesRef.current, index, value);\n setValues(newValues);\n }\n\n function updateDragging(index: number, dragging: boolean) {\n if (isDisabled || !isThumbEditable(index)) {\n return;\n }\n if (dragging) {\n valuesRef.current = values;\n }\n\n const wasDragging = isDraggingsRef.current[index];\n isDraggingsRef.current = replaceIndex(isDraggingsRef.current, index, dragging);\n setDraggings(isDraggingsRef.current);\n\n // Call onChangeEnd if no handles are dragging.\n if (onChangeEnd && wasDragging && !isDraggingsRef.current.some(Boolean)) {\n onChangeEnd(valuesRef.current);\n }\n }\n\n function getFormattedValue(value: number) {\n return formatter.format(value);\n }\n\n function setThumbPercent(index: number, percent: number) {\n updateValue(index, getPercentValue(percent));\n }\n\n function getRoundedValue(value: number) {\n return Math.round((value - minValue) / step) * step + minValue;\n }\n\n function getPercentValue(percent: number) {\n const val = percent * (maxValue - minValue) + minValue;\n return clamp(getRoundedValue(val), minValue, maxValue);\n }\n\n function incrementThumb(index: number, stepSize: number = 1) {\n let s = Math.max(stepSize, step);\n updateValue(index, snapValueToStep(values[index] + s, minValue, maxValue, step));\n }\n\n function decrementThumb(index: number, stepSize: number = 1) {\n let s = Math.max(stepSize, step);\n updateValue(index, snapValueToStep(values[index] - s, minValue, maxValue, step));\n }\n\n return {\n values: values,\n defaultValues: props.defaultValue !== undefined ? defaultValue : initialValues,\n getThumbValue: (index: number) => values[index],\n setThumbValue: updateValue,\n setThumbPercent,\n isThumbDragging: (index: number) => isDraggings[index],\n setThumbDragging: updateDragging,\n focusedThumb: focusedIndex,\n setFocusedThumb: setFocusedIndex,\n getThumbPercent: (index: number) => getValuePercent(values[index]),\n getValuePercent,\n getThumbValueLabel: (index: number) => getFormattedValue(values[index]),\n getFormattedValue,\n getThumbMinValue,\n getThumbMaxValue,\n getPercentValue,\n isThumbEditable,\n setThumbEditable,\n incrementThumb,\n decrementThumb,\n step,\n pageSize,\n orientation,\n isDisabled\n };\n}\n\nfunction replaceIndex<T>(array: T[], index: number, value: T) {\n if (array[index] === value) {\n return array;\n }\n\n return [...array.slice(0, index), value, ...array.slice(index + 1)];\n}\n\nfunction convertValue(value?: number | number[]) {\n if (value == null) {\n return undefined;\n }\n\n return Array.isArray(value) ? value : [value];\n}\n\nfunction createOnChange(value, defaultValue, onChange) {\n return (newValue: number[]) => {\n if (typeof value === 'number' || typeof defaultValue === 'number') {\n onChange?.(newValue[0]);\n } else {\n onChange?.(newValue);\n }\n };\n}\n"],"names":[],"version":3,"file":"useSliderState.mjs.map"}
1
+ {"mappings":"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","sources":["packages/react-stately/src/slider/useSliderState.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {clamp, snapValueToStep} from '../utils/number';\n\nimport {LabelableProps, Orientation, RangeInputBase, ValueBase} from '@react-types/shared';\nimport {useCallback, useMemo, useRef, useState} from 'react';\nimport {useControlledState} from '../utils/useControlledState';\n\nexport interface SliderProps<T = number | number[]>\n extends RangeInputBase<number>, ValueBase<T>, LabelableProps {\n /**\n * The orientation of the Slider.\n *\n * @default 'horizontal'\n */\n orientation?: Orientation;\n /** Whether the whole Slider is disabled. */\n isDisabled?: boolean;\n /** Fired when the slider stops moving, due to being let go. */\n onChangeEnd?: (value: T) => void;\n // These are duplicated from ValueBase to define defaults for the docs.\n /**\n * The slider's minimum value.\n *\n * @default 0\n */\n minValue?: number;\n /**\n * The slider's maximum value.\n *\n * @default 100\n */\n maxValue?: number;\n /**\n * The slider's step value.\n *\n * @default 1\n */\n step?: number;\n}\n\nexport interface SliderState {\n /**\n * Values managed by the slider by thumb index.\n */\n readonly values: number[];\n /**\n * The default values for each thumb.\n */\n readonly defaultValues: number[];\n /**\n * Get the value for the specified thumb.\n *\n * @param index\n */\n getThumbValue(index: number): number;\n\n /**\n * Sets the value for the specified thumb.\n * The actual value set will be clamped and rounded according to min/max/step.\n *\n * @param index\n * @param value\n */\n setThumbValue(index: number, value: number): void;\n\n /**\n * Sets value for the specified thumb by percent offset (between 0 and 1).\n *\n * @param index\n * @param percent\n */\n setThumbPercent(index: number, percent: number): void;\n\n /**\n * Whether the specific thumb is being dragged.\n *\n * @param index\n */\n isThumbDragging(index: number): boolean;\n /**\n * Set is dragging on the specified thumb.\n *\n * @param index\n * @param dragging\n */\n setThumbDragging(index: number, dragging: boolean): void;\n\n /**\n * Currently-focused thumb index.\n */\n readonly focusedThumb: number | undefined;\n /**\n * Set focused true on specified thumb. This will remove focus from\n * any thumb that had it before.\n *\n * @param index\n */\n setFocusedThumb(index: number | undefined): void;\n\n /**\n * Returns the specified thumb's value as a percentage from 0 to 1.\n *\n * @param index\n */\n getThumbPercent(index: number): number;\n\n /**\n * Returns the value as a percent between the min and max of the slider.\n *\n * @param index\n */\n getValuePercent(value: number): number;\n\n /**\n * Returns the string label for the specified thumb's value, per props.formatOptions.\n *\n * @param index\n */\n getThumbValueLabel(index: number): string;\n\n /**\n * Returns the string label for the value, per props.formatOptions.\n *\n * @param value\n */\n getFormattedValue(value?: number | number[]): string;\n\n /**\n * Returns the min allowed value for the specified thumb.\n *\n * @param index\n */\n getThumbMinValue(index: number): number;\n\n /**\n * Returns the max allowed value for the specified thumb.\n *\n * @param index\n */\n getThumbMaxValue(index: number): number;\n\n /**\n * Converts a percent along track (between 0 and 1) to the corresponding value.\n *\n * @param percent\n */\n getPercentValue(percent: number): number;\n\n /**\n * Returns if the specified thumb is editable.\n *\n * @param index\n */\n isThumbEditable(index: number): boolean;\n\n /**\n * Set the specified thumb's editable state.\n *\n * @param index\n * @param editable\n */\n setThumbEditable(index: number, editable: boolean): void;\n\n /**\n * Increments the value of the thumb by the step or page amount.\n */\n incrementThumb(index: number, stepSize?: number): void;\n /**\n * Decrements the value of the thumb by the step or page amount.\n */\n decrementThumb(index: number, stepSize?: number): void;\n\n /**\n * The step amount for the slider.\n */\n readonly step: number;\n\n /**\n * The page size for the slider, used to do a bigger step.\n */\n readonly pageSize: number;\n\n /** The orientation of the slider. */\n readonly orientation: Orientation;\n\n /** Whether the slider is disabled. */\n readonly isDisabled: boolean;\n}\n\nconst DEFAULT_MIN_VALUE = 0;\nconst DEFAULT_MAX_VALUE = 100;\nconst DEFAULT_STEP_VALUE = 1;\n\nexport interface SliderStateOptions<T> extends SliderProps<T> {\n numberFormatter: Intl.NumberFormat;\n}\n\n/**\n * Provides state management for a slider component. Stores values for all thumbs,\n * formats values for localization, and provides methods to update the position\n * of any thumbs.\n *\n * @param props\n */\nexport function useSliderState<T extends number | number[]>(\n props: SliderStateOptions<T>\n): SliderState {\n const {\n isDisabled = false,\n minValue = DEFAULT_MIN_VALUE,\n maxValue = DEFAULT_MAX_VALUE,\n numberFormatter: formatter,\n step = DEFAULT_STEP_VALUE,\n orientation = 'horizontal'\n } = props;\n\n // Page step should be at least equal to step and always a multiple of the step.\n let pageSize = useMemo(() => {\n let calcPageSize = (maxValue - minValue) / 10;\n calcPageSize = snapValueToStep(calcPageSize, 0, calcPageSize + step, step);\n return Math.max(calcPageSize, step);\n }, [step, maxValue, minValue]);\n\n let restrictValues = useCallback(\n (values: number[] | undefined) =>\n values?.map((val, idx) => {\n let min = idx === 0 ? minValue : values[idx - 1];\n let max = idx === values.length - 1 ? maxValue : values[idx + 1];\n return snapValueToStep(val, min, max, step);\n }),\n [minValue, maxValue, step]\n );\n\n let value = useMemo(\n () => restrictValues(convertValue(props.value)),\n [props.value, restrictValues]\n );\n let defaultValue = useMemo(\n () => restrictValues(convertValue(props.defaultValue) ?? [minValue])!,\n [props.defaultValue, minValue, restrictValues]\n );\n let onChange = createOnChange(props.value, props.defaultValue, props.onChange);\n let onChangeEnd = createOnChange(props.value, props.defaultValue, props.onChangeEnd);\n\n const [values, setValuesState] = useControlledState<number[]>(value, defaultValue, onChange);\n let [initialValues] = useState(values);\n const [isDraggings, setDraggingsState] = useState<boolean[]>(\n new Array(values.length).fill(false)\n );\n const isEditablesRef = useRef<boolean[]>(new Array(values.length).fill(true));\n const [focusedIndex, setFocusedIndex] = useState<number | undefined>(undefined);\n\n const valuesRef = useRef<number[]>(values);\n const isDraggingsRef = useRef<boolean[]>(isDraggings);\n\n let setValues = (values: number[]) => {\n valuesRef.current = values;\n setValuesState(values);\n };\n\n let setDraggings = (draggings: boolean[]) => {\n isDraggingsRef.current = draggings;\n setDraggingsState(draggings);\n };\n\n function getValuePercent(value: number) {\n return (value - minValue) / (maxValue - minValue);\n }\n\n function getThumbMinValue(index: number) {\n return index === 0 ? minValue : values[index - 1];\n }\n function getThumbMaxValue(index: number) {\n return index === values.length - 1 ? maxValue : values[index + 1];\n }\n\n function isThumbEditable(index: number) {\n return isEditablesRef.current[index];\n }\n\n function setThumbEditable(index: number, editable: boolean) {\n isEditablesRef.current[index] = editable;\n }\n\n function updateValue(index: number, value: number) {\n if (isDisabled || !isThumbEditable(index)) {\n return;\n }\n const thisMin = getThumbMinValue(index);\n const thisMax = getThumbMaxValue(index);\n\n // Round value to multiple of step, clamp value between min and max\n value = snapValueToStep(value, thisMin, thisMax, step);\n let newValues = replaceIndex(valuesRef.current, index, value);\n setValues(newValues);\n }\n\n function updateDragging(index: number, dragging: boolean) {\n if (isDisabled || !isThumbEditable(index)) {\n return;\n }\n if (dragging) {\n valuesRef.current = values;\n }\n\n const wasDragging = isDraggingsRef.current[index];\n isDraggingsRef.current = replaceIndex(isDraggingsRef.current, index, dragging);\n setDraggings(isDraggingsRef.current);\n\n // Call onChangeEnd if no handles are dragging.\n if (onChangeEnd && wasDragging && !isDraggingsRef.current.some(Boolean)) {\n onChangeEnd(valuesRef.current);\n }\n }\n\n let listFormatRef = useRef<Intl.ListFormat | null>(null);\n\n function getFormattedValue(valueParam: number | number[] = values) {\n if (typeof valueParam === 'number') {\n valueParam = [valueParam];\n }\n\n switch (valueParam.length) {\n case 0:\n return '';\n case 1:\n return formatter.format(valueParam[0]);\n case 2:\n return formatter.formatRange(valueParam[0], valueParam[1]);\n default: {\n let formatted = valueParam.map(value => formatter.format(value));\n let listFormat = listFormatRef.current;\n if (\n !listFormat ||\n listFormat.resolvedOptions().locale !== formatter.resolvedOptions().locale\n ) {\n listFormat = listFormatRef.current = new Intl.ListFormat(\n formatter.resolvedOptions().locale,\n {type: 'unit'}\n );\n }\n return listFormat.format(formatted);\n }\n }\n }\n\n function setThumbPercent(index: number, percent: number) {\n updateValue(index, getPercentValue(percent));\n }\n\n function getRoundedValue(value: number) {\n return Math.round((value - minValue) / step) * step + minValue;\n }\n\n function getPercentValue(percent: number) {\n const val = percent * (maxValue - minValue) + minValue;\n return clamp(getRoundedValue(val), minValue, maxValue);\n }\n\n function incrementThumb(index: number, stepSize: number = 1) {\n let s = Math.max(stepSize, step);\n updateValue(index, snapValueToStep(values[index] + s, minValue, maxValue, step));\n }\n\n function decrementThumb(index: number, stepSize: number = 1) {\n let s = Math.max(stepSize, step);\n updateValue(index, snapValueToStep(values[index] - s, minValue, maxValue, step));\n }\n\n return {\n values: values,\n defaultValues: props.defaultValue !== undefined ? defaultValue : initialValues,\n getThumbValue: (index: number) => values[index],\n setThumbValue: updateValue,\n setThumbPercent,\n isThumbDragging: (index: number) => isDraggings[index],\n setThumbDragging: updateDragging,\n focusedThumb: focusedIndex,\n setFocusedThumb: setFocusedIndex,\n getThumbPercent: (index: number) => getValuePercent(values[index]),\n getValuePercent,\n getThumbValueLabel: (index: number) => getFormattedValue(values[index]),\n getFormattedValue,\n getThumbMinValue,\n getThumbMaxValue,\n getPercentValue,\n isThumbEditable,\n setThumbEditable,\n incrementThumb,\n decrementThumb,\n step,\n pageSize,\n orientation,\n isDisabled\n };\n}\n\nfunction replaceIndex<T>(array: T[], index: number, value: T) {\n if (array[index] === value) {\n return array;\n }\n\n return [...array.slice(0, index), value, ...array.slice(index + 1)];\n}\n\nfunction convertValue(value?: number | number[]) {\n if (value == null) {\n return undefined;\n }\n\n return Array.isArray(value) ? value : [value];\n}\n\nfunction createOnChange(value, defaultValue, onChange) {\n return (newValue: number[]) => {\n if (typeof value === 'number' || typeof defaultValue === 'number') {\n onChange?.(newValue[0]);\n } else {\n onChange?.(newValue);\n }\n };\n}\n"],"names":[],"version":3,"file":"useSliderState.mjs.map"}
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/react-stately/src/steplist/useStepListState.ts"],"sourcesContent":["/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Collection, CollectionBase, Key, Node, SingleSelection} from '@react-types/shared';\nimport {SingleSelectListState, useSingleSelectListState} from '../list/useSingleSelectListState';\nimport {useCallback, useEffect, useMemo} from 'react';\nimport {useControlledState} from '../utils/useControlledState';\n\nexport interface StepListProps<T> extends CollectionBase<T>, Omit<SingleSelection, 'onSelectionChange'> {\n /** The key of the last completed step (controlled). */\n lastCompletedStep?: Key,\n /** The key of the initially last completed step (uncontrolled). */\n defaultLastCompletedStep?: Key,\n /** Callback for when the last completed step changes. */\n onLastCompletedStepChange?: (key: Key | null) => void,\n /** Whether the step list is disabled. Steps will not be focusable or interactive. */\n isDisabled?: boolean,\n /** Whether the step list is read only. Steps will be focusable but non-interactive. */\n isReadOnly?: boolean,\n /** Handler that is called when the selection changes. */\n onSelectionChange?: (key: Key) => void\n}\n\nexport interface StepListState<T> extends SingleSelectListState<T> {\n readonly lastCompletedStep?: Key,\n setLastCompletedStep(key: Key): void,\n isCompleted(key: Key): boolean,\n isSelectable(key: Key): boolean\n}\n\nexport function useStepListState<T extends object>(props: StepListProps<T>): StepListState<T> {\n let state = useSingleSelectListState<T>({\n ...props,\n onSelectionChange: props.onSelectionChange ? (key => {\n if (key != null) {\n props.onSelectionChange?.(key);\n }\n }) : undefined\n });\n\n let [lastCompletedStep, setLastCompletedStep] = useControlledState<Key | null>(props.lastCompletedStep, props.defaultLastCompletedStep ?? null, props.onLastCompletedStepChange);\n const {setSelectedKey: realSetSelectedKey, selectedKey, collection} = state;\n const {indexMap, keysLinkedList} = useMemo(() => buildKeysMaps(collection), [collection]);\n const selectedIdx = selectedKey != null ? indexMap.get(selectedKey) : 0;\n\n const isCompleted = useCallback((step: Key | null | undefined) => {\n if (step === undefined) {\n return false;\n }\n\n return (step !== null &&\n lastCompletedStep !== null &&\n indexMap.has(step) &&\n indexMap.has(lastCompletedStep) &&\n indexMap.get(step)! <= indexMap.get(lastCompletedStep)!);\n }, [indexMap, lastCompletedStep]);\n\n const findDefaultSelectedKey = useCallback((collection: Collection<Node<T>> | null, disabledKeys: Set<Key>) => {\n let selectedKey: Key | null = null;\n if (collection && collection.size > 0) {\n selectedKey = collection.getFirstKey();\n // loop over keys until we find one that isn't completed or disabled and select that\n while (selectedKey !== collection.getLastKey() && selectedKey && (disabledKeys.has(selectedKey) || isCompleted(selectedKey))) {\n selectedKey = collection.getKeyAfter(selectedKey);\n }\n }\n\n return selectedKey;\n }, [isCompleted]);\n\n useEffect(() => {\n // Ensure a step is always selected (in case no selected key was specified or if selected item was deleted from collection)\n let selectedKey: Key | null = state.selectedKey;\n if (state.selectionManager.isEmpty || selectedKey == null || !state.collection.getItem(selectedKey)) {\n selectedKey = findDefaultSelectedKey(state.collection, state.disabledKeys);\n if (selectedKey !== null) {\n state.selectionManager.replaceSelection(selectedKey);\n }\n }\n\n if (state.selectionManager.focusedKey == null) {\n state.selectionManager.setFocusedKey(selectedKey);\n }\n\n let lcs = (lastCompletedStep !== null ? indexMap.get(lastCompletedStep) : -1) ?? -1;\n if (selectedIdx !== undefined && selectedIdx > 0 && selectedIdx > lcs + 1 && selectedKey !== null && keysLinkedList.has(selectedKey)) {\n setLastCompletedStep(keysLinkedList.get(selectedKey)!);\n }\n });\n\n function isSelectable(step: Key) {\n if (props.isDisabled || state.disabledKeys.has(step) || props.isReadOnly) {\n return false;\n }\n\n if (isCompleted(step)) {\n return true;\n }\n\n const prevStep = keysLinkedList.get(step);\n return isCompleted(prevStep) || step === state.collection.getFirstKey();\n }\n\n function setSelectedKey(key: Key) {\n const prevKey = keysLinkedList.get(key);\n if (prevKey && !isCompleted(prevKey)) {\n setLastCompletedStep(prevKey);\n }\n realSetSelectedKey(key);\n }\n\n return {\n ...state,\n setSelectedKey,\n setLastCompletedStep,\n isCompleted,\n isSelectable\n };\n}\n\nfunction buildKeysMaps<T>(coll: Collection<Node<T>>) {\n const indexMap = new Map<Key, number>();\n const keysLinkedList = new Map<Key, Key | undefined>();\n let i = 0;\n let prev: Node<T> | undefined = undefined;\n for (const item of coll) {\n indexMap.set(item.key, i);\n keysLinkedList.set(item.key, prev?.key);\n prev = item;\n i++;\n }\n return {\n indexMap,\n keysLinkedList\n };\n}\n"],"names":[],"version":3,"file":"useStepListState.cjs.map"}
1
+ {"mappings":"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","sources":["packages/react-stately/src/steplist/useStepListState.ts"],"sourcesContent":["/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Collection, CollectionBase, Key, Node, SingleSelection} from '@react-types/shared';\nimport {SingleSelectListState, useSingleSelectListState} from '../list/useSingleSelectListState';\nimport {useCallback, useEffect, useMemo} from 'react';\nimport {useControlledState} from '../utils/useControlledState';\n\nexport interface StepListProps<T>\n extends CollectionBase<T>, Omit<SingleSelection, 'onSelectionChange'> {\n /** The key of the last completed step (controlled). */\n lastCompletedStep?: Key;\n /** The key of the initially last completed step (uncontrolled). */\n defaultLastCompletedStep?: Key;\n /** Callback for when the last completed step changes. */\n onLastCompletedStepChange?: (key: Key | null) => void;\n /** Whether the step list is disabled. Steps will not be focusable or interactive. */\n isDisabled?: boolean;\n /** Whether the step list is read only. Steps will be focusable but non-interactive. */\n isReadOnly?: boolean;\n /** Handler that is called when the selection changes. */\n onSelectionChange?: (key: Key) => void;\n}\n\nexport interface StepListState<T> extends SingleSelectListState<T> {\n readonly lastCompletedStep?: Key;\n setLastCompletedStep(key: Key): void;\n isCompleted(key: Key): boolean;\n isSelectable(key: Key): boolean;\n}\n\nexport function useStepListState<T extends object>(props: StepListProps<T>): StepListState<T> {\n let state = useSingleSelectListState<T>({\n ...props,\n onSelectionChange: props.onSelectionChange\n ? key => {\n if (key != null) {\n props.onSelectionChange?.(key);\n }\n }\n : undefined\n });\n\n let [lastCompletedStep, setLastCompletedStep] = useControlledState<Key | null>(\n props.lastCompletedStep,\n props.defaultLastCompletedStep ?? null,\n props.onLastCompletedStepChange\n );\n const {setSelectedKey: realSetSelectedKey, selectedKey, collection} = state;\n const {indexMap, keysLinkedList} = useMemo(() => buildKeysMaps(collection), [collection]);\n const selectedIdx = selectedKey != null ? indexMap.get(selectedKey) : 0;\n\n const isCompleted = useCallback(\n (step: Key | null | undefined) => {\n if (step === undefined) {\n return false;\n }\n\n return (\n step !== null &&\n lastCompletedStep !== null &&\n indexMap.has(step) &&\n indexMap.has(lastCompletedStep) &&\n indexMap.get(step)! <= indexMap.get(lastCompletedStep)!\n );\n },\n [indexMap, lastCompletedStep]\n );\n\n const findDefaultSelectedKey = useCallback(\n (collection: Collection<Node<T>> | null, disabledKeys: Set<Key>) => {\n let selectedKey: Key | null = null;\n if (collection && collection.size > 0) {\n selectedKey = collection.getFirstKey();\n // loop over keys until we find one that isn't completed or disabled and select that\n while (\n selectedKey !== collection.getLastKey() &&\n selectedKey &&\n (disabledKeys.has(selectedKey) || isCompleted(selectedKey))\n ) {\n selectedKey = collection.getKeyAfter(selectedKey);\n }\n }\n\n return selectedKey;\n },\n [isCompleted]\n );\n\n useEffect(() => {\n // Ensure a step is always selected (in case no selected key was specified or if selected item was deleted from collection)\n let selectedKey: Key | null = state.selectedKey;\n if (\n state.selectionManager.isEmpty ||\n selectedKey == null ||\n !state.collection.getItem(selectedKey)\n ) {\n selectedKey = findDefaultSelectedKey(state.collection, state.disabledKeys);\n if (selectedKey !== null) {\n state.selectionManager.replaceSelection(selectedKey);\n }\n }\n\n if (state.selectionManager.focusedKey == null) {\n state.selectionManager.setFocusedKey(selectedKey);\n }\n\n let lcs = (lastCompletedStep !== null ? indexMap.get(lastCompletedStep) : -1) ?? -1;\n if (\n selectedIdx !== undefined &&\n selectedIdx > 0 &&\n selectedIdx > lcs + 1 &&\n selectedKey !== null &&\n keysLinkedList.has(selectedKey)\n ) {\n setLastCompletedStep(keysLinkedList.get(selectedKey)!);\n }\n });\n\n function isSelectable(step: Key) {\n if (props.isDisabled || state.disabledKeys.has(step) || props.isReadOnly) {\n return false;\n }\n\n if (isCompleted(step)) {\n return true;\n }\n\n const prevStep = keysLinkedList.get(step);\n return isCompleted(prevStep) || step === state.collection.getFirstKey();\n }\n\n function setSelectedKey(key: Key) {\n const prevKey = keysLinkedList.get(key);\n if (prevKey && !isCompleted(prevKey)) {\n setLastCompletedStep(prevKey);\n }\n realSetSelectedKey(key);\n }\n\n return {\n ...state,\n setSelectedKey,\n setLastCompletedStep,\n isCompleted,\n isSelectable\n };\n}\n\nfunction buildKeysMaps<T>(coll: Collection<Node<T>>) {\n const indexMap = new Map<Key, number>();\n const keysLinkedList = new Map<Key, Key | undefined>();\n let i = 0;\n let prev: Node<T> | undefined = undefined;\n for (const item of coll) {\n indexMap.set(item.key, i);\n keysLinkedList.set(item.key, prev?.key);\n prev = item;\n i++;\n }\n return {\n indexMap,\n keysLinkedList\n };\n}\n"],"names":[],"version":3,"file":"useStepListState.cjs.map"}
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/react-stately/src/steplist/useStepListState.ts"],"sourcesContent":["/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Collection, CollectionBase, Key, Node, SingleSelection} from '@react-types/shared';\nimport {SingleSelectListState, useSingleSelectListState} from '../list/useSingleSelectListState';\nimport {useCallback, useEffect, useMemo} from 'react';\nimport {useControlledState} from '../utils/useControlledState';\n\nexport interface StepListProps<T> extends CollectionBase<T>, Omit<SingleSelection, 'onSelectionChange'> {\n /** The key of the last completed step (controlled). */\n lastCompletedStep?: Key,\n /** The key of the initially last completed step (uncontrolled). */\n defaultLastCompletedStep?: Key,\n /** Callback for when the last completed step changes. */\n onLastCompletedStepChange?: (key: Key | null) => void,\n /** Whether the step list is disabled. Steps will not be focusable or interactive. */\n isDisabled?: boolean,\n /** Whether the step list is read only. Steps will be focusable but non-interactive. */\n isReadOnly?: boolean,\n /** Handler that is called when the selection changes. */\n onSelectionChange?: (key: Key) => void\n}\n\nexport interface StepListState<T> extends SingleSelectListState<T> {\n readonly lastCompletedStep?: Key,\n setLastCompletedStep(key: Key): void,\n isCompleted(key: Key): boolean,\n isSelectable(key: Key): boolean\n}\n\nexport function useStepListState<T extends object>(props: StepListProps<T>): StepListState<T> {\n let state = useSingleSelectListState<T>({\n ...props,\n onSelectionChange: props.onSelectionChange ? (key => {\n if (key != null) {\n props.onSelectionChange?.(key);\n }\n }) : undefined\n });\n\n let [lastCompletedStep, setLastCompletedStep] = useControlledState<Key | null>(props.lastCompletedStep, props.defaultLastCompletedStep ?? null, props.onLastCompletedStepChange);\n const {setSelectedKey: realSetSelectedKey, selectedKey, collection} = state;\n const {indexMap, keysLinkedList} = useMemo(() => buildKeysMaps(collection), [collection]);\n const selectedIdx = selectedKey != null ? indexMap.get(selectedKey) : 0;\n\n const isCompleted = useCallback((step: Key | null | undefined) => {\n if (step === undefined) {\n return false;\n }\n\n return (step !== null &&\n lastCompletedStep !== null &&\n indexMap.has(step) &&\n indexMap.has(lastCompletedStep) &&\n indexMap.get(step)! <= indexMap.get(lastCompletedStep)!);\n }, [indexMap, lastCompletedStep]);\n\n const findDefaultSelectedKey = useCallback((collection: Collection<Node<T>> | null, disabledKeys: Set<Key>) => {\n let selectedKey: Key | null = null;\n if (collection && collection.size > 0) {\n selectedKey = collection.getFirstKey();\n // loop over keys until we find one that isn't completed or disabled and select that\n while (selectedKey !== collection.getLastKey() && selectedKey && (disabledKeys.has(selectedKey) || isCompleted(selectedKey))) {\n selectedKey = collection.getKeyAfter(selectedKey);\n }\n }\n\n return selectedKey;\n }, [isCompleted]);\n\n useEffect(() => {\n // Ensure a step is always selected (in case no selected key was specified or if selected item was deleted from collection)\n let selectedKey: Key | null = state.selectedKey;\n if (state.selectionManager.isEmpty || selectedKey == null || !state.collection.getItem(selectedKey)) {\n selectedKey = findDefaultSelectedKey(state.collection, state.disabledKeys);\n if (selectedKey !== null) {\n state.selectionManager.replaceSelection(selectedKey);\n }\n }\n\n if (state.selectionManager.focusedKey == null) {\n state.selectionManager.setFocusedKey(selectedKey);\n }\n\n let lcs = (lastCompletedStep !== null ? indexMap.get(lastCompletedStep) : -1) ?? -1;\n if (selectedIdx !== undefined && selectedIdx > 0 && selectedIdx > lcs + 1 && selectedKey !== null && keysLinkedList.has(selectedKey)) {\n setLastCompletedStep(keysLinkedList.get(selectedKey)!);\n }\n });\n\n function isSelectable(step: Key) {\n if (props.isDisabled || state.disabledKeys.has(step) || props.isReadOnly) {\n return false;\n }\n\n if (isCompleted(step)) {\n return true;\n }\n\n const prevStep = keysLinkedList.get(step);\n return isCompleted(prevStep) || step === state.collection.getFirstKey();\n }\n\n function setSelectedKey(key: Key) {\n const prevKey = keysLinkedList.get(key);\n if (prevKey && !isCompleted(prevKey)) {\n setLastCompletedStep(prevKey);\n }\n realSetSelectedKey(key);\n }\n\n return {\n ...state,\n setSelectedKey,\n setLastCompletedStep,\n isCompleted,\n isSelectable\n };\n}\n\nfunction buildKeysMaps<T>(coll: Collection<Node<T>>) {\n const indexMap = new Map<Key, number>();\n const keysLinkedList = new Map<Key, Key | undefined>();\n let i = 0;\n let prev: Node<T> | undefined = undefined;\n for (const item of coll) {\n indexMap.set(item.key, i);\n keysLinkedList.set(item.key, prev?.key);\n prev = item;\n i++;\n }\n return {\n indexMap,\n keysLinkedList\n };\n}\n"],"names":[],"version":3,"file":"useStepListState.js.map"}
1
+ {"mappings":"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","sources":["packages/react-stately/src/steplist/useStepListState.ts"],"sourcesContent":["/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Collection, CollectionBase, Key, Node, SingleSelection} from '@react-types/shared';\nimport {SingleSelectListState, useSingleSelectListState} from '../list/useSingleSelectListState';\nimport {useCallback, useEffect, useMemo} from 'react';\nimport {useControlledState} from '../utils/useControlledState';\n\nexport interface StepListProps<T>\n extends CollectionBase<T>, Omit<SingleSelection, 'onSelectionChange'> {\n /** The key of the last completed step (controlled). */\n lastCompletedStep?: Key;\n /** The key of the initially last completed step (uncontrolled). */\n defaultLastCompletedStep?: Key;\n /** Callback for when the last completed step changes. */\n onLastCompletedStepChange?: (key: Key | null) => void;\n /** Whether the step list is disabled. Steps will not be focusable or interactive. */\n isDisabled?: boolean;\n /** Whether the step list is read only. Steps will be focusable but non-interactive. */\n isReadOnly?: boolean;\n /** Handler that is called when the selection changes. */\n onSelectionChange?: (key: Key) => void;\n}\n\nexport interface StepListState<T> extends SingleSelectListState<T> {\n readonly lastCompletedStep?: Key;\n setLastCompletedStep(key: Key): void;\n isCompleted(key: Key): boolean;\n isSelectable(key: Key): boolean;\n}\n\nexport function useStepListState<T extends object>(props: StepListProps<T>): StepListState<T> {\n let state = useSingleSelectListState<T>({\n ...props,\n onSelectionChange: props.onSelectionChange\n ? key => {\n if (key != null) {\n props.onSelectionChange?.(key);\n }\n }\n : undefined\n });\n\n let [lastCompletedStep, setLastCompletedStep] = useControlledState<Key | null>(\n props.lastCompletedStep,\n props.defaultLastCompletedStep ?? null,\n props.onLastCompletedStepChange\n );\n const {setSelectedKey: realSetSelectedKey, selectedKey, collection} = state;\n const {indexMap, keysLinkedList} = useMemo(() => buildKeysMaps(collection), [collection]);\n const selectedIdx = selectedKey != null ? indexMap.get(selectedKey) : 0;\n\n const isCompleted = useCallback(\n (step: Key | null | undefined) => {\n if (step === undefined) {\n return false;\n }\n\n return (\n step !== null &&\n lastCompletedStep !== null &&\n indexMap.has(step) &&\n indexMap.has(lastCompletedStep) &&\n indexMap.get(step)! <= indexMap.get(lastCompletedStep)!\n );\n },\n [indexMap, lastCompletedStep]\n );\n\n const findDefaultSelectedKey = useCallback(\n (collection: Collection<Node<T>> | null, disabledKeys: Set<Key>) => {\n let selectedKey: Key | null = null;\n if (collection && collection.size > 0) {\n selectedKey = collection.getFirstKey();\n // loop over keys until we find one that isn't completed or disabled and select that\n while (\n selectedKey !== collection.getLastKey() &&\n selectedKey &&\n (disabledKeys.has(selectedKey) || isCompleted(selectedKey))\n ) {\n selectedKey = collection.getKeyAfter(selectedKey);\n }\n }\n\n return selectedKey;\n },\n [isCompleted]\n );\n\n useEffect(() => {\n // Ensure a step is always selected (in case no selected key was specified or if selected item was deleted from collection)\n let selectedKey: Key | null = state.selectedKey;\n if (\n state.selectionManager.isEmpty ||\n selectedKey == null ||\n !state.collection.getItem(selectedKey)\n ) {\n selectedKey = findDefaultSelectedKey(state.collection, state.disabledKeys);\n if (selectedKey !== null) {\n state.selectionManager.replaceSelection(selectedKey);\n }\n }\n\n if (state.selectionManager.focusedKey == null) {\n state.selectionManager.setFocusedKey(selectedKey);\n }\n\n let lcs = (lastCompletedStep !== null ? indexMap.get(lastCompletedStep) : -1) ?? -1;\n if (\n selectedIdx !== undefined &&\n selectedIdx > 0 &&\n selectedIdx > lcs + 1 &&\n selectedKey !== null &&\n keysLinkedList.has(selectedKey)\n ) {\n setLastCompletedStep(keysLinkedList.get(selectedKey)!);\n }\n });\n\n function isSelectable(step: Key) {\n if (props.isDisabled || state.disabledKeys.has(step) || props.isReadOnly) {\n return false;\n }\n\n if (isCompleted(step)) {\n return true;\n }\n\n const prevStep = keysLinkedList.get(step);\n return isCompleted(prevStep) || step === state.collection.getFirstKey();\n }\n\n function setSelectedKey(key: Key) {\n const prevKey = keysLinkedList.get(key);\n if (prevKey && !isCompleted(prevKey)) {\n setLastCompletedStep(prevKey);\n }\n realSetSelectedKey(key);\n }\n\n return {\n ...state,\n setSelectedKey,\n setLastCompletedStep,\n isCompleted,\n isSelectable\n };\n}\n\nfunction buildKeysMaps<T>(coll: Collection<Node<T>>) {\n const indexMap = new Map<Key, number>();\n const keysLinkedList = new Map<Key, Key | undefined>();\n let i = 0;\n let prev: Node<T> | undefined = undefined;\n for (const item of coll) {\n indexMap.set(item.key, i);\n keysLinkedList.set(item.key, prev?.key);\n prev = item;\n i++;\n }\n return {\n indexMap,\n keysLinkedList\n };\n}\n"],"names":[],"version":3,"file":"useStepListState.js.map"}
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/react-stately/src/steplist/useStepListState.ts"],"sourcesContent":["/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Collection, CollectionBase, Key, Node, SingleSelection} from '@react-types/shared';\nimport {SingleSelectListState, useSingleSelectListState} from '../list/useSingleSelectListState';\nimport {useCallback, useEffect, useMemo} from 'react';\nimport {useControlledState} from '../utils/useControlledState';\n\nexport interface StepListProps<T> extends CollectionBase<T>, Omit<SingleSelection, 'onSelectionChange'> {\n /** The key of the last completed step (controlled). */\n lastCompletedStep?: Key,\n /** The key of the initially last completed step (uncontrolled). */\n defaultLastCompletedStep?: Key,\n /** Callback for when the last completed step changes. */\n onLastCompletedStepChange?: (key: Key | null) => void,\n /** Whether the step list is disabled. Steps will not be focusable or interactive. */\n isDisabled?: boolean,\n /** Whether the step list is read only. Steps will be focusable but non-interactive. */\n isReadOnly?: boolean,\n /** Handler that is called when the selection changes. */\n onSelectionChange?: (key: Key) => void\n}\n\nexport interface StepListState<T> extends SingleSelectListState<T> {\n readonly lastCompletedStep?: Key,\n setLastCompletedStep(key: Key): void,\n isCompleted(key: Key): boolean,\n isSelectable(key: Key): boolean\n}\n\nexport function useStepListState<T extends object>(props: StepListProps<T>): StepListState<T> {\n let state = useSingleSelectListState<T>({\n ...props,\n onSelectionChange: props.onSelectionChange ? (key => {\n if (key != null) {\n props.onSelectionChange?.(key);\n }\n }) : undefined\n });\n\n let [lastCompletedStep, setLastCompletedStep] = useControlledState<Key | null>(props.lastCompletedStep, props.defaultLastCompletedStep ?? null, props.onLastCompletedStepChange);\n const {setSelectedKey: realSetSelectedKey, selectedKey, collection} = state;\n const {indexMap, keysLinkedList} = useMemo(() => buildKeysMaps(collection), [collection]);\n const selectedIdx = selectedKey != null ? indexMap.get(selectedKey) : 0;\n\n const isCompleted = useCallback((step: Key | null | undefined) => {\n if (step === undefined) {\n return false;\n }\n\n return (step !== null &&\n lastCompletedStep !== null &&\n indexMap.has(step) &&\n indexMap.has(lastCompletedStep) &&\n indexMap.get(step)! <= indexMap.get(lastCompletedStep)!);\n }, [indexMap, lastCompletedStep]);\n\n const findDefaultSelectedKey = useCallback((collection: Collection<Node<T>> | null, disabledKeys: Set<Key>) => {\n let selectedKey: Key | null = null;\n if (collection && collection.size > 0) {\n selectedKey = collection.getFirstKey();\n // loop over keys until we find one that isn't completed or disabled and select that\n while (selectedKey !== collection.getLastKey() && selectedKey && (disabledKeys.has(selectedKey) || isCompleted(selectedKey))) {\n selectedKey = collection.getKeyAfter(selectedKey);\n }\n }\n\n return selectedKey;\n }, [isCompleted]);\n\n useEffect(() => {\n // Ensure a step is always selected (in case no selected key was specified or if selected item was deleted from collection)\n let selectedKey: Key | null = state.selectedKey;\n if (state.selectionManager.isEmpty || selectedKey == null || !state.collection.getItem(selectedKey)) {\n selectedKey = findDefaultSelectedKey(state.collection, state.disabledKeys);\n if (selectedKey !== null) {\n state.selectionManager.replaceSelection(selectedKey);\n }\n }\n\n if (state.selectionManager.focusedKey == null) {\n state.selectionManager.setFocusedKey(selectedKey);\n }\n\n let lcs = (lastCompletedStep !== null ? indexMap.get(lastCompletedStep) : -1) ?? -1;\n if (selectedIdx !== undefined && selectedIdx > 0 && selectedIdx > lcs + 1 && selectedKey !== null && keysLinkedList.has(selectedKey)) {\n setLastCompletedStep(keysLinkedList.get(selectedKey)!);\n }\n });\n\n function isSelectable(step: Key) {\n if (props.isDisabled || state.disabledKeys.has(step) || props.isReadOnly) {\n return false;\n }\n\n if (isCompleted(step)) {\n return true;\n }\n\n const prevStep = keysLinkedList.get(step);\n return isCompleted(prevStep) || step === state.collection.getFirstKey();\n }\n\n function setSelectedKey(key: Key) {\n const prevKey = keysLinkedList.get(key);\n if (prevKey && !isCompleted(prevKey)) {\n setLastCompletedStep(prevKey);\n }\n realSetSelectedKey(key);\n }\n\n return {\n ...state,\n setSelectedKey,\n setLastCompletedStep,\n isCompleted,\n isSelectable\n };\n}\n\nfunction buildKeysMaps<T>(coll: Collection<Node<T>>) {\n const indexMap = new Map<Key, number>();\n const keysLinkedList = new Map<Key, Key | undefined>();\n let i = 0;\n let prev: Node<T> | undefined = undefined;\n for (const item of coll) {\n indexMap.set(item.key, i);\n keysLinkedList.set(item.key, prev?.key);\n prev = item;\n i++;\n }\n return {\n indexMap,\n keysLinkedList\n };\n}\n"],"names":[],"version":3,"file":"useStepListState.mjs.map"}
1
+ {"mappings":"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","sources":["packages/react-stately/src/steplist/useStepListState.ts"],"sourcesContent":["/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Collection, CollectionBase, Key, Node, SingleSelection} from '@react-types/shared';\nimport {SingleSelectListState, useSingleSelectListState} from '../list/useSingleSelectListState';\nimport {useCallback, useEffect, useMemo} from 'react';\nimport {useControlledState} from '../utils/useControlledState';\n\nexport interface StepListProps<T>\n extends CollectionBase<T>, Omit<SingleSelection, 'onSelectionChange'> {\n /** The key of the last completed step (controlled). */\n lastCompletedStep?: Key;\n /** The key of the initially last completed step (uncontrolled). */\n defaultLastCompletedStep?: Key;\n /** Callback for when the last completed step changes. */\n onLastCompletedStepChange?: (key: Key | null) => void;\n /** Whether the step list is disabled. Steps will not be focusable or interactive. */\n isDisabled?: boolean;\n /** Whether the step list is read only. Steps will be focusable but non-interactive. */\n isReadOnly?: boolean;\n /** Handler that is called when the selection changes. */\n onSelectionChange?: (key: Key) => void;\n}\n\nexport interface StepListState<T> extends SingleSelectListState<T> {\n readonly lastCompletedStep?: Key;\n setLastCompletedStep(key: Key): void;\n isCompleted(key: Key): boolean;\n isSelectable(key: Key): boolean;\n}\n\nexport function useStepListState<T extends object>(props: StepListProps<T>): StepListState<T> {\n let state = useSingleSelectListState<T>({\n ...props,\n onSelectionChange: props.onSelectionChange\n ? key => {\n if (key != null) {\n props.onSelectionChange?.(key);\n }\n }\n : undefined\n });\n\n let [lastCompletedStep, setLastCompletedStep] = useControlledState<Key | null>(\n props.lastCompletedStep,\n props.defaultLastCompletedStep ?? null,\n props.onLastCompletedStepChange\n );\n const {setSelectedKey: realSetSelectedKey, selectedKey, collection} = state;\n const {indexMap, keysLinkedList} = useMemo(() => buildKeysMaps(collection), [collection]);\n const selectedIdx = selectedKey != null ? indexMap.get(selectedKey) : 0;\n\n const isCompleted = useCallback(\n (step: Key | null | undefined) => {\n if (step === undefined) {\n return false;\n }\n\n return (\n step !== null &&\n lastCompletedStep !== null &&\n indexMap.has(step) &&\n indexMap.has(lastCompletedStep) &&\n indexMap.get(step)! <= indexMap.get(lastCompletedStep)!\n );\n },\n [indexMap, lastCompletedStep]\n );\n\n const findDefaultSelectedKey = useCallback(\n (collection: Collection<Node<T>> | null, disabledKeys: Set<Key>) => {\n let selectedKey: Key | null = null;\n if (collection && collection.size > 0) {\n selectedKey = collection.getFirstKey();\n // loop over keys until we find one that isn't completed or disabled and select that\n while (\n selectedKey !== collection.getLastKey() &&\n selectedKey &&\n (disabledKeys.has(selectedKey) || isCompleted(selectedKey))\n ) {\n selectedKey = collection.getKeyAfter(selectedKey);\n }\n }\n\n return selectedKey;\n },\n [isCompleted]\n );\n\n useEffect(() => {\n // Ensure a step is always selected (in case no selected key was specified or if selected item was deleted from collection)\n let selectedKey: Key | null = state.selectedKey;\n if (\n state.selectionManager.isEmpty ||\n selectedKey == null ||\n !state.collection.getItem(selectedKey)\n ) {\n selectedKey = findDefaultSelectedKey(state.collection, state.disabledKeys);\n if (selectedKey !== null) {\n state.selectionManager.replaceSelection(selectedKey);\n }\n }\n\n if (state.selectionManager.focusedKey == null) {\n state.selectionManager.setFocusedKey(selectedKey);\n }\n\n let lcs = (lastCompletedStep !== null ? indexMap.get(lastCompletedStep) : -1) ?? -1;\n if (\n selectedIdx !== undefined &&\n selectedIdx > 0 &&\n selectedIdx > lcs + 1 &&\n selectedKey !== null &&\n keysLinkedList.has(selectedKey)\n ) {\n setLastCompletedStep(keysLinkedList.get(selectedKey)!);\n }\n });\n\n function isSelectable(step: Key) {\n if (props.isDisabled || state.disabledKeys.has(step) || props.isReadOnly) {\n return false;\n }\n\n if (isCompleted(step)) {\n return true;\n }\n\n const prevStep = keysLinkedList.get(step);\n return isCompleted(prevStep) || step === state.collection.getFirstKey();\n }\n\n function setSelectedKey(key: Key) {\n const prevKey = keysLinkedList.get(key);\n if (prevKey && !isCompleted(prevKey)) {\n setLastCompletedStep(prevKey);\n }\n realSetSelectedKey(key);\n }\n\n return {\n ...state,\n setSelectedKey,\n setLastCompletedStep,\n isCompleted,\n isSelectable\n };\n}\n\nfunction buildKeysMaps<T>(coll: Collection<Node<T>>) {\n const indexMap = new Map<Key, number>();\n const keysLinkedList = new Map<Key, Key | undefined>();\n let i = 0;\n let prev: Node<T> | undefined = undefined;\n for (const item of coll) {\n indexMap.set(item.key, i);\n keysLinkedList.set(item.key, prev?.key);\n prev = item;\n i++;\n }\n return {\n indexMap,\n keysLinkedList\n };\n}\n"],"names":[],"version":3,"file":"useStepListState.mjs.map"}
@@ -14,7 +14,8 @@ $parcel$export(module.exports, "Cell", function () { return $af15f76d453422d1$ex
14
14
  * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
15
15
  * OF ANY KIND, either express or implied. See the License for the specific language
16
16
  * governing permissions and limitations under the License.
17
- */ function $af15f76d453422d1$var$Cell(props) {
17
+ */ // eslint-disable-next-line @typescript-eslint/no-unused-vars
18
+ function $af15f76d453422d1$var$Cell(props) {
18
19
  return null;
19
20
  }
20
21
  $af15f76d453422d1$var$Cell.getCollectionNode = function* getCollectionNode(props) {
@@ -1 +1 @@
1
- {"mappings":";;;;;;AAAA;;;;;;;;;;CAUC,GAkBD,SAAS,2BAAK,KAAgB;IAC5B,OAAO;AACT;AAEA,2BAAK,iBAAiB,GAAG,UAAU,kBAAqB,KAAgB;IACtE,IAAI,YAAC,QAAQ,EAAC,GAAG;IAEjB,IAAI,YAAY,MAAM,SAAS,IAAK,CAAA,OAAO,aAAa,WAAW,WAAW,EAAC,KAAM,KAAK,CAAC,aAAa,IAAI;IAC5G,MAAM;QACJ,MAAM;QACN,OAAO;QACP,UAAU;mBACV;QACA,cAAc,KAAK,CAAC,aAAa;QACjC,eAAe;IACjB;AACF;AAEA;;CAEC,GACD,oEAAoE;AACpE,IAAI,4CAAQ","sources":["packages/react-stately/src/table/Cell.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {JSX, ReactElement, ReactNode} from 'react';\nimport {Key} from '@react-types/shared';\nimport {PartialNode} from '../collections/types';\n\nexport interface CellProps {\n /** The contents of the cell. */\n children: ReactNode,\n /** A string representation of the cell's contents, used for features like typeahead. */\n textValue?: string,\n /** Indicates how many columns the data cell spans. */\n colSpan?: number\n}\n\nexport type CellElement = ReactElement<CellProps>;\nexport type CellRenderer = (columnKey: Key) => CellElement;\n\nfunction Cell(props: CellProps): ReactElement | null { // eslint-disable-line @typescript-eslint/no-unused-vars\n return null;\n}\n\nCell.getCollectionNode = function* getCollectionNode<T>(props: CellProps): Generator<PartialNode<T>> {\n let {children} = props;\n\n let textValue = props.textValue || (typeof children === 'string' ? children : '') || props['aria-label'] || '';\n yield {\n type: 'cell',\n props: props,\n rendered: children,\n textValue,\n 'aria-label': props['aria-label'],\n hasChildNodes: false\n };\n};\n\n/**\n * A Cell represents the value of a single Column within a Table Row.\n */\n// We don't want getCollectionNode to show up in the type definition\nlet _Cell = Cell as (props: CellProps) => JSX.Element;\nexport {_Cell as Cell};\n"],"names":[],"version":3,"file":"Cell.cjs.map"}
1
+ {"mappings":";;;;;;AAAA;;;;;;;;;;CAUC,GAkBD,6DAA6D;AAC7D,SAAS,2BAAK,KAAgB;IAC5B,OAAO;AACT;AAEA,2BAAK,iBAAiB,GAAG,UAAU,kBACjC,KAAgB;IAEhB,IAAI,YAAC,QAAQ,EAAC,GAAG;IAEjB,IAAI,YACF,MAAM,SAAS,IAAK,CAAA,OAAO,aAAa,WAAW,WAAW,EAAC,KAAM,KAAK,CAAC,aAAa,IAAI;IAC9F,MAAM;QACJ,MAAM;QACN,OAAO;QACP,UAAU;mBACV;QACA,cAAc,KAAK,CAAC,aAAa;QACjC,eAAe;IACjB;AACF;AAEA;;CAEC,GACD,oEAAoE;AACpE,IAAI,4CAAQ","sources":["packages/react-stately/src/table/Cell.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {JSX, ReactElement, ReactNode} from 'react';\nimport {Key} from '@react-types/shared';\nimport {PartialNode} from '../collections/types';\n\nexport interface CellProps {\n /** The contents of the cell. */\n children: ReactNode;\n /** A string representation of the cell's contents, used for features like typeahead. */\n textValue?: string;\n /** Indicates how many columns the data cell spans. */\n colSpan?: number;\n}\n\nexport type CellElement = ReactElement<CellProps>;\nexport type CellRenderer = (columnKey: Key) => CellElement;\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction Cell(props: CellProps): ReactElement | null {\n return null;\n}\n\nCell.getCollectionNode = function* getCollectionNode<T>(\n props: CellProps\n): Generator<PartialNode<T>> {\n let {children} = props;\n\n let textValue =\n props.textValue || (typeof children === 'string' ? children : '') || props['aria-label'] || '';\n yield {\n type: 'cell',\n props: props,\n rendered: children,\n textValue,\n 'aria-label': props['aria-label'],\n hasChildNodes: false\n };\n};\n\n/**\n * A Cell represents the value of a single Column within a Table Row.\n */\n// We don't want getCollectionNode to show up in the type definition\nlet _Cell = Cell as (props: CellProps) => JSX.Element;\nexport {_Cell as Cell};\n"],"names":[],"version":3,"file":"Cell.cjs.map"}
@@ -8,7 +8,8 @@
8
8
  * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
9
  * OF ANY KIND, either express or implied. See the License for the specific language
10
10
  * governing permissions and limitations under the License.
11
- */ function $865a862a32d3d395$var$Cell(props) {
11
+ */ // eslint-disable-next-line @typescript-eslint/no-unused-vars
12
+ function $865a862a32d3d395$var$Cell(props) {
12
13
  return null;
13
14
  }
14
15
  $865a862a32d3d395$var$Cell.getCollectionNode = function* getCollectionNode(props) {
@@ -1 +1 @@
1
- {"mappings":"AAAA;;;;;;;;;;CAUC,GAkBD,SAAS,2BAAK,KAAgB;IAC5B,OAAO;AACT;AAEA,2BAAK,iBAAiB,GAAG,UAAU,kBAAqB,KAAgB;IACtE,IAAI,YAAC,QAAQ,EAAC,GAAG;IAEjB,IAAI,YAAY,MAAM,SAAS,IAAK,CAAA,OAAO,aAAa,WAAW,WAAW,EAAC,KAAM,KAAK,CAAC,aAAa,IAAI;IAC5G,MAAM;QACJ,MAAM;QACN,OAAO;QACP,UAAU;mBACV;QACA,cAAc,KAAK,CAAC,aAAa;QACjC,eAAe;IACjB;AACF;AAEA;;CAEC,GACD,oEAAoE;AACpE,IAAI,4CAAQ","sources":["packages/react-stately/src/table/Cell.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {JSX, ReactElement, ReactNode} from 'react';\nimport {Key} from '@react-types/shared';\nimport {PartialNode} from '../collections/types';\n\nexport interface CellProps {\n /** The contents of the cell. */\n children: ReactNode,\n /** A string representation of the cell's contents, used for features like typeahead. */\n textValue?: string,\n /** Indicates how many columns the data cell spans. */\n colSpan?: number\n}\n\nexport type CellElement = ReactElement<CellProps>;\nexport type CellRenderer = (columnKey: Key) => CellElement;\n\nfunction Cell(props: CellProps): ReactElement | null { // eslint-disable-line @typescript-eslint/no-unused-vars\n return null;\n}\n\nCell.getCollectionNode = function* getCollectionNode<T>(props: CellProps): Generator<PartialNode<T>> {\n let {children} = props;\n\n let textValue = props.textValue || (typeof children === 'string' ? children : '') || props['aria-label'] || '';\n yield {\n type: 'cell',\n props: props,\n rendered: children,\n textValue,\n 'aria-label': props['aria-label'],\n hasChildNodes: false\n };\n};\n\n/**\n * A Cell represents the value of a single Column within a Table Row.\n */\n// We don't want getCollectionNode to show up in the type definition\nlet _Cell = Cell as (props: CellProps) => JSX.Element;\nexport {_Cell as Cell};\n"],"names":[],"version":3,"file":"Cell.js.map"}
1
+ {"mappings":"AAAA;;;;;;;;;;CAUC,GAkBD,6DAA6D;AAC7D,SAAS,2BAAK,KAAgB;IAC5B,OAAO;AACT;AAEA,2BAAK,iBAAiB,GAAG,UAAU,kBACjC,KAAgB;IAEhB,IAAI,YAAC,QAAQ,EAAC,GAAG;IAEjB,IAAI,YACF,MAAM,SAAS,IAAK,CAAA,OAAO,aAAa,WAAW,WAAW,EAAC,KAAM,KAAK,CAAC,aAAa,IAAI;IAC9F,MAAM;QACJ,MAAM;QACN,OAAO;QACP,UAAU;mBACV;QACA,cAAc,KAAK,CAAC,aAAa;QACjC,eAAe;IACjB;AACF;AAEA;;CAEC,GACD,oEAAoE;AACpE,IAAI,4CAAQ","sources":["packages/react-stately/src/table/Cell.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {JSX, ReactElement, ReactNode} from 'react';\nimport {Key} from '@react-types/shared';\nimport {PartialNode} from '../collections/types';\n\nexport interface CellProps {\n /** The contents of the cell. */\n children: ReactNode;\n /** A string representation of the cell's contents, used for features like typeahead. */\n textValue?: string;\n /** Indicates how many columns the data cell spans. */\n colSpan?: number;\n}\n\nexport type CellElement = ReactElement<CellProps>;\nexport type CellRenderer = (columnKey: Key) => CellElement;\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction Cell(props: CellProps): ReactElement | null {\n return null;\n}\n\nCell.getCollectionNode = function* getCollectionNode<T>(\n props: CellProps\n): Generator<PartialNode<T>> {\n let {children} = props;\n\n let textValue =\n props.textValue || (typeof children === 'string' ? children : '') || props['aria-label'] || '';\n yield {\n type: 'cell',\n props: props,\n rendered: children,\n textValue,\n 'aria-label': props['aria-label'],\n hasChildNodes: false\n };\n};\n\n/**\n * A Cell represents the value of a single Column within a Table Row.\n */\n// We don't want getCollectionNode to show up in the type definition\nlet _Cell = Cell as (props: CellProps) => JSX.Element;\nexport {_Cell as Cell};\n"],"names":[],"version":3,"file":"Cell.js.map"}
@@ -8,7 +8,8 @@
8
8
  * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
9
  * OF ANY KIND, either express or implied. See the License for the specific language
10
10
  * governing permissions and limitations under the License.
11
- */ function $bf42fa5f8ac488ca$var$Cell(props) {
11
+ */ // eslint-disable-next-line @typescript-eslint/no-unused-vars
12
+ function $bf42fa5f8ac488ca$var$Cell(props) {
12
13
  return null;
13
14
  }
14
15
  $bf42fa5f8ac488ca$var$Cell.getCollectionNode = function* getCollectionNode(props) {
@@ -1 +1 @@
1
- {"mappings":"AAAA;;;;;;;;;;CAUC,GAkBD,SAAS,2BAAK,KAAgB;IAC5B,OAAO;AACT;AAEA,2BAAK,iBAAiB,GAAG,UAAU,kBAAqB,KAAgB;IACtE,IAAI,YAAC,QAAQ,EAAC,GAAG;IAEjB,IAAI,YAAY,MAAM,SAAS,IAAK,CAAA,OAAO,aAAa,WAAW,WAAW,EAAC,KAAM,KAAK,CAAC,aAAa,IAAI;IAC5G,MAAM;QACJ,MAAM;QACN,OAAO;QACP,UAAU;mBACV;QACA,cAAc,KAAK,CAAC,aAAa;QACjC,eAAe;IACjB;AACF;AAEA;;CAEC,GACD,oEAAoE;AACpE,IAAI,4CAAQ","sources":["packages/react-stately/src/table/Cell.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {JSX, ReactElement, ReactNode} from 'react';\nimport {Key} from '@react-types/shared';\nimport {PartialNode} from '../collections/types';\n\nexport interface CellProps {\n /** The contents of the cell. */\n children: ReactNode,\n /** A string representation of the cell's contents, used for features like typeahead. */\n textValue?: string,\n /** Indicates how many columns the data cell spans. */\n colSpan?: number\n}\n\nexport type CellElement = ReactElement<CellProps>;\nexport type CellRenderer = (columnKey: Key) => CellElement;\n\nfunction Cell(props: CellProps): ReactElement | null { // eslint-disable-line @typescript-eslint/no-unused-vars\n return null;\n}\n\nCell.getCollectionNode = function* getCollectionNode<T>(props: CellProps): Generator<PartialNode<T>> {\n let {children} = props;\n\n let textValue = props.textValue || (typeof children === 'string' ? children : '') || props['aria-label'] || '';\n yield {\n type: 'cell',\n props: props,\n rendered: children,\n textValue,\n 'aria-label': props['aria-label'],\n hasChildNodes: false\n };\n};\n\n/**\n * A Cell represents the value of a single Column within a Table Row.\n */\n// We don't want getCollectionNode to show up in the type definition\nlet _Cell = Cell as (props: CellProps) => JSX.Element;\nexport {_Cell as Cell};\n"],"names":[],"version":3,"file":"Cell.mjs.map"}
1
+ {"mappings":"AAAA;;;;;;;;;;CAUC,GAkBD,6DAA6D;AAC7D,SAAS,2BAAK,KAAgB;IAC5B,OAAO;AACT;AAEA,2BAAK,iBAAiB,GAAG,UAAU,kBACjC,KAAgB;IAEhB,IAAI,YAAC,QAAQ,EAAC,GAAG;IAEjB,IAAI,YACF,MAAM,SAAS,IAAK,CAAA,OAAO,aAAa,WAAW,WAAW,EAAC,KAAM,KAAK,CAAC,aAAa,IAAI;IAC9F,MAAM;QACJ,MAAM;QACN,OAAO;QACP,UAAU;mBACV;QACA,cAAc,KAAK,CAAC,aAAa;QACjC,eAAe;IACjB;AACF;AAEA;;CAEC,GACD,oEAAoE;AACpE,IAAI,4CAAQ","sources":["packages/react-stately/src/table/Cell.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {JSX, ReactElement, ReactNode} from 'react';\nimport {Key} from '@react-types/shared';\nimport {PartialNode} from '../collections/types';\n\nexport interface CellProps {\n /** The contents of the cell. */\n children: ReactNode;\n /** A string representation of the cell's contents, used for features like typeahead. */\n textValue?: string;\n /** Indicates how many columns the data cell spans. */\n colSpan?: number;\n}\n\nexport type CellElement = ReactElement<CellProps>;\nexport type CellRenderer = (columnKey: Key) => CellElement;\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction Cell(props: CellProps): ReactElement | null {\n return null;\n}\n\nCell.getCollectionNode = function* getCollectionNode<T>(\n props: CellProps\n): Generator<PartialNode<T>> {\n let {children} = props;\n\n let textValue =\n props.textValue || (typeof children === 'string' ? children : '') || props['aria-label'] || '';\n yield {\n type: 'cell',\n props: props,\n rendered: children,\n textValue,\n 'aria-label': props['aria-label'],\n hasChildNodes: false\n };\n};\n\n/**\n * A Cell represents the value of a single Column within a Table Row.\n */\n// We don't want getCollectionNode to show up in the type definition\nlet _Cell = Cell as (props: CellProps) => JSX.Element;\nexport {_Cell as Cell};\n"],"names":[],"version":3,"file":"Cell.mjs.map"}
@@ -21,6 +21,7 @@ $parcel$export(module.exports, "Column", function () { return $f8664c1cfa6cf060$
21
21
  * OF ANY KIND, either express or implied. See the License for the specific language
22
22
  * governing permissions and limitations under the License.
23
23
  */
24
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
24
25
  function $f8664c1cfa6cf060$var$Column(props) {
25
26
  return null;
26
27
  }