@muraldevkit/ui-toolkit 4.68.0-dev-NFbt.1 → 4.68.0-dev-5W5E.1
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/dist/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -250
- package/dist/cjs/_virtual/_rollupPluginBabelHelpers.js.map +1 -1
- package/dist/cjs/components/avatar/MrlAvatar/MrlAvatar.js +17 -11
- package/dist/cjs/components/avatar/MrlAvatar/MrlAvatar.js.map +1 -1
- package/dist/cjs/components/avatar/MrlAvatarButton/MrlAvatarButton.js +27 -25
- package/dist/cjs/components/avatar/MrlAvatarButton/MrlAvatarButton.js.map +1 -1
- package/dist/cjs/components/badge/MrlBadge/MrlBadge.js +11 -5
- package/dist/cjs/components/badge/MrlBadge/MrlBadge.js.map +1 -1
- package/dist/cjs/components/badge/MrlBadgeNotification/MrlBadgeNotification.js +12 -4
- package/dist/cjs/components/badge/MrlBadgeNotification/MrlBadgeNotification.js.map +1 -1
- package/dist/cjs/components/breadcrumb/MrlBreadcrumbItem/MrlBreadcrumbItem.js +13 -6
- package/dist/cjs/components/breadcrumb/MrlBreadcrumbItem/MrlBreadcrumbItem.js.map +1 -1
- package/dist/cjs/components/breadcrumb/MrlBreadcrumbSeparator/MrlBreadcrumbSeparator.js +7 -3
- package/dist/cjs/components/breadcrumb/MrlBreadcrumbSeparator/MrlBreadcrumbSeparator.js.map +1 -1
- package/dist/cjs/components/breadcrumb/MrlBreadcrumbs/MrlBreadcrumbs.js +24 -28
- package/dist/cjs/components/breadcrumb/MrlBreadcrumbs/MrlBreadcrumbs.js.map +1 -1
- package/dist/cjs/components/button/MrlAnimatedIconButton/MrlAnimatedIconButton.js +20 -20
- package/dist/cjs/components/button/MrlAnimatedIconButton/MrlAnimatedIconButton.js.map +1 -1
- package/dist/cjs/components/button/MrlButton/MrlButton.js +21 -21
- package/dist/cjs/components/button/MrlButton/MrlButton.js.map +1 -1
- package/dist/cjs/components/button/MrlIconButton/MrlIconButton.js +20 -22
- package/dist/cjs/components/button/MrlIconButton/MrlIconButton.js.map +1 -1
- package/dist/cjs/components/button/MrlProcessingButton/MrlProcessingButton.js +14 -10
- package/dist/cjs/components/button/MrlProcessingButton/MrlProcessingButton.js.map +1 -1
- package/dist/cjs/components/button/MrlProcessingButton/actions.js +11 -16
- package/dist/cjs/components/button/MrlProcessingButton/actions.js.map +1 -1
- package/dist/cjs/components/button/helpers.js +4 -6
- package/dist/cjs/components/button/helpers.js.map +1 -1
- package/dist/cjs/components/callout/MrlCallout/MrlCallout.js +8 -9
- package/dist/cjs/components/callout/MrlCallout/MrlCallout.js.map +1 -1
- package/dist/cjs/components/container/MrlContainer/MrlContainer.js +14 -7
- package/dist/cjs/components/container/MrlContainer/MrlContainer.js.map +1 -1
- package/dist/cjs/components/divider/MrlDivider/MrlDivider.js +18 -6
- package/dist/cjs/components/divider/MrlDivider/MrlDivider.js.map +1 -1
- package/dist/cjs/components/empty/default/MrlEmpty.js +8 -4
- package/dist/cjs/components/empty/default/MrlEmpty.js.map +1 -1
- package/dist/cjs/components/empty/large/MrlEmptyLarge.js +8 -4
- package/dist/cjs/components/empty/large/MrlEmptyLarge.js.map +1 -1
- package/dist/cjs/components/error-boundary/MrlErrorBoundary.js +30 -38
- package/dist/cjs/components/error-boundary/MrlErrorBoundary.js.map +1 -1
- package/dist/cjs/components/filter/MrlFilter/MrlFilter.js +7 -3
- package/dist/cjs/components/filter/MrlFilter/MrlFilter.js.map +1 -1
- package/dist/cjs/components/filter/MrlFilterContext/MrlFilterContext.js +8 -7
- package/dist/cjs/components/filter/MrlFilterContext/MrlFilterContext.js.map +1 -1
- package/dist/cjs/components/filter/MrlFilterItem/MrlFilterItem.js +9 -3
- package/dist/cjs/components/filter/MrlFilterItem/MrlFilterItem.js.map +1 -1
- package/dist/cjs/components/focus-trap/MrlFocusTrap/MrlFocusTrap.js +6 -5
- package/dist/cjs/components/focus-trap/MrlFocusTrap/MrlFocusTrap.js.map +1 -1
- package/dist/cjs/components/form/checkbox/MrlCheckbox/MrlCheckbox.js +13 -4
- package/dist/cjs/components/form/checkbox/MrlCheckbox/MrlCheckbox.js.map +1 -1
- package/dist/cjs/components/form/checkbox/MrlCheckboxStandalone/MrlCheckboxStandalone.js +11 -7
- package/dist/cjs/components/form/checkbox/MrlCheckboxStandalone/MrlCheckboxStandalone.js.map +1 -1
- package/dist/cjs/components/form/date-picker/MrlDatePicker.js +21 -14
- package/dist/cjs/components/form/date-picker/MrlDatePicker.js.map +1 -1
- package/dist/cjs/components/form/fieldset/MrlFieldset/MrlFieldset.js +8 -4
- package/dist/cjs/components/form/fieldset/MrlFieldset/MrlFieldset.js.map +1 -1
- package/dist/cjs/components/form/hooks/useActiveColor.js +2 -2
- package/dist/cjs/components/form/hooks/useActiveColor.js.map +1 -1
- package/dist/cjs/components/form/hooks/useIsEditable.js +3 -3
- package/dist/cjs/components/form/hooks/useIsEditable.js.map +1 -1
- package/dist/cjs/components/form/label/MrlLabel/MrlLabel.js +12 -5
- package/dist/cjs/components/form/label/MrlLabel/MrlLabel.js.map +1 -1
- package/dist/cjs/components/form/label/MrlLabelWithDescription/MrlLabelWithDescription.js +19 -5
- package/dist/cjs/components/form/label/MrlLabelWithDescription/MrlLabelWithDescription.js.map +1 -1
- package/dist/cjs/components/form/legacy-select/MrlLegacySelect/MrlLegacySelect.js +42 -31
- package/dist/cjs/components/form/legacy-select/MrlLegacySelect/MrlLegacySelect.js.map +1 -1
- package/dist/cjs/components/form/legacy-select/MrlLegacySelectItem/MrlLegacySelectItem.js +21 -12
- package/dist/cjs/components/form/legacy-select/MrlLegacySelectItem/MrlLegacySelectItem.js.map +1 -1
- package/dist/cjs/components/form/legacy-select/MrlLegacySelectMenu/MrlLegacySelectMenu.js +19 -11
- package/dist/cjs/components/form/legacy-select/MrlLegacySelectMenu/MrlLegacySelectMenu.js.map +1 -1
- package/dist/cjs/components/form/legacy-select/context/SelectContext.js +8 -7
- package/dist/cjs/components/form/legacy-select/context/SelectContext.js.map +1 -1
- package/dist/cjs/components/form/legacy-select/index.js +4 -3
- package/dist/cjs/components/form/legacy-select/index.js.map +1 -1
- package/dist/cjs/components/form/radio/MrlRadioButton/MrlRadioButton.js +7 -3
- package/dist/cjs/components/form/radio/MrlRadioButton/MrlRadioButton.js.map +1 -1
- package/dist/cjs/components/form/radio/MrlRadioButtonStandalone/MrlRadioButtonStandalone.js +11 -5
- package/dist/cjs/components/form/radio/MrlRadioButtonStandalone/MrlRadioButtonStandalone.js.map +1 -1
- package/dist/cjs/components/form/radio/MrlRadioGroup/MrlRadioGroup.js +3 -2
- package/dist/cjs/components/form/radio/MrlRadioGroup/MrlRadioGroup.js.map +1 -1
- package/dist/cjs/components/form/select/MrlCreatableSelect/MrlCreatableSelect.js +10 -8
- package/dist/cjs/components/form/select/MrlCreatableSelect/MrlCreatableSelect.js.map +1 -1
- package/dist/cjs/components/form/select/MrlMultiCreatableSelect/MrlMultiCreatableSelect.js +10 -8
- package/dist/cjs/components/form/select/MrlMultiCreatableSelect/MrlMultiCreatableSelect.js.map +1 -1
- package/dist/cjs/components/form/select/MrlMultiSelect/MrlMultiSelect.js +9 -5
- package/dist/cjs/components/form/select/MrlMultiSelect/MrlMultiSelect.js.map +1 -1
- package/dist/cjs/components/form/select/MrlSelect/MrlSelect.js +9 -5
- package/dist/cjs/components/form/select/MrlSelect/MrlSelect.js.map +1 -1
- package/dist/cjs/components/form/select/components/MrlSelectClearIndicator.js +3 -2
- package/dist/cjs/components/form/select/components/MrlSelectClearIndicator.js.map +1 -1
- package/dist/cjs/components/form/select/components/MrlSelectContainer.js +3 -2
- package/dist/cjs/components/form/select/components/MrlSelectContainer.js.map +1 -1
- package/dist/cjs/components/form/select/components/MrlSelectDropdownIndicator.js +3 -2
- package/dist/cjs/components/form/select/components/MrlSelectDropdownIndicator.js.map +1 -1
- package/dist/cjs/components/form/select/components/MrlSelectMultiValue.js +9 -3
- package/dist/cjs/components/form/select/components/MrlSelectMultiValue.js.map +1 -1
- package/dist/cjs/components/form/select/components/MrlSelectMultiValueRemove.js +3 -2
- package/dist/cjs/components/form/select/components/MrlSelectMultiValueRemove.js.map +1 -1
- package/dist/cjs/components/form/select/components/MrlSelectOption.js +3 -2
- package/dist/cjs/components/form/select/components/MrlSelectOption.js.map +1 -1
- package/dist/cjs/components/form/select/components/MrlSelectValueContainer.js +3 -2
- package/dist/cjs/components/form/select/components/MrlSelectValueContainer.js.map +1 -1
- package/dist/cjs/components/form/select/styles/default.js +18 -18
- package/dist/cjs/components/form/select/styles/default.js.map +1 -1
- package/dist/cjs/components/form/select/styles/inline.js +2 -2
- package/dist/cjs/components/form/select/styles/inline.js.map +1 -1
- package/dist/cjs/components/form/select/styles/inlineNoLabel.js +3 -3
- package/dist/cjs/components/form/select/styles/inlineNoLabel.js.map +1 -1
- package/dist/cjs/components/form/select/styles/inlineStacked.js +2 -2
- package/dist/cjs/components/form/select/styles/inlineStacked.js.map +1 -1
- package/dist/cjs/components/form/switch/MrlSwitch/MrlSwitch.js +14 -7
- package/dist/cjs/components/form/switch/MrlSwitch/MrlSwitch.js.map +1 -1
- package/dist/cjs/components/form/switch/MrlSwitchStandalone/MrlSwitchStandalone.js +13 -9
- package/dist/cjs/components/form/switch/MrlSwitchStandalone/MrlSwitchStandalone.js.map +1 -1
- package/dist/cjs/components/form/text-input/MrlEditableTextInput/MrlEditableTextInput.js +31 -19
- package/dist/cjs/components/form/text-input/MrlEditableTextInput/MrlEditableTextInput.js.map +1 -1
- package/dist/cjs/components/form/text-input/MrlEditableTextInput/MrlEditableTextInputRightIcon.js +14 -17
- package/dist/cjs/components/form/text-input/MrlEditableTextInput/MrlEditableTextInputRightIcon.js.map +1 -1
- package/dist/cjs/components/form/text-input/MrlTextInput/MrlTextInput.js +28 -23
- package/dist/cjs/components/form/text-input/MrlTextInput/MrlTextInput.js.map +1 -1
- package/dist/cjs/components/form/text-input/MrlTextInput/MrlTextInputRightIcon.js +14 -17
- package/dist/cjs/components/form/text-input/MrlTextInput/MrlTextInputRightIcon.js.map +1 -1
- package/dist/cjs/components/form/textarea/MrlEditableTextarea/MrlEditableTextarea.js +20 -16
- package/dist/cjs/components/form/textarea/MrlEditableTextarea/MrlEditableTextarea.js.map +1 -1
- package/dist/cjs/components/form/textarea/MrlEditableTextarea/MrlEditableTextareaRightButton.js +14 -17
- package/dist/cjs/components/form/textarea/MrlEditableTextarea/MrlEditableTextareaRightButton.js.map +1 -1
- package/dist/cjs/components/form/textarea/MrlTextarea/MrlTextarea.js +16 -9
- package/dist/cjs/components/form/textarea/MrlTextarea/MrlTextarea.js.map +1 -1
- package/dist/cjs/components/form/utils.js +2 -4
- package/dist/cjs/components/form/utils.js.map +1 -1
- package/dist/cjs/components/grid/MrlCol/MrlCol.js +37 -46
- package/dist/cjs/components/grid/MrlCol/MrlCol.js.map +1 -1
- package/dist/cjs/components/grid/MrlGrid/MrlGrid.js +7 -3
- package/dist/cjs/components/grid/MrlGrid/MrlGrid.js.map +1 -1
- package/dist/cjs/components/grid/MrlRow/MrlRow.js +7 -3
- package/dist/cjs/components/grid/MrlRow/MrlRow.js.map +1 -1
- package/dist/cjs/components/keystroke/MrlKeystroke/MrlKeystroke.js +7 -3
- package/dist/cjs/components/keystroke/MrlKeystroke/MrlKeystroke.js.map +1 -1
- package/dist/cjs/components/keystroke/MrlKeystrokes/MrlKeystrokes.js +7 -3
- package/dist/cjs/components/keystroke/MrlKeystrokes/MrlKeystrokes.js.map +1 -1
- package/dist/cjs/components/layout/MrlMain/MrlMain.js +9 -3
- package/dist/cjs/components/layout/MrlMain/MrlMain.js.map +1 -1
- package/dist/cjs/components/layout/MrlPage/MrlPage.js +9 -3
- package/dist/cjs/components/layout/MrlPage/MrlPage.js.map +1 -1
- package/dist/cjs/components/layout/MrlPage/index.js +3 -2
- package/dist/cjs/components/layout/MrlPage/index.js.map +1 -1
- package/dist/cjs/components/layout/MrlSidebar/MrlSidebar.js +27 -15
- package/dist/cjs/components/layout/MrlSidebar/MrlSidebar.js.map +1 -1
- package/dist/cjs/components/layout/MrlTopbar/MrlTopbar.js +10 -3
- package/dist/cjs/components/layout/MrlTopbar/MrlTopbar.js.map +1 -1
- package/dist/cjs/components/layout/context/LayoutContext.js +7 -6
- package/dist/cjs/components/layout/context/LayoutContext.js.map +1 -1
- package/dist/cjs/components/layout/error-page/MrlBrandColors/MrlBrandColors.js +18 -14
- package/dist/cjs/components/layout/error-page/MrlBrandColors/MrlBrandColors.js.map +1 -1
- package/dist/cjs/components/layout/error-page/MrlErrorPage/MrlErrorPage.js +13 -9
- package/dist/cjs/components/layout/error-page/MrlErrorPage/MrlErrorPage.js.map +1 -1
- package/dist/cjs/components/layout/utils.js +2 -2
- package/dist/cjs/components/layout/utils.js.map +1 -1
- package/dist/cjs/components/link/MrlLink/MrlLink.js +13 -4
- package/dist/cjs/components/link/MrlLink/MrlLink.js.map +1 -1
- package/dist/cjs/components/link/MrlLinkButton/MrlLinkButton.js +16 -14
- package/dist/cjs/components/link/MrlLinkButton/MrlLinkButton.js.map +1 -1
- package/dist/cjs/components/live-region/MrlLiveRegion/MrlLiveRegion.js +13 -12
- package/dist/cjs/components/live-region/MrlLiveRegion/MrlLiveRegion.js.map +1 -1
- package/dist/cjs/components/loader/MrlProgressBar/MrlProgressBar.js +16 -6
- package/dist/cjs/components/loader/MrlProgressBar/MrlProgressBar.js.map +1 -1
- package/dist/cjs/components/loader/MrlSpinner/MrlSpinner.js +16 -4
- package/dist/cjs/components/loader/MrlSpinner/MrlSpinner.js.map +1 -1
- package/dist/cjs/components/menu/MrlMenu/MrlMenu.js +61 -63
- package/dist/cjs/components/menu/MrlMenu/MrlMenu.js.map +1 -1
- package/dist/cjs/components/menu/MrlMenu/utilities.js +4 -6
- package/dist/cjs/components/menu/MrlMenu/utilities.js.map +1 -1
- package/dist/cjs/components/menu/MrlMenuGroup/MrlMenuGroup.js +4 -3
- package/dist/cjs/components/menu/MrlMenuGroup/MrlMenuGroup.js.map +1 -1
- package/dist/cjs/components/menu/MrlMenuItem/MrlMenuItem.js +24 -19
- package/dist/cjs/components/menu/MrlMenuItem/MrlMenuItem.js.map +1 -1
- package/dist/cjs/components/menu/MrlMenuItemLink/MrlMenuItemLink.js +10 -6
- package/dist/cjs/components/menu/MrlMenuItemLink/MrlMenuItemLink.js.map +1 -1
- package/dist/cjs/components/menu/context/MrlMenuContext.js +3 -2
- package/dist/cjs/components/menu/context/MrlMenuContext.js.map +1 -1
- package/dist/cjs/components/menu/hooks/useBrowserEdgeScroll.js +19 -15
- package/dist/cjs/components/menu/hooks/useBrowserEdgeScroll.js.map +1 -1
- package/dist/cjs/components/menu/hooks/useMenuScroll.js +8 -8
- package/dist/cjs/components/menu/hooks/useMenuScroll.js.map +1 -1
- package/dist/cjs/components/menu/hooks/useSubMenuElementPosition.js +3 -3
- package/dist/cjs/components/menu/hooks/useSubMenuElementPosition.js.map +1 -1
- package/dist/cjs/components/menu/utilities/flip-position.js +1 -1
- package/dist/cjs/components/menu/utilities/flip-position.js.map +1 -1
- package/dist/cjs/components/modal/MrlModal/MrlModal.js +29 -25
- package/dist/cjs/components/modal/MrlModal/MrlModal.js.map +1 -1
- package/dist/cjs/components/modal/MrlModalContent/MrlModalContent.js +12 -8
- package/dist/cjs/components/modal/MrlModalContent/MrlModalContent.js.map +1 -1
- package/dist/cjs/components/modal/MrlModalContext/MrlModalContext.js +4 -3
- package/dist/cjs/components/modal/MrlModalContext/MrlModalContext.js.map +1 -1
- package/dist/cjs/components/modal/MrlModalFooter/MrlModalFooter.js +13 -6
- package/dist/cjs/components/modal/MrlModalFooter/MrlModalFooter.js.map +1 -1
- package/dist/cjs/components/modal/MrlModalHeader/MrlModalHeader.js +12 -6
- package/dist/cjs/components/modal/MrlModalHeader/MrlModalHeader.js.map +1 -1
- package/dist/cjs/components/navigation-sidebar/MrlSidebarNavGroup/MrlSidebarNavGroup.js +7 -3
- package/dist/cjs/components/navigation-sidebar/MrlSidebarNavGroup/MrlSidebarNavGroup.js.map +1 -1
- package/dist/cjs/components/navigation-sidebar/MrlSidebarNavItem/MrlSidebarNavItem.js +11 -3
- package/dist/cjs/components/navigation-sidebar/MrlSidebarNavItem/MrlSidebarNavItem.js.map +1 -1
- package/dist/cjs/components/notification/MrlBlockNotification/MrlBlockNotification.js +26 -19
- package/dist/cjs/components/notification/MrlBlockNotification/MrlBlockNotification.js.map +1 -1
- package/dist/cjs/components/notification/MrlInlineMessage/MrlInlineMessage.js +17 -7
- package/dist/cjs/components/notification/MrlInlineMessage/MrlInlineMessage.js.map +1 -1
- package/dist/cjs/components/notification/MrlToast/MrlToast.js +18 -9
- package/dist/cjs/components/notification/MrlToast/MrlToast.js.map +1 -1
- package/dist/cjs/components/pagination/MrlPagination/MrlPagination.js +7 -3
- package/dist/cjs/components/pagination/MrlPagination/MrlPagination.js.map +1 -1
- package/dist/cjs/components/pagination/MrlPaginationButton/MrlPaginationButton.js +7 -3
- package/dist/cjs/components/pagination/MrlPaginationButton/MrlPaginationButton.js.map +1 -1
- package/dist/cjs/components/pagination/MrlPaginationText/MrlPaginationText.js +8 -4
- package/dist/cjs/components/pagination/MrlPaginationText/MrlPaginationText.js.map +1 -1
- package/dist/cjs/components/panel/MrlPanel/MrlPanel.js +25 -17
- package/dist/cjs/components/panel/MrlPanel/MrlPanel.js.map +1 -1
- package/dist/cjs/components/panel/MrlPanelContext/MrlPanelContext.js +3 -2
- package/dist/cjs/components/panel/MrlPanelContext/MrlPanelContext.js.map +1 -1
- package/dist/cjs/components/panel/MrlPanelFooter/MrlPanelFooter.js +9 -5
- package/dist/cjs/components/panel/MrlPanelFooter/MrlPanelFooter.js.map +1 -1
- package/dist/cjs/components/panel/MrlPanelStickyHeader/MrlPanelStickyHeader.js +8 -4
- package/dist/cjs/components/panel/MrlPanelStickyHeader/MrlPanelStickyHeader.js.map +1 -1
- package/dist/cjs/components/popover/MrlPopover/MrlPopover.js +77 -73
- package/dist/cjs/components/popover/MrlPopover/MrlPopover.js.map +1 -1
- package/dist/cjs/components/popover/MrlPopover/MrlPopoverScrollContainer.js +3 -2
- package/dist/cjs/components/popover/MrlPopover/MrlPopoverScrollContainer.js.map +1 -1
- package/dist/cjs/components/popover/MrlPopover/context/MrlPopoverContext.js +3 -2
- package/dist/cjs/components/popover/MrlPopover/context/MrlPopoverContext.js.map +1 -1
- package/dist/cjs/components/popover/MrlPopover/hooks/use-mrl-popover-event-handlers.js +22 -23
- package/dist/cjs/components/popover/MrlPopover/hooks/use-mrl-popover-event-handlers.js.map +1 -1
- package/dist/cjs/components/popover/MrlPopover/utilities/get-data-point.js +1 -1
- package/dist/cjs/components/popover/MrlPopover/utilities/get-data-point.js.map +1 -1
- package/dist/cjs/components/popover/MrlPopover/utilities/get-offset.js +1 -1
- package/dist/cjs/components/popover/MrlPopover/utilities/get-offset.js.map +1 -1
- package/dist/cjs/components/portal/MrlPortal.js +5 -4
- package/dist/cjs/components/portal/MrlPortal.js.map +1 -1
- package/dist/cjs/components/rovingTabindex/MrlRovingTabindex/MrlRovingTabindex.js +237 -263
- package/dist/cjs/components/rovingTabindex/MrlRovingTabindex/MrlRovingTabindex.js.map +1 -1
- package/dist/cjs/components/skeleton/MrlSkeleton/MrlSkeleton.js +11 -5
- package/dist/cjs/components/skeleton/MrlSkeleton/MrlSkeleton.js.map +1 -1
- package/dist/cjs/components/skeleton/MrlSkeletonText/MrlSkeletonText.js +12 -6
- package/dist/cjs/components/skeleton/MrlSkeletonText/MrlSkeletonText.js.map +1 -1
- package/dist/cjs/components/svg/MrlSvg/MrlSvg.js +17 -17
- package/dist/cjs/components/svg/MrlSvg/MrlSvg.js.map +1 -1
- package/dist/cjs/components/svg/MrlSvgAnimate/MrlSvgAnimate.js +20 -15
- package/dist/cjs/components/svg/MrlSvgAnimate/MrlSvgAnimate.js.map +1 -1
- package/dist/cjs/components/table/MrlSmartTable/MrlSmartTable.js +78 -96
- package/dist/cjs/components/table/MrlSmartTable/MrlSmartTable.js.map +1 -1
- package/dist/cjs/components/table/MrlSmartTable/components/DefaultCellContent.js +5 -4
- package/dist/cjs/components/table/MrlSmartTable/components/DefaultCellContent.js.map +1 -1
- package/dist/cjs/components/table/MrlTable/MrlTable.js +7 -3
- package/dist/cjs/components/table/MrlTable/MrlTable.js.map +1 -1
- package/dist/cjs/components/table/MrlTableBody/MrlTableBody.js +7 -3
- package/dist/cjs/components/table/MrlTableBody/MrlTableBody.js.map +1 -1
- package/dist/cjs/components/table/MrlTableCell/MrlTableCell.js +12 -3
- package/dist/cjs/components/table/MrlTableCell/MrlTableCell.js.map +1 -1
- package/dist/cjs/components/table/MrlTableColumn/MrlTableColumn.js +13 -3
- package/dist/cjs/components/table/MrlTableColumn/MrlTableColumn.js.map +1 -1
- package/dist/cjs/components/table/MrlTableEmptyState/MrlTableEmptyState.js +7 -3
- package/dist/cjs/components/table/MrlTableEmptyState/MrlTableEmptyState.js.map +1 -1
- package/dist/cjs/components/table/MrlTableHeader/MrlTableHeader.js +7 -3
- package/dist/cjs/components/table/MrlTableHeader/MrlTableHeader.js.map +1 -1
- package/dist/cjs/components/table/MrlTableRow/MrlTableRow.js +13 -7
- package/dist/cjs/components/table/MrlTableRow/MrlTableRow.js.map +1 -1
- package/dist/cjs/components/table/utils.js +4 -10
- package/dist/cjs/components/table/utils.js.map +1 -1
- package/dist/cjs/components/tabs/MrlTab/MrlTab.js +16 -9
- package/dist/cjs/components/tabs/MrlTab/MrlTab.js.map +1 -1
- package/dist/cjs/components/tabs/MrlTabContent/MrlTabContent.js +12 -5
- package/dist/cjs/components/tabs/MrlTabContent/MrlTabContent.js.map +1 -1
- package/dist/cjs/components/tabs/MrlTabGroup/MrlTabGroup.js +15 -13
- package/dist/cjs/components/tabs/MrlTabGroup/MrlTabGroup.js.map +1 -1
- package/dist/cjs/components/tabs/MrlTabLink/MrlTabLink.js +16 -9
- package/dist/cjs/components/tabs/MrlTabLink/MrlTabLink.js.map +1 -1
- package/dist/cjs/components/tabs/MrlTabs/MrlTabs.js +16 -10
- package/dist/cjs/components/tabs/MrlTabs/MrlTabs.js.map +1 -1
- package/dist/cjs/components/text/MrlText/MrlText.js +14 -5
- package/dist/cjs/components/text/MrlText/MrlText.js.map +1 -1
- package/dist/cjs/components/text/MrlTextHeading/MrlTextHeading.js +14 -4
- package/dist/cjs/components/text/MrlTextHeading/MrlTextHeading.js.map +1 -1
- package/dist/cjs/components/toolbar/MrlToolbar/MrlToolbar.js +17 -8
- package/dist/cjs/components/toolbar/MrlToolbar/MrlToolbar.js.map +1 -1
- package/dist/cjs/components/toolbar/MrlToolbarButton/MrlToolbarButton.js +7 -3
- package/dist/cjs/components/toolbar/MrlToolbarButton/MrlToolbarButton.js.map +1 -1
- package/dist/cjs/components/toolbar/MrlToolbarItem/MrlToolbarItem.js +1 -1
- package/dist/cjs/components/toolbar/MrlToolbarItem/MrlToolbarItem.js.map +1 -1
- package/dist/cjs/components/tooltip/MrlTooltip/MrlTooltip.js +37 -36
- package/dist/cjs/components/tooltip/MrlTooltip/MrlTooltip.js.map +1 -1
- package/dist/cjs/components/tooltip/MrlTooltipContent/MrlTooltipContent.js +13 -4
- package/dist/cjs/components/tooltip/MrlTooltipContent/MrlTooltipContent.js.map +1 -1
- package/dist/cjs/components/tooltip/useTooltipPosition/index.js +21 -19
- package/dist/cjs/components/tooltip/useTooltipPosition/index.js.map +1 -1
- package/dist/cjs/components/tooltip/useTooltipPosition/utilities.js +4 -4
- package/dist/cjs/components/tooltip/useTooltipPosition/utilities.js.map +1 -1
- package/dist/cjs/components/tooltip/utils.js +3 -3
- package/dist/cjs/components/tooltip/utils.js.map +1 -1
- package/dist/cjs/hooks/useAutoClose/useAutoClose.js +7 -6
- package/dist/cjs/hooks/useAutoClose/useAutoClose.js.map +1 -1
- package/dist/cjs/hooks/useBreakpoint/index.js +5 -5
- package/dist/cjs/hooks/useBreakpoint/index.js.map +1 -1
- package/dist/cjs/hooks/useClickOutside/index.js +4 -4
- package/dist/cjs/hooks/useClickOutside/index.js.map +1 -1
- package/dist/cjs/hooks/useCoordinate/index.js +19 -28
- package/dist/cjs/hooks/useCoordinate/index.js.map +1 -1
- package/dist/cjs/hooks/useElementDimensions/index.js +21 -33
- package/dist/cjs/hooks/useElementDimensions/index.js.map +1 -1
- package/dist/cjs/hooks/useHasFocusableDescendant/index.js +7 -8
- package/dist/cjs/hooks/useHasFocusableDescendant/index.js.map +1 -1
- package/dist/cjs/hooks/useScrollbarInfo/index.js +11 -10
- package/dist/cjs/hooks/useScrollbarInfo/index.js.map +1 -1
- package/dist/cjs/hooks/useTriggerPosition/index.js +20 -22
- package/dist/cjs/hooks/useTriggerPosition/index.js.map +1 -1
- package/dist/cjs/hooks/useTriggerPosition/utilities.js +15 -23
- package/dist/cjs/hooks/useTriggerPosition/utilities.js.map +1 -1
- package/dist/cjs/utils/checkInvalidAttributes/index.js +2 -4
- package/dist/cjs/utils/checkInvalidAttributes/index.js.map +1 -1
- package/dist/cjs/utils/frameDebounce/index.js +27 -28
- package/dist/cjs/utils/frameDebounce/index.js.map +1 -1
- package/dist/cjs/utils/getCamelCase/getCamelCase.js +2 -2
- package/dist/cjs/utils/getCamelCase/getCamelCase.js.map +1 -1
- package/dist/cjs/utils/getScrollableContainer/getScrollableContainer.js +1 -1
- package/dist/cjs/utils/getScrollableContainer/getScrollableContainer.js.map +1 -1
- package/dist/cjs/utils/hasHorizontalScroll/hasHorizontalScroll.js +1 -1
- package/dist/cjs/utils/hasHorizontalScroll/hasHorizontalScroll.js.map +1 -1
- package/dist/cjs/utils/hasScrollContent/hasScrollContent.js +1 -1
- package/dist/cjs/utils/hasScrollContent/hasScrollContent.js.map +1 -1
- package/dist/cjs/utils/isElementAriaDisabled/isElementAriaDisabled.js +1 -1
- package/dist/cjs/utils/isElementAriaDisabled/isElementAriaDisabled.js.map +1 -1
- package/dist/cjs/utils/isElementScrollable/index.js +1 -1
- package/dist/cjs/utils/isElementScrollable/index.js.map +1 -1
- package/dist/cjs/utils/isImagePath/index.js +4 -3
- package/dist/cjs/utils/isImagePath/index.js.map +1 -1
- package/dist/cjs/utils/isImageUri/index.js +1 -1
- package/dist/cjs/utils/isImageUri/index.js.map +1 -1
- package/dist/cjs/utils/isObject/isObject.js +1 -1
- package/dist/cjs/utils/isObject/isObject.js.map +1 -1
- package/dist/cjs/utils/isTouch/index.js +1 -1
- package/dist/cjs/utils/isTouch/index.js.map +1 -1
- package/dist/cjs/utils/layers/index.js +1 -1
- package/dist/cjs/utils/layers/index.js.map +1 -1
- package/dist/cjs/utils/noop/index.js +1 -1
- package/dist/cjs/utils/noop/index.js.map +1 -1
- package/dist/cjs/utils/preventDefault/preventDefault.js +1 -1
- package/dist/cjs/utils/preventDefault/preventDefault.js.map +1 -1
- package/dist/cjs/utils/setAttributes/setAttributes.js +11 -5
- package/dist/cjs/utils/setAttributes/setAttributes.js.map +1 -1
- package/dist/cjs/utils/trapFocus/index.js +9 -11
- package/dist/cjs/utils/trapFocus/index.js.map +1 -1
- package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +1 -234
- package/dist/esm/_virtual/_rollupPluginBabelHelpers.js.map +1 -1
- package/dist/esm/components/avatar/MrlAvatar/MrlAvatar.js +12 -10
- package/dist/esm/components/avatar/MrlAvatar/MrlAvatar.js.map +1 -1
- package/dist/esm/components/avatar/MrlAvatarButton/MrlAvatarButton.js +22 -24
- package/dist/esm/components/avatar/MrlAvatarButton/MrlAvatarButton.js.map +1 -1
- package/dist/esm/components/badge/MrlBadge/MrlBadge.js +6 -4
- package/dist/esm/components/badge/MrlBadge/MrlBadge.js.map +1 -1
- package/dist/esm/components/badge/MrlBadgeNotification/MrlBadgeNotification.js +7 -3
- package/dist/esm/components/badge/MrlBadgeNotification/MrlBadgeNotification.js.map +1 -1
- package/dist/esm/components/breadcrumb/MrlBreadcrumbItem/MrlBreadcrumbItem.js +7 -4
- package/dist/esm/components/breadcrumb/MrlBreadcrumbItem/MrlBreadcrumbItem.js.map +1 -1
- package/dist/esm/components/breadcrumb/MrlBreadcrumbs/MrlBreadcrumbs.js +18 -26
- package/dist/esm/components/breadcrumb/MrlBreadcrumbs/MrlBreadcrumbs.js.map +1 -1
- package/dist/esm/components/button/MrlAnimatedIconButton/MrlAnimatedIconButton.js +14 -18
- package/dist/esm/components/button/MrlAnimatedIconButton/MrlAnimatedIconButton.js.map +1 -1
- package/dist/esm/components/button/MrlButton/MrlButton.js +16 -20
- package/dist/esm/components/button/MrlButton/MrlButton.js.map +1 -1
- package/dist/esm/components/button/MrlIconButton/MrlIconButton.js +14 -20
- package/dist/esm/components/button/MrlIconButton/MrlIconButton.js.map +1 -1
- package/dist/esm/components/button/MrlProcessingButton/MrlProcessingButton.js +7 -7
- package/dist/esm/components/button/MrlProcessingButton/MrlProcessingButton.js.map +1 -1
- package/dist/esm/components/button/MrlProcessingButton/actions.js +12 -17
- package/dist/esm/components/button/MrlProcessingButton/actions.js.map +1 -1
- package/dist/esm/components/button/helpers.js +4 -6
- package/dist/esm/components/button/helpers.js.map +1 -1
- package/dist/esm/components/callout/MrlCallout/MrlCallout.js +5 -7
- package/dist/esm/components/callout/MrlCallout/MrlCallout.js.map +1 -1
- package/dist/esm/components/container/MrlContainer/MrlContainer.js +7 -4
- package/dist/esm/components/container/MrlContainer/MrlContainer.js.map +1 -1
- package/dist/esm/components/divider/MrlDivider/MrlDivider.js +13 -5
- package/dist/esm/components/divider/MrlDivider/MrlDivider.js.map +1 -1
- package/dist/esm/components/empty/default/MrlEmpty.js +1 -1
- package/dist/esm/components/empty/default/MrlEmpty.js.map +1 -1
- package/dist/esm/components/empty/large/MrlEmptyLarge.js +1 -1
- package/dist/esm/components/empty/large/MrlEmptyLarge.js.map +1 -1
- package/dist/esm/components/error-boundary/MrlErrorBoundary.js +28 -37
- package/dist/esm/components/error-boundary/MrlErrorBoundary.js.map +1 -1
- package/dist/esm/components/filter/MrlFilterContext/MrlFilterContext.js +5 -5
- package/dist/esm/components/filter/MrlFilterContext/MrlFilterContext.js.map +1 -1
- package/dist/esm/components/filter/MrlFilterItem/MrlFilterItem.js +4 -2
- package/dist/esm/components/filter/MrlFilterItem/MrlFilterItem.js.map +1 -1
- package/dist/esm/components/focus-trap/MrlFocusTrap/MrlFocusTrap.js +3 -3
- package/dist/esm/components/focus-trap/MrlFocusTrap/MrlFocusTrap.js.map +1 -1
- package/dist/esm/components/form/checkbox/MrlCheckbox/MrlCheckbox.js +8 -3
- package/dist/esm/components/form/checkbox/MrlCheckbox/MrlCheckbox.js.map +1 -1
- package/dist/esm/components/form/checkbox/MrlCheckboxStandalone/MrlCheckboxStandalone.js +2 -2
- package/dist/esm/components/form/checkbox/MrlCheckboxStandalone/MrlCheckboxStandalone.js.map +1 -1
- package/dist/esm/components/form/date-picker/MrlDatePicker.js +15 -12
- package/dist/esm/components/form/date-picker/MrlDatePicker.js.map +1 -1
- package/dist/esm/components/form/fieldset/MrlFieldset/MrlFieldset.js +2 -2
- package/dist/esm/components/form/fieldset/MrlFieldset/MrlFieldset.js.map +1 -1
- package/dist/esm/components/form/hooks/useActiveColor.js +2 -2
- package/dist/esm/components/form/hooks/useActiveColor.js.map +1 -1
- package/dist/esm/components/form/hooks/useIsEditable.js +3 -3
- package/dist/esm/components/form/hooks/useIsEditable.js.map +1 -1
- package/dist/esm/components/form/label/MrlLabel/MrlLabel.js +6 -3
- package/dist/esm/components/form/label/MrlLabel/MrlLabel.js.map +1 -1
- package/dist/esm/components/form/label/MrlLabelWithDescription/MrlLabelWithDescription.js +14 -4
- package/dist/esm/components/form/label/MrlLabelWithDescription/MrlLabelWithDescription.js.map +1 -1
- package/dist/esm/components/form/legacy-select/MrlLegacySelect/MrlLegacySelect.js +37 -30
- package/dist/esm/components/form/legacy-select/MrlLegacySelect/MrlLegacySelect.js.map +1 -1
- package/dist/esm/components/form/legacy-select/MrlLegacySelectItem/MrlLegacySelectItem.js +16 -11
- package/dist/esm/components/form/legacy-select/MrlLegacySelectItem/MrlLegacySelectItem.js.map +1 -1
- package/dist/esm/components/form/legacy-select/MrlLegacySelectMenu/MrlLegacySelectMenu.js +14 -10
- package/dist/esm/components/form/legacy-select/MrlLegacySelectMenu/MrlLegacySelectMenu.js.map +1 -1
- package/dist/esm/components/form/legacy-select/context/SelectContext.js +5 -5
- package/dist/esm/components/form/legacy-select/context/SelectContext.js.map +1 -1
- package/dist/esm/components/form/legacy-select/index.js +1 -1
- package/dist/esm/components/form/legacy-select/index.js.map +1 -1
- package/dist/esm/components/form/radio/MrlRadioButtonStandalone/MrlRadioButtonStandalone.js +4 -2
- package/dist/esm/components/form/radio/MrlRadioButtonStandalone/MrlRadioButtonStandalone.js.map +1 -1
- package/dist/esm/components/form/select/MrlCreatableSelect/MrlCreatableSelect.js +3 -5
- package/dist/esm/components/form/select/MrlCreatableSelect/MrlCreatableSelect.js.map +1 -1
- package/dist/esm/components/form/select/MrlMultiCreatableSelect/MrlMultiCreatableSelect.js +3 -5
- package/dist/esm/components/form/select/MrlMultiCreatableSelect/MrlMultiCreatableSelect.js.map +1 -1
- package/dist/esm/components/form/select/MrlMultiSelect/MrlMultiSelect.js +2 -2
- package/dist/esm/components/form/select/MrlMultiSelect/MrlMultiSelect.js.map +1 -1
- package/dist/esm/components/form/select/MrlSelect/MrlSelect.js +2 -2
- package/dist/esm/components/form/select/MrlSelect/MrlSelect.js.map +1 -1
- package/dist/esm/components/form/select/components/MrlSelectMultiValue.js +4 -2
- package/dist/esm/components/form/select/components/MrlSelectMultiValue.js.map +1 -1
- package/dist/esm/components/form/select/styles/default.js +18 -18
- package/dist/esm/components/form/select/styles/default.js.map +1 -1
- package/dist/esm/components/form/select/styles/inline.js +2 -2
- package/dist/esm/components/form/select/styles/inline.js.map +1 -1
- package/dist/esm/components/form/select/styles/inlineNoLabel.js +3 -3
- package/dist/esm/components/form/select/styles/inlineNoLabel.js.map +1 -1
- package/dist/esm/components/form/select/styles/inlineStacked.js +2 -2
- package/dist/esm/components/form/select/styles/inlineStacked.js.map +1 -1
- package/dist/esm/components/form/switch/MrlSwitch/MrlSwitch.js +9 -6
- package/dist/esm/components/form/switch/MrlSwitch/MrlSwitch.js.map +1 -1
- package/dist/esm/components/form/switch/MrlSwitchStandalone/MrlSwitchStandalone.js +3 -3
- package/dist/esm/components/form/switch/MrlSwitchStandalone/MrlSwitchStandalone.js.map +1 -1
- package/dist/esm/components/form/text-input/MrlEditableTextInput/MrlEditableTextInput.js +25 -17
- package/dist/esm/components/form/text-input/MrlEditableTextInput/MrlEditableTextInput.js.map +1 -1
- package/dist/esm/components/form/text-input/MrlEditableTextInput/MrlEditableTextInputRightIcon.js +8 -15
- package/dist/esm/components/form/text-input/MrlEditableTextInput/MrlEditableTextInputRightIcon.js.map +1 -1
- package/dist/esm/components/form/text-input/MrlTextInput/MrlTextInput.js +21 -20
- package/dist/esm/components/form/text-input/MrlTextInput/MrlTextInput.js.map +1 -1
- package/dist/esm/components/form/text-input/MrlTextInput/MrlTextInputRightIcon.js +8 -15
- package/dist/esm/components/form/text-input/MrlTextInput/MrlTextInputRightIcon.js.map +1 -1
- package/dist/esm/components/form/textarea/MrlEditableTextarea/MrlEditableTextarea.js +15 -15
- package/dist/esm/components/form/textarea/MrlEditableTextarea/MrlEditableTextarea.js.map +1 -1
- package/dist/esm/components/form/textarea/MrlEditableTextarea/MrlEditableTextareaRightButton.js +8 -15
- package/dist/esm/components/form/textarea/MrlEditableTextarea/MrlEditableTextareaRightButton.js.map +1 -1
- package/dist/esm/components/form/textarea/MrlTextarea/MrlTextarea.js +9 -6
- package/dist/esm/components/form/textarea/MrlTextarea/MrlTextarea.js.map +1 -1
- package/dist/esm/components/form/utils.js +2 -4
- package/dist/esm/components/form/utils.js.map +1 -1
- package/dist/esm/components/grid/MrlCol/MrlCol.js +31 -44
- package/dist/esm/components/grid/MrlCol/MrlCol.js.map +1 -1
- package/dist/esm/components/layout/MrlMain/MrlMain.js +4 -2
- package/dist/esm/components/layout/MrlMain/MrlMain.js.map +1 -1
- package/dist/esm/components/layout/MrlPage/MrlPage.js +4 -2
- package/dist/esm/components/layout/MrlPage/MrlPage.js.map +1 -1
- package/dist/esm/components/layout/MrlSidebar/MrlSidebar.js +19 -11
- package/dist/esm/components/layout/MrlSidebar/MrlSidebar.js.map +1 -1
- package/dist/esm/components/layout/MrlTopbar/MrlTopbar.js +5 -2
- package/dist/esm/components/layout/MrlTopbar/MrlTopbar.js.map +1 -1
- package/dist/esm/components/layout/context/LayoutContext.js +4 -4
- package/dist/esm/components/layout/context/LayoutContext.js.map +1 -1
- package/dist/esm/components/layout/error-page/MrlBrandColors/MrlBrandColors.js +1 -1
- package/dist/esm/components/layout/error-page/MrlBrandColors/MrlBrandColors.js.map +1 -1
- package/dist/esm/components/layout/error-page/MrlErrorPage/MrlErrorPage.js +1 -1
- package/dist/esm/components/layout/error-page/MrlErrorPage/MrlErrorPage.js.map +1 -1
- package/dist/esm/components/layout/utils.js +2 -2
- package/dist/esm/components/layout/utils.js.map +1 -1
- package/dist/esm/components/link/MrlLink/MrlLink.js +8 -3
- package/dist/esm/components/link/MrlLink/MrlLink.js.map +1 -1
- package/dist/esm/components/link/MrlLinkButton/MrlLinkButton.js +9 -11
- package/dist/esm/components/link/MrlLinkButton/MrlLinkButton.js.map +1 -1
- package/dist/esm/components/live-region/MrlLiveRegion/MrlLiveRegion.js +5 -9
- package/dist/esm/components/live-region/MrlLiveRegion/MrlLiveRegion.js.map +1 -1
- package/dist/esm/components/loader/MrlProgressBar/MrlProgressBar.js +9 -3
- package/dist/esm/components/loader/MrlProgressBar/MrlProgressBar.js.map +1 -1
- package/dist/esm/components/loader/MrlSpinner/MrlSpinner.js +11 -3
- package/dist/esm/components/loader/MrlSpinner/MrlSpinner.js.map +1 -1
- package/dist/esm/components/menu/MrlMenu/MrlMenu.js +56 -62
- package/dist/esm/components/menu/MrlMenu/MrlMenu.js.map +1 -1
- package/dist/esm/components/menu/MrlMenu/utilities.js +4 -6
- package/dist/esm/components/menu/MrlMenu/utilities.js.map +1 -1
- package/dist/esm/components/menu/MrlMenuGroup/MrlMenuGroup.js +1 -1
- package/dist/esm/components/menu/MrlMenuGroup/MrlMenuGroup.js.map +1 -1
- package/dist/esm/components/menu/MrlMenuItem/MrlMenuItem.js +18 -17
- package/dist/esm/components/menu/MrlMenuItem/MrlMenuItem.js.map +1 -1
- package/dist/esm/components/menu/MrlMenuItemLink/MrlMenuItemLink.js +2 -2
- package/dist/esm/components/menu/MrlMenuItemLink/MrlMenuItemLink.js.map +1 -1
- package/dist/esm/components/menu/hooks/useBrowserEdgeScroll.js +14 -14
- package/dist/esm/components/menu/hooks/useBrowserEdgeScroll.js.map +1 -1
- package/dist/esm/components/menu/hooks/useMenuScroll.js +8 -8
- package/dist/esm/components/menu/hooks/useMenuScroll.js.map +1 -1
- package/dist/esm/components/menu/hooks/useSubMenuElementPosition.js +3 -3
- package/dist/esm/components/menu/hooks/useSubMenuElementPosition.js.map +1 -1
- package/dist/esm/components/menu/utilities/flip-position.js +1 -1
- package/dist/esm/components/menu/utilities/flip-position.js.map +1 -1
- package/dist/esm/components/modal/MrlModal/MrlModal.js +22 -22
- package/dist/esm/components/modal/MrlModal/MrlModal.js.map +1 -1
- package/dist/esm/components/modal/MrlModalContent/MrlModalContent.js +5 -5
- package/dist/esm/components/modal/MrlModalContent/MrlModalContent.js.map +1 -1
- package/dist/esm/components/modal/MrlModalContext/MrlModalContext.js +1 -1
- package/dist/esm/components/modal/MrlModalContext/MrlModalContext.js.map +1 -1
- package/dist/esm/components/modal/MrlModalFooter/MrlModalFooter.js +7 -4
- package/dist/esm/components/modal/MrlModalFooter/MrlModalFooter.js.map +1 -1
- package/dist/esm/components/modal/MrlModalHeader/MrlModalHeader.js +7 -5
- package/dist/esm/components/modal/MrlModalHeader/MrlModalHeader.js.map +1 -1
- package/dist/esm/components/navigation-sidebar/MrlSidebarNavItem/MrlSidebarNavItem.js +6 -2
- package/dist/esm/components/navigation-sidebar/MrlSidebarNavItem/MrlSidebarNavItem.js.map +1 -1
- package/dist/esm/components/notification/MrlBlockNotification/MrlBlockNotification.js +18 -15
- package/dist/esm/components/notification/MrlBlockNotification/MrlBlockNotification.js.map +1 -1
- package/dist/esm/components/notification/MrlInlineMessage/MrlInlineMessage.js +11 -5
- package/dist/esm/components/notification/MrlInlineMessage/MrlInlineMessage.js.map +1 -1
- package/dist/esm/components/notification/MrlToast/MrlToast.js +14 -9
- package/dist/esm/components/notification/MrlToast/MrlToast.js.map +1 -1
- package/dist/esm/components/panel/MrlPanel/MrlPanel.js +14 -10
- package/dist/esm/components/panel/MrlPanel/MrlPanel.js.map +1 -1
- package/dist/esm/components/panel/MrlPanelFooter/MrlPanelFooter.js +2 -2
- package/dist/esm/components/panel/MrlPanelFooter/MrlPanelFooter.js.map +1 -1
- package/dist/esm/components/panel/MrlPanelStickyHeader/MrlPanelStickyHeader.js +1 -1
- package/dist/esm/components/panel/MrlPanelStickyHeader/MrlPanelStickyHeader.js.map +1 -1
- package/dist/esm/components/popover/MrlPopover/MrlPopover.js +71 -71
- package/dist/esm/components/popover/MrlPopover/MrlPopover.js.map +1 -1
- package/dist/esm/components/popover/MrlPopover/hooks/use-mrl-popover-event-handlers.js +19 -21
- package/dist/esm/components/popover/MrlPopover/hooks/use-mrl-popover-event-handlers.js.map +1 -1
- package/dist/esm/components/popover/MrlPopover/utilities/get-data-point.js +1 -1
- package/dist/esm/components/popover/MrlPopover/utilities/get-data-point.js.map +1 -1
- package/dist/esm/components/popover/MrlPopover/utilities/get-offset.js +1 -1
- package/dist/esm/components/popover/MrlPopover/utilities/get-offset.js.map +1 -1
- package/dist/esm/components/portal/MrlPortal.js +2 -2
- package/dist/esm/components/portal/MrlPortal.js.map +1 -1
- package/dist/esm/components/rovingTabindex/MrlRovingTabindex/MrlRovingTabindex.js +235 -262
- package/dist/esm/components/rovingTabindex/MrlRovingTabindex/MrlRovingTabindex.js.map +1 -1
- package/dist/esm/components/skeleton/MrlSkeleton/MrlSkeleton.js +6 -4
- package/dist/esm/components/skeleton/MrlSkeleton/MrlSkeleton.js.map +1 -1
- package/dist/esm/components/skeleton/MrlSkeletonText/MrlSkeletonText.js +7 -5
- package/dist/esm/components/skeleton/MrlSkeletonText/MrlSkeletonText.js.map +1 -1
- package/dist/esm/components/svg/MrlSvg/MrlSvg.js +7 -11
- package/dist/esm/components/svg/MrlSvg/MrlSvg.js.map +1 -1
- package/dist/esm/components/svg/MrlSvgAnimate/MrlSvgAnimate.js +8 -8
- package/dist/esm/components/svg/MrlSvgAnimate/MrlSvgAnimate.js.map +1 -1
- package/dist/esm/components/table/MrlSmartTable/MrlSmartTable.js +71 -94
- package/dist/esm/components/table/MrlSmartTable/MrlSmartTable.js.map +1 -1
- package/dist/esm/components/table/MrlSmartTable/components/DefaultCellContent.js +2 -2
- package/dist/esm/components/table/MrlSmartTable/components/DefaultCellContent.js.map +1 -1
- package/dist/esm/components/table/MrlTableCell/MrlTableCell.js +7 -2
- package/dist/esm/components/table/MrlTableCell/MrlTableCell.js.map +1 -1
- package/dist/esm/components/table/MrlTableColumn/MrlTableColumn.js +8 -2
- package/dist/esm/components/table/MrlTableColumn/MrlTableColumn.js.map +1 -1
- package/dist/esm/components/table/MrlTableRow/MrlTableRow.js +7 -5
- package/dist/esm/components/table/MrlTableRow/MrlTableRow.js.map +1 -1
- package/dist/esm/components/table/utils.js +4 -10
- package/dist/esm/components/table/utils.js.map +1 -1
- package/dist/esm/components/tabs/MrlTab/MrlTab.js +11 -8
- package/dist/esm/components/tabs/MrlTab/MrlTab.js.map +1 -1
- package/dist/esm/components/tabs/MrlTabContent/MrlTabContent.js +7 -4
- package/dist/esm/components/tabs/MrlTabContent/MrlTabContent.js.map +1 -1
- package/dist/esm/components/tabs/MrlTabGroup/MrlTabGroup.js +8 -10
- package/dist/esm/components/tabs/MrlTabGroup/MrlTabGroup.js.map +1 -1
- package/dist/esm/components/tabs/MrlTabLink/MrlTabLink.js +11 -8
- package/dist/esm/components/tabs/MrlTabLink/MrlTabLink.js.map +1 -1
- package/dist/esm/components/tabs/MrlTabs/MrlTabs.js +11 -9
- package/dist/esm/components/tabs/MrlTabs/MrlTabs.js.map +1 -1
- package/dist/esm/components/text/MrlText/MrlText.js +8 -3
- package/dist/esm/components/text/MrlText/MrlText.js.map +1 -1
- package/dist/esm/components/text/MrlTextHeading/MrlTextHeading.js +9 -3
- package/dist/esm/components/text/MrlTextHeading/MrlTextHeading.js.map +1 -1
- package/dist/esm/components/toolbar/MrlToolbar/MrlToolbar.js +12 -7
- package/dist/esm/components/toolbar/MrlToolbar/MrlToolbar.js.map +1 -1
- package/dist/esm/components/toolbar/MrlToolbarItem/MrlToolbarItem.js +1 -1
- package/dist/esm/components/toolbar/MrlToolbarItem/MrlToolbarItem.js.map +1 -1
- package/dist/esm/components/tooltip/MrlTooltip/MrlTooltip.js +31 -34
- package/dist/esm/components/tooltip/MrlTooltip/MrlTooltip.js.map +1 -1
- package/dist/esm/components/tooltip/MrlTooltipContent/MrlTooltipContent.js +8 -3
- package/dist/esm/components/tooltip/MrlTooltipContent/MrlTooltipContent.js.map +1 -1
- package/dist/esm/components/tooltip/useTooltipPosition/index.js +15 -17
- package/dist/esm/components/tooltip/useTooltipPosition/index.js.map +1 -1
- package/dist/esm/components/tooltip/useTooltipPosition/utilities.js +4 -4
- package/dist/esm/components/tooltip/useTooltipPosition/utilities.js.map +1 -1
- package/dist/esm/components/tooltip/utils.js +3 -3
- package/dist/esm/components/tooltip/utils.js.map +1 -1
- package/dist/esm/hooks/useAutoClose/useAutoClose.js +4 -4
- package/dist/esm/hooks/useAutoClose/useAutoClose.js.map +1 -1
- package/dist/esm/hooks/useBreakpoint/index.js +5 -5
- package/dist/esm/hooks/useBreakpoint/index.js.map +1 -1
- package/dist/esm/hooks/useClickOutside/index.js +4 -4
- package/dist/esm/hooks/useClickOutside/index.js.map +1 -1
- package/dist/esm/hooks/useCoordinate/index.js +20 -29
- package/dist/esm/hooks/useCoordinate/index.js.map +1 -1
- package/dist/esm/hooks/useElementDimensions/index.js +19 -32
- package/dist/esm/hooks/useElementDimensions/index.js.map +1 -1
- package/dist/esm/hooks/useHasFocusableDescendant/index.js +4 -6
- package/dist/esm/hooks/useHasFocusableDescendant/index.js.map +1 -1
- package/dist/esm/hooks/useScrollbarInfo/index.js +8 -8
- package/dist/esm/hooks/useScrollbarInfo/index.js.map +1 -1
- package/dist/esm/hooks/useTriggerPosition/index.js +14 -20
- package/dist/esm/hooks/useTriggerPosition/index.js.map +1 -1
- package/dist/esm/hooks/useTriggerPosition/utilities.js +15 -23
- package/dist/esm/hooks/useTriggerPosition/utilities.js.map +1 -1
- package/dist/esm/utils/checkInvalidAttributes/index.js +2 -4
- package/dist/esm/utils/checkInvalidAttributes/index.js.map +1 -1
- package/dist/esm/utils/frameDebounce/index.js +28 -29
- package/dist/esm/utils/frameDebounce/index.js.map +1 -1
- package/dist/esm/utils/getCamelCase/getCamelCase.js +2 -2
- package/dist/esm/utils/getCamelCase/getCamelCase.js.map +1 -1
- package/dist/esm/utils/getScrollableContainer/getScrollableContainer.js +1 -1
- package/dist/esm/utils/getScrollableContainer/getScrollableContainer.js.map +1 -1
- package/dist/esm/utils/hasHorizontalScroll/hasHorizontalScroll.js +1 -1
- package/dist/esm/utils/hasHorizontalScroll/hasHorizontalScroll.js.map +1 -1
- package/dist/esm/utils/hasScrollContent/hasScrollContent.js +1 -1
- package/dist/esm/utils/hasScrollContent/hasScrollContent.js.map +1 -1
- package/dist/esm/utils/isElementAriaDisabled/isElementAriaDisabled.js +1 -1
- package/dist/esm/utils/isElementAriaDisabled/isElementAriaDisabled.js.map +1 -1
- package/dist/esm/utils/isElementScrollable/index.js +1 -1
- package/dist/esm/utils/isElementScrollable/index.js.map +1 -1
- package/dist/esm/utils/isImagePath/index.js +1 -1
- package/dist/esm/utils/isImagePath/index.js.map +1 -1
- package/dist/esm/utils/isImageUri/index.js +1 -1
- package/dist/esm/utils/isImageUri/index.js.map +1 -1
- package/dist/esm/utils/isObject/isObject.js +1 -1
- package/dist/esm/utils/isObject/isObject.js.map +1 -1
- package/dist/esm/utils/isTouch/index.js +1 -1
- package/dist/esm/utils/isTouch/index.js.map +1 -1
- package/dist/esm/utils/layers/index.js +1 -1
- package/dist/esm/utils/layers/index.js.map +1 -1
- package/dist/esm/utils/noop/index.js +1 -1
- package/dist/esm/utils/noop/index.js.map +1 -1
- package/dist/esm/utils/preventDefault/preventDefault.js +1 -1
- package/dist/esm/utils/preventDefault/preventDefault.js.map +1 -1
- package/dist/esm/utils/setAttributes/setAttributes.js +7 -5
- package/dist/esm/utils/setAttributes/setAttributes.js.map +1 -1
- package/dist/esm/utils/trapFocus/index.js +9 -11
- package/dist/esm/utils/trapFocus/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -10,7 +10,7 @@ var _excluded = ["children", "divider", "groupLabel"];
|
|
|
10
10
|
* @param props - component properties
|
|
11
11
|
* @returns JSX.Element
|
|
12
12
|
*/
|
|
13
|
-
var MrlMenuGroup =
|
|
13
|
+
var MrlMenuGroup = _ref => {
|
|
14
14
|
var children = _ref.children,
|
|
15
15
|
_ref$divider = _ref.divider,
|
|
16
16
|
divider = _ref$divider === void 0 ? true : _ref$divider,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MrlMenuGroup.js","sources":["../../../../../src/components/menu/MrlMenuGroup/MrlMenuGroup.tsx"],"sourcesContent":["import { MrlTextHeading } from '../../text';\nimport { MrlDivider } from '../../divider';\nimport * as React from 'react';\nimport styles from './MrlMenuGroup.module.scss';\n\nexport interface MrlMenuGroupPropTypes {\n\tchildren: React.ReactNode;\n\tdivider?: boolean;\n\tgroupLabel?: string;\n}\n\n/**\n * MrlMenuGroup\n * @param props - component properties\n * @returns JSX.Element\n */\nexport const MrlMenuGroup = ({\n\tchildren,\n\tdivider = true,\n\tgroupLabel,\n\t...rest\n}: MrlMenuGroupPropTypes): JSX.Element => {\n\treturn (\n\t\t<li role=\"none\" {...rest}>\n\t\t\t{groupLabel && (\n\t\t\t\t<MrlTextHeading\n\t\t\t\t\tattrs={{\n\t\t\t\t\t\tclassName: styles['MrlMenuGroup--label']\n\t\t\t\t\t}}\n\t\t\t\t\thierarchy=\"primary\"\n\t\t\t\t\tkind=\"title\"\n\t\t\t\t\tlevel=\"2\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t>\n\t\t\t\t\t{groupLabel}\n\t\t\t\t</MrlTextHeading>\n\t\t\t)}\n\t\t\t<ul role=\"none\">{children}</ul>\n\t\t\t{divider && <MrlDivider />}\n\t\t</li>\n\t);\n};\n"],"names":["MrlMenuGroup","_ref","children","_ref$divider","divider","groupLabel","rest","_objectWithoutProperties","_excluded","React","createElement","_extends","role","MrlTextHeading","attrs","className","styles","hierarchy","kind","level","size","MrlDivider"],"mappings":";;;;;;;AAWA;AACA;AACA;AACA;AACA;
|
|
1
|
+
{"version":3,"file":"MrlMenuGroup.js","sources":["../../../../../src/components/menu/MrlMenuGroup/MrlMenuGroup.tsx"],"sourcesContent":["import { MrlTextHeading } from '../../text';\nimport { MrlDivider } from '../../divider';\nimport * as React from 'react';\nimport styles from './MrlMenuGroup.module.scss';\n\nexport interface MrlMenuGroupPropTypes {\n\tchildren: React.ReactNode;\n\tdivider?: boolean;\n\tgroupLabel?: string;\n}\n\n/**\n * MrlMenuGroup\n * @param props - component properties\n * @returns JSX.Element\n */\nexport const MrlMenuGroup = ({\n\tchildren,\n\tdivider = true,\n\tgroupLabel,\n\t...rest\n}: MrlMenuGroupPropTypes): JSX.Element => {\n\treturn (\n\t\t<li role=\"none\" {...rest}>\n\t\t\t{groupLabel && (\n\t\t\t\t<MrlTextHeading\n\t\t\t\t\tattrs={{\n\t\t\t\t\t\tclassName: styles['MrlMenuGroup--label']\n\t\t\t\t\t}}\n\t\t\t\t\thierarchy=\"primary\"\n\t\t\t\t\tkind=\"title\"\n\t\t\t\t\tlevel=\"2\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t>\n\t\t\t\t\t{groupLabel}\n\t\t\t\t</MrlTextHeading>\n\t\t\t)}\n\t\t\t<ul role=\"none\">{children}</ul>\n\t\t\t{divider && <MrlDivider />}\n\t\t</li>\n\t);\n};\n"],"names":["MrlMenuGroup","_ref","children","_ref$divider","divider","groupLabel","rest","_objectWithoutProperties","_excluded","React","createElement","_extends","role","MrlTextHeading","attrs","className","styles","hierarchy","kind","level","size","MrlDivider"],"mappings":";;;;;;;AAWA;AACA;AACA;AACA;AACA;AACO,IAAMA,YAAY,GAAGC,IAAA,IAKc;AAAA,EAAA,IAJzCC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IAAAC,YAAA,GAAAF,IAAA,CACRG,OAAO;AAAPA,IAAAA,OAAO,GAAAD,YAAA,KAAA,MAAA,GAAG,IAAI,GAAAA,YAAA;IACdE,UAAU,GAAAJ,IAAA,CAAVI,UAAU;AACPC,IAAAA,IAAI,GAAAC,wBAAA,CAAAN,IAAA,EAAAO,SAAA,CAAA;AAEP,EAAA,oBACCC,KAAA,CAAAC,aAAA,CAAA,IAAA,EAAAC,QAAA,CAAA;AAAIC,IAAAA,IAAI,EAAC;GAAM,EAAKN,IAAI,GACtBD,UAAU,iBACVI,KAAA,CAAAC,aAAA,CAACG,cAAc,EAAA;AACdC,IAAAA,KAAK,EAAE;MACNC,SAAS,EAAEC,MAAM,CAAC,qBAAqB;KACtC;AACFC,IAAAA,SAAS,EAAC,SAAS;AACnBC,IAAAA,IAAI,EAAC,OAAO;AACZC,IAAAA,KAAK,EAAC,GAAG;AACTC,IAAAA,IAAI,EAAC;AAAO,GAAA,EAEXf,UACc,CAChB,eACDI,KAAA,CAAAC,aAAA,CAAA,IAAA,EAAA;AAAIE,IAAAA,IAAI,EAAC;AAAM,GAAA,EAAEV,QAAa,CAAC,EAC9BE,OAAO,iBAAIK,KAAA,CAAAC,aAAA,CAACW,UAAU,EAAA,IAAE,CACtB,CAAC;AAEP;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { objectWithoutProperties as _objectWithoutProperties, slicedToArray as _slicedToArray,
|
|
1
|
+
import { objectWithoutProperties as _objectWithoutProperties, slicedToArray as _slicedToArray, extends as _extends } from '../../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { chevronRight, check } from '@muraldevkit/ds-icons';
|
|
4
4
|
import classnames from 'classnames';
|
|
@@ -8,7 +8,7 @@ import { getUniqueId } from '../../../utils/setAttributes/setAttributes.js';
|
|
|
8
8
|
import { MrlSvg } from '../../svg/MrlSvg/MrlSvg.js';
|
|
9
9
|
|
|
10
10
|
var _excluded = ["ariaDescribedBy", "ariaHasPopup", "children", "className", "dataQa", "disabled", "icon", "id", "onClick", "onMouseOut", "onMouseOver", "role", "selected"];
|
|
11
|
-
var getSubMenuType =
|
|
11
|
+
var getSubMenuType = child => {
|
|
12
12
|
if (/*#__PURE__*/React.isValidElement(child)) {
|
|
13
13
|
var type = child.type.componentType;
|
|
14
14
|
if (type === 'Menu' || type === 'Popover') {
|
|
@@ -48,7 +48,7 @@ function MrlMenuItem(_ref) {
|
|
|
48
48
|
isSubElement = _React$useState2[0],
|
|
49
49
|
setIsSubElement = _React$useState2[1];
|
|
50
50
|
var isSelectable = role === 'menuitemcheckbox' || role === 'menuitemradio';
|
|
51
|
-
var setFocusItem =
|
|
51
|
+
var setFocusItem = () => {
|
|
52
52
|
var _context$triggerRef;
|
|
53
53
|
if (ariaHasPopup && ariaHasPopup !== 'menu' && context !== null && context !== void 0 && (_context$triggerRef = context.triggerRef) !== null && _context$triggerRef !== void 0 && _context$triggerRef.current) {
|
|
54
54
|
var triggerElement = context.triggerRef.current;
|
|
@@ -58,7 +58,7 @@ function MrlMenuItem(_ref) {
|
|
|
58
58
|
document.body.setAttribute('data-focus-item', triggerElement.id);
|
|
59
59
|
}
|
|
60
60
|
};
|
|
61
|
-
var handleClick =
|
|
61
|
+
var handleClick = e => {
|
|
62
62
|
e.preventDefault();
|
|
63
63
|
e.stopPropagation();
|
|
64
64
|
onClick === null || onClick === void 0 ? void 0 : onClick(e);
|
|
@@ -67,7 +67,7 @@ function MrlMenuItem(_ref) {
|
|
|
67
67
|
context.closeMenu();
|
|
68
68
|
}
|
|
69
69
|
};
|
|
70
|
-
var handleKeyDown =
|
|
70
|
+
var handleKeyDown = e => {
|
|
71
71
|
// WCAG specifices that space key should toggle the selection of a checkbox or radio button
|
|
72
72
|
// but not close the menu. When a user presses the enter key on these items the menu should close.
|
|
73
73
|
if (e.key === ' ' && !disabled) {
|
|
@@ -83,18 +83,18 @@ function MrlMenuItem(_ref) {
|
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
};
|
|
86
|
-
var handleDisabled =
|
|
86
|
+
var handleDisabled = e => {
|
|
87
87
|
e.preventDefault();
|
|
88
88
|
e.stopPropagation();
|
|
89
89
|
};
|
|
90
|
-
var handleFocusIn =
|
|
90
|
+
var handleFocusIn = () => {
|
|
91
91
|
onMouseOver === null || onMouseOver === void 0 ? void 0 : onMouseOver();
|
|
92
92
|
};
|
|
93
|
-
var handleFocusOut =
|
|
93
|
+
var handleFocusOut = () => {
|
|
94
94
|
onMouseOut === null || onMouseOut === void 0 ? void 0 : onMouseOut();
|
|
95
95
|
};
|
|
96
|
-
var renderMenu =
|
|
97
|
-
return React.Children.map(children,
|
|
96
|
+
var renderMenu = () => {
|
|
97
|
+
return React.Children.map(children, child => {
|
|
98
98
|
if (/*#__PURE__*/React.isValidElement(child)) {
|
|
99
99
|
var type = child.type.componentType;
|
|
100
100
|
if (type === 'Menu') {
|
|
@@ -118,22 +118,23 @@ function MrlMenuItem(_ref) {
|
|
|
118
118
|
}
|
|
119
119
|
});
|
|
120
120
|
};
|
|
121
|
-
var renderChildren =
|
|
122
|
-
return React.Children.map(children,
|
|
121
|
+
var renderChildren = () => {
|
|
122
|
+
return React.Children.map(children, child => {
|
|
123
123
|
if (!getSubMenuType(child)) {
|
|
124
124
|
return child;
|
|
125
125
|
}
|
|
126
126
|
return null;
|
|
127
127
|
});
|
|
128
128
|
};
|
|
129
|
-
React.useEffect(
|
|
130
|
-
var hasSubMenu = React.Children.toArray(children).some(
|
|
131
|
-
return getSubMenuType(child);
|
|
132
|
-
});
|
|
129
|
+
React.useEffect(() => {
|
|
130
|
+
var hasSubMenu = React.Children.toArray(children).some(child => getSubMenuType(child));
|
|
133
131
|
setIsSubElement(hasSubMenu);
|
|
134
132
|
}, [children]);
|
|
135
133
|
var menuItemClasses = classnames(styles['MrlMenuItem'], 'MrlMenuItem');
|
|
136
|
-
var menuTriggerClasses = classnames(styles['MrlMenuItem--item'], 'MrlMenuItem--item',
|
|
134
|
+
var menuTriggerClasses = classnames(styles['MrlMenuItem--item'], 'MrlMenuItem--item', {
|
|
135
|
+
[styles['MrlMenuItem--item--selected']]: selected,
|
|
136
|
+
[styles['MrlMenuItem--item--withIcon']]: !!icon
|
|
137
|
+
}, className);
|
|
137
138
|
var rightIcon = isSubElement ? chevronRight : selected ? check : null;
|
|
138
139
|
var hasPopup = isSubElement ? 'menu' : ariaHasPopup ? ariaHasPopup : undefined;
|
|
139
140
|
return /*#__PURE__*/React.createElement("li", _extends({}, rest, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MrlMenuItem.js","sources":["../../../../../src/components/menu/MrlMenuItem/MrlMenuItem.tsx"],"sourcesContent":["import * as React from 'react';\nimport { check, chevronRight } from '@muraldevkit/ds-icons';\nimport classnames from 'classnames';\nimport { DSIconType, getUniqueId, MrlMenuProps, MrlPopoverProps, MrlSvg } from '../../../';\nimport { SubMenuTypes, ComponentWithComponentType, AriaHasPopup, MenuItemRole } from '../constants';\nimport { MrlMenuContext } from '../context/MrlMenuContext';\n\nimport styles from './MrlMenuItem.module.scss';\n\nexport interface MrlMenuItemProps {\n\t/** ID for associated description */\n\tariaDescribedBy?: string;\n\n\t/** Indicates whether the menu item has a popup menu using aria-haspopup attribute */\n\tariaHasPopup?: AriaHasPopup;\n\n\t/**\n\t Children to be rendered within the menu component\n\t */\n\tchildren: React.ReactNode | string;\n\n\t/** Classname for the menu item */\n\tclassName?: string;\n\n\t/** If the menu item is disabled */\n\tdisabled?: boolean;\n\n\t/** Icon for menu item */\n\ticon?: DSIconType;\n\n\t/** Unique ID for the menu item */\n\tid?: string;\n\n\t/** Callback to be called when the menu item is clicked */\n\tonClick?: (e?: React.MouseEvent<HTMLButtonElement>) => void;\n\n\t/** Callback to be called when the menu item is hovered */\n\tonMouseOver?: (e?: React.MouseEvent) => void;\n\n\t/** Callback to be called when the menu item is hovered out */\n\tonMouseOut?: (e?: React.MouseEvent) => void;\n\n\t/** Data-qa attribute for the menu item */\n\tdataQa?: string;\n\n\t/**\n\t * Role for the menu item\n\t *\n\t * When using `menuitemcheckbox` or `menuitemradio`, the menu item will be treated as a selectable item,\n\t * aria-checked will be set to 'true' or 'false' based on the selected state.\n\t *\n\t * @default 'menuitem' - for regular menu items\n\t * @example 'menuitemcheckbox' - for checkbox menu items\n\t * @example 'menuitemradio' - for radio menu items\n\t */\n\trole?: MenuItemRole;\n\n\t/** If the menu item is selected */\n\tselected?: boolean;\n}\n\nconst getSubMenuType = (child: React.ReactNode): SubMenuTypes | null => {\n\tif (React.isValidElement(child)) {\n\t\tconst type = (child.type as ComponentWithComponentType).componentType;\n\n\t\tif (type === 'Menu' || type === 'Popover') {\n\t\t\treturn type;\n\t\t}\n\t}\n\n\treturn null;\n};\n\n/**\n * MrlMenuItem component\n *\n * Renders a menu item to be used within the MrlMenu component\n * @param {MrlMenuItemProps} props - The props for the MrlMenuItem component\n * @returns {Element} - rendered MrlMenuItem component\n */\nexport function MrlMenuItem({\n\tariaDescribedBy,\n\tariaHasPopup,\n\tchildren,\n\tclassName,\n\tdataQa,\n\tdisabled,\n\ticon,\n\tid,\n\tonClick,\n\tonMouseOut,\n\tonMouseOver,\n\trole = 'menuitem',\n\tselected,\n\t...rest\n}: MrlMenuItemProps): JSX.Element {\n\tconst context = React.useContext(MrlMenuContext);\n\tconst menuItemRef = React.useRef<HTMLButtonElement>(null);\n\tconst [isSubElement, setIsSubElement] = React.useState(false);\n\tconst isSelectable = role === 'menuitemcheckbox' || role === 'menuitemradio';\n\n\tconst setFocusItem = (): void => {\n\t\tif (ariaHasPopup && ariaHasPopup !== 'menu' && context?.triggerRef?.current) {\n\t\t\tconst triggerElement = context.triggerRef.current;\n\t\t\tif (!triggerElement.id) {\n\t\t\t\ttriggerElement.id = getUniqueId('menu-trigger');\n\t\t\t}\n\n\t\t\tdocument.body.setAttribute('data-focus-item', triggerElement.id);\n\t\t}\n\t};\n\n\tconst handleClick = (e: React.MouseEvent<HTMLButtonElement>): void => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tonClick?.(e);\n\n\t\tsetFocusItem();\n\n\t\tif (context && !!context.closeMenu && !isSubElement) {\n\t\t\tcontext.closeMenu();\n\t\t}\n\t};\n\n\tconst handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>): void => {\n\t\t// WCAG specifices that space key should toggle the selection of a checkbox or radio button\n\t\t// but not close the menu. When a user presses the enter key on these items the menu should close.\n\t\tif (e.key === ' ' && !disabled) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\tonClick?.();\n\n\t\t\t// close the menu if we are not a selectable item (checkbox or radio button)\n\t\t\tif (!isSelectable) {\n\t\t\t\tsetFocusItem();\n\t\t\t\tcontext?.closeMenu?.();\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleDisabled = (e: React.MouseEvent<HTMLButtonElement>): void => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t};\n\n\tconst handleFocusIn = (): void => {\n\t\tonMouseOver?.();\n\t};\n\n\tconst handleFocusOut = (): void => {\n\t\tonMouseOut?.();\n\t};\n\n\tconst renderMenu = () => {\n\t\treturn React.Children.map(children, (child) => {\n\t\t\tif (React.isValidElement(child)) {\n\t\t\t\tconst type = (child.type as ComponentWithComponentType).componentType;\n\n\t\t\t\tif (type === 'Menu') {\n\t\t\t\t\treturn React.cloneElement(child as React.ReactElement<Partial<MrlMenuProps>>, {\n\t\t\t\t\t\talignment: 'start',\n\t\t\t\t\t\tcloseParent: context?.closeParent,\n\t\t\t\t\t\tisSubMenu: true,\n\t\t\t\t\t\tposition: 'right',\n\t\t\t\t\t\ttriggerRef: menuItemRef\n\t\t\t\t\t});\n\t\t\t\t} else if (type === 'Popover') {\n\t\t\t\t\treturn React.cloneElement(child as React.ReactElement<Partial<MrlPopoverProps>>, {\n\t\t\t\t\t\talignment: 'start',\n\t\t\t\t\t\tisSubMenu: true,\n\t\t\t\t\t\tpoint: false,\n\t\t\t\t\t\tposition: 'right',\n\t\t\t\t\t\ttriggerRef: menuItemRef\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t});\n\t};\n\n\tconst renderChildren = () => {\n\t\treturn React.Children.map(children, (child) => {\n\t\t\tif (!getSubMenuType(child)) {\n\t\t\t\treturn child;\n\t\t\t}\n\t\t\treturn null;\n\t\t});\n\t};\n\n\tReact.useEffect(() => {\n\t\tconst hasSubMenu = React.Children.toArray(children).some((child) => getSubMenuType(child));\n\n\t\tsetIsSubElement(hasSubMenu);\n\t}, [children]);\n\n\tconst menuItemClasses = classnames(styles['MrlMenuItem'], 'MrlMenuItem');\n\tconst menuTriggerClasses = classnames(\n\t\tstyles['MrlMenuItem--item'],\n\t\t'MrlMenuItem--item',\n\t\t{\n\t\t\t[styles['MrlMenuItem--item--selected']]: selected,\n\t\t\t[styles['MrlMenuItem--item--withIcon']]: !!icon\n\t\t},\n\t\tclassName\n\t);\n\n\tconst rightIcon = isSubElement ? chevronRight : selected ? check : null;\n\tconst hasPopup = isSubElement ? 'menu' : ariaHasPopup ? ariaHasPopup : undefined;\n\n\treturn (\n\t\t<li {...rest} className={menuItemClasses} data-qa={dataQa}>\n\t\t\t<button\n\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\taria-disabled={disabled}\n\t\t\t\taria-haspopup={hasPopup}\n\t\t\t\t{...(isSelectable ? { 'aria-checked': selected ? 'true' : 'false' } : {})}\n\t\t\t\tdata-selected={selected}\n\t\t\t\tdata-qa={dataQa && `${dataQa}-button`}\n\t\t\t\tid={id}\n\t\t\t\tref={menuItemRef}\n\t\t\t\trole={role}\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={disabled ? handleDisabled : handleClick}\n\t\t\t\tonKeyDown={!disabled ? handleKeyDown : undefined}\n\t\t\t\tonMouseOver={!disabled && onMouseOver ? onMouseOver : undefined}\n\t\t\t\tonMouseOut={!disabled && onMouseOut ? onMouseOut : undefined}\n\t\t\t\tonFocus={!disabled && onMouseOver ? handleFocusIn : undefined}\n\t\t\t\tonBlur={!disabled && onMouseOut ? handleFocusOut : undefined}\n\t\t\t\tclassName={menuTriggerClasses}\n\t\t\t>\n\t\t\t\t{isSubElement && <div className={styles['MrlMenuItem--item--hoverArea']} />}\n\t\t\t\t{icon && (\n\t\t\t\t\t<span className={styles['MrlMenuItem--item--icon-left']}>\n\t\t\t\t\t\t<MrlSvg size=\"small\" svg={icon} />\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t{renderChildren()}\n\t\t\t\t{rightIcon && (\n\t\t\t\t\t<span className={styles['MrlMenuItem--item--icon-right']}>\n\t\t\t\t\t\t<span className={styles['MrlMenuItem--item--icon-right-container']}>\n\t\t\t\t\t\t\t<MrlSvg svg={rightIcon} size=\"auto\" />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</button>\n\t\t\t{renderMenu()}\n\t\t</li>\n\t);\n}\n"],"names":["getSubMenuType","child","React","isValidElement","type","componentType","MrlMenuItem","_ref","ariaDescribedBy","ariaHasPopup","children","className","dataQa","disabled","icon","id","onClick","onMouseOut","onMouseOver","_ref$role","role","selected","rest","_objectWithoutProperties","_excluded","context","useContext","MrlMenuContext","menuItemRef","useRef","_React$useState","useState","_React$useState2","_slicedToArray","isSubElement","setIsSubElement","isSelectable","setFocusItem","_context$triggerRef","triggerRef","current","triggerElement","getUniqueId","document","body","setAttribute","handleClick","e","preventDefault","stopPropagation","closeMenu","handleKeyDown","key","_context$closeMenu","call","handleDisabled","handleFocusIn","handleFocusOut","renderMenu","Children","map","cloneElement","alignment","closeParent","isSubMenu","position","point","renderChildren","useEffect","hasSubMenu","toArray","some","menuItemClasses","classnames","styles","menuTriggerClasses","_defineProperty","rightIcon","chevronRight","check","hasPopup","undefined","createElement","_extends","concat","ref","onKeyDown","onFocus","onBlur","MrlSvg","size","svg"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MrlMenuItem.js","sources":["../../../../../src/components/menu/MrlMenuItem/MrlMenuItem.tsx"],"sourcesContent":["import * as React from 'react';\nimport { check, chevronRight } from '@muraldevkit/ds-icons';\nimport classnames from 'classnames';\nimport { DSIconType, getUniqueId, MrlMenuProps, MrlPopoverProps, MrlSvg } from '../../../';\nimport { SubMenuTypes, ComponentWithComponentType, AriaHasPopup, MenuItemRole } from '../constants';\nimport { MrlMenuContext } from '../context/MrlMenuContext';\n\nimport styles from './MrlMenuItem.module.scss';\n\nexport interface MrlMenuItemProps {\n\t/** ID for associated description */\n\tariaDescribedBy?: string;\n\n\t/** Indicates whether the menu item has a popup menu using aria-haspopup attribute */\n\tariaHasPopup?: AriaHasPopup;\n\n\t/**\n\t Children to be rendered within the menu component\n\t */\n\tchildren: React.ReactNode | string;\n\n\t/** Classname for the menu item */\n\tclassName?: string;\n\n\t/** If the menu item is disabled */\n\tdisabled?: boolean;\n\n\t/** Icon for menu item */\n\ticon?: DSIconType;\n\n\t/** Unique ID for the menu item */\n\tid?: string;\n\n\t/** Callback to be called when the menu item is clicked */\n\tonClick?: (e?: React.MouseEvent<HTMLButtonElement>) => void;\n\n\t/** Callback to be called when the menu item is hovered */\n\tonMouseOver?: (e?: React.MouseEvent) => void;\n\n\t/** Callback to be called when the menu item is hovered out */\n\tonMouseOut?: (e?: React.MouseEvent) => void;\n\n\t/** Data-qa attribute for the menu item */\n\tdataQa?: string;\n\n\t/**\n\t * Role for the menu item\n\t *\n\t * When using `menuitemcheckbox` or `menuitemradio`, the menu item will be treated as a selectable item,\n\t * aria-checked will be set to 'true' or 'false' based on the selected state.\n\t *\n\t * @default 'menuitem' - for regular menu items\n\t * @example 'menuitemcheckbox' - for checkbox menu items\n\t * @example 'menuitemradio' - for radio menu items\n\t */\n\trole?: MenuItemRole;\n\n\t/** If the menu item is selected */\n\tselected?: boolean;\n}\n\nconst getSubMenuType = (child: React.ReactNode): SubMenuTypes | null => {\n\tif (React.isValidElement(child)) {\n\t\tconst type = (child.type as ComponentWithComponentType).componentType;\n\n\t\tif (type === 'Menu' || type === 'Popover') {\n\t\t\treturn type;\n\t\t}\n\t}\n\n\treturn null;\n};\n\n/**\n * MrlMenuItem component\n *\n * Renders a menu item to be used within the MrlMenu component\n * @param {MrlMenuItemProps} props - The props for the MrlMenuItem component\n * @returns {Element} - rendered MrlMenuItem component\n */\nexport function MrlMenuItem({\n\tariaDescribedBy,\n\tariaHasPopup,\n\tchildren,\n\tclassName,\n\tdataQa,\n\tdisabled,\n\ticon,\n\tid,\n\tonClick,\n\tonMouseOut,\n\tonMouseOver,\n\trole = 'menuitem',\n\tselected,\n\t...rest\n}: MrlMenuItemProps): JSX.Element {\n\tconst context = React.useContext(MrlMenuContext);\n\tconst menuItemRef = React.useRef<HTMLButtonElement>(null);\n\tconst [isSubElement, setIsSubElement] = React.useState(false);\n\tconst isSelectable = role === 'menuitemcheckbox' || role === 'menuitemradio';\n\n\tconst setFocusItem = (): void => {\n\t\tif (ariaHasPopup && ariaHasPopup !== 'menu' && context?.triggerRef?.current) {\n\t\t\tconst triggerElement = context.triggerRef.current;\n\t\t\tif (!triggerElement.id) {\n\t\t\t\ttriggerElement.id = getUniqueId('menu-trigger');\n\t\t\t}\n\n\t\t\tdocument.body.setAttribute('data-focus-item', triggerElement.id);\n\t\t}\n\t};\n\n\tconst handleClick = (e: React.MouseEvent<HTMLButtonElement>): void => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tonClick?.(e);\n\n\t\tsetFocusItem();\n\n\t\tif (context && !!context.closeMenu && !isSubElement) {\n\t\t\tcontext.closeMenu();\n\t\t}\n\t};\n\n\tconst handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>): void => {\n\t\t// WCAG specifices that space key should toggle the selection of a checkbox or radio button\n\t\t// but not close the menu. When a user presses the enter key on these items the menu should close.\n\t\tif (e.key === ' ' && !disabled) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\tonClick?.();\n\n\t\t\t// close the menu if we are not a selectable item (checkbox or radio button)\n\t\t\tif (!isSelectable) {\n\t\t\t\tsetFocusItem();\n\t\t\t\tcontext?.closeMenu?.();\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleDisabled = (e: React.MouseEvent<HTMLButtonElement>): void => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t};\n\n\tconst handleFocusIn = (): void => {\n\t\tonMouseOver?.();\n\t};\n\n\tconst handleFocusOut = (): void => {\n\t\tonMouseOut?.();\n\t};\n\n\tconst renderMenu = () => {\n\t\treturn React.Children.map(children, (child) => {\n\t\t\tif (React.isValidElement(child)) {\n\t\t\t\tconst type = (child.type as ComponentWithComponentType).componentType;\n\n\t\t\t\tif (type === 'Menu') {\n\t\t\t\t\treturn React.cloneElement(child as React.ReactElement<Partial<MrlMenuProps>>, {\n\t\t\t\t\t\talignment: 'start',\n\t\t\t\t\t\tcloseParent: context?.closeParent,\n\t\t\t\t\t\tisSubMenu: true,\n\t\t\t\t\t\tposition: 'right',\n\t\t\t\t\t\ttriggerRef: menuItemRef\n\t\t\t\t\t});\n\t\t\t\t} else if (type === 'Popover') {\n\t\t\t\t\treturn React.cloneElement(child as React.ReactElement<Partial<MrlPopoverProps>>, {\n\t\t\t\t\t\talignment: 'start',\n\t\t\t\t\t\tisSubMenu: true,\n\t\t\t\t\t\tpoint: false,\n\t\t\t\t\t\tposition: 'right',\n\t\t\t\t\t\ttriggerRef: menuItemRef\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t});\n\t};\n\n\tconst renderChildren = () => {\n\t\treturn React.Children.map(children, (child) => {\n\t\t\tif (!getSubMenuType(child)) {\n\t\t\t\treturn child;\n\t\t\t}\n\t\t\treturn null;\n\t\t});\n\t};\n\n\tReact.useEffect(() => {\n\t\tconst hasSubMenu = React.Children.toArray(children).some((child) => getSubMenuType(child));\n\n\t\tsetIsSubElement(hasSubMenu);\n\t}, [children]);\n\n\tconst menuItemClasses = classnames(styles['MrlMenuItem'], 'MrlMenuItem');\n\tconst menuTriggerClasses = classnames(\n\t\tstyles['MrlMenuItem--item'],\n\t\t'MrlMenuItem--item',\n\t\t{\n\t\t\t[styles['MrlMenuItem--item--selected']]: selected,\n\t\t\t[styles['MrlMenuItem--item--withIcon']]: !!icon\n\t\t},\n\t\tclassName\n\t);\n\n\tconst rightIcon = isSubElement ? chevronRight : selected ? check : null;\n\tconst hasPopup = isSubElement ? 'menu' : ariaHasPopup ? ariaHasPopup : undefined;\n\n\treturn (\n\t\t<li {...rest} className={menuItemClasses} data-qa={dataQa}>\n\t\t\t<button\n\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\taria-disabled={disabled}\n\t\t\t\taria-haspopup={hasPopup}\n\t\t\t\t{...(isSelectable ? { 'aria-checked': selected ? 'true' : 'false' } : {})}\n\t\t\t\tdata-selected={selected}\n\t\t\t\tdata-qa={dataQa && `${dataQa}-button`}\n\t\t\t\tid={id}\n\t\t\t\tref={menuItemRef}\n\t\t\t\trole={role}\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={disabled ? handleDisabled : handleClick}\n\t\t\t\tonKeyDown={!disabled ? handleKeyDown : undefined}\n\t\t\t\tonMouseOver={!disabled && onMouseOver ? onMouseOver : undefined}\n\t\t\t\tonMouseOut={!disabled && onMouseOut ? onMouseOut : undefined}\n\t\t\t\tonFocus={!disabled && onMouseOver ? handleFocusIn : undefined}\n\t\t\t\tonBlur={!disabled && onMouseOut ? handleFocusOut : undefined}\n\t\t\t\tclassName={menuTriggerClasses}\n\t\t\t>\n\t\t\t\t{isSubElement && <div className={styles['MrlMenuItem--item--hoverArea']} />}\n\t\t\t\t{icon && (\n\t\t\t\t\t<span className={styles['MrlMenuItem--item--icon-left']}>\n\t\t\t\t\t\t<MrlSvg size=\"small\" svg={icon} />\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t{renderChildren()}\n\t\t\t\t{rightIcon && (\n\t\t\t\t\t<span className={styles['MrlMenuItem--item--icon-right']}>\n\t\t\t\t\t\t<span className={styles['MrlMenuItem--item--icon-right-container']}>\n\t\t\t\t\t\t\t<MrlSvg svg={rightIcon} size=\"auto\" />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</button>\n\t\t\t{renderMenu()}\n\t\t</li>\n\t);\n}\n"],"names":["getSubMenuType","child","React","isValidElement","type","componentType","MrlMenuItem","_ref","ariaDescribedBy","ariaHasPopup","children","className","dataQa","disabled","icon","id","onClick","onMouseOut","onMouseOver","_ref$role","role","selected","rest","_objectWithoutProperties","_excluded","context","useContext","MrlMenuContext","menuItemRef","useRef","_React$useState","useState","_React$useState2","_slicedToArray","isSubElement","setIsSubElement","isSelectable","setFocusItem","_context$triggerRef","triggerRef","current","triggerElement","getUniqueId","document","body","setAttribute","handleClick","e","preventDefault","stopPropagation","closeMenu","handleKeyDown","key","_context$closeMenu","call","handleDisabled","handleFocusIn","handleFocusOut","renderMenu","Children","map","cloneElement","alignment","closeParent","isSubMenu","position","point","renderChildren","useEffect","hasSubMenu","toArray","some","menuItemClasses","classnames","styles","menuTriggerClasses","rightIcon","chevronRight","check","hasPopup","undefined","createElement","_extends","concat","ref","onKeyDown","onFocus","onBlur","MrlSvg","size","svg"],"mappings":"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"}
|
|
@@ -27,10 +27,10 @@ function MrlMenuItemLink(_ref) {
|
|
|
27
27
|
_ref$target = _ref.target,
|
|
28
28
|
target = _ref$target === void 0 ? '_self' : _ref$target,
|
|
29
29
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
30
|
-
var handleClick =
|
|
30
|
+
var handleClick = e => {
|
|
31
31
|
onClick === null || onClick === void 0 ? void 0 : onClick(e);
|
|
32
32
|
};
|
|
33
|
-
var handleDisabled =
|
|
33
|
+
var handleDisabled = e => {
|
|
34
34
|
e.preventDefault();
|
|
35
35
|
e.stopPropagation();
|
|
36
36
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MrlMenuItemLink.js","sources":["../../../../../src/components/menu/MrlMenuItemLink/MrlMenuItemLink.tsx"],"sourcesContent":["import * as React from 'react';\nimport { linkOpen } from '@muraldevkit/ds-icons';\nimport classnames from 'classnames';\nimport { DSIconType, MrlSvg } from '../../../';\nimport styles from '../MrlMenuItem/MrlMenuItem.module.scss';\n\nexport interface MrlMenuItemLinkProps {\n\t/** ID for associated description */\n\tariaDescribedBy?: string;\n\n\t/**\n\t Children to be rendered within the menu component\n\t */\n\tchildren: React.ReactNode | string;\n\n\t/** Class names for the menu item */\n\tclassName?: string;\n\n\t/** If the menu item is disabled */\n\tdisabled?: boolean;\n\n\t/** Href for the menu item */\n\thref: string;\n\n\t/** Icon for menu item */\n\ticon?: DSIconType;\n\n\t/** Target for links */\n\ttarget?: string;\n\n\t/** Unique ID for the menu item */\n\tid?: string;\n\n\t/** Callback to be called when the menu item is clicked */\n\tonClick?: (e: React.MouseEvent<HTMLElement>) => void;\n\n\t/** Data-qa attribute for the menu item */\n\tdataQa?: string;\n\n\t/** If the menu item is selected */\n\tselected?: boolean;\n\n\t/** Rel attr for the menu item */\n\trel?: string;\n}\n\n/**\n * MrlMenuItem component\n *\n * Renders a menu item to be used within the MrlMenu component\n * @param {MrlMenuItemLinkProps} props - The props for the MrlMenuItem component\n * @returns {Element} - rendered MrlMenuItem component\n */\nexport function MrlMenuItemLink({\n\tariaDescribedBy,\n\tchildren,\n\tclassName,\n\tdataQa,\n\tdisabled,\n\thref,\n\ticon,\n\tid,\n\tonClick,\n\tselected,\n\ttarget = '_self',\n\t...rest\n}: MrlMenuItemLinkProps): JSX.Element {\n\tconst handleClick = (e: React.MouseEvent<HTMLElement>): void => {\n\t\tonClick?.(e);\n\t};\n\n\tconst handleDisabled = (e: React.MouseEvent<HTMLElement>): void => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t};\n\n\tconst menuItemClasses = classnames(styles['MrlMenuItem'], 'MrlMenuItem', className);\n\tconst menuTriggerClasses = classnames(styles['MrlMenuItem--item'], 'MrlMenuItem--item');\n\n\tconst isExternalLink = target === '_blank';\n\tconst linkRel = isExternalLink ? 'noopener noreferrer' : rest.rel;\n\n\treturn (\n\t\t<li className={menuItemClasses} data-qa={dataQa}>\n\t\t\t<a\n\t\t\t\t{...rest}\n\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\taria-disabled={disabled}\n\t\t\t\tdata-selected={selected}\n\t\t\t\tdata-qa={dataQa && `${dataQa}-button`}\n\t\t\t\tid={id}\n\t\t\t\trole=\"menuitem\"\n\t\t\t\tonClick={disabled ? handleDisabled : handleClick}\n\t\t\t\tclassName={menuTriggerClasses}\n\t\t\t\trel={linkRel}\n\t\t\t\thref={href}\n\t\t\t\ttarget={target}\n\t\t\t>\n\t\t\t\t{icon && (\n\t\t\t\t\t<span className={styles['MrlMenuItem--item--submenuIcon-left']}>\n\t\t\t\t\t\t<MrlSvg size=\"small\" svg={icon} />\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t{children}\n\t\t\t\t{isExternalLink && (\n\t\t\t\t\t<span className={styles['MrlMenuItem--item--icon-right']}>\n\t\t\t\t\t\t<span className={styles['MrlMenuItem--item--linkOpenIcon']}>\n\t\t\t\t\t\t\t<MrlSvg svg={linkOpen} size=\"auto\" />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</a>\n\t\t</li>\n\t);\n}\n"],"names":["MrlMenuItemLink","_ref","ariaDescribedBy","children","className","dataQa","disabled","href","icon","id","onClick","selected","_ref$target","target","rest","_objectWithoutProperties","_excluded","handleClick","e","handleDisabled","preventDefault","stopPropagation","menuItemClasses","classnames","styles","menuTriggerClasses","isExternalLink","linkRel","rel","React","createElement","_extends","concat","role","MrlSvg","size","svg","linkOpen"],"mappings":";;;;;;;;AA8CA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,eAAeA,CAAAC,IAAA,EAaO;AAAA,EAAA,IAZrCC,eAAe,GAAAD,IAAA,CAAfC,eAAe;IACfC,QAAQ,GAAAF,IAAA,CAARE,QAAQ;IACRC,SAAS,GAAAH,IAAA,CAATG,SAAS;IACTC,MAAM,GAAAJ,IAAA,CAANI,MAAM;IACNC,QAAQ,GAAAL,IAAA,CAARK,QAAQ;IACRC,IAAI,GAAAN,IAAA,CAAJM,IAAI;IACJC,IAAI,GAAAP,IAAA,CAAJO,IAAI;IACJC,EAAE,GAAAR,IAAA,CAAFQ,EAAE;IACFC,OAAO,GAAAT,IAAA,CAAPS,OAAO;IACPC,QAAQ,GAAAV,IAAA,CAARU,QAAQ;IAAAC,WAAA,GAAAX,IAAA,CACRY,MAAM;AAANA,IAAAA,MAAM,GAAAD,WAAA,KAAA,MAAA,GAAG,OAAO,GAAAA,WAAA;AACbE,IAAAA,IAAI,GAAAC,wBAAA,CAAAd,IAAA,EAAAe,SAAA,CAAA;
|
|
1
|
+
{"version":3,"file":"MrlMenuItemLink.js","sources":["../../../../../src/components/menu/MrlMenuItemLink/MrlMenuItemLink.tsx"],"sourcesContent":["import * as React from 'react';\nimport { linkOpen } from '@muraldevkit/ds-icons';\nimport classnames from 'classnames';\nimport { DSIconType, MrlSvg } from '../../../';\nimport styles from '../MrlMenuItem/MrlMenuItem.module.scss';\n\nexport interface MrlMenuItemLinkProps {\n\t/** ID for associated description */\n\tariaDescribedBy?: string;\n\n\t/**\n\t Children to be rendered within the menu component\n\t */\n\tchildren: React.ReactNode | string;\n\n\t/** Class names for the menu item */\n\tclassName?: string;\n\n\t/** If the menu item is disabled */\n\tdisabled?: boolean;\n\n\t/** Href for the menu item */\n\thref: string;\n\n\t/** Icon for menu item */\n\ticon?: DSIconType;\n\n\t/** Target for links */\n\ttarget?: string;\n\n\t/** Unique ID for the menu item */\n\tid?: string;\n\n\t/** Callback to be called when the menu item is clicked */\n\tonClick?: (e: React.MouseEvent<HTMLElement>) => void;\n\n\t/** Data-qa attribute for the menu item */\n\tdataQa?: string;\n\n\t/** If the menu item is selected */\n\tselected?: boolean;\n\n\t/** Rel attr for the menu item */\n\trel?: string;\n}\n\n/**\n * MrlMenuItem component\n *\n * Renders a menu item to be used within the MrlMenu component\n * @param {MrlMenuItemLinkProps} props - The props for the MrlMenuItem component\n * @returns {Element} - rendered MrlMenuItem component\n */\nexport function MrlMenuItemLink({\n\tariaDescribedBy,\n\tchildren,\n\tclassName,\n\tdataQa,\n\tdisabled,\n\thref,\n\ticon,\n\tid,\n\tonClick,\n\tselected,\n\ttarget = '_self',\n\t...rest\n}: MrlMenuItemLinkProps): JSX.Element {\n\tconst handleClick = (e: React.MouseEvent<HTMLElement>): void => {\n\t\tonClick?.(e);\n\t};\n\n\tconst handleDisabled = (e: React.MouseEvent<HTMLElement>): void => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t};\n\n\tconst menuItemClasses = classnames(styles['MrlMenuItem'], 'MrlMenuItem', className);\n\tconst menuTriggerClasses = classnames(styles['MrlMenuItem--item'], 'MrlMenuItem--item');\n\n\tconst isExternalLink = target === '_blank';\n\tconst linkRel = isExternalLink ? 'noopener noreferrer' : rest.rel;\n\n\treturn (\n\t\t<li className={menuItemClasses} data-qa={dataQa}>\n\t\t\t<a\n\t\t\t\t{...rest}\n\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\taria-disabled={disabled}\n\t\t\t\tdata-selected={selected}\n\t\t\t\tdata-qa={dataQa && `${dataQa}-button`}\n\t\t\t\tid={id}\n\t\t\t\trole=\"menuitem\"\n\t\t\t\tonClick={disabled ? handleDisabled : handleClick}\n\t\t\t\tclassName={menuTriggerClasses}\n\t\t\t\trel={linkRel}\n\t\t\t\thref={href}\n\t\t\t\ttarget={target}\n\t\t\t>\n\t\t\t\t{icon && (\n\t\t\t\t\t<span className={styles['MrlMenuItem--item--submenuIcon-left']}>\n\t\t\t\t\t\t<MrlSvg size=\"small\" svg={icon} />\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t{children}\n\t\t\t\t{isExternalLink && (\n\t\t\t\t\t<span className={styles['MrlMenuItem--item--icon-right']}>\n\t\t\t\t\t\t<span className={styles['MrlMenuItem--item--linkOpenIcon']}>\n\t\t\t\t\t\t\t<MrlSvg svg={linkOpen} size=\"auto\" />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</a>\n\t\t</li>\n\t);\n}\n"],"names":["MrlMenuItemLink","_ref","ariaDescribedBy","children","className","dataQa","disabled","href","icon","id","onClick","selected","_ref$target","target","rest","_objectWithoutProperties","_excluded","handleClick","e","handleDisabled","preventDefault","stopPropagation","menuItemClasses","classnames","styles","menuTriggerClasses","isExternalLink","linkRel","rel","React","createElement","_extends","concat","role","MrlSvg","size","svg","linkOpen"],"mappings":"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"}
|
|
@@ -29,7 +29,7 @@ var useBrowserEdgeScroll = function useBrowserEdgeScroll(elementRef) {
|
|
|
29
29
|
|
|
30
30
|
// Use a ref to store the initial dimensions of the menu
|
|
31
31
|
var menuRectSizeRef = useRef(null);
|
|
32
|
-
var updateMenuStyle = useCallback(
|
|
32
|
+
var updateMenuStyle = useCallback(() => {
|
|
33
33
|
if (disable || !elementRef.current || elementPosition === 'static') return;
|
|
34
34
|
if (elementRef.current) {
|
|
35
35
|
if (!menuRectSizeRef.current) {
|
|
@@ -48,7 +48,7 @@ var useBrowserEdgeScroll = function useBrowserEdgeScroll(elementRef) {
|
|
|
48
48
|
}
|
|
49
49
|
}, [disable, elementRef, elementAlign, elementPosition]);
|
|
50
50
|
var updateMenuStyleDebounced = debounce(updateMenuStyle, 10);
|
|
51
|
-
useLayoutEffect(
|
|
51
|
+
useLayoutEffect(() => {
|
|
52
52
|
if (disable || !elementRef.current || elementPosition === 'static') return;
|
|
53
53
|
|
|
54
54
|
/**
|
|
@@ -62,7 +62,7 @@ var useBrowserEdgeScroll = function useBrowserEdgeScroll(elementRef) {
|
|
|
62
62
|
if (elementRef.current) {
|
|
63
63
|
updateMenuStyle();
|
|
64
64
|
}
|
|
65
|
-
return
|
|
65
|
+
return () => {
|
|
66
66
|
observer.disconnect();
|
|
67
67
|
window.removeEventListener('resize', updateMenuStyleDebounced);
|
|
68
68
|
menuRectSizeRef.current = null;
|
|
@@ -74,7 +74,7 @@ var useBrowserEdgeScroll = function useBrowserEdgeScroll(elementRef) {
|
|
|
74
74
|
// is allowing the menu to wait before initializing the menu style without a setTimeout
|
|
75
75
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
76
76
|
}, [elementRef.current, elementPosition, updateMenuStyle]);
|
|
77
|
-
var updateOnImageLoad =
|
|
77
|
+
var updateOnImageLoad = () => {
|
|
78
78
|
var _elementRef$current;
|
|
79
79
|
var elementRect = (_elementRef$current = elementRef.current) === null || _elementRef$current === void 0 ? void 0 : _elementRef$current.getBoundingClientRect();
|
|
80
80
|
if (elementRect) {
|
|
@@ -86,17 +86,17 @@ var useBrowserEdgeScroll = function useBrowserEdgeScroll(elementRef) {
|
|
|
86
86
|
/**
|
|
87
87
|
* Listen for image additions to the element and update the menu style when they load
|
|
88
88
|
*/
|
|
89
|
-
useEffect(
|
|
89
|
+
useEffect(() => {
|
|
90
90
|
var _elementRef$current2;
|
|
91
91
|
var images = (_elementRef$current2 = elementRef.current) === null || _elementRef$current2 === void 0 ? void 0 : _elementRef$current2.querySelectorAll('img');
|
|
92
92
|
if (images) {
|
|
93
|
-
images.forEach(
|
|
93
|
+
images.forEach(img => {
|
|
94
94
|
img.addEventListener('load', updateOnImageLoad);
|
|
95
95
|
});
|
|
96
96
|
}
|
|
97
|
-
return
|
|
97
|
+
return () => {
|
|
98
98
|
if (images) {
|
|
99
|
-
images.forEach(
|
|
99
|
+
images.forEach(img => {
|
|
100
100
|
img.removeEventListener('load', updateOnImageLoad);
|
|
101
101
|
});
|
|
102
102
|
}
|
|
@@ -104,7 +104,7 @@ var useBrowserEdgeScroll = function useBrowserEdgeScroll(elementRef) {
|
|
|
104
104
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
105
105
|
}, [elementRef.current, updateMenuStyleDebounced]);
|
|
106
106
|
return {
|
|
107
|
-
isScrolling
|
|
107
|
+
isScrolling,
|
|
108
108
|
styles: heightStyle
|
|
109
109
|
};
|
|
110
110
|
};
|
|
@@ -119,7 +119,7 @@ var useBrowserEdgeScroll = function useBrowserEdgeScroll(elementRef) {
|
|
|
119
119
|
* @param viewportHeight - the height of the viewport
|
|
120
120
|
* @returns {string} - the new max height of the menu
|
|
121
121
|
*/
|
|
122
|
-
var calculateNewMaxHeight =
|
|
122
|
+
var calculateNewMaxHeight = (elementPosition, elementAlign, elementRef, menuRect, viewportHeight) => {
|
|
123
123
|
var scrollBuffer = 35;
|
|
124
124
|
var scrollThreshold = 20;
|
|
125
125
|
switch (elementPosition) {
|
|
@@ -136,7 +136,7 @@ var calculateNewMaxHeight = function calculateNewMaxHeight(elementPosition, elem
|
|
|
136
136
|
return null;
|
|
137
137
|
}
|
|
138
138
|
};
|
|
139
|
-
var calculateBottomAlignment =
|
|
139
|
+
var calculateBottomAlignment = (menuRect, viewportHeight, scrollBuffer, scrollThreshold) => {
|
|
140
140
|
// Evaluate from the bottom of the viewport to the top of the menu
|
|
141
141
|
if (menuRect.bottom > viewportHeight - scrollThreshold) {
|
|
142
142
|
var calculatedHeight = Math.max(0, viewportHeight - menuRect.top - scrollBuffer);
|
|
@@ -144,7 +144,7 @@ var calculateBottomAlignment = function calculateBottomAlignment(menuRect, viewp
|
|
|
144
144
|
}
|
|
145
145
|
return null;
|
|
146
146
|
};
|
|
147
|
-
var calculateTopAlignment =
|
|
147
|
+
var calculateTopAlignment = (menuRect, elementRef, scrollBuffer, scrollThreshold) => {
|
|
148
148
|
var _elementRef$current3;
|
|
149
149
|
var currentRect = (_elementRef$current3 = elementRef.current) === null || _elementRef$current3 === void 0 ? void 0 : _elementRef$current3.getBoundingClientRect();
|
|
150
150
|
// Evaluate distance from the top of the viewport to the bottom of the menu
|
|
@@ -154,7 +154,7 @@ var calculateTopAlignment = function calculateTopAlignment(menuRect, elementRef,
|
|
|
154
154
|
}
|
|
155
155
|
return null;
|
|
156
156
|
};
|
|
157
|
-
var calculateSideAlignment =
|
|
157
|
+
var calculateSideAlignment = (elementAlign, menuRect, viewportHeight, scrollThreshold, scrollBuffer) => {
|
|
158
158
|
// Evaluate distance from the top of the viewport to the bottom of the menu
|
|
159
159
|
if (elementAlign === 'end' && menuRect.top < scrollThreshold) {
|
|
160
160
|
var calculatedHeight = Math.max(0, menuRect.bottom - scrollBuffer);
|
|
@@ -168,7 +168,7 @@ var calculateSideAlignment = function calculateSideAlignment(elementAlign, menuR
|
|
|
168
168
|
}
|
|
169
169
|
return null;
|
|
170
170
|
};
|
|
171
|
-
var checkElementIsScrolling =
|
|
171
|
+
var checkElementIsScrolling = elementRef => {
|
|
172
172
|
var el = elementRef.current;
|
|
173
173
|
if (el && el.scrollTop > 0) {
|
|
174
174
|
return 'scrolling';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBrowserEdgeScroll.js","sources":["../../../../../src/components/menu/hooks/useBrowserEdgeScroll.ts"],"sourcesContent":["import { useState, useLayoutEffect, useCallback, useRef, useEffect } from 'react';\nimport { MenuAlignment, MenuPosition } from '../constants';\nimport debounce from 'lodash.debounce';\n\ninterface ElementScrollStyles {\n\tisScrolling: boolean;\n\tstyles: AdjustedElementStyle;\n}\n\nexport interface AdjustedElementStyle {\n\tmaxHeight?: string;\n}\n\n/**\n * useBrowserEdgeScroll hook\n *\n * This hook will calculate if an element's top or bottom edge bleed over the viewport edge\n * and will provide a max height value for the element to allow it to scroll instead of bleed over\n *\n * @param elementRef - reference to the DOM element that is the menu\n * @param elementPosition - the position of the menu\n * @param elementAlign - the alignment of the menu\n * @param disable - disable the hook from running\n * @returns AdjustedElementStyle - returns the new updated style for scrolling the menu\n */\nexport const useBrowserEdgeScroll = (\n\telementRef: React.RefObject<HTMLElement>,\n\telementPosition: MenuPosition = 'bottom',\n\telementAlign: MenuAlignment,\n\tdisable?: boolean\n): ElementScrollStyles | null => {\n\tconst [heightStyle, setHeightStyle] = useState<AdjustedElementStyle>({});\n\n\tconst [isScrolling, setIsScrolling] = useState<boolean>(false);\n\n\t// Use a ref to store the initial dimensions of the menu\n\tconst menuRectSizeRef = useRef<DOMRect | null>(null);\n\n\tconst updateMenuStyle = useCallback(() => {\n\t\tif (disable || !elementRef.current || elementPosition === 'static') return;\n\n\t\tif (elementRef.current) {\n\t\t\tif (!menuRectSizeRef.current) {\n\t\t\t\tmenuRectSizeRef.current = elementRef.current.getBoundingClientRect();\n\t\t\t}\n\n\t\t\tconst newMaxHeight = calculateNewMaxHeight(\n\t\t\t\telementPosition,\n\t\t\t\telementAlign,\n\t\t\t\telementRef,\n\t\t\t\tmenuRectSizeRef.current,\n\t\t\t\twindow.innerHeight\n\t\t\t);\n\n\t\t\tif (newMaxHeight !== null) {\n\t\t\t\tsetIsScrolling(true);\n\t\t\t\tsetHeightStyle({ maxHeight: newMaxHeight });\n\t\t\t} else {\n\t\t\t\tsetIsScrolling(false);\n\t\t\t\tsetHeightStyle({});\n\t\t\t}\n\t\t}\n\t}, [\n\t\tdisable,\n\t\telementRef,\n\t\telementAlign,\n\t\telementPosition\n\t]);\n\n\tconst updateMenuStyleDebounced = debounce(updateMenuStyle, 10);\n\n\tuseLayoutEffect(() => {\n\t\tif (disable || !elementRef.current || elementPosition === 'static') return;\n\n\t\t/**\n\t\t * Resize observer is setup to watch for changes in the element's size or position\n\t\t *\n\t\t * If a resize is detected, the element's style will be updated to allow for scrolling if necessary\n\t\t */\n\t\tconst observer = new ResizeObserver(updateMenuStyleDebounced);\n\t\tobserver.observe(elementRef.current);\n\n\t\twindow.addEventListener('resize', updateMenuStyleDebounced);\n\n\t\tif (elementRef.current) {\n\t\t\tupdateMenuStyle();\n\t\t}\n\n\t\treturn () => {\n\t\t\tobserver.disconnect();\n\t\t\twindow.removeEventListener('resize', updateMenuStyleDebounced);\n\t\t\tmenuRectSizeRef.current = null;\n\t\t};\n\n\t\t// Passing a ref in shouldn't make things work, but in this scenario\n\t\t// it's the only way to get the menu to update when it's ref becomes available\n\t\t// this is used for when the menu initializes, the ref may not be available so this\n\t\t// is allowing the menu to wait before initializing the menu style without a setTimeout\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [elementRef.current, elementPosition, updateMenuStyle]);\n\n\tconst updateOnImageLoad = () => {\n\t\tconst elementRect = elementRef.current?.getBoundingClientRect();\n\t\tif (elementRect) {\n\t\t\tmenuRectSizeRef.current = elementRect;\n\t\t\tupdateMenuStyleDebounced();\n\t\t}\n\t};\n\n\t/**\n\t * Listen for image additions to the element and update the menu style when they load\n\t */\n\tuseEffect(() => {\n\t\tconst images = elementRef.current?.querySelectorAll('img');\n\t\tif (images) {\n\t\t\timages.forEach((img) => {\n\t\t\t\timg.addEventListener('load', updateOnImageLoad);\n\t\t\t});\n\t\t}\n\n\t\treturn () => {\n\t\t\tif (images) {\n\t\t\t\timages.forEach((img) => {\n\t\t\t\t\timg.removeEventListener('load', updateOnImageLoad);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [elementRef.current, updateMenuStyleDebounced]);\n\n\treturn { isScrolling, styles: heightStyle };\n};\n\n/**\n * Calculates the new max height of the menu based on the menu alignment and the viewport height\n *\n * @param elementPosition - the alignment of the menu\n * @param elementAlign - the alignment of the menu\n * @param elementRef - reference to the DOM element that is the menu\n * @param menuRect - the bounding client rect of the menu\n * @param viewportHeight - the height of the viewport\n * @returns {string} - the new max height of the menu\n */\nconst calculateNewMaxHeight = (\n\telementPosition: MenuPosition,\n\telementAlign: MenuAlignment,\n\telementRef: React.RefObject<HTMLElement>,\n\tmenuRect: DOMRect,\n\tviewportHeight: number\n): string | null => {\n\tconst scrollBuffer = 35;\n\tconst scrollThreshold = 20;\n\n\tswitch (elementPosition) {\n\tcase 'bottom':\n\t\treturn calculateBottomAlignment(menuRect, viewportHeight, scrollBuffer, scrollThreshold);\n\tcase 'top':\n\t\treturn calculateTopAlignment(menuRect, elementRef, scrollBuffer, scrollThreshold);\n\tcase 'left':\n\tcase 'right':\n\t\treturn calculateSideAlignment(\n\t\t\telementAlign,\n\t\t\tmenuRect,\n\t\t\tviewportHeight,\n\t\t\tscrollThreshold,\n\t\t\tscrollBuffer\n\t\t);\n\tcase 'ignore':\n\t\treturn checkElementIsScrolling(elementRef);\n\tdefault:\n\t\treturn null;\n\t}\n};\n\nconst calculateBottomAlignment = (\n\tmenuRect: DOMRect,\n\tviewportHeight: number,\n\tscrollBuffer: number,\n\tscrollThreshold: number\n): string | null => {\n\t// Evaluate from the bottom of the viewport to the top of the menu\n\tif (menuRect.bottom > viewportHeight - scrollThreshold) {\n\t\tconst calculatedHeight = Math.max(0, viewportHeight - menuRect.top - scrollBuffer);\n\t\treturn `${Math.floor(calculatedHeight)}px`;\n\t}\n\treturn null;\n};\n\nconst calculateTopAlignment = (\n\tmenuRect: DOMRect,\n\telementRef: React.RefObject<HTMLElement>,\n\tscrollBuffer: number,\n\tscrollThreshold: number\n): string | null => {\n\tconst currentRect = elementRef.current?.getBoundingClientRect();\n\t// Evaluate distance from the top of the viewport to the bottom of the menu\n\tif (currentRect && currentRect.top <= scrollThreshold) {\n\t\tconst calculatedHeight = Math.max(0, currentRect.bottom - scrollThreshold);\n\t\treturn `${Math.floor(calculatedHeight)}px`;\n\t}\n\treturn null;\n};\n\nconst calculateSideAlignment = (\n\telementAlign: MenuAlignment,\n\tmenuRect: DOMRect,\n\tviewportHeight: number,\n\tscrollThreshold: number,\n\tscrollBuffer: number\n): string | null => {\n\t// Evaluate distance from the top of the viewport to the bottom of the menu\n\tif (elementAlign === 'end' && menuRect.top < scrollThreshold) {\n\t\tconst calculatedHeight = Math.max(0, menuRect.bottom - scrollBuffer);\n\t\treturn `${Math.floor(calculatedHeight)}px`;\n\t}\n\n\t// Evaluate from the bottom of the viewport to the top of the menu\n\tif (elementAlign === 'start' && menuRect.bottom > viewportHeight - scrollThreshold) {\n\t\tconst calculatedHeight = Math.max(0, viewportHeight - menuRect.top - scrollBuffer);\n\t\treturn `${Math.floor(calculatedHeight)}px`;\n\t}\n\n\treturn null;\n};\n\nconst checkElementIsScrolling = (elementRef: React.RefObject<HTMLElement>): string | null => {\n\tconst el = elementRef.current;\n\n\tif (el && el.scrollTop > 0) {\n\t\treturn 'scrolling';\n\t}\n\n\treturn null;\n};\n"],"names":["useBrowserEdgeScroll","elementRef","elementPosition","arguments","length","undefined","elementAlign","disable","_useState","useState","_useState2","_slicedToArray","heightStyle","setHeightStyle","_useState3","_useState4","isScrolling","setIsScrolling","menuRectSizeRef","useRef","updateMenuStyle","useCallback","current","getBoundingClientRect","newMaxHeight","calculateNewMaxHeight","window","innerHeight","maxHeight","updateMenuStyleDebounced","debounce","useLayoutEffect","observer","ResizeObserver","observe","addEventListener","disconnect","removeEventListener","updateOnImageLoad","_elementRef$current","elementRect","useEffect","_elementRef$current2","images","querySelectorAll","forEach","img","styles","menuRect","viewportHeight","scrollBuffer","scrollThreshold","calculateBottomAlignment","calculateTopAlignment","calculateSideAlignment","checkElementIsScrolling","bottom","calculatedHeight","Math","max","top","concat","floor","_elementRef$current3","currentRect","el","scrollTop"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useBrowserEdgeScroll.js","sources":["../../../../../src/components/menu/hooks/useBrowserEdgeScroll.ts"],"sourcesContent":["import { useState, useLayoutEffect, useCallback, useRef, useEffect } from 'react';\nimport { MenuAlignment, MenuPosition } from '../constants';\nimport debounce from 'lodash.debounce';\n\ninterface ElementScrollStyles {\n\tisScrolling: boolean;\n\tstyles: AdjustedElementStyle;\n}\n\nexport interface AdjustedElementStyle {\n\tmaxHeight?: string;\n}\n\n/**\n * useBrowserEdgeScroll hook\n *\n * This hook will calculate if an element's top or bottom edge bleed over the viewport edge\n * and will provide a max height value for the element to allow it to scroll instead of bleed over\n *\n * @param elementRef - reference to the DOM element that is the menu\n * @param elementPosition - the position of the menu\n * @param elementAlign - the alignment of the menu\n * @param disable - disable the hook from running\n * @returns AdjustedElementStyle - returns the new updated style for scrolling the menu\n */\nexport const useBrowserEdgeScroll = (\n\telementRef: React.RefObject<HTMLElement>,\n\telementPosition: MenuPosition = 'bottom',\n\telementAlign: MenuAlignment,\n\tdisable?: boolean\n): ElementScrollStyles | null => {\n\tconst [heightStyle, setHeightStyle] = useState<AdjustedElementStyle>({});\n\n\tconst [isScrolling, setIsScrolling] = useState<boolean>(false);\n\n\t// Use a ref to store the initial dimensions of the menu\n\tconst menuRectSizeRef = useRef<DOMRect | null>(null);\n\n\tconst updateMenuStyle = useCallback(() => {\n\t\tif (disable || !elementRef.current || elementPosition === 'static') return;\n\n\t\tif (elementRef.current) {\n\t\t\tif (!menuRectSizeRef.current) {\n\t\t\t\tmenuRectSizeRef.current = elementRef.current.getBoundingClientRect();\n\t\t\t}\n\n\t\t\tconst newMaxHeight = calculateNewMaxHeight(\n\t\t\t\telementPosition,\n\t\t\t\telementAlign,\n\t\t\t\telementRef,\n\t\t\t\tmenuRectSizeRef.current,\n\t\t\t\twindow.innerHeight\n\t\t\t);\n\n\t\t\tif (newMaxHeight !== null) {\n\t\t\t\tsetIsScrolling(true);\n\t\t\t\tsetHeightStyle({ maxHeight: newMaxHeight });\n\t\t\t} else {\n\t\t\t\tsetIsScrolling(false);\n\t\t\t\tsetHeightStyle({});\n\t\t\t}\n\t\t}\n\t}, [\n\t\tdisable,\n\t\telementRef,\n\t\telementAlign,\n\t\telementPosition\n\t]);\n\n\tconst updateMenuStyleDebounced = debounce(updateMenuStyle, 10);\n\n\tuseLayoutEffect(() => {\n\t\tif (disable || !elementRef.current || elementPosition === 'static') return;\n\n\t\t/**\n\t\t * Resize observer is setup to watch for changes in the element's size or position\n\t\t *\n\t\t * If a resize is detected, the element's style will be updated to allow for scrolling if necessary\n\t\t */\n\t\tconst observer = new ResizeObserver(updateMenuStyleDebounced);\n\t\tobserver.observe(elementRef.current);\n\n\t\twindow.addEventListener('resize', updateMenuStyleDebounced);\n\n\t\tif (elementRef.current) {\n\t\t\tupdateMenuStyle();\n\t\t}\n\n\t\treturn () => {\n\t\t\tobserver.disconnect();\n\t\t\twindow.removeEventListener('resize', updateMenuStyleDebounced);\n\t\t\tmenuRectSizeRef.current = null;\n\t\t};\n\n\t\t// Passing a ref in shouldn't make things work, but in this scenario\n\t\t// it's the only way to get the menu to update when it's ref becomes available\n\t\t// this is used for when the menu initializes, the ref may not be available so this\n\t\t// is allowing the menu to wait before initializing the menu style without a setTimeout\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [elementRef.current, elementPosition, updateMenuStyle]);\n\n\tconst updateOnImageLoad = () => {\n\t\tconst elementRect = elementRef.current?.getBoundingClientRect();\n\t\tif (elementRect) {\n\t\t\tmenuRectSizeRef.current = elementRect;\n\t\t\tupdateMenuStyleDebounced();\n\t\t}\n\t};\n\n\t/**\n\t * Listen for image additions to the element and update the menu style when they load\n\t */\n\tuseEffect(() => {\n\t\tconst images = elementRef.current?.querySelectorAll('img');\n\t\tif (images) {\n\t\t\timages.forEach((img) => {\n\t\t\t\timg.addEventListener('load', updateOnImageLoad);\n\t\t\t});\n\t\t}\n\n\t\treturn () => {\n\t\t\tif (images) {\n\t\t\t\timages.forEach((img) => {\n\t\t\t\t\timg.removeEventListener('load', updateOnImageLoad);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [elementRef.current, updateMenuStyleDebounced]);\n\n\treturn { isScrolling, styles: heightStyle };\n};\n\n/**\n * Calculates the new max height of the menu based on the menu alignment and the viewport height\n *\n * @param elementPosition - the alignment of the menu\n * @param elementAlign - the alignment of the menu\n * @param elementRef - reference to the DOM element that is the menu\n * @param menuRect - the bounding client rect of the menu\n * @param viewportHeight - the height of the viewport\n * @returns {string} - the new max height of the menu\n */\nconst calculateNewMaxHeight = (\n\telementPosition: MenuPosition,\n\telementAlign: MenuAlignment,\n\telementRef: React.RefObject<HTMLElement>,\n\tmenuRect: DOMRect,\n\tviewportHeight: number\n): string | null => {\n\tconst scrollBuffer = 35;\n\tconst scrollThreshold = 20;\n\n\tswitch (elementPosition) {\n\tcase 'bottom':\n\t\treturn calculateBottomAlignment(menuRect, viewportHeight, scrollBuffer, scrollThreshold);\n\tcase 'top':\n\t\treturn calculateTopAlignment(menuRect, elementRef, scrollBuffer, scrollThreshold);\n\tcase 'left':\n\tcase 'right':\n\t\treturn calculateSideAlignment(\n\t\t\telementAlign,\n\t\t\tmenuRect,\n\t\t\tviewportHeight,\n\t\t\tscrollThreshold,\n\t\t\tscrollBuffer\n\t\t);\n\tcase 'ignore':\n\t\treturn checkElementIsScrolling(elementRef);\n\tdefault:\n\t\treturn null;\n\t}\n};\n\nconst calculateBottomAlignment = (\n\tmenuRect: DOMRect,\n\tviewportHeight: number,\n\tscrollBuffer: number,\n\tscrollThreshold: number\n): string | null => {\n\t// Evaluate from the bottom of the viewport to the top of the menu\n\tif (menuRect.bottom > viewportHeight - scrollThreshold) {\n\t\tconst calculatedHeight = Math.max(0, viewportHeight - menuRect.top - scrollBuffer);\n\t\treturn `${Math.floor(calculatedHeight)}px`;\n\t}\n\treturn null;\n};\n\nconst calculateTopAlignment = (\n\tmenuRect: DOMRect,\n\telementRef: React.RefObject<HTMLElement>,\n\tscrollBuffer: number,\n\tscrollThreshold: number\n): string | null => {\n\tconst currentRect = elementRef.current?.getBoundingClientRect();\n\t// Evaluate distance from the top of the viewport to the bottom of the menu\n\tif (currentRect && currentRect.top <= scrollThreshold) {\n\t\tconst calculatedHeight = Math.max(0, currentRect.bottom - scrollThreshold);\n\t\treturn `${Math.floor(calculatedHeight)}px`;\n\t}\n\treturn null;\n};\n\nconst calculateSideAlignment = (\n\telementAlign: MenuAlignment,\n\tmenuRect: DOMRect,\n\tviewportHeight: number,\n\tscrollThreshold: number,\n\tscrollBuffer: number\n): string | null => {\n\t// Evaluate distance from the top of the viewport to the bottom of the menu\n\tif (elementAlign === 'end' && menuRect.top < scrollThreshold) {\n\t\tconst calculatedHeight = Math.max(0, menuRect.bottom - scrollBuffer);\n\t\treturn `${Math.floor(calculatedHeight)}px`;\n\t}\n\n\t// Evaluate from the bottom of the viewport to the top of the menu\n\tif (elementAlign === 'start' && menuRect.bottom > viewportHeight - scrollThreshold) {\n\t\tconst calculatedHeight = Math.max(0, viewportHeight - menuRect.top - scrollBuffer);\n\t\treturn `${Math.floor(calculatedHeight)}px`;\n\t}\n\n\treturn null;\n};\n\nconst checkElementIsScrolling = (elementRef: React.RefObject<HTMLElement>): string | null => {\n\tconst el = elementRef.current;\n\n\tif (el && el.scrollTop > 0) {\n\t\treturn 'scrolling';\n\t}\n\n\treturn null;\n};\n"],"names":["useBrowserEdgeScroll","elementRef","elementPosition","arguments","length","undefined","elementAlign","disable","_useState","useState","_useState2","_slicedToArray","heightStyle","setHeightStyle","_useState3","_useState4","isScrolling","setIsScrolling","menuRectSizeRef","useRef","updateMenuStyle","useCallback","current","getBoundingClientRect","newMaxHeight","calculateNewMaxHeight","window","innerHeight","maxHeight","updateMenuStyleDebounced","debounce","useLayoutEffect","observer","ResizeObserver","observe","addEventListener","disconnect","removeEventListener","updateOnImageLoad","_elementRef$current","elementRect","useEffect","_elementRef$current2","images","querySelectorAll","forEach","img","styles","menuRect","viewportHeight","scrollBuffer","scrollThreshold","calculateBottomAlignment","calculateTopAlignment","calculateSideAlignment","checkElementIsScrolling","bottom","calculatedHeight","Math","max","top","concat","floor","_elementRef$current3","currentRect","el","scrollTop"],"mappings":"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"}
|
|
@@ -37,15 +37,15 @@ var DEFAULT_SCROLL_STATE = {
|
|
|
37
37
|
* @param disable - Whether to disable the hook entirely
|
|
38
38
|
* @returns An object with `maxHeight` (inline style value) and `isScrolling` (class toggle)
|
|
39
39
|
*/
|
|
40
|
-
var useMenuScroll =
|
|
40
|
+
var useMenuScroll = (triggerRef, listRef, position, menuOffset, isOpen, disable) => {
|
|
41
41
|
var _useState = useState(DEFAULT_SCROLL_STATE),
|
|
42
42
|
_useState2 = _slicedToArray(_useState, 2),
|
|
43
43
|
scrollState = _useState2[0],
|
|
44
44
|
setScrollState = _useState2[1];
|
|
45
|
-
var calculateScroll = useCallback(
|
|
45
|
+
var calculateScroll = useCallback(() => {
|
|
46
46
|
// Reset scroll constraints when the menu closes or refs aren't available.
|
|
47
47
|
if (!isOpen || disable || !(triggerRef !== null && triggerRef !== void 0 && triggerRef.current) || !listRef.current) {
|
|
48
|
-
setScrollState(
|
|
48
|
+
setScrollState(prev => {
|
|
49
49
|
if (prev.maxHeight === undefined && !prev.isScrolling) return prev;
|
|
50
50
|
return DEFAULT_SCROLL_STATE;
|
|
51
51
|
});
|
|
@@ -94,10 +94,10 @@ var useMenuScroll = function useMenuScroll(triggerRef, listRef, position, menuOf
|
|
|
94
94
|
* cause the element being positioned to flip between flipped/unflipped states.
|
|
95
95
|
*/
|
|
96
96
|
var safeMaxHeight = maxHeight !== undefined ? Math.floor(maxHeight) - 1 : undefined;
|
|
97
|
-
setScrollState(
|
|
97
|
+
setScrollState(prev => {
|
|
98
98
|
if (prev.maxHeight === safeMaxHeight && prev.isScrolling === isScrolling) return prev;
|
|
99
99
|
return {
|
|
100
|
-
isScrolling
|
|
100
|
+
isScrolling,
|
|
101
101
|
maxHeight: safeMaxHeight
|
|
102
102
|
};
|
|
103
103
|
});
|
|
@@ -108,7 +108,7 @@ var useMenuScroll = function useMenuScroll(triggerRef, listRef, position, menuOf
|
|
|
108
108
|
* This ensures maxHeight is applied to the DOM before useTriggerPosition's
|
|
109
109
|
* requestAnimationFrame fires, so it measures the constrained height on its first pass.
|
|
110
110
|
*/
|
|
111
|
-
useLayoutEffect(
|
|
111
|
+
useLayoutEffect(() => {
|
|
112
112
|
if (isOpen && !disable) {
|
|
113
113
|
calculateScroll();
|
|
114
114
|
}
|
|
@@ -118,7 +118,7 @@ var useMenuScroll = function useMenuScroll(triggerRef, listRef, position, menuOf
|
|
|
118
118
|
* Respond to window resize and content size changes (e.g. images loading,
|
|
119
119
|
* lazy content, dynamically added items).
|
|
120
120
|
*/
|
|
121
|
-
useEffect(
|
|
121
|
+
useEffect(() => {
|
|
122
122
|
if (!isOpen || disable) return;
|
|
123
123
|
window.addEventListener('resize', calculateScroll);
|
|
124
124
|
var listElement = listRef.current;
|
|
@@ -127,7 +127,7 @@ var useMenuScroll = function useMenuScroll(triggerRef, listRef, position, menuOf
|
|
|
127
127
|
resizeObserver = new ResizeObserver(calculateScroll);
|
|
128
128
|
resizeObserver.observe(listElement);
|
|
129
129
|
}
|
|
130
|
-
return
|
|
130
|
+
return () => {
|
|
131
131
|
var _resizeObserver;
|
|
132
132
|
window.removeEventListener('resize', calculateScroll);
|
|
133
133
|
(_resizeObserver = resizeObserver) === null || _resizeObserver === void 0 ? void 0 : _resizeObserver.disconnect();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMenuScroll.js","sources":["../../../../../src/components/menu/hooks/useMenuScroll.ts"],"sourcesContent":["import { useState, useCallback, useEffect, useLayoutEffect, RefObject } from 'react';\nimport { MenuPosition } from '../constants';\n\nconst SCREEN_OFFSET = 16;\n\ninterface UseMenuScrollResult {\n\t/** The constrained max height for the menu list when scrolling is active */\n\tmaxHeight: number | undefined;\n\t/** Whether the menu content exceeds available space and requires internal scrolling */\n\tisScrolling: boolean;\n}\n\nconst DEFAULT_SCROLL_STATE: UseMenuScrollResult = {\n\tisScrolling: false,\n\tmaxHeight: undefined\n};\n\n/**\n * useMenuScroll hook\n *\n * Detects when a menu cannot fit on screen in either its preferred or flipped position,\n * and constrains its height to enable internal scrolling.\n *\n * Behavior by position:\n * - **top/bottom**: If the menu doesn't fit in the preferred direction AND doesn't fit\n * in the opposite direction (flip), it reverts to the original position and constrains\n * the height to the space between the trigger edge and the viewport edge.\n * - **left/right**: Only checks vertical overflow. If the menu is taller than the viewport,\n * it constrains the height to the available vertical space.\n *\n * Uses `scrollHeight` on the list element to determine the natural (unconstrained) content\n * height. This value remains stable even when `maxHeight` is applied, preventing feedback\n * loops with external positioning hooks that use ResizeObserver.\n *\n * Uses `useLayoutEffect` for the initial calculation so that `maxHeight` is applied\n * synchronously before the browser paints. This prevents visible flicker when the menu\n * opens in a constrained space, because the positioning hook (useTriggerPosition) will\n * see the already-constrained height on its first measurement via requestAnimationFrame.\n *\n * @param triggerRef - Reference to the trigger element that opens the menu\n * @param listRef - Reference to the ul element inside the menu (the scrollable container)\n * @param position - The preferred menu position relative to the trigger\n * @param menuOffset - The gap between the trigger and the menu in pixels\n * @param isOpen - Whether the menu is currently open\n * @param disable - Whether to disable the hook entirely\n * @returns An object with `maxHeight` (inline style value) and `isScrolling` (class toggle)\n */\nexport const useMenuScroll = (\n\ttriggerRef: RefObject<HTMLElement> | undefined,\n\tlistRef: RefObject<HTMLUListElement>,\n\tposition: MenuPosition,\n\tmenuOffset: number,\n\tisOpen: boolean,\n\tdisable: boolean\n): UseMenuScrollResult => {\n\tconst [scrollState, setScrollState] = useState<UseMenuScrollResult>(DEFAULT_SCROLL_STATE);\n\n\tconst calculateScroll = useCallback(() => {\n\t\t// Reset scroll constraints when the menu closes or refs aren't available.\n\t\tif (!isOpen || disable || !triggerRef?.current || !listRef.current) {\n\t\t\tsetScrollState((prev) => {\n\t\t\t\tif (prev.maxHeight === undefined && !prev.isScrolling) return prev;\n\t\t\t\treturn DEFAULT_SCROLL_STATE;\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst triggerRect = triggerRef.current.getBoundingClientRect();\n\t\tconst naturalHeight = listRef.current.scrollHeight;\n\t\tconst viewportHeight = window.innerHeight;\n\n\t\tlet maxHeight: number | undefined;\n\t\tlet isScrolling = false;\n\n\t\tswitch (position) {\n\t\t\tcase 'bottom': {\n\t\t\t\tconst availableBelow = viewportHeight - triggerRect.bottom - menuOffset - SCREEN_OFFSET;\n\t\t\t\tconst availableAbove = triggerRect.top - menuOffset - SCREEN_OFFSET;\n\n\t\t\t\tif (naturalHeight > availableBelow && naturalHeight > availableAbove) {\n\t\t\t\t\tisScrolling = true;\n\t\t\t\t\tmaxHeight = availableBelow;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'top': {\n\t\t\t\tconst availableAbove = triggerRect.top - menuOffset - SCREEN_OFFSET;\n\t\t\t\tconst availableBelow = viewportHeight - triggerRect.bottom - menuOffset - SCREEN_OFFSET;\n\n\t\t\t\tif (naturalHeight > availableAbove && naturalHeight > availableBelow) {\n\t\t\t\t\tisScrolling = true;\n\t\t\t\t\tmaxHeight = availableAbove;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'left':\n\t\t\tcase 'right': {\n\t\t\t\tconst availableVertical = viewportHeight - 2 * SCREEN_OFFSET;\n\n\t\t\t\tif (naturalHeight > availableVertical) {\n\t\t\t\t\tisScrolling = true;\n\t\t\t\t\tmaxHeight = availableVertical;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Floor the maxHeight and subtract 1px to avoid sub-pixel rounding that can\n\t\t * cause the element being positioned to flip between flipped/unflipped states.\n\t\t */\n\t\tconst safeMaxHeight = maxHeight !== undefined ? Math.floor(maxHeight) - 1 : undefined;\n\n\t\tsetScrollState((prev) => {\n\t\t\tif (prev.maxHeight === safeMaxHeight && prev.isScrolling === isScrolling) return prev;\n\t\t\treturn { isScrolling, maxHeight: safeMaxHeight };\n\t\t});\n\t}, [isOpen, disable, triggerRef, listRef, position, menuOffset]);\n\n\t/**\n\t * Calculate synchronously before paint to prevent flicker.\n\t * This ensures maxHeight is applied to the DOM before useTriggerPosition's\n\t * requestAnimationFrame fires, so it measures the constrained height on its first pass.\n\t */\n\tuseLayoutEffect(() => {\n\t\tif (isOpen && !disable) {\n\t\t\tcalculateScroll();\n\t\t}\n\t}, [isOpen, disable, calculateScroll]);\n\n\t/**\n\t * Respond to window resize and content size changes (e.g. images loading,\n\t * lazy content, dynamically added items).\n\t */\n\tuseEffect(() => {\n\t\tif (!isOpen || disable) return;\n\n\t\twindow.addEventListener('resize', calculateScroll);\n\n\t\tconst listElement = listRef.current;\n\t\tlet resizeObserver: ResizeObserver | undefined;\n\n\t\tif (listElement) {\n\t\t\tresizeObserver = new ResizeObserver(calculateScroll);\n\t\t\tresizeObserver.observe(listElement);\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('resize', calculateScroll);\n\t\t\tresizeObserver?.disconnect();\n\t\t};\n\t}, [isOpen, disable, calculateScroll, listRef]);\n\n\treturn scrollState;\n};\n"],"names":["SCREEN_OFFSET","DEFAULT_SCROLL_STATE","isScrolling","maxHeight","undefined","useMenuScroll","triggerRef","listRef","position","menuOffset","isOpen","disable","_useState","useState","_useState2","_slicedToArray","scrollState","setScrollState","calculateScroll","useCallback","current","prev","triggerRect","getBoundingClientRect","naturalHeight","scrollHeight","viewportHeight","window","innerHeight","availableBelow","bottom","availableAbove","top","availableVertical","safeMaxHeight","Math","floor","useLayoutEffect","useEffect","addEventListener","listElement","resizeObserver","ResizeObserver","observe","_resizeObserver","removeEventListener","disconnect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useMenuScroll.js","sources":["../../../../../src/components/menu/hooks/useMenuScroll.ts"],"sourcesContent":["import { useState, useCallback, useEffect, useLayoutEffect, RefObject } from 'react';\nimport { MenuPosition } from '../constants';\n\nconst SCREEN_OFFSET = 16;\n\ninterface UseMenuScrollResult {\n\t/** The constrained max height for the menu list when scrolling is active */\n\tmaxHeight: number | undefined;\n\t/** Whether the menu content exceeds available space and requires internal scrolling */\n\tisScrolling: boolean;\n}\n\nconst DEFAULT_SCROLL_STATE: UseMenuScrollResult = {\n\tisScrolling: false,\n\tmaxHeight: undefined\n};\n\n/**\n * useMenuScroll hook\n *\n * Detects when a menu cannot fit on screen in either its preferred or flipped position,\n * and constrains its height to enable internal scrolling.\n *\n * Behavior by position:\n * - **top/bottom**: If the menu doesn't fit in the preferred direction AND doesn't fit\n * in the opposite direction (flip), it reverts to the original position and constrains\n * the height to the space between the trigger edge and the viewport edge.\n * - **left/right**: Only checks vertical overflow. If the menu is taller than the viewport,\n * it constrains the height to the available vertical space.\n *\n * Uses `scrollHeight` on the list element to determine the natural (unconstrained) content\n * height. This value remains stable even when `maxHeight` is applied, preventing feedback\n * loops with external positioning hooks that use ResizeObserver.\n *\n * Uses `useLayoutEffect` for the initial calculation so that `maxHeight` is applied\n * synchronously before the browser paints. This prevents visible flicker when the menu\n * opens in a constrained space, because the positioning hook (useTriggerPosition) will\n * see the already-constrained height on its first measurement via requestAnimationFrame.\n *\n * @param triggerRef - Reference to the trigger element that opens the menu\n * @param listRef - Reference to the ul element inside the menu (the scrollable container)\n * @param position - The preferred menu position relative to the trigger\n * @param menuOffset - The gap between the trigger and the menu in pixels\n * @param isOpen - Whether the menu is currently open\n * @param disable - Whether to disable the hook entirely\n * @returns An object with `maxHeight` (inline style value) and `isScrolling` (class toggle)\n */\nexport const useMenuScroll = (\n\ttriggerRef: RefObject<HTMLElement> | undefined,\n\tlistRef: RefObject<HTMLUListElement>,\n\tposition: MenuPosition,\n\tmenuOffset: number,\n\tisOpen: boolean,\n\tdisable: boolean\n): UseMenuScrollResult => {\n\tconst [scrollState, setScrollState] = useState<UseMenuScrollResult>(DEFAULT_SCROLL_STATE);\n\n\tconst calculateScroll = useCallback(() => {\n\t\t// Reset scroll constraints when the menu closes or refs aren't available.\n\t\tif (!isOpen || disable || !triggerRef?.current || !listRef.current) {\n\t\t\tsetScrollState((prev) => {\n\t\t\t\tif (prev.maxHeight === undefined && !prev.isScrolling) return prev;\n\t\t\t\treturn DEFAULT_SCROLL_STATE;\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst triggerRect = triggerRef.current.getBoundingClientRect();\n\t\tconst naturalHeight = listRef.current.scrollHeight;\n\t\tconst viewportHeight = window.innerHeight;\n\n\t\tlet maxHeight: number | undefined;\n\t\tlet isScrolling = false;\n\n\t\tswitch (position) {\n\t\t\tcase 'bottom': {\n\t\t\t\tconst availableBelow = viewportHeight - triggerRect.bottom - menuOffset - SCREEN_OFFSET;\n\t\t\t\tconst availableAbove = triggerRect.top - menuOffset - SCREEN_OFFSET;\n\n\t\t\t\tif (naturalHeight > availableBelow && naturalHeight > availableAbove) {\n\t\t\t\t\tisScrolling = true;\n\t\t\t\t\tmaxHeight = availableBelow;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'top': {\n\t\t\t\tconst availableAbove = triggerRect.top - menuOffset - SCREEN_OFFSET;\n\t\t\t\tconst availableBelow = viewportHeight - triggerRect.bottom - menuOffset - SCREEN_OFFSET;\n\n\t\t\t\tif (naturalHeight > availableAbove && naturalHeight > availableBelow) {\n\t\t\t\t\tisScrolling = true;\n\t\t\t\t\tmaxHeight = availableAbove;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'left':\n\t\t\tcase 'right': {\n\t\t\t\tconst availableVertical = viewportHeight - 2 * SCREEN_OFFSET;\n\n\t\t\t\tif (naturalHeight > availableVertical) {\n\t\t\t\t\tisScrolling = true;\n\t\t\t\t\tmaxHeight = availableVertical;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Floor the maxHeight and subtract 1px to avoid sub-pixel rounding that can\n\t\t * cause the element being positioned to flip between flipped/unflipped states.\n\t\t */\n\t\tconst safeMaxHeight = maxHeight !== undefined ? Math.floor(maxHeight) - 1 : undefined;\n\n\t\tsetScrollState((prev) => {\n\t\t\tif (prev.maxHeight === safeMaxHeight && prev.isScrolling === isScrolling) return prev;\n\t\t\treturn { isScrolling, maxHeight: safeMaxHeight };\n\t\t});\n\t}, [isOpen, disable, triggerRef, listRef, position, menuOffset]);\n\n\t/**\n\t * Calculate synchronously before paint to prevent flicker.\n\t * This ensures maxHeight is applied to the DOM before useTriggerPosition's\n\t * requestAnimationFrame fires, so it measures the constrained height on its first pass.\n\t */\n\tuseLayoutEffect(() => {\n\t\tif (isOpen && !disable) {\n\t\t\tcalculateScroll();\n\t\t}\n\t}, [isOpen, disable, calculateScroll]);\n\n\t/**\n\t * Respond to window resize and content size changes (e.g. images loading,\n\t * lazy content, dynamically added items).\n\t */\n\tuseEffect(() => {\n\t\tif (!isOpen || disable) return;\n\n\t\twindow.addEventListener('resize', calculateScroll);\n\n\t\tconst listElement = listRef.current;\n\t\tlet resizeObserver: ResizeObserver | undefined;\n\n\t\tif (listElement) {\n\t\t\tresizeObserver = new ResizeObserver(calculateScroll);\n\t\t\tresizeObserver.observe(listElement);\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('resize', calculateScroll);\n\t\t\tresizeObserver?.disconnect();\n\t\t};\n\t}, [isOpen, disable, calculateScroll, listRef]);\n\n\treturn scrollState;\n};\n"],"names":["SCREEN_OFFSET","DEFAULT_SCROLL_STATE","isScrolling","maxHeight","undefined","useMenuScroll","triggerRef","listRef","position","menuOffset","isOpen","disable","_useState","useState","_useState2","_slicedToArray","scrollState","setScrollState","calculateScroll","useCallback","current","prev","triggerRect","getBoundingClientRect","naturalHeight","scrollHeight","viewportHeight","window","innerHeight","availableBelow","bottom","availableAbove","top","availableVertical","safeMaxHeight","Math","floor","useLayoutEffect","useEffect","addEventListener","listElement","resizeObserver","ResizeObserver","observe","_resizeObserver","removeEventListener","disconnect"],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ import { findClosestMenuParent, calculateLeftPosition, calculateTopPosition } fr
|
|
|
13
13
|
* @param disable - Should the menu be disabled
|
|
14
14
|
* @returns The sub menu position
|
|
15
15
|
*/
|
|
16
|
-
var useSubMenuElementPosition =
|
|
16
|
+
var useSubMenuElementPosition = (triggerRef, menuRef, isSubMenu, isOpen, originalMenuRect, disable) => {
|
|
17
17
|
var _useState = useState({
|
|
18
18
|
left: 'calc(100% - 5px)',
|
|
19
19
|
top: ''
|
|
@@ -25,12 +25,12 @@ var useSubMenuElementPosition = function useSubMenuElementPosition(triggerRef, m
|
|
|
25
25
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
26
26
|
menuRect = _useState4[0],
|
|
27
27
|
setMenuRect = _useState4[1];
|
|
28
|
-
useEffect(
|
|
28
|
+
useEffect(() => {
|
|
29
29
|
if (!disable && isOpen && menuRef.current && !originalMenuRect) {
|
|
30
30
|
setMenuRect(menuRef.current.getBoundingClientRect());
|
|
31
31
|
}
|
|
32
32
|
}, [disable, isOpen, menuRef, originalMenuRect]);
|
|
33
|
-
useEffect(
|
|
33
|
+
useEffect(() => {
|
|
34
34
|
if (disable || !(triggerRef !== null && triggerRef !== void 0 && triggerRef.current) || !menuRef.current || !isSubMenu || !isOpen || !menuRect || !isSubMenu) return;
|
|
35
35
|
var parentMenu = findClosestMenuParent(triggerRef.current);
|
|
36
36
|
var triggerRect = triggerRef.current.getBoundingClientRect();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSubMenuElementPosition.js","sources":["../../../../../src/components/menu/hooks/useSubMenuElementPosition.ts"],"sourcesContent":["import { useState, useEffect, RefObject } from 'react';\nimport {\n\tfindClosestMenuParent,\n\tcalculateLeftPosition,\n\tcalculateTopPosition\n} from '../MrlMenu/utilities';\n\ninterface SubMenuPosition {\n\tleft: string;\n\ttop: string;\n}\n\n/**\n * Calculates the position of the sub menu element\n *\n * @param triggerRef - The trigger element ref\n * @param menuRef - The menu element ref\n * @param isSubMenu - Is the menu a sub menu\n * @param isOpen - Is the element visible\n * @param originalMenuRect - The menu element rect\n * @param disable - Should the menu be disabled\n * @returns The sub menu position\n */\nexport const useSubMenuElementPosition = (\n\ttriggerRef: RefObject<HTMLElement> | undefined,\n\tmenuRef: RefObject<HTMLDivElement>,\n\tisSubMenu: boolean,\n\tisOpen: boolean,\n\toriginalMenuRect: DOMRect | null,\n\tdisable?: boolean\n): SubMenuPosition => {\n\tconst [subMenuPosition, setSubMenuPosition] = useState<SubMenuPosition>({\n\t\tleft: 'calc(100% - 5px)',\n\t\ttop: ''\n\t});\n\n\tconst [menuRect, setMenuRect] = useState<DOMRect | null>(null);\n\n\tuseEffect(() => {\n\t\tif (!disable && isOpen && menuRef.current && !originalMenuRect) {\n\t\t\tsetMenuRect(menuRef.current.getBoundingClientRect());\n\t\t}\n\t}, [\n\t\tdisable,\n\t\tisOpen,\n\t\tmenuRef,\n\t\toriginalMenuRect\n\t]);\n\n\tuseEffect(() => {\n\t\tif (\n\t\t\tdisable ||\n\t\t\t!triggerRef?.current ||\n\t\t\t!menuRef.current ||\n\t\t\t!isSubMenu ||\n\t\t\t!isOpen ||\n\t\t\t!menuRect ||\n\t\t\t!isSubMenu\n\t\t)\n\t\t\treturn;\n\n\t\tconst parentMenu = findClosestMenuParent(triggerRef.current);\n\t\tconst triggerRect = triggerRef.current.getBoundingClientRect();\n\n\t\tif (!parentMenu?.parentElement) return;\n\n\t\tconst parentMenuRect = parentMenu.getBoundingClientRect();\n\t\tconst menuHeight = menuRef.current.getBoundingClientRect().height;\n\n\t\tconst overlapsRight = window.innerWidth < menuRect.right;\n\t\tconst overlapsLeft = triggerRect.left - menuRect.width < menuRect.width;\n\n\t\tconst newLeft = calculateLeftPosition(overlapsRight, overlapsLeft, menuRect, triggerRef);\n\n\t\tlet newTop = calculateTopPosition(\n\t\t\toverlapsRight,\n\t\t\toverlapsLeft,\n\t\t\ttriggerRef,\n\t\t\tmenuRect,\n\t\t\tparentMenu,\n\t\t\ttriggerRect\n\t\t);\n\n\t\t// if the submenu height is smaller than the menu height, we want to top align the submenu so it doesn't go off\n\t\t// of the top of the screen\n\t\tif (menuHeight > parentMenuRect.height) {\n\t\t\tnewTop = `0px`;\n\t\t}\n\n\t\tsetSubMenuPosition({ left: newLeft, top: newTop });\n\t}, [\n\t\tdisable,\n\t\ttriggerRef,\n\t\tmenuRef,\n\t\tmenuRect,\n\t\tisSubMenu,\n\t\tisOpen\n\t]);\n\n\treturn subMenuPosition;\n};\n"],"names":["useSubMenuElementPosition","triggerRef","menuRef","isSubMenu","isOpen","originalMenuRect","disable","_useState","useState","left","top","_useState2","_slicedToArray","subMenuPosition","setSubMenuPosition","_useState3","_useState4","menuRect","setMenuRect","useEffect","current","getBoundingClientRect","parentMenu","findClosestMenuParent","triggerRect","parentElement","parentMenuRect","menuHeight","height","overlapsRight","window","innerWidth","right","overlapsLeft","width","newLeft","calculateLeftPosition","newTop","calculateTopPosition"],"mappings":";;;;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
|
|
1
|
+
{"version":3,"file":"useSubMenuElementPosition.js","sources":["../../../../../src/components/menu/hooks/useSubMenuElementPosition.ts"],"sourcesContent":["import { useState, useEffect, RefObject } from 'react';\nimport {\n\tfindClosestMenuParent,\n\tcalculateLeftPosition,\n\tcalculateTopPosition\n} from '../MrlMenu/utilities';\n\ninterface SubMenuPosition {\n\tleft: string;\n\ttop: string;\n}\n\n/**\n * Calculates the position of the sub menu element\n *\n * @param triggerRef - The trigger element ref\n * @param menuRef - The menu element ref\n * @param isSubMenu - Is the menu a sub menu\n * @param isOpen - Is the element visible\n * @param originalMenuRect - The menu element rect\n * @param disable - Should the menu be disabled\n * @returns The sub menu position\n */\nexport const useSubMenuElementPosition = (\n\ttriggerRef: RefObject<HTMLElement> | undefined,\n\tmenuRef: RefObject<HTMLDivElement>,\n\tisSubMenu: boolean,\n\tisOpen: boolean,\n\toriginalMenuRect: DOMRect | null,\n\tdisable?: boolean\n): SubMenuPosition => {\n\tconst [subMenuPosition, setSubMenuPosition] = useState<SubMenuPosition>({\n\t\tleft: 'calc(100% - 5px)',\n\t\ttop: ''\n\t});\n\n\tconst [menuRect, setMenuRect] = useState<DOMRect | null>(null);\n\n\tuseEffect(() => {\n\t\tif (!disable && isOpen && menuRef.current && !originalMenuRect) {\n\t\t\tsetMenuRect(menuRef.current.getBoundingClientRect());\n\t\t}\n\t}, [\n\t\tdisable,\n\t\tisOpen,\n\t\tmenuRef,\n\t\toriginalMenuRect\n\t]);\n\n\tuseEffect(() => {\n\t\tif (\n\t\t\tdisable ||\n\t\t\t!triggerRef?.current ||\n\t\t\t!menuRef.current ||\n\t\t\t!isSubMenu ||\n\t\t\t!isOpen ||\n\t\t\t!menuRect ||\n\t\t\t!isSubMenu\n\t\t)\n\t\t\treturn;\n\n\t\tconst parentMenu = findClosestMenuParent(triggerRef.current);\n\t\tconst triggerRect = triggerRef.current.getBoundingClientRect();\n\n\t\tif (!parentMenu?.parentElement) return;\n\n\t\tconst parentMenuRect = parentMenu.getBoundingClientRect();\n\t\tconst menuHeight = menuRef.current.getBoundingClientRect().height;\n\n\t\tconst overlapsRight = window.innerWidth < menuRect.right;\n\t\tconst overlapsLeft = triggerRect.left - menuRect.width < menuRect.width;\n\n\t\tconst newLeft = calculateLeftPosition(overlapsRight, overlapsLeft, menuRect, triggerRef);\n\n\t\tlet newTop = calculateTopPosition(\n\t\t\toverlapsRight,\n\t\t\toverlapsLeft,\n\t\t\ttriggerRef,\n\t\t\tmenuRect,\n\t\t\tparentMenu,\n\t\t\ttriggerRect\n\t\t);\n\n\t\t// if the submenu height is smaller than the menu height, we want to top align the submenu so it doesn't go off\n\t\t// of the top of the screen\n\t\tif (menuHeight > parentMenuRect.height) {\n\t\t\tnewTop = `0px`;\n\t\t}\n\n\t\tsetSubMenuPosition({ left: newLeft, top: newTop });\n\t}, [\n\t\tdisable,\n\t\ttriggerRef,\n\t\tmenuRef,\n\t\tmenuRect,\n\t\tisSubMenu,\n\t\tisOpen\n\t]);\n\n\treturn subMenuPosition;\n};\n"],"names":["useSubMenuElementPosition","triggerRef","menuRef","isSubMenu","isOpen","originalMenuRect","disable","_useState","useState","left","top","_useState2","_slicedToArray","subMenuPosition","setSubMenuPosition","_useState3","_useState4","menuRect","setMenuRect","useEffect","current","getBoundingClientRect","parentMenu","findClosestMenuParent","triggerRect","parentElement","parentMenuRect","menuHeight","height","overlapsRight","window","innerWidth","right","overlapsLeft","width","newLeft","calculateLeftPosition","newTop","calculateTopPosition"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @param pos - The position to flip. Can be 'left', 'right', 'top', or 'bottom'.
|
|
5
5
|
* @returns The flipped position. Will be 'right' for 'left', 'left' for 'right', 'bottom' for 'top', and 'top' for 'bottom'.
|
|
6
6
|
*/
|
|
7
|
-
var flipPosition =
|
|
7
|
+
var flipPosition = pos => {
|
|
8
8
|
switch (pos) {
|
|
9
9
|
case 'left':
|
|
10
10
|
return 'right';
|