@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
package/Popper/Popper.js CHANGED
@@ -1,30 +1,101 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { forwardRef, useState, useImperativeHandle } from 'react';
3
- import { usePopper } from 'react-popper';
1
+ 'use client';
2
+ import { jsx, jsxs } from 'react/jsx-runtime';
3
+ import { forwardRef, useRef, useImperativeHandle, useEffect, useCallback } from 'react';
4
+ import { useFloating, arrow } from '@floating-ui/react-dom';
5
+ import { spacingPrefix } from '@mezzanine-ui/system/spacing';
4
6
  import { getElement } from '../utils/getElement.js';
5
7
  import { useComposeRefs } from '../hooks/useComposeRefs.js';
8
+ import { getCSSVariableValue } from '../utils/get-css-variable-value.js';
6
9
  import Portal from '../Portal/Portal.js';
7
10
 
8
11
  const Popper = forwardRef(function Popper(props, ref) {
9
- const { anchor, children, container, controllerRef, disablePortal, open = false, options, style, ...rest } = props;
10
- const [popperEl, setPopperEl] = useState(null);
11
- const composedRef = useComposeRefs([ref, setPopperEl]);
12
+ var _a, _b, _c, _d;
13
+ const { anchor, arrow: arrow$1, children, container, controllerRef, disablePortal, open = false, options, style, ...rest } = props;
14
+ const arrowRef = useRef(null);
12
15
  const anchorEl = getElement(anchor);
13
- const { attributes, forceUpdate, state, styles, update } = usePopper(anchorEl, popperEl, options);
14
- useImperativeHandle(controllerRef, () => ({
15
- attributes,
16
- forceUpdate,
17
- state,
18
- styles,
19
- update,
20
- }));
16
+ const floatingReturn = useFloating({
17
+ ...options,
18
+ middleware: [
19
+ ...((_a = options === null || options === void 0 ? void 0 : options.middleware) !== null && _a !== void 0 ? _a : []),
20
+ (arrow$1 === null || arrow$1 === void 0 ? void 0 : arrow$1.enabled)
21
+ ? arrow({
22
+ element: arrowRef.current,
23
+ padding: arrow$1.padding || 0,
24
+ })
25
+ : null,
26
+ ],
27
+ elements: {
28
+ reference: anchorEl,
29
+ },
30
+ });
31
+ const { refs, floatingStyles, update } = floatingReturn;
32
+ const composedRef = useComposeRefs([ref, refs.setFloating]);
33
+ useImperativeHandle(controllerRef, () => floatingReturn, [floatingReturn]);
34
+ useEffect(() => {
35
+ if (anchorEl) {
36
+ refs.setReference(anchorEl);
37
+ }
38
+ }, [anchorEl, refs]);
39
+ useEffect(() => {
40
+ if (open && update) {
41
+ update();
42
+ }
43
+ }, [open, update]);
44
+ // 計算箭頭的位置和旋轉角度
45
+ const arrowX = (_b = floatingReturn.middlewareData.arrow) === null || _b === void 0 ? void 0 : _b.x;
46
+ const arrowY = (_c = floatingReturn.middlewareData.arrow) === null || _c === void 0 ? void 0 : _c.y;
47
+ const placement = floatingReturn.placement;
48
+ // 根據 placement 決定箭頭的靜態位置和旋轉
49
+ const getArrowStyles = useCallback(() => {
50
+ const staticSide = {
51
+ top: {
52
+ property: 'bottom',
53
+ value: '-6px',
54
+ },
55
+ right: {
56
+ property: 'left',
57
+ value: '-8px',
58
+ },
59
+ bottom: {
60
+ property: 'top',
61
+ value: '-6px',
62
+ },
63
+ left: {
64
+ property: 'right',
65
+ value: '-8px',
66
+ },
67
+ }[placement.split('-')[0]];
68
+ const arrowStyles = {
69
+ width: getCSSVariableValue(`--${spacingPrefix}-size-element-slim`),
70
+ height: getCSSVariableValue(`--${spacingPrefix}-size-element-tight`),
71
+ transformOrigin: 'center',
72
+ position: 'absolute',
73
+ left: typeof arrowX === 'number' ? `${arrowX}px` : undefined,
74
+ top: typeof arrowY === 'number' ? `${arrowY}px` : undefined,
75
+ [staticSide.property]: staticSide.value,
76
+ };
77
+ // 根據 placement 旋轉箭頭
78
+ const rotation = {
79
+ top: '0deg',
80
+ right: '90deg',
81
+ bottom: '180deg',
82
+ left: '-90deg',
83
+ }[placement.split('-')[0]];
84
+ if (rotation) {
85
+ arrowStyles.transform = `rotate(${rotation})`;
86
+ }
87
+ return arrowStyles;
88
+ }, [arrowX, arrowY, placement]);
21
89
  if (!open) {
22
90
  return null;
23
91
  }
24
- return (jsx(Portal, { container: container, disablePortal: disablePortal, children: jsx("div", { ...rest, ref: composedRef, style: {
92
+ return (jsx(Portal, { container: container, disablePortal: disablePortal, children: jsxs("div", { ...rest, ref: composedRef, "data-popper-placement": floatingReturn.placement, style: {
25
93
  ...style,
26
- ...styles.popper,
27
- }, ...attributes.popper, children: children }) }));
94
+ ...floatingStyles,
95
+ visibility: ((_d = floatingReturn.middlewareData.hide) === null || _d === void 0 ? void 0 : _d.referenceHidden)
96
+ ? 'hidden'
97
+ : 'visible',
98
+ }, children: [(arrow$1 === null || arrow$1 === void 0 ? void 0 : arrow$1.enabled) ? (jsx("svg", { viewBox: "0 0 12 6", fill: "none", ref: arrowRef, className: arrow$1 === null || arrow$1 === void 0 ? void 0 : arrow$1.className, style: getArrowStyles(), children: jsx("path", { d: "M6.70711 5.29289C6.31658 5.68342 5.68342 5.68342 5.29289 5.29289L0 0L12 6.05683e-07L6.70711 5.29289Z", fill: "currentColor" }) })) : null, children] }) }));
28
99
  });
29
100
 
30
101
  export { Popper as default };
package/Popper/index.d.ts CHANGED
@@ -1 +1,2 @@
1
- export { PopperPlacement, PopperPositionStrategy, PopperOptions, PopperController, PopperProps, default, } from './Popper';
1
+ export { default } from './Popper';
2
+ export type { PopperPlacement, PopperPositionStrategy, PopperController, PopperProps, } from './Popper';
@@ -1,5 +1,5 @@
1
- import { FC, ReactNode } from 'react';
2
- import { ElementGetter } from '../utils/getElement';
1
+ import { ReactNode, RefObject } from 'react';
2
+ import { type PortalLayer } from './portalRegistry';
3
3
  export interface PortalProps {
4
4
  /**
5
5
  * The element you want to portal.
@@ -7,14 +7,22 @@ export interface PortalProps {
7
7
  children?: ReactNode;
8
8
  /**
9
9
  * The destination where to portal.
10
+ * If provided, it will override the default portal container.
11
+ * Accepts HTMLElement, RefObject, or null.
10
12
  */
11
- container?: ElementGetter;
13
+ container?: HTMLElement | RefObject<HTMLElement | null> | RefObject<HTMLElement> | null;
12
14
  /**
13
15
  * Whether to disable portal.
14
16
  * If true, it will be a normal component.
15
17
  * @default false
16
18
  */
17
19
  disablePortal?: boolean;
20
+ /**
21
+ * The portal layer to use.
22
+ * - 'alert': Portal to alert container (above root, sticky)
23
+ * - 'default': Portal to default container (inside root, fixed)
24
+ * @default 'default'
25
+ */
26
+ layer?: PortalLayer;
18
27
  }
19
- declare const Portal: FC<PortalProps>;
20
- export default Portal;
28
+ export default function Portal({ children, container: containerProp, disablePortal, layer, }: PortalProps): import("react/jsx-runtime").JSX.Element | null;
package/Portal/Portal.js CHANGED
@@ -1,23 +1,38 @@
1
+ 'use client';
1
2
  import { jsx, Fragment } from 'react/jsx-runtime';
2
3
  import { useState, useEffect } from 'react';
3
4
  import { createPortal } from 'react-dom';
4
- import { getElement } from '../utils/getElement.js';
5
+ import { getContainer } from './portalRegistry.js';
5
6
 
6
- const Portal = (props) => {
7
- const { children, container, disablePortal = false } = props;
8
- const [portalElement, setPortalElement] = useState(() => disablePortal ? null : getElement(container));
7
+ function Portal({ children, container: containerProp, disablePortal = false, layer = 'default', }) {
8
+ const [container, setContainer] = useState(null);
9
+ // Extract ref.current for dependency tracking
10
+ const refCurrent = containerProp && 'current' in containerProp
11
+ ? containerProp.current
12
+ : undefined;
9
13
  useEffect(() => {
10
- if (!disablePortal) {
11
- setPortalElement(getElement(container) || document.body);
14
+ if (disablePortal)
15
+ return;
16
+ if (containerProp) {
17
+ // Handle RefObject
18
+ if ('current' in containerProp) {
19
+ setContainer(containerProp.current);
20
+ return;
21
+ }
22
+ // Handle HTMLElement
23
+ setContainer(containerProp);
24
+ return;
12
25
  }
13
- }, [container, disablePortal]);
26
+ const targetContainer = getContainer(layer);
27
+ setContainer(targetContainer);
28
+ }, [containerProp, disablePortal, layer, refCurrent]);
14
29
  /** This element is fully client side, so `return null` on server side */
15
30
  if (typeof window === 'undefined')
16
31
  return null;
17
- if (disablePortal || !portalElement) {
32
+ if (disablePortal || !container) {
18
33
  return jsx(Fragment, { children: children });
19
34
  }
20
- return createPortal(children, portalElement);
21
- };
35
+ return createPortal(children, container);
36
+ }
22
37
 
23
38
  export { Portal as default };
package/Portal/index.d.ts CHANGED
@@ -1 +1,4 @@
1
- export { PortalProps, default } from './Portal';
1
+ export type { PortalProps } from './Portal';
2
+ export type { PortalLayer } from './portalRegistry';
3
+ export { default } from './Portal';
4
+ export { getContainer, getRootElement, initializePortals, resetPortals, } from './portalRegistry';
package/Portal/index.js CHANGED
@@ -1 +1,2 @@
1
1
  export { default } from './Portal.js';
2
+ export { getContainer, getRootElement, initializePortals, resetPortals } from './portalRegistry.js';
@@ -0,0 +1,17 @@
1
+ export type PortalLayer = 'alert' | 'default';
2
+ /**
3
+ * Initialize portal containers.
4
+ * This function can be called manually in your app's entry point,
5
+ * or it will be called automatically when the first Portal is rendered.
6
+ *
7
+ * @param rootSelector - Optional root element or selector string.
8
+ * Defaults to document.body
9
+ */
10
+ export declare function initializePortals(rootSelector?: string | HTMLElement): void;
11
+ export declare function getContainer(layer: PortalLayer): HTMLElement | null;
12
+ export declare function getRootElement(): HTMLElement | null;
13
+ /**
14
+ * Reset portal system state. Only for testing purposes.
15
+ * @internal
16
+ */
17
+ export declare function resetPortals(): void;
@@ -0,0 +1,92 @@
1
+ // Module-level state
2
+ let containers = {
3
+ alert: null,
4
+ default: null,
5
+ };
6
+ let rootElement = null;
7
+ let initialized = false;
8
+ function findRootElement(rootProp) {
9
+ if (rootProp instanceof HTMLElement)
10
+ return rootProp;
11
+ if (typeof rootProp === 'string') {
12
+ const element = document.querySelector(rootProp);
13
+ if (element instanceof HTMLElement)
14
+ return element;
15
+ }
16
+ return document.body;
17
+ }
18
+ function observeAlertHeight() {
19
+ if (!containers.alert || !containers.default)
20
+ return;
21
+ const updatePortalTop = () => {
22
+ if (!containers.alert || !containers.default)
23
+ return;
24
+ containers.alert.offsetHeight;
25
+ };
26
+ // Use ResizeObserver to track alert container height changes
27
+ const observer = new ResizeObserver(updatePortalTop);
28
+ observer.observe(containers.alert);
29
+ // Initial update
30
+ updatePortalTop();
31
+ }
32
+ function createContainers() {
33
+ if (!rootElement)
34
+ return;
35
+ const alertContainer = document.createElement('div');
36
+ alertContainer.id = 'mzn-alert-container';
37
+ alertContainer.className = 'mzn-portal-alert';
38
+ const portalContainer = document.createElement('div');
39
+ portalContainer.id = 'mzn-portal-container';
40
+ portalContainer.className = 'mzn-portal-default';
41
+ rootElement.insertBefore(alertContainer, rootElement.firstChild);
42
+ rootElement.appendChild(portalContainer);
43
+ containers = {
44
+ alert: alertContainer,
45
+ default: portalContainer,
46
+ };
47
+ // Observe alert height changes and update portal container position
48
+ observeAlertHeight();
49
+ }
50
+ /**
51
+ * Initialize portal containers.
52
+ * This function can be called manually in your app's entry point,
53
+ * or it will be called automatically when the first Portal is rendered.
54
+ *
55
+ * @param rootSelector - Optional root element or selector string.
56
+ * Defaults to document.body
57
+ */
58
+ function initializePortals(rootSelector) {
59
+ if (initialized || typeof window === 'undefined')
60
+ return;
61
+ initialized = true;
62
+ rootElement = findRootElement(rootSelector);
63
+ if (!rootElement)
64
+ return;
65
+ createContainers();
66
+ }
67
+ function getContainer(layer) {
68
+ if (!initialized && typeof window !== 'undefined') {
69
+ initializePortals();
70
+ }
71
+ return containers[layer];
72
+ }
73
+ function getRootElement() {
74
+ if (!initialized && typeof window !== 'undefined') {
75
+ initializePortals();
76
+ }
77
+ return rootElement;
78
+ }
79
+ /**
80
+ * Reset portal system state. Only for testing purposes.
81
+ * @internal
82
+ */
83
+ function resetPortals() {
84
+ containers = {
85
+ alert: null,
86
+ default: null,
87
+ };
88
+ rootElement = null;
89
+ initialized = false;
90
+ }
91
+
92
+ export { getContainer, getRootElement, initializePortals, resetPortals };
@@ -1,53 +1,46 @@
1
- import { ProgressType, ProgressStatus } from '@mezzanine-ui/core/progress';
2
- import { Size } from '@mezzanine-ui/system/size';
1
+ import { ProgressStatus, ProgressType } from '@mezzanine-ui/core/progress';
2
+ import { IconDefinition } from '@mezzanine-ui/icons';
3
3
  import { TypographyProps } from '../Typography';
4
- import { IconProps } from '../Icon';
5
4
  import { NativeElementPropsWithoutKeyAndRef } from '../utils/jsx-types';
6
5
  export interface ProgressProps extends Omit<NativeElementPropsWithoutKeyAndRef<'div'>, 'title' | 'children'> {
7
6
  /**
8
- * Customize circle.
9
- * circle radius = (size - strokeWidth) / 2
10
- * @default size=80,strokeWidth=8
11
- */
12
- circleProps?: {
13
- size: number;
14
- strokeWidth: number;
7
+ * Custom icons for different statuses.
8
+ * If not provided, defaults to CheckedFilledIcon for success and DangerousFilledIcon for error.
9
+ */
10
+ icons?: {
11
+ /**
12
+ * Custom icon when status is 'error'.
13
+ * If not provided, defaults to DangerousFilledIcon.
14
+ */
15
+ error?: IconDefinition;
16
+ /**
17
+ * Custom icon when status is 'success'.
18
+ * If not provided, defaults to CheckedFilledIcon.
19
+ */
20
+ success?: IconDefinition;
15
21
  };
16
- /**
17
- * Icon props when status is 'error'.
18
- */
19
- errorIconProps?: Omit<IconProps, 'className'>;
20
22
  /**
21
23
  * The progress percent(0~100).
22
24
  * @default 0
23
25
  */
24
26
  percent?: number;
25
27
  /**
26
- * Percent text props when status is 'normal'.
28
+ * Percent text props when status is 'enabled'.
27
29
  */
28
30
  percentProps?: Omit<TypographyProps, 'className' | 'children'>;
29
31
  /**
30
32
  * Force mark the progress status. automatically set if not defined.
31
- * (normal(0~99) or success(100) depending on percent)
33
+ * (enabled(0~99) or success(100) depending on percent)
32
34
  */
33
35
  status?: ProgressStatus;
34
36
  /**
35
- * The size of line type progress.
36
- * @default 'medium'
37
- */
38
- size?: Size;
39
- /**
40
- * Display the progress info(percent and icon) or not.
41
- * @default true
42
- */
43
- showInfo?: boolean;
44
- /**
45
- * Icon props when status is 'success'.
37
+ * The tick of progress.
38
+ * @default 0
46
39
  */
47
- successIconProps?: Omit<IconProps, 'className'>;
40
+ tick?: number;
48
41
  /**
49
- * The type of progress.
50
- * @default 'line'
42
+ * The type of progress display.
43
+ * @default 'progress'
51
44
  */
52
45
  type?: ProgressType;
53
46
  }
@@ -1,9 +1,9 @@
1
- import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
- import { forwardRef, useContext } from 'react';
1
+ 'use client';
2
+ import { jsxs, jsx } from 'react/jsx-runtime';
3
3
  import { ProgressStatuses, ProgressTypes, progressClasses } from '@mezzanine-ui/core/progress';
4
- import { CheckCircleFilledIcon, CheckIcon, TimesCircleFilledIcon, TimesIcon } from '@mezzanine-ui/icons';
4
+ import { CheckedFilledIcon, DangerousFilledIcon } from '@mezzanine-ui/icons';
5
+ import { forwardRef, useMemo, useRef, useState, useEffect } from 'react';
5
6
  import Typography from '../Typography/Typography.js';
6
- import { MezzanineConfig } from '../Provider/context.js';
7
7
  import Icon from '../Icon/Icon.js';
8
8
  import cx from 'clsx';
9
9
 
@@ -11,24 +11,74 @@ import cx from 'clsx';
11
11
  * The react component for `mezzanine` progress.
12
12
  */
13
13
  const Progress = forwardRef(function Progress(props, ref) {
14
- const { size: globalSize } = useContext(MezzanineConfig);
15
- const { circleProps, className, errorIconProps, percent = 0, percentProps, showInfo = true, size = globalSize, status = percent < 100
16
- ? ProgressStatuses.normal
17
- : ProgressStatuses.success, successIconProps, type = ProgressTypes.line, ...rest } = props;
14
+ const { className, icons, percent = 0, percentProps, status = percent < 100
15
+ ? ProgressStatuses.enabled
16
+ : ProgressStatuses.success, tick, type = 'progress', } = props;
18
17
  const percentLimited = Math.max(0, Math.min(100, percent));
19
- const defaultSuccessIcon = type === ProgressTypes.line ? CheckCircleFilledIcon : CheckIcon;
20
- const defaultErrorIcon = type === ProgressTypes.line ? TimesCircleFilledIcon : TimesIcon;
21
- const renderInfo = (variant) => (jsx("div", { className: progressClasses.info, children: status === ProgressStatuses.normal ? (
22
- /** percent text */ jsx(Typography, { className: progressClasses.infoPercent, variant: variant, ...percentProps, children: `${percentLimited}%` })) : (jsxs(Fragment, { children: [status === ProgressStatuses.success && (jsx(Icon, { className: progressClasses.infoIcon, icon: defaultSuccessIcon, ...successIconProps })), status === ProgressStatuses.error && (jsx(Icon, { className: progressClasses.infoIcon, icon: defaultErrorIcon, ...errorIconProps }))] })) }));
23
- const renderLine = () => (jsxs(Fragment, { children: [jsx("div", { className: progressClasses.lineBg, children: jsx("div", { style: { width: `${percentLimited}%` } }) }), showInfo && renderInfo('input3')] }));
24
- const renderCircle = () => {
25
- const { size: circleSize = 80, strokeWidth = 8 } = circleProps || {};
26
- const radius = (circleSize - strokeWidth) / 2;
27
- const progressLength = percent > 0 ? percent * radius * Math.PI * 0.02 : 0.00001;
28
- const circleXY = circleSize / 2;
29
- return (jsxs(Fragment, { children: [jsxs("svg", { style: { boxSizing: 'border-box' }, height: circleSize, width: circleSize, children: [jsx("circle", { className: progressClasses.circleBg, cx: circleXY, cy: circleXY, r: radius, strokeWidth: strokeWidth }), jsx("circle", { className: progressClasses.circleFiller, cx: circleXY, cy: circleXY, r: radius, strokeWidth: strokeWidth, strokeDasharray: `${progressLength.toString()} 999` })] }), showInfo && renderInfo('button3')] }));
30
- };
31
- return (jsxs("div", { ref: ref, className: cx(progressClasses.host, className, status === ProgressStatuses.success && progressClasses.success, status === ProgressStatuses.error && progressClasses.error, type === ProgressTypes.line && progressClasses.lineVariant, type === ProgressTypes.circle && progressClasses.circleVariant, progressClasses.size(size)), ...rest, children: [type === ProgressTypes.line && renderLine(), type === ProgressTypes.circle && renderCircle()] }));
18
+ const icon = useMemo(() => {
19
+ var _a, _b;
20
+ if (status === ProgressStatuses.success) {
21
+ return (_a = icons === null || icons === void 0 ? void 0 : icons.success) !== null && _a !== void 0 ? _a : CheckedFilledIcon;
22
+ }
23
+ return (_b = icons === null || icons === void 0 ? void 0 : icons.error) !== null && _b !== void 0 ? _b : DangerousFilledIcon;
24
+ }, [status, icons]);
25
+ const isSuccessStatus = useMemo(() => status === ProgressStatuses.success && type === ProgressTypes.icon, [status, type]);
26
+ const isErrorStatus = useMemo(() => status === ProgressStatuses.error && type === ProgressTypes.icon, [status, type]);
27
+ const isActiveTick = useMemo(() => tick !== undefined && tick > 0 && tick < 100, [tick]);
28
+ const tickPosition = useMemo(() => {
29
+ if (!isActiveTick || tick === undefined)
30
+ return undefined;
31
+ return Math.max(0, Math.min(100, tick));
32
+ }, [isActiveTick, tick]);
33
+ const lineRef = useRef(null);
34
+ const [tickLeft, setTickLeft] = useState(undefined);
35
+ useEffect(() => {
36
+ if (!isActiveTick || tickPosition === undefined || !lineRef.current) {
37
+ setTickLeft(undefined);
38
+ return;
39
+ }
40
+ const lineElement = lineRef.current;
41
+ const containerElement = lineElement.parentElement;
42
+ if (!containerElement) {
43
+ setTickLeft(undefined);
44
+ return;
45
+ }
46
+ const updateTickPosition = () => {
47
+ const lineRect = lineElement.getBoundingClientRect();
48
+ const containerRect = containerElement.getBoundingClientRect();
49
+ // 計算 line 相對於容器的位置和寬度
50
+ const lineLeft = lineRect.left - containerRect.left;
51
+ const lineWidth = lineRect.width;
52
+ // 計算 tick 在 line 中的位置(百分比轉換為像素)
53
+ const tickOffsetInLine = (tickPosition / 100) * lineWidth;
54
+ // 計算 tick 相對於容器的絕對位置
55
+ const tickAbsoluteLeft = lineLeft + tickOffsetInLine;
56
+ // 轉換為百分比(相對於容器)
57
+ const containerWidth = containerRect.width;
58
+ const tickPercent = (tickAbsoluteLeft / containerWidth) * 100;
59
+ setTickLeft(`${tickPercent}%`);
60
+ };
61
+ // 初始計算
62
+ updateTickPosition();
63
+ window.addEventListener('resize', updateTickPosition);
64
+ if (typeof ResizeObserver !== 'undefined') {
65
+ const resizeObserver = new ResizeObserver(() => {
66
+ updateTickPosition();
67
+ });
68
+ resizeObserver.observe(lineElement);
69
+ resizeObserver.observe(containerElement);
70
+ return () => {
71
+ resizeObserver.disconnect();
72
+ window.removeEventListener('resize', updateTickPosition);
73
+ };
74
+ }
75
+ return () => {
76
+ window.removeEventListener('resize', updateTickPosition);
77
+ };
78
+ }, [isActiveTick, tickPosition, type, percentLimited]);
79
+ return (jsxs("div", { ref: ref, className: cx(progressClasses.host, progressClasses.type(type), status === ProgressStatuses.success && progressClasses.success, status === ProgressStatuses.error && progressClasses.error, className), children: [jsx("div", { ref: lineRef, className: progressClasses.lineVariant, children: jsx("i", { className: progressClasses.lineBg, style: { width: `${percentLimited}%` } }) }), type === ProgressTypes.percent && (jsx(Typography, { variant: "input", ...percentProps, className: progressClasses.infoPercent, children: `${percentLimited}%` })), (isSuccessStatus || isErrorStatus) && (jsx(Icon, { className: progressClasses.infoIcon, icon: icon })), isActiveTick && tickLeft !== undefined && (jsx("div", { className: progressClasses.tick, style: {
80
+ '--tick-position': tickLeft,
81
+ } }))] }));
32
82
  });
33
83
 
34
84
  export { Progress as default };
@@ -1,2 +1,3 @@
1
- export type { ProgressType, ProgressTypes, ProgressStatus, ProgressStatuses, } from '@mezzanine-ui/core/progress';
2
- export { ProgressProps, default } from './Progress';
1
+ export type { ProgressStatus, ProgressStatuses, ProgressType, } from '@mezzanine-ui/core/progress';
2
+ export { default } from './Progress';
3
+ export type { ProgressProps } from './Progress';
@@ -4,5 +4,6 @@ export interface ConfigProviderProps {
4
4
  children?: ReactNode;
5
5
  size?: MezzanineConfigContext['size'];
6
6
  }
7
+ /** @deprecated 未來不提供此設定 */
7
8
  declare function ConfigProvider(props: ConfigProviderProps): JSX.Element;
8
9
  export default ConfigProvider;
@@ -2,6 +2,7 @@ import { jsx } from 'react/jsx-runtime';
2
2
  import { useMemo } from 'react';
3
3
  import { MezzanineConfig } from './context.js';
4
4
 
5
+ /** @deprecated 未來不提供此設定 */
5
6
  function ConfigProvider(props) {
6
7
  const { children, size } = props;
7
8
  const context = useMemo(() => ({
@@ -1,3 +1,4 @@
1
+ 'use client';
1
2
  import { createContext } from 'react';
2
3
 
3
4
  const MezzanineConfig = createContext({
package/Radio/Radio.d.ts CHANGED
@@ -1,8 +1,10 @@
1
1
  import { ChangeEventHandler } from 'react';
2
2
  import { RadioSize } from '@mezzanine-ui/core/radio';
3
- import { InputCheckProps } from '../_internal/InputCheck';
3
+ import { IconDefinition } from '@mezzanine-ui/icons';
4
+ import { InputCheckProps } from '../_internal/InputCheck/InputCheck';
5
+ import { BaseInputProps } from '../Input';
4
6
  import { NativeElementPropsWithoutKeyAndRef } from '../utils/jsx-types';
5
- export interface RadioProps extends Omit<InputCheckProps, 'control' | 'htmlFor'> {
7
+ export interface RadioBaseProps extends Omit<InputCheckProps, 'control' | 'htmlFor'> {
6
8
  /**
7
9
  * Whether the radio is checked.
8
10
  */
@@ -26,7 +28,7 @@ export interface RadioProps extends Omit<InputCheckProps, 'control' | 'htmlFor'>
26
28
  onChange?: ChangeEventHandler<HTMLInputElement>;
27
29
  /**
28
30
  * The size of radio.
29
- * @default 'medium'
31
+ * @default 'main'
30
32
  */
31
33
  size?: RadioSize;
32
34
  /**
@@ -34,8 +36,39 @@ export interface RadioProps extends Omit<InputCheckProps, 'control' | 'htmlFor'>
34
36
  */
35
37
  value?: string;
36
38
  }
39
+ export interface RadioNormalProps extends RadioBaseProps {
40
+ icon?: never;
41
+ hint?: string;
42
+ /**
43
+ * The type of radio.
44
+ * @default 'radio'
45
+ */
46
+ type?: 'radio';
47
+ /**
48
+ * When `withInputConfig` is provided, an `Input` component is rendered alongside the
49
+ * radio using the passed props. By default, this input has a width of 120px unless you
50
+ * override it via the `width` property below.
51
+ */
52
+ withInputConfig?: Pick<BaseInputProps, 'aria-disabled' | 'disabled' | 'onChange' | 'placeholder' | 'value'> & {
53
+ width?: number;
54
+ };
55
+ }
56
+ export interface RadioSegmentProps extends RadioBaseProps {
57
+ /**
58
+ * The icon in radio prefix.
59
+ */
60
+ icon?: IconDefinition;
61
+ hint?: never;
62
+ /**
63
+ * The type of radio.
64
+ * @default 'radio'
65
+ */
66
+ type: 'segment';
67
+ withInputConfig?: never;
68
+ }
69
+ export type RadioProps = RadioNormalProps | RadioSegmentProps;
37
70
  /**
38
71
  * The react component for `mezzanine` radio.
39
72
  */
40
- declare const Radio: import("react").ForwardRefExoticComponent<RadioProps & import("react").RefAttributes<HTMLLabelElement>>;
73
+ declare const Radio: import("react").ForwardRefExoticComponent<RadioProps & import("react").RefAttributes<HTMLDivElement>>;
41
74
  export default Radio;