@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.
- package/Accordion/AccordionControlContext.js +1 -0
- package/Accordion/AccordionDetails.js +1 -0
- package/Accordion/AccordionSummary.js +10 -10
- package/Accordion/index.d.ts +6 -3
- package/Alert/index.d.ts +3 -2
- package/AlertBanner/AlertBanner.d.ts +93 -0
- package/AlertBanner/AlertBanner.js +154 -0
- package/AlertBanner/index.d.ts +2 -0
- package/AlertBanner/index.js +1 -0
- package/Anchor/Anchor.js +1 -1
- package/Anchor/index.d.ts +2 -1
- package/AppBar/index.d.ts +8 -4
- package/{Overlay/Overlay.d.ts → Backdrop/Backdrop.d.ts} +12 -16
- package/Backdrop/Backdrop.js +40 -0
- package/Backdrop/index.d.ts +2 -0
- package/Backdrop/index.js +1 -0
- package/Badge/Badge.d.ts +20 -14
- package/Badge/Badge.js +14 -16
- package/Badge/BadgeContainer.d.ts +1 -1
- package/Badge/BadgeContainer.js +1 -1
- package/Badge/index.d.ts +3 -2
- package/Badge/typings.d.ts +48 -0
- package/Breadcrumb/Breadcrumb.d.ts +6 -0
- package/Breadcrumb/Breadcrumb.js +53 -0
- package/Breadcrumb/BreadcrumbItem.d.ts +4 -0
- package/Breadcrumb/BreadcrumbItem.js +45 -0
- package/Breadcrumb/index.d.ts +2 -0
- package/Breadcrumb/index.js +1 -0
- package/Breadcrumb/typings.d.ts +75 -0
- package/Button/Button.js +24 -19
- package/Button/ButtonGroup.d.ts +6 -28
- package/Button/ButtonGroup.js +7 -16
- package/Button/index.d.ts +4 -10
- package/Button/index.js +2 -3
- package/Button/typings.d.ts +11 -26
- package/Calendar/Calendar.d.ts +31 -2
- package/Calendar/Calendar.js +74 -19
- package/Calendar/CalendarCell.d.ts +4 -0
- package/Calendar/CalendarCell.js +3 -3
- package/Calendar/CalendarConfigProviderDayjs.d.ts +21 -0
- package/Calendar/CalendarConfigProviderDayjs.js +15 -0
- package/Calendar/CalendarConfigProviderLuxon.d.ts +21 -0
- package/Calendar/CalendarConfigProviderLuxon.js +15 -0
- package/Calendar/CalendarConfigProviderMoment.d.ts +21 -0
- package/Calendar/CalendarConfigProviderMoment.js +15 -0
- package/Calendar/CalendarContext.d.ts +14 -7
- package/Calendar/CalendarContext.js +8 -13
- package/Calendar/CalendarControls.d.ts +16 -0
- package/Calendar/CalendarControls.js +3 -7
- package/Calendar/CalendarDayOfWeek.js +4 -3
- package/Calendar/CalendarDays.d.ts +9 -1
- package/Calendar/CalendarDays.js +63 -38
- package/Calendar/CalendarFooterActions.d.ts +13 -0
- package/Calendar/CalendarFooterActions.js +14 -0
- package/Calendar/CalendarFooterControl.d.ts +16 -0
- package/Calendar/CalendarFooterControl.js +14 -0
- package/Calendar/CalendarHalfYears.d.ts +39 -0
- package/Calendar/CalendarHalfYears.js +62 -0
- package/Calendar/CalendarMonths.js +16 -4
- package/Calendar/CalendarQuarters.d.ts +37 -0
- package/Calendar/CalendarQuarters.js +64 -0
- package/Calendar/CalendarQuickSelect.d.ts +21 -0
- package/Calendar/CalendarQuickSelect.js +15 -0
- package/Calendar/CalendarWeeks.d.ts +1 -1
- package/Calendar/CalendarWeeks.js +89 -44
- package/Calendar/CalendarYears.js +13 -3
- package/Calendar/RangeCalendar.d.ts +59 -0
- package/Calendar/RangeCalendar.js +232 -0
- package/Calendar/index.d.ts +33 -10
- package/Calendar/index.js +7 -0
- package/Calendar/useCalendarControlModifiers.d.ts +4 -4
- package/Calendar/useCalendarControlModifiers.js +40 -8
- package/Calendar/useCalendarControls.d.ts +2 -0
- package/Calendar/useCalendarControls.js +19 -2
- package/Calendar/useCalendarModeStack.js +1 -0
- package/Calendar/useRangeCalendarControls.d.ts +18 -0
- package/Calendar/useRangeCalendarControls.js +115 -0
- package/Card/CardActions.js +1 -1
- package/Card/index.d.ts +4 -2
- package/Checkbox/CheckAll.d.ts +16 -6
- package/Checkbox/CheckAll.js +40 -26
- package/Checkbox/Checkbox.d.ts +100 -22
- package/Checkbox/Checkbox.js +73 -16
- package/Checkbox/CheckboxGroup.d.ts +100 -18
- package/Checkbox/CheckboxGroup.js +169 -24
- package/Checkbox/CheckboxGroupContext.d.ts +0 -2
- package/Checkbox/CheckboxGroupContext.js +1 -0
- package/Checkbox/index.d.ts +16 -4
- package/Checkbox/index.js +6 -2
- package/Checkbox/typings.d.ts +37 -0
- package/ClearActions/ClearActions.d.ts +41 -0
- package/ClearActions/ClearActions.js +23 -0
- package/ClearActions/index.d.ts +3 -0
- package/ClearActions/index.js +5 -0
- package/ConfirmActions/ConfirmActions.d.ts +2 -1
- package/ConfirmActions/index.d.ts +2 -1
- package/DatePicker/DatePicker.d.ts +12 -1
- package/DatePicker/DatePicker.js +41 -9
- package/DatePicker/DatePickerCalendar.d.ts +2 -5
- package/DatePicker/DatePickerCalendar.js +37 -37
- package/DatePicker/index.d.ts +4 -2
- package/DateRangePicker/DateRangePicker.d.ts +18 -2
- package/DateRangePicker/DateRangePicker.js +143 -100
- package/DateRangePicker/DateRangePickerCalendar.d.ts +13 -9
- package/DateRangePicker/DateRangePickerCalendar.js +7 -94
- package/DateRangePicker/index.d.ts +6 -3
- package/DateRangePicker/useDateRangeCalendarControls.js +11 -6
- package/DateRangePicker/useDateRangePickerValue.d.ts +38 -15
- package/DateRangePicker/useDateRangePickerValue.js +142 -63
- package/DateTimePicker/DateTimePicker.d.ts +31 -10
- package/DateTimePicker/DateTimePicker.js +179 -94
- package/DateTimePicker/index.d.ts +2 -2
- package/DateTimePicker/index.js +0 -1
- package/Drawer/Drawer.d.ts +47 -6
- package/Drawer/Drawer.js +36 -11
- package/Drawer/index.d.ts +2 -1
- package/Dropdown/Dropdown.js +12 -22
- package/Dropdown/index.d.ts +2 -1
- package/Empty/Empty.d.ts +1 -16
- package/Empty/Empty.js +59 -7
- package/Empty/icons/EmptyMainInitialDataIcon.d.ts +4 -0
- package/Empty/icons/EmptyMainInitialDataIcon.js +9 -0
- package/Empty/icons/EmptyMainResultIcon.d.ts +4 -0
- package/Empty/icons/EmptyMainResultIcon.js +9 -0
- package/Empty/icons/EmptyMainSystemIcon.d.ts +4 -0
- package/Empty/icons/EmptyMainSystemIcon.js +9 -0
- package/Empty/index.d.ts +2 -1
- package/Empty/typings.d.ts +61 -0
- package/Form/FormControlContext.js +1 -0
- package/Form/FormHintText.d.ts +18 -0
- package/Form/FormHintText.js +17 -0
- package/Form/FormLabel.js +1 -0
- package/Form/index.d.ts +9 -5
- package/Form/index.js +1 -1
- package/Form/useAutoCompleteValueControl.js +2 -0
- package/Form/useCheckboxControlValue.js +0 -1
- package/Form/useSelectValueControl.js +2 -0
- package/InlineMessage/InlineMessage.d.ts +33 -0
- package/InlineMessage/InlineMessage.js +42 -0
- package/InlineMessage/InlineMessageGroup.d.ts +24 -0
- package/InlineMessage/InlineMessageGroup.js +21 -0
- package/InlineMessage/index.d.ts +4 -0
- package/InlineMessage/index.js +2 -0
- package/Input/ActionButton/ActionButton.d.ts +26 -0
- package/Input/ActionButton/ActionButton.js +14 -0
- package/Input/ActionButton/index.d.ts +2 -0
- package/Input/ActionButton/index.js +1 -0
- package/Input/Input.d.ts +147 -42
- package/Input/Input.js +195 -27
- package/Input/PasswordStrengthIndicator/PasswordStrengthIndicator.d.ts +31 -0
- package/Input/PasswordStrengthIndicator/PasswordStrengthIndicator.js +18 -0
- package/Input/PasswordStrengthIndicator/index.d.ts +2 -0
- package/Input/PasswordStrengthIndicator/index.js +1 -0
- package/Input/SelectButton/SelectButton.d.ts +20 -0
- package/Input/SelectButton/SelectButton.js +21 -0
- package/Input/SelectButton/index.d.ts +2 -0
- package/Input/SelectButton/index.js +1 -0
- package/Input/SpinnerButton/SpinnerButton.d.ts +19 -0
- package/Input/SpinnerButton/SpinnerButton.js +14 -0
- package/Input/SpinnerButton/index.d.ts +2 -0
- package/Input/SpinnerButton/index.js +1 -0
- package/Input/index.d.ts +3 -2
- package/Menu/Menu.js +1 -0
- package/Menu/index.d.ts +8 -4
- package/Message/Message.d.ts +6 -4
- package/Message/Message.js +86 -9
- package/Message/MessageTimerController.d.ts +14 -0
- package/Message/MessageTimerController.js +27 -0
- package/Message/index.d.ts +3 -2
- package/Modal/Modal.js +2 -2
- package/Modal/ModalActions.js +1 -0
- package/Modal/ModalControl.js +1 -0
- package/Modal/ModalHeader.js +1 -0
- package/Modal/index.d.ts +10 -5
- package/Modal/useModalContainer.d.ts +1 -1
- package/Modal/useModalContainer.js +2 -4
- package/Navigation/Navigation.js +37 -34
- package/Navigation/NavigationContext.js +1 -0
- package/Navigation/NavigationItem.js +1 -0
- package/Navigation/NavigationSubMenu.js +16 -26
- package/Navigation/index.d.ts +8 -4
- package/Notification/Notification.js +0 -1
- package/Notification/index.d.ts +3 -2
- package/Notifier/NotifierManager.d.ts +15 -2
- package/Notifier/NotifierManager.js +60 -18
- package/Notifier/createNotifier.d.ts +9 -0
- package/Notifier/createNotifier.js +3 -2
- package/Notifier/typings.d.ts +3 -1
- package/OverflowTooltip/OverflowCounterTag.d.ts +12 -0
- package/OverflowTooltip/OverflowCounterTag.js +48 -0
- package/OverflowTooltip/OverflowTooltip.d.ts +34 -0
- package/OverflowTooltip/OverflowTooltip.js +53 -0
- package/OverflowTooltip/index.d.ts +2 -0
- package/OverflowTooltip/index.js +2 -0
- package/PageFooter/PageFooter.d.ts +73 -8
- package/PageFooter/PageFooter.js +34 -3
- package/PageFooter/index.d.ts +2 -1
- package/PageHeader/PageHeader.d.ts +40 -0
- package/PageHeader/PageHeader.js +70 -0
- package/PageHeader/index.d.ts +2 -0
- package/PageHeader/index.js +1 -0
- package/PageToolbar/PageToolbar.d.ts +114 -0
- package/PageToolbar/PageToolbar.js +23 -0
- package/PageToolbar/index.d.ts +2 -0
- package/PageToolbar/index.js +1 -0
- package/PageToolbar/utils.d.ts +23 -0
- package/PageToolbar/utils.js +165 -0
- package/Pagination/Pagination.d.ts +23 -29
- package/Pagination/Pagination.js +3 -4
- package/Pagination/PaginationItem.d.ts +1 -1
- package/Pagination/PaginationItem.js +4 -3
- package/Pagination/PaginationJumper.d.ts +7 -9
- package/Pagination/PaginationJumper.js +3 -5
- package/Pagination/PaginationPageSize.d.ts +8 -11
- package/Pagination/PaginationPageSize.js +5 -4
- package/Pagination/index.d.ts +8 -4
- package/Pagination/usePagination.d.ts +3 -1
- package/Pagination/usePagination.js +12 -21
- package/Picker/FormattedInput.d.ts +17 -0
- package/Picker/FormattedInput.js +74 -0
- package/Picker/MaskFormat.d.ts +39 -0
- package/Picker/MaskFormat.js +94 -0
- package/Picker/PickerTrigger.d.ts +13 -3
- package/Picker/PickerTrigger.js +17 -2
- package/Picker/PickerTriggerWithSeparator.d.ts +124 -0
- package/Picker/PickerTriggerWithSeparator.js +80 -0
- package/Picker/RangePickerTrigger.d.ts +55 -4
- package/Picker/RangePickerTrigger.js +65 -7
- package/Picker/formatUtils.d.ts +34 -0
- package/Picker/formatUtils.js +124 -0
- package/Picker/index.d.ts +17 -6
- package/Picker/index.js +4 -1
- package/Picker/useDateInputFormatter.d.ts +52 -0
- package/Picker/useDateInputFormatter.js +382 -0
- package/Picker/usePickerValue.d.ts +1 -2
- package/Picker/usePickerValue.js +8 -13
- package/Popconfirm/Popconfirm.js +1 -1
- package/Popconfirm/index.d.ts +2 -1
- package/Popover/Popover.js +4 -8
- package/Popover/index.d.ts +2 -1
- package/Popper/Popper.d.ts +15 -10
- package/Popper/Popper.js +88 -17
- package/Popper/index.d.ts +2 -1
- package/Portal/Portal.d.ts +13 -5
- package/Portal/Portal.js +25 -10
- package/Portal/index.d.ts +4 -1
- package/Portal/index.js +1 -0
- package/Portal/portalRegistry.d.ts +17 -0
- package/Portal/portalRegistry.js +92 -0
- package/Progress/Progress.d.ts +23 -30
- package/Progress/Progress.js +71 -21
- package/Progress/index.d.ts +3 -2
- package/Provider/ConfigProvider.d.ts +1 -0
- package/Provider/ConfigProvider.js +1 -0
- package/Provider/context.js +1 -0
- package/Radio/Radio.d.ts +37 -4
- package/Radio/Radio.js +23 -12
- package/Radio/RadioGroup.d.ts +37 -8
- package/Radio/RadioGroup.js +6 -5
- package/Radio/RadioGroupContext.d.ts +2 -1
- package/Radio/RadioGroupContext.js +1 -0
- package/Radio/index.d.ts +5 -3
- package/ResultState/ResultState.d.ts +52 -0
- package/ResultState/ResultState.js +24 -0
- package/ResultState/index.d.ts +2 -0
- package/ResultState/index.js +1 -0
- package/Select/AutoComplete.d.ts +1 -1
- package/Select/AutoComplete.js +2 -1
- package/Select/Option.js +1 -0
- package/Select/Select.d.ts +1 -1
- package/Select/Select.js +2 -1
- package/Select/SelectControlContext.js +1 -0
- package/Select/SelectTrigger.d.ts +1 -87
- package/Select/SelectTrigger.js +26 -21
- package/Select/SelectTriggerTags.d.ts +1 -1
- package/Select/SelectTriggerTags.js +47 -18
- package/Select/TreeSelect.d.ts +1 -1
- package/Select/TreeSelect.js +2 -1
- package/Select/index.d.ts +14 -7
- package/Select/typings.d.ts +99 -0
- package/Select/useSelectTriggerTags.d.ts +15 -8
- package/Select/useSelectTriggerTags.js +83 -44
- package/Selection/Selection.d.ts +98 -0
- package/Selection/Selection.js +46 -0
- package/Selection/index.d.ts +12 -0
- package/Selection/index.js +5 -0
- package/Skeleton/Skeleton.d.ts +10 -3
- package/Skeleton/Skeleton.js +12 -4
- package/Skeleton/index.d.ts +2 -1
- package/Slider/Slider.d.ts +44 -7
- package/Slider/Slider.js +17 -13
- package/Slider/index.d.ts +5 -3
- package/Spin/Spin.d.ts +39 -0
- package/{Loading/Loading.js → Spin/Spin.js} +9 -9
- package/Spin/index.d.ts +2 -0
- package/Spin/index.js +1 -0
- package/Stepper/Step.d.ts +1 -35
- package/Stepper/Step.js +43 -8
- package/Stepper/Stepper.d.ts +1 -14
- package/Stepper/Stepper.js +49 -15
- package/Stepper/index.d.ts +5 -2
- package/Stepper/index.js +1 -0
- package/Stepper/typings.d.ts +77 -0
- package/Stepper/useStepDistance.d.ts +10 -0
- package/Stepper/useStepDistance.js +81 -0
- package/Stepper/useStepper.d.ts +21 -0
- package/Stepper/useStepper.js +26 -0
- package/Tab/Tab.d.ts +32 -0
- package/Tab/Tab.js +57 -0
- package/Tab/TabItem.d.ts +27 -0
- package/Tab/TabItem.js +18 -0
- package/Tab/index.d.ts +4 -0
- package/Tab/index.js +2 -0
- package/Table/Table.d.ts +75 -94
- package/Table/Table.js +216 -161
- package/Table/TableContext.d.ts +114 -51
- package/Table/TableContext.js +22 -3
- package/Table/components/TableBody.d.ts +5 -0
- package/Table/components/TableBody.js +102 -0
- package/Table/components/TableCell.d.ts +17 -0
- package/Table/components/TableCell.js +74 -0
- package/Table/components/TableColGroup.d.ts +4 -0
- package/Table/components/TableColGroup.js +206 -0
- package/Table/components/TableDragHandleCell.d.ts +9 -0
- package/Table/components/TableDragHandleCell.js +37 -0
- package/Table/components/TableExpandCell.d.ts +11 -0
- package/Table/components/TableExpandCell.js +44 -0
- package/Table/components/TableExpandedRow.d.ts +9 -0
- package/Table/components/TableExpandedRow.js +46 -0
- package/Table/components/TableHeader.d.ts +4 -0
- package/Table/components/TableHeader.js +125 -0
- package/Table/components/TablePagination.d.ts +3 -0
- package/Table/components/TablePagination.js +11 -0
- package/Table/components/TableResizeHandle.d.ts +13 -0
- package/Table/components/TableResizeHandle.js +115 -0
- package/Table/components/TableRow.d.ts +12 -0
- package/Table/components/TableRow.js +126 -0
- package/Table/components/TableSelectionCell.d.ts +13 -0
- package/Table/components/TableSelectionCell.js +35 -0
- package/Table/components/index.d.ts +10 -0
- package/Table/components/index.js +10 -0
- package/Table/hooks/index.d.ts +9 -0
- package/Table/hooks/index.js +8 -0
- package/Table/hooks/typings.d.ts +14 -0
- package/Table/hooks/useTableColumns.d.ts +8 -0
- package/Table/hooks/useTableColumns.js +91 -0
- package/Table/hooks/useTableDataSource.d.ts +57 -0
- package/Table/hooks/useTableDataSource.js +183 -0
- package/Table/hooks/useTableExpansion.d.ts +7 -0
- package/Table/hooks/useTableExpansion.js +52 -0
- package/Table/hooks/useTableFixedOffsets.d.ts +29 -0
- package/Table/hooks/useTableFixedOffsets.js +241 -0
- package/Table/hooks/useTableScroll.d.ts +12 -0
- package/Table/hooks/useTableScroll.js +58 -0
- package/Table/hooks/useTableSelection.d.ts +7 -0
- package/Table/hooks/useTableSelection.js +94 -0
- package/Table/hooks/useTableSorting.d.ts +6 -0
- package/Table/hooks/useTableSorting.js +32 -0
- package/Table/hooks/useTableVirtualization.d.ts +22 -0
- package/Table/hooks/useTableVirtualization.js +115 -0
- package/Table/index.d.ts +7 -7
- package/Table/index.js +22 -6
- package/Table/utils/index.d.ts +2 -0
- package/Table/utils/index.js +1 -0
- package/Table/utils/useTableRowSelection.d.ts +18 -0
- package/Table/utils/useTableRowSelection.js +63 -0
- package/Tag/Tag.d.ts +2 -25
- package/Tag/Tag.js +23 -13
- package/Tag/TagGroup.d.ts +12 -0
- package/Tag/TagGroup.js +41 -0
- package/Tag/index.d.ts +2 -1
- package/Tag/typings.d.ts +78 -0
- package/TextField/TextField.d.ts +78 -19
- package/TextField/TextField.js +58 -22
- package/TextField/index.d.ts +2 -1
- package/Textarea/Textarea.d.ts +19 -51
- package/Textarea/Textarea.js +13 -19
- package/Textarea/index.d.ts +2 -2
- package/TimePanel/TimePanel.d.ts +1 -22
- package/TimePanel/TimePanel.js +31 -26
- package/TimePanel/TimePanelAction.d.ts +2 -8
- package/TimePanel/TimePanelAction.js +2 -2
- package/TimePanel/TimePanelColumn.d.ts +0 -13
- package/TimePanel/TimePanelColumn.js +9 -11
- package/TimePanel/index.d.ts +6 -3
- package/TimePicker/TimePicker.d.ts +10 -1
- package/TimePicker/TimePicker.js +86 -35
- package/TimePicker/TimePickerPanel.d.ts +1 -2
- package/TimePicker/TimePickerPanel.js +2 -2
- package/TimePicker/index.d.ts +4 -2
- package/Toggle/Toggle.d.ts +46 -0
- package/Toggle/Toggle.js +29 -0
- package/Toggle/index.d.ts +3 -0
- package/Toggle/index.js +1 -0
- package/Tooltip/Tooltip.d.ts +13 -2
- package/Tooltip/Tooltip.js +56 -10
- package/Tooltip/index.d.ts +2 -1
- package/Tooltip/useDelayMouseEnterLeave.d.ts +1 -2
- package/Tooltip/useDelayMouseEnterLeave.js +10 -13
- package/Transition/Collapse.d.ts +2 -0
- package/Transition/Collapse.js +5 -6
- package/Transition/Fade.js +4 -4
- package/Transition/Rotate.d.ts +42 -0
- package/Transition/Rotate.js +30 -0
- package/Transition/Scale.d.ts +13 -0
- package/Transition/{Grow.js → Scale.js} +19 -16
- package/Transition/Slide.d.ts +7 -0
- package/Transition/{Zoom.js → Slide.js} +14 -12
- package/Transition/SlideFade.d.ts +3 -0
- package/Transition/SlideFade.js +5 -4
- package/Transition/Transition.d.ts +2 -2
- package/Transition/Translate.d.ts +14 -0
- package/Transition/Translate.js +94 -0
- package/Transition/index.d.ts +16 -6
- package/Transition/index.js +4 -2
- package/Transition/useAutoTransitionDuration.d.ts +1 -1
- package/Transition/useAutoTransitionDuration.js +3 -3
- package/Transition/useSetNodeTransition.js +0 -2
- package/Tree/TreeNode.js +7 -6
- package/Tree/index.d.ts +10 -5
- package/Typography/Typography.d.ts +6 -9
- package/Typography/Typography.js +7 -9
- package/Typography/index.d.ts +2 -5
- package/Upload/Upload.d.ts +175 -0
- package/Upload/Upload.js +279 -0
- package/Upload/UploadItem.d.ts +82 -0
- package/Upload/UploadItem.js +118 -0
- package/Upload/UploadPictureCard.d.ts +110 -0
- package/Upload/UploadPictureCard.js +101 -0
- package/Upload/Uploader.d.ts +161 -0
- package/Upload/Uploader.js +120 -0
- package/Upload/index.d.ts +8 -6
- package/Upload/index.js +4 -5
- package/Upload/upload-utils.d.ts +41 -0
- package/Upload/upload-utils.js +65 -0
- package/_internal/InputCheck/InputCheck.d.ts +15 -1
- package/_internal/InputCheck/InputCheck.js +6 -2
- package/_internal/InputCheck/InputCheckGroup.d.ts +11 -1
- package/_internal/InputCheck/InputCheckGroup.js +4 -2
- package/_internal/InputCheck/index.d.ts +4 -2
- package/_internal/InputTriggerPopper/InputTriggerPopper.js +15 -25
- package/_internal/InputTriggerPopper/index.d.ts +2 -1
- package/_internal/SlideFadeOverlay/SlideFadeOverlay.d.ts +3 -3
- package/_internal/SlideFadeOverlay/SlideFadeOverlay.js +5 -28
- package/_internal/SlideFadeOverlay/index.d.ts +2 -1
- package/_internal/SlideFadeOverlay/useTopStack.js +1 -0
- package/dayjs.d.ts +21 -0
- package/dayjs.js +2 -0
- package/hooks/useComposeRefs.js +1 -1
- package/hooks/useLastCallback.js +3 -1
- package/hooks/useScrollLock.d.ts +28 -0
- package/hooks/useScrollLock.js +134 -0
- package/index.d.ts +128 -58
- package/index.js +90 -80
- package/luxon.d.ts +21 -0
- package/luxon.js +2 -0
- package/moment.d.ts +21 -0
- package/moment.js +2 -0
- package/package.json +14 -17
- package/utils/composeRefs.js +0 -1
- package/utils/flatten-children.d.ts +12 -0
- package/utils/flatten-children.js +37 -0
- package/utils/get-css-variable-value.d.ts +2 -0
- package/utils/get-css-variable-value.js +12 -0
- package/Button/IconButton.d.ts +0 -21
- package/Button/IconButton.js +0 -13
- package/DateTimePicker/DateTimePickerPanel.d.ts +0 -28
- package/DateTimePicker/DateTimePickerPanel.js +0 -49
- package/Form/FormMessage.d.ts +0 -7
- package/Form/FormMessage.js +0 -18
- package/Form/useInputWithTagsModeValue.js +0 -86
- package/Loading/Loading.d.ts +0 -33
- package/Loading/index.d.ts +0 -1
- package/Loading/index.js +0 -1
- package/Overlay/Overlay.js +0 -31
- package/Overlay/index.d.ts +0 -1
- package/Overlay/index.js +0 -1
- package/Picker/useRangePickerValue.d.ts +0 -23
- package/Picker/useRangePickerValue.js +0 -99
- package/Switch/Switch.d.ts +0 -43
- package/Switch/Switch.js +0 -28
- package/Switch/index.d.ts +0 -2
- package/Switch/index.js +0 -1
- package/Table/TableBody.d.ts +0 -10
- package/Table/TableBody.js +0 -30
- package/Table/TableBodyRow.d.ts +0 -11
- package/Table/TableBodyRow.js +0 -64
- package/Table/TableCell.d.ts +0 -19
- package/Table/TableCell.js +0 -24
- package/Table/TableExpandedTable.d.ts +0 -11
- package/Table/TableExpandedTable.js +0 -28
- package/Table/TableHeader.d.ts +0 -3
- package/Table/TableHeader.js +0 -35
- package/Table/draggable/useTableDraggable.d.ts +0 -14
- package/Table/draggable/useTableDraggable.js +0 -64
- package/Table/editable/TableEditRenderWrapper.d.ts +0 -7
- package/Table/editable/TableEditRenderWrapper.js +0 -15
- package/Table/expandable/TableExpandable.d.ts +0 -27
- package/Table/expandable/TableExpandable.js +0 -24
- package/Table/pagination/TablePagination.d.ts +0 -10
- package/Table/pagination/TablePagination.js +0 -25
- package/Table/pagination/useTablePagination.d.ts +0 -8
- package/Table/pagination/useTablePagination.js +0 -29
- package/Table/refresh/TableRefresh.d.ts +0 -10
- package/Table/refresh/TableRefresh.js +0 -20
- package/Table/rowSelection/TableRowSelection.d.ts +0 -18
- package/Table/rowSelection/TableRowSelection.js +0 -92
- package/Table/rowSelection/useTableRowSelection.d.ts +0 -6
- package/Table/rowSelection/useTableRowSelection.js +0 -53
- package/Table/sorting/TableSortingIcon.d.ts +0 -10
- package/Table/sorting/TableSortingIcon.js +0 -32
- package/Table/sorting/useTableSorting.d.ts +0 -11
- package/Table/sorting/useTableSorting.js +0 -120
- package/Table/useTableFetchMore.d.ts +0 -10
- package/Table/useTableFetchMore.js +0 -50
- package/Table/useTableLoading.d.ts +0 -5
- package/Table/useTableLoading.js +0 -19
- package/Table/useTableScroll.d.ts +0 -596
- package/Table/useTableScroll.js +0 -294
- package/Tabs/Tab.d.ts +0 -18
- package/Tabs/Tab.js +0 -16
- package/Tabs/TabPane.d.ts +0 -14
- package/Tabs/TabPane.js +0 -18
- package/Tabs/Tabs.d.ts +0 -39
- package/Tabs/Tabs.js +0 -47
- package/Tabs/index.d.ts +0 -3
- package/Tabs/index.js +0 -3
- package/Tabs/useTabsOverflow.d.ts +0 -8
- package/Tabs/useTabsOverflow.js +0 -61
- package/Transition/Grow.d.ts +0 -12
- package/Transition/Zoom.d.ts +0 -7
- package/Upload/UploadButton.d.ts +0 -9
- package/Upload/UploadButton.js +0 -23
- package/Upload/UploadInput.d.ts +0 -20
- package/Upload/UploadInput.js +0 -24
- package/Upload/UploadPicture.d.ts +0 -49
- package/Upload/UploadPicture.js +0 -51
- package/Upload/UploadPictureBlock.d.ts +0 -20
- package/Upload/UploadPictureBlock.js +0 -81
- package/Upload/UploadPictureWall.d.ts +0 -81
- package/Upload/UploadPictureWall.js +0 -168
- package/Upload/UploadPictureWallItem.d.ts +0 -15
- package/Upload/UploadPictureWallItem.js +0 -18
- package/Upload/UploadResult.d.ts +0 -35
- package/Upload/UploadResult.js +0 -29
- package/utils/scroll-lock.d.ts +0 -2
- package/utils/scroll-lock.js +0 -24
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { MouseEventHandler } from 'react';
|
|
2
|
+
import { UploadItemStatus, UploadPictureCardImageFit, UploadPictureCardSize } from '@mezzanine-ui/core/upload';
|
|
3
|
+
import type { IconDefinition } from '@mezzanine-ui/icons';
|
|
4
|
+
import { NativeElementPropsWithoutKeyAndRef } from '../utils/jsx-types';
|
|
5
|
+
export interface UploadPictureCardAriaLabels {
|
|
6
|
+
/**
|
|
7
|
+
* Aria label for cancel upload button.
|
|
8
|
+
* @default 'Cancel upload'
|
|
9
|
+
*/
|
|
10
|
+
cancelUpload?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Aria label for uploading status.
|
|
13
|
+
* @default 'Uploading'
|
|
14
|
+
*/
|
|
15
|
+
uploading?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Aria label for zoom in button.
|
|
18
|
+
* @default 'Zoom in image'
|
|
19
|
+
*/
|
|
20
|
+
zoomIn?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Aria label for download button.
|
|
23
|
+
* @default 'Download file'
|
|
24
|
+
*/
|
|
25
|
+
download?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Aria label for delete button.
|
|
28
|
+
* @default 'Delete file'
|
|
29
|
+
*/
|
|
30
|
+
delete?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Aria label for reload/retry button.
|
|
33
|
+
* @default 'Retry upload'
|
|
34
|
+
*/
|
|
35
|
+
reload?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface UploadPictureCardProps extends NativeElementPropsWithoutKeyAndRef<'div'> {
|
|
38
|
+
/**
|
|
39
|
+
* Aria labels for accessibility. Allows customization for internationalization.
|
|
40
|
+
*/
|
|
41
|
+
ariaLabels?: UploadPictureCardAriaLabels;
|
|
42
|
+
/**
|
|
43
|
+
* The file to display.
|
|
44
|
+
* Required when displaying local files (before upload).
|
|
45
|
+
* Optional when `url` is provided for already uploaded files.
|
|
46
|
+
*/
|
|
47
|
+
file?: File;
|
|
48
|
+
/**
|
|
49
|
+
* The URL of the uploaded file.
|
|
50
|
+
* When provided, this will be used instead of creating a blob URL from `file`.
|
|
51
|
+
* Useful for displaying files that have already been uploaded to the server.
|
|
52
|
+
*
|
|
53
|
+
* @note If only `url` is provided (without `file`), the file type will be inferred
|
|
54
|
+
* from the URL extension. For accurate type detection, provide `file` when available.
|
|
55
|
+
*/
|
|
56
|
+
url?: string;
|
|
57
|
+
/**
|
|
58
|
+
* The id of the file id to identify the file.
|
|
59
|
+
*/
|
|
60
|
+
id?: string;
|
|
61
|
+
/**
|
|
62
|
+
* The status of the upload picture card.
|
|
63
|
+
* @default 'loading'
|
|
64
|
+
*/
|
|
65
|
+
status?: UploadItemStatus;
|
|
66
|
+
/**
|
|
67
|
+
* The size of the upload picture card.
|
|
68
|
+
* @default 'main'
|
|
69
|
+
*/
|
|
70
|
+
size?: UploadPictureCardSize;
|
|
71
|
+
/**
|
|
72
|
+
* The image fit of the upload picture card.
|
|
73
|
+
* @default 'cover'
|
|
74
|
+
*/
|
|
75
|
+
imageFit?: UploadPictureCardImageFit;
|
|
76
|
+
/**
|
|
77
|
+
* Whether the upload picture card is disabled.
|
|
78
|
+
* @default false
|
|
79
|
+
*/
|
|
80
|
+
disabled?: boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Error message to display when status is 'error'.
|
|
83
|
+
*/
|
|
84
|
+
errorMessage?: string;
|
|
85
|
+
/**
|
|
86
|
+
* Error icon to display when status is 'error'.
|
|
87
|
+
*/
|
|
88
|
+
errorIcon?: IconDefinition;
|
|
89
|
+
/**
|
|
90
|
+
* When delete icon is clicked, this callback will be fired.
|
|
91
|
+
*/
|
|
92
|
+
onDelete?: MouseEventHandler;
|
|
93
|
+
/**
|
|
94
|
+
* When zoom in icon is clicked, this callback will be fired.
|
|
95
|
+
*/
|
|
96
|
+
onZoomIn?: MouseEventHandler;
|
|
97
|
+
/**
|
|
98
|
+
* When download icon is clicked, this callback will be fired.
|
|
99
|
+
*/
|
|
100
|
+
onDownload?: MouseEventHandler;
|
|
101
|
+
/**
|
|
102
|
+
* When reload icon is clicked, this callback will be fired.
|
|
103
|
+
*/
|
|
104
|
+
onReload?: MouseEventHandler;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* The react component for `mezzanine` upload picture card.
|
|
108
|
+
*/
|
|
109
|
+
declare const UploadPictureCard: import("react").ForwardRefExoticComponent<UploadPictureCardProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
110
|
+
export default UploadPictureCard;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
3
|
+
import { forwardRef, useMemo, useState, useEffect } from 'react';
|
|
4
|
+
import { uploadPictureCardClasses } from '@mezzanine-ui/core/upload';
|
|
5
|
+
import { ImageIcon, FileIcon, SpinnerIcon, ZoomInIcon, DownloadIcon, TrashIcon, ResetIcon } from '@mezzanine-ui/icons';
|
|
6
|
+
import Button from '../Button/Button.js';
|
|
7
|
+
import ClearActions from '../ClearActions/ClearActions.js';
|
|
8
|
+
import Typography from '../Typography/Typography.js';
|
|
9
|
+
import { isImageFile } from './upload-utils.js';
|
|
10
|
+
import Icon from '../Icon/Icon.js';
|
|
11
|
+
import cx from 'clsx';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* The react component for `mezzanine` upload picture card.
|
|
15
|
+
*/
|
|
16
|
+
const UploadPictureCard = forwardRef(function UploadPictureCard(props, ref) {
|
|
17
|
+
var _a;
|
|
18
|
+
const { ariaLabels, className, file, url, status = 'loading', imageFit = 'cover', size = 'main', disabled = false, errorMessage, errorIcon, onDelete, onZoomIn, onDownload, onReload, ...rest } = props;
|
|
19
|
+
const defaultAriaLabels = {
|
|
20
|
+
cancelUpload: 'Cancel upload',
|
|
21
|
+
uploading: 'Uploading',
|
|
22
|
+
zoomIn: 'Zoom in image',
|
|
23
|
+
download: 'Download file',
|
|
24
|
+
delete: 'Delete file',
|
|
25
|
+
reload: 'Retry upload',
|
|
26
|
+
};
|
|
27
|
+
const labels = { ...defaultAriaLabels, ...ariaLabels };
|
|
28
|
+
const isImage = useMemo(() => {
|
|
29
|
+
return isImageFile(file, url);
|
|
30
|
+
}, [file, url]);
|
|
31
|
+
const fileName = useMemo(() => {
|
|
32
|
+
var _a;
|
|
33
|
+
if (((_a = props.file) === null || _a === void 0 ? void 0 : _a.name) && !props.url)
|
|
34
|
+
return props.file.name;
|
|
35
|
+
if (props.url) {
|
|
36
|
+
try {
|
|
37
|
+
const url = new URL(props.url);
|
|
38
|
+
const pathname = url.pathname;
|
|
39
|
+
const filename = pathname.split('/').pop() || '';
|
|
40
|
+
return filename;
|
|
41
|
+
}
|
|
42
|
+
catch (_b) {
|
|
43
|
+
const urlWithoutQuery = props.url.split('?')[0].split('#')[0];
|
|
44
|
+
return urlWithoutQuery.split('/').pop() || '';
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return '';
|
|
48
|
+
}, [(_a = props.file) === null || _a === void 0 ? void 0 : _a.name, props.url]);
|
|
49
|
+
const [imageUrl, setImageUrl] = useState('');
|
|
50
|
+
const errorIconContent = useMemo(() => {
|
|
51
|
+
if (errorIcon) {
|
|
52
|
+
return errorIcon;
|
|
53
|
+
}
|
|
54
|
+
return isImage ? ImageIcon : FileIcon;
|
|
55
|
+
}, [isImage, errorIcon]);
|
|
56
|
+
const errorMessageContent = useMemo(() => {
|
|
57
|
+
if (errorMessage) {
|
|
58
|
+
return errorMessage;
|
|
59
|
+
}
|
|
60
|
+
return fileName ? fileName : 'Upload error';
|
|
61
|
+
}, [fileName, errorMessage]);
|
|
62
|
+
// Warn if both file and url are missing
|
|
63
|
+
useEffect(() => {
|
|
64
|
+
if (!file && !url) {
|
|
65
|
+
console.warn('UploadPictureCard: Both `file` and `url` props are missing. At least one should be provided to display the upload picture card.');
|
|
66
|
+
}
|
|
67
|
+
}, [file, url]);
|
|
68
|
+
useEffect(() => {
|
|
69
|
+
if (url && isImage) {
|
|
70
|
+
setImageUrl(url);
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
if (file && isImage) {
|
|
74
|
+
try {
|
|
75
|
+
const blobUrl = URL.createObjectURL(file);
|
|
76
|
+
setImageUrl(blobUrl);
|
|
77
|
+
return () => {
|
|
78
|
+
URL.revokeObjectURL(blobUrl);
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
console.error('Failed to create object URL for image:', error);
|
|
83
|
+
setImageUrl('');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
setImageUrl('');
|
|
88
|
+
}
|
|
89
|
+
return undefined;
|
|
90
|
+
}, [file, url, isImage]);
|
|
91
|
+
if (!isImage && size === 'minor') {
|
|
92
|
+
console.warn('UploadPictureCard: minor size is not supported for non-image files');
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
return (jsx("div", { className: cx(uploadPictureCardClasses.host, uploadPictureCardClasses.size(size), disabled && uploadPictureCardClasses.disabled, className), "aria-disabled": disabled, ref: ref, role: "group", tabIndex: disabled ? -1 : 0, ...rest, children: jsxs("div", { className: uploadPictureCardClasses.container, children: [isImage && imageUrl && status !== 'error' && (jsx("img", { alt: fileName, src: imageUrl, style: {
|
|
96
|
+
objectFit: imageFit,
|
|
97
|
+
objectPosition: 'center',
|
|
98
|
+
} })), status === 'done' && size !== 'minor' && !isImage && (jsxs("div", { className: uploadPictureCardClasses.content, children: [jsx(Icon, { icon: FileIcon, color: "brand", size: 16 }), jsx(Typography, { className: uploadPictureCardClasses.name, ellipsis: true, children: fileName })] })), status === 'error' && size !== 'minor' && (jsxs("div", { className: uploadPictureCardClasses.errorMessage, role: "alert", "aria-live": "polite", children: [jsx(Icon, { icon: errorIconContent, color: "error", size: 16 }), jsx(Typography, { className: uploadPictureCardClasses.errorMessageText, children: errorMessageContent })] })), jsxs("div", { className: cx(uploadPictureCardClasses.actions, uploadPictureCardClasses.actionsStatus(status)), children: [status === 'loading' && size !== 'minor' && (jsxs(Fragment, { children: [jsx(ClearActions, { type: "embedded", variant: "contrast", onClick: onDelete, className: uploadPictureCardClasses.clearActionsIcon, "aria-label": labels.cancelUpload }), jsx("div", { className: uploadPictureCardClasses.loadingIcon, "aria-label": labels.uploading, children: jsx(Icon, { icon: SpinnerIcon, color: "fixed-light", spin: true, size: 32 }) })] })), status === 'done' && size !== 'minor' && (jsx(Fragment, { children: jsx("div", { className: uploadPictureCardClasses.tools, children: jsxs("div", { className: uploadPictureCardClasses.toolsContent, children: [jsx(Button, { variant: "base-secondary", size: "minor", icon: { position: 'icon-only', src: ZoomInIcon }, onClick: onZoomIn, "aria-label": labels.zoomIn }), jsx(Button, { variant: "base-secondary", size: "minor", icon: { position: 'icon-only', src: DownloadIcon }, onClick: onDownload, "aria-label": labels.download }), jsx(Button, { variant: "base-secondary", size: "minor", icon: { position: 'icon-only', src: TrashIcon }, onClick: onDelete, "aria-label": labels.delete })] }) }) })), status === 'error' && size !== 'minor' && (jsx(Fragment, { children: jsx("div", { className: uploadPictureCardClasses.tools, children: jsxs("div", { className: uploadPictureCardClasses.toolsContent, children: [jsx(Button, { variant: "base-secondary", size: "minor", icon: { position: 'icon-only', src: ResetIcon }, onClick: onReload, "aria-label": labels.reload }), jsx(Button, { variant: "base-secondary", size: "minor", icon: { position: 'icon-only', src: TrashIcon }, onClick: onDelete, "aria-label": labels.delete })] }) }) })), size === 'minor' && (jsx(Icon, { icon: ZoomInIcon, color: "fixed-light", size: 24 }))] })] }) }));
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
export { UploadPictureCard as default };
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { ChangeEventHandler, ReactNode, Ref } from 'react';
|
|
2
|
+
import { type UploaderHintType, type UploadPictureControl, type UploadType } from '@mezzanine-ui/core/upload';
|
|
3
|
+
import { type IconDefinition } from '@mezzanine-ui/icons';
|
|
4
|
+
import { NativeElementPropsWithoutKeyAndRef } from '../utils/jsx-types';
|
|
5
|
+
type UploaderInputElementProps = Omit<NativeElementPropsWithoutKeyAndRef<'input'>, 'accept' | 'disabled' | 'multiple' | 'onChange' | 'type' | `aria-${'disabled'}`> & {
|
|
6
|
+
/**
|
|
7
|
+
* The id attribute can be provided via inputProps, but it's recommended to use the `id` prop directly.
|
|
8
|
+
* If both are provided, the `id` prop takes precedence.
|
|
9
|
+
*/
|
|
10
|
+
id?: string;
|
|
11
|
+
/**
|
|
12
|
+
* The name attribute can be provided via inputProps, but it's recommended to use the `name` prop directly.
|
|
13
|
+
* If both are provided, the `name` prop takes precedence.
|
|
14
|
+
*/
|
|
15
|
+
name?: string;
|
|
16
|
+
};
|
|
17
|
+
export interface UploaderHint {
|
|
18
|
+
/**
|
|
19
|
+
* The label text of the hint.
|
|
20
|
+
*/
|
|
21
|
+
label: string;
|
|
22
|
+
/**
|
|
23
|
+
* The icon element of the hint.
|
|
24
|
+
*/
|
|
25
|
+
type?: UploaderHintType;
|
|
26
|
+
}
|
|
27
|
+
export interface UploaderLabel {
|
|
28
|
+
/**
|
|
29
|
+
* Label text for upload state.
|
|
30
|
+
*/
|
|
31
|
+
uploadLabel?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Label text for uploading state.
|
|
34
|
+
*/
|
|
35
|
+
uploadingLabel?: string;
|
|
36
|
+
/**
|
|
37
|
+
* Label text for success state.
|
|
38
|
+
*/
|
|
39
|
+
success?: string;
|
|
40
|
+
/**
|
|
41
|
+
* Label text for error state.
|
|
42
|
+
*/
|
|
43
|
+
error?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Label text for "Click to upload" when isFillWidth is true.
|
|
46
|
+
* @default 'Click to upload'
|
|
47
|
+
*/
|
|
48
|
+
clickToUpload?: string;
|
|
49
|
+
}
|
|
50
|
+
export interface UploaderIcon {
|
|
51
|
+
/**
|
|
52
|
+
* Icon for upload action.
|
|
53
|
+
*/
|
|
54
|
+
upload?: IconDefinition;
|
|
55
|
+
/**
|
|
56
|
+
* Icon for error state.
|
|
57
|
+
*/
|
|
58
|
+
error?: ReactNode;
|
|
59
|
+
/**
|
|
60
|
+
* Icon for success state.
|
|
61
|
+
*/
|
|
62
|
+
success?: ReactNode;
|
|
63
|
+
/**
|
|
64
|
+
* Icon for zoom action.
|
|
65
|
+
*/
|
|
66
|
+
zoom?: ReactNode;
|
|
67
|
+
/**
|
|
68
|
+
* Icon for document.
|
|
69
|
+
*/
|
|
70
|
+
document?: ReactNode;
|
|
71
|
+
/**
|
|
72
|
+
* Icon for download action.
|
|
73
|
+
*/
|
|
74
|
+
download?: ReactNode;
|
|
75
|
+
/**
|
|
76
|
+
* Icon for reload action.
|
|
77
|
+
*/
|
|
78
|
+
reload?: ReactNode;
|
|
79
|
+
/**
|
|
80
|
+
* Icon for delete action.
|
|
81
|
+
*/
|
|
82
|
+
delete?: ReactNode;
|
|
83
|
+
}
|
|
84
|
+
export interface UploaderProps extends Omit<NativeElementPropsWithoutKeyAndRef<'label'>, 'onChange'> {
|
|
85
|
+
/**
|
|
86
|
+
* The accept attributes of native input element.
|
|
87
|
+
* @example 'image/*', '.pdf,.doc,.docx'
|
|
88
|
+
*/
|
|
89
|
+
accept?: string;
|
|
90
|
+
/**
|
|
91
|
+
* Whether the input is disabled.
|
|
92
|
+
* @default false
|
|
93
|
+
*/
|
|
94
|
+
disabled?: boolean;
|
|
95
|
+
/**
|
|
96
|
+
* The id of input element.
|
|
97
|
+
*/
|
|
98
|
+
id?: string;
|
|
99
|
+
/**
|
|
100
|
+
* Whether to fill the width of the container.
|
|
101
|
+
* @default false
|
|
102
|
+
*/
|
|
103
|
+
isFillWidth?: boolean;
|
|
104
|
+
/**
|
|
105
|
+
* Since at Mezzanine we use a host element to wrap our input, most derived props will be passed to the host element.
|
|
106
|
+
* If you need direct control to the input element, use this prop to provide to it.
|
|
107
|
+
*/
|
|
108
|
+
inputProps?: UploaderInputElementProps;
|
|
109
|
+
/**
|
|
110
|
+
* The react ref passed to input element.
|
|
111
|
+
*/
|
|
112
|
+
inputRef?: React.Ref<HTMLInputElement>;
|
|
113
|
+
/**
|
|
114
|
+
* The name attribute of the input element.
|
|
115
|
+
*/
|
|
116
|
+
name?: string;
|
|
117
|
+
/**
|
|
118
|
+
* Whether can select multiple files to upload.
|
|
119
|
+
* @default false
|
|
120
|
+
*/
|
|
121
|
+
multiple?: boolean;
|
|
122
|
+
/**
|
|
123
|
+
* The type for upload component.
|
|
124
|
+
* @default 'base'
|
|
125
|
+
* @example 'base' | 'button'
|
|
126
|
+
*/
|
|
127
|
+
type?: UploadType;
|
|
128
|
+
/**
|
|
129
|
+
* Array of hints to display with the upload component.
|
|
130
|
+
*/
|
|
131
|
+
hints?: UploaderHint[];
|
|
132
|
+
/**
|
|
133
|
+
* Label configuration for different states.
|
|
134
|
+
*/
|
|
135
|
+
label?: UploaderLabel;
|
|
136
|
+
/**
|
|
137
|
+
* Icon configuration for different actions and states.
|
|
138
|
+
*/
|
|
139
|
+
icon?: UploaderIcon;
|
|
140
|
+
/**
|
|
141
|
+
* Provide `controllerRef` if you need detail data of file.
|
|
142
|
+
*/
|
|
143
|
+
controllerRef?: Ref<UploadPictureControl | null>;
|
|
144
|
+
/**
|
|
145
|
+
* Invoked by input change event.
|
|
146
|
+
*/
|
|
147
|
+
onChange?: ChangeEventHandler<HTMLInputElement>;
|
|
148
|
+
/**
|
|
149
|
+
* Fired after user selected files.
|
|
150
|
+
*/
|
|
151
|
+
onUpload?: (files: File[]) => void;
|
|
152
|
+
/**
|
|
153
|
+
* Fired after user deletes file.
|
|
154
|
+
*/
|
|
155
|
+
onDelete?: () => void;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* The react component for `mezzanine` uploader.
|
|
159
|
+
*/
|
|
160
|
+
declare const Uploader: import("react").ForwardRefExoticComponent<UploaderProps & import("react").RefAttributes<HTMLLabelElement>>;
|
|
161
|
+
export default Uploader;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
3
|
+
import { forwardRef, useId, useRef, useState, useMemo } from 'react';
|
|
4
|
+
import { uploaderClasses } from '@mezzanine-ui/core/upload';
|
|
5
|
+
import { UploadIcon } from '@mezzanine-ui/icons';
|
|
6
|
+
import Button from '../Button/Button.js';
|
|
7
|
+
import Typography from '../Typography/Typography.js';
|
|
8
|
+
import { composeRefs } from '../utils/composeRefs.js';
|
|
9
|
+
import Icon from '../Icon/Icon.js';
|
|
10
|
+
import cx from 'clsx';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* The react component for `mezzanine` uploader.
|
|
14
|
+
*/
|
|
15
|
+
const Uploader = forwardRef(function Uploader(props, ref) {
|
|
16
|
+
var _a, _b, _c;
|
|
17
|
+
const { accept, className, disabled = false, id, inputProps, inputRef: inputRefProp, isFillWidth = false, multiple = false, name, type, hints, label: labelConfig, icon: iconConfig, controllerRef: _controllerRef, onChange: onChangeProp, onUpload, onDelete: _onDelete, ...rest } = props;
|
|
18
|
+
const { name: nameFromInputProps, id: idFromInputProps, ...restInputProps } = inputProps || {};
|
|
19
|
+
// Generate unique id if not provided
|
|
20
|
+
const generatedId = useId();
|
|
21
|
+
const finalInputId = (_a = id !== null && id !== void 0 ? id : idFromInputProps) !== null && _a !== void 0 ? _a : generatedId;
|
|
22
|
+
const inputElementRef = useRef(null);
|
|
23
|
+
const [isDragging, setIsDragging] = useState(false);
|
|
24
|
+
const composedInputRef = useMemo(() => composeRefs([inputRefProp, inputElementRef]), [inputRefProp]);
|
|
25
|
+
const resolvedName = (_b = name !== null && name !== void 0 ? name : nameFromInputProps) !== null && _b !== void 0 ? _b : finalInputId;
|
|
26
|
+
const handleChange = (event) => {
|
|
27
|
+
if (onChangeProp) {
|
|
28
|
+
onChangeProp(event);
|
|
29
|
+
}
|
|
30
|
+
if (onUpload) {
|
|
31
|
+
const { files: fileList } = event.target;
|
|
32
|
+
if (fileList) {
|
|
33
|
+
const files = [];
|
|
34
|
+
for (let i = 0; i < fileList.length; i += 1) {
|
|
35
|
+
files.push(fileList[i]);
|
|
36
|
+
}
|
|
37
|
+
onUpload(files);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// Reset input value to allow selecting the same file again
|
|
41
|
+
event.currentTarget.value = '';
|
|
42
|
+
};
|
|
43
|
+
const handleDragOver = (event) => {
|
|
44
|
+
if (disabled || type === 'button') {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
event.preventDefault();
|
|
48
|
+
event.stopPropagation();
|
|
49
|
+
};
|
|
50
|
+
const handleDragEnter = (event) => {
|
|
51
|
+
if (disabled || type === 'button') {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
event.preventDefault();
|
|
55
|
+
event.stopPropagation();
|
|
56
|
+
setIsDragging(true);
|
|
57
|
+
};
|
|
58
|
+
const handleDragLeave = (event) => {
|
|
59
|
+
if (disabled || type === 'button') {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
// Only clear dragging state if leaving the label itself (not a child)
|
|
63
|
+
const rect = event.currentTarget.getBoundingClientRect();
|
|
64
|
+
const x = event.clientX;
|
|
65
|
+
const y = event.clientY;
|
|
66
|
+
if (x < rect.left ||
|
|
67
|
+
x > rect.right ||
|
|
68
|
+
y < rect.top ||
|
|
69
|
+
y > rect.bottom) {
|
|
70
|
+
setIsDragging(false);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
const handleDrop = (event) => {
|
|
74
|
+
if (disabled || type === 'button') {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
event.preventDefault();
|
|
78
|
+
event.stopPropagation();
|
|
79
|
+
setIsDragging(false);
|
|
80
|
+
const { dataTransfer } = event;
|
|
81
|
+
if ((dataTransfer === null || dataTransfer === void 0 ? void 0 : dataTransfer.files) && dataTransfer.files.length > 0) {
|
|
82
|
+
const files = [];
|
|
83
|
+
for (let i = 0; i < dataTransfer.files.length; i += 1) {
|
|
84
|
+
files.push(dataTransfer.files[i]);
|
|
85
|
+
}
|
|
86
|
+
if (onUpload) {
|
|
87
|
+
onUpload(files);
|
|
88
|
+
}
|
|
89
|
+
// Note: We cannot directly set input.files from drag & drop
|
|
90
|
+
// The onChange event will not be triggered for drag & drop
|
|
91
|
+
// If onChange is needed, it should be handled via onUpload callback
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
const uploadIcon = useMemo(() => {
|
|
95
|
+
var _a;
|
|
96
|
+
const icon = (_a = iconConfig === null || iconConfig === void 0 ? void 0 : iconConfig.upload) !== null && _a !== void 0 ? _a : UploadIcon;
|
|
97
|
+
return jsx(Icon, { className: uploaderClasses.uploadIcon, icon: icon });
|
|
98
|
+
}, [iconConfig]);
|
|
99
|
+
const uploadLabel = (labelConfig === null || labelConfig === void 0 ? void 0 : labelConfig.uploadLabel)
|
|
100
|
+
? labelConfig === null || labelConfig === void 0 ? void 0 : labelConfig.uploadLabel
|
|
101
|
+
: isFillWidth
|
|
102
|
+
? 'Drag the file here or'
|
|
103
|
+
: 'Upload';
|
|
104
|
+
const clickToUploadLabel = (_c = labelConfig === null || labelConfig === void 0 ? void 0 : labelConfig.clickToUpload) !== null && _c !== void 0 ? _c : 'Click to upload';
|
|
105
|
+
const handleClickToUpload = (event) => {
|
|
106
|
+
event.preventDefault();
|
|
107
|
+
event.stopPropagation();
|
|
108
|
+
if (!disabled && inputElementRef.current) {
|
|
109
|
+
inputElementRef.current.click();
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
return (jsx("label", { className: cx(uploaderClasses.host, type && uploaderClasses.type(type), type !== 'button' && isFillWidth && uploaderClasses.fillWidth, isDragging && uploaderClasses.dragging, type !== 'button' && disabled && uploaderClasses.disabled, className), onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDragOver: handleDragOver, onDrop: handleDrop, ref: ref, ...rest, children: jsxs(Fragment, { children: [type === 'base'
|
|
113
|
+
&& isFillWidth
|
|
114
|
+
&& jsxs("div", { className: uploaderClasses.uploadContent, children: [uploadIcon, jsxs(Typography, { className: uploaderClasses.uploadLabel, children: [uploadLabel && jsxs(Fragment, { children: [uploadLabel, ' '] }), jsx("span", { className: uploaderClasses.clickToUpload, children: clickToUploadLabel })] }), hints === null || hints === void 0 ? void 0 : hints.map((hint, index) => (jsx(Typography, { className: uploaderClasses.fillWidthHints, children: hint.label }, index)))] }), type === 'base'
|
|
115
|
+
&& !isFillWidth
|
|
116
|
+
&& jsxs("div", { className: uploaderClasses.uploadContent, children: [uploadIcon, jsx(Typography, { className: uploaderClasses.uploadLabel, children: uploadLabel })] }), type === 'button'
|
|
117
|
+
&& (jsxs(Button, { disabled: disabled, onClick: handleClickToUpload, children: [uploadIcon, jsx(Typography, { children: uploadLabel })] })), jsx("input", { ...restInputProps, accept: accept, "aria-disabled": disabled, className: uploaderClasses.input, disabled: disabled, id: finalInputId, multiple: multiple, name: resolvedName, onChange: handleChange, ref: composedInputRef, type: "file" })] }) }));
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
export { Uploader as default };
|
package/Upload/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
export
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
1
|
+
export { default as Upload } from './Upload';
|
|
2
|
+
export type { UploadFile, UploadProps } from './Upload';
|
|
3
|
+
export { default as Uploader } from './Uploader';
|
|
4
|
+
export type { UploaderProps } from './Uploader';
|
|
5
|
+
export { default as UploadItem } from './UploadItem';
|
|
6
|
+
export type { UploadItemProps } from './UploadItem';
|
|
7
|
+
export { default as UploadPictureCard } from './UploadPictureCard';
|
|
8
|
+
export type { UploadPictureCardProps } from './UploadPictureCard';
|
package/Upload/index.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
export { default as
|
|
2
|
-
export { default as
|
|
3
|
-
export { default as
|
|
4
|
-
export { default as
|
|
5
|
-
export { default as UploadResult } from './UploadResult.js';
|
|
1
|
+
export { default as Upload } from './Upload.js';
|
|
2
|
+
export { default as Uploader } from './Uploader.js';
|
|
3
|
+
export { default as UploadItem } from './UploadItem.js';
|
|
4
|
+
export { default as UploadPictureCard } from './UploadPictureCard.js';
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves the file type from a File object or URL.
|
|
3
|
+
* Prefers file.type if available, otherwise infers from URL extension.
|
|
4
|
+
*
|
|
5
|
+
* @param file - The File object (optional)
|
|
6
|
+
* @param url - The URL string (optional)
|
|
7
|
+
* @returns The resolved MIME type string, or empty string if unable to determine
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* // From file object
|
|
12
|
+
* resolveFileType(file, undefined) // 'image/jpeg'
|
|
13
|
+
*
|
|
14
|
+
* // From URL
|
|
15
|
+
* resolveFileType(undefined, 'https://example.com/image.jpg') // 'image/jpeg'
|
|
16
|
+
*
|
|
17
|
+
* // Neither provided
|
|
18
|
+
* resolveFileType(undefined, undefined) // ''
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare function resolveFileType(file?: File, url?: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Checks if a file is an image based on File object or URL.
|
|
24
|
+
*
|
|
25
|
+
* @param file - The File object (optional)
|
|
26
|
+
* @param url - The URL string (optional)
|
|
27
|
+
* @returns true if the file is an image, false otherwise
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```ts
|
|
31
|
+
* // From file object
|
|
32
|
+
* isImageFile(file, undefined) // true if file.type starts with 'image/'
|
|
33
|
+
*
|
|
34
|
+
* // From URL
|
|
35
|
+
* isImageFile(undefined, 'https://example.com/image.jpg') // true
|
|
36
|
+
*
|
|
37
|
+
* // Neither provided
|
|
38
|
+
* isImageFile(undefined, undefined) // false
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare function isImageFile(file?: File, url?: string): boolean;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supported image file extensions.
|
|
3
|
+
*/
|
|
4
|
+
const IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg', 'bmp', 'ico'];
|
|
5
|
+
/**
|
|
6
|
+
* Resolves the file type from a File object or URL.
|
|
7
|
+
* Prefers file.type if available, otherwise infers from URL extension.
|
|
8
|
+
*
|
|
9
|
+
* @param file - The File object (optional)
|
|
10
|
+
* @param url - The URL string (optional)
|
|
11
|
+
* @returns The resolved MIME type string, or empty string if unable to determine
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* // From file object
|
|
16
|
+
* resolveFileType(file, undefined) // 'image/jpeg'
|
|
17
|
+
*
|
|
18
|
+
* // From URL
|
|
19
|
+
* resolveFileType(undefined, 'https://example.com/image.jpg') // 'image/jpeg'
|
|
20
|
+
*
|
|
21
|
+
* // Neither provided
|
|
22
|
+
* resolveFileType(undefined, undefined) // ''
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
function resolveFileType(file, url) {
|
|
26
|
+
var _a;
|
|
27
|
+
// Prefer file.type if available
|
|
28
|
+
if (file === null || file === void 0 ? void 0 : file.type) {
|
|
29
|
+
return file.type;
|
|
30
|
+
}
|
|
31
|
+
// Infer from URL extension if URL is provided
|
|
32
|
+
if (url) {
|
|
33
|
+
const extension = (_a = url.split('.').pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase();
|
|
34
|
+
if (extension && IMAGE_EXTENSIONS.includes(extension)) {
|
|
35
|
+
// Normalize jpg to jpeg
|
|
36
|
+
return `image/${extension === 'jpg' ? 'jpeg' : extension}`;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return '';
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Checks if a file is an image based on File object or URL.
|
|
43
|
+
*
|
|
44
|
+
* @param file - The File object (optional)
|
|
45
|
+
* @param url - The URL string (optional)
|
|
46
|
+
* @returns true if the file is an image, false otherwise
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```ts
|
|
50
|
+
* // From file object
|
|
51
|
+
* isImageFile(file, undefined) // true if file.type starts with 'image/'
|
|
52
|
+
*
|
|
53
|
+
* // From URL
|
|
54
|
+
* isImageFile(undefined, 'https://example.com/image.jpg') // true
|
|
55
|
+
*
|
|
56
|
+
* // Neither provided
|
|
57
|
+
* isImageFile(undefined, undefined) // false
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
function isImageFile(file, url) {
|
|
61
|
+
const fileType = resolveFileType(file, url);
|
|
62
|
+
return fileType.startsWith('image/');
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export { isImageFile, resolveFileType };
|
|
@@ -20,9 +20,23 @@ export interface InputCheckProps extends Omit<NativeElementPropsWithoutKeyAndRef
|
|
|
20
20
|
* @default false
|
|
21
21
|
*/
|
|
22
22
|
error?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Whether the input check is focused.
|
|
25
|
+
* @default false
|
|
26
|
+
*/
|
|
27
|
+
focused?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Support text of input check.
|
|
30
|
+
*/
|
|
31
|
+
hint?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Whether the input check use segment style.
|
|
34
|
+
* @default false
|
|
35
|
+
*/
|
|
36
|
+
segmentedStyle?: boolean;
|
|
23
37
|
/**
|
|
24
38
|
* The size of input check.
|
|
25
|
-
* @default '
|
|
39
|
+
* @default 'main'
|
|
26
40
|
*/
|
|
27
41
|
size?: InputCheckSize;
|
|
28
42
|
}
|
|
@@ -7,12 +7,16 @@ import cx from 'clsx';
|
|
|
7
7
|
* The react component for `mezzanine` input check.
|
|
8
8
|
*/
|
|
9
9
|
const InputCheck = forwardRef(function InputCheck(props, ref) {
|
|
10
|
-
const { children, className, control, disabled, error, htmlFor, size = '
|
|
10
|
+
const { children, className, control, disabled, error, focused, hint, htmlFor, segmentedStyle = false, size = 'main', ...rest } = props;
|
|
11
11
|
return (jsxs("label", { ...rest, ref: ref, className: cx(inputCheckClasses.host, inputCheckClasses.size(size), {
|
|
12
12
|
[inputCheckClasses.disabled]: disabled,
|
|
13
13
|
[inputCheckClasses.error]: error,
|
|
14
|
+
[inputCheckClasses.segmented]: segmentedStyle,
|
|
14
15
|
[inputCheckClasses.withLabel]: !!children,
|
|
15
|
-
}, className), htmlFor: htmlFor, children: [jsx("span", { className: inputCheckClasses.control,
|
|
16
|
+
}, className), htmlFor: htmlFor, children: [jsx("span", { className: cx(inputCheckClasses.control, {
|
|
17
|
+
[inputCheckClasses.controlFocused]: focused,
|
|
18
|
+
[inputCheckClasses.controlSegmented]: segmentedStyle,
|
|
19
|
+
}), children: control }), children && (jsxs("span", { className: inputCheckClasses.label, children: [children, hint && jsx("span", { className: inputCheckClasses.hint, children: hint })] }))] }));
|
|
16
20
|
});
|
|
17
21
|
|
|
18
22
|
export { InputCheck as default };
|