@mezzanine-ui/react 0.15.3 → 1.0.0-alpha.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 (490) hide show
  1. package/Accordion/Accordion.js +1 -2
  2. package/Accordion/AccordionControlContext.js +1 -0
  3. package/Accordion/AccordionDetails.js +2 -2
  4. package/Accordion/AccordionSummary.d.ts +1 -1
  5. package/Accordion/AccordionSummary.js +11 -12
  6. package/Accordion/index.d.ts +6 -3
  7. package/Alert/Alert.js +1 -2
  8. package/Alert/index.d.ts +3 -2
  9. package/AlertBanner/AlertBanner.d.ts +93 -0
  10. package/AlertBanner/AlertBanner.js +154 -0
  11. package/AlertBanner/index.d.ts +2 -0
  12. package/AlertBanner/index.js +1 -0
  13. package/Anchor/Anchor.js +2 -3
  14. package/Anchor/index.d.ts +2 -1
  15. package/AppBar/AppBar.js +1 -2
  16. package/AppBar/AppBarBrand.js +1 -2
  17. package/AppBar/AppBarMain.js +1 -2
  18. package/AppBar/AppBarSupport.js +1 -2
  19. package/AppBar/index.d.ts +8 -4
  20. package/{Overlay/Overlay.d.ts → Backdrop/Backdrop.d.ts} +12 -16
  21. package/Backdrop/Backdrop.js +40 -0
  22. package/Backdrop/index.d.ts +2 -0
  23. package/Backdrop/index.js +1 -0
  24. package/Badge/Badge.d.ts +20 -14
  25. package/Badge/Badge.js +15 -18
  26. package/Badge/BadgeContainer.d.ts +1 -1
  27. package/Badge/BadgeContainer.js +2 -3
  28. package/Badge/index.d.ts +3 -2
  29. package/Badge/typings.d.ts +48 -0
  30. package/Breadcrumb/Breadcrumb.d.ts +6 -0
  31. package/Breadcrumb/Breadcrumb.js +25 -0
  32. package/Breadcrumb/BreadcrumbItem.d.ts +4 -0
  33. package/Breadcrumb/BreadcrumbItem.js +45 -0
  34. package/Breadcrumb/index.d.ts +2 -0
  35. package/Breadcrumb/index.js +1 -0
  36. package/Breadcrumb/typings.d.ts +70 -0
  37. package/Button/Button.js +24 -19
  38. package/Button/ButtonGroup.d.ts +6 -28
  39. package/Button/ButtonGroup.js +8 -18
  40. package/Button/index.d.ts +6 -12
  41. package/Button/index.js +2 -3
  42. package/Button/typings.d.ts +11 -26
  43. package/Calendar/Calendar.d.ts +31 -2
  44. package/Calendar/Calendar.js +75 -21
  45. package/Calendar/CalendarCell.d.ts +4 -0
  46. package/Calendar/CalendarCell.js +3 -3
  47. package/Calendar/CalendarConfigProviderDayjs.d.ts +21 -0
  48. package/Calendar/CalendarConfigProviderDayjs.js +15 -0
  49. package/Calendar/CalendarConfigProviderLuxon.d.ts +21 -0
  50. package/Calendar/CalendarConfigProviderLuxon.js +15 -0
  51. package/Calendar/CalendarConfigProviderMoment.d.ts +21 -0
  52. package/Calendar/CalendarConfigProviderMoment.js +15 -0
  53. package/Calendar/CalendarContext.d.ts +14 -7
  54. package/Calendar/CalendarContext.js +8 -13
  55. package/Calendar/CalendarControls.d.ts +16 -0
  56. package/Calendar/CalendarControls.js +3 -7
  57. package/Calendar/CalendarDayOfWeek.js +4 -3
  58. package/Calendar/CalendarDays.d.ts +9 -1
  59. package/Calendar/CalendarDays.js +63 -38
  60. package/Calendar/CalendarFooterActions.d.ts +13 -0
  61. package/Calendar/CalendarFooterActions.js +14 -0
  62. package/Calendar/CalendarFooterControl.d.ts +16 -0
  63. package/Calendar/CalendarFooterControl.js +14 -0
  64. package/Calendar/CalendarHalfYears.d.ts +39 -0
  65. package/Calendar/CalendarHalfYears.js +62 -0
  66. package/Calendar/CalendarMonths.js +17 -5
  67. package/Calendar/CalendarQuarters.d.ts +37 -0
  68. package/Calendar/CalendarQuarters.js +64 -0
  69. package/Calendar/CalendarQuickSelect.d.ts +21 -0
  70. package/Calendar/CalendarQuickSelect.js +15 -0
  71. package/Calendar/CalendarWeeks.d.ts +1 -1
  72. package/Calendar/CalendarWeeks.js +89 -44
  73. package/Calendar/CalendarYears.js +14 -4
  74. package/Calendar/RangeCalendar.d.ts +59 -0
  75. package/Calendar/RangeCalendar.js +232 -0
  76. package/Calendar/index.d.ts +33 -10
  77. package/Calendar/index.js +7 -0
  78. package/Calendar/useCalendarControlModifiers.d.ts +4 -4
  79. package/Calendar/useCalendarControlModifiers.js +40 -8
  80. package/Calendar/useCalendarControls.d.ts +2 -0
  81. package/Calendar/useCalendarControls.js +19 -2
  82. package/Calendar/useCalendarModeStack.js +1 -0
  83. package/Calendar/useRangeCalendarControls.d.ts +18 -0
  84. package/Calendar/useRangeCalendarControls.js +115 -0
  85. package/Card/Card.js +1 -2
  86. package/Card/CardActions.js +2 -3
  87. package/Card/index.d.ts +4 -2
  88. package/Checkbox/CheckAll.d.ts +16 -6
  89. package/Checkbox/CheckAll.js +41 -28
  90. package/Checkbox/Checkbox.d.ts +100 -22
  91. package/Checkbox/Checkbox.js +74 -18
  92. package/Checkbox/CheckboxGroup.d.ts +100 -18
  93. package/Checkbox/CheckboxGroup.js +169 -25
  94. package/Checkbox/CheckboxGroupContext.d.ts +0 -2
  95. package/Checkbox/CheckboxGroupContext.js +1 -0
  96. package/Checkbox/index.d.ts +16 -4
  97. package/Checkbox/index.js +6 -2
  98. package/Checkbox/typings.d.ts +37 -0
  99. package/ClearActions/ClearActions.d.ts +41 -0
  100. package/ClearActions/ClearActions.js +23 -0
  101. package/ClearActions/index.d.ts +3 -0
  102. package/ClearActions/index.js +5 -0
  103. package/ConfirmActions/ConfirmActions.d.ts +2 -1
  104. package/ConfirmActions/ConfirmActions.js +1 -2
  105. package/ConfirmActions/index.d.ts +2 -1
  106. package/DatePicker/DatePicker.d.ts +12 -1
  107. package/DatePicker/DatePicker.js +42 -11
  108. package/DatePicker/DatePickerCalendar.d.ts +3 -6
  109. package/DatePicker/DatePickerCalendar.js +38 -39
  110. package/DatePicker/index.d.ts +4 -2
  111. package/DateRangePicker/DateRangePicker.d.ts +18 -2
  112. package/DateRangePicker/DateRangePicker.js +144 -102
  113. package/DateRangePicker/DateRangePickerCalendar.d.ts +13 -9
  114. package/DateRangePicker/DateRangePickerCalendar.js +8 -96
  115. package/DateRangePicker/index.d.ts +6 -3
  116. package/DateRangePicker/useDateRangeCalendarControls.js +11 -6
  117. package/DateRangePicker/useDateRangePickerValue.d.ts +38 -15
  118. package/DateRangePicker/useDateRangePickerValue.js +142 -63
  119. package/DateTimePicker/DateTimePicker.d.ts +31 -10
  120. package/DateTimePicker/DateTimePicker.js +180 -96
  121. package/DateTimePicker/index.d.ts +2 -2
  122. package/DateTimePicker/index.js +0 -1
  123. package/Drawer/Drawer.js +3 -4
  124. package/Drawer/index.d.ts +2 -1
  125. package/Dropdown/Dropdown.js +13 -24
  126. package/Dropdown/index.d.ts +2 -1
  127. package/Empty/Empty.d.ts +1 -16
  128. package/Empty/Empty.js +37 -9
  129. package/Empty/icons/EmptyMainInitialDataIcon.d.ts +4 -0
  130. package/Empty/icons/EmptyMainInitialDataIcon.js +9 -0
  131. package/Empty/icons/EmptyMainResultIcon.d.ts +4 -0
  132. package/Empty/icons/EmptyMainResultIcon.js +9 -0
  133. package/Empty/icons/EmptyMainSystemIcon.d.ts +4 -0
  134. package/Empty/icons/EmptyMainSystemIcon.js +9 -0
  135. package/Empty/index.d.ts +2 -1
  136. package/Empty/typings.d.ts +52 -0
  137. package/Form/FormControlContext.js +1 -0
  138. package/Form/FormField.js +1 -2
  139. package/Form/FormHintText.d.ts +18 -0
  140. package/Form/FormHintText.js +17 -0
  141. package/Form/FormLabel.js +2 -2
  142. package/Form/index.d.ts +9 -5
  143. package/Form/index.js +1 -1
  144. package/Form/useAutoCompleteValueControl.js +2 -0
  145. package/Form/useCheckboxControlValue.js +0 -1
  146. package/Form/useInputWithClearControlValue.d.ts +1 -1
  147. package/Form/useInputWithTagsModeValue.d.ts +1 -1
  148. package/Form/useSelectValueControl.js +2 -0
  149. package/Icon/Icon.js +1 -2
  150. package/InlineMessage/InlineMessage.d.ts +33 -0
  151. package/InlineMessage/InlineMessage.js +42 -0
  152. package/InlineMessage/InlineMessageGroup.d.ts +24 -0
  153. package/InlineMessage/InlineMessageGroup.js +21 -0
  154. package/InlineMessage/index.d.ts +4 -0
  155. package/InlineMessage/index.js +2 -0
  156. package/Input/ActionButton/ActionButton.d.ts +26 -0
  157. package/Input/ActionButton/ActionButton.js +14 -0
  158. package/Input/ActionButton/index.d.ts +2 -0
  159. package/Input/ActionButton/index.js +1 -0
  160. package/Input/Input.d.ts +147 -42
  161. package/Input/Input.js +196 -31
  162. package/Input/PasswordStrengthIndicator/PasswordStrengthIndicator.d.ts +31 -0
  163. package/Input/PasswordStrengthIndicator/PasswordStrengthIndicator.js +18 -0
  164. package/Input/PasswordStrengthIndicator/index.d.ts +2 -0
  165. package/Input/PasswordStrengthIndicator/index.js +1 -0
  166. package/Input/SelectButton/SelectButton.d.ts +20 -0
  167. package/Input/SelectButton/SelectButton.js +21 -0
  168. package/Input/SelectButton/index.d.ts +2 -0
  169. package/Input/SelectButton/index.js +1 -0
  170. package/Input/SpinnerButton/SpinnerButton.d.ts +19 -0
  171. package/Input/SpinnerButton/SpinnerButton.js +14 -0
  172. package/Input/SpinnerButton/index.d.ts +2 -0
  173. package/Input/SpinnerButton/index.js +1 -0
  174. package/Input/index.d.ts +3 -2
  175. package/Menu/Menu.js +2 -2
  176. package/Menu/MenuDivider.js +1 -2
  177. package/Menu/MenuItem.js +1 -2
  178. package/Menu/MenuItemGroup.js +1 -2
  179. package/Menu/index.d.ts +8 -4
  180. package/Message/Message.d.ts +6 -4
  181. package/Message/Message.js +87 -11
  182. package/Message/MessageTimerController.d.ts +14 -0
  183. package/Message/MessageTimerController.js +27 -0
  184. package/Message/index.d.ts +3 -2
  185. package/Modal/Modal.js +3 -4
  186. package/Modal/ModalActions.js +2 -2
  187. package/Modal/ModalBody.js +1 -2
  188. package/Modal/ModalControl.js +1 -0
  189. package/Modal/ModalFooter.js +1 -2
  190. package/Modal/ModalHeader.js +3 -3
  191. package/Modal/index.d.ts +10 -5
  192. package/Modal/useModalContainer.d.ts +1 -1
  193. package/Modal/useModalContainer.js +2 -4
  194. package/Navigation/Navigation.js +38 -36
  195. package/Navigation/NavigationContext.js +1 -0
  196. package/Navigation/NavigationItem.js +2 -2
  197. package/Navigation/NavigationSubMenu.js +17 -28
  198. package/Navigation/index.d.ts +8 -4
  199. package/Notification/Notification.js +1 -3
  200. package/Notification/index.d.ts +3 -2
  201. package/Notifier/NotifierManager.d.ts +16 -3
  202. package/Notifier/NotifierManager.js +60 -18
  203. package/Notifier/createNotifier.d.ts +9 -0
  204. package/Notifier/createNotifier.js +3 -2
  205. package/Notifier/typings.d.ts +3 -1
  206. package/OverflowTooltip/OverflowCounterTag.d.ts +12 -0
  207. package/OverflowTooltip/OverflowCounterTag.js +48 -0
  208. package/OverflowTooltip/OverflowTooltip.d.ts +34 -0
  209. package/OverflowTooltip/OverflowTooltip.js +53 -0
  210. package/OverflowTooltip/index.d.ts +2 -0
  211. package/OverflowTooltip/index.js +2 -0
  212. package/PageFooter/PageFooter.d.ts +73 -8
  213. package/PageFooter/PageFooter.js +35 -5
  214. package/PageFooter/index.d.ts +2 -1
  215. package/PageHeader/PageHeader.d.ts +36 -0
  216. package/PageHeader/PageHeader.js +65 -0
  217. package/PageHeader/index.d.ts +2 -0
  218. package/PageHeader/index.js +1 -0
  219. package/PageToolbar/PageToolbar.d.ts +67 -0
  220. package/PageToolbar/PageToolbar.js +114 -0
  221. package/PageToolbar/index.d.ts +2 -0
  222. package/PageToolbar/index.js +1 -0
  223. package/Pagination/Pagination.d.ts +23 -29
  224. package/Pagination/Pagination.js +4 -6
  225. package/Pagination/PaginationItem.d.ts +1 -1
  226. package/Pagination/PaginationItem.js +7 -5
  227. package/Pagination/PaginationJumper.d.ts +7 -9
  228. package/Pagination/PaginationJumper.js +4 -7
  229. package/Pagination/PaginationPageSize.d.ts +8 -11
  230. package/Pagination/PaginationPageSize.js +6 -6
  231. package/Pagination/index.d.ts +8 -4
  232. package/Pagination/usePagination.d.ts +3 -1
  233. package/Pagination/usePagination.js +30 -21
  234. package/Picker/FormattedInput.d.ts +17 -0
  235. package/Picker/FormattedInput.js +74 -0
  236. package/Picker/MaskFormat.d.ts +39 -0
  237. package/Picker/MaskFormat.js +94 -0
  238. package/Picker/PickerTrigger.d.ts +14 -4
  239. package/Picker/PickerTrigger.js +18 -4
  240. package/Picker/PickerTriggerWithSeparator.d.ts +124 -0
  241. package/Picker/PickerTriggerWithSeparator.js +80 -0
  242. package/Picker/RangePickerTrigger.d.ts +57 -6
  243. package/Picker/RangePickerTrigger.js +66 -9
  244. package/Picker/formatUtils.d.ts +34 -0
  245. package/Picker/formatUtils.js +124 -0
  246. package/Picker/index.d.ts +17 -6
  247. package/Picker/index.js +4 -1
  248. package/Picker/useDateInputFormatter.d.ts +52 -0
  249. package/Picker/useDateInputFormatter.js +382 -0
  250. package/Picker/usePickerDocumentEventClose.d.ts +3 -3
  251. package/Picker/usePickerValue.d.ts +2 -3
  252. package/Picker/usePickerValue.js +8 -13
  253. package/Picker/useTabKeyClose.d.ts +1 -1
  254. package/Popconfirm/Popconfirm.js +3 -4
  255. package/Popconfirm/index.d.ts +2 -1
  256. package/Popover/Popover.js +5 -10
  257. package/Popover/index.d.ts +2 -1
  258. package/Popper/Popper.d.ts +15 -10
  259. package/Popper/Popper.js +89 -19
  260. package/Popper/index.d.ts +2 -1
  261. package/Portal/Portal.d.ts +13 -5
  262. package/Portal/Portal.js +26 -12
  263. package/Portal/index.d.ts +4 -1
  264. package/Portal/index.js +1 -0
  265. package/Portal/portalRegistry.d.ts +17 -0
  266. package/Portal/portalRegistry.js +92 -0
  267. package/Progress/Progress.d.ts +23 -30
  268. package/Progress/Progress.js +72 -23
  269. package/Progress/index.d.ts +3 -2
  270. package/Provider/ConfigProvider.d.ts +2 -1
  271. package/Provider/ConfigProvider.js +1 -0
  272. package/Provider/context.js +1 -0
  273. package/Radio/Radio.d.ts +1 -1
  274. package/Radio/Radio.js +3 -3
  275. package/Radio/RadioGroup.d.ts +1 -1
  276. package/Radio/RadioGroup.js +2 -3
  277. package/Radio/RadioGroupContext.js +1 -0
  278. package/Radio/index.d.ts +4 -2
  279. package/ResultState/ResultState.d.ts +52 -0
  280. package/ResultState/ResultState.js +24 -0
  281. package/ResultState/index.d.ts +2 -0
  282. package/ResultState/index.js +1 -0
  283. package/Select/AutoComplete.d.ts +3 -3
  284. package/Select/AutoComplete.js +6 -13
  285. package/Select/Option.js +2 -2
  286. package/Select/Select.d.ts +1 -1
  287. package/Select/Select.js +3 -3
  288. package/Select/SelectControlContext.js +1 -0
  289. package/Select/SelectTrigger.d.ts +1 -87
  290. package/Select/SelectTrigger.js +27 -23
  291. package/Select/SelectTriggerTags.d.ts +1 -1
  292. package/Select/SelectTriggerTags.js +48 -20
  293. package/Select/TreeSelect.d.ts +1 -1
  294. package/Select/TreeSelect.js +3 -3
  295. package/Select/index.d.ts +14 -7
  296. package/Select/typings.d.ts +99 -0
  297. package/Select/useSelectTriggerTags.d.ts +15 -8
  298. package/Select/useSelectTriggerTags.js +79 -43
  299. package/Selection/Selection.d.ts +98 -0
  300. package/Selection/Selection.js +46 -0
  301. package/Selection/index.d.ts +12 -0
  302. package/Selection/index.js +5 -0
  303. package/Skeleton/Skeleton.d.ts +10 -3
  304. package/Skeleton/Skeleton.js +13 -6
  305. package/Skeleton/index.d.ts +2 -1
  306. package/Slider/Slider.d.ts +44 -7
  307. package/Slider/Slider.js +18 -15
  308. package/Slider/index.d.ts +5 -3
  309. package/Slider/useSlider.d.ts +1 -1
  310. package/Slider/useSlider.js +1 -1
  311. package/Spin/Spin.d.ts +39 -0
  312. package/{Loading/Loading.js → Spin/Spin.js} +9 -10
  313. package/Spin/index.d.ts +2 -0
  314. package/Spin/index.js +1 -0
  315. package/Stepper/Step.d.ts +1 -35
  316. package/Stepper/Step.js +44 -10
  317. package/Stepper/Stepper.d.ts +1 -14
  318. package/Stepper/Stepper.js +50 -17
  319. package/Stepper/index.d.ts +5 -2
  320. package/Stepper/index.js +1 -0
  321. package/Stepper/typings.d.ts +77 -0
  322. package/Stepper/useStepDistance.d.ts +10 -0
  323. package/Stepper/useStepDistance.js +81 -0
  324. package/Stepper/useStepper.d.ts +21 -0
  325. package/Stepper/useStepper.js +26 -0
  326. package/Table/Table.d.ts +1 -1
  327. package/Table/Table.js +3 -4
  328. package/Table/TableBody.js +3 -2
  329. package/Table/TableBodyRow.js +1 -0
  330. package/Table/TableCell.js +1 -2
  331. package/Table/TableContext.js +1 -0
  332. package/Table/TableExpandedTable.js +1 -0
  333. package/Table/TableHeader.js +1 -0
  334. package/Table/draggable/useTableDraggable.d.ts +1 -1
  335. package/Table/editable/TableEditRenderWrapper.js +1 -0
  336. package/Table/expandable/TableExpandable.js +1 -1
  337. package/Table/index.d.ts +7 -4
  338. package/Table/pagination/TablePagination.d.ts +1 -1
  339. package/Table/pagination/TablePagination.js +1 -0
  340. package/Table/pagination/useTablePagination.d.ts +1 -1
  341. package/Table/pagination/useTablePagination.js +1 -0
  342. package/Table/refresh/TableRefresh.js +4 -3
  343. package/Table/rowSelection/TableRowSelection.js +3 -2
  344. package/Table/sorting/TableSortingIcon.js +2 -1
  345. package/Table/sorting/useTableSorting.js +1 -0
  346. package/Table/useTableFetchMore.js +1 -1
  347. package/Table/useTableScroll.d.ts +44 -14
  348. package/Table/useTableScroll.js +10 -8
  349. package/Tabs/Tab.js +1 -2
  350. package/Tabs/TabPane.js +2 -2
  351. package/Tabs/Tabs.js +10 -6
  352. package/Tabs/index.d.ts +6 -3
  353. package/Tabs/useTabsOverflow.d.ts +1 -1
  354. package/Tabs/useTabsOverflow.js +4 -3
  355. package/Tag/Tag.d.ts +2 -25
  356. package/Tag/Tag.js +24 -15
  357. package/Tag/TagGroup.d.ts +12 -0
  358. package/Tag/TagGroup.js +41 -0
  359. package/Tag/index.d.ts +2 -1
  360. package/Tag/typings.d.ts +78 -0
  361. package/TextField/TextField.d.ts +78 -20
  362. package/TextField/TextField.js +59 -24
  363. package/TextField/index.d.ts +2 -1
  364. package/Textarea/Textarea.d.ts +19 -51
  365. package/Textarea/Textarea.js +14 -21
  366. package/Textarea/index.d.ts +2 -2
  367. package/TimePanel/TimePanel.d.ts +1 -22
  368. package/TimePanel/TimePanel.js +32 -28
  369. package/TimePanel/TimePanelAction.d.ts +2 -8
  370. package/TimePanel/TimePanelAction.js +3 -4
  371. package/TimePanel/TimePanelColumn.d.ts +0 -13
  372. package/TimePanel/TimePanelColumn.js +10 -13
  373. package/TimePanel/index.d.ts +6 -3
  374. package/TimePicker/TimePicker.d.ts +10 -1
  375. package/TimePicker/TimePicker.js +87 -37
  376. package/TimePicker/TimePickerPanel.d.ts +1 -2
  377. package/TimePicker/TimePickerPanel.js +3 -4
  378. package/TimePicker/index.d.ts +4 -2
  379. package/Toggle/Toggle.d.ts +46 -0
  380. package/Toggle/Toggle.js +29 -0
  381. package/Toggle/index.d.ts +3 -0
  382. package/Toggle/index.js +1 -0
  383. package/Tooltip/Tooltip.d.ts +14 -3
  384. package/Tooltip/Tooltip.js +53 -18
  385. package/Tooltip/index.d.ts +2 -1
  386. package/Tooltip/useDelayMouseEnterLeave.d.ts +1 -2
  387. package/Tooltip/useDelayMouseEnterLeave.js +10 -13
  388. package/Transition/Collapse.d.ts +2 -0
  389. package/Transition/Collapse.js +7 -12
  390. package/Transition/Fade.js +5 -6
  391. package/Transition/Rotate.d.ts +42 -0
  392. package/Transition/Rotate.js +30 -0
  393. package/Transition/Scale.d.ts +13 -0
  394. package/Transition/{Grow.js → Scale.js} +19 -17
  395. package/Transition/Slide.d.ts +7 -0
  396. package/Transition/{Zoom.js → Slide.js} +14 -13
  397. package/Transition/SlideFade.d.ts +3 -0
  398. package/Transition/SlideFade.js +6 -6
  399. package/Transition/Transition.d.ts +3 -3
  400. package/Transition/Translate.d.ts +14 -0
  401. package/Transition/Translate.js +94 -0
  402. package/Transition/index.d.ts +16 -6
  403. package/Transition/index.js +4 -2
  404. package/Transition/useAutoTransitionDuration.d.ts +1 -1
  405. package/Transition/useAutoTransitionDuration.js +3 -3
  406. package/Transition/useSetNodeTransition.js +0 -2
  407. package/Tree/Tree.js +1 -2
  408. package/Tree/TreeNode.js +8 -8
  409. package/Tree/TreeNodeList.js +1 -2
  410. package/Tree/index.d.ts +10 -5
  411. package/Tree/typings.d.ts +2 -2
  412. package/Typography/Typography.d.ts +6 -9
  413. package/Typography/Typography.js +7 -9
  414. package/Typography/index.d.ts +4 -7
  415. package/Upload/Upload.d.ts +175 -0
  416. package/Upload/Upload.js +279 -0
  417. package/Upload/UploadItem.d.ts +82 -0
  418. package/Upload/UploadItem.js +118 -0
  419. package/Upload/UploadPictureCard.d.ts +110 -0
  420. package/Upload/UploadPictureCard.js +101 -0
  421. package/Upload/Uploader.d.ts +161 -0
  422. package/Upload/Uploader.js +120 -0
  423. package/Upload/index.d.ts +8 -6
  424. package/Upload/index.js +4 -5
  425. package/Upload/upload-utils.d.ts +41 -0
  426. package/Upload/upload-utils.js +65 -0
  427. package/_internal/InputCheck/InputCheck.js +1 -2
  428. package/_internal/InputCheck/InputCheckGroup.js +1 -2
  429. package/_internal/InputCheck/index.d.ts +4 -2
  430. package/_internal/InputTriggerPopper/InputTriggerPopper.js +16 -27
  431. package/_internal/InputTriggerPopper/index.d.ts +2 -1
  432. package/_internal/SlideFadeOverlay/SlideFadeOverlay.d.ts +2 -2
  433. package/_internal/SlideFadeOverlay/SlideFadeOverlay.js +5 -29
  434. package/_internal/SlideFadeOverlay/index.d.ts +2 -1
  435. package/_internal/SlideFadeOverlay/useTopStack.js +1 -0
  436. package/dayjs.d.ts +21 -0
  437. package/dayjs.js +2 -0
  438. package/hooks/useClickAway.d.ts +1 -1
  439. package/hooks/useComposeRefs.js +1 -1
  440. package/hooks/useLastCallback.js +3 -1
  441. package/hooks/useScrollLock.d.ts +28 -0
  442. package/hooks/useScrollLock.js +134 -0
  443. package/index.d.ts +126 -58
  444. package/index.js +103 -90
  445. package/luxon.d.ts +21 -0
  446. package/luxon.js +2 -0
  447. package/moment.d.ts +21 -0
  448. package/moment.js +2 -0
  449. package/package.json +16 -20
  450. package/utils/composeRefs.js +0 -1
  451. package/utils/get-css-variable-value.d.ts +1 -0
  452. package/utils/get-css-variable-value.js +9 -0
  453. package/utils/jsx-types.d.ts +1 -1
  454. package/Button/IconButton.d.ts +0 -21
  455. package/Button/IconButton.js +0 -13
  456. package/DateTimePicker/DateTimePickerPanel.d.ts +0 -28
  457. package/DateTimePicker/DateTimePickerPanel.js +0 -50
  458. package/Form/FormMessage.d.ts +0 -7
  459. package/Form/FormMessage.js +0 -19
  460. package/Form/useInputWithTagsModeValue.js +0 -86
  461. package/Loading/Loading.d.ts +0 -33
  462. package/Loading/index.d.ts +0 -1
  463. package/Loading/index.js +0 -1
  464. package/Overlay/Overlay.js +0 -32
  465. package/Overlay/index.d.ts +0 -1
  466. package/Overlay/index.js +0 -1
  467. package/Picker/useRangePickerValue.d.ts +0 -23
  468. package/Picker/useRangePickerValue.js +0 -99
  469. package/Switch/Switch.d.ts +0 -43
  470. package/Switch/Switch.js +0 -29
  471. package/Switch/index.d.ts +0 -2
  472. package/Switch/index.js +0 -1
  473. package/Transition/Grow.d.ts +0 -12
  474. package/Transition/Zoom.d.ts +0 -7
  475. package/Upload/UploadButton.d.ts +0 -9
  476. package/Upload/UploadButton.js +0 -24
  477. package/Upload/UploadInput.d.ts +0 -20
  478. package/Upload/UploadInput.js +0 -24
  479. package/Upload/UploadPicture.d.ts +0 -49
  480. package/Upload/UploadPicture.js +0 -52
  481. package/Upload/UploadPictureBlock.d.ts +0 -20
  482. package/Upload/UploadPictureBlock.js +0 -82
  483. package/Upload/UploadPictureWall.d.ts +0 -81
  484. package/Upload/UploadPictureWall.js +0 -169
  485. package/Upload/UploadPictureWallItem.d.ts +0 -15
  486. package/Upload/UploadPictureWallItem.js +0 -18
  487. package/Upload/UploadResult.d.ts +0 -35
  488. package/Upload/UploadResult.js +0 -30
  489. package/utils/scroll-lock.d.ts +0 -2
  490. package/utils/scroll-lock.js +0 -24
package/Input/Input.js CHANGED
@@ -1,50 +1,215 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { forwardRef, useContext, useRef } from 'react';
1
+ 'use client';
2
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
3
+ import { forwardRef, useRef, useState, useCallback } from 'react';
3
4
  import { inputClasses } from '@mezzanine-ui/core/input';
4
- import { selectClasses } from '@mezzanine-ui/core/select';
5
5
  import { useComposeRefs } from '../hooks/useComposeRefs.js';
6
6
  import { useInputWithClearControlValue } from '../Form/useInputWithClearControlValue.js';
7
- import { useInputWithTagsModeValue } from '../Form/useInputWithTagsModeValue.js';
8
- import { MezzanineConfig } from '../Provider/context.js';
7
+ import { EyeIcon, EyeInvisibleIcon, SearchIcon } from '@mezzanine-ui/icons';
8
+ import Icon from '../Icon/Icon.js';
9
+ import SelectButton from './SelectButton/SelectButton.js';
10
+ import ActionButton from './ActionButton/ActionButton.js';
11
+ import SpinnerButton from './SpinnerButton/SpinnerButton.js';
9
12
  import TextField from '../TextField/TextField.js';
10
- import Tag from '../Tag/Tag.js';
11
- import { FormControlContext } from '../Form/FormControlContext.js';
13
+ import PasswordStrengthIndicator from './PasswordStrengthIndicator/PasswordStrengthIndicator.js';
12
14
  import cx from 'clsx';
13
15
 
14
16
  /**
15
17
  * The react component for `mezzanine` input.
16
18
  */
17
19
  const Input = forwardRef(function Input(props, ref) {
18
- const { size: globalSize } = useContext(MezzanineConfig);
19
- const { disabled: disabledFromFormControl, fullWidth: fullWidthFromFormControl, required: requiredFromFormControl, severity, } = useContext(FormControlContext) || {};
20
- const { className, clearable = false, defaultValue, disabled = disabledFromFormControl || false, error = severity === 'error' || false, fullWidth = fullWidthFromFormControl || false, inputProps, inputRef: inputRefProp, mode = 'default', onChange: onChangeProp, placeholder, prefix, readOnly = false, required = requiredFromFormControl || false, size = globalSize, suffix, tagsProps, value: valueProp, } = props;
21
- const { initialTagsValue, inputPosition = 'bottom', maxTagsLength, onTagsChange, } = tagsProps || {};
22
- const tagsMode = mode === 'tags';
20
+ const { active, className, defaultValue, disabled = false, error = false, formatter, fullWidth = true, id, inputProps, inputType, inputRef: inputRefProp, name, onChange: onChangeProp, parser, placeholder, readonly, size = 'main', typing, variant = 'base', value: valueProp, } = props;
23
21
  const inputRef = useRef(null);
24
- const [value, onChange, onClear] = useInputWithClearControlValue({
22
+ const [showPassword, setShowPassword] = useState(false);
23
+ const [value, onChange, onClearFromHook] = useInputWithClearControlValue({
25
24
  defaultValue,
26
25
  onChange: onChangeProp,
27
26
  ref: inputRef,
28
27
  value: valueProp,
29
28
  });
30
- const [{ tags, tagsReachedMax }, tagsModeOnChange, tagsModeOnClear, tagsModeOnRemove, onKeyDown,] = useInputWithTagsModeValue({
31
- defaultValue,
32
- initialTagsValue,
33
- maxTagsLength,
34
- onTagsChange,
35
- ref: inputRef,
36
- skip: !tagsMode,
37
- tagValueMaxLength: inputProps === null || inputProps === void 0 ? void 0 : inputProps.maxLength,
38
- value: valueProp,
39
- });
29
+ // Handle formatter/parser logic
30
+ const handleChange = useCallback((event) => {
31
+ let newValue = event.target.value;
32
+ // Parse the formatted value back to raw value if parser is provided
33
+ if (parser) {
34
+ newValue = parser(newValue);
35
+ }
36
+ // Create a new event with parsed value for onChange callback
37
+ const syntheticEvent = {
38
+ ...event,
39
+ target: {
40
+ ...event.target,
41
+ value: newValue,
42
+ },
43
+ };
44
+ onChange(syntheticEvent);
45
+ }, [parser, onChange]);
46
+ // Format the display value
47
+ const displayValue = formatter ? formatter(value) : value;
40
48
  const composedInputRef = useComposeRefs([inputRefProp, inputRef]);
41
- const active = !!value;
42
- const mountInput = !tagsMode || !tagsReachedMax;
43
- return (jsxs(TextField, { ref: ref, active: active, className: cx(inputClasses.host, tagsMode && inputClasses.tagsMode, inputPosition === 'top' && inputClasses.tagsModeInputOnTop, className), clearable: clearable, disabled: disabled, error: error, fullWidth: fullWidth, onClear: tagsMode ? tagsModeOnClear : onClear, prefix: mountInput ? prefix : undefined, suffix: mountInput ? suffix : undefined, size: size, children: [tagsMode && (jsx("div", { className: selectClasses.triggerTags, children: tags.map((tag) => (jsx(Tag, { closable: true, disabled: disabled, size: size, onClose: (e) => {
44
- e.stopPropagation();
45
- tagsModeOnRemove(tag);
46
- }, children: tag }, tag))) })), mountInput && (jsx("input", { ...inputProps, "aria-disabled": disabled, "aria-multiline": false, "aria-readonly": readOnly, "aria-required": required, disabled: disabled, onChange: tagsMode ? tagsModeOnChange : onChange, onKeyDown: tagsMode ? onKeyDown : inputProps === null || inputProps === void 0 ? void 0 : inputProps.onKeyDown, placeholder: placeholder, readOnly: readOnly, ref: composedInputRef, required: required, value: tagsMode ? undefined : value }))] }));
49
+ // Determine input type and props based on variant
50
+ let defaultInputType = 'text';
51
+ let prefix = undefined;
52
+ let suffix = undefined;
53
+ let clearable = false;
54
+ let onClear = undefined;
55
+ let inputStyle = {};
56
+ let defaultInputProps = {};
57
+ let prefixExternalButton = undefined;
58
+ let suffixExternalButton = undefined;
59
+ let showPasswordStrengthIndicator = false;
60
+ let passwordStrengthIndicatorProps = undefined;
61
+ // Handle different input types with type narrowing
62
+ switch (variant) {
63
+ case 'base': {
64
+ const baseProps = props;
65
+ if (baseProps.clearable) {
66
+ clearable = baseProps.clearable;
67
+ onClear = baseProps.onClear || onClearFromHook;
68
+ }
69
+ break;
70
+ }
71
+ case 'affix': {
72
+ const affixProps = props;
73
+ if (affixProps.clearable) {
74
+ clearable = affixProps.clearable;
75
+ onClear = affixProps.onClear || onClearFromHook;
76
+ }
77
+ prefix = affixProps.prefix;
78
+ suffix = affixProps.suffix;
79
+ break;
80
+ }
81
+ case 'search': {
82
+ const searchProps = props;
83
+ // 預設為可清除
84
+ clearable =
85
+ typeof searchProps.clearable !== 'undefined'
86
+ ? searchProps.clearable
87
+ : true;
88
+ if (clearable) {
89
+ onClear = searchProps.onClear || onClearFromHook;
90
+ }
91
+ // 預設有 search icon 在前綴
92
+ prefix = jsx(Icon, { icon: SearchIcon });
93
+ break;
94
+ }
95
+ case 'number': {
96
+ const numberProps = props;
97
+ const { step = 1, max, min } = numberProps;
98
+ // Input type 應是 number
99
+ defaultInputType = 'number';
100
+ // 額外的屬性
101
+ defaultInputProps = {
102
+ min: min,
103
+ max: max,
104
+ step: step,
105
+ };
106
+ break;
107
+ }
108
+ case 'unit': {
109
+ const unitProps = props;
110
+ const { step = 1, max, min, onSpinUp, onSpinDown } = unitProps;
111
+ // 預設置右對齊
112
+ inputStyle = { textAlign: 'right' };
113
+ // 允許填入 prefix/suffix
114
+ prefix = unitProps.prefix;
115
+ suffix = unitProps.suffix;
116
+ defaultInputProps = {
117
+ min: min,
118
+ max: max,
119
+ step: step,
120
+ };
121
+ if (unitProps.showSpinner) {
122
+ const handleSpinUp = () => {
123
+ const currentValue = parseFloat(value || '0');
124
+ const newValue = currentValue + step;
125
+ if (typeof max === 'undefined' || newValue <= max) {
126
+ onChange({
127
+ target: { value: String(newValue) },
128
+ });
129
+ }
130
+ onSpinUp === null || onSpinUp === void 0 ? void 0 : onSpinUp();
131
+ };
132
+ const handleSpinDown = () => {
133
+ const currentValue = parseFloat(value || '0');
134
+ const newValue = currentValue - step;
135
+ if (typeof min === 'undefined' || newValue >= min) {
136
+ onChange({
137
+ target: { value: String(newValue) },
138
+ });
139
+ }
140
+ onSpinDown === null || onSpinDown === void 0 ? void 0 : onSpinDown();
141
+ };
142
+ suffix = (jsxs(Fragment, { children: [unitProps.suffix, jsxs("div", { className: inputClasses.spinners, children: [jsx(SpinnerButton, { type: "up", size: size, disabled: disabled, onClick: handleSpinUp }), jsx(SpinnerButton, { type: "down", size: size, disabled: disabled, onClick: handleSpinDown })] })] }));
143
+ }
144
+ break;
145
+ }
146
+ case 'action': {
147
+ const actionProps = props;
148
+ const { actionButton } = actionProps;
149
+ if (actionButton.position === 'prefix') {
150
+ const { ...restActionButtonProps } = actionButton;
151
+ prefixExternalButton = (jsx(ActionButton, { ...restActionButtonProps, disabled: restActionButtonProps.disabled || disabled, size: size }));
152
+ }
153
+ if (actionButton.position === 'suffix') {
154
+ const { ...restActionButtonProps } = actionButton;
155
+ suffixExternalButton = (jsx(ActionButton, { ...restActionButtonProps, disabled: restActionButtonProps.disabled || disabled, size: size }));
156
+ }
157
+ break;
158
+ }
159
+ case 'select': {
160
+ const selectProps = props;
161
+ const { selectButton } = selectProps;
162
+ if (selectButton.position === 'both' ||
163
+ selectButton.position === 'prefix') {
164
+ const { ...restSelectButtonProps } = selectButton;
165
+ prefixExternalButton = (jsx(SelectButton, { ...restSelectButtonProps, disabled: restSelectButtonProps.disabled || disabled, size: size }));
166
+ }
167
+ if (selectButton.position === 'both' ||
168
+ selectButton.position === 'suffix') {
169
+ const { ...restSelectButtonProps } = selectButton;
170
+ suffixExternalButton = (jsx(SelectButton, { ...restSelectButtonProps, disabled: restSelectButtonProps.disabled || disabled, size: size }));
171
+ }
172
+ break;
173
+ }
174
+ case 'password': {
175
+ const passwordProps = props;
176
+ defaultInputType = showPassword ? 'text' : 'password';
177
+ if (passwordProps.clearable) {
178
+ onClear = passwordProps.onClear || onClearFromHook;
179
+ }
180
+ const handlePasswordToggle = (event) => {
181
+ if (event.key === 'Enter' || event.key === ' ') {
182
+ event.preventDefault();
183
+ setShowPassword((prev) => !prev);
184
+ }
185
+ };
186
+ suffix = (jsx(Icon, { icon: showPassword ? EyeIcon : EyeInvisibleIcon, onClick: () => setShowPassword((prev) => !prev), role: "button", tabIndex: 0, "aria-label": showPassword ? 'Hide password' : 'Show password', onKeyDown: handlePasswordToggle }));
187
+ if (passwordProps.showPasswordStrengthIndicator) {
188
+ showPasswordStrengthIndicator = true;
189
+ passwordStrengthIndicatorProps =
190
+ passwordProps.passwordStrengthIndicator;
191
+ }
192
+ break;
193
+ }
194
+ }
195
+ const interactiveProps = (() => {
196
+ if (disabled) {
197
+ return { disabled: true };
198
+ }
199
+ if (readonly) {
200
+ return { readonly: true };
201
+ }
202
+ if (typing) {
203
+ return { typing: true };
204
+ }
205
+ return {};
206
+ })();
207
+ return (jsxs("div", { ref: ref, className: cx(inputClasses.container, className), children: [jsxs("div", { className: cx(inputClasses.host, {
208
+ [inputClasses.withPrefixExternalAction]: prefixExternalButton !== undefined,
209
+ [inputClasses.withSuffixExternalAction]: suffixExternalButton !== undefined,
210
+ }), children: [prefixExternalButton, jsx(TextField, { active: active, className: cx(inputClasses.field, {
211
+ [inputClasses.number]: variant === 'number',
212
+ }, inputClasses.size(size)), clearable: clearable, error: error, fullWidth: fullWidth, onClear: onClear, size: size, prefix: prefix, suffix: suffix, ...interactiveProps, children: jsx("input", { ...defaultInputProps, ...inputProps, id: id, name: name, "aria-disabled": disabled, "aria-multiline": false, "aria-readonly": readonly, disabled: disabled, onChange: formatter || parser ? handleChange : onChange, placeholder: placeholder, readOnly: readonly, ref: composedInputRef, style: { ...inputStyle, ...inputProps === null || inputProps === void 0 ? void 0 : inputProps.style }, type: inputType !== null && inputType !== void 0 ? inputType : defaultInputType, value: displayValue }) }), suffixExternalButton] }), variant === 'password' && showPasswordStrengthIndicator ? (jsx(PasswordStrengthIndicator, { ...(passwordStrengthIndicatorProps || {}), className: cx(inputClasses.indicatorContainer, passwordStrengthIndicatorProps === null || passwordStrengthIndicatorProps === void 0 ? void 0 : passwordStrengthIndicatorProps.className) })) : null] }));
47
213
  });
48
- var Input$1 = Input;
49
214
 
50
- export { Input$1 as default };
215
+ export { Input as default };
@@ -0,0 +1,31 @@
1
+ import { InputStrength } from '@mezzanine-ui/core/input';
2
+ import type { FormHintTextProps } from '../../Form/FormHintText';
3
+ import { NativeElementPropsWithoutKeyAndRef } from '../../utils/jsx-types';
4
+ export interface PasswordStrengthIndicatorProps extends NativeElementPropsWithoutKeyAndRef<'div'> {
5
+ /**
6
+ * The strength of password.
7
+ * @default 'weak'
8
+ */
9
+ strength?: InputStrength;
10
+ /**
11
+ * The text to show beside the strength indicator bar.
12
+ */
13
+ strengthText?: string;
14
+ /**
15
+ * The prefix text for strength text.
16
+ * @default '密碼強度:'
17
+ */
18
+ strengthTextPrefix?: string;
19
+ /**
20
+ * The hint texts to show below the strength indicator bar.
21
+ */
22
+ hintTexts?: {
23
+ severity: FormHintTextProps['severity'];
24
+ hint: string;
25
+ }[];
26
+ }
27
+ /**
28
+ * The react component for `mezzanine` password strength indicator.
29
+ */
30
+ declare const PasswordStrengthIndicator: import("react").ForwardRefExoticComponent<PasswordStrengthIndicatorProps & import("react").RefAttributes<HTMLDivElement>>;
31
+ export default PasswordStrengthIndicator;
@@ -0,0 +1,18 @@
1
+ 'use client';
2
+ import { jsxs, jsx } from 'react/jsx-runtime';
3
+ import { inputPasswordStrengthIndicatorClasses } from '@mezzanine-ui/core/input';
4
+ import { forwardRef } from 'react';
5
+ import FormHintText from '../../Form/FormHintText.js';
6
+ import cx from 'clsx';
7
+
8
+ /**
9
+ * The react component for `mezzanine` password strength indicator.
10
+ */
11
+ const PasswordStrengthIndicator = forwardRef(function PasswordStrengthIndicator(props, ref) {
12
+ const { className, strength = 'weak', strengthText: strengthTextProp, strengthTextPrefix = '密碼強度:', hintTexts, ...rest } = props;
13
+ const strengthText = strengthTextProp ||
14
+ (strength === 'weak' ? '低' : strength === 'medium' ? '中' : '高');
15
+ return (jsxs("div", { ref: ref, className: cx(inputPasswordStrengthIndicatorClasses.host, className), ...rest, children: [jsx("div", { className: cx(inputPasswordStrengthIndicatorClasses.bar, inputPasswordStrengthIndicatorClasses.barState(strength)) }), jsxs("span", { className: inputPasswordStrengthIndicatorClasses.text, children: [strengthTextPrefix, jsx("mark", { children: strengthText })] }), hintTexts && hintTexts.length > 0 && (jsx("div", { className: inputPasswordStrengthIndicatorClasses.hintTextGroup, children: hintTexts.map((hintText, idx) => (jsx(FormHintText, { severity: hintText.severity, children: hintText.hint }, idx))) }))] }));
16
+ });
17
+
18
+ export { PasswordStrengthIndicator as default };
@@ -0,0 +1,2 @@
1
+ export type { PasswordStrengthIndicatorProps } from './PasswordStrengthIndicator';
2
+ export { default } from './PasswordStrengthIndicator';
@@ -0,0 +1 @@
1
+ export { default } from './PasswordStrengthIndicator.js';
@@ -0,0 +1,20 @@
1
+ import { InputSize } from '@mezzanine-ui/core/input';
2
+ import { NativeElementPropsWithoutKeyAndRef } from '../../utils/jsx-types';
3
+ export interface SelectButtonProps extends Omit<NativeElementPropsWithoutKeyAndRef<'button'>, 'type' | 'disabled'> {
4
+ /**
5
+ * Whether the select button is disabled.
6
+ */
7
+ disabled?: boolean;
8
+ /**
9
+ * The value of select button.
10
+ */
11
+ value?: string;
12
+ /**
13
+ * The size of select button.
14
+ * @default 'main'
15
+ */
16
+ size?: InputSize;
17
+ }
18
+ /** @TODO dropdown menu with button */
19
+ declare const SelectButton: import("react").ForwardRefExoticComponent<SelectButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
20
+ export default SelectButton;
@@ -0,0 +1,21 @@
1
+ 'use client';
2
+ import { jsxs, jsx } from 'react/jsx-runtime';
3
+ import { inputSelectButtonClasses } from '@mezzanine-ui/core/input';
4
+ import { forwardRef } from 'react';
5
+ import Rotate from '../../Transition/Rotate.js';
6
+ import { ChevronDownIcon } from '@mezzanine-ui/icons';
7
+ import { MOTION_EASING, MOTION_DURATION } from '@mezzanine-ui/system/motion';
8
+ import Icon from '../../Icon/Icon.js';
9
+ import cx from 'clsx';
10
+
11
+ /** @TODO dropdown menu with button */
12
+ const SelectButton = forwardRef(function SelectButton(props, ref) {
13
+ const { className, disabled, value, size = 'main', ...rest } = props;
14
+ return (jsxs("button", { ref: ref, type: "button", disabled: disabled, className: cx(inputSelectButtonClasses.host, disabled && inputSelectButtonClasses.disabled, size === 'main' ? inputSelectButtonClasses.main : inputSelectButtonClasses.sub, className), title: value, ...rest, children: [jsx("span", { className: inputSelectButtonClasses.text, children: value }), jsx(Rotate
15
+ /** @TODO in=true when dropdown opened */
16
+ , {
17
+ /** @TODO in=true when dropdown opened */
18
+ in: false, duration: MOTION_DURATION.fast, easing: MOTION_EASING.standard, children: jsx(Icon, { className: inputSelectButtonClasses.icon, icon: ChevronDownIcon, size: 16 }) })] }));
19
+ });
20
+
21
+ export { SelectButton as default };
@@ -0,0 +1,2 @@
1
+ export type { SelectButtonProps } from './SelectButton';
2
+ export { default } from './SelectButton';
@@ -0,0 +1 @@
1
+ export { default } from './SelectButton.js';
@@ -0,0 +1,19 @@
1
+ import { InputSize } from '@mezzanine-ui/core/input';
2
+ import { NativeElementPropsWithoutKeyAndRef } from '../../utils/jsx-types';
3
+ export interface SpinnerButtonProps extends Omit<NativeElementPropsWithoutKeyAndRef<'button'>, 'type' | 'disabled'> {
4
+ /**
5
+ * Whether the spinner button is disabled.
6
+ */
7
+ disabled?: boolean;
8
+ /**
9
+ * The size of spinner button.
10
+ * @default 'main'
11
+ */
12
+ size?: InputSize;
13
+ /**
14
+ * The type of spinner button.
15
+ */
16
+ type: 'up' | 'down';
17
+ }
18
+ declare const SpinnerButton: import("react").ForwardRefExoticComponent<SpinnerButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
19
+ export default SpinnerButton;
@@ -0,0 +1,14 @@
1
+ 'use client';
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import { inputSpinnerButtonClasses } from '@mezzanine-ui/core/input';
4
+ import { forwardRef } from 'react';
5
+ import { CaretUpFlatIcon, CaretDownFlatIcon } from '@mezzanine-ui/icons';
6
+ import Icon from '../../Icon/Icon.js';
7
+ import cx from 'clsx';
8
+
9
+ const SpinnerButton = forwardRef(function SpinnerButton(props, ref) {
10
+ const { className, disabled, size = 'main', type, ...rest } = props;
11
+ return (jsx("button", { ref: ref, type: "button", disabled: disabled, className: cx(inputSpinnerButtonClasses.host, disabled && inputSpinnerButtonClasses.disabled, size === 'main' ? inputSpinnerButtonClasses.main : inputSpinnerButtonClasses.sub, className), title: type === 'up' ? 'Increase value' : 'Decrease value', ...rest, children: jsx(Icon, { icon: type === 'up' ? CaretUpFlatIcon : CaretDownFlatIcon }) }));
12
+ });
13
+
14
+ export { SpinnerButton as default };
@@ -0,0 +1,2 @@
1
+ export type { SpinnerButtonProps } from './SpinnerButton';
2
+ export { default } from './SpinnerButton';
@@ -0,0 +1 @@
1
+ export { default } from './SpinnerButton.js';
package/Input/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
- export type { InputSize } from '@mezzanine-ui/core/input';
2
- export { InputProps, default } from './Input';
1
+ export type { InputSize, InputStrength } from '@mezzanine-ui/core/input';
2
+ export type { InputBaseProps, ClearableInput, NumberInput, BaseInputProps, WithAffixInputProps, SearchInputProps, NumberInputProps, UnitInputProps, ActionInputProps, SelectInputProps, WithPasswordStrengthIndicator, PasswordInputProps, InputProps, } from './Input';
3
+ export { default } from './Input';
package/Menu/Menu.js CHANGED
@@ -1,3 +1,4 @@
1
+ 'use client';
1
2
  import { jsx } from 'react/jsx-runtime';
2
3
  import { forwardRef, useContext } from 'react';
3
4
  import { toMenuCssVars, menuClasses } from '@mezzanine-ui/core/menu';
@@ -20,6 +21,5 @@ const Menu = forwardRef(function Menu(props, ref) {
20
21
  };
21
22
  return (jsx("ul", { ...rest, ref: ref, className: cx(menuClasses.host, menuClasses.size(size), className), role: role, style: style, children: children }));
22
23
  });
23
- var Menu$1 = Menu;
24
24
 
25
- export { Menu$1 as default };
25
+ export { Menu as default };
@@ -10,6 +10,5 @@ const MenuDivider = forwardRef(function MenuDivider(props, ref) {
10
10
  const { className, ...rest } = props;
11
11
  return jsx("hr", { ...rest, ref: ref, className: cx(menuDividerClasses.host, className) });
12
12
  });
13
- var MenuDivider$1 = MenuDivider;
14
13
 
15
- export { MenuDivider$1 as default };
14
+ export { MenuDivider as default };
package/Menu/MenuItem.js CHANGED
@@ -21,6 +21,5 @@ const MenuItem = forwardRef(function MenuItem(props, ref) {
21
21
  }
22
22
  }, onKeyDown: onKeyDown, role: role, children: [jsx("div", { className: menuItemClasses.label, children: children }), active && jsx(Icon, { className: menuItemClasses.activeIcon, icon: CheckIcon })] }));
23
23
  });
24
- var MenuItem$1 = MenuItem;
25
24
 
26
- export { MenuItem$1 as default };
25
+ export { MenuItem as default };
@@ -10,6 +10,5 @@ const MenuItemGroup = forwardRef(function MenuItemGroup(props, ref) {
10
10
  const { children, className, label, ...rest } = props;
11
11
  return (jsxs("li", { ref: ref, ...rest, className: cx(menuItemGroupClasses.host, className), children: [jsx("span", { className: menuItemGroupClasses.label, children: label }), jsx("ul", { className: menuItemGroupClasses.items, children: children })] }));
12
12
  });
13
- var MenuItemGroup$1 = MenuItemGroup;
14
13
 
15
- export { MenuItemGroup$1 as default };
14
+ export { MenuItemGroup as default };
package/Menu/index.d.ts CHANGED
@@ -1,5 +1,9 @@
1
1
  export type { MenuSize } from '@mezzanine-ui/core/menu';
2
- export { MenuProps, default } from './Menu';
3
- export { MenuDividerProps, default as MenuDivider } from './MenuDivider';
4
- export { MenuItemProps, default as MenuItem } from './MenuItem';
5
- export { MenuItemGroupProps, default as MenuItemGroup } from './MenuItemGroup';
2
+ export type { MenuProps } from './Menu';
3
+ export { default } from './Menu';
4
+ export type { MenuDividerProps } from './MenuDivider';
5
+ export { default as MenuDivider } from './MenuDivider';
6
+ export type { MenuItemProps } from './MenuItem';
7
+ export { default as MenuItem } from './MenuItem';
8
+ export type { MenuItemGroupProps } from './MenuItemGroup';
9
+ export { default as MenuItemGroup } from './MenuItemGroup';
@@ -1,9 +1,9 @@
1
1
  import { MessageSeverity } from '@mezzanine-ui/core/message';
2
2
  import { IconDefinition } from '@mezzanine-ui/icons';
3
- import { FC, Key } from 'react';
3
+ import type { FC, Key } from 'react';
4
4
  import { Notifier, NotifierData, NotifierConfig } from '../Notifier';
5
- import { SlideFadeProps } from '../Transition';
6
- export interface MessageConfigProps extends Pick<NotifierConfig, 'duration'>, Pick<SlideFadeProps, 'onEnter' | 'onEntering' | 'onEntered' | 'onExit' | 'onExiting' | 'onExited' | 'easing' | 'direction'> {
5
+ import { TranslateProps } from '../Transition';
6
+ export interface MessageConfigProps extends Pick<NotifierConfig, 'duration'>, Pick<TranslateProps, 'onEnter' | 'onEntering' | 'onEntered' | 'onExit' | 'onExiting' | 'onExited' | 'easing' | 'from'> {
7
7
  }
8
8
  export interface MessageData extends Omit<NotifierData, 'onClose'>, MessageConfigProps {
9
9
  /**
@@ -25,7 +25,9 @@ export interface MessageData extends Omit<NotifierData, 'onClose'>, MessageConfi
25
25
  */
26
26
  severity?: MessageSeverity;
27
27
  }
28
- export type MessageType = FC<MessageData> & Notifier<MessageData, MessageConfigProps> & Record<string, (message: MessageData['children'], props?: Omit<MessageData, 'children' | 'severity' | 'icon'>) => Key>;
28
+ export type MessageType = FC<MessageData> & Notifier<MessageData, MessageConfigProps> & Record<string, (message: MessageData['children'], props?: Omit<MessageData, 'children' | 'severity' | 'icon'> & {
29
+ key?: Key;
30
+ }) => Key>;
29
31
  /**
30
32
  * The react component for `mezzanine` message.
31
33
  *
@@ -1,7 +1,9 @@
1
- import { useState, useEffect, createElement } from 'react';
1
+ 'use client';
2
+ import { useState, useRef, useCallback, useEffect, createElement } from 'react';
2
3
  import { jsx, jsxs } from 'react/jsx-runtime';
3
4
  import { messageClasses, messageIcons } from '@mezzanine-ui/core/message';
4
- import SlideFade from '../Transition/SlideFade.js';
5
+ import { messageTimerController } from './MessageTimerController.js';
6
+ import Translate from '../Transition/Translate.js';
5
7
  import Icon from '../Icon/Icon.js';
6
8
  import { createNotifier } from '../Notifier/createNotifier.js';
7
9
  import cx from 'clsx';
@@ -15,16 +17,72 @@ import cx from 'clsx';
15
17
  const Message = ((props) => {
16
18
  const { children, duration, icon, reference, severity, onExited: onExitedProp, ...restTransitionProps } = props;
17
19
  const [open, setOpen] = useState(true);
20
+ const timerRef = useRef(null);
21
+ const remainingTimeRef = useRef(duration || 0);
22
+ const startTimeRef = useRef(Date.now());
23
+ // 清理計時器
24
+ const clearTimer = useCallback(() => {
25
+ if (timerRef.current) {
26
+ window.clearTimeout(timerRef.current);
27
+ timerRef.current = null;
28
+ }
29
+ }, []);
30
+ // 開始計時器
31
+ const startTimer = useCallback((time) => {
32
+ clearTimer();
33
+ if (time > 0) {
34
+ startTimeRef.current = Date.now();
35
+ remainingTimeRef.current = time;
36
+ timerRef.current = window.setTimeout(() => {
37
+ setOpen(false);
38
+ }, time);
39
+ }
40
+ }, [clearTimer]);
41
+ // 暫停計時器
42
+ const pauseTimer = useCallback(() => {
43
+ if (timerRef.current) {
44
+ clearTimer();
45
+ const elapsed = Date.now() - startTimeRef.current;
46
+ remainingTimeRef.current = Math.max(0, remainingTimeRef.current - elapsed);
47
+ }
48
+ }, [clearTimer]);
49
+ // 恢復計時器
50
+ const resumeTimer = useCallback(() => {
51
+ if (remainingTimeRef.current > 0) {
52
+ startTimer(remainingTimeRef.current);
53
+ }
54
+ }, [startTimer]);
55
+ // 初始設定計時器
18
56
  useEffect(() => {
19
57
  if (open && duration) {
20
- const timer = window.setTimeout(() => {
21
- setOpen(false);
22
- }, duration);
58
+ startTimer(duration);
59
+ }
60
+ else if (open && duration === false) {
61
+ // duration 為 false 時,清除計時器(不自動關閉)
62
+ clearTimer();
63
+ }
64
+ return () => {
65
+ clearTimer();
66
+ };
67
+ }, [open, duration, clearTimer, startTimer]);
68
+ // 註冊到全域控制器
69
+ useEffect(() => {
70
+ if (reference && duration) {
71
+ messageTimerController.register(reference, {
72
+ pause: pauseTimer,
73
+ resume: resumeTimer,
74
+ });
23
75
  return () => {
24
- window.clearTimeout(timer);
76
+ messageTimerController.unregister(reference);
25
77
  };
26
78
  }
27
- }, [open, duration]);
79
+ }, [reference, duration, pauseTimer, resumeTimer]);
80
+ // 清理計時器(組件卸載時)
81
+ useEffect(() => {
82
+ return () => {
83
+ clearTimer();
84
+ };
85
+ }, [clearTimer]);
28
86
  const onExited = (node) => {
29
87
  if (onExitedProp) {
30
88
  onExitedProp(node);
@@ -32,11 +90,24 @@ const Message = ((props) => {
32
90
  if (reference)
33
91
  Message.remove(reference);
34
92
  };
35
- return (jsx(SlideFade, { in: open, appear: true, onExited: onExited, ...restTransitionProps, children: jsxs("div", { className: cx(messageClasses.host, severity ? messageClasses.severity(severity) : ''), children: [icon ? jsx(Icon, { className: messageClasses.icon, icon: icon }) : null, jsx("span", { className: messageClasses.content, children: children })] }) }));
93
+ const handleMouseEnter = () => {
94
+ messageTimerController.pause();
95
+ };
96
+ const handleMouseLeave = () => {
97
+ messageTimerController.resume();
98
+ };
99
+ const handleFocus = () => {
100
+ messageTimerController.pause();
101
+ };
102
+ const handleBlur = () => {
103
+ messageTimerController.resume();
104
+ };
105
+ return (jsx(Translate, { in: open, appear: true, onExited: onExited, from: "bottom", ...restTransitionProps, children: jsxs("div", { className: cx(messageClasses.host, severity ? messageClasses.severity(severity) : ''), onBlur: handleBlur, onFocus: handleFocus, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, role: "status", children: [icon ? (jsx(Icon, { className: messageClasses.icon, icon: icon, spin: severity === 'loading' })) : null, jsx("span", { className: messageClasses.content, children: children })] }) }));
36
106
  });
37
107
  const { add, config, destroy, remove } = createNotifier({
38
108
  duration: 3000,
39
- render: (message) => createElement(Message, { ...message, key: undefined }),
109
+ maxCount: 4,
110
+ render: (message) => (createElement(Message, { ...message, reference: message.key, key: undefined })),
40
111
  setRoot: (root) => {
41
112
  root === null || root === void 0 ? void 0 : root.setAttribute('class', messageClasses.root);
42
113
  },
@@ -62,12 +133,17 @@ const severities = [
62
133
  key: 'info',
63
134
  icon: messageIcons.info,
64
135
  },
136
+ {
137
+ key: 'loading',
138
+ icon: messageIcons.loading,
139
+ },
65
140
  ];
66
141
  const validSeverities = [
67
142
  'success',
68
143
  'warning',
69
144
  'error',
70
145
  'info',
146
+ 'loading',
71
147
  ];
72
148
  severities.forEach((severity) => {
73
149
  Message[severity.key] = (message, props) => Message.add({
@@ -77,8 +153,8 @@ severities.forEach((severity) => {
77
153
  ? severity.key
78
154
  : undefined,
79
155
  icon: severity.icon,
156
+ duration: severity.key === 'loading' ? false : props === null || props === void 0 ? void 0 : props.duration,
80
157
  });
81
158
  });
82
- var Message$1 = Message;
83
159
 
84
- export { Message$1 as default };
160
+ export { Message as default };