@mezzanine-ui/react 0.16.0 → 1.0.0-beta.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 (547) hide show
  1. package/Accordion/AccordionControlContext.js +1 -0
  2. package/Accordion/AccordionDetails.js +1 -0
  3. package/Accordion/AccordionSummary.js +10 -10
  4. package/Accordion/index.d.ts +6 -3
  5. package/Alert/index.d.ts +3 -2
  6. package/AlertBanner/AlertBanner.d.ts +93 -0
  7. package/AlertBanner/AlertBanner.js +154 -0
  8. package/AlertBanner/index.d.ts +2 -0
  9. package/AlertBanner/index.js +1 -0
  10. package/Anchor/Anchor.js +1 -1
  11. package/Anchor/index.d.ts +2 -1
  12. package/AppBar/index.d.ts +8 -4
  13. package/{Overlay/Overlay.d.ts → Backdrop/Backdrop.d.ts} +12 -16
  14. package/Backdrop/Backdrop.js +40 -0
  15. package/Backdrop/index.d.ts +2 -0
  16. package/Backdrop/index.js +1 -0
  17. package/Badge/Badge.d.ts +20 -14
  18. package/Badge/Badge.js +14 -16
  19. package/Badge/BadgeContainer.d.ts +1 -1
  20. package/Badge/BadgeContainer.js +1 -1
  21. package/Badge/index.d.ts +3 -2
  22. package/Badge/typings.d.ts +48 -0
  23. package/Breadcrumb/Breadcrumb.d.ts +6 -0
  24. package/Breadcrumb/Breadcrumb.js +53 -0
  25. package/Breadcrumb/BreadcrumbItem.d.ts +4 -0
  26. package/Breadcrumb/BreadcrumbItem.js +45 -0
  27. package/Breadcrumb/index.d.ts +2 -0
  28. package/Breadcrumb/index.js +1 -0
  29. package/Breadcrumb/typings.d.ts +75 -0
  30. package/Button/Button.js +24 -19
  31. package/Button/ButtonGroup.d.ts +6 -28
  32. package/Button/ButtonGroup.js +7 -16
  33. package/Button/index.d.ts +4 -10
  34. package/Button/index.js +2 -3
  35. package/Button/typings.d.ts +11 -26
  36. package/Calendar/Calendar.d.ts +31 -2
  37. package/Calendar/Calendar.js +74 -19
  38. package/Calendar/CalendarCell.d.ts +4 -0
  39. package/Calendar/CalendarCell.js +3 -3
  40. package/Calendar/CalendarConfigProviderDayjs.d.ts +21 -0
  41. package/Calendar/CalendarConfigProviderDayjs.js +15 -0
  42. package/Calendar/CalendarConfigProviderLuxon.d.ts +21 -0
  43. package/Calendar/CalendarConfigProviderLuxon.js +15 -0
  44. package/Calendar/CalendarConfigProviderMoment.d.ts +21 -0
  45. package/Calendar/CalendarConfigProviderMoment.js +15 -0
  46. package/Calendar/CalendarContext.d.ts +14 -7
  47. package/Calendar/CalendarContext.js +8 -13
  48. package/Calendar/CalendarControls.d.ts +16 -0
  49. package/Calendar/CalendarControls.js +3 -7
  50. package/Calendar/CalendarDayOfWeek.js +4 -3
  51. package/Calendar/CalendarDays.d.ts +9 -1
  52. package/Calendar/CalendarDays.js +63 -38
  53. package/Calendar/CalendarFooterActions.d.ts +13 -0
  54. package/Calendar/CalendarFooterActions.js +14 -0
  55. package/Calendar/CalendarFooterControl.d.ts +16 -0
  56. package/Calendar/CalendarFooterControl.js +14 -0
  57. package/Calendar/CalendarHalfYears.d.ts +39 -0
  58. package/Calendar/CalendarHalfYears.js +62 -0
  59. package/Calendar/CalendarMonths.js +16 -4
  60. package/Calendar/CalendarQuarters.d.ts +37 -0
  61. package/Calendar/CalendarQuarters.js +64 -0
  62. package/Calendar/CalendarQuickSelect.d.ts +21 -0
  63. package/Calendar/CalendarQuickSelect.js +15 -0
  64. package/Calendar/CalendarWeeks.d.ts +1 -1
  65. package/Calendar/CalendarWeeks.js +89 -44
  66. package/Calendar/CalendarYears.js +13 -3
  67. package/Calendar/RangeCalendar.d.ts +59 -0
  68. package/Calendar/RangeCalendar.js +232 -0
  69. package/Calendar/index.d.ts +33 -10
  70. package/Calendar/index.js +7 -0
  71. package/Calendar/useCalendarControlModifiers.d.ts +4 -4
  72. package/Calendar/useCalendarControlModifiers.js +40 -8
  73. package/Calendar/useCalendarControls.d.ts +2 -0
  74. package/Calendar/useCalendarControls.js +19 -2
  75. package/Calendar/useCalendarModeStack.js +1 -0
  76. package/Calendar/useRangeCalendarControls.d.ts +18 -0
  77. package/Calendar/useRangeCalendarControls.js +115 -0
  78. package/Card/CardActions.js +1 -1
  79. package/Card/index.d.ts +4 -2
  80. package/Checkbox/CheckAll.d.ts +16 -6
  81. package/Checkbox/CheckAll.js +40 -26
  82. package/Checkbox/Checkbox.d.ts +100 -22
  83. package/Checkbox/Checkbox.js +73 -16
  84. package/Checkbox/CheckboxGroup.d.ts +100 -18
  85. package/Checkbox/CheckboxGroup.js +169 -24
  86. package/Checkbox/CheckboxGroupContext.d.ts +0 -2
  87. package/Checkbox/CheckboxGroupContext.js +1 -0
  88. package/Checkbox/index.d.ts +16 -4
  89. package/Checkbox/index.js +6 -2
  90. package/Checkbox/typings.d.ts +37 -0
  91. package/ClearActions/ClearActions.d.ts +41 -0
  92. package/ClearActions/ClearActions.js +23 -0
  93. package/ClearActions/index.d.ts +3 -0
  94. package/ClearActions/index.js +5 -0
  95. package/ConfirmActions/ConfirmActions.d.ts +2 -1
  96. package/ConfirmActions/index.d.ts +2 -1
  97. package/DatePicker/DatePicker.d.ts +12 -1
  98. package/DatePicker/DatePicker.js +41 -9
  99. package/DatePicker/DatePickerCalendar.d.ts +2 -5
  100. package/DatePicker/DatePickerCalendar.js +37 -37
  101. package/DatePicker/index.d.ts +4 -2
  102. package/DateRangePicker/DateRangePicker.d.ts +18 -2
  103. package/DateRangePicker/DateRangePicker.js +143 -100
  104. package/DateRangePicker/DateRangePickerCalendar.d.ts +13 -9
  105. package/DateRangePicker/DateRangePickerCalendar.js +7 -94
  106. package/DateRangePicker/index.d.ts +6 -3
  107. package/DateRangePicker/useDateRangeCalendarControls.js +11 -6
  108. package/DateRangePicker/useDateRangePickerValue.d.ts +38 -15
  109. package/DateRangePicker/useDateRangePickerValue.js +142 -63
  110. package/DateTimePicker/DateTimePicker.d.ts +31 -10
  111. package/DateTimePicker/DateTimePicker.js +179 -94
  112. package/DateTimePicker/index.d.ts +2 -2
  113. package/DateTimePicker/index.js +0 -1
  114. package/Drawer/Drawer.d.ts +47 -6
  115. package/Drawer/Drawer.js +36 -11
  116. package/Drawer/index.d.ts +2 -1
  117. package/Dropdown/Dropdown.js +12 -22
  118. package/Dropdown/index.d.ts +2 -1
  119. package/Empty/Empty.d.ts +1 -16
  120. package/Empty/Empty.js +59 -7
  121. package/Empty/icons/EmptyMainInitialDataIcon.d.ts +4 -0
  122. package/Empty/icons/EmptyMainInitialDataIcon.js +9 -0
  123. package/Empty/icons/EmptyMainResultIcon.d.ts +4 -0
  124. package/Empty/icons/EmptyMainResultIcon.js +9 -0
  125. package/Empty/icons/EmptyMainSystemIcon.d.ts +4 -0
  126. package/Empty/icons/EmptyMainSystemIcon.js +9 -0
  127. package/Empty/index.d.ts +2 -1
  128. package/Empty/typings.d.ts +61 -0
  129. package/Form/FormControlContext.js +1 -0
  130. package/Form/FormHintText.d.ts +18 -0
  131. package/Form/FormHintText.js +17 -0
  132. package/Form/FormLabel.js +1 -0
  133. package/Form/index.d.ts +9 -5
  134. package/Form/index.js +1 -1
  135. package/Form/useAutoCompleteValueControl.js +2 -0
  136. package/Form/useCheckboxControlValue.js +0 -1
  137. package/Form/useSelectValueControl.js +2 -0
  138. package/InlineMessage/InlineMessage.d.ts +33 -0
  139. package/InlineMessage/InlineMessage.js +42 -0
  140. package/InlineMessage/InlineMessageGroup.d.ts +24 -0
  141. package/InlineMessage/InlineMessageGroup.js +21 -0
  142. package/InlineMessage/index.d.ts +4 -0
  143. package/InlineMessage/index.js +2 -0
  144. package/Input/ActionButton/ActionButton.d.ts +26 -0
  145. package/Input/ActionButton/ActionButton.js +14 -0
  146. package/Input/ActionButton/index.d.ts +2 -0
  147. package/Input/ActionButton/index.js +1 -0
  148. package/Input/Input.d.ts +147 -42
  149. package/Input/Input.js +195 -27
  150. package/Input/PasswordStrengthIndicator/PasswordStrengthIndicator.d.ts +31 -0
  151. package/Input/PasswordStrengthIndicator/PasswordStrengthIndicator.js +18 -0
  152. package/Input/PasswordStrengthIndicator/index.d.ts +2 -0
  153. package/Input/PasswordStrengthIndicator/index.js +1 -0
  154. package/Input/SelectButton/SelectButton.d.ts +20 -0
  155. package/Input/SelectButton/SelectButton.js +21 -0
  156. package/Input/SelectButton/index.d.ts +2 -0
  157. package/Input/SelectButton/index.js +1 -0
  158. package/Input/SpinnerButton/SpinnerButton.d.ts +19 -0
  159. package/Input/SpinnerButton/SpinnerButton.js +14 -0
  160. package/Input/SpinnerButton/index.d.ts +2 -0
  161. package/Input/SpinnerButton/index.js +1 -0
  162. package/Input/index.d.ts +3 -2
  163. package/Menu/Menu.js +1 -0
  164. package/Menu/index.d.ts +8 -4
  165. package/Message/Message.d.ts +6 -4
  166. package/Message/Message.js +86 -9
  167. package/Message/MessageTimerController.d.ts +14 -0
  168. package/Message/MessageTimerController.js +27 -0
  169. package/Message/index.d.ts +3 -2
  170. package/Modal/Modal.js +2 -2
  171. package/Modal/ModalActions.js +1 -0
  172. package/Modal/ModalControl.js +1 -0
  173. package/Modal/ModalHeader.js +1 -0
  174. package/Modal/index.d.ts +10 -5
  175. package/Modal/useModalContainer.d.ts +1 -1
  176. package/Modal/useModalContainer.js +2 -4
  177. package/Navigation/Navigation.js +37 -34
  178. package/Navigation/NavigationContext.js +1 -0
  179. package/Navigation/NavigationItem.js +1 -0
  180. package/Navigation/NavigationSubMenu.js +16 -26
  181. package/Navigation/index.d.ts +8 -4
  182. package/Notification/Notification.js +0 -1
  183. package/Notification/index.d.ts +3 -2
  184. package/Notifier/NotifierManager.d.ts +15 -2
  185. package/Notifier/NotifierManager.js +60 -18
  186. package/Notifier/createNotifier.d.ts +9 -0
  187. package/Notifier/createNotifier.js +3 -2
  188. package/Notifier/typings.d.ts +3 -1
  189. package/OverflowTooltip/OverflowCounterTag.d.ts +12 -0
  190. package/OverflowTooltip/OverflowCounterTag.js +48 -0
  191. package/OverflowTooltip/OverflowTooltip.d.ts +34 -0
  192. package/OverflowTooltip/OverflowTooltip.js +53 -0
  193. package/OverflowTooltip/index.d.ts +2 -0
  194. package/OverflowTooltip/index.js +2 -0
  195. package/PageFooter/PageFooter.d.ts +73 -8
  196. package/PageFooter/PageFooter.js +34 -3
  197. package/PageFooter/index.d.ts +2 -1
  198. package/PageHeader/PageHeader.d.ts +40 -0
  199. package/PageHeader/PageHeader.js +70 -0
  200. package/PageHeader/index.d.ts +2 -0
  201. package/PageHeader/index.js +1 -0
  202. package/PageToolbar/PageToolbar.d.ts +114 -0
  203. package/PageToolbar/PageToolbar.js +23 -0
  204. package/PageToolbar/index.d.ts +2 -0
  205. package/PageToolbar/index.js +1 -0
  206. package/PageToolbar/utils.d.ts +23 -0
  207. package/PageToolbar/utils.js +165 -0
  208. package/Pagination/Pagination.d.ts +23 -29
  209. package/Pagination/Pagination.js +3 -4
  210. package/Pagination/PaginationItem.d.ts +1 -1
  211. package/Pagination/PaginationItem.js +4 -3
  212. package/Pagination/PaginationJumper.d.ts +7 -9
  213. package/Pagination/PaginationJumper.js +3 -5
  214. package/Pagination/PaginationPageSize.d.ts +8 -11
  215. package/Pagination/PaginationPageSize.js +5 -4
  216. package/Pagination/index.d.ts +8 -4
  217. package/Pagination/usePagination.d.ts +3 -1
  218. package/Pagination/usePagination.js +12 -21
  219. package/Picker/FormattedInput.d.ts +17 -0
  220. package/Picker/FormattedInput.js +74 -0
  221. package/Picker/MaskFormat.d.ts +39 -0
  222. package/Picker/MaskFormat.js +94 -0
  223. package/Picker/PickerTrigger.d.ts +13 -3
  224. package/Picker/PickerTrigger.js +17 -2
  225. package/Picker/PickerTriggerWithSeparator.d.ts +124 -0
  226. package/Picker/PickerTriggerWithSeparator.js +80 -0
  227. package/Picker/RangePickerTrigger.d.ts +55 -4
  228. package/Picker/RangePickerTrigger.js +65 -7
  229. package/Picker/formatUtils.d.ts +34 -0
  230. package/Picker/formatUtils.js +124 -0
  231. package/Picker/index.d.ts +17 -6
  232. package/Picker/index.js +4 -1
  233. package/Picker/useDateInputFormatter.d.ts +52 -0
  234. package/Picker/useDateInputFormatter.js +382 -0
  235. package/Picker/usePickerValue.d.ts +1 -2
  236. package/Picker/usePickerValue.js +8 -13
  237. package/Popconfirm/Popconfirm.js +1 -1
  238. package/Popconfirm/index.d.ts +2 -1
  239. package/Popover/Popover.js +4 -8
  240. package/Popover/index.d.ts +2 -1
  241. package/Popper/Popper.d.ts +15 -10
  242. package/Popper/Popper.js +88 -17
  243. package/Popper/index.d.ts +2 -1
  244. package/Portal/Portal.d.ts +13 -5
  245. package/Portal/Portal.js +25 -10
  246. package/Portal/index.d.ts +4 -1
  247. package/Portal/index.js +1 -0
  248. package/Portal/portalRegistry.d.ts +17 -0
  249. package/Portal/portalRegistry.js +92 -0
  250. package/Progress/Progress.d.ts +23 -30
  251. package/Progress/Progress.js +71 -21
  252. package/Progress/index.d.ts +3 -2
  253. package/Provider/ConfigProvider.d.ts +1 -0
  254. package/Provider/ConfigProvider.js +1 -0
  255. package/Provider/context.js +1 -0
  256. package/Radio/Radio.d.ts +37 -4
  257. package/Radio/Radio.js +23 -12
  258. package/Radio/RadioGroup.d.ts +37 -8
  259. package/Radio/RadioGroup.js +6 -5
  260. package/Radio/RadioGroupContext.d.ts +2 -1
  261. package/Radio/RadioGroupContext.js +1 -0
  262. package/Radio/index.d.ts +5 -3
  263. package/ResultState/ResultState.d.ts +52 -0
  264. package/ResultState/ResultState.js +24 -0
  265. package/ResultState/index.d.ts +2 -0
  266. package/ResultState/index.js +1 -0
  267. package/Select/AutoComplete.d.ts +1 -1
  268. package/Select/AutoComplete.js +2 -1
  269. package/Select/Option.js +1 -0
  270. package/Select/Select.d.ts +1 -1
  271. package/Select/Select.js +2 -1
  272. package/Select/SelectControlContext.js +1 -0
  273. package/Select/SelectTrigger.d.ts +1 -87
  274. package/Select/SelectTrigger.js +26 -21
  275. package/Select/SelectTriggerTags.d.ts +1 -1
  276. package/Select/SelectTriggerTags.js +47 -18
  277. package/Select/TreeSelect.d.ts +1 -1
  278. package/Select/TreeSelect.js +2 -1
  279. package/Select/index.d.ts +14 -7
  280. package/Select/typings.d.ts +99 -0
  281. package/Select/useSelectTriggerTags.d.ts +15 -8
  282. package/Select/useSelectTriggerTags.js +83 -44
  283. package/Selection/Selection.d.ts +98 -0
  284. package/Selection/Selection.js +46 -0
  285. package/Selection/index.d.ts +12 -0
  286. package/Selection/index.js +5 -0
  287. package/Skeleton/Skeleton.d.ts +10 -3
  288. package/Skeleton/Skeleton.js +12 -4
  289. package/Skeleton/index.d.ts +2 -1
  290. package/Slider/Slider.d.ts +44 -7
  291. package/Slider/Slider.js +17 -13
  292. package/Slider/index.d.ts +5 -3
  293. package/Spin/Spin.d.ts +39 -0
  294. package/{Loading/Loading.js → Spin/Spin.js} +9 -9
  295. package/Spin/index.d.ts +2 -0
  296. package/Spin/index.js +1 -0
  297. package/Stepper/Step.d.ts +1 -35
  298. package/Stepper/Step.js +43 -8
  299. package/Stepper/Stepper.d.ts +1 -14
  300. package/Stepper/Stepper.js +49 -15
  301. package/Stepper/index.d.ts +5 -2
  302. package/Stepper/index.js +1 -0
  303. package/Stepper/typings.d.ts +77 -0
  304. package/Stepper/useStepDistance.d.ts +10 -0
  305. package/Stepper/useStepDistance.js +81 -0
  306. package/Stepper/useStepper.d.ts +21 -0
  307. package/Stepper/useStepper.js +26 -0
  308. package/Tab/Tab.d.ts +32 -0
  309. package/Tab/Tab.js +57 -0
  310. package/Tab/TabItem.d.ts +27 -0
  311. package/Tab/TabItem.js +18 -0
  312. package/Tab/index.d.ts +4 -0
  313. package/Tab/index.js +2 -0
  314. package/Table/Table.d.ts +75 -94
  315. package/Table/Table.js +216 -161
  316. package/Table/TableContext.d.ts +114 -51
  317. package/Table/TableContext.js +22 -3
  318. package/Table/components/TableBody.d.ts +5 -0
  319. package/Table/components/TableBody.js +102 -0
  320. package/Table/components/TableCell.d.ts +17 -0
  321. package/Table/components/TableCell.js +74 -0
  322. package/Table/components/TableColGroup.d.ts +4 -0
  323. package/Table/components/TableColGroup.js +206 -0
  324. package/Table/components/TableDragHandleCell.d.ts +9 -0
  325. package/Table/components/TableDragHandleCell.js +37 -0
  326. package/Table/components/TableExpandCell.d.ts +11 -0
  327. package/Table/components/TableExpandCell.js +44 -0
  328. package/Table/components/TableExpandedRow.d.ts +9 -0
  329. package/Table/components/TableExpandedRow.js +46 -0
  330. package/Table/components/TableHeader.d.ts +4 -0
  331. package/Table/components/TableHeader.js +125 -0
  332. package/Table/components/TablePagination.d.ts +3 -0
  333. package/Table/components/TablePagination.js +11 -0
  334. package/Table/components/TableResizeHandle.d.ts +13 -0
  335. package/Table/components/TableResizeHandle.js +115 -0
  336. package/Table/components/TableRow.d.ts +12 -0
  337. package/Table/components/TableRow.js +126 -0
  338. package/Table/components/TableSelectionCell.d.ts +13 -0
  339. package/Table/components/TableSelectionCell.js +35 -0
  340. package/Table/components/index.d.ts +10 -0
  341. package/Table/components/index.js +10 -0
  342. package/Table/hooks/index.d.ts +9 -0
  343. package/Table/hooks/index.js +8 -0
  344. package/Table/hooks/typings.d.ts +14 -0
  345. package/Table/hooks/useTableColumns.d.ts +8 -0
  346. package/Table/hooks/useTableColumns.js +91 -0
  347. package/Table/hooks/useTableDataSource.d.ts +57 -0
  348. package/Table/hooks/useTableDataSource.js +183 -0
  349. package/Table/hooks/useTableExpansion.d.ts +7 -0
  350. package/Table/hooks/useTableExpansion.js +52 -0
  351. package/Table/hooks/useTableFixedOffsets.d.ts +29 -0
  352. package/Table/hooks/useTableFixedOffsets.js +241 -0
  353. package/Table/hooks/useTableScroll.d.ts +12 -0
  354. package/Table/hooks/useTableScroll.js +58 -0
  355. package/Table/hooks/useTableSelection.d.ts +7 -0
  356. package/Table/hooks/useTableSelection.js +94 -0
  357. package/Table/hooks/useTableSorting.d.ts +6 -0
  358. package/Table/hooks/useTableSorting.js +32 -0
  359. package/Table/hooks/useTableVirtualization.d.ts +22 -0
  360. package/Table/hooks/useTableVirtualization.js +115 -0
  361. package/Table/index.d.ts +7 -7
  362. package/Table/index.js +22 -6
  363. package/Table/utils/index.d.ts +2 -0
  364. package/Table/utils/index.js +1 -0
  365. package/Table/utils/useTableRowSelection.d.ts +18 -0
  366. package/Table/utils/useTableRowSelection.js +63 -0
  367. package/Tag/Tag.d.ts +2 -25
  368. package/Tag/Tag.js +23 -13
  369. package/Tag/TagGroup.d.ts +12 -0
  370. package/Tag/TagGroup.js +41 -0
  371. package/Tag/index.d.ts +2 -1
  372. package/Tag/typings.d.ts +78 -0
  373. package/TextField/TextField.d.ts +78 -19
  374. package/TextField/TextField.js +58 -22
  375. package/TextField/index.d.ts +2 -1
  376. package/Textarea/Textarea.d.ts +19 -51
  377. package/Textarea/Textarea.js +13 -19
  378. package/Textarea/index.d.ts +2 -2
  379. package/TimePanel/TimePanel.d.ts +1 -22
  380. package/TimePanel/TimePanel.js +31 -26
  381. package/TimePanel/TimePanelAction.d.ts +2 -8
  382. package/TimePanel/TimePanelAction.js +2 -2
  383. package/TimePanel/TimePanelColumn.d.ts +0 -13
  384. package/TimePanel/TimePanelColumn.js +9 -11
  385. package/TimePanel/index.d.ts +6 -3
  386. package/TimePicker/TimePicker.d.ts +10 -1
  387. package/TimePicker/TimePicker.js +86 -35
  388. package/TimePicker/TimePickerPanel.d.ts +1 -2
  389. package/TimePicker/TimePickerPanel.js +2 -2
  390. package/TimePicker/index.d.ts +4 -2
  391. package/Toggle/Toggle.d.ts +46 -0
  392. package/Toggle/Toggle.js +29 -0
  393. package/Toggle/index.d.ts +3 -0
  394. package/Toggle/index.js +1 -0
  395. package/Tooltip/Tooltip.d.ts +13 -2
  396. package/Tooltip/Tooltip.js +56 -10
  397. package/Tooltip/index.d.ts +2 -1
  398. package/Tooltip/useDelayMouseEnterLeave.d.ts +1 -2
  399. package/Tooltip/useDelayMouseEnterLeave.js +10 -13
  400. package/Transition/Collapse.d.ts +2 -0
  401. package/Transition/Collapse.js +5 -6
  402. package/Transition/Fade.js +4 -4
  403. package/Transition/Rotate.d.ts +42 -0
  404. package/Transition/Rotate.js +30 -0
  405. package/Transition/Scale.d.ts +13 -0
  406. package/Transition/{Grow.js → Scale.js} +19 -16
  407. package/Transition/Slide.d.ts +7 -0
  408. package/Transition/{Zoom.js → Slide.js} +14 -12
  409. package/Transition/SlideFade.d.ts +3 -0
  410. package/Transition/SlideFade.js +5 -4
  411. package/Transition/Transition.d.ts +2 -2
  412. package/Transition/Translate.d.ts +14 -0
  413. package/Transition/Translate.js +94 -0
  414. package/Transition/index.d.ts +16 -6
  415. package/Transition/index.js +4 -2
  416. package/Transition/useAutoTransitionDuration.d.ts +1 -1
  417. package/Transition/useAutoTransitionDuration.js +3 -3
  418. package/Transition/useSetNodeTransition.js +0 -2
  419. package/Tree/TreeNode.js +7 -6
  420. package/Tree/index.d.ts +10 -5
  421. package/Typography/Typography.d.ts +6 -9
  422. package/Typography/Typography.js +7 -9
  423. package/Typography/index.d.ts +2 -5
  424. package/Upload/Upload.d.ts +175 -0
  425. package/Upload/Upload.js +279 -0
  426. package/Upload/UploadItem.d.ts +82 -0
  427. package/Upload/UploadItem.js +118 -0
  428. package/Upload/UploadPictureCard.d.ts +110 -0
  429. package/Upload/UploadPictureCard.js +101 -0
  430. package/Upload/Uploader.d.ts +161 -0
  431. package/Upload/Uploader.js +120 -0
  432. package/Upload/index.d.ts +8 -6
  433. package/Upload/index.js +4 -5
  434. package/Upload/upload-utils.d.ts +41 -0
  435. package/Upload/upload-utils.js +65 -0
  436. package/_internal/InputCheck/InputCheck.d.ts +15 -1
  437. package/_internal/InputCheck/InputCheck.js +6 -2
  438. package/_internal/InputCheck/InputCheckGroup.d.ts +11 -1
  439. package/_internal/InputCheck/InputCheckGroup.js +4 -2
  440. package/_internal/InputCheck/index.d.ts +4 -2
  441. package/_internal/InputTriggerPopper/InputTriggerPopper.js +15 -25
  442. package/_internal/InputTriggerPopper/index.d.ts +2 -1
  443. package/_internal/SlideFadeOverlay/SlideFadeOverlay.d.ts +3 -3
  444. package/_internal/SlideFadeOverlay/SlideFadeOverlay.js +5 -28
  445. package/_internal/SlideFadeOverlay/index.d.ts +2 -1
  446. package/_internal/SlideFadeOverlay/useTopStack.js +1 -0
  447. package/dayjs.d.ts +21 -0
  448. package/dayjs.js +2 -0
  449. package/hooks/useComposeRefs.js +1 -1
  450. package/hooks/useLastCallback.js +3 -1
  451. package/hooks/useScrollLock.d.ts +28 -0
  452. package/hooks/useScrollLock.js +134 -0
  453. package/index.d.ts +128 -58
  454. package/index.js +90 -80
  455. package/luxon.d.ts +21 -0
  456. package/luxon.js +2 -0
  457. package/moment.d.ts +21 -0
  458. package/moment.js +2 -0
  459. package/package.json +14 -17
  460. package/utils/composeRefs.js +0 -1
  461. package/utils/flatten-children.d.ts +12 -0
  462. package/utils/flatten-children.js +37 -0
  463. package/utils/get-css-variable-value.d.ts +2 -0
  464. package/utils/get-css-variable-value.js +12 -0
  465. package/Button/IconButton.d.ts +0 -21
  466. package/Button/IconButton.js +0 -13
  467. package/DateTimePicker/DateTimePickerPanel.d.ts +0 -28
  468. package/DateTimePicker/DateTimePickerPanel.js +0 -49
  469. package/Form/FormMessage.d.ts +0 -7
  470. package/Form/FormMessage.js +0 -18
  471. package/Form/useInputWithTagsModeValue.js +0 -86
  472. package/Loading/Loading.d.ts +0 -33
  473. package/Loading/index.d.ts +0 -1
  474. package/Loading/index.js +0 -1
  475. package/Overlay/Overlay.js +0 -31
  476. package/Overlay/index.d.ts +0 -1
  477. package/Overlay/index.js +0 -1
  478. package/Picker/useRangePickerValue.d.ts +0 -23
  479. package/Picker/useRangePickerValue.js +0 -99
  480. package/Switch/Switch.d.ts +0 -43
  481. package/Switch/Switch.js +0 -28
  482. package/Switch/index.d.ts +0 -2
  483. package/Switch/index.js +0 -1
  484. package/Table/TableBody.d.ts +0 -10
  485. package/Table/TableBody.js +0 -30
  486. package/Table/TableBodyRow.d.ts +0 -11
  487. package/Table/TableBodyRow.js +0 -64
  488. package/Table/TableCell.d.ts +0 -19
  489. package/Table/TableCell.js +0 -24
  490. package/Table/TableExpandedTable.d.ts +0 -11
  491. package/Table/TableExpandedTable.js +0 -28
  492. package/Table/TableHeader.d.ts +0 -3
  493. package/Table/TableHeader.js +0 -35
  494. package/Table/draggable/useTableDraggable.d.ts +0 -14
  495. package/Table/draggable/useTableDraggable.js +0 -64
  496. package/Table/editable/TableEditRenderWrapper.d.ts +0 -7
  497. package/Table/editable/TableEditRenderWrapper.js +0 -15
  498. package/Table/expandable/TableExpandable.d.ts +0 -27
  499. package/Table/expandable/TableExpandable.js +0 -24
  500. package/Table/pagination/TablePagination.d.ts +0 -10
  501. package/Table/pagination/TablePagination.js +0 -25
  502. package/Table/pagination/useTablePagination.d.ts +0 -8
  503. package/Table/pagination/useTablePagination.js +0 -29
  504. package/Table/refresh/TableRefresh.d.ts +0 -10
  505. package/Table/refresh/TableRefresh.js +0 -20
  506. package/Table/rowSelection/TableRowSelection.d.ts +0 -18
  507. package/Table/rowSelection/TableRowSelection.js +0 -92
  508. package/Table/rowSelection/useTableRowSelection.d.ts +0 -6
  509. package/Table/rowSelection/useTableRowSelection.js +0 -53
  510. package/Table/sorting/TableSortingIcon.d.ts +0 -10
  511. package/Table/sorting/TableSortingIcon.js +0 -32
  512. package/Table/sorting/useTableSorting.d.ts +0 -11
  513. package/Table/sorting/useTableSorting.js +0 -120
  514. package/Table/useTableFetchMore.d.ts +0 -10
  515. package/Table/useTableFetchMore.js +0 -50
  516. package/Table/useTableLoading.d.ts +0 -5
  517. package/Table/useTableLoading.js +0 -19
  518. package/Table/useTableScroll.d.ts +0 -596
  519. package/Table/useTableScroll.js +0 -294
  520. package/Tabs/Tab.d.ts +0 -18
  521. package/Tabs/Tab.js +0 -16
  522. package/Tabs/TabPane.d.ts +0 -14
  523. package/Tabs/TabPane.js +0 -18
  524. package/Tabs/Tabs.d.ts +0 -39
  525. package/Tabs/Tabs.js +0 -47
  526. package/Tabs/index.d.ts +0 -3
  527. package/Tabs/index.js +0 -3
  528. package/Tabs/useTabsOverflow.d.ts +0 -8
  529. package/Tabs/useTabsOverflow.js +0 -61
  530. package/Transition/Grow.d.ts +0 -12
  531. package/Transition/Zoom.d.ts +0 -7
  532. package/Upload/UploadButton.d.ts +0 -9
  533. package/Upload/UploadButton.js +0 -23
  534. package/Upload/UploadInput.d.ts +0 -20
  535. package/Upload/UploadInput.js +0 -24
  536. package/Upload/UploadPicture.d.ts +0 -49
  537. package/Upload/UploadPicture.js +0 -51
  538. package/Upload/UploadPictureBlock.d.ts +0 -20
  539. package/Upload/UploadPictureBlock.js +0 -81
  540. package/Upload/UploadPictureWall.d.ts +0 -81
  541. package/Upload/UploadPictureWall.js +0 -168
  542. package/Upload/UploadPictureWallItem.d.ts +0 -15
  543. package/Upload/UploadPictureWallItem.js +0 -18
  544. package/Upload/UploadResult.d.ts +0 -35
  545. package/Upload/UploadResult.js +0 -29
  546. package/utils/scroll-lock.d.ts +0 -2
  547. package/utils/scroll-lock.js +0 -24
@@ -1,5 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
- import { InputCheckGroupOrientation } from '@mezzanine-ui/core/_internal/input-check';
2
+ import { InputCheckGroupOrientation, InputCheckSize } from '@mezzanine-ui/core/_internal/input-check';
3
3
  import { NativeElementPropsWithoutKeyAndRef } from '../../utils/jsx-types';
4
4
  export interface InputCheckGroupProps extends NativeElementPropsWithoutKeyAndRef<'div'> {
5
5
  /**
@@ -10,6 +10,16 @@ export interface InputCheckGroupProps extends NativeElementPropsWithoutKeyAndRef
10
10
  * The orientation of input check group.
11
11
  */
12
12
  orientation?: InputCheckGroupOrientation;
13
+ /**
14
+ * Whether the input check group use segment style.
15
+ * @default false
16
+ */
17
+ segmentedStyle?: boolean;
18
+ /**
19
+ * The size of input check group.
20
+ * @default 'main'
21
+ */
22
+ size?: InputCheckSize;
13
23
  }
14
24
  /**
15
25
  * The react component for `mezzanine` input check group.
@@ -7,8 +7,10 @@ import cx from 'clsx';
7
7
  * The react component for `mezzanine` input check group.
8
8
  */
9
9
  const InputCheckGroup = forwardRef(function InputCheckGroup(props, ref) {
10
- const { children, className, orientation = 'horizontal', ...rest } = props;
11
- return (jsx("div", { ...rest, ref: ref, "aria-orientation": orientation, className: cx(inputCheckGroupClasses.host, inputCheckGroupClasses.orientation(orientation), className), children: children }));
10
+ const { children, className, orientation = 'horizontal', segmentedStyle = false, size = 'main', ...rest } = props;
11
+ return (jsx("div", { ...rest, ref: ref, "aria-orientation": orientation, className: cx(inputCheckGroupClasses.host, inputCheckGroupClasses.orientation(orientation), inputCheckGroupClasses.size(size), {
12
+ [inputCheckGroupClasses.segmented]: segmentedStyle,
13
+ }, className), children: children }));
12
14
  });
13
15
 
14
16
  export { InputCheckGroup as default };
@@ -1,3 +1,5 @@
1
1
  export type { InputCheckSize, InputCheckGroupOrientation, } from '@mezzanine-ui/core/_internal/input-check';
2
- export { InputCheckProps, default } from './InputCheck';
3
- export { InputCheckGroupProps, default as InputCheckGroup, } from './InputCheckGroup';
2
+ export { default } from './InputCheck';
3
+ export type { InputCheckProps } from './InputCheck';
4
+ export { default as InputCheckGroup } from './InputCheckGroup';
5
+ export type { InputCheckGroupProps } from './InputCheckGroup';
@@ -1,44 +1,34 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { inputTriggerPopperClasses } from '@mezzanine-ui/core/_internal/input-trigger-popper';
3
+ import { offset, size } from '@floating-ui/react-dom';
3
4
  import { forwardRef } from 'react';
4
5
  import Fade from '../../Transition/Fade.js';
5
6
  import Popper from '../../Popper/Popper.js';
6
7
  import cx from 'clsx';
7
8
 
9
+ // Middleware to make the popper have the same min-width as the reference element
10
+ const sameWidthMiddleware = size({
11
+ apply({ rects, elements }) {
12
+ Object.assign(elements.floating.style, {
13
+ minWidth: `${rects.reference.width}px`,
14
+ });
15
+ },
16
+ });
8
17
  /**
9
18
  * The react component for `mezzanine` input popper.
10
19
  */
11
20
  const InputTriggerPopper = forwardRef(function InputTriggerPopper(props, ref) {
12
21
  const { anchor, children, className, fadeProps, open, options, sameWidth, ...restPopperProps } = props;
13
- const { modifiers = [], ...restPopperOptions } = options || {};
14
- const sameWidthModifier = {
15
- name: 'sameWidth',
16
- enabled: true,
17
- phase: 'beforeWrite',
18
- requires: ['computeStyles'],
19
- fn: ({ state }) => {
20
- const reassignState = state;
21
- reassignState.styles.popper.minWidth = `${state.rects.reference.width}px`;
22
- },
23
- effect: ({ state }) => {
24
- const reassignState = state;
25
- reassignState.elements.popper.style.minWidth = `${state.elements.reference.getBoundingClientRect().width}px`;
26
- },
27
- };
28
- return (jsx(Fade, { ...fadeProps, in: open, ref: ref, children: jsx(Popper, { ...restPopperProps, open: true, anchor: anchor, className: cx(inputTriggerPopperClasses.host, className),
22
+ const { middleware = [], ...restPopperOptions } = options || {};
23
+ return (jsx(Fade, { ...fadeProps, in: open, ref: ref, children: jsx(Popper, { ...restPopperProps, open: true, anchor: anchor, className: cx(inputTriggerPopperClasses.host, className), disablePortal: true,
29
24
  /** Prevent event bubble (Because popper may use portal, then click away function would be buggy) */
30
25
  onClick: (e) => e.stopPropagation(), onTouchStart: (e) => e.stopPropagation(), onTouchMove: (e) => e.stopPropagation(), onTouchEnd: (e) => e.stopPropagation(), options: {
31
26
  placement: 'bottom-start',
32
27
  ...restPopperOptions,
33
- modifiers: [
34
- {
35
- name: 'offset',
36
- options: {
37
- offset: [0, 4],
38
- },
39
- },
40
- ...(sameWidth ? [sameWidthModifier] : []),
41
- ...modifiers,
28
+ middleware: [
29
+ offset({ mainAxis: 4 }),
30
+ ...(sameWidth ? [sameWidthMiddleware] : []),
31
+ ...middleware,
42
32
  ],
43
33
  }, children: children }) }));
44
34
  });
@@ -1 +1,2 @@
1
- export { InputTriggerPopperProps, default } from './InputTriggerPopper';
1
+ export { default } from './InputTriggerPopper';
2
+ export type { InputTriggerPopperProps } from './InputTriggerPopper';
@@ -1,7 +1,7 @@
1
1
  import { NativeElementPropsWithoutKeyAndRef } from '../../utils/jsx-types';
2
- import { OverlayProps } from '../../Overlay';
2
+ import { BackdropProps } from '../../Backdrop';
3
3
  import { SlideFadeProps, SlideFadeDirection } from '../../Transition';
4
- export interface SlideFadeOverlayProps extends Omit<NativeElementPropsWithoutKeyAndRef<'div'>, 'children'>, Pick<OverlayProps, 'container' | 'disableCloseOnBackdropClick' | 'disablePortal' | 'invisibleBackdrop' | 'hideBackdrop' | 'onBackdropClick' | 'onClose' | 'open'>, Pick<SlideFadeProps, 'children'> {
4
+ export interface SlideFadeOverlayProps extends Omit<NativeElementPropsWithoutKeyAndRef<'div'>, 'children'>, Pick<BackdropProps, 'container' | 'disableCloseOnBackdropClick' | 'disablePortal' | 'onBackdropClick' | 'onClose' | 'open'>, Pick<SlideFadeProps, 'children'> {
5
5
  /**
6
6
  * Control slide fade in direction
7
7
  * @default 'down'
@@ -14,7 +14,7 @@ export interface SlideFadeOverlayProps extends Omit<NativeElementPropsWithoutKey
14
14
  disableCloseOnEscapeKeyDown?: boolean;
15
15
  }
16
16
  /**
17
- * The react component for slide fade + overlay compose
17
+ * @deprecated
18
18
  */
19
19
  declare const SlideFadeOverlay: import("react").ForwardRefExoticComponent<SlideFadeOverlayProps & import("react").RefAttributes<HTMLDivElement>>;
20
20
  export default SlideFadeOverlay;
@@ -1,18 +1,17 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { overlayWithSlideFadeClasses } from '@mezzanine-ui/core/_internal/overlay-with-slide-fade';
3
- import { forwardRef, useState, useEffect } from 'react';
3
+ import { forwardRef, useState } from 'react';
4
4
  import { useDocumentEscapeKeyDown } from '../../hooks/useDocumentEscapeKeyDown.js';
5
- import { lockBodyScroll, allowBodyScroll } from '../../utils/scroll-lock.js';
6
5
  import useTopStack from './useTopStack.js';
7
- import Overlay from '../../Overlay/Overlay.js';
6
+ import Backdrop from '../../Backdrop/Backdrop.js';
8
7
  import SlideFade from '../../Transition/SlideFade.js';
9
8
  import cx from 'clsx';
10
9
 
11
10
  /**
12
- * The react component for slide fade + overlay compose
11
+ * @deprecated
13
12
  */
14
13
  const SlideFadeOverlay = forwardRef(function SlideFadeOverlay(props, ref) {
15
- const { children, className, container, direction = 'down', disableCloseOnBackdropClick = false, disableCloseOnEscapeKeyDown = false, disablePortal = false, hideBackdrop = false, invisibleBackdrop = false, onBackdropClick, onClose, open, } = props;
14
+ const { children, className, container, direction = 'down', disableCloseOnBackdropClick = false, disableCloseOnEscapeKeyDown = false, disablePortal = false, onBackdropClick, onClose, open, } = props;
16
15
  const [exited, setExited] = useState(true);
17
16
  /**
18
17
  * Escape keydown close: escape will only close the top modal
@@ -29,32 +28,10 @@ const SlideFadeOverlay = forwardRef(function SlideFadeOverlay(props, ref) {
29
28
  }
30
29
  };
31
30
  }, [disableCloseOnEscapeKeyDown, checkIsOnTheTop, open, onClose]);
32
- /** lock body scroll */
33
- useEffect(() => {
34
- if (open) {
35
- lockBodyScroll();
36
- }
37
- }, [open]);
38
- /** unlock body scroll */
39
- useEffect(() => {
40
- function checkAndAllowScroll() {
41
- // wait until dom element unmount, and check if other modal existed
42
- const allStacks = document.querySelectorAll('.mzn-overlay-with-slide-fade');
43
- if (!allStacks.length) {
44
- allowBodyScroll();
45
- }
46
- }
47
- if (!open && exited) {
48
- checkAndAllowScroll();
49
- }
50
- return () => {
51
- requestAnimationFrame(checkAndAllowScroll);
52
- };
53
- }, [open, exited]);
54
31
  if (!open && exited) {
55
32
  return null;
56
33
  }
57
- return (jsx(Overlay, { className: cx(overlayWithSlideFadeClasses.host, className), container: container, disableCloseOnBackdropClick: disableCloseOnBackdropClick, disablePortal: disablePortal, hideBackdrop: hideBackdrop, invisibleBackdrop: invisibleBackdrop, onBackdropClick: onBackdropClick, onClose: onClose, open: open, role: "presentation", children: jsx(SlideFade, { ref: ref, in: open, direction: direction, onEntered: () => setExited(false), onExited: () => setExited(true), children: children }) }));
34
+ return (jsx(Backdrop, { className: cx(overlayWithSlideFadeClasses.host, className), container: container, disableCloseOnBackdropClick: disableCloseOnBackdropClick, disablePortal: disablePortal, onBackdropClick: onBackdropClick, onClose: onClose, open: open, role: "presentation", children: jsx(SlideFade, { ref: ref, in: open, direction: direction, onEntered: () => setExited(false), onExited: () => setExited(true), children: children }) }));
58
35
  });
59
36
 
60
37
  export { SlideFadeOverlay as default };
@@ -1 +1,2 @@
1
- export { SlideFadeOverlayProps, default } from './SlideFadeOverlay';
1
+ export { default } from './SlideFadeOverlay';
2
+ export type { SlideFadeOverlayProps } from './SlideFadeOverlay';
@@ -4,6 +4,7 @@ let seedStack = [];
4
4
  let seed = 1;
5
5
  function useTopStack(open) {
6
6
  const modalSeed = useMemo(() => {
7
+ // eslint-disable-next-line react-hooks/globals
7
8
  seed += 1;
8
9
  return seed;
9
10
  }, []);
package/dayjs.d.ts ADDED
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Dayjs-specific entry point for Mezzanine UI React
3
+ * Import from this path to use Dayjs without loading other date libraries
4
+ *
5
+ * @example
6
+ * ```tsx
7
+ * import { CalendarConfigProviderDayjs, CalendarLocale } from '@mezzanine-ui/react/dayjs';
8
+ *
9
+ * export default function RootLayout({ children }) {
10
+ * return (
11
+ * <CalendarConfigProviderDayjs locale={CalendarLocale.ZH_TW}>
12
+ * {children}
13
+ * </CalendarConfigProviderDayjs>
14
+ * );
15
+ * }
16
+ * ```
17
+ */
18
+ export { CalendarLocale } from '@mezzanine-ui/core/calendar';
19
+ export type { CalendarLocaleValue } from '@mezzanine-ui/core/calendar';
20
+ export { default as CalendarConfigProviderDayjs } from './Calendar/CalendarConfigProviderDayjs';
21
+ export type { CalendarConfigProviderDayjsProps } from './Calendar/CalendarConfigProviderDayjs';
package/dayjs.js ADDED
@@ -0,0 +1,2 @@
1
+ export { CalendarLocale } from '@mezzanine-ui/core/calendar';
2
+ export { CalendarConfigProviderDayjs } from './Calendar/CalendarConfigProviderDayjs.js';
@@ -2,7 +2,7 @@ import { useMemo } from 'react';
2
2
  import { composeRefs } from '../utils/composeRefs.js';
3
3
 
4
4
  function useComposeRefs(refs) {
5
- return useMemo(() => composeRefs(refs), refs);
5
+ return useMemo(() => composeRefs(refs), [refs]);
6
6
  }
7
7
 
8
8
  export { useComposeRefs };
@@ -5,7 +5,9 @@ function useLastCallback(callback) {
5
5
  const lastCallback = useLastValue(callback);
6
6
  return useCallback(
7
7
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
8
- (...args) => lastCallback.current(...args), []);
8
+ (...args) => lastCallback.current(...args),
9
+ // eslint-disable-next-line react-hooks/exhaustive-deps
10
+ []);
9
11
  }
10
12
 
11
13
  export { useLastCallback };
@@ -0,0 +1,28 @@
1
+ interface ScrollLockOptions {
2
+ /**
3
+ * Whether the scroll lock is enabled
4
+ * @default false
5
+ */
6
+ enabled?: boolean;
7
+ /**
8
+ * Whether to reserve scrollbar width to prevent layout shift
9
+ * @default true
10
+ */
11
+ reserveScrollBarGap?: boolean;
12
+ }
13
+ /**
14
+ * Hook to lock/unlock body scroll
15
+ * Handles multiple concurrent locks (nested modals/overlays)
16
+ * Prevents layout shift by reserving scrollbar width
17
+ * Handles iOS rubber band scrolling
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * function Modal({ open }) {
22
+ * useScrollLock({ enabled: open });
23
+ * return <div>...</div>;
24
+ * }
25
+ * ```
26
+ */
27
+ export declare function useScrollLock(options?: ScrollLockOptions): void;
28
+ export {};
@@ -0,0 +1,134 @@
1
+ import { useRef, useEffect } from 'react';
2
+ import { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect.js';
3
+
4
+ // Keep track of multiple scroll locks (for nested modals/overlays)
5
+ let lockCount = 0;
6
+ let originalStyles = {
7
+ overflow: '',
8
+ paddingRight: '',
9
+ };
10
+ let scrollPosition = 0;
11
+ function getScrollbarWidth() {
12
+ if (typeof window === 'undefined')
13
+ return 0;
14
+ // Check if there's actually a scrollbar
15
+ if (document.documentElement.scrollHeight <= window.innerHeight) {
16
+ return 0;
17
+ }
18
+ // Use window.innerWidth - documentElement.clientWidth for more accurate measurement
19
+ return window.innerWidth - document.documentElement.clientWidth;
20
+ }
21
+ function lock(reserveScrollBarGap = true) {
22
+ if (typeof document === 'undefined')
23
+ return;
24
+ const body = document.body;
25
+ const scrollbarWidth = reserveScrollBarGap ? getScrollbarWidth() : 0;
26
+ // Save original styles only on first lock
27
+ if (lockCount === 0) {
28
+ originalStyles = {
29
+ overflow: body.style.overflow,
30
+ paddingRight: body.style.paddingRight,
31
+ position: body.style.position,
32
+ top: body.style.top,
33
+ width: body.style.width,
34
+ };
35
+ scrollPosition = window.scrollY || window.pageYOffset;
36
+ }
37
+ lockCount += 1;
38
+ // Apply lock styles
39
+ body.style.overflow = 'hidden';
40
+ // Reserve scrollbar space to prevent layout shift
41
+ if (reserveScrollBarGap && scrollbarWidth > 0) {
42
+ const currentPaddingRight = parseInt(window.getComputedStyle(body).paddingRight, 10) || 0;
43
+ body.style.paddingRight = `${currentPaddingRight + scrollbarWidth}px`;
44
+ }
45
+ // For iOS Safari - prevent rubber band scrolling
46
+ // Use position fixed to lock the scroll position
47
+ if (isIOS()) {
48
+ body.style.position = 'fixed';
49
+ body.style.top = `-${scrollPosition}px`;
50
+ body.style.width = '100%';
51
+ }
52
+ }
53
+ function unlock() {
54
+ if (typeof document === 'undefined')
55
+ return;
56
+ lockCount = Math.max(lockCount - 1, 0);
57
+ // Only restore when all locks are released
58
+ if (lockCount === 0) {
59
+ const body = document.body;
60
+ // Restore original styles
61
+ body.style.overflow = originalStyles.overflow;
62
+ body.style.paddingRight = originalStyles.paddingRight;
63
+ if (originalStyles.position !== undefined) {
64
+ body.style.position = originalStyles.position;
65
+ }
66
+ if (originalStyles.top !== undefined) {
67
+ body.style.top = originalStyles.top;
68
+ }
69
+ if (originalStyles.width !== undefined) {
70
+ body.style.width = originalStyles.width;
71
+ }
72
+ // Restore scroll position for iOS
73
+ if (isIOS() && scrollPosition > 0) {
74
+ window.scrollTo(0, scrollPosition);
75
+ }
76
+ scrollPosition = 0;
77
+ }
78
+ }
79
+ function isIOS() {
80
+ if (typeof window === 'undefined')
81
+ return false;
82
+ // Modern approach using userAgentData API (when available)
83
+ if ('userAgentData' in navigator) {
84
+ const userAgentData = navigator.userAgentData;
85
+ if (userAgentData === null || userAgentData === void 0 ? void 0 : userAgentData.platform) {
86
+ return userAgentData.platform === 'iOS';
87
+ }
88
+ }
89
+ // Fallback to userAgent string parsing
90
+ const userAgent = navigator.userAgent.toLowerCase();
91
+ const isIOSDevice = /iphone|ipad|ipod/.test(userAgent);
92
+ const isSafariOnMac = /macintosh/.test(userAgent) && navigator.maxTouchPoints > 1;
93
+ return isIOSDevice || isSafariOnMac;
94
+ }
95
+ /**
96
+ * Hook to lock/unlock body scroll
97
+ * Handles multiple concurrent locks (nested modals/overlays)
98
+ * Prevents layout shift by reserving scrollbar width
99
+ * Handles iOS rubber band scrolling
100
+ *
101
+ * @example
102
+ * ```tsx
103
+ * function Modal({ open }) {
104
+ * useScrollLock({ enabled: open });
105
+ * return <div>...</div>;
106
+ * }
107
+ * ```
108
+ */
109
+ function useScrollLock(options = {}) {
110
+ const { enabled = false, reserveScrollBarGap = true } = options;
111
+ const lockedRef = useRef(false);
112
+ // Use layout effect to apply scroll lock before paint
113
+ useIsomorphicLayoutEffect(() => {
114
+ if (enabled && !lockedRef.current) {
115
+ lock(reserveScrollBarGap);
116
+ lockedRef.current = true;
117
+ }
118
+ else if (!enabled && lockedRef.current) {
119
+ unlock();
120
+ lockedRef.current = false;
121
+ }
122
+ }, [enabled, reserveScrollBarGap]);
123
+ // Cleanup on unmount
124
+ useEffect(() => {
125
+ return () => {
126
+ if (lockedRef.current) {
127
+ unlock();
128
+ lockedRef.current = false;
129
+ }
130
+ };
131
+ }, []);
132
+ }
133
+
134
+ export { useScrollLock };