reka-ui 2.8.2 → 2.9.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 (592) hide show
  1. package/dist/Autocomplete/AutocompleteInput.cjs +128 -0
  2. package/dist/Autocomplete/AutocompleteInput.cjs.map +1 -0
  3. package/dist/Autocomplete/AutocompleteInput.js +122 -0
  4. package/dist/Autocomplete/AutocompleteInput.js.map +1 -0
  5. package/dist/Autocomplete/AutocompleteRoot.cjs +258 -0
  6. package/dist/Autocomplete/AutocompleteRoot.cjs.map +1 -0
  7. package/dist/Autocomplete/AutocompleteRoot.js +246 -0
  8. package/dist/Autocomplete/AutocompleteRoot.js.map +1 -0
  9. package/dist/Calendar/CalendarCellTrigger.cjs +8 -5
  10. package/dist/Calendar/CalendarCellTrigger.cjs.map +1 -1
  11. package/dist/Calendar/CalendarCellTrigger.js +9 -6
  12. package/dist/Calendar/CalendarCellTrigger.js.map +1 -1
  13. package/dist/Calendar/CalendarNext.cjs +7 -3
  14. package/dist/Calendar/CalendarNext.cjs.map +1 -1
  15. package/dist/Calendar/CalendarNext.js +7 -3
  16. package/dist/Calendar/CalendarNext.js.map +1 -1
  17. package/dist/Calendar/CalendarPrev.cjs +7 -3
  18. package/dist/Calendar/CalendarPrev.cjs.map +1 -1
  19. package/dist/Calendar/CalendarPrev.js +7 -3
  20. package/dist/Calendar/CalendarPrev.js.map +1 -1
  21. package/dist/Checkbox/CheckboxGroupRoot.cjs +1 -1
  22. package/dist/Checkbox/CheckboxGroupRoot.js +1 -1
  23. package/dist/Checkbox/CheckboxRoot.cjs +21 -10
  24. package/dist/Checkbox/CheckboxRoot.cjs.map +1 -1
  25. package/dist/Checkbox/CheckboxRoot.js +21 -10
  26. package/dist/Checkbox/CheckboxRoot.js.map +1 -1
  27. package/dist/ColorArea/ColorAreaArea.cjs +143 -0
  28. package/dist/ColorArea/ColorAreaArea.cjs.map +1 -0
  29. package/dist/ColorArea/ColorAreaArea.js +137 -0
  30. package/dist/ColorArea/ColorAreaArea.js.map +1 -0
  31. package/dist/ColorArea/ColorAreaRoot.cjs +240 -0
  32. package/dist/ColorArea/ColorAreaRoot.cjs.map +1 -0
  33. package/dist/ColorArea/ColorAreaRoot.js +228 -0
  34. package/dist/ColorArea/ColorAreaRoot.js.map +1 -0
  35. package/dist/ColorArea/ColorAreaThumb.cjs +91 -0
  36. package/dist/ColorArea/ColorAreaThumb.cjs.map +1 -0
  37. package/dist/ColorArea/ColorAreaThumb.js +85 -0
  38. package/dist/ColorArea/ColorAreaThumb.js.map +1 -0
  39. package/dist/ColorArea/utils.cjs +32 -0
  40. package/dist/ColorArea/utils.cjs.map +1 -0
  41. package/dist/ColorArea/utils.js +21 -0
  42. package/dist/ColorArea/utils.js.map +1 -0
  43. package/dist/ColorField/ColorFieldInput.cjs +140 -0
  44. package/dist/ColorField/ColorFieldInput.cjs.map +1 -0
  45. package/dist/ColorField/ColorFieldInput.js +134 -0
  46. package/dist/ColorField/ColorFieldInput.js.map +1 -0
  47. package/dist/ColorField/ColorFieldRoot.cjs +281 -0
  48. package/dist/ColorField/ColorFieldRoot.cjs.map +1 -0
  49. package/dist/ColorField/ColorFieldRoot.js +269 -0
  50. package/dist/ColorField/ColorFieldRoot.js.map +1 -0
  51. package/dist/ColorSlider/ColorSliderRoot.cjs +230 -0
  52. package/dist/ColorSlider/ColorSliderRoot.cjs.map +1 -0
  53. package/dist/ColorSlider/ColorSliderRoot.js +218 -0
  54. package/dist/ColorSlider/ColorSliderRoot.js.map +1 -0
  55. package/dist/ColorSlider/ColorSliderThumb.cjs +66 -0
  56. package/dist/ColorSlider/ColorSliderThumb.cjs.map +1 -0
  57. package/dist/ColorSlider/ColorSliderThumb.js +60 -0
  58. package/dist/ColorSlider/ColorSliderThumb.js.map +1 -0
  59. package/dist/ColorSlider/ColorSliderTrack.cjs +55 -0
  60. package/dist/ColorSlider/ColorSliderTrack.cjs.map +1 -0
  61. package/dist/ColorSlider/ColorSliderTrack.js +49 -0
  62. package/dist/ColorSlider/ColorSliderTrack.js.map +1 -0
  63. package/dist/ColorSwatch/ColorSwatch.cjs +106 -0
  64. package/dist/ColorSwatch/ColorSwatch.cjs.map +1 -0
  65. package/dist/ColorSwatch/ColorSwatch.js +100 -0
  66. package/dist/ColorSwatch/ColorSwatch.js.map +1 -0
  67. package/dist/ColorSwatchPicker/ColorSwatchPickerItem.cjs +78 -0
  68. package/dist/ColorSwatchPicker/ColorSwatchPickerItem.cjs.map +1 -0
  69. package/dist/ColorSwatchPicker/ColorSwatchPickerItem.js +66 -0
  70. package/dist/ColorSwatchPicker/ColorSwatchPickerItem.js.map +1 -0
  71. package/dist/ColorSwatchPicker/ColorSwatchPickerItemIndicator.cjs +40 -0
  72. package/dist/ColorSwatchPicker/ColorSwatchPickerItemIndicator.cjs.map +1 -0
  73. package/dist/ColorSwatchPicker/ColorSwatchPickerItemIndicator.js +34 -0
  74. package/dist/ColorSwatchPicker/ColorSwatchPickerItemIndicator.js.map +1 -0
  75. package/dist/ColorSwatchPicker/ColorSwatchPickerItemSwatch.cjs +43 -0
  76. package/dist/ColorSwatchPicker/ColorSwatchPickerItemSwatch.cjs.map +1 -0
  77. package/dist/ColorSwatchPicker/ColorSwatchPickerItemSwatch.js +37 -0
  78. package/dist/ColorSwatchPicker/ColorSwatchPickerItemSwatch.js.map +1 -0
  79. package/dist/ColorSwatchPicker/ColorSwatchPickerRoot.cjs +110 -0
  80. package/dist/ColorSwatchPicker/ColorSwatchPickerRoot.cjs.map +1 -0
  81. package/dist/ColorSwatchPicker/ColorSwatchPickerRoot.js +104 -0
  82. package/dist/ColorSwatchPicker/ColorSwatchPickerRoot.js.map +1 -0
  83. package/dist/Combobox/ComboboxContent.cjs +4 -0
  84. package/dist/Combobox/ComboboxContent.cjs.map +1 -1
  85. package/dist/Combobox/ComboboxContent.js +4 -0
  86. package/dist/Combobox/ComboboxContent.js.map +1 -1
  87. package/dist/Combobox/ComboboxContentImpl.cjs +9 -2
  88. package/dist/Combobox/ComboboxContentImpl.cjs.map +1 -1
  89. package/dist/Combobox/ComboboxContentImpl.js +9 -2
  90. package/dist/Combobox/ComboboxContentImpl.js.map +1 -1
  91. package/dist/Combobox/ComboboxRoot.cjs +7 -1
  92. package/dist/Combobox/ComboboxRoot.js +2 -2
  93. package/dist/DateField/DateFieldRoot.cjs +1 -1
  94. package/dist/DateField/DateFieldRoot.js +1 -1
  95. package/dist/DateRangeField/DateRangeFieldRoot.cjs +1 -1
  96. package/dist/DateRangeField/DateRangeFieldRoot.cjs.map +1 -1
  97. package/dist/DateRangeField/DateRangeFieldRoot.js +1 -1
  98. package/dist/DateRangeField/DateRangeFieldRoot.js.map +1 -1
  99. package/dist/DismissableLayer/utils.cjs.map +1 -1
  100. package/dist/DismissableLayer/utils.js.map +1 -1
  101. package/dist/DropdownMenu/DropdownMenuFilter.cjs +134 -0
  102. package/dist/DropdownMenu/DropdownMenuFilter.cjs.map +1 -0
  103. package/dist/DropdownMenu/DropdownMenuFilter.js +128 -0
  104. package/dist/DropdownMenu/DropdownMenuFilter.js.map +1 -0
  105. package/dist/Listbox/ListboxRoot.cjs +1 -1
  106. package/dist/Listbox/ListboxRoot.js +1 -1
  107. package/dist/Listbox/ListboxVirtualizer.cjs +1 -1
  108. package/dist/Listbox/ListboxVirtualizer.js +1 -1
  109. package/dist/Menu/MenuContentImpl.cjs +44 -4
  110. package/dist/Menu/MenuContentImpl.cjs.map +1 -1
  111. package/dist/Menu/MenuContentImpl.js +44 -4
  112. package/dist/Menu/MenuContentImpl.js.map +1 -1
  113. package/dist/Menu/MenuItemImpl.cjs +8 -3
  114. package/dist/Menu/MenuItemImpl.cjs.map +1 -1
  115. package/dist/Menu/MenuItemImpl.js +9 -4
  116. package/dist/Menu/MenuItemImpl.js.map +1 -1
  117. package/dist/Menu/MenuSubContent.cjs +8 -2
  118. package/dist/Menu/MenuSubContent.cjs.map +1 -1
  119. package/dist/Menu/MenuSubContent.js +9 -3
  120. package/dist/Menu/MenuSubContent.js.map +1 -1
  121. package/dist/Menu/MenuSubTrigger.cjs +7 -0
  122. package/dist/Menu/MenuSubTrigger.cjs.map +1 -1
  123. package/dist/Menu/MenuSubTrigger.js +8 -1
  124. package/dist/Menu/MenuSubTrigger.js.map +1 -1
  125. package/dist/MonthPicker/MonthPickerCell.cjs +59 -0
  126. package/dist/MonthPicker/MonthPickerCell.cjs.map +1 -0
  127. package/dist/MonthPicker/MonthPickerCell.js +53 -0
  128. package/dist/MonthPicker/MonthPickerCell.js.map +1 -0
  129. package/dist/MonthPicker/MonthPickerCellTrigger.cjs +197 -0
  130. package/dist/MonthPicker/MonthPickerCellTrigger.cjs.map +1 -0
  131. package/dist/MonthPicker/MonthPickerCellTrigger.js +191 -0
  132. package/dist/MonthPicker/MonthPickerCellTrigger.js.map +1 -0
  133. package/dist/MonthPicker/MonthPickerGrid.cjs +59 -0
  134. package/dist/MonthPicker/MonthPickerGrid.cjs.map +1 -0
  135. package/dist/MonthPicker/MonthPickerGrid.js +53 -0
  136. package/dist/MonthPicker/MonthPickerGrid.js.map +1 -0
  137. package/dist/MonthPicker/MonthPickerGridBody.cjs +41 -0
  138. package/dist/MonthPicker/MonthPickerGridBody.cjs.map +1 -0
  139. package/dist/MonthPicker/MonthPickerGridBody.js +35 -0
  140. package/dist/MonthPicker/MonthPickerGridBody.js.map +1 -0
  141. package/dist/MonthPicker/MonthPickerGridRow.cjs +41 -0
  142. package/dist/MonthPicker/MonthPickerGridRow.cjs.map +1 -0
  143. package/dist/MonthPicker/MonthPickerGridRow.js +35 -0
  144. package/dist/MonthPicker/MonthPickerGridRow.js.map +1 -0
  145. package/dist/MonthPicker/MonthPickerHeader.cjs +41 -0
  146. package/dist/MonthPicker/MonthPickerHeader.cjs.map +1 -0
  147. package/dist/MonthPicker/MonthPickerHeader.js +35 -0
  148. package/dist/MonthPicker/MonthPickerHeader.js.map +1 -0
  149. package/dist/MonthPicker/MonthPickerHeading.cjs +48 -0
  150. package/dist/MonthPicker/MonthPickerHeading.cjs.map +1 -0
  151. package/dist/MonthPicker/MonthPickerHeading.js +42 -0
  152. package/dist/MonthPicker/MonthPickerHeading.js.map +1 -0
  153. package/dist/MonthPicker/MonthPickerNext.cjs +68 -0
  154. package/dist/MonthPicker/MonthPickerNext.cjs.map +1 -0
  155. package/dist/MonthPicker/MonthPickerNext.js +62 -0
  156. package/dist/MonthPicker/MonthPickerNext.js.map +1 -0
  157. package/dist/MonthPicker/MonthPickerPrev.cjs +68 -0
  158. package/dist/MonthPicker/MonthPickerPrev.cjs.map +1 -0
  159. package/dist/MonthPicker/MonthPickerPrev.js +62 -0
  160. package/dist/MonthPicker/MonthPickerPrev.js.map +1 -0
  161. package/dist/MonthPicker/MonthPickerRoot.cjs +281 -0
  162. package/dist/MonthPicker/MonthPickerRoot.cjs.map +1 -0
  163. package/dist/MonthPicker/MonthPickerRoot.js +269 -0
  164. package/dist/MonthPicker/MonthPickerRoot.js.map +1 -0
  165. package/dist/MonthPicker/useMonthPicker.cjs +148 -0
  166. package/dist/MonthPicker/useMonthPicker.cjs.map +1 -0
  167. package/dist/MonthPicker/useMonthPicker.js +136 -0
  168. package/dist/MonthPicker/useMonthPicker.js.map +1 -0
  169. package/dist/MonthRangePicker/MonthRangePickerCell.cjs +59 -0
  170. package/dist/MonthRangePicker/MonthRangePickerCell.cjs.map +1 -0
  171. package/dist/MonthRangePicker/MonthRangePickerCell.js +53 -0
  172. package/dist/MonthRangePicker/MonthRangePickerCell.js.map +1 -0
  173. package/dist/MonthRangePicker/MonthRangePickerCellTrigger.cjs +258 -0
  174. package/dist/MonthRangePicker/MonthRangePickerCellTrigger.cjs.map +1 -0
  175. package/dist/MonthRangePicker/MonthRangePickerCellTrigger.js +252 -0
  176. package/dist/MonthRangePicker/MonthRangePickerCellTrigger.js.map +1 -0
  177. package/dist/MonthRangePicker/MonthRangePickerGrid.cjs +59 -0
  178. package/dist/MonthRangePicker/MonthRangePickerGrid.cjs.map +1 -0
  179. package/dist/MonthRangePicker/MonthRangePickerGrid.js +53 -0
  180. package/dist/MonthRangePicker/MonthRangePickerGrid.js.map +1 -0
  181. package/dist/MonthRangePicker/MonthRangePickerGridBody.cjs +41 -0
  182. package/dist/MonthRangePicker/MonthRangePickerGridBody.cjs.map +1 -0
  183. package/dist/MonthRangePicker/MonthRangePickerGridBody.js +35 -0
  184. package/dist/MonthRangePicker/MonthRangePickerGridBody.js.map +1 -0
  185. package/dist/MonthRangePicker/MonthRangePickerGridRow.cjs +41 -0
  186. package/dist/MonthRangePicker/MonthRangePickerGridRow.cjs.map +1 -0
  187. package/dist/MonthRangePicker/MonthRangePickerGridRow.js +35 -0
  188. package/dist/MonthRangePicker/MonthRangePickerGridRow.js.map +1 -0
  189. package/dist/MonthRangePicker/MonthRangePickerHeader.cjs +41 -0
  190. package/dist/MonthRangePicker/MonthRangePickerHeader.cjs.map +1 -0
  191. package/dist/MonthRangePicker/MonthRangePickerHeader.js +35 -0
  192. package/dist/MonthRangePicker/MonthRangePickerHeader.js.map +1 -0
  193. package/dist/MonthRangePicker/MonthRangePickerHeading.cjs +48 -0
  194. package/dist/MonthRangePicker/MonthRangePickerHeading.cjs.map +1 -0
  195. package/dist/MonthRangePicker/MonthRangePickerHeading.js +42 -0
  196. package/dist/MonthRangePicker/MonthRangePickerHeading.js.map +1 -0
  197. package/dist/MonthRangePicker/MonthRangePickerNext.cjs +68 -0
  198. package/dist/MonthRangePicker/MonthRangePickerNext.cjs.map +1 -0
  199. package/dist/MonthRangePicker/MonthRangePickerNext.js +62 -0
  200. package/dist/MonthRangePicker/MonthRangePickerNext.js.map +1 -0
  201. package/dist/MonthRangePicker/MonthRangePickerPrev.cjs +68 -0
  202. package/dist/MonthRangePicker/MonthRangePickerPrev.cjs.map +1 -0
  203. package/dist/MonthRangePicker/MonthRangePickerPrev.js +62 -0
  204. package/dist/MonthRangePicker/MonthRangePickerPrev.js.map +1 -0
  205. package/dist/MonthRangePicker/MonthRangePickerRoot.cjs +347 -0
  206. package/dist/MonthRangePicker/MonthRangePickerRoot.cjs.map +1 -0
  207. package/dist/MonthRangePicker/MonthRangePickerRoot.js +335 -0
  208. package/dist/MonthRangePicker/MonthRangePickerRoot.js.map +1 -0
  209. package/dist/MonthRangePicker/useRangeMonthPicker.cjs +128 -0
  210. package/dist/MonthRangePicker/useRangeMonthPicker.cjs.map +1 -0
  211. package/dist/MonthRangePicker/useRangeMonthPicker.js +122 -0
  212. package/dist/MonthRangePicker/useRangeMonthPicker.js.map +1 -0
  213. package/dist/NavigationMenu/NavigationMenuItem.js +3 -3
  214. package/dist/NavigationMenu/NavigationMenuItem.js.map +1 -1
  215. package/dist/NumberField/NumberFieldRoot.cjs +3 -2
  216. package/dist/NumberField/NumberFieldRoot.cjs.map +1 -1
  217. package/dist/NumberField/NumberFieldRoot.js +3 -2
  218. package/dist/NumberField/NumberFieldRoot.js.map +1 -1
  219. package/dist/Progress/ProgressRoot.cjs.map +1 -1
  220. package/dist/Progress/ProgressRoot.js.map +1 -1
  221. package/dist/RadioGroup/RadioGroupRoot.cjs +1 -1
  222. package/dist/RadioGroup/RadioGroupRoot.js +1 -1
  223. package/dist/RangeCalendar/RangeCalendarNext.cjs +9 -5
  224. package/dist/RangeCalendar/RangeCalendarNext.cjs.map +1 -1
  225. package/dist/RangeCalendar/RangeCalendarNext.js +9 -5
  226. package/dist/RangeCalendar/RangeCalendarNext.js.map +1 -1
  227. package/dist/RangeCalendar/RangeCalendarPrev.cjs +9 -5
  228. package/dist/RangeCalendar/RangeCalendarPrev.cjs.map +1 -1
  229. package/dist/RangeCalendar/RangeCalendarPrev.js +9 -5
  230. package/dist/RangeCalendar/RangeCalendarPrev.js.map +1 -1
  231. package/dist/RangeCalendar/RangeCalendarRoot.cjs +1 -1
  232. package/dist/RangeCalendar/RangeCalendarRoot.cjs.map +1 -1
  233. package/dist/RangeCalendar/RangeCalendarRoot.js +1 -1
  234. package/dist/RangeCalendar/RangeCalendarRoot.js.map +1 -1
  235. package/dist/RangeCalendar/useRangeCalendar.cjs +9 -13
  236. package/dist/RangeCalendar/useRangeCalendar.cjs.map +1 -1
  237. package/dist/RangeCalendar/useRangeCalendar.js +9 -13
  238. package/dist/RangeCalendar/useRangeCalendar.js.map +1 -1
  239. package/dist/Splitter/SplitterGroup.cjs +136 -26
  240. package/dist/Splitter/SplitterGroup.cjs.map +1 -1
  241. package/dist/Splitter/SplitterGroup.js +136 -26
  242. package/dist/Splitter/SplitterGroup.js.map +1 -1
  243. package/dist/Splitter/SplitterPanel.cjs +7 -2
  244. package/dist/Splitter/SplitterPanel.cjs.map +1 -1
  245. package/dist/Splitter/SplitterPanel.js +7 -2
  246. package/dist/Splitter/SplitterPanel.js.map +1 -1
  247. package/dist/Switch/SwitchRoot.cjs +23 -9
  248. package/dist/Switch/SwitchRoot.cjs.map +1 -1
  249. package/dist/Switch/SwitchRoot.js +23 -9
  250. package/dist/Switch/SwitchRoot.js.map +1 -1
  251. package/dist/Switch/SwitchThumb.cjs +1 -1
  252. package/dist/Switch/SwitchThumb.cjs.map +1 -1
  253. package/dist/Switch/SwitchThumb.js +1 -1
  254. package/dist/Switch/SwitchThumb.js.map +1 -1
  255. package/dist/TimeField/TimeFieldRoot.cjs +1 -1
  256. package/dist/TimeField/TimeFieldRoot.cjs.map +1 -1
  257. package/dist/TimeField/TimeFieldRoot.js +1 -1
  258. package/dist/TimeField/TimeFieldRoot.js.map +1 -1
  259. package/dist/TimeRangeField/TimeRangeFieldInput.cjs +102 -0
  260. package/dist/TimeRangeField/TimeRangeFieldInput.cjs.map +1 -0
  261. package/dist/TimeRangeField/TimeRangeFieldInput.js +96 -0
  262. package/dist/TimeRangeField/TimeRangeFieldInput.js.map +1 -0
  263. package/dist/TimeRangeField/TimeRangeFieldRoot.cjs +402 -0
  264. package/dist/TimeRangeField/TimeRangeFieldRoot.cjs.map +1 -0
  265. package/dist/TimeRangeField/TimeRangeFieldRoot.js +390 -0
  266. package/dist/TimeRangeField/TimeRangeFieldRoot.js.map +1 -0
  267. package/dist/Toast/ToastAnnounce.cjs +4 -1
  268. package/dist/Toast/ToastAnnounce.cjs.map +1 -1
  269. package/dist/Toast/ToastAnnounce.js +4 -1
  270. package/dist/Toast/ToastAnnounce.js.map +1 -1
  271. package/dist/ToggleGroup/ToggleGroupRoot.cjs +1 -1
  272. package/dist/ToggleGroup/ToggleGroupRoot.js +1 -1
  273. package/dist/Tooltip/TooltipContent.cjs +1 -2
  274. package/dist/Tooltip/TooltipContent.cjs.map +1 -1
  275. package/dist/Tooltip/TooltipContent.js +1 -2
  276. package/dist/Tooltip/TooltipContent.js.map +1 -1
  277. package/dist/Tooltip/TooltipContentImpl.cjs +25 -18
  278. package/dist/Tooltip/TooltipContentImpl.cjs.map +1 -1
  279. package/dist/Tooltip/TooltipContentImpl.js +25 -18
  280. package/dist/Tooltip/TooltipContentImpl.js.map +1 -1
  281. package/dist/Tooltip/TooltipProvider.cjs +7 -2
  282. package/dist/Tooltip/TooltipProvider.cjs.map +1 -1
  283. package/dist/Tooltip/TooltipProvider.js +7 -2
  284. package/dist/Tooltip/TooltipProvider.js.map +1 -1
  285. package/dist/YearPicker/YearPickerCell.cjs +59 -0
  286. package/dist/YearPicker/YearPickerCell.cjs.map +1 -0
  287. package/dist/YearPicker/YearPickerCell.js +53 -0
  288. package/dist/YearPicker/YearPickerCell.js.map +1 -0
  289. package/dist/YearPicker/YearPickerCellTrigger.cjs +197 -0
  290. package/dist/YearPicker/YearPickerCellTrigger.cjs.map +1 -0
  291. package/dist/YearPicker/YearPickerCellTrigger.js +191 -0
  292. package/dist/YearPicker/YearPickerCellTrigger.js.map +1 -0
  293. package/dist/YearPicker/YearPickerGrid.cjs +59 -0
  294. package/dist/YearPicker/YearPickerGrid.cjs.map +1 -0
  295. package/dist/YearPicker/YearPickerGrid.js +53 -0
  296. package/dist/YearPicker/YearPickerGrid.js.map +1 -0
  297. package/dist/YearPicker/YearPickerGridBody.cjs +41 -0
  298. package/dist/YearPicker/YearPickerGridBody.cjs.map +1 -0
  299. package/dist/YearPicker/YearPickerGridBody.js +35 -0
  300. package/dist/YearPicker/YearPickerGridBody.js.map +1 -0
  301. package/dist/YearPicker/YearPickerGridRow.cjs +41 -0
  302. package/dist/YearPicker/YearPickerGridRow.cjs.map +1 -0
  303. package/dist/YearPicker/YearPickerGridRow.js +35 -0
  304. package/dist/YearPicker/YearPickerGridRow.js.map +1 -0
  305. package/dist/YearPicker/YearPickerHeader.cjs +41 -0
  306. package/dist/YearPicker/YearPickerHeader.cjs.map +1 -0
  307. package/dist/YearPicker/YearPickerHeader.js +35 -0
  308. package/dist/YearPicker/YearPickerHeader.js.map +1 -0
  309. package/dist/YearPicker/YearPickerHeading.cjs +48 -0
  310. package/dist/YearPicker/YearPickerHeading.cjs.map +1 -0
  311. package/dist/YearPicker/YearPickerHeading.js +42 -0
  312. package/dist/YearPicker/YearPickerHeading.js.map +1 -0
  313. package/dist/YearPicker/YearPickerNext.cjs +68 -0
  314. package/dist/YearPicker/YearPickerNext.cjs.map +1 -0
  315. package/dist/YearPicker/YearPickerNext.js +62 -0
  316. package/dist/YearPicker/YearPickerNext.js.map +1 -0
  317. package/dist/YearPicker/YearPickerPrev.cjs +68 -0
  318. package/dist/YearPicker/YearPickerPrev.cjs.map +1 -0
  319. package/dist/YearPicker/YearPickerPrev.js +62 -0
  320. package/dist/YearPicker/YearPickerPrev.js.map +1 -0
  321. package/dist/YearPicker/YearPickerRoot.cjs +287 -0
  322. package/dist/YearPicker/YearPickerRoot.cjs.map +1 -0
  323. package/dist/YearPicker/YearPickerRoot.js +275 -0
  324. package/dist/YearPicker/YearPickerRoot.js.map +1 -0
  325. package/dist/YearPicker/useYearPicker.cjs +180 -0
  326. package/dist/YearPicker/useYearPicker.cjs.map +1 -0
  327. package/dist/YearPicker/useYearPicker.js +168 -0
  328. package/dist/YearPicker/useYearPicker.js.map +1 -0
  329. package/dist/YearRangePicker/YearRangePickerCell.cjs +59 -0
  330. package/dist/YearRangePicker/YearRangePickerCell.cjs.map +1 -0
  331. package/dist/YearRangePicker/YearRangePickerCell.js +53 -0
  332. package/dist/YearRangePicker/YearRangePickerCell.js.map +1 -0
  333. package/dist/YearRangePicker/YearRangePickerCellTrigger.cjs +256 -0
  334. package/dist/YearRangePicker/YearRangePickerCellTrigger.cjs.map +1 -0
  335. package/dist/YearRangePicker/YearRangePickerCellTrigger.js +250 -0
  336. package/dist/YearRangePicker/YearRangePickerCellTrigger.js.map +1 -0
  337. package/dist/YearRangePicker/YearRangePickerGrid.cjs +59 -0
  338. package/dist/YearRangePicker/YearRangePickerGrid.cjs.map +1 -0
  339. package/dist/YearRangePicker/YearRangePickerGrid.js +53 -0
  340. package/dist/YearRangePicker/YearRangePickerGrid.js.map +1 -0
  341. package/dist/YearRangePicker/YearRangePickerGridBody.cjs +41 -0
  342. package/dist/YearRangePicker/YearRangePickerGridBody.cjs.map +1 -0
  343. package/dist/YearRangePicker/YearRangePickerGridBody.js +35 -0
  344. package/dist/YearRangePicker/YearRangePickerGridBody.js.map +1 -0
  345. package/dist/YearRangePicker/YearRangePickerGridRow.cjs +41 -0
  346. package/dist/YearRangePicker/YearRangePickerGridRow.cjs.map +1 -0
  347. package/dist/YearRangePicker/YearRangePickerGridRow.js +35 -0
  348. package/dist/YearRangePicker/YearRangePickerGridRow.js.map +1 -0
  349. package/dist/YearRangePicker/YearRangePickerHeader.cjs +41 -0
  350. package/dist/YearRangePicker/YearRangePickerHeader.cjs.map +1 -0
  351. package/dist/YearRangePicker/YearRangePickerHeader.js +35 -0
  352. package/dist/YearRangePicker/YearRangePickerHeader.js.map +1 -0
  353. package/dist/YearRangePicker/YearRangePickerHeading.cjs +48 -0
  354. package/dist/YearRangePicker/YearRangePickerHeading.cjs.map +1 -0
  355. package/dist/YearRangePicker/YearRangePickerHeading.js +42 -0
  356. package/dist/YearRangePicker/YearRangePickerHeading.js.map +1 -0
  357. package/dist/YearRangePicker/YearRangePickerNext.cjs +68 -0
  358. package/dist/YearRangePicker/YearRangePickerNext.cjs.map +1 -0
  359. package/dist/YearRangePicker/YearRangePickerNext.js +62 -0
  360. package/dist/YearRangePicker/YearRangePickerNext.js.map +1 -0
  361. package/dist/YearRangePicker/YearRangePickerPrev.cjs +68 -0
  362. package/dist/YearRangePicker/YearRangePickerPrev.cjs.map +1 -0
  363. package/dist/YearRangePicker/YearRangePickerPrev.js +62 -0
  364. package/dist/YearRangePicker/YearRangePickerPrev.js.map +1 -0
  365. package/dist/YearRangePicker/YearRangePickerRoot.cjs +350 -0
  366. package/dist/YearRangePicker/YearRangePickerRoot.cjs.map +1 -0
  367. package/dist/YearRangePicker/YearRangePickerRoot.js +338 -0
  368. package/dist/YearRangePicker/YearRangePickerRoot.js.map +1 -0
  369. package/dist/YearRangePicker/useRangeYearPicker.cjs +128 -0
  370. package/dist/YearRangePicker/useRangeYearPicker.cjs.map +1 -0
  371. package/dist/YearRangePicker/useRangeYearPicker.js +122 -0
  372. package/dist/YearRangePicker/useRangeYearPicker.js.map +1 -0
  373. package/dist/color/channel.cjs +378 -0
  374. package/dist/color/channel.cjs.map +1 -0
  375. package/dist/color/channel.js +349 -0
  376. package/dist/color/channel.js.map +1 -0
  377. package/dist/color/convert.cjs +285 -0
  378. package/dist/color/convert.cjs.map +1 -0
  379. package/dist/color/convert.js +237 -0
  380. package/dist/color/convert.js.map +1 -0
  381. package/dist/color/gradient.cjs +377 -0
  382. package/dist/color/gradient.cjs.map +1 -0
  383. package/dist/color/gradient.js +354 -0
  384. package/dist/color/gradient.js.map +1 -0
  385. package/dist/color/parse.cjs +113 -0
  386. package/dist/color/parse.cjs.map +1 -0
  387. package/dist/color/parse.js +95 -0
  388. package/dist/color/parse.js.map +1 -0
  389. package/dist/color/utils.cjs +112 -0
  390. package/dist/color/utils.cjs.map +1 -0
  391. package/dist/color/utils.js +100 -0
  392. package/dist/color/utils.js.map +1 -0
  393. package/dist/composables/useWindowSplitterPanelGroupBehavior.cjs +11 -7
  394. package/dist/composables/useWindowSplitterPanelGroupBehavior.cjs.map +1 -1
  395. package/dist/composables/useWindowSplitterPanelGroupBehavior.js +11 -7
  396. package/dist/composables/useWindowSplitterPanelGroupBehavior.js.map +1 -1
  397. package/dist/constant/components.cjs +87 -1
  398. package/dist/constant/components.cjs.map +1 -1
  399. package/dist/constant/components.js +87 -1
  400. package/dist/constant/components.js.map +1 -1
  401. package/dist/constant.d.cts +12 -1
  402. package/dist/constant.d.cts.map +1 -1
  403. package/dist/constant.d.ts +12 -1
  404. package/dist/constant.d.ts.map +1 -1
  405. package/dist/date/calendar.cjs +41 -0
  406. package/dist/date/calendar.cjs.map +1 -1
  407. package/dist/date/calendar.js +30 -1
  408. package/dist/date/calendar.js.map +1 -1
  409. package/dist/date/comparators.cjs +129 -0
  410. package/dist/date/comparators.cjs.map +1 -1
  411. package/dist/date/comparators.js +76 -1
  412. package/dist/date/comparators.js.map +1 -1
  413. package/dist/date/useDateField.cjs +0 -1
  414. package/dist/date/useDateField.cjs.map +1 -1
  415. package/dist/date/useDateField.js +0 -1
  416. package/dist/date/useDateField.js.map +1 -1
  417. package/dist/date.cjs +11 -0
  418. package/dist/date.d.cts +2 -2
  419. package/dist/date.d.ts +2 -2
  420. package/dist/date.js +3 -3
  421. package/dist/index.cjs +216 -46
  422. package/dist/index.d.cts +3 -8834
  423. package/dist/index.d.ts +3 -8834
  424. package/dist/index.js +116 -47
  425. package/dist/index2.d.cts +58 -2
  426. package/dist/index2.d.cts.map +1 -1
  427. package/dist/index2.d.ts +58 -2
  428. package/dist/index2.d.ts.map +1 -1
  429. package/dist/index3.d.cts +11061 -0
  430. package/dist/index3.d.cts.map +1 -0
  431. package/dist/index3.d.ts +11061 -0
  432. package/dist/index3.d.ts.map +1 -0
  433. package/dist/internal.cjs +81 -0
  434. package/dist/internal.d.cts +22 -0
  435. package/dist/internal.d.cts.map +1 -0
  436. package/dist/internal.d.ts +22 -0
  437. package/dist/internal.d.ts.map +1 -0
  438. package/dist/internal.js +64 -0
  439. package/dist/internal2.cjs +0 -0
  440. package/dist/internal2.js +0 -0
  441. package/dist/namespaced/index.cjs +33 -1
  442. package/dist/namespaced/index.d.cts +32 -4
  443. package/dist/namespaced/index.d.mts +32 -4
  444. package/dist/namespaced/index.mjs +32 -4
  445. package/dist/shared/useArrowNavigation.cjs +4 -2
  446. package/dist/shared/useArrowNavigation.cjs.map +1 -1
  447. package/dist/shared/useArrowNavigation.js +4 -2
  448. package/dist/shared/useArrowNavigation.js.map +1 -1
  449. package/dist/shared/useForwardExpose.cjs +6 -2
  450. package/dist/shared/useForwardExpose.cjs.map +1 -1
  451. package/dist/shared/useForwardExpose.js +7 -3
  452. package/dist/shared/useForwardExpose.js.map +1 -1
  453. package/dist/shared/useId.cjs +7 -4
  454. package/dist/shared/useId.cjs.map +1 -1
  455. package/dist/shared/useId.js +7 -4
  456. package/dist/shared/useId.js.map +1 -1
  457. package/dist/utils/storage.cjs +7 -1
  458. package/dist/utils/storage.cjs.map +1 -1
  459. package/dist/utils/storage.js +7 -1
  460. package/dist/utils/storage.js.map +1 -1
  461. package/dist/utils/units.cjs +101 -0
  462. package/dist/utils/units.cjs.map +1 -0
  463. package/dist/utils/units.js +83 -0
  464. package/dist/utils/units.js.map +1 -0
  465. package/package.json +6 -2
  466. package/src/Autocomplete/AutocompleteInput.vue +112 -0
  467. package/src/Autocomplete/AutocompleteRoot.vue +272 -0
  468. package/src/Autocomplete/index.ts +72 -0
  469. package/src/Calendar/CalendarCellTrigger.vue +2 -1
  470. package/src/Calendar/CalendarNext.vue +8 -2
  471. package/src/Calendar/CalendarPrev.vue +8 -2
  472. package/src/Calendar/CalendarRoot.vue +1 -1
  473. package/src/Checkbox/CheckboxRoot.vue +32 -13
  474. package/src/ColorArea/ColorAreaArea.vue +145 -0
  475. package/src/ColorArea/ColorAreaRoot.vue +255 -0
  476. package/src/ColorArea/ColorAreaThumb.vue +75 -0
  477. package/src/ColorArea/index.ts +14 -0
  478. package/src/ColorArea/utils.ts +24 -0
  479. package/src/ColorField/ColorFieldInput.vue +133 -0
  480. package/src/ColorField/ColorFieldRoot.vue +326 -0
  481. package/src/ColorField/index.ts +10 -0
  482. package/src/ColorSlider/ColorSliderRoot.vue +224 -0
  483. package/src/ColorSlider/ColorSliderThumb.vue +54 -0
  484. package/src/ColorSlider/ColorSliderTrack.vue +36 -0
  485. package/src/ColorSlider/index.ts +14 -0
  486. package/src/ColorSlider/utils.ts +39 -0
  487. package/src/ColorSwatch/ColorSwatch.vue +97 -0
  488. package/src/ColorSwatch/index.ts +4 -0
  489. package/src/ColorSwatchPicker/ColorSwatchPickerItem.vue +60 -0
  490. package/src/ColorSwatchPicker/ColorSwatchPickerItemIndicator.vue +17 -0
  491. package/src/ColorSwatchPicker/ColorSwatchPickerItemSwatch.vue +21 -0
  492. package/src/ColorSwatchPicker/ColorSwatchPickerRoot.vue +50 -0
  493. package/src/ColorSwatchPicker/index.ts +17 -0
  494. package/src/Combobox/ComboboxContentImpl.vue +13 -1
  495. package/src/DateField/DateFieldRoot.vue +1 -1
  496. package/src/DateRangeField/DateRangeFieldRoot.vue +11 -4
  497. package/src/DismissableLayer/utils.ts +1 -2
  498. package/src/DropdownMenu/DropdownMenuFilter.vue +119 -0
  499. package/src/DropdownMenu/index.ts +5 -0
  500. package/src/Menu/MenuContentImpl.vue +68 -2
  501. package/src/Menu/MenuItemImpl.vue +11 -6
  502. package/src/Menu/MenuSubContent.vue +14 -3
  503. package/src/Menu/MenuSubTrigger.vue +13 -1
  504. package/src/MonthPicker/MonthPickerCell.vue +30 -0
  505. package/src/MonthPicker/MonthPickerCellTrigger.vue +214 -0
  506. package/src/MonthPicker/MonthPickerGrid.vue +32 -0
  507. package/src/MonthPicker/MonthPickerGridBody.vue +17 -0
  508. package/src/MonthPicker/MonthPickerGridRow.vue +20 -0
  509. package/src/MonthPicker/MonthPickerHeader.vue +17 -0
  510. package/src/MonthPicker/MonthPickerHeading.vue +35 -0
  511. package/src/MonthPicker/MonthPickerNext.vue +52 -0
  512. package/src/MonthPicker/MonthPickerPrev.vue +52 -0
  513. package/src/MonthPicker/MonthPickerRoot.vue +311 -0
  514. package/src/MonthPicker/index.ts +42 -0
  515. package/src/MonthPicker/useMonthPicker.ts +193 -0
  516. package/src/MonthRangePicker/MonthRangePickerCell.vue +30 -0
  517. package/src/MonthRangePicker/MonthRangePickerCellTrigger.vue +309 -0
  518. package/src/MonthRangePicker/MonthRangePickerGrid.vue +32 -0
  519. package/src/MonthRangePicker/MonthRangePickerGridBody.vue +17 -0
  520. package/src/MonthRangePicker/MonthRangePickerGridRow.vue +20 -0
  521. package/src/MonthRangePicker/MonthRangePickerHeader.vue +17 -0
  522. package/src/MonthRangePicker/MonthRangePickerHeading.vue +35 -0
  523. package/src/MonthRangePicker/MonthRangePickerNext.vue +52 -0
  524. package/src/MonthRangePicker/MonthRangePickerPrev.vue +52 -0
  525. package/src/MonthRangePicker/MonthRangePickerRoot.vue +391 -0
  526. package/src/MonthRangePicker/index.ts +42 -0
  527. package/src/MonthRangePicker/useRangeMonthPicker.ts +165 -0
  528. package/src/NumberField/NumberFieldRoot.vue +2 -1
  529. package/src/Progress/ProgressRoot.vue +3 -1
  530. package/src/RangeCalendar/RangeCalendarNext.vue +10 -4
  531. package/src/RangeCalendar/RangeCalendarPrev.vue +10 -4
  532. package/src/RangeCalendar/RangeCalendarRoot.vue +2 -2
  533. package/src/RangeCalendar/useRangeCalendar.ts +5 -8
  534. package/src/Splitter/SplitterGroup.vue +218 -49
  535. package/src/Splitter/SplitterPanel.vue +11 -6
  536. package/src/Splitter/utils/composables/useWindowSplitterPanelGroupBehavior.ts +16 -6
  537. package/src/Splitter/utils/storage.ts +14 -0
  538. package/src/Splitter/utils/units.ts +161 -0
  539. package/src/Splitter/utils/validation.ts +3 -2
  540. package/src/Switch/SwitchRoot.vue +36 -19
  541. package/src/Switch/SwitchThumb.vue +1 -1
  542. package/src/TimeField/TimeFieldRoot.vue +0 -3
  543. package/src/TimeRangeField/TimeRangeFieldInput.vue +74 -0
  544. package/src/TimeRangeField/TimeRangeFieldRoot.vue +473 -0
  545. package/src/TimeRangeField/index.ts +2 -0
  546. package/src/Toast/ToastAnnounce.vue +4 -1
  547. package/src/Tooltip/TooltipContent.vue +1 -3
  548. package/src/Tooltip/TooltipContentImpl.vue +18 -10
  549. package/src/Tooltip/TooltipProvider.vue +8 -1
  550. package/src/YearPicker/YearPickerCell.vue +30 -0
  551. package/src/YearPicker/YearPickerCellTrigger.vue +218 -0
  552. package/src/YearPicker/YearPickerGrid.vue +32 -0
  553. package/src/YearPicker/YearPickerGridBody.vue +17 -0
  554. package/src/YearPicker/YearPickerGridRow.vue +20 -0
  555. package/src/YearPicker/YearPickerHeader.vue +17 -0
  556. package/src/YearPicker/YearPickerHeading.vue +35 -0
  557. package/src/YearPicker/YearPickerNext.vue +52 -0
  558. package/src/YearPicker/YearPickerPrev.vue +52 -0
  559. package/src/YearPicker/YearPickerRoot.vue +314 -0
  560. package/src/YearPicker/index.ts +42 -0
  561. package/src/YearPicker/useYearPicker.ts +202 -0
  562. package/src/YearRangePicker/YearRangePickerCell.vue +30 -0
  563. package/src/YearRangePicker/YearRangePickerCellTrigger.vue +311 -0
  564. package/src/YearRangePicker/YearRangePickerGrid.vue +32 -0
  565. package/src/YearRangePicker/YearRangePickerGridBody.vue +17 -0
  566. package/src/YearRangePicker/YearRangePickerGridRow.vue +20 -0
  567. package/src/YearRangePicker/YearRangePickerHeader.vue +17 -0
  568. package/src/YearRangePicker/YearRangePickerHeading.vue +35 -0
  569. package/src/YearRangePicker/YearRangePickerNext.vue +52 -0
  570. package/src/YearRangePicker/YearRangePickerPrev.vue +52 -0
  571. package/src/YearRangePicker/YearRangePickerRoot.vue +391 -0
  572. package/src/YearRangePicker/index.ts +42 -0
  573. package/src/YearRangePicker/useRangeYearPicker.ts +165 -0
  574. package/src/date/calendar.ts +29 -0
  575. package/src/date/comparators.ts +97 -0
  576. package/src/index.ts +41 -0
  577. package/src/internal.ts +7 -0
  578. package/src/shared/color/channel.ts +424 -0
  579. package/src/shared/color/convert.ts +293 -0
  580. package/src/shared/color/gradient.ts +347 -0
  581. package/src/shared/color/index.ts +35 -0
  582. package/src/shared/color/parse.ts +140 -0
  583. package/src/shared/color/types.ts +40 -0
  584. package/src/shared/color/utils.ts +143 -0
  585. package/src/shared/date/types.ts +6 -0
  586. package/src/shared/date/useDateField.ts +37 -39
  587. package/src/shared/macro.ts +11 -0
  588. package/src/shared/useArrowNavigation.ts +8 -2
  589. package/src/shared/useForwardExpose.ts +20 -5
  590. package/src/shared/useId.ts +6 -7
  591. package/dist/index.d.cts.map +0 -1
  592. package/dist/index.d.ts.map +0 -1
@@ -80,7 +80,7 @@ export interface RangeCalendarRootProps extends PrimitiveProps {
80
80
  defaultPlaceholder?: DateValue
81
81
  /** The default value for the calendar */
82
82
  defaultValue?: DateRange
83
- /** The controlled checked state of the calendar. Can be bound as `v-model`. */
83
+ /** The controlled selected date range of the calendar. Can be bound as `v-model`. */
84
84
  modelValue?: DateRange | null
85
85
  /** The placeholder date, which is used to determine what month to display when no date is selected. This updates as the user navigates the calendar and can be used to programmatically control the calendar view */
86
86
  placeholder?: DateValue
@@ -379,7 +379,7 @@ watch([startValue, endValue], ([_startValue, _endValue]) => {
379
379
  })
380
380
 
381
381
  const kbd = useKbd()
382
- useEventListener('keydown', (ev) => {
382
+ useEventListener(parentElement, 'keydown', (ev) => {
383
383
  if (ev.key === kbd.ESCAPE && isEditing.value) {
384
384
  // Abort start and end selection
385
385
  startValue.value = validModelValue.value.start?.copy()
@@ -124,15 +124,12 @@ export function useRangeCalendarState(props: UseRangeCalendarProps) {
124
124
  if (props.maximumDays?.value && !props.end.value) {
125
125
  const maximumDays = props.maximumDays.value
126
126
  const anchor = props.start.value
127
+ const focused = props.focusedValue.value
127
128
 
128
- if (isStartBeforeFocused) {
129
- const maxEnd = anchor.add({ days: maximumDays - 1 })
130
- return { start: anchor, end: maxEnd }
131
- }
132
- else {
133
- const minStart = anchor.subtract({ days: maximumDays - 1 })
134
- return { start: minStart, end: anchor }
135
- }
129
+ if (!isBefore(focused, anchor))
130
+ return { start: anchor, end: anchor.add({ days: maximumDays - 1 }) }
131
+
132
+ return { start: anchor.subtract({ days: maximumDays - 1 }), end: anchor }
136
133
  }
137
134
 
138
135
  const isValid = areAllDaysBetweenValid(start, end, props.allowNonContiguousRanges.value ? () => false : props.isDateUnavailable, rangeIsDateDisabled, props.isDateHighlightable)
@@ -79,6 +79,7 @@ import { Primitive } from '@/Primitive'
79
79
  import { assert } from './utils/assert'
80
80
  import { calculateDeltaPercentage, calculateUnsafeDefaultLayout } from './utils/calculate'
81
81
  import { callPanelCallbacks } from './utils/callPanelCallbacks'
82
+ import { fuzzyCompareNumbers } from './utils/compare'
82
83
  import debounce from './utils/debounce'
83
84
  import { getResizeHandleElement } from './utils/dom'
84
85
  import { getResizeEventCursorPosition, isKeyDown, isMouseEvent, isTouchEvent } from './utils/events'
@@ -92,6 +93,7 @@ import {
92
93
  reportConstraintsViolation,
93
94
  } from './utils/registry'
94
95
  import { computePanelFlexBoxStyle } from './utils/style'
96
+ import { convertPanelConstraintsToPercent, hasPixelSizedPanel, recalculateLayoutForPixelPanels } from './utils/units'
95
97
  import { validatePanelGroupLayout } from './utils/validation'
96
98
 
97
99
  const props = withDefaults(defineProps<SplitterGroupProps>(), {
@@ -118,6 +120,7 @@ const dir = useDirection()
118
120
  const { forwardRef, currentElement: panelGroupElementRef } = useForwardExpose()
119
121
 
120
122
  const dragState = ref<DragState | null>(null)
123
+ const groupSizeInPixels = ref<number | null>(null)
121
124
  const layout = ref<number[]>([])
122
125
  const panelIdToLastNotifiedSizeMapRef = ref<Record<string, number>>({})
123
126
  const panelSizeBeforeCollapseRef = ref<Map<string, number>>(new Map())
@@ -149,6 +152,45 @@ const eagerValuesRef = ref<{
149
152
  panelDataArrayChanged: false,
150
153
  })
151
154
 
155
+ function getGroupSizeInPixels(): number | null {
156
+ if (groupSizeInPixels.value != null)
157
+ return groupSizeInPixels.value
158
+
159
+ const element = panelGroupElementRef.value
160
+ if (element && element instanceof HTMLElement) {
161
+ const rect = element.getBoundingClientRect()
162
+ const size = direction.value === 'horizontal' ? rect.width : rect.height
163
+
164
+ if (!Number.isNaN(size)) {
165
+ groupSizeInPixels.value = size
166
+ return size
167
+ }
168
+ }
169
+
170
+ return null
171
+ }
172
+
173
+ function getPanelConstraintsInPercent(groupSizeOverride?: number | null) {
174
+ const groupSize = groupSizeOverride ?? getGroupSizeInPixels()
175
+
176
+ return convertPanelConstraintsToPercent({
177
+ panelDataArray: eagerValuesRef.value.panelDataArray,
178
+ groupSizeInPixels: groupSize,
179
+ })
180
+ }
181
+
182
+ function getPanelDataWithPercentConstraints(groupSizeOverride?: number | null) {
183
+ const percentConstraints = getPanelConstraintsInPercent(groupSizeOverride)
184
+
185
+ if (!percentConstraints)
186
+ return null
187
+
188
+ return eagerValuesRef.value.panelDataArray.map((panelData, index) => ({
189
+ ...panelData,
190
+ constraints: percentConstraints[index],
191
+ }))
192
+ }
193
+
152
194
  const setLayout = (val: number[]) => layout.value = val
153
195
 
154
196
  useWindowSplitterPanelGroupBehavior({
@@ -158,6 +200,33 @@ useWindowSplitterPanelGroupBehavior({
158
200
  panelDataArray: eagerValuesRef.value.panelDataArray,
159
201
  setLayout,
160
202
  panelGroupElement: panelGroupElementRef,
203
+ getPanelDataWithPercentConstraints,
204
+ })
205
+
206
+ watchEffect((onCleanup) => {
207
+ const element = panelGroupElementRef.value
208
+ if (!element)
209
+ return
210
+
211
+ if (typeof ResizeObserver !== 'function')
212
+ return
213
+
214
+ const resizeObserver = new ResizeObserver((entries) => {
215
+ const entry = entries[0]
216
+ if (!entry)
217
+ return
218
+
219
+ const { height, width } = entry.contentRect
220
+ const nextSize = direction.value === 'horizontal' ? width : height
221
+
222
+ if (!Number.isNaN(nextSize))
223
+ groupSizeInPixels.value = nextSize
224
+ })
225
+
226
+ if (element instanceof HTMLElement)
227
+ resizeObserver.observe(element)
228
+
229
+ onCleanup(() => resizeObserver.disconnect())
161
230
  })
162
231
 
163
232
  watchEffect(() => {
@@ -254,18 +323,24 @@ watch(() => eagerValuesRef.value.panelDataArrayChanged, () => {
254
323
  }
255
324
 
256
325
  if (unsafeLayout === null) {
326
+ const panelDataArrayWithPercentConstraints = getPanelDataWithPercentConstraints()
327
+ if (!panelDataArrayWithPercentConstraints)
328
+ return
329
+
257
330
  unsafeLayout = calculateUnsafeDefaultLayout({
258
- panelDataArray,
331
+ panelDataArray: panelDataArrayWithPercentConstraints,
259
332
  })
260
333
  }
261
334
 
335
+ const panelConstraints = getPanelConstraintsInPercent()
336
+ if (!panelConstraints)
337
+ return
338
+
262
339
  // Validate even saved layouts in case something has changed since last render
263
340
  // e.g. for pixel groups, this could be the size of the window
264
341
  const nextLayout = validatePanelGroupLayout({
265
342
  layout: unsafeLayout,
266
- panelConstraints: panelDataArray.map(
267
- panelData => panelData.constraints,
268
- ),
343
+ panelConstraints,
269
344
  })
270
345
 
271
346
  if (!areEqual(prevLayout, nextLayout)) {
@@ -283,6 +358,49 @@ watch(() => eagerValuesRef.value.panelDataArrayChanged, () => {
283
358
  }
284
359
  })
285
360
 
361
+ watch(groupSizeInPixels, (nextSize, prevSize) => {
362
+ if (prevSize == null || nextSize == null)
363
+ return
364
+
365
+ const { layout: prevLayout, panelDataArray } = eagerValuesRef.value
366
+ if (prevLayout.length === 0)
367
+ return
368
+ if (!hasPixelSizedPanel(panelDataArray))
369
+ return
370
+
371
+ const recalculatedLayout = recalculateLayoutForPixelPanels({
372
+ layout: prevLayout,
373
+ panelDataArray,
374
+ prevGroupSize: prevSize,
375
+ nextGroupSize: nextSize,
376
+ })
377
+
378
+ if (!recalculatedLayout)
379
+ return
380
+
381
+ const panelConstraints = getPanelConstraintsInPercent(nextSize)
382
+ if (!panelConstraints)
383
+ return
384
+
385
+ const nextLayout = validatePanelGroupLayout({
386
+ layout: recalculatedLayout,
387
+ panelConstraints,
388
+ })
389
+
390
+ if (!compareLayouts(prevLayout, nextLayout)) {
391
+ setLayout(nextLayout)
392
+
393
+ eagerValuesRef.value.layout = nextLayout
394
+ emits('layout', nextLayout)
395
+
396
+ callPanelCallbacks(
397
+ panelDataArray,
398
+ nextLayout,
399
+ panelIdToLastNotifiedSizeMapRef.value,
400
+ )
401
+ }
402
+ })
403
+
286
404
  function registerResizeHandle(dragHandleId: string) {
287
405
  return function resizeHandler(event: ResizeEvent) {
288
406
  event.preventDefault()
@@ -317,7 +435,9 @@ function registerResizeHandle(dragHandleId: string) {
317
435
  if (dir.value === 'rtl' && isHorizontal)
318
436
  delta = -delta
319
437
 
320
- const panelConstraints = panelDataArray.map(panelData => panelData.constraints)
438
+ const panelConstraints = getPanelConstraintsInPercent()
439
+ if (!panelConstraints)
440
+ return
321
441
 
322
442
  const nextLayout = adjustLayoutByDelta({
323
443
  delta,
@@ -378,20 +498,35 @@ function registerResizeHandle(dragHandleId: string) {
378
498
  function resizePanel(panelData: PanelData, unsafePanelSize: number) {
379
499
  const { layout: prevLayout, panelDataArray } = eagerValuesRef.value
380
500
 
381
- const panelConstraintsArray = panelDataArray.map(panelData => panelData.constraints)
501
+ const panelConstraintsArray = getPanelConstraintsInPercent()
502
+ if (!panelConstraintsArray)
503
+ return
504
+
505
+ const panelIndex = findPanelDataIndex(panelDataArray, panelData)
506
+ const panelUnit = panelData.constraints.sizeUnit ?? '%'
507
+
508
+ // Convert px to percent if needed for internal calculation
509
+ let sizeInPercent = unsafePanelSize
510
+ if (panelUnit === 'px') {
511
+ const groupSize = getGroupSizeInPixels()
512
+ if (groupSize != null) {
513
+ sizeInPercent = (unsafePanelSize / groupSize) * 100
514
+ }
515
+ }
382
516
 
383
517
  const { panelSize, pivotIndices } = panelDataHelper(
384
518
  panelDataArray,
385
519
  panelData,
386
520
  prevLayout,
521
+ panelConstraintsArray,
387
522
  )
388
523
 
389
524
  assert(panelSize != null)
390
525
 
391
- const isLastPanel = findPanelDataIndex(panelDataArray, panelData) === panelDataArray.length - 1
526
+ const isLastPanel = panelIndex === panelDataArray.length - 1
392
527
  const delta = isLastPanel
393
- ? panelSize - unsafePanelSize
394
- : unsafePanelSize - panelSize
528
+ ? panelSize - sizeInPercent
529
+ : sizeInPercent - panelSize
395
530
 
396
531
  const nextLayout = adjustLayoutByDelta({
397
532
  delta,
@@ -420,39 +555,29 @@ function reevaluatePanelConstraints(panelData: PanelData, prevConstraints: Panel
420
555
  const index = findPanelDataIndex(panelDataArray, panelData)
421
556
  panelDataArray[index] = panelData
422
557
  eagerValuesRef.value.panelDataArrayChanged = true
423
- const {
424
- collapsedSize: prevCollapsedSize = 0,
425
- collapsible: prevCollapsible,
426
- } = prevConstraints
427
558
 
428
- const {
429
- collapsedSize: nextCollapsedSize = 0,
430
- collapsible: nextCollapsible,
431
- maxSize: nextMaxSize = 100,
432
- minSize: nextMinSize = 0,
433
- } = panelData.constraints
559
+ const panelConstraintsArray = getPanelConstraintsInPercent()
560
+ if (!panelConstraintsArray)
561
+ return
434
562
 
563
+ const nextConstraints = panelConstraintsArray[index]
435
564
  const { panelSize: prevPanelSize } = panelDataHelper(
436
565
  panelDataArray,
437
566
  panelData,
438
567
  layout,
568
+ panelConstraintsArray,
439
569
  )
440
- if (prevPanelSize === null) {
441
- // It's possible that the panels in this group have changed since the last render
570
+
571
+ if (prevPanelSize === null)
442
572
  return
443
- }
444
573
 
445
- if (
446
- prevCollapsible
447
- && nextCollapsible
448
- && prevPanelSize === prevCollapsedSize
449
- ) {
450
- if (prevCollapsedSize !== nextCollapsedSize) {
574
+ const nextCollapsedSize = nextConstraints?.collapsedSize ?? 0
575
+ const nextMaxSize = nextConstraints?.maxSize ?? 100
576
+ const nextMinSize = nextConstraints?.minSize ?? 0
577
+
578
+ if (nextConstraints?.collapsible && isPanelCollapsed(panelData)) {
579
+ if (prevPanelSize !== nextCollapsedSize)
451
580
  resizePanel(panelData, nextCollapsedSize)
452
- }
453
- else {
454
- // Stay collapsed
455
- }
456
581
  }
457
582
  else if (prevPanelSize < nextMinSize) {
458
583
  resizePanel(panelData, nextMinSize)
@@ -511,15 +636,15 @@ function collapsePanel(panelData: PanelData) {
511
636
  const { layout: prevLayout, panelDataArray } = eagerValuesRef.value
512
637
 
513
638
  if (panelData.constraints.collapsible) {
514
- const panelConstraintsArray = panelDataArray.map(
515
- panelData => panelData.constraints,
516
- )
639
+ const panelConstraintsArray = getPanelConstraintsInPercent()
640
+ if (!panelConstraintsArray)
641
+ return
517
642
 
518
643
  const {
519
644
  collapsedSize = 0,
520
645
  panelSize,
521
646
  pivotIndices,
522
- } = panelDataHelper(panelDataArray, panelData, prevLayout)
647
+ } = panelDataHelper(panelDataArray, panelData, prevLayout, panelConstraintsArray)
523
648
 
524
649
  assert(
525
650
  panelSize != null,
@@ -529,7 +654,13 @@ function collapsePanel(panelData: PanelData) {
529
654
  if (panelSize !== collapsedSize) {
530
655
  // Store size before collapse;
531
656
  // This is the size that gets restored if the expand() API is used.
532
- panelSizeBeforeCollapseRef.value.set(panelData.id, panelSize)
657
+ const sizeUnit = panelData.constraints.sizeUnit ?? '%'
658
+ const groupSize = groupSizeInPixels.value ?? getGroupSizeInPixels()
659
+ const sizeBeforeCollapse = sizeUnit === 'px' && groupSize
660
+ ? (panelSize / 100) * groupSize
661
+ : panelSize
662
+
663
+ panelSizeBeforeCollapseRef.value.set(panelData.id, sizeBeforeCollapse)
533
664
 
534
665
  const isLastPanel
535
666
  = findPanelDataIndex(panelDataArray, panelData)
@@ -567,26 +698,35 @@ function expandPanel(panelData: PanelData) {
567
698
  const { layout: prevLayout, panelDataArray } = eagerValuesRef.value
568
699
 
569
700
  if (panelData.constraints.collapsible) {
570
- const panelConstraintsArray = panelDataArray.map(
571
- panelData => panelData.constraints,
572
- )
701
+ const panelConstraintsArray = getPanelConstraintsInPercent()
702
+ if (!panelConstraintsArray)
703
+ return
573
704
 
574
705
  const {
575
706
  collapsedSize = 0,
576
- panelSize,
707
+ panelSize = 0,
577
708
  minSize = 0,
578
709
  pivotIndices,
579
- } = panelDataHelper(panelDataArray, panelData, prevLayout)
710
+ } = panelDataHelper(panelDataArray, panelData, prevLayout, panelConstraintsArray)
580
711
 
581
- if (panelSize === collapsedSize) {
712
+ if (fuzzyCompareNumbers(panelSize, collapsedSize) <= 0) {
582
713
  // Restore this panel to the size it was before it was collapsed, if possible.
583
714
  const prevPanelSize = panelSizeBeforeCollapseRef.value.get(
584
715
  panelData.id,
585
716
  )
717
+ const sizeUnit = panelData.constraints.sizeUnit ?? '%'
718
+ const groupSize = groupSizeInPixels.value ?? getGroupSizeInPixels()
719
+
720
+ const restoredSize
721
+ = sizeUnit === 'px' && groupSize
722
+ ? prevPanelSize != null
723
+ ? (prevPanelSize / groupSize) * 100
724
+ : null
725
+ : prevPanelSize
586
726
 
587
727
  const baseSize
588
- = prevPanelSize != null && prevPanelSize >= minSize
589
- ? prevPanelSize
728
+ = restoredSize != null && restoredSize >= minSize
729
+ ? restoredSize
590
730
  : minSize
591
731
 
592
732
  const isLastPanel
@@ -629,24 +769,42 @@ function getPanelSize(panelData: PanelData) {
629
769
  `Panel size not found for panel "${panelData.id}"`,
630
770
  )
631
771
 
772
+ // If the panel uses px units, convert from percent back to px
773
+ const panelUnit = panelData.constraints.sizeUnit ?? '%'
774
+ if (panelUnit === 'px') {
775
+ const groupSize = getGroupSizeInPixels()
776
+ if (groupSize != null) {
777
+ return (panelSize / 100) * groupSize
778
+ }
779
+ }
780
+
632
781
  return panelSize
633
782
  }
634
783
 
635
784
  function isPanelCollapsed(panelData: PanelData) {
636
785
  const { layout, panelDataArray } = eagerValuesRef.value
637
786
 
787
+ const panelConstraintsArray = getPanelConstraintsInPercent()
788
+
638
789
  const {
639
790
  collapsedSize = 0,
640
791
  collapsible,
641
792
  panelSize,
642
- } = panelDataHelper(panelDataArray, panelData, layout)
793
+ } = panelDataHelper(
794
+ panelDataArray,
795
+ panelData,
796
+ layout,
797
+ panelConstraintsArray ?? undefined,
798
+ )
643
799
 
644
800
  if (!collapsible)
645
801
  return false
646
802
 
647
803
  // panelSize is undefined during ssr due to vue ssr reactivity limitation.
648
804
  if (panelSize === undefined) {
649
- return panelData.constraints.defaultSize === panelData.constraints.collapsedSize
805
+ const panelIndex = findPanelDataIndex(panelDataArray, panelData)
806
+ const constraints = panelConstraintsArray?.[panelIndex] ?? panelData.constraints
807
+ return constraints.defaultSize === constraints.collapsedSize
650
808
  }
651
809
  else {
652
810
  return panelSize === collapsedSize
@@ -656,11 +814,18 @@ function isPanelCollapsed(panelData: PanelData) {
656
814
  function isPanelExpanded(panelData: PanelData) {
657
815
  const { layout, panelDataArray } = eagerValuesRef.value
658
816
 
817
+ const panelConstraintsArray = getPanelConstraintsInPercent()
818
+
659
819
  const {
660
820
  collapsedSize = 0,
661
821
  collapsible,
662
822
  panelSize,
663
- } = panelDataHelper(panelDataArray, panelData, layout)
823
+ } = panelDataHelper(
824
+ panelDataArray,
825
+ panelData,
826
+ layout,
827
+ panelConstraintsArray ?? undefined,
828
+ )
664
829
 
665
830
  assert(
666
831
  panelSize != null,
@@ -702,6 +867,7 @@ function panelDataHelper(
702
867
  panelDataArray: PanelData[],
703
868
  panelData: PanelData,
704
869
  layout: number[],
870
+ panelConstraints?: PanelConstraints[] | null,
705
871
  ) {
706
872
  const panelIndex = findPanelDataIndex(panelDataArray, panelData)
707
873
 
@@ -710,10 +876,13 @@ function panelDataHelper(
710
876
  ? [panelIndex - 1, panelIndex]
711
877
  : [panelIndex, panelIndex + 1]
712
878
 
879
+ const constraints = panelConstraints ?? getPanelConstraintsInPercent()
880
+ const panelConstraintsFromGroup = constraints?.[panelIndex]
881
+
713
882
  const panelSize = layout[panelIndex]
714
883
 
715
884
  return {
716
- ...panelData.constraints,
885
+ ...(panelConstraintsFromGroup ?? panelData.constraints),
717
886
  panelSize,
718
887
  pivotIndices,
719
888
  }
@@ -4,20 +4,22 @@ import { useId } from '@/shared'
4
4
  import { PRECISION } from './utils/constants'
5
5
 
6
6
  export interface SplitterPanelProps extends PrimitiveProps {
7
- /** The size of panel when it is collapsed. */
7
+ /** The size of panel when it is collapsed; interpreted using `sizeUnit`. */
8
8
  collapsedSize?: number
9
9
  /** Should panel collapse when resized beyond its `minSize`. When `true`, it will be collapsed to `collapsedSize`. */
10
10
  collapsible?: boolean
11
- /** Initial size of panel (numeric value between 1-100) */
11
+ /** Initial size of panel, interpreted using `sizeUnit` (percent by default). */
12
12
  defaultSize?: number
13
13
  /** Panel id (unique within group); falls back to `useId` when not provided */
14
14
  id?: string
15
- /** The maximum allowable size of panel (numeric value between 1-100); defaults to `100` */
15
+ /** The maximum allowable size of panel, interpreted using `sizeUnit`; defaults to `100` (percent). */
16
16
  maxSize?: number
17
- /** The minimum allowable size of panel (numeric value between 1-100); defaults to `10` */
17
+ /** The minimum allowable size of panel, interpreted using `sizeUnit`; defaults to `10` (percent). */
18
18
  minSize?: number
19
19
  /** The order of panel within group; required for groups with conditionally rendered panels */
20
20
  order?: number
21
+ /** Unit used for sizing values; `%` by default, or `px` for fixed sizing. */
22
+ sizeUnit?: '%' | 'px'
21
23
  }
22
24
 
23
25
  export type SplitterPanelEmits = {
@@ -49,6 +51,7 @@ export type PanelConstraints = {
49
51
  /** Panel id (unique within group); falls back to useId when not provided */
50
52
  maxSize?: number | undefined
51
53
  minSize?: number | undefined
54
+ sizeUnit?: '%' | 'px' | undefined
52
55
  }
53
56
 
54
57
  export type PanelData = {
@@ -107,6 +110,7 @@ const panelDataRef = computed(() => ({
107
110
  /** Panel id (unique within group); falls back to useId when not provided */
108
111
  maxSize: props.maxSize,
109
112
  minSize: props.minSize,
113
+ sizeUnit: props.sizeUnit ?? '%',
110
114
  },
111
115
  id: panelId,
112
116
  idIsFromProps: props.id !== undefined,
@@ -121,6 +125,7 @@ watch(() => panelDataRef.value.constraints, (constraints, prevConstraints) => {
121
125
  || prevConstraints.collapsible !== constraints.collapsible
122
126
  || prevConstraints.maxSize !== constraints.maxSize
123
127
  || prevConstraints.minSize !== constraints.minSize
128
+ || prevConstraints.sizeUnit !== constraints.sizeUnit
124
129
  ) {
125
130
  reevaluatePanelConstraints(panelDataRef.value, prevConstraints)
126
131
  }
@@ -157,11 +162,11 @@ defineExpose({
157
162
  collapse,
158
163
  /** If panel is currently collapsed, expand it to its most recent size. */
159
164
  expand,
160
- /** Gets the current size of the panel as a percentage (1 - 100). */
165
+ /** Gets the current size of the panel (in the panel's sizeUnit: percentage for '%', pixels for 'px'). */
161
166
  getSize() {
162
167
  return getPanelSize(panelDataRef.value)
163
168
  },
164
- /** Resize panel to the specified percentage (1 - 100). */
169
+ /** Resize panel to the specified size (in the panel's sizeUnit: percentage for '%', pixels for 'px'). */
165
170
  resize,
166
171
  /** Returns `true` if the panel is currently collapsed */
167
172
  isCollapsed,
@@ -17,6 +17,7 @@ export function useWindowSplitterPanelGroupBehavior({
17
17
  panelDataArray,
18
18
  panelGroupElement,
19
19
  setLayout,
20
+ getPanelDataWithPercentConstraints,
20
21
  }: {
21
22
  eagerValuesRef: Ref<{
22
23
  panelDataArray: PanelData[]
@@ -26,21 +27,26 @@ export function useWindowSplitterPanelGroupBehavior({
26
27
  panelDataArray: PanelData[]
27
28
  panelGroupElement: Ref<ParentNode | null>
28
29
  setLayout: (sizes: number[]) => void
30
+ getPanelDataWithPercentConstraints: (groupSizeOverride?: number | null) => PanelData[] | null
29
31
  }): void {
30
32
  watchEffect((onCleanup) => {
31
33
  const _panelGroupElement = panelGroupElement.value
32
34
  if (!_panelGroupElement)
33
35
  return
34
36
 
37
+ const panelDataArrayWithPercentConstraints = getPanelDataWithPercentConstraints()
38
+ if (!panelDataArrayWithPercentConstraints)
39
+ return
40
+
35
41
  const resizeHandleElements = getResizeHandleElementsForGroup(
36
42
  groupId,
37
43
  _panelGroupElement,
38
44
  )
39
45
 
40
- for (let index = 0; index < panelDataArray.length - 1; index++) {
46
+ for (let index = 0; index < panelDataArrayWithPercentConstraints.length - 1; index++) {
41
47
  const { valueMax, valueMin, valueNow } = calculateAriaValues({
42
48
  layout: layout.value,
43
- panelsArray: panelDataArray,
49
+ panelsArray: panelDataArrayWithPercentConstraints,
44
50
  pivotIndices: [index, index + 1],
45
51
  })
46
52
 
@@ -50,7 +56,7 @@ export function useWindowSplitterPanelGroupBehavior({
50
56
  console.warn(`WARNING: Missing resize handle for PanelGroup "${groupId}"`)
51
57
  }
52
58
  else {
53
- const panelData = panelDataArray[index]
59
+ const panelData = panelDataArrayWithPercentConstraints[index]
54
60
  assert(panelData)
55
61
 
56
62
  resizeHandleElement.setAttribute('aria-controls', panelData.id)
@@ -87,6 +93,10 @@ export function useWindowSplitterPanelGroupBehavior({
87
93
  const eagerValues = eagerValuesRef.value
88
94
  assert(eagerValues)
89
95
 
96
+ const panelDataArrayWithPercentConstraints = getPanelDataWithPercentConstraints()
97
+ if (!panelDataArrayWithPercentConstraints)
98
+ return
99
+
90
100
  const { panelDataArray } = eagerValues
91
101
  const groupElement = getPanelGroupElement(groupId, _panelGroupElement)
92
102
  assert(groupElement != null, `No group found for id "${groupId}"`)
@@ -115,11 +125,11 @@ export function useWindowSplitterPanelGroupBehavior({
115
125
  case 'Enter': {
116
126
  event.preventDefault()
117
127
 
118
- const index = panelDataArray.findIndex(
128
+ const index = panelDataArrayWithPercentConstraints.findIndex(
119
129
  panelData => panelData.id === idBefore,
120
130
  )
121
131
  if (index >= 0) {
122
- const panelData = panelDataArray[index]
132
+ const panelData = panelDataArrayWithPercentConstraints[index]
123
133
  assert(panelData)
124
134
 
125
135
  const size = layout.value[index]
@@ -136,7 +146,7 @@ export function useWindowSplitterPanelGroupBehavior({
136
146
  ? minSize - collapsedSize
137
147
  : collapsedSize - size,
138
148
  layout: layout.value,
139
- panelConstraints: panelDataArray.map(
149
+ panelConstraints: panelDataArrayWithPercentConstraints.map(
140
150
  panelData => panelData.constraints,
141
151
  ),
142
152
  pivotIndices: determinePivotIndices(
@@ -33,6 +33,9 @@ export type PanelConfigurationState = {
33
33
  [panelId: string]: number
34
34
  }
35
35
  layout: number[]
36
+ sizeUnits?: {
37
+ [panelIndex: number]: 'px' | '%'
38
+ }
36
39
  }
37
40
 
38
41
  export type SerializedPanelGroupState = {
@@ -102,9 +105,20 @@ export function savePanelGroupState(
102
105
  const panelGroupKey = getPanelGroupKey(autoSaveId)
103
106
  const panelKey = getPanelKey(panels)
104
107
  const state = loadSerializedPanelGroupState(autoSaveId, storage) ?? {}
108
+
109
+ // Store the size units for each panel so we can restore them correctly
110
+ const sizeUnits: { [panelIndex: number]: 'px' | '%' } = {}
111
+ panels.forEach((panel, index) => {
112
+ const unit = panel.constraints.sizeUnit ?? '%'
113
+ if (unit === 'px') {
114
+ sizeUnits[index] = 'px'
115
+ }
116
+ })
117
+
105
118
  state[panelKey] = {
106
119
  expandToSizes: Object.fromEntries(panelSizesBeforeCollapse.entries()),
107
120
  layout: sizes,
121
+ ...(Object.keys(sizeUnits).length > 0 && { sizeUnits }),
108
122
  }
109
123
 
110
124
  try {