@lidofinance/lido-app-ui 1.12.0 → 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +85 -19
- package/dist/README.md +85 -19
- package/dist/cjs/accordion/Accordion.cjs +1 -0
- package/dist/cjs/accordion/Accordion.cjs.map +1 -1
- package/dist/cjs/address/Address.cjs +50 -0
- package/dist/cjs/address/Address.cjs.map +1 -0
- package/dist/cjs/address/Address.module.css.cjs +6 -0
- package/dist/cjs/address/Address.module.css.cjs.map +1 -0
- package/dist/cjs/address-button/AddressButton.cjs +49 -0
- package/dist/cjs/address-button/AddressButton.cjs.map +1 -0
- package/dist/cjs/address-button/AddressButton.module.css.cjs +6 -0
- package/dist/cjs/address-button/AddressButton.module.css.cjs.map +1 -0
- package/dist/cjs/badge/Badge.cjs +1 -0
- package/dist/cjs/badge/Badge.cjs.map +1 -1
- package/dist/cjs/banner/Banner.cjs +1 -0
- package/dist/cjs/banner/Banner.cjs.map +1 -1
- package/dist/cjs/breadcrumbs/Breadcrumbs.cjs +55 -26
- package/dist/cjs/breadcrumbs/Breadcrumbs.cjs.map +1 -1
- package/dist/cjs/breadcrumbs/Breadcrumbs.module.css.cjs +1 -1
- package/dist/cjs/button/Button.cjs +15 -24
- package/dist/cjs/button/Button.cjs.map +1 -1
- package/dist/cjs/button/Button.module.css.cjs +1 -1
- package/dist/cjs/button/ButtonContent.cjs +50 -0
- package/dist/cjs/button/ButtonContent.cjs.map +1 -0
- package/dist/cjs/button/LinkButton.cjs +46 -0
- package/dist/cjs/button/LinkButton.cjs.map +1 -0
- package/dist/cjs/card/Card.cjs +1 -0
- package/dist/cjs/card/Card.cjs.map +1 -1
- package/dist/cjs/checkbox/Checkbox.cjs +1 -0
- package/dist/cjs/checkbox/Checkbox.cjs.map +1 -1
- package/dist/cjs/copy/Copy.cjs +55 -0
- package/dist/cjs/copy/Copy.cjs.map +1 -0
- package/dist/cjs/copy/Copy.module.css.cjs +6 -0
- package/dist/cjs/copy/Copy.module.css.cjs.map +1 -0
- package/dist/cjs/copy/useCopy.cjs +33 -0
- package/dist/cjs/copy/useCopy.cjs.map +1 -0
- package/dist/cjs/counter/Counter.cjs +6 -2
- package/dist/cjs/counter/Counter.cjs.map +1 -1
- package/dist/cjs/counter/CounterSlot.cjs +19 -2
- package/dist/cjs/counter/CounterSlot.cjs.map +1 -1
- package/dist/cjs/counter/CounterSlot.module.css.cjs +1 -1
- package/dist/cjs/data-list/DataList.cjs +1 -0
- package/dist/cjs/data-list/DataList.cjs.map +1 -1
- package/dist/cjs/data-list/DataList.module.css.cjs +1 -1
- package/dist/cjs/data-list/DataListRow.cjs +7 -12
- package/dist/cjs/data-list/DataListRow.cjs.map +1 -1
- package/dist/cjs/disclaimer/Disclaimer.cjs +10 -3
- package/dist/cjs/disclaimer/Disclaimer.cjs.map +1 -1
- package/dist/cjs/divider/Divider.cjs +5 -0
- package/dist/cjs/divider/Divider.cjs.map +1 -1
- package/dist/cjs/error-page/ErrorPage.cjs +14 -7
- package/dist/cjs/error-page/ErrorPage.cjs.map +1 -1
- package/dist/cjs/footer/Footer.cjs +10 -2
- package/dist/cjs/footer/Footer.cjs.map +1 -1
- package/dist/cjs/grid/Grid.cjs +7 -3
- package/dist/cjs/grid/Grid.cjs.map +1 -1
- package/dist/cjs/grid/Grid.module.css.cjs +1 -1
- package/dist/cjs/grid/GridItem.cjs +2 -0
- package/dist/cjs/grid/GridItem.cjs.map +1 -1
- package/dist/cjs/header/Header.cjs +10 -2
- package/dist/cjs/header/Header.cjs.map +1 -1
- package/dist/cjs/header/HeaderNav.cjs +33 -21
- package/dist/cjs/header/HeaderNav.cjs.map +1 -1
- package/dist/cjs/header/HeaderNav.module.css.cjs +1 -1
- package/dist/cjs/hex/Hex.cjs +41 -0
- package/dist/cjs/hex/Hex.cjs.map +1 -0
- package/dist/cjs/hex/Hex.module.css.cjs +6 -0
- package/dist/cjs/hex/Hex.module.css.cjs.map +1 -0
- package/dist/cjs/hex/trimHex.cjs +15 -0
- package/dist/cjs/hex/trimHex.cjs.map +1 -0
- package/dist/cjs/hidden/Hidden.cjs +10 -4
- package/dist/cjs/hidden/Hidden.cjs.map +1 -1
- package/dist/cjs/hooks/Portal.cjs +14 -11
- package/dist/cjs/hooks/Portal.cjs.map +1 -1
- package/dist/cjs/hooks/useBodyScrollLock.cjs +49 -13
- package/dist/cjs/hooks/useBodyScrollLock.cjs.map +1 -1
- package/dist/cjs/hooks/useEdgeFade.cjs +60 -0
- package/dist/cjs/hooks/useEdgeFade.cjs.map +1 -0
- package/dist/cjs/hooks/useEscape.cjs +8 -5
- package/dist/cjs/hooks/useEscape.cjs.map +1 -1
- package/dist/cjs/hooks/useFocusTrap.cjs +61 -24
- package/dist/cjs/hooks/useFocusTrap.cjs.map +1 -1
- package/dist/cjs/hooks/useHideOthers.cjs +51 -0
- package/dist/cjs/hooks/useHideOthers.cjs.map +1 -0
- package/dist/cjs/hooks/useOutsideClick.cjs +31 -4
- package/dist/cjs/hooks/useOutsideClick.cjs.map +1 -1
- package/dist/cjs/icon-button/CloseButton.cjs +27 -0
- package/dist/cjs/icon-button/CloseButton.cjs.map +1 -0
- package/dist/cjs/icon-button/IconButton.cjs +6 -1
- package/dist/cjs/icon-button/IconButton.cjs.map +1 -1
- package/dist/cjs/icon-button/IconButton.module.css.cjs +1 -1
- package/dist/cjs/icons/TokenIcon.cjs +2 -0
- package/dist/cjs/icons/TokenIcon.cjs.map +1 -1
- package/dist/cjs/identicon/Identicon.cjs +2 -0
- package/dist/cjs/identicon/Identicon.cjs.map +1 -1
- package/dist/cjs/index.cjs +67 -5
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.css +14 -4
- package/dist/cjs/info-tooltip/InfoTooltip.cjs +34 -0
- package/dist/cjs/info-tooltip/InfoTooltip.cjs.map +1 -0
- package/dist/cjs/info-tooltip/InfoTooltip.module.css.cjs +6 -0
- package/dist/cjs/info-tooltip/InfoTooltip.module.css.cjs.map +1 -0
- package/dist/cjs/input/Input.cjs +4 -8
- package/dist/cjs/input/Input.cjs.map +1 -1
- package/dist/cjs/input/Input.module.css.cjs +1 -1
- package/dist/cjs/link-provider/Anchor.cjs +23 -2
- package/dist/cjs/link-provider/Anchor.cjs.map +1 -1
- package/dist/cjs/link-provider/LinkProvider.cjs +1 -1
- package/dist/cjs/link-provider/LinkProvider.cjs.map +1 -1
- package/dist/cjs/logo/Logo.cjs +8 -0
- package/dist/cjs/logo/Logo.cjs.map +1 -1
- package/dist/cjs/message-box/MessageBox.cjs +1 -0
- package/dist/cjs/message-box/MessageBox.cjs.map +1 -1
- package/dist/cjs/modal/Modal.cjs +73 -15
- package/dist/cjs/modal/Modal.cjs.map +1 -1
- package/dist/cjs/nav-link/NavLink.cjs +6 -4
- package/dist/cjs/nav-link/NavLink.cjs.map +1 -1
- package/dist/cjs/notification/Notification.cjs +12 -6
- package/dist/cjs/notification/Notification.cjs.map +1 -1
- package/dist/cjs/page-layout/Layout.cjs +25 -0
- package/dist/cjs/page-layout/Layout.cjs.map +1 -0
- package/dist/cjs/page-layout/Layout.module.css.cjs +6 -0
- package/dist/cjs/page-layout/Layout.module.css.cjs.map +1 -0
- package/dist/cjs/page-layout/Main.cjs +29 -0
- package/dist/cjs/page-layout/Main.cjs.map +1 -0
- package/dist/cjs/page-layout/Main.module.css.cjs +6 -0
- package/dist/cjs/page-layout/Main.module.css.cjs.map +1 -0
- package/dist/cjs/page-layout/PageContent.cjs +22 -0
- package/dist/cjs/page-layout/PageContent.cjs.map +1 -0
- package/dist/cjs/page-layout/PageContent.module.css.cjs +6 -0
- package/dist/cjs/page-layout/PageContent.module.css.cjs.map +1 -0
- package/dist/cjs/pagination/Pagination.cjs +11 -6
- package/dist/cjs/pagination/Pagination.cjs.map +1 -1
- package/dist/cjs/popover/Popover.cjs +71 -15
- package/dist/cjs/popover/Popover.cjs.map +1 -1
- package/dist/cjs/radio-button/RadioButton.cjs +1 -0
- package/dist/cjs/radio-button/RadioButton.cjs.map +1 -1
- package/dist/cjs/rich-input/RichInput.cjs +22 -46
- package/dist/cjs/rich-input/RichInput.cjs.map +1 -1
- package/dist/cjs/rich-input/RichInput.module.css.cjs +1 -1
- package/dist/cjs/section-title/SectionTitle.cjs +9 -10
- package/dist/cjs/section-title/SectionTitle.cjs.map +1 -1
- package/dist/cjs/section-title/SectionTitle.module.css.cjs +1 -1
- package/dist/cjs/segmented-control/SegmentedControl.cjs +1 -0
- package/dist/cjs/segmented-control/SegmentedControl.cjs.map +1 -1
- package/dist/cjs/segmented-control/SegmentedControlCard.cjs +1 -0
- package/dist/cjs/segmented-control/SegmentedControlCard.cjs.map +1 -1
- package/dist/cjs/sidebar/Sidebar.cjs +141 -0
- package/dist/cjs/sidebar/Sidebar.cjs.map +1 -0
- package/dist/cjs/sidebar/Sidebar.module.css.cjs +6 -0
- package/dist/cjs/sidebar/Sidebar.module.css.cjs.map +1 -0
- package/dist/cjs/sidebar/SidebarContext.cjs +13 -0
- package/dist/cjs/sidebar/SidebarContext.cjs.map +1 -0
- package/dist/cjs/sidebar/SidebarGroup.cjs +37 -0
- package/dist/cjs/sidebar/SidebarGroup.cjs.map +1 -0
- package/dist/cjs/sidebar/SidebarGroup.module.css.cjs +6 -0
- package/dist/cjs/sidebar/SidebarGroup.module.css.cjs.map +1 -0
- package/dist/cjs/sidebar/SidebarInset.cjs +25 -0
- package/dist/cjs/sidebar/SidebarInset.cjs.map +1 -0
- package/dist/cjs/sidebar/SidebarInset.module.css.cjs +6 -0
- package/dist/cjs/sidebar/SidebarInset.module.css.cjs.map +1 -0
- package/dist/cjs/sidebar/SidebarItem.cjs +42 -0
- package/dist/cjs/sidebar/SidebarItem.cjs.map +1 -0
- package/dist/cjs/sidebar/SidebarItem.module.css.cjs +6 -0
- package/dist/cjs/sidebar/SidebarItem.module.css.cjs.map +1 -0
- package/dist/cjs/sidebar/SidebarLayout.cjs +41 -0
- package/dist/cjs/sidebar/SidebarLayout.cjs.map +1 -0
- package/dist/cjs/sidebar/SidebarLayout.module.css.cjs +6 -0
- package/dist/cjs/sidebar/SidebarLayout.module.css.cjs.map +1 -0
- package/dist/cjs/sidebar/SidebarToggle.cjs +44 -0
- package/dist/cjs/sidebar/SidebarToggle.cjs.map +1 -0
- package/dist/cjs/sidebar/SidebarToggle.module.css.cjs +6 -0
- package/dist/cjs/sidebar/SidebarToggle.module.css.cjs.map +1 -0
- package/dist/cjs/sidebar/useSidebarDrawer.cjs +47 -0
- package/dist/cjs/sidebar/useSidebarDrawer.cjs.map +1 -0
- package/dist/cjs/skeleton/Skeleton.cjs +18 -20
- package/dist/cjs/skeleton/Skeleton.cjs.map +1 -1
- package/dist/cjs/skip-link/SkipLink.cjs +52 -0
- package/dist/cjs/skip-link/SkipLink.cjs.map +1 -0
- package/dist/cjs/skip-link/SkipLink.module.css.cjs +6 -0
- package/dist/cjs/skip-link/SkipLink.module.css.cjs.map +1 -0
- package/dist/cjs/slider/Slider.cjs +1 -0
- package/dist/cjs/slider/Slider.cjs.map +1 -1
- package/dist/cjs/small-card/SmallCard.cjs +6 -2
- package/dist/cjs/small-card/SmallCard.cjs.map +1 -1
- package/dist/cjs/stack/Stack.cjs +27 -7
- package/dist/cjs/stack/Stack.cjs.map +1 -1
- package/dist/cjs/stack/Stack.module.css.cjs +1 -1
- package/dist/cjs/stat-item/StatItem.cjs +4 -8
- package/dist/cjs/stat-item/StatItem.cjs.map +1 -1
- package/dist/cjs/stat-item/StatItem.module.css.cjs +1 -1
- package/dist/cjs/switch/Switch.cjs +1 -0
- package/dist/cjs/switch/Switch.cjs.map +1 -1
- package/dist/cjs/tabs/Tabs.cjs +1 -0
- package/dist/cjs/tabs/Tabs.cjs.map +1 -1
- package/dist/cjs/tag/Tag.cjs +73 -8
- package/dist/cjs/tag/Tag.cjs.map +1 -1
- package/dist/cjs/tag/Tag.module.css.cjs +1 -1
- package/dist/cjs/text-link/TextLink.cjs +10 -13
- package/dist/cjs/text-link/TextLink.cjs.map +1 -1
- package/dist/cjs/text-link/TextLink.module.css.cjs +1 -1
- package/dist/cjs/theme-switcher/ThemeSwitcher.cjs +13 -5
- package/dist/cjs/theme-switcher/ThemeSwitcher.cjs.map +1 -1
- package/dist/cjs/theme-switcher/ThemeSwitcher.module.css.cjs +6 -0
- package/dist/cjs/theme-switcher/ThemeSwitcher.module.css.cjs.map +1 -0
- package/dist/cjs/token-amount/TokenAmount.cjs +1 -0
- package/dist/cjs/token-amount/TokenAmount.cjs.map +1 -1
- package/dist/cjs/token-selector/TokenSelector.cjs +56 -64
- package/dist/cjs/token-selector/TokenSelector.cjs.map +1 -1
- package/dist/cjs/tooltip/Tooltip.cjs +42 -27
- package/dist/cjs/tooltip/Tooltip.cjs.map +1 -1
- package/dist/cjs/tx-status/TxStatus.cjs +2 -0
- package/dist/cjs/tx-status/TxStatus.cjs.map +1 -1
- package/dist/cjs/typography/Typography.cjs +2 -0
- package/dist/cjs/typography/Typography.cjs.map +1 -1
- package/dist/cjs/utils/ActionElement.cjs +2 -13
- package/dist/cjs/utils/ActionElement.cjs.map +1 -1
- package/dist/cjs/utils/breakpoints.cjs +26 -0
- package/dist/cjs/utils/breakpoints.cjs.map +1 -0
- package/dist/cjs/utils/responsive.cjs +19 -30
- package/dist/cjs/utils/responsive.cjs.map +1 -1
- package/dist/cjs/utils/surface.module.css.cjs +6 -0
- package/dist/cjs/utils/surface.module.css.cjs.map +1 -0
- package/dist/esm/accordion/Accordion.mjs +1 -0
- package/dist/esm/accordion/Accordion.mjs.map +1 -1
- package/dist/esm/address/Address.mjs +46 -0
- package/dist/esm/address/Address.mjs.map +1 -0
- package/dist/esm/address/Address.module.css.mjs +4 -0
- package/dist/esm/address/Address.module.css.mjs.map +1 -0
- package/dist/esm/address-button/AddressButton.mjs +45 -0
- package/dist/esm/address-button/AddressButton.mjs.map +1 -0
- package/dist/esm/address-button/AddressButton.module.css.mjs +4 -0
- package/dist/esm/address-button/AddressButton.module.css.mjs.map +1 -0
- package/dist/esm/badge/Badge.mjs +1 -0
- package/dist/esm/badge/Badge.mjs.map +1 -1
- package/dist/esm/banner/Banner.mjs +1 -0
- package/dist/esm/banner/Banner.mjs.map +1 -1
- package/dist/esm/breadcrumbs/Breadcrumbs.mjs +56 -27
- package/dist/esm/breadcrumbs/Breadcrumbs.mjs.map +1 -1
- package/dist/esm/breadcrumbs/Breadcrumbs.module.css.mjs +1 -1
- package/dist/esm/button/Button.mjs +16 -25
- package/dist/esm/button/Button.mjs.map +1 -1
- package/dist/esm/button/Button.module.css.mjs +1 -1
- package/dist/esm/button/ButtonContent.mjs +45 -0
- package/dist/esm/button/ButtonContent.mjs.map +1 -0
- package/dist/esm/button/LinkButton.mjs +42 -0
- package/dist/esm/button/LinkButton.mjs.map +1 -0
- package/dist/esm/card/Card.mjs +1 -0
- package/dist/esm/card/Card.mjs.map +1 -1
- package/dist/esm/checkbox/Checkbox.mjs +1 -0
- package/dist/esm/checkbox/Checkbox.mjs.map +1 -1
- package/dist/esm/copy/Copy.mjs +51 -0
- package/dist/esm/copy/Copy.mjs.map +1 -0
- package/dist/esm/copy/Copy.module.css.mjs +4 -0
- package/dist/esm/copy/Copy.module.css.mjs.map +1 -0
- package/dist/esm/copy/useCopy.mjs +29 -0
- package/dist/esm/copy/useCopy.mjs.map +1 -0
- package/dist/esm/counter/Counter.mjs +6 -2
- package/dist/esm/counter/Counter.mjs.map +1 -1
- package/dist/esm/counter/CounterSlot.mjs +19 -3
- package/dist/esm/counter/CounterSlot.mjs.map +1 -1
- package/dist/esm/counter/CounterSlot.module.css.mjs +1 -1
- package/dist/esm/data-list/DataList.mjs +1 -0
- package/dist/esm/data-list/DataList.mjs.map +1 -1
- package/dist/esm/data-list/DataList.module.css.mjs +1 -1
- package/dist/esm/data-list/DataListRow.mjs +7 -12
- package/dist/esm/data-list/DataListRow.mjs.map +1 -1
- package/dist/esm/disclaimer/Disclaimer.mjs +10 -3
- package/dist/esm/disclaimer/Disclaimer.mjs.map +1 -1
- package/dist/esm/divider/Divider.mjs +5 -0
- package/dist/esm/divider/Divider.mjs.map +1 -1
- package/dist/esm/error-page/ErrorPage.mjs +14 -7
- package/dist/esm/error-page/ErrorPage.mjs.map +1 -1
- package/dist/esm/footer/Footer.mjs +10 -2
- package/dist/esm/footer/Footer.mjs.map +1 -1
- package/dist/esm/grid/Grid.mjs +8 -4
- package/dist/esm/grid/Grid.mjs.map +1 -1
- package/dist/esm/grid/Grid.module.css.mjs +1 -1
- package/dist/esm/grid/GridItem.mjs +2 -0
- package/dist/esm/grid/GridItem.mjs.map +1 -1
- package/dist/esm/header/Header.mjs +10 -2
- package/dist/esm/header/Header.mjs.map +1 -1
- package/dist/esm/header/HeaderNav.mjs +34 -22
- package/dist/esm/header/HeaderNav.mjs.map +1 -1
- package/dist/esm/header/HeaderNav.module.css.mjs +1 -1
- package/dist/esm/hex/Hex.mjs +37 -0
- package/dist/esm/hex/Hex.mjs.map +1 -0
- package/dist/esm/hex/Hex.module.css.mjs +4 -0
- package/dist/esm/hex/Hex.module.css.mjs.map +1 -0
- package/dist/esm/hex/trimHex.mjs +11 -0
- package/dist/esm/hex/trimHex.mjs.map +1 -0
- package/dist/esm/hidden/Hidden.mjs +10 -4
- package/dist/esm/hidden/Hidden.mjs.map +1 -1
- package/dist/esm/hooks/Portal.mjs +16 -13
- package/dist/esm/hooks/Portal.mjs.map +1 -1
- package/dist/esm/hooks/useBodyScrollLock.mjs +49 -13
- package/dist/esm/hooks/useBodyScrollLock.mjs.map +1 -1
- package/dist/esm/hooks/useEdgeFade.mjs +56 -0
- package/dist/esm/hooks/useEdgeFade.mjs.map +1 -0
- package/dist/esm/hooks/useEscape.mjs +8 -5
- package/dist/esm/hooks/useEscape.mjs.map +1 -1
- package/dist/esm/hooks/useFocusTrap.mjs +61 -24
- package/dist/esm/hooks/useFocusTrap.mjs.map +1 -1
- package/dist/esm/hooks/useHideOthers.mjs +47 -0
- package/dist/esm/hooks/useHideOthers.mjs.map +1 -0
- package/dist/esm/hooks/useOutsideClick.mjs +31 -4
- package/dist/esm/hooks/useOutsideClick.mjs.map +1 -1
- package/dist/esm/icon-button/CloseButton.mjs +23 -0
- package/dist/esm/icon-button/CloseButton.mjs.map +1 -0
- package/dist/esm/icon-button/IconButton.mjs +6 -1
- package/dist/esm/icon-button/IconButton.mjs.map +1 -1
- package/dist/esm/icon-button/IconButton.module.css.mjs +1 -1
- package/dist/esm/icons/TokenIcon.mjs +2 -0
- package/dist/esm/icons/TokenIcon.mjs.map +1 -1
- package/dist/esm/identicon/Identicon.mjs +2 -0
- package/dist/esm/identicon/Identicon.mjs.map +1 -1
- package/dist/esm/index.css +14 -4
- package/dist/esm/index.mjs +35 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/info-tooltip/InfoTooltip.mjs +30 -0
- package/dist/esm/info-tooltip/InfoTooltip.mjs.map +1 -0
- package/dist/esm/info-tooltip/InfoTooltip.module.css.mjs +4 -0
- package/dist/esm/info-tooltip/InfoTooltip.module.css.mjs.map +1 -0
- package/dist/esm/input/Input.mjs +4 -8
- package/dist/esm/input/Input.mjs.map +1 -1
- package/dist/esm/input/Input.module.css.mjs +1 -1
- package/dist/esm/link-provider/Anchor.mjs +23 -2
- package/dist/esm/link-provider/Anchor.mjs.map +1 -1
- package/dist/esm/link-provider/LinkProvider.mjs +1 -1
- package/dist/esm/link-provider/LinkProvider.mjs.map +1 -1
- package/dist/esm/logo/Logo.mjs +9 -1
- package/dist/esm/logo/Logo.mjs.map +1 -1
- package/dist/esm/message-box/MessageBox.mjs +1 -0
- package/dist/esm/message-box/MessageBox.mjs.map +1 -1
- package/dist/esm/modal/Modal.mjs +74 -17
- package/dist/esm/modal/Modal.mjs.map +1 -1
- package/dist/esm/nav-link/NavLink.mjs +6 -4
- package/dist/esm/nav-link/NavLink.mjs.map +1 -1
- package/dist/esm/notification/Notification.mjs +13 -7
- package/dist/esm/notification/Notification.mjs.map +1 -1
- package/dist/esm/page-layout/Layout.mjs +21 -0
- package/dist/esm/page-layout/Layout.mjs.map +1 -0
- package/dist/esm/page-layout/Layout.module.css.mjs +4 -0
- package/dist/esm/page-layout/Layout.module.css.mjs.map +1 -0
- package/dist/esm/page-layout/Main.mjs +24 -0
- package/dist/esm/page-layout/Main.mjs.map +1 -0
- package/dist/esm/page-layout/Main.module.css.mjs +4 -0
- package/dist/esm/page-layout/Main.module.css.mjs.map +1 -0
- package/dist/esm/page-layout/PageContent.mjs +18 -0
- package/dist/esm/page-layout/PageContent.mjs.map +1 -0
- package/dist/esm/page-layout/PageContent.module.css.mjs +4 -0
- package/dist/esm/page-layout/PageContent.module.css.mjs.map +1 -0
- package/dist/esm/pagination/Pagination.mjs +12 -7
- package/dist/esm/pagination/Pagination.mjs.map +1 -1
- package/dist/esm/popover/Popover.mjs +72 -16
- package/dist/esm/popover/Popover.mjs.map +1 -1
- package/dist/esm/radio-button/RadioButton.mjs +1 -0
- package/dist/esm/radio-button/RadioButton.mjs.map +1 -1
- package/dist/esm/rich-input/RichInput.mjs +23 -47
- package/dist/esm/rich-input/RichInput.mjs.map +1 -1
- package/dist/esm/rich-input/RichInput.module.css.mjs +1 -1
- package/dist/esm/section-title/SectionTitle.mjs +9 -10
- package/dist/esm/section-title/SectionTitle.mjs.map +1 -1
- package/dist/esm/section-title/SectionTitle.module.css.mjs +1 -1
- package/dist/esm/segmented-control/SegmentedControl.mjs +1 -0
- package/dist/esm/segmented-control/SegmentedControl.mjs.map +1 -1
- package/dist/esm/segmented-control/SegmentedControlCard.mjs +1 -0
- package/dist/esm/segmented-control/SegmentedControlCard.mjs.map +1 -1
- package/dist/esm/sidebar/Sidebar.mjs +136 -0
- package/dist/esm/sidebar/Sidebar.mjs.map +1 -0
- package/dist/esm/sidebar/Sidebar.module.css.mjs +4 -0
- package/dist/esm/sidebar/Sidebar.module.css.mjs.map +1 -0
- package/dist/esm/sidebar/SidebarContext.mjs +8 -0
- package/dist/esm/sidebar/SidebarContext.mjs.map +1 -0
- package/dist/esm/sidebar/SidebarGroup.mjs +33 -0
- package/dist/esm/sidebar/SidebarGroup.mjs.map +1 -0
- package/dist/esm/sidebar/SidebarGroup.module.css.mjs +4 -0
- package/dist/esm/sidebar/SidebarGroup.module.css.mjs.map +1 -0
- package/dist/esm/sidebar/SidebarInset.mjs +21 -0
- package/dist/esm/sidebar/SidebarInset.mjs.map +1 -0
- package/dist/esm/sidebar/SidebarInset.module.css.mjs +4 -0
- package/dist/esm/sidebar/SidebarInset.module.css.mjs.map +1 -0
- package/dist/esm/sidebar/SidebarItem.mjs +38 -0
- package/dist/esm/sidebar/SidebarItem.mjs.map +1 -0
- package/dist/esm/sidebar/SidebarItem.module.css.mjs +4 -0
- package/dist/esm/sidebar/SidebarItem.module.css.mjs.map +1 -0
- package/dist/esm/sidebar/SidebarLayout.mjs +37 -0
- package/dist/esm/sidebar/SidebarLayout.mjs.map +1 -0
- package/dist/esm/sidebar/SidebarLayout.module.css.mjs +4 -0
- package/dist/esm/sidebar/SidebarLayout.module.css.mjs.map +1 -0
- package/dist/esm/sidebar/SidebarToggle.mjs +40 -0
- package/dist/esm/sidebar/SidebarToggle.mjs.map +1 -0
- package/dist/esm/sidebar/SidebarToggle.module.css.mjs +4 -0
- package/dist/esm/sidebar/SidebarToggle.module.css.mjs.map +1 -0
- package/dist/esm/sidebar/useSidebarDrawer.mjs +43 -0
- package/dist/esm/sidebar/useSidebarDrawer.mjs.map +1 -0
- package/dist/esm/skeleton/Skeleton.mjs +18 -20
- package/dist/esm/skeleton/Skeleton.mjs.map +1 -1
- package/dist/esm/skip-link/SkipLink.mjs +48 -0
- package/dist/esm/skip-link/SkipLink.mjs.map +1 -0
- package/dist/esm/skip-link/SkipLink.module.css.mjs +4 -0
- package/dist/esm/skip-link/SkipLink.module.css.mjs.map +1 -0
- package/dist/esm/slider/Slider.mjs +1 -0
- package/dist/esm/slider/Slider.mjs.map +1 -1
- package/dist/esm/small-card/SmallCard.mjs +6 -2
- package/dist/esm/small-card/SmallCard.mjs.map +1 -1
- package/dist/esm/stack/Stack.mjs +28 -9
- package/dist/esm/stack/Stack.mjs.map +1 -1
- package/dist/esm/stack/Stack.module.css.mjs +1 -1
- package/dist/esm/stat-item/StatItem.mjs +4 -8
- package/dist/esm/stat-item/StatItem.mjs.map +1 -1
- package/dist/esm/stat-item/StatItem.module.css.mjs +1 -1
- package/dist/esm/switch/Switch.mjs +1 -0
- package/dist/esm/switch/Switch.mjs.map +1 -1
- package/dist/esm/tabs/Tabs.mjs +1 -0
- package/dist/esm/tabs/Tabs.mjs.map +1 -1
- package/dist/esm/tag/Tag.mjs +74 -9
- package/dist/esm/tag/Tag.mjs.map +1 -1
- package/dist/esm/tag/Tag.module.css.mjs +1 -1
- package/dist/esm/text-link/TextLink.mjs +10 -13
- package/dist/esm/text-link/TextLink.mjs.map +1 -1
- package/dist/esm/text-link/TextLink.module.css.mjs +1 -1
- package/dist/esm/theme-switcher/ThemeSwitcher.mjs +14 -6
- package/dist/esm/theme-switcher/ThemeSwitcher.mjs.map +1 -1
- package/dist/esm/theme-switcher/ThemeSwitcher.module.css.mjs +4 -0
- package/dist/esm/theme-switcher/ThemeSwitcher.module.css.mjs.map +1 -0
- package/dist/esm/token-amount/TokenAmount.mjs +1 -0
- package/dist/esm/token-amount/TokenAmount.mjs.map +1 -1
- package/dist/esm/token-selector/TokenSelector.mjs +58 -66
- package/dist/esm/token-selector/TokenSelector.mjs.map +1 -1
- package/dist/esm/tooltip/Tooltip.mjs +42 -27
- package/dist/esm/tooltip/Tooltip.mjs.map +1 -1
- package/dist/esm/tx-status/TxStatus.mjs +2 -0
- package/dist/esm/tx-status/TxStatus.mjs.map +1 -1
- package/dist/esm/typography/Typography.mjs +2 -0
- package/dist/esm/typography/Typography.mjs.map +1 -1
- package/dist/esm/utils/ActionElement.mjs +2 -13
- package/dist/esm/utils/ActionElement.mjs.map +1 -1
- package/dist/esm/utils/breakpoints.mjs +19 -0
- package/dist/esm/utils/breakpoints.mjs.map +1 -0
- package/dist/esm/utils/responsive.mjs +17 -27
- package/dist/esm/utils/responsive.mjs.map +1 -1
- package/dist/esm/utils/surface.module.css.mjs +4 -0
- package/dist/esm/utils/surface.module.css.mjs.map +1 -0
- package/dist/index.css +14 -4
- package/dist/styles/breakpoints.css +16 -12
- package/dist/styles/typography-mixins.css +8 -0
- package/dist/types/accordion/Accordion.d.ts +3 -0
- package/dist/types/accordion/Accordion.d.ts.map +1 -1
- package/dist/types/address/Address.d.ts +16 -0
- package/dist/types/address/Address.d.ts.map +1 -0
- package/dist/types/address/index.d.ts +3 -0
- package/dist/types/address/index.d.ts.map +1 -0
- package/dist/types/address-button/AddressButton.d.ts +13 -0
- package/dist/types/address-button/AddressButton.d.ts.map +1 -0
- package/dist/types/address-button/index.d.ts +3 -0
- package/dist/types/address-button/index.d.ts.map +1 -0
- package/dist/types/badge/Badge.d.ts +1 -0
- package/dist/types/badge/Badge.d.ts.map +1 -1
- package/dist/types/banner/Banner.d.ts +1 -0
- package/dist/types/banner/Banner.d.ts.map +1 -1
- package/dist/types/breadcrumbs/Breadcrumbs.d.ts +17 -1
- package/dist/types/breadcrumbs/Breadcrumbs.d.ts.map +1 -1
- package/dist/types/breadcrumbs/index.d.ts +1 -1
- package/dist/types/breadcrumbs/index.d.ts.map +1 -1
- package/dist/types/button/Button.d.ts +6 -26
- package/dist/types/button/Button.d.ts.map +1 -1
- package/dist/types/button/ButtonContent.d.ts +10 -0
- package/dist/types/button/ButtonContent.d.ts.map +1 -0
- package/dist/types/button/LinkButton.d.ts +10 -0
- package/dist/types/button/LinkButton.d.ts.map +1 -0
- package/dist/types/button/index.d.ts +2 -0
- package/dist/types/button/index.d.ts.map +1 -1
- package/dist/types/button/types.d.ts +26 -0
- package/dist/types/button/types.d.ts.map +1 -0
- package/dist/types/card/Card.d.ts +1 -0
- package/dist/types/card/Card.d.ts.map +1 -1
- package/dist/types/checkbox/Checkbox.d.ts +3 -0
- package/dist/types/checkbox/Checkbox.d.ts.map +1 -1
- package/dist/types/colors/colorTokens.d.ts.map +1 -1
- package/dist/types/copy/Copy.d.ts +10 -0
- package/dist/types/copy/Copy.d.ts.map +1 -0
- package/dist/types/copy/index.d.ts +5 -0
- package/dist/types/copy/index.d.ts.map +1 -0
- package/dist/types/copy/useCopy.d.ts +9 -0
- package/dist/types/copy/useCopy.d.ts.map +1 -0
- package/dist/types/counter/Counter.d.ts +6 -2
- package/dist/types/counter/Counter.d.ts.map +1 -1
- package/dist/types/counter/CounterSlot.d.ts +3 -0
- package/dist/types/counter/CounterSlot.d.ts.map +1 -1
- package/dist/types/data-list/DataList.d.ts +1 -0
- package/dist/types/data-list/DataList.d.ts.map +1 -1
- package/dist/types/data-list/DataListRow.d.ts +1 -0
- package/dist/types/data-list/DataListRow.d.ts.map +1 -1
- package/dist/types/disclaimer/Disclaimer.d.ts +9 -2
- package/dist/types/disclaimer/Disclaimer.d.ts.map +1 -1
- package/dist/types/divider/Divider.d.ts +5 -0
- package/dist/types/divider/Divider.d.ts.map +1 -1
- package/dist/types/divider/index.d.ts +1 -1
- package/dist/types/divider/index.d.ts.map +1 -1
- package/dist/types/error-page/ErrorPage.d.ts +17 -4
- package/dist/types/error-page/ErrorPage.d.ts.map +1 -1
- package/dist/types/footer/Footer.d.ts +17 -2
- package/dist/types/footer/Footer.d.ts.map +1 -1
- package/dist/types/footer/index.d.ts +1 -1
- package/dist/types/footer/index.d.ts.map +1 -1
- package/dist/types/grid/Grid.d.ts +21 -22
- package/dist/types/grid/Grid.d.ts.map +1 -1
- package/dist/types/grid/GridItem.d.ts +14 -10
- package/dist/types/grid/GridItem.d.ts.map +1 -1
- package/dist/types/grid/index.d.ts +2 -2
- package/dist/types/grid/index.d.ts.map +1 -1
- package/dist/types/header/Header.d.ts +15 -2
- package/dist/types/header/Header.d.ts.map +1 -1
- package/dist/types/header/HeaderNav.d.ts +10 -2
- package/dist/types/header/HeaderNav.d.ts.map +1 -1
- package/dist/types/header/index.d.ts +2 -2
- package/dist/types/header/index.d.ts.map +1 -1
- package/dist/types/hex/Hex.d.ts +10 -0
- package/dist/types/hex/Hex.d.ts.map +1 -0
- package/dist/types/hex/index.d.ts +4 -0
- package/dist/types/hex/index.d.ts.map +1 -0
- package/dist/types/hex/trimHex.d.ts +2 -0
- package/dist/types/hex/trimHex.d.ts.map +1 -0
- package/dist/types/hidden/Hidden.d.ts +20 -6
- package/dist/types/hidden/Hidden.d.ts.map +1 -1
- package/dist/types/hidden/index.d.ts +1 -1
- package/dist/types/hidden/index.d.ts.map +1 -1
- package/dist/types/hooks/Portal.d.ts +2 -5
- package/dist/types/hooks/Portal.d.ts.map +1 -1
- package/dist/types/hooks/index.d.ts +2 -0
- package/dist/types/hooks/index.d.ts.map +1 -1
- package/dist/types/hooks/useBodyScrollLock.d.ts +4 -2
- package/dist/types/hooks/useBodyScrollLock.d.ts.map +1 -1
- package/dist/types/hooks/useEdgeFade.d.ts +7 -0
- package/dist/types/hooks/useEdgeFade.d.ts.map +1 -0
- package/dist/types/hooks/useEscape.d.ts +4 -2
- package/dist/types/hooks/useEscape.d.ts.map +1 -1
- package/dist/types/hooks/useFocusTrap.d.ts +7 -3
- package/dist/types/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/types/hooks/useHideOthers.d.ts +3 -0
- package/dist/types/hooks/useHideOthers.d.ts.map +1 -0
- package/dist/types/hooks/useIsomorphicLayoutEffect.d.ts +2 -2
- package/dist/types/hooks/useIsomorphicLayoutEffect.d.ts.map +1 -1
- package/dist/types/hooks/useOutsideClick.d.ts +4 -2
- package/dist/types/hooks/useOutsideClick.d.ts.map +1 -1
- package/dist/types/icon-button/CloseButton.d.ts +9 -0
- package/dist/types/icon-button/CloseButton.d.ts.map +1 -0
- package/dist/types/icon-button/IconButton.d.ts +15 -2
- package/dist/types/icon-button/IconButton.d.ts.map +1 -1
- package/dist/types/icon-button/index.d.ts +2 -0
- package/dist/types/icon-button/index.d.ts.map +1 -1
- package/dist/types/icons/TokenIcon.d.ts +1 -0
- package/dist/types/icons/TokenIcon.d.ts.map +1 -1
- package/dist/types/identicon/Identicon.d.ts +5 -0
- package/dist/types/identicon/Identicon.d.ts.map +1 -1
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/info-tooltip/InfoTooltip.d.ts +12 -0
- package/dist/types/info-tooltip/InfoTooltip.d.ts.map +1 -0
- package/dist/types/info-tooltip/index.d.ts +3 -0
- package/dist/types/info-tooltip/index.d.ts.map +1 -0
- package/dist/types/input/Input.d.ts +1 -0
- package/dist/types/input/Input.d.ts.map +1 -1
- package/dist/types/link-provider/Anchor.d.ts +17 -1
- package/dist/types/link-provider/Anchor.d.ts.map +1 -1
- package/dist/types/link-provider/LinkProvider.d.ts +8 -2
- package/dist/types/link-provider/LinkProvider.d.ts.map +1 -1
- package/dist/types/link-provider/index.d.ts +1 -1
- package/dist/types/link-provider/index.d.ts.map +1 -1
- package/dist/types/logo/Logo.d.ts +20 -3
- package/dist/types/logo/Logo.d.ts.map +1 -1
- package/dist/types/logo/index.d.ts +1 -1
- package/dist/types/logo/index.d.ts.map +1 -1
- package/dist/types/message-box/MessageBox.d.ts +3 -0
- package/dist/types/message-box/MessageBox.d.ts.map +1 -1
- package/dist/types/modal/Modal.d.ts +21 -3
- package/dist/types/modal/Modal.d.ts.map +1 -1
- package/dist/types/modal/index.d.ts +2 -2
- package/dist/types/modal/index.d.ts.map +1 -1
- package/dist/types/nav-link/NavLink.d.ts +17 -0
- package/dist/types/nav-link/NavLink.d.ts.map +1 -1
- package/dist/types/nav-link/index.d.ts +1 -1
- package/dist/types/nav-link/index.d.ts.map +1 -1
- package/dist/types/notification/Notification.d.ts +7 -2
- package/dist/types/notification/Notification.d.ts.map +1 -1
- package/dist/types/page-layout/Layout.d.ts +5 -0
- package/dist/types/page-layout/Layout.d.ts.map +1 -0
- package/dist/types/page-layout/Main.d.ts +6 -0
- package/dist/types/page-layout/Main.d.ts.map +1 -0
- package/dist/types/page-layout/PageContent.d.ts +7 -0
- package/dist/types/page-layout/PageContent.d.ts.map +1 -0
- package/dist/types/page-layout/index.d.ts +7 -0
- package/dist/types/page-layout/index.d.ts.map +1 -0
- package/dist/types/pagination/Pagination.d.ts +3 -0
- package/dist/types/pagination/Pagination.d.ts.map +1 -1
- package/dist/types/popover/Popover.d.ts +32 -4
- package/dist/types/popover/Popover.d.ts.map +1 -1
- package/dist/types/popover/index.d.ts +1 -1
- package/dist/types/popover/index.d.ts.map +1 -1
- package/dist/types/radio-button/RadioButton.d.ts +3 -0
- package/dist/types/radio-button/RadioButton.d.ts.map +1 -1
- package/dist/types/rich-input/RichInput.d.ts +8 -1
- package/dist/types/rich-input/RichInput.d.ts.map +1 -1
- package/dist/types/section-title/SectionTitle.d.ts +8 -2
- package/dist/types/section-title/SectionTitle.d.ts.map +1 -1
- package/dist/types/section-title/index.d.ts +1 -1
- package/dist/types/section-title/index.d.ts.map +1 -1
- package/dist/types/segmented-control/SegmentedControl.d.ts +1 -0
- package/dist/types/segmented-control/SegmentedControl.d.ts.map +1 -1
- package/dist/types/segmented-control/SegmentedControlCard.d.ts +1 -0
- package/dist/types/segmented-control/SegmentedControlCard.d.ts.map +1 -1
- package/dist/types/sidebar/Sidebar.d.ts +15 -0
- package/dist/types/sidebar/Sidebar.d.ts.map +1 -0
- package/dist/types/sidebar/SidebarContext.d.ts +6 -0
- package/dist/types/sidebar/SidebarContext.d.ts.map +1 -0
- package/dist/types/sidebar/SidebarGroup.d.ts +7 -0
- package/dist/types/sidebar/SidebarGroup.d.ts.map +1 -0
- package/dist/types/sidebar/SidebarInset.d.ts +5 -0
- package/dist/types/sidebar/SidebarInset.d.ts.map +1 -0
- package/dist/types/sidebar/SidebarItem.d.ts +10 -0
- package/dist/types/sidebar/SidebarItem.d.ts.map +1 -0
- package/dist/types/sidebar/SidebarLayout.d.ts +18 -0
- package/dist/types/sidebar/SidebarLayout.d.ts.map +1 -0
- package/dist/types/sidebar/SidebarToggle.d.ts +13 -0
- package/dist/types/sidebar/SidebarToggle.d.ts.map +1 -0
- package/dist/types/sidebar/index.d.ts +17 -0
- package/dist/types/sidebar/index.d.ts.map +1 -0
- package/dist/types/sidebar/useSidebarDrawer.d.ts +23 -0
- package/dist/types/sidebar/useSidebarDrawer.d.ts.map +1 -0
- package/dist/types/skeleton/Skeleton.d.ts +17 -3
- package/dist/types/skeleton/Skeleton.d.ts.map +1 -1
- package/dist/types/skip-link/SkipLink.d.ts +11 -0
- package/dist/types/skip-link/SkipLink.d.ts.map +1 -0
- package/dist/types/skip-link/index.d.ts +3 -0
- package/dist/types/skip-link/index.d.ts.map +1 -0
- package/dist/types/slider/Slider.d.ts +1 -0
- package/dist/types/slider/Slider.d.ts.map +1 -1
- package/dist/types/small-card/SmallCard.d.ts +21 -2
- package/dist/types/small-card/SmallCard.d.ts.map +1 -1
- package/dist/types/stack/Stack.d.ts +24 -15
- package/dist/types/stack/Stack.d.ts.map +1 -1
- package/dist/types/stack/index.d.ts +1 -1
- package/dist/types/stack/index.d.ts.map +1 -1
- package/dist/types/stat-item/StatItem.d.ts +6 -0
- package/dist/types/stat-item/StatItem.d.ts.map +1 -1
- package/dist/types/switch/Switch.d.ts +3 -0
- package/dist/types/switch/Switch.d.ts.map +1 -1
- package/dist/types/tabs/Tabs.d.ts +1 -0
- package/dist/types/tabs/Tabs.d.ts.map +1 -1
- package/dist/types/tag/Tag.d.ts +31 -3
- package/dist/types/tag/Tag.d.ts.map +1 -1
- package/dist/types/text-link/TextLink.d.ts +25 -2
- package/dist/types/text-link/TextLink.d.ts.map +1 -1
- package/dist/types/text-link/index.d.ts +1 -1
- package/dist/types/text-link/index.d.ts.map +1 -1
- package/dist/types/theme-switcher/ThemeSwitcher.d.ts +9 -3
- package/dist/types/theme-switcher/ThemeSwitcher.d.ts.map +1 -1
- package/dist/types/token-amount/TokenAmount.d.ts +1 -0
- package/dist/types/token-amount/TokenAmount.d.ts.map +1 -1
- package/dist/types/token-selector/TokenSelector.d.ts +5 -1
- package/dist/types/token-selector/TokenSelector.d.ts.map +1 -1
- package/dist/types/tooltip/Tooltip.d.ts +2 -0
- package/dist/types/tooltip/Tooltip.d.ts.map +1 -1
- package/dist/types/tx-status/TxStatus.d.ts +3 -0
- package/dist/types/tx-status/TxStatus.d.ts.map +1 -1
- package/dist/types/typography/Typography.d.ts +4 -0
- package/dist/types/typography/Typography.d.ts.map +1 -1
- package/dist/types/utils/ActionElement.d.ts +4 -4
- package/dist/types/utils/ActionElement.d.ts.map +1 -1
- package/dist/types/utils/breakpoints.d.ts +16 -0
- package/dist/types/utils/breakpoints.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +5 -2
- package/dist/types/utils/index.d.ts.map +1 -1
- package/dist/types/utils/polymorphic.d.ts +15 -0
- package/dist/types/utils/polymorphic.d.ts.map +1 -0
- package/dist/types/utils/responsive.d.ts +29 -14
- package/dist/types/utils/responsive.d.ts.map +1 -1
- package/package.json +7 -3
|
@@ -6,23 +6,25 @@ const react = require('react');
|
|
|
6
6
|
const cn = require('classnames');
|
|
7
7
|
const HeaderNav_module = require('./HeaderNav.module.css.cjs');
|
|
8
8
|
const jsxRuntime = require('react/jsx-runtime');
|
|
9
|
+
const useEdgeFade = require('../hooks/useEdgeFade.cjs');
|
|
10
|
+
const useIsomorphicLayoutEffect = require('../hooks/useIsomorphicLayoutEffect.cjs');
|
|
9
11
|
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
nav.toggleAttribute('data-fade-end', nav.scrollLeft < nav.scrollWidth - nav.clientWidth - 1);
|
|
13
|
-
};
|
|
14
|
-
const scrollActiveIntoView = nav => {
|
|
15
|
-
const active = nav.querySelector("[aria-current='page']");
|
|
12
|
+
const ACTIVE = "[aria-current]:not([aria-current='false'], [aria-current=''])";
|
|
13
|
+
const scrollIntoCenter = (nav, active) => {
|
|
16
14
|
if (!active) return;
|
|
17
15
|
const navRect = nav.getBoundingClientRect();
|
|
18
16
|
const activeRect = active.getBoundingClientRect();
|
|
19
17
|
nav.scrollLeft += activeRect.left - navRect.left - (nav.clientWidth - activeRect.width) / 2;
|
|
20
18
|
};
|
|
19
|
+
|
|
20
|
+
/** `<nav>` for header links (`aria-label` defaults to `Main`); scrolls with an edge fade when narrow and centers the link with a truthy `aria-current`. */
|
|
21
21
|
const HeaderNav = /*#__PURE__*/react.forwardRef((_ref, ref) => {
|
|
22
22
|
let {
|
|
23
23
|
'aria-label': ariaLabel = 'Main',
|
|
24
24
|
className,
|
|
25
25
|
onScroll,
|
|
26
|
+
onFocus,
|
|
27
|
+
dataTestId,
|
|
26
28
|
...rest
|
|
27
29
|
} = _ref;
|
|
28
30
|
const navRef = react.useRef(null);
|
|
@@ -30,36 +32,46 @@ const HeaderNav = /*#__PURE__*/react.forwardRef((_ref, ref) => {
|
|
|
30
32
|
navRef.current = node;
|
|
31
33
|
if (typeof ref === 'function') ref(node);else if (ref) ref.current = node;
|
|
32
34
|
}, [ref]);
|
|
33
|
-
|
|
35
|
+
const {
|
|
36
|
+
sync,
|
|
37
|
+
onFocus: revealFocused
|
|
38
|
+
} = useEdgeFade.useEdgeFade(navRef);
|
|
39
|
+
useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
|
|
34
40
|
const nav = navRef.current;
|
|
35
41
|
if (!nav) return;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
syncFade(nav);
|
|
39
|
-
};
|
|
42
|
+
let active = nav.querySelector(ACTIVE);
|
|
43
|
+
scrollIntoCenter(nav, active);
|
|
40
44
|
sync();
|
|
41
|
-
|
|
42
|
-
mutations
|
|
45
|
+
if (typeof MutationObserver === 'undefined') return;
|
|
46
|
+
const mutations = new MutationObserver(() => {
|
|
47
|
+
const next = nav.querySelector(ACTIVE);
|
|
48
|
+
if (next !== active) {
|
|
49
|
+
active = next;
|
|
50
|
+
scrollIntoCenter(nav, next);
|
|
51
|
+
}
|
|
52
|
+
sync();
|
|
53
|
+
});
|
|
54
|
+
mutations.observe(nav, {
|
|
43
55
|
childList: true,
|
|
44
56
|
subtree: true,
|
|
45
57
|
attributes: true,
|
|
46
58
|
attributeFilter: ['aria-current']
|
|
47
59
|
});
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return () => {
|
|
51
|
-
mutations?.disconnect();
|
|
52
|
-
resizes?.disconnect();
|
|
53
|
-
};
|
|
54
|
-
}, []);
|
|
60
|
+
return () => mutations.disconnect();
|
|
61
|
+
}, [sync]);
|
|
55
62
|
return /*#__PURE__*/jsxRuntime.jsx("nav", {
|
|
56
63
|
ref: setRef,
|
|
57
64
|
"aria-label": ariaLabel,
|
|
58
65
|
className: cn(HeaderNav_module.nav, className),
|
|
59
66
|
onScroll: e => {
|
|
60
|
-
|
|
67
|
+
sync();
|
|
61
68
|
onScroll?.(e);
|
|
62
69
|
},
|
|
70
|
+
onFocus: e => {
|
|
71
|
+
revealFocused(e);
|
|
72
|
+
onFocus?.(e);
|
|
73
|
+
},
|
|
74
|
+
"data-testid": dataTestId?.root,
|
|
63
75
|
...rest
|
|
64
76
|
});
|
|
65
77
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeaderNav.cjs","sources":["../../../src/header/HeaderNav.tsx"],"sourcesContent":["import { forwardRef, useCallback,
|
|
1
|
+
{"version":3,"file":"HeaderNav.cjs","sources":["../../../src/header/HeaderNav.tsx"],"sourcesContent":["import { forwardRef, useCallback, useRef } from 'react'\nimport type { ComponentPropsWithoutRef } from 'react'\n\nimport cn from 'classnames'\n\nimport { useEdgeFade, useIsomorphicLayoutEffect } from '../hooks'\nimport styles from './HeaderNav.module.css'\n\nexport type HeaderNavDataTestId = { root?: string }\n\nexport type HeaderNavProps = ComponentPropsWithoutRef<'nav'> & {\n dataTestId?: HeaderNavDataTestId\n}\n\nconst ACTIVE = \"[aria-current]:not([aria-current='false'], [aria-current=''])\"\n\nconst scrollIntoCenter = (nav: HTMLElement, active: HTMLElement | null) => {\n if (!active) return\n const navRect = nav.getBoundingClientRect()\n const activeRect = active.getBoundingClientRect()\n nav.scrollLeft +=\n activeRect.left - navRect.left - (nav.clientWidth - activeRect.width) / 2\n}\n\n/** `<nav>` for header links (`aria-label` defaults to `Main`); scrolls with an edge fade when narrow and centers the link with a truthy `aria-current`. */\nexport const HeaderNav = forwardRef<HTMLElement, HeaderNavProps>(\n (\n {\n 'aria-label': ariaLabel = 'Main',\n className,\n onScroll,\n onFocus,\n dataTestId,\n ...rest\n },\n ref,\n ) => {\n const navRef = useRef<HTMLElement | null>(null)\n\n const setRef = useCallback(\n (node: HTMLElement | null) => {\n navRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n },\n [ref],\n )\n\n const { sync, onFocus: revealFocused } = useEdgeFade(navRef)\n\n useIsomorphicLayoutEffect(() => {\n const nav = navRef.current\n if (!nav) return\n let active = nav.querySelector<HTMLElement>(ACTIVE)\n scrollIntoCenter(nav, active)\n sync()\n if (typeof MutationObserver === 'undefined') return\n const mutations = new MutationObserver(() => {\n const next = nav.querySelector<HTMLElement>(ACTIVE)\n if (next !== active) {\n active = next\n scrollIntoCenter(nav, next)\n }\n sync()\n })\n mutations.observe(nav, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['aria-current'],\n })\n return () => mutations.disconnect()\n }, [sync])\n\n return (\n <nav\n ref={setRef}\n aria-label={ariaLabel}\n className={cn(styles.nav, className)}\n onScroll={(e) => {\n sync()\n onScroll?.(e)\n }}\n onFocus={(e) => {\n revealFocused(e)\n onFocus?.(e)\n }}\n data-testid={dataTestId?.root}\n {...rest}\n />\n )\n },\n)\n\nHeaderNav.displayName = 'HeaderNav'\n"],"names":["ACTIVE","scrollIntoCenter","nav","active","navRect","getBoundingClientRect","activeRect","scrollLeft","left","clientWidth","width","HeaderNav","forwardRef","_ref","ref","ariaLabel","className","onScroll","onFocus","dataTestId","rest","navRef","useRef","setRef","useCallback","node","current","sync","revealFocused","useEdgeFade","useIsomorphicLayoutEffect","querySelector","MutationObserver","mutations","next","observe","childList","subtree","attributes","attributeFilter","disconnect","_jsx","cn","styles","e","root","displayName"],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
const react = require('react');
|
|
6
|
+
const cn = require('classnames');
|
|
7
|
+
const Hex_module = require('./Hex.module.css.cjs');
|
|
8
|
+
const trimHex = require('./trimHex.cjs');
|
|
9
|
+
const jsxRuntime = require('react/jsx-runtime');
|
|
10
|
+
|
|
11
|
+
const Hex = /*#__PURE__*/react.forwardRef((_ref, ref) => {
|
|
12
|
+
let {
|
|
13
|
+
value,
|
|
14
|
+
symbols = 4,
|
|
15
|
+
title,
|
|
16
|
+
className,
|
|
17
|
+
...rest
|
|
18
|
+
} = _ref;
|
|
19
|
+
const text = trimHex.trimHex(value, symbols);
|
|
20
|
+
const trimmed = text !== value;
|
|
21
|
+
return /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
22
|
+
ref: ref,
|
|
23
|
+
title: (title ?? (trimmed ? value : undefined)) || undefined,
|
|
24
|
+
className: cn(trimmed ? Hex_module.root : Hex_module.full, className),
|
|
25
|
+
...rest,
|
|
26
|
+
children: trimmed ? /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
27
|
+
children: [/*#__PURE__*/jsxRuntime.jsx("span", {
|
|
28
|
+
"aria-hidden": "true",
|
|
29
|
+
className: Hex_module.overlay,
|
|
30
|
+
children: value
|
|
31
|
+
}), /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
32
|
+
className: Hex_module.text,
|
|
33
|
+
children: text
|
|
34
|
+
})]
|
|
35
|
+
}) : text
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
Hex.displayName = 'Hex';
|
|
39
|
+
|
|
40
|
+
exports.Hex = Hex;
|
|
41
|
+
//# sourceMappingURL=Hex.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Hex.cjs","sources":["../../../src/hex/Hex.tsx"],"sourcesContent":["import { forwardRef, type ComponentPropsWithoutRef } from 'react'\n\nimport cn from 'classnames'\n\nimport styles from './Hex.module.css'\nimport { trimHex } from './trimHex'\n\n// Title defaults to the full value only when trimmed; an empty title opts out.\nexport type HexProps = Omit<ComponentPropsWithoutRef<'span'>, 'children'> & {\n value: string\n symbols?: number\n}\n\nexport const Hex = forwardRef<HTMLSpanElement, HexProps>(\n ({ value, symbols = 4, title, className, ...rest }, ref) => {\n const text = trimHex(value, symbols)\n const trimmed = text !== value\n\n return (\n <span\n ref={ref}\n title={(title ?? (trimmed ? value : undefined)) || undefined}\n className={cn(trimmed ? styles.root : styles.full, className)}\n {...rest}\n >\n {trimmed ? (\n <>\n <span aria-hidden='true' className={styles.overlay}>\n {value}\n </span>\n <span className={styles.text}>{text}</span>\n </>\n ) : (\n text\n )}\n </span>\n )\n },\n)\n\nHex.displayName = 'Hex'\n"],"names":["Hex","forwardRef","_ref","ref","value","symbols","title","className","rest","text","trimHex","trimmed","_jsx","undefined","cn","styles","root","full","children","_jsxs","_Fragment","overlay","displayName"],"mappings":";;;;;;;;;;AAaO,MAAMA,GAAG,gBAAGC,gBAAU,CAC3B,CAAAC,IAAA,EAAoDC,GAAG,KAAK;EAAA,IAA3D;IAAEC,KAAK;AAAEC,IAAAA,OAAO,GAAG,CAAC;IAAEC,KAAK;IAAEC,SAAS;IAAE,GAAGC,IAAAA;AAAK,GAAC,GAAAN,IAAA,CAAA;AAChD,EAAA,MAAMO,IAAI,GAAGC,eAAO,CAACN,KAAK,EAAEC,OAAO,CAAC,CAAA;AACpC,EAAA,MAAMM,OAAO,GAAGF,IAAI,KAAKL,KAAK,CAAA;AAE9B,EAAA,oBACEQ,cAAA,CAAA,MAAA,EAAA;AACET,IAAAA,GAAG,EAAEA,GAAI;IACTG,KAAK,EAAE,CAACA,KAAK,KAAKK,OAAO,GAAGP,KAAK,GAAGS,SAAS,CAAC,KAAKA,SAAU;AAC7DN,IAAAA,SAAS,EAAEO,EAAE,CAACH,OAAO,GAAGI,UAAM,CAACC,IAAI,GAAGD,UAAM,CAACE,IAAI,EAAEV,SAAS,CAAE;AAAA,IAAA,GAC1DC,IAAI;AAAAU,IAAAA,QAAA,EAEPP,OAAO,gBACNQ,eAAA,CAAAC,mBAAA,EAAA;AAAAF,MAAAA,QAAA,gBACEN,cAAA,CAAA,MAAA,EAAA;AAAM,QAAA,aAAA,EAAY,MAAM;QAACL,SAAS,EAAEQ,UAAM,CAACM,OAAQ;AAAAH,QAAAA,QAAA,EAChDd,KAAAA;OACG,CAAC,eACPQ,cAAA,CAAA,MAAA,EAAA;QAAML,SAAS,EAAEQ,UAAM,CAACN,IAAK;AAAAS,QAAAA,QAAA,EAAET,IAAAA;AAAI,OAAO,CAAC,CAAA;AAAA,KAC3C,CAAC,GAEHA,IAAAA;AACD,GACG,CAAC,CAAA;AAEX,CACF,EAAC;AAEDT,GAAG,CAACsB,WAAW,GAAG,KAAK;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Hex.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
const ELLIPSIS = '...';
|
|
6
|
+
const trimHex = (value, symbols) => {
|
|
7
|
+
if (symbols <= 0) return value;
|
|
8
|
+
const prefix = value.startsWith('0x') ? '0x' : '';
|
|
9
|
+
const body = value.slice(prefix.length);
|
|
10
|
+
if (body.length - symbols * 2 <= ELLIPSIS.length) return value;
|
|
11
|
+
return `${prefix}${body.slice(0, symbols)}${ELLIPSIS}${body.slice(-symbols)}`;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
exports.trimHex = trimHex;
|
|
15
|
+
//# sourceMappingURL=trimHex.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trimHex.cjs","sources":["../../../src/hex/trimHex.ts"],"sourcesContent":["const ELLIPSIS = '...'\n\nexport const trimHex = (value: string, symbols: number): string => {\n if (symbols <= 0) return value\n\n const prefix = value.startsWith('0x') ? '0x' : ''\n const body = value.slice(prefix.length)\n if (body.length - symbols * 2 <= ELLIPSIS.length) return value\n\n return `${prefix}${body.slice(0, symbols)}${ELLIPSIS}${body.slice(-symbols)}`\n}\n"],"names":["ELLIPSIS","trimHex","value","symbols","prefix","startsWith","body","slice","length"],"mappings":";;;;AAAA,MAAMA,QAAQ,GAAG,KAAK,CAAA;MAETC,OAAO,GAAGA,CAACC,KAAa,EAAEC,OAAe,KAAa;AACjE,EAAA,IAAIA,OAAO,IAAI,CAAC,EAAE,OAAOD,KAAK,CAAA;EAE9B,MAAME,MAAM,GAAGF,KAAK,CAACG,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE,CAAA;EACjD,MAAMC,IAAI,GAAGJ,KAAK,CAACK,KAAK,CAACH,MAAM,CAACI,MAAM,CAAC,CAAA;AACvC,EAAA,IAAIF,IAAI,CAACE,MAAM,GAAGL,OAAO,GAAG,CAAC,IAAIH,QAAQ,CAACQ,MAAM,EAAE,OAAON,KAAK,CAAA;EAE9D,OAAO,CAAA,EAAGE,MAAM,CAAGE,EAAAA,IAAI,CAACC,KAAK,CAAC,CAAC,EAAEJ,OAAO,CAAC,CAAGH,EAAAA,QAAQ,GAAGM,IAAI,CAACC,KAAK,CAAC,CAACJ,OAAO,CAAC,CAAE,CAAA,CAAA;AAC/E;;;;"}
|
|
@@ -2,24 +2,30 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
4
|
|
|
5
|
+
const react = require('react');
|
|
5
6
|
const cn = require('classnames');
|
|
6
7
|
const Hidden_module = require('./Hidden.module.css.cjs');
|
|
7
8
|
const jsxRuntime = require('react/jsx-runtime');
|
|
8
9
|
const responsive = require('../utils/responsive.cjs');
|
|
9
10
|
|
|
10
|
-
/** CSS-only responsive visibility, safe for SSR. Wrapper is `display: contents` while visible. */
|
|
11
|
-
const Hidden = _ref => {
|
|
11
|
+
/** CSS-only responsive visibility, safe for SSR. Wrapper is `display: contents` while visible. Inside a `<p>` (Typography `body`, `description`...) children must be phrasing content too: a block child closes the paragraph in server HTML and breaks hydration. */
|
|
12
|
+
const Hidden = /*#__PURE__*/react.forwardRef((_ref, ref) => {
|
|
12
13
|
let {
|
|
14
|
+
as: Tag = 'span',
|
|
13
15
|
below,
|
|
14
16
|
above,
|
|
15
17
|
className,
|
|
18
|
+
dataTestId,
|
|
16
19
|
...rest
|
|
17
20
|
} = _ref;
|
|
18
|
-
return /*#__PURE__*/jsxRuntime.jsx(
|
|
21
|
+
return /*#__PURE__*/jsxRuntime.jsx(Tag, {
|
|
22
|
+
ref: ref,
|
|
19
23
|
className: cn(Hidden_module.root, below && Hidden_module[`below${responsive.capitalize(below)}`], above && Hidden_module[`above${responsive.capitalize(above)}`], className),
|
|
24
|
+
"data-testid": dataTestId?.root,
|
|
20
25
|
...rest
|
|
21
26
|
});
|
|
22
|
-
};
|
|
27
|
+
});
|
|
28
|
+
Hidden.displayName = 'Hidden';
|
|
23
29
|
|
|
24
30
|
exports.Hidden = Hidden;
|
|
25
31
|
//# sourceMappingURL=Hidden.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Hidden.cjs","sources":["../../../src/hidden/Hidden.tsx"],"sourcesContent":["import type
|
|
1
|
+
{"version":3,"file":"Hidden.cjs","sources":["../../../src/hidden/Hidden.tsx"],"sourcesContent":["import { forwardRef, type ElementType, type HTMLAttributes } from 'react'\n\nimport cn from 'classnames'\n\nimport { capitalize, type Breakpoint } from '../utils'\nimport styles from './Hidden.module.css'\n\nexport type HiddenDataTestId = { root?: string }\n\nexport type HiddenProps = HTMLAttributes<HTMLElement> & {\n /** Hides below this breakpoint's width. */\n below?: Breakpoint\n /** Hides at this breakpoint's width and above. */\n above?: Breakpoint\n /** Wrapper tag; `span` is valid inside text, use `div` around block content. */\n as?: 'span' | 'div'\n dataTestId?: HiddenDataTestId\n}\n\n/** CSS-only responsive visibility, safe for SSR. Wrapper is `display: contents` while visible. Inside a `<p>` (Typography `body`, `description`...) children must be phrasing content too: a block child closes the paragraph in server HTML and breaks hydration. */\nexport const Hidden = forwardRef<HTMLElement, HiddenProps>(\n (\n {\n as: Tag = 'span' as ElementType,\n below,\n above,\n className,\n dataTestId,\n ...rest\n },\n ref,\n ) => (\n <Tag\n ref={ref}\n className={cn(\n styles.root,\n below && styles[`below${capitalize(below)}`],\n above && styles[`above${capitalize(above)}`],\n className,\n )}\n data-testid={dataTestId?.root}\n {...rest}\n />\n ),\n)\n\nHidden.displayName = 'Hidden'\n"],"names":["Hidden","forwardRef","_ref","ref","as","Tag","below","above","className","dataTestId","rest","_jsx","cn","styles","root","capitalize","displayName"],"mappings":";;;;;;;;;;AAmBA;AACO,MAAMA,MAAM,gBAAGC,gBAAU,CAC9B,CAAAC,IAAA,EASEC,GAAG,KAAA;EAAA,IARH;IACEC,EAAE,EAAEC,GAAG,GAAG,MAAqB;IAC/BC,KAAK;IACLC,KAAK;IACLC,SAAS;IACTC,UAAU;IACV,GAAGC,IAAAA;AACL,GAAC,GAAAR,IAAA,CAAA;EAAA,oBAGDS,cAAA,CAACN,GAAG,EAAA;AACFF,IAAAA,GAAG,EAAEA,GAAI;AACTK,IAAAA,SAAS,EAAEI,EAAE,CACXC,aAAM,CAACC,IAAI,EACXR,KAAK,IAAIO,aAAM,CAAC,CAAQE,KAAAA,EAAAA,qBAAU,CAACT,KAAK,CAAC,CAAE,CAAA,CAAC,EAC5CC,KAAK,IAAIM,aAAM,CAAC,CAAQE,KAAAA,EAAAA,qBAAU,CAACR,KAAK,CAAC,CAAA,CAAE,CAAC,EAC5CC,SACF,CAAE;IACF,aAAaC,EAAAA,UAAU,EAAEK,IAAK;IAAA,GAC1BJ,IAAAA;AAAI,GACT,CAAC,CAAA;AAAA,CAEN,EAAC;AAEDV,MAAM,CAACgB,WAAW,GAAG,QAAQ;;;;"}
|
|
@@ -8,10 +8,7 @@ const jsxRuntime = require('react/jsx-runtime');
|
|
|
8
8
|
|
|
9
9
|
const THEME_ATTR = 'data-lido-theme';
|
|
10
10
|
|
|
11
|
-
/**
|
|
12
|
-
* Renders `null` until mounted so SSR and first client render match.
|
|
13
|
-
* Without `container`, mirrors the nearest `data-lido-theme` scope onto the portal root so tokens still resolve.
|
|
14
|
-
*/
|
|
11
|
+
/** SSR-safe portal into `container` or `document.body`; without `container` a marker span (dropped once resolved) finds the nearest `data-lido-theme` scope to mirror onto the portal root. */
|
|
15
12
|
const Portal = _ref => {
|
|
16
13
|
let {
|
|
17
14
|
children,
|
|
@@ -19,12 +16,19 @@ const Portal = _ref => {
|
|
|
19
16
|
} = _ref;
|
|
20
17
|
const markerRef = react.useRef(null);
|
|
21
18
|
const [target, setTarget] = react.useState(null);
|
|
19
|
+
const [tick, retry] = react.useReducer(n => n + 1, 0);
|
|
22
20
|
react.useEffect(() => {
|
|
23
21
|
if (container) {
|
|
24
22
|
setTarget(container);
|
|
25
23
|
return;
|
|
26
24
|
}
|
|
27
|
-
|
|
25
|
+
// Marker is gone after a container -> undefined switch; clear target so it re-renders, then retry.
|
|
26
|
+
if (!markerRef.current) {
|
|
27
|
+
setTarget(null);
|
|
28
|
+
retry();
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const scope = markerRef.current.closest(`[${THEME_ATTR}]`);
|
|
28
32
|
if (!scope || scope === document.documentElement) {
|
|
29
33
|
setTarget(document.body);
|
|
30
34
|
return;
|
|
@@ -44,12 +48,11 @@ const Portal = _ref => {
|
|
|
44
48
|
observer.disconnect();
|
|
45
49
|
root.remove();
|
|
46
50
|
};
|
|
47
|
-
}, [container]);
|
|
48
|
-
return /*#__PURE__*/
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}), target ? /*#__PURE__*/reactDom.createPortal(children, target) : null]
|
|
51
|
+
}, [container, tick]);
|
|
52
|
+
if (target) return /*#__PURE__*/reactDom.createPortal(children, target);
|
|
53
|
+
return container ? null : /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
54
|
+
ref: markerRef,
|
|
55
|
+
hidden: true
|
|
53
56
|
});
|
|
54
57
|
};
|
|
55
58
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Portal.cjs","sources":["../../../src/hooks/Portal.tsx"],"sourcesContent":["import { useEffect, useRef, useState, type ReactNode } from 'react'\nimport { createPortal } from 'react-dom'\n\nexport type PortalProps = {\n children?: ReactNode\n /** Defaults to `document.body`. */\n container?: Element | null\n}\n\nconst THEME_ATTR = 'data-lido-theme'\n\n
|
|
1
|
+
{"version":3,"file":"Portal.cjs","sources":["../../../src/hooks/Portal.tsx"],"sourcesContent":["import { useEffect, useReducer, useRef, useState, type ReactNode } from 'react'\nimport { createPortal } from 'react-dom'\n\nexport type PortalProps = {\n children?: ReactNode\n /** Defaults to `document.body`. */\n container?: Element | null\n}\n\nconst THEME_ATTR = 'data-lido-theme'\n\n/** SSR-safe portal into `container` or `document.body`; without `container` a marker span (dropped once resolved) finds the nearest `data-lido-theme` scope to mirror onto the portal root. */\nexport const Portal = ({ children, container }: PortalProps) => {\n const markerRef = useRef<HTMLSpanElement>(null)\n const [target, setTarget] = useState<Element | null>(null)\n const [tick, retry] = useReducer((n: number) => n + 1, 0)\n\n useEffect(() => {\n if (container) {\n setTarget(container)\n return\n }\n // Marker is gone after a container -> undefined switch; clear target so it re-renders, then retry.\n if (!markerRef.current) {\n setTarget(null)\n retry()\n return\n }\n const scope = markerRef.current.closest(`[${THEME_ATTR}]`)\n if (!scope || scope === document.documentElement) {\n setTarget(document.body)\n return\n }\n\n const root = document.createElement('div')\n root.style.display = 'contents'\n const sync = () =>\n root.setAttribute(THEME_ATTR, scope.getAttribute(THEME_ATTR) ?? '')\n sync()\n document.body.appendChild(root)\n const observer = new MutationObserver(sync)\n observer.observe(scope, { attributes: true, attributeFilter: [THEME_ATTR] })\n setTarget(root)\n return () => {\n observer.disconnect()\n root.remove()\n }\n }, [container, tick])\n\n if (target) return createPortal(children, target)\n return container ? null : <span ref={markerRef} hidden />\n}\n"],"names":["THEME_ATTR","Portal","_ref","children","container","markerRef","useRef","target","setTarget","useState","tick","retry","useReducer","n","useEffect","current","scope","closest","document","documentElement","body","root","createElement","style","display","sync","setAttribute","getAttribute","appendChild","observer","MutationObserver","observe","attributes","attributeFilter","disconnect","remove","createPortal","_jsx","ref","hidden"],"mappings":";;;;;;;;AASA,MAAMA,UAAU,GAAG,iBAAiB,CAAA;;AAEpC;AACaC,MAAAA,MAAM,GAAGC,IAAA,IAA0C;EAAA,IAAzC;IAAEC,QAAQ;AAAEC,IAAAA,SAAAA;AAAuB,GAAC,GAAAF,IAAA,CAAA;AACzD,EAAA,MAAMG,SAAS,GAAGC,YAAM,CAAkB,IAAI,CAAC,CAAA;EAC/C,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGC,cAAQ,CAAiB,IAAI,CAAC,CAAA;AAC1D,EAAA,MAAM,CAACC,IAAI,EAAEC,KAAK,CAAC,GAAGC,gBAAU,CAAEC,CAAS,IAAKA,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;AAEzDC,EAAAA,eAAS,CAAC,MAAM;AACd,IAAA,IAAIV,SAAS,EAAE;MACbI,SAAS,CAACJ,SAAS,CAAC,CAAA;AACpB,MAAA,OAAA;AACF,KAAA;AACA;AACA,IAAA,IAAI,CAACC,SAAS,CAACU,OAAO,EAAE;MACtBP,SAAS,CAAC,IAAI,CAAC,CAAA;AACfG,MAAAA,KAAK,EAAE,CAAA;AACP,MAAA,OAAA;AACF,KAAA;IACA,MAAMK,KAAK,GAAGX,SAAS,CAACU,OAAO,CAACE,OAAO,CAAC,CAAA,CAAA,EAAIjB,UAAU,CAAA,CAAA,CAAG,CAAC,CAAA;IAC1D,IAAI,CAACgB,KAAK,IAAIA,KAAK,KAAKE,QAAQ,CAACC,eAAe,EAAE;AAChDX,MAAAA,SAAS,CAACU,QAAQ,CAACE,IAAI,CAAC,CAAA;AACxB,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,MAAMC,IAAI,GAAGH,QAAQ,CAACI,aAAa,CAAC,KAAK,CAAC,CAAA;AAC1CD,IAAAA,IAAI,CAACE,KAAK,CAACC,OAAO,GAAG,UAAU,CAAA;AAC/B,IAAA,MAAMC,IAAI,GAAGA,MACXJ,IAAI,CAACK,YAAY,CAAC1B,UAAU,EAAEgB,KAAK,CAACW,YAAY,CAAC3B,UAAU,CAAC,IAAI,EAAE,CAAC,CAAA;AACrEyB,IAAAA,IAAI,EAAE,CAAA;AACNP,IAAAA,QAAQ,CAACE,IAAI,CAACQ,WAAW,CAACP,IAAI,CAAC,CAAA;AAC/B,IAAA,MAAMQ,QAAQ,GAAG,IAAIC,gBAAgB,CAACL,IAAI,CAAC,CAAA;AAC3CI,IAAAA,QAAQ,CAACE,OAAO,CAACf,KAAK,EAAE;AAAEgB,MAAAA,UAAU,EAAE,IAAI;MAAEC,eAAe,EAAE,CAACjC,UAAU,CAAA;AAAE,KAAC,CAAC,CAAA;IAC5EQ,SAAS,CAACa,IAAI,CAAC,CAAA;AACf,IAAA,OAAO,MAAM;MACXQ,QAAQ,CAACK,UAAU,EAAE,CAAA;MACrBb,IAAI,CAACc,MAAM,EAAE,CAAA;KACd,CAAA;AACH,GAAC,EAAE,CAAC/B,SAAS,EAAEM,IAAI,CAAC,CAAC,CAAA;EAErB,IAAIH,MAAM,EAAE,oBAAO6B,qBAAY,CAACjC,QAAQ,EAAEI,MAAM,CAAC,CAAA;AACjD,EAAA,OAAOH,SAAS,GAAG,IAAI,gBAAGiC,cAAA,CAAA,MAAA,EAAA;AAAMC,IAAAA,GAAG,EAAEjC,SAAU;IAACkC,MAAM,EAAA,IAAA;AAAA,GAAE,CAAC,CAAA;AAC3D;;;;"}
|
|
@@ -4,46 +4,82 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
4
4
|
|
|
5
5
|
const react = require('react');
|
|
6
6
|
|
|
7
|
+
const SCROLLBAR_VAR = '--lido-app-ui-scrollbar-width';
|
|
8
|
+
|
|
7
9
|
// Ref-counted so stacked overlays only restore on the last unlock.
|
|
8
10
|
let lockCount = 0;
|
|
11
|
+
const AXES = ['overflow-x', 'overflow-y'];
|
|
9
12
|
let saved = {
|
|
10
|
-
|
|
13
|
+
scroller: null,
|
|
14
|
+
axes: [],
|
|
11
15
|
paddingRight: ''
|
|
12
16
|
};
|
|
13
17
|
const lock = () => {
|
|
14
18
|
if (lockCount === 0) {
|
|
15
19
|
const {
|
|
16
20
|
body,
|
|
17
|
-
documentElement
|
|
21
|
+
documentElement: html
|
|
18
22
|
} = document;
|
|
23
|
+
// Locking <html> when body is the scroller would detach body's overflow propagation and break sticky headers.
|
|
24
|
+
const scroller = ['auto', 'scroll'].includes(getComputedStyle(html).overflowY) ? html : body;
|
|
19
25
|
saved = {
|
|
20
|
-
|
|
26
|
+
scroller,
|
|
27
|
+
axes: AXES.map(name => ({
|
|
28
|
+
name,
|
|
29
|
+
value: scroller.style.getPropertyValue(name),
|
|
30
|
+
priority: scroller.style.getPropertyPriority(name)
|
|
31
|
+
})),
|
|
21
32
|
paddingRight: body.style.paddingRight
|
|
22
33
|
};
|
|
23
|
-
const
|
|
24
|
-
|
|
34
|
+
const before = body.getBoundingClientRect().width;
|
|
35
|
+
// body's rect updates synchronously after the lock, html.clientWidth doesn't.
|
|
36
|
+
scroller.style.overflow = 'hidden';
|
|
37
|
+
const gained = body.getBoundingClientRect().width - before;
|
|
38
|
+
if (gained > 0) {
|
|
25
39
|
const current = parseFloat(getComputedStyle(body).paddingRight) || 0;
|
|
26
|
-
body.style.paddingRight = `${current +
|
|
40
|
+
body.style.paddingRight = `${current + gained}px`;
|
|
41
|
+
html.style.setProperty(SCROLLBAR_VAR, `${gained}px`);
|
|
27
42
|
}
|
|
28
|
-
body.style.overflow = 'hidden';
|
|
29
43
|
}
|
|
30
44
|
lockCount += 1;
|
|
31
45
|
};
|
|
32
46
|
const unlock = () => {
|
|
33
47
|
lockCount -= 1;
|
|
34
48
|
if (lockCount === 0) {
|
|
35
|
-
|
|
36
|
-
|
|
49
|
+
const {
|
|
50
|
+
body,
|
|
51
|
+
documentElement: html
|
|
52
|
+
} = document;
|
|
53
|
+
const {
|
|
54
|
+
scroller,
|
|
55
|
+
axes
|
|
56
|
+
} = saved;
|
|
57
|
+
if (scroller) {
|
|
58
|
+
scroller.style.removeProperty('overflow');
|
|
59
|
+
axes.forEach(_ref => {
|
|
60
|
+
let {
|
|
61
|
+
name,
|
|
62
|
+
value,
|
|
63
|
+
priority
|
|
64
|
+
} = _ref;
|
|
65
|
+
if (value) scroller.style.setProperty(name, value, priority);else scroller.style.removeProperty(name);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
body.style.paddingRight = saved.paddingRight;
|
|
69
|
+
html.style.removeProperty(SCROLLBAR_VAR);
|
|
37
70
|
}
|
|
38
71
|
};
|
|
39
72
|
|
|
40
|
-
/** Locks
|
|
41
|
-
const useBodyScrollLock =
|
|
73
|
+
/** Locks page scroll while `enabled`, compensating the scrollbar width and exposing it as `--lido-app-ui-scrollbar-width`. */
|
|
74
|
+
const useBodyScrollLock = function () {
|
|
75
|
+
let {
|
|
76
|
+
enabled = true
|
|
77
|
+
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
42
78
|
react.useEffect(() => {
|
|
43
|
-
if (!
|
|
79
|
+
if (!enabled) return;
|
|
44
80
|
lock();
|
|
45
81
|
return unlock;
|
|
46
|
-
}, [
|
|
82
|
+
}, [enabled]);
|
|
47
83
|
};
|
|
48
84
|
|
|
49
85
|
exports.useBodyScrollLock = useBodyScrollLock;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBodyScrollLock.cjs","sources":["../../../src/hooks/useBodyScrollLock.ts"],"sourcesContent":["import { useEffect } from 'react'\n\n// Ref-counted so stacked overlays only restore on the last unlock.\nlet lockCount = 0\nlet saved = {
|
|
1
|
+
{"version":3,"file":"useBodyScrollLock.cjs","sources":["../../../src/hooks/useBodyScrollLock.ts"],"sourcesContent":["import { useEffect } from 'react'\n\nconst SCROLLBAR_VAR = '--lido-app-ui-scrollbar-width'\n\n// Ref-counted so stacked overlays only restore on the last unlock.\nlet lockCount = 0\nconst AXES = ['overflow-x', 'overflow-y'] as const\n\ntype SavedAxis = { name: string; value: string; priority: string }\n\nlet saved = {\n scroller: null as HTMLElement | null,\n axes: [] as SavedAxis[],\n paddingRight: '',\n}\n\nconst lock = () => {\n if (lockCount === 0) {\n const { body, documentElement: html } = document\n // Locking <html> when body is the scroller would detach body's overflow propagation and break sticky headers.\n const scroller = ['auto', 'scroll'].includes(\n getComputedStyle(html).overflowY,\n )\n ? html\n : body\n saved = {\n scroller,\n axes: AXES.map((name) => ({\n name,\n value: scroller.style.getPropertyValue(name),\n priority: scroller.style.getPropertyPriority(name),\n })),\n paddingRight: body.style.paddingRight,\n }\n const before = body.getBoundingClientRect().width\n // body's rect updates synchronously after the lock, html.clientWidth doesn't.\n scroller.style.overflow = 'hidden'\n const gained = body.getBoundingClientRect().width - before\n if (gained > 0) {\n const current = parseFloat(getComputedStyle(body).paddingRight) || 0\n body.style.paddingRight = `${current + gained}px`\n html.style.setProperty(SCROLLBAR_VAR, `${gained}px`)\n }\n }\n lockCount += 1\n}\n\nconst unlock = () => {\n lockCount -= 1\n if (lockCount === 0) {\n const { body, documentElement: html } = document\n const { scroller, axes } = saved\n if (scroller) {\n scroller.style.removeProperty('overflow')\n axes.forEach(({ name, value, priority }) => {\n if (value) scroller.style.setProperty(name, value, priority)\n else scroller.style.removeProperty(name)\n })\n }\n body.style.paddingRight = saved.paddingRight\n html.style.removeProperty(SCROLLBAR_VAR)\n }\n}\n\n/** Locks page scroll while `enabled`, compensating the scrollbar width and exposing it as `--lido-app-ui-scrollbar-width`. */\nexport const useBodyScrollLock = ({\n enabled = true,\n}: { enabled?: boolean } = {}) => {\n useEffect(() => {\n if (!enabled) return\n lock()\n return unlock\n }, [enabled])\n}\n"],"names":["SCROLLBAR_VAR","lockCount","AXES","saved","scroller","axes","paddingRight","lock","body","documentElement","html","document","includes","getComputedStyle","overflowY","map","name","value","style","getPropertyValue","priority","getPropertyPriority","before","getBoundingClientRect","width","overflow","gained","current","parseFloat","setProperty","unlock","removeProperty","forEach","_ref","useBodyScrollLock","enabled","arguments","length","undefined","useEffect"],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
const react = require('react');
|
|
6
|
+
const useIsomorphicLayoutEffect = require('./useIsomorphicLayoutEffect.cjs');
|
|
7
|
+
|
|
8
|
+
const syncFade = el => {
|
|
9
|
+
el.toggleAttribute('data-fade-start', el.scrollLeft > 0);
|
|
10
|
+
el.toggleAttribute('data-fade-end', el.scrollLeft < el.scrollWidth - el.clientWidth - 1);
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
/** Keeps `data-fade-*` in sync, maps vertical wheel to horizontal scroll, reveals keyboard-focused items. */
|
|
14
|
+
const useEdgeFade = ref => {
|
|
15
|
+
const sync = react.useCallback(() => {
|
|
16
|
+
if (ref.current) syncFade(ref.current);
|
|
17
|
+
}, [ref]);
|
|
18
|
+
useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
|
|
19
|
+
const el = ref.current;
|
|
20
|
+
if (!el) return;
|
|
21
|
+
syncFade(el);
|
|
22
|
+
if (typeof ResizeObserver === 'undefined') return;
|
|
23
|
+
const observer = new ResizeObserver(() => syncFade(el));
|
|
24
|
+
observer.observe(el);
|
|
25
|
+
return () => observer.disconnect();
|
|
26
|
+
}, [ref]);
|
|
27
|
+
react.useEffect(() => {
|
|
28
|
+
const el = ref.current;
|
|
29
|
+
if (!el) return;
|
|
30
|
+
const onWheel = e => {
|
|
31
|
+
if (e.ctrlKey || e.metaKey) return;
|
|
32
|
+
if (Math.abs(e.deltaY) <= Math.abs(e.deltaX)) return;
|
|
33
|
+
if (el.scrollWidth <= el.clientWidth) return;
|
|
34
|
+
const before = el.scrollLeft;
|
|
35
|
+
el.scrollLeft += e.deltaMode === 1 ? e.deltaY * 16 : e.deltaY;
|
|
36
|
+
if (el.scrollLeft !== before) e.preventDefault();
|
|
37
|
+
};
|
|
38
|
+
el.addEventListener('wheel', onWheel, {
|
|
39
|
+
passive: false
|
|
40
|
+
});
|
|
41
|
+
return () => el.removeEventListener('wheel', onWheel);
|
|
42
|
+
}, [ref]);
|
|
43
|
+
|
|
44
|
+
// keyboard only: scrolling on mouse focus would retarget the click away from the link
|
|
45
|
+
const onFocus = react.useCallback(e => {
|
|
46
|
+
const target = e.target;
|
|
47
|
+
if (target === e.currentTarget || !target.matches(':focus-visible')) return;
|
|
48
|
+
target.scrollIntoView?.({
|
|
49
|
+
block: 'nearest',
|
|
50
|
+
inline: 'nearest'
|
|
51
|
+
});
|
|
52
|
+
}, []);
|
|
53
|
+
return {
|
|
54
|
+
sync,
|
|
55
|
+
onFocus
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
exports.useEdgeFade = useEdgeFade;
|
|
60
|
+
//# sourceMappingURL=useEdgeFade.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useEdgeFade.cjs","sources":["../../../src/hooks/useEdgeFade.ts"],"sourcesContent":["import { useCallback, useEffect } from 'react'\nimport type { FocusEvent, RefObject } from 'react'\n\nimport { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect'\n\nconst syncFade = (el: HTMLElement) => {\n el.toggleAttribute('data-fade-start', el.scrollLeft > 0)\n el.toggleAttribute(\n 'data-fade-end',\n el.scrollLeft < el.scrollWidth - el.clientWidth - 1,\n )\n}\n\n/** Keeps `data-fade-*` in sync, maps vertical wheel to horizontal scroll, reveals keyboard-focused items. */\nexport const useEdgeFade = (ref: RefObject<HTMLElement>) => {\n const sync = useCallback(() => {\n if (ref.current) syncFade(ref.current)\n }, [ref])\n\n useIsomorphicLayoutEffect(() => {\n const el = ref.current\n if (!el) return\n syncFade(el)\n if (typeof ResizeObserver === 'undefined') return\n const observer = new ResizeObserver(() => syncFade(el))\n observer.observe(el)\n return () => observer.disconnect()\n }, [ref])\n\n useEffect(() => {\n const el = ref.current\n if (!el) return\n const onWheel = (e: WheelEvent) => {\n if (e.ctrlKey || e.metaKey) return\n if (Math.abs(e.deltaY) <= Math.abs(e.deltaX)) return\n if (el.scrollWidth <= el.clientWidth) return\n const before = el.scrollLeft\n el.scrollLeft += e.deltaMode === 1 ? e.deltaY * 16 : e.deltaY\n if (el.scrollLeft !== before) e.preventDefault()\n }\n el.addEventListener('wheel', onWheel, { passive: false })\n return () => el.removeEventListener('wheel', onWheel)\n }, [ref])\n\n // keyboard only: scrolling on mouse focus would retarget the click away from the link\n const onFocus = useCallback((e: FocusEvent<HTMLElement>) => {\n const target = e.target as HTMLElement\n if (target === e.currentTarget || !target.matches(':focus-visible')) return\n target.scrollIntoView?.({ block: 'nearest', inline: 'nearest' })\n }, [])\n\n return { sync, onFocus }\n}\n"],"names":["syncFade","el","toggleAttribute","scrollLeft","scrollWidth","clientWidth","useEdgeFade","ref","sync","useCallback","current","useIsomorphicLayoutEffect","ResizeObserver","observer","observe","disconnect","useEffect","onWheel","e","ctrlKey","metaKey","Math","abs","deltaY","deltaX","before","deltaMode","preventDefault","addEventListener","passive","removeEventListener","onFocus","target","currentTarget","matches","scrollIntoView","block","inline"],"mappings":";;;;;;;AAKA,MAAMA,QAAQ,GAAIC,EAAe,IAAK;EACpCA,EAAE,CAACC,eAAe,CAAC,iBAAiB,EAAED,EAAE,CAACE,UAAU,GAAG,CAAC,CAAC,CAAA;AACxDF,EAAAA,EAAE,CAACC,eAAe,CAChB,eAAe,EACfD,EAAE,CAACE,UAAU,GAAGF,EAAE,CAACG,WAAW,GAAGH,EAAE,CAACI,WAAW,GAAG,CACpD,CAAC,CAAA;AACH,CAAC,CAAA;;AAED;AACaC,MAAAA,WAAW,GAAIC,GAA2B,IAAK;AAC1D,EAAA,MAAMC,IAAI,GAAGC,iBAAW,CAAC,MAAM;IAC7B,IAAIF,GAAG,CAACG,OAAO,EAAEV,QAAQ,CAACO,GAAG,CAACG,OAAO,CAAC,CAAA;AACxC,GAAC,EAAE,CAACH,GAAG,CAAC,CAAC,CAAA;AAETI,EAAAA,mDAAyB,CAAC,MAAM;AAC9B,IAAA,MAAMV,EAAE,GAAGM,GAAG,CAACG,OAAO,CAAA;IACtB,IAAI,CAACT,EAAE,EAAE,OAAA;IACTD,QAAQ,CAACC,EAAE,CAAC,CAAA;AACZ,IAAA,IAAI,OAAOW,cAAc,KAAK,WAAW,EAAE,OAAA;IAC3C,MAAMC,QAAQ,GAAG,IAAID,cAAc,CAAC,MAAMZ,QAAQ,CAACC,EAAE,CAAC,CAAC,CAAA;AACvDY,IAAAA,QAAQ,CAACC,OAAO,CAACb,EAAE,CAAC,CAAA;AACpB,IAAA,OAAO,MAAMY,QAAQ,CAACE,UAAU,EAAE,CAAA;AACpC,GAAC,EAAE,CAACR,GAAG,CAAC,CAAC,CAAA;AAETS,EAAAA,eAAS,CAAC,MAAM;AACd,IAAA,MAAMf,EAAE,GAAGM,GAAG,CAACG,OAAO,CAAA;IACtB,IAAI,CAACT,EAAE,EAAE,OAAA;IACT,MAAMgB,OAAO,GAAIC,CAAa,IAAK;AACjC,MAAA,IAAIA,CAAC,CAACC,OAAO,IAAID,CAAC,CAACE,OAAO,EAAE,OAAA;AAC5B,MAAA,IAAIC,IAAI,CAACC,GAAG,CAACJ,CAAC,CAACK,MAAM,CAAC,IAAIF,IAAI,CAACC,GAAG,CAACJ,CAAC,CAACM,MAAM,CAAC,EAAE,OAAA;AAC9C,MAAA,IAAIvB,EAAE,CAACG,WAAW,IAAIH,EAAE,CAACI,WAAW,EAAE,OAAA;AACtC,MAAA,MAAMoB,MAAM,GAAGxB,EAAE,CAACE,UAAU,CAAA;AAC5BF,MAAAA,EAAE,CAACE,UAAU,IAAIe,CAAC,CAACQ,SAAS,KAAK,CAAC,GAAGR,CAAC,CAACK,MAAM,GAAG,EAAE,GAAGL,CAAC,CAACK,MAAM,CAAA;MAC7D,IAAItB,EAAE,CAACE,UAAU,KAAKsB,MAAM,EAAEP,CAAC,CAACS,cAAc,EAAE,CAAA;KACjD,CAAA;AACD1B,IAAAA,EAAE,CAAC2B,gBAAgB,CAAC,OAAO,EAAEX,OAAO,EAAE;AAAEY,MAAAA,OAAO,EAAE,KAAA;AAAM,KAAC,CAAC,CAAA;IACzD,OAAO,MAAM5B,EAAE,CAAC6B,mBAAmB,CAAC,OAAO,EAAEb,OAAO,CAAC,CAAA;AACvD,GAAC,EAAE,CAACV,GAAG,CAAC,CAAC,CAAA;;AAET;AACA,EAAA,MAAMwB,OAAO,GAAGtB,iBAAW,CAAES,CAA0B,IAAK;AAC1D,IAAA,MAAMc,MAAM,GAAGd,CAAC,CAACc,MAAqB,CAAA;AACtC,IAAA,IAAIA,MAAM,KAAKd,CAAC,CAACe,aAAa,IAAI,CAACD,MAAM,CAACE,OAAO,CAAC,gBAAgB,CAAC,EAAE,OAAA;IACrEF,MAAM,CAACG,cAAc,GAAG;AAAEC,MAAAA,KAAK,EAAE,SAAS;AAAEC,MAAAA,MAAM,EAAE,SAAA;AAAU,KAAC,CAAC,CAAA;GACjE,EAAE,EAAE,CAAC,CAAA;EAEN,OAAO;IAAE7B,IAAI;AAAEuB,IAAAA,OAAAA;GAAS,CAAA;AAC1B;;;;"}
|
|
@@ -7,18 +7,21 @@ const overlayStack = require('./overlayStack.cjs');
|
|
|
7
7
|
|
|
8
8
|
const listenEscapeLayer = overlayStack.createLayerStack('keydown');
|
|
9
9
|
|
|
10
|
-
/** Calls `handler` on Escape while `
|
|
11
|
-
const useEscape = (
|
|
10
|
+
/** Calls `handler` on Escape while `enabled`; with nested overlays only the newest one handles it. */
|
|
11
|
+
const useEscape = function (handler) {
|
|
12
|
+
let {
|
|
13
|
+
enabled = true
|
|
14
|
+
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
12
15
|
const handlerRef = react.useRef(handler);
|
|
13
16
|
handlerRef.current = handler;
|
|
14
17
|
react.useEffect(() => {
|
|
15
|
-
if (!
|
|
18
|
+
if (!enabled) return;
|
|
16
19
|
return listenEscapeLayer(event => {
|
|
17
|
-
if (event.key !== 'Escape' || event.defaultPrevented) return;
|
|
20
|
+
if (event.key !== 'Escape' || event.defaultPrevented || event.isComposing || event.keyCode === 229) return;
|
|
18
21
|
event.preventDefault();
|
|
19
22
|
handlerRef.current(event);
|
|
20
23
|
});
|
|
21
|
-
}, [
|
|
24
|
+
}, [enabled]);
|
|
22
25
|
};
|
|
23
26
|
|
|
24
27
|
exports.useEscape = useEscape;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEscape.cjs","sources":["../../../src/hooks/useEscape.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\n\nimport { createLayerStack } from './overlayStack'\n\nconst listenEscapeLayer = createLayerStack('keydown')\n\n/** Calls `handler` on Escape while `
|
|
1
|
+
{"version":3,"file":"useEscape.cjs","sources":["../../../src/hooks/useEscape.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\n\nimport { createLayerStack } from './overlayStack'\n\nconst listenEscapeLayer = createLayerStack('keydown')\n\n/** Calls `handler` on Escape while `enabled`; with nested overlays only the newest one handles it. */\nexport const useEscape = (\n handler: (event: KeyboardEvent) => void,\n { enabled = true }: { enabled?: boolean } = {},\n) => {\n const handlerRef = useRef(handler)\n handlerRef.current = handler\n\n useEffect(() => {\n if (!enabled) return\n\n return listenEscapeLayer((event) => {\n if (\n event.key !== 'Escape' ||\n event.defaultPrevented ||\n event.isComposing ||\n event.keyCode === 229\n )\n return\n event.preventDefault()\n handlerRef.current(event)\n })\n }, [enabled])\n}\n"],"names":["listenEscapeLayer","createLayerStack","useEscape","handler","enabled","arguments","length","undefined","handlerRef","useRef","current","useEffect","event","key","defaultPrevented","isComposing","keyCode","preventDefault"],"mappings":";;;;;;;AAIA,MAAMA,iBAAiB,GAAGC,6BAAgB,CAAC,SAAS,CAAC,CAAA;;AAErD;MACaC,SAAS,GAAG,UACvBC,OAAuC,EAEpC;EAAA,IADH;AAAEC,IAAAA,OAAO,GAAG,IAAA;AAA4B,GAAC,GAAAC,SAAA,CAAAC,MAAA,GAAAD,CAAAA,IAAAA,SAAA,CAAAE,CAAAA,CAAAA,KAAAA,SAAA,GAAAF,SAAA,CAAG,CAAA,CAAA,GAAA,EAAE,CAAA;AAE9C,EAAA,MAAMG,UAAU,GAAGC,YAAM,CAACN,OAAO,CAAC,CAAA;EAClCK,UAAU,CAACE,OAAO,GAAGP,OAAO,CAAA;AAE5BQ,EAAAA,eAAS,CAAC,MAAM;IACd,IAAI,CAACP,OAAO,EAAE,OAAA;IAEd,OAAOJ,iBAAiB,CAAEY,KAAK,IAAK;AAClC,MAAA,IACEA,KAAK,CAACC,GAAG,KAAK,QAAQ,IACtBD,KAAK,CAACE,gBAAgB,IACtBF,KAAK,CAACG,WAAW,IACjBH,KAAK,CAACI,OAAO,KAAK,GAAG,EAErB,OAAA;MACFJ,KAAK,CAACK,cAAc,EAAE,CAAA;AACtBT,MAAAA,UAAU,CAACE,OAAO,CAACE,KAAK,CAAC,CAAA;AAC3B,KAAC,CAAC,CAAA;AACJ,GAAC,EAAE,CAACR,OAAO,CAAC,CAAC,CAAA;AACf;;;;"}
|