@lidofinance/lido-app-ui 1.8.0 → 1.10.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 +30 -1
- package/dist/README.md +30 -1
- package/dist/cjs/breadcrumbs/Breadcrumbs.cjs +92 -0
- package/dist/cjs/breadcrumbs/Breadcrumbs.cjs.map +1 -0
- package/dist/cjs/breadcrumbs/Breadcrumbs.module.css.cjs +6 -0
- package/dist/cjs/breadcrumbs/Breadcrumbs.module.css.cjs.map +1 -0
- package/dist/cjs/button/Button.cjs +11 -3
- package/dist/cjs/button/Button.cjs.map +1 -1
- package/dist/cjs/counter/Counter.module.css.cjs +1 -1
- package/dist/cjs/counter/CounterSlot.cjs +22 -0
- package/dist/cjs/counter/CounterSlot.cjs.map +1 -0
- package/dist/cjs/counter/CounterSlot.module.css.cjs +6 -0
- package/dist/cjs/counter/CounterSlot.module.css.cjs.map +1 -0
- package/dist/cjs/disclaimer/Disclaimer.cjs +33 -0
- package/dist/cjs/disclaimer/Disclaimer.cjs.map +1 -0
- package/dist/cjs/disclaimer/Disclaimer.module.css.cjs +6 -0
- package/dist/cjs/disclaimer/Disclaimer.module.css.cjs.map +1 -0
- package/dist/cjs/divider/Divider.cjs +26 -0
- package/dist/cjs/divider/Divider.cjs.map +1 -0
- package/dist/cjs/divider/Divider.module.css.cjs +6 -0
- package/dist/cjs/divider/Divider.module.css.cjs.map +1 -0
- package/dist/cjs/error-page/ErrorPage.cjs +64 -0
- package/dist/cjs/error-page/ErrorPage.cjs.map +1 -0
- package/dist/cjs/error-page/ErrorPage.module.css.cjs +6 -0
- package/dist/cjs/error-page/ErrorPage.module.css.cjs.map +1 -0
- package/dist/cjs/footer/Footer.cjs +30 -0
- package/dist/cjs/footer/Footer.cjs.map +1 -0
- package/dist/cjs/footer/Footer.module.css.cjs +6 -0
- package/dist/cjs/footer/Footer.module.css.cjs.map +1 -0
- package/dist/cjs/grid/Grid.cjs +47 -0
- package/dist/cjs/grid/Grid.cjs.map +1 -0
- package/dist/cjs/grid/Grid.module.css.cjs +6 -0
- package/dist/cjs/grid/Grid.module.css.cjs.map +1 -0
- package/dist/cjs/grid/GridItem.cjs +39 -0
- package/dist/cjs/grid/GridItem.cjs.map +1 -0
- package/dist/cjs/grid/GridItem.module.css.cjs +6 -0
- package/dist/cjs/grid/GridItem.module.css.cjs.map +1 -0
- package/dist/cjs/header/Header.cjs +31 -0
- package/dist/cjs/header/Header.cjs.map +1 -0
- package/dist/cjs/header/Header.module.css.cjs +6 -0
- package/dist/cjs/header/Header.module.css.cjs.map +1 -0
- package/dist/cjs/header/HeaderNav.cjs +69 -0
- package/dist/cjs/header/HeaderNav.cjs.map +1 -0
- package/dist/cjs/header/HeaderNav.module.css.cjs +6 -0
- package/dist/cjs/header/HeaderNav.module.css.cjs.map +1 -0
- package/dist/cjs/hidden/Hidden.cjs +25 -0
- package/dist/cjs/hidden/Hidden.cjs.map +1 -0
- package/dist/cjs/hidden/Hidden.module.css.cjs +6 -0
- package/dist/cjs/hidden/Hidden.module.css.cjs.map +1 -0
- package/dist/cjs/hooks/Portal.cjs +57 -0
- package/dist/cjs/hooks/Portal.cjs.map +1 -0
- package/dist/cjs/hooks/overlayStack.cjs +26 -0
- package/dist/cjs/hooks/overlayStack.cjs.map +1 -0
- package/dist/cjs/hooks/useBodyScrollLock.cjs +50 -0
- package/dist/cjs/hooks/useBodyScrollLock.cjs.map +1 -0
- package/dist/cjs/hooks/useEscape.cjs +25 -0
- package/dist/cjs/hooks/useEscape.cjs.map +1 -0
- package/dist/cjs/hooks/useFocusTrap.cjs +66 -0
- package/dist/cjs/hooks/useFocusTrap.cjs.map +1 -0
- package/dist/cjs/hooks/useIsomorphicLayoutEffect.cjs +10 -0
- package/dist/cjs/hooks/useIsomorphicLayoutEffect.cjs.map +1 -0
- package/dist/cjs/hooks/useOutsideClick.cjs +15 -13
- package/dist/cjs/hooks/useOutsideClick.cjs.map +1 -1
- package/dist/cjs/icon-button/IconButton.cjs +13 -5
- package/dist/cjs/icon-button/IconButton.cjs.map +1 -1
- package/dist/cjs/icon-button/IconButton.module.css.cjs +1 -1
- package/dist/cjs/index.cjs +34 -0
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.css +3 -3
- package/dist/cjs/link-provider/Anchor.cjs +48 -0
- package/dist/cjs/link-provider/Anchor.cjs.map +1 -0
- package/dist/cjs/link-provider/LinkProvider.cjs +29 -0
- package/dist/cjs/link-provider/LinkProvider.cjs.map +1 -0
- package/dist/cjs/logo/Logo.cjs +84 -0
- package/dist/cjs/logo/Logo.cjs.map +1 -0
- package/dist/cjs/logo/Logo.module.css.cjs +6 -0
- package/dist/cjs/logo/Logo.module.css.cjs.map +1 -0
- package/dist/cjs/modal/Modal.cjs +36 -29
- package/dist/cjs/modal/Modal.cjs.map +1 -1
- package/dist/cjs/nav-link/NavLink.cjs +44 -0
- package/dist/cjs/nav-link/NavLink.cjs.map +1 -0
- package/dist/cjs/nav-link/NavLink.module.css.cjs +6 -0
- package/dist/cjs/nav-link/NavLink.module.css.cjs.map +1 -0
- package/dist/cjs/notification/Notification.cjs +20 -4
- package/dist/cjs/notification/Notification.cjs.map +1 -1
- package/dist/cjs/notification/Notification.module.css.cjs +1 -1
- package/dist/cjs/popover/Popover.cjs +136 -0
- package/dist/cjs/popover/Popover.cjs.map +1 -0
- package/dist/cjs/popover/Popover.module.css.cjs +6 -0
- package/dist/cjs/popover/Popover.module.css.cjs.map +1 -0
- package/dist/cjs/segmented-control/SegmentedControl.cjs +2 -1
- package/dist/cjs/segmented-control/SegmentedControl.cjs.map +1 -1
- package/dist/cjs/segmented-control/SegmentedControlCard.cjs +2 -1
- package/dist/cjs/segmented-control/SegmentedControlCard.cjs.map +1 -1
- package/dist/cjs/skeleton/Skeleton.cjs +40 -0
- package/dist/cjs/skeleton/Skeleton.cjs.map +1 -0
- package/dist/cjs/skeleton/Skeleton.module.css.cjs +6 -0
- package/dist/cjs/skeleton/Skeleton.module.css.cjs.map +1 -0
- package/dist/cjs/small-card/SmallCard.cjs +2 -1
- package/dist/cjs/small-card/SmallCard.cjs.map +1 -1
- package/dist/cjs/stack/Stack.cjs +41 -0
- package/dist/cjs/stack/Stack.cjs.map +1 -0
- package/dist/cjs/stack/Stack.module.css.cjs +6 -0
- package/dist/cjs/stack/Stack.module.css.cjs.map +1 -0
- package/dist/cjs/tabs/Tabs.cjs +2 -1
- package/dist/cjs/tabs/Tabs.cjs.map +1 -1
- package/dist/cjs/tag/Tag.cjs +1 -1
- 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 +2 -1
- package/dist/cjs/text-link/TextLink.cjs.map +1 -1
- package/dist/cjs/theme-switcher/ThemeSwitcher.cjs +39 -0
- package/dist/cjs/theme-switcher/ThemeSwitcher.cjs.map +1 -0
- package/dist/cjs/token-selector/TokenSelector.cjs +3 -3
- package/dist/cjs/token-selector/TokenSelector.cjs.map +1 -1
- package/dist/cjs/tooltip/Tooltip.cjs +2 -1
- package/dist/cjs/tooltip/Tooltip.cjs.map +1 -1
- package/dist/cjs/utils/ActionElement.cjs +41 -0
- package/dist/cjs/utils/ActionElement.cjs.map +1 -0
- package/dist/cjs/utils/responsive.cjs +67 -0
- package/dist/cjs/utils/responsive.cjs.map +1 -0
- package/dist/esm/breadcrumbs/Breadcrumbs.mjs +88 -0
- package/dist/esm/breadcrumbs/Breadcrumbs.mjs.map +1 -0
- package/dist/esm/breadcrumbs/Breadcrumbs.module.css.mjs +4 -0
- package/dist/esm/breadcrumbs/Breadcrumbs.module.css.mjs.map +1 -0
- package/dist/esm/button/Button.mjs +11 -3
- package/dist/esm/button/Button.mjs.map +1 -1
- package/dist/esm/counter/Counter.module.css.mjs +1 -1
- package/dist/esm/counter/CounterSlot.mjs +18 -0
- package/dist/esm/counter/CounterSlot.mjs.map +1 -0
- package/dist/esm/counter/CounterSlot.module.css.mjs +4 -0
- package/dist/esm/counter/CounterSlot.module.css.mjs.map +1 -0
- package/dist/esm/disclaimer/Disclaimer.mjs +29 -0
- package/dist/esm/disclaimer/Disclaimer.mjs.map +1 -0
- package/dist/esm/disclaimer/Disclaimer.module.css.mjs +4 -0
- package/dist/esm/disclaimer/Disclaimer.module.css.mjs.map +1 -0
- package/dist/esm/divider/Divider.mjs +22 -0
- package/dist/esm/divider/Divider.mjs.map +1 -0
- package/dist/esm/divider/Divider.module.css.mjs +4 -0
- package/dist/esm/divider/Divider.module.css.mjs.map +1 -0
- package/dist/esm/error-page/ErrorPage.mjs +60 -0
- package/dist/esm/error-page/ErrorPage.mjs.map +1 -0
- package/dist/esm/error-page/ErrorPage.module.css.mjs +4 -0
- package/dist/esm/error-page/ErrorPage.module.css.mjs.map +1 -0
- package/dist/esm/footer/Footer.mjs +26 -0
- package/dist/esm/footer/Footer.mjs.map +1 -0
- package/dist/esm/footer/Footer.module.css.mjs +4 -0
- package/dist/esm/footer/Footer.module.css.mjs.map +1 -0
- package/dist/esm/grid/Grid.mjs +43 -0
- package/dist/esm/grid/Grid.mjs.map +1 -0
- package/dist/esm/grid/Grid.module.css.mjs +4 -0
- package/dist/esm/grid/Grid.module.css.mjs.map +1 -0
- package/dist/esm/grid/GridItem.mjs +35 -0
- package/dist/esm/grid/GridItem.mjs.map +1 -0
- package/dist/esm/grid/GridItem.module.css.mjs +4 -0
- package/dist/esm/grid/GridItem.module.css.mjs.map +1 -0
- package/dist/esm/header/Header.mjs +27 -0
- package/dist/esm/header/Header.mjs.map +1 -0
- package/dist/esm/header/Header.module.css.mjs +4 -0
- package/dist/esm/header/Header.module.css.mjs.map +1 -0
- package/dist/esm/header/HeaderNav.mjs +65 -0
- package/dist/esm/header/HeaderNav.mjs.map +1 -0
- package/dist/esm/header/HeaderNav.module.css.mjs +4 -0
- package/dist/esm/header/HeaderNav.module.css.mjs.map +1 -0
- package/dist/esm/hidden/Hidden.mjs +21 -0
- package/dist/esm/hidden/Hidden.mjs.map +1 -0
- package/dist/esm/hidden/Hidden.module.css.mjs +4 -0
- package/dist/esm/hidden/Hidden.module.css.mjs.map +1 -0
- package/dist/esm/hooks/Portal.mjs +53 -0
- package/dist/esm/hooks/Portal.mjs.map +1 -0
- package/dist/esm/hooks/overlayStack.mjs +22 -0
- package/dist/esm/hooks/overlayStack.mjs.map +1 -0
- package/dist/esm/hooks/useBodyScrollLock.mjs +46 -0
- package/dist/esm/hooks/useBodyScrollLock.mjs.map +1 -0
- package/dist/esm/hooks/useEscape.mjs +21 -0
- package/dist/esm/hooks/useEscape.mjs.map +1 -0
- package/dist/esm/hooks/useFocusTrap.mjs +62 -0
- package/dist/esm/hooks/useFocusTrap.mjs.map +1 -0
- package/dist/esm/hooks/useIsomorphicLayoutEffect.mjs +6 -0
- package/dist/esm/hooks/useIsomorphicLayoutEffect.mjs.map +1 -0
- package/dist/esm/hooks/useOutsideClick.mjs +16 -14
- package/dist/esm/hooks/useOutsideClick.mjs.map +1 -1
- package/dist/esm/icon-button/IconButton.mjs +14 -6
- package/dist/esm/icon-button/IconButton.mjs.map +1 -1
- package/dist/esm/icon-button/IconButton.module.css.mjs +1 -1
- package/dist/esm/index.css +3 -3
- package/dist/esm/index.mjs +17 -0
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/link-provider/Anchor.mjs +44 -0
- package/dist/esm/link-provider/Anchor.mjs.map +1 -0
- package/dist/esm/link-provider/LinkProvider.mjs +24 -0
- package/dist/esm/link-provider/LinkProvider.mjs.map +1 -0
- package/dist/esm/logo/Logo.mjs +80 -0
- package/dist/esm/logo/Logo.mjs.map +1 -0
- package/dist/esm/logo/Logo.module.css.mjs +4 -0
- package/dist/esm/logo/Logo.module.css.mjs.map +1 -0
- package/dist/esm/modal/Modal.mjs +38 -31
- package/dist/esm/modal/Modal.mjs.map +1 -1
- package/dist/esm/nav-link/NavLink.mjs +40 -0
- package/dist/esm/nav-link/NavLink.mjs.map +1 -0
- package/dist/esm/nav-link/NavLink.module.css.mjs +4 -0
- package/dist/esm/nav-link/NavLink.module.css.mjs.map +1 -0
- package/dist/esm/notification/Notification.mjs +20 -4
- package/dist/esm/notification/Notification.mjs.map +1 -1
- package/dist/esm/notification/Notification.module.css.mjs +1 -1
- package/dist/esm/popover/Popover.mjs +132 -0
- package/dist/esm/popover/Popover.mjs.map +1 -0
- package/dist/esm/popover/Popover.module.css.mjs +4 -0
- package/dist/esm/popover/Popover.module.css.mjs.map +1 -0
- package/dist/esm/segmented-control/SegmentedControl.mjs +3 -2
- package/dist/esm/segmented-control/SegmentedControl.mjs.map +1 -1
- package/dist/esm/segmented-control/SegmentedControlCard.mjs +3 -2
- package/dist/esm/segmented-control/SegmentedControlCard.mjs.map +1 -1
- package/dist/esm/skeleton/Skeleton.mjs +36 -0
- package/dist/esm/skeleton/Skeleton.mjs.map +1 -0
- package/dist/esm/skeleton/Skeleton.module.css.mjs +4 -0
- package/dist/esm/skeleton/Skeleton.module.css.mjs.map +1 -0
- package/dist/esm/small-card/SmallCard.mjs +2 -1
- package/dist/esm/small-card/SmallCard.mjs.map +1 -1
- package/dist/esm/stack/Stack.mjs +37 -0
- package/dist/esm/stack/Stack.mjs.map +1 -0
- package/dist/esm/stack/Stack.module.css.mjs +4 -0
- package/dist/esm/stack/Stack.module.css.mjs.map +1 -0
- package/dist/esm/tabs/Tabs.mjs +3 -2
- package/dist/esm/tabs/Tabs.mjs.map +1 -1
- package/dist/esm/tag/Tag.mjs +1 -1
- 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 +2 -1
- package/dist/esm/text-link/TextLink.mjs.map +1 -1
- package/dist/esm/theme-switcher/ThemeSwitcher.mjs +35 -0
- package/dist/esm/theme-switcher/ThemeSwitcher.mjs.map +1 -0
- package/dist/esm/token-selector/TokenSelector.mjs +3 -3
- package/dist/esm/token-selector/TokenSelector.mjs.map +1 -1
- package/dist/esm/tooltip/Tooltip.mjs +3 -2
- package/dist/esm/tooltip/Tooltip.mjs.map +1 -1
- package/dist/esm/utils/ActionElement.mjs +37 -0
- package/dist/esm/utils/ActionElement.mjs.map +1 -0
- package/dist/esm/utils/responsive.mjs +58 -0
- package/dist/esm/utils/responsive.mjs.map +1 -0
- package/dist/index.css +3 -3
- package/dist/styles/breakpoints.css +6 -0
- package/dist/styles/typography-mixins.css +8 -0
- package/dist/types/breadcrumbs/Breadcrumbs.d.ts +11 -0
- package/dist/types/breadcrumbs/Breadcrumbs.d.ts.map +1 -0
- package/dist/types/breadcrumbs/index.d.ts +3 -0
- package/dist/types/breadcrumbs/index.d.ts.map +1 -0
- package/dist/types/button/Button.d.ts +14 -2
- package/dist/types/button/Button.d.ts.map +1 -1
- package/dist/types/colors/colorTokens.d.ts.map +1 -1
- package/dist/types/counter/CounterSlot.d.ts +8 -0
- package/dist/types/counter/CounterSlot.d.ts.map +1 -0
- package/dist/types/disclaimer/Disclaimer.d.ts +9 -0
- package/dist/types/disclaimer/Disclaimer.d.ts.map +1 -0
- package/dist/types/disclaimer/index.d.ts +3 -0
- package/dist/types/disclaimer/index.d.ts.map +1 -0
- package/dist/types/divider/Divider.d.ts +10 -0
- package/dist/types/divider/Divider.d.ts.map +1 -0
- package/dist/types/divider/index.d.ts +3 -0
- package/dist/types/divider/index.d.ts.map +1 -0
- package/dist/types/error-page/ErrorPage.d.ts +20 -0
- package/dist/types/error-page/ErrorPage.d.ts.map +1 -0
- package/dist/types/error-page/index.d.ts +3 -0
- package/dist/types/error-page/index.d.ts.map +1 -0
- package/dist/types/footer/Footer.d.ts +7 -0
- package/dist/types/footer/Footer.d.ts.map +1 -0
- package/dist/types/footer/index.d.ts +3 -0
- package/dist/types/footer/index.d.ts.map +1 -0
- package/dist/types/grid/Grid.d.ts +31 -0
- package/dist/types/grid/Grid.d.ts.map +1 -0
- package/dist/types/grid/GridItem.d.ts +16 -0
- package/dist/types/grid/GridItem.d.ts.map +1 -0
- package/dist/types/grid/index.d.ts +5 -0
- package/dist/types/grid/index.d.ts.map +1 -0
- package/dist/types/header/Header.d.ts +9 -0
- package/dist/types/header/Header.d.ts.map +1 -0
- package/dist/types/header/HeaderNav.d.ts +4 -0
- package/dist/types/header/HeaderNav.d.ts.map +1 -0
- package/dist/types/header/index.d.ts +5 -0
- package/dist/types/header/index.d.ts.map +1 -0
- package/dist/types/hidden/Hidden.d.ts +11 -0
- package/dist/types/hidden/Hidden.d.ts.map +1 -0
- package/dist/types/hidden/index.d.ts +3 -0
- package/dist/types/hidden/index.d.ts.map +1 -0
- package/dist/types/hooks/Portal.d.ts +12 -0
- package/dist/types/hooks/Portal.d.ts.map +1 -0
- package/dist/types/hooks/index.d.ts +9 -0
- package/dist/types/hooks/index.d.ts.map +1 -0
- package/dist/types/hooks/overlayStack.d.ts +7 -0
- package/dist/types/hooks/overlayStack.d.ts.map +1 -0
- package/dist/types/hooks/useBodyScrollLock.d.ts +3 -0
- package/dist/types/hooks/useBodyScrollLock.d.ts.map +1 -0
- package/dist/types/hooks/useEscape.d.ts +3 -0
- package/dist/types/hooks/useEscape.d.ts.map +1 -0
- package/dist/types/hooks/useFocusTrap.d.ts +10 -0
- package/dist/types/hooks/useFocusTrap.d.ts.map +1 -0
- package/dist/types/hooks/useIsomorphicLayoutEffect.d.ts +3 -0
- package/dist/types/hooks/useIsomorphicLayoutEffect.d.ts.map +1 -0
- package/dist/types/hooks/useOutsideClick.d.ts +2 -2
- package/dist/types/hooks/useOutsideClick.d.ts.map +1 -1
- package/dist/types/icon-button/IconButton.d.ts +14 -3
- package/dist/types/icon-button/IconButton.d.ts.map +1 -1
- package/dist/types/index.d.ts +16 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/link-provider/Anchor.d.ts +4 -0
- package/dist/types/link-provider/Anchor.d.ts.map +1 -0
- package/dist/types/link-provider/LinkProvider.d.ts +17 -0
- package/dist/types/link-provider/LinkProvider.d.ts.map +1 -0
- package/dist/types/link-provider/index.d.ts +3 -0
- package/dist/types/link-provider/index.d.ts.map +1 -0
- package/dist/types/logo/Logo.d.ts +13 -0
- package/dist/types/logo/Logo.d.ts.map +1 -0
- package/dist/types/logo/index.d.ts +3 -0
- package/dist/types/logo/index.d.ts.map +1 -0
- package/dist/types/modal/Modal.d.ts +23 -1
- package/dist/types/modal/Modal.d.ts.map +1 -1
- package/dist/types/nav-link/NavLink.d.ts +12 -0
- package/dist/types/nav-link/NavLink.d.ts.map +1 -0
- package/dist/types/nav-link/index.d.ts +3 -0
- package/dist/types/nav-link/index.d.ts.map +1 -0
- package/dist/types/notification/Notification.d.ts +15 -2
- package/dist/types/notification/Notification.d.ts.map +1 -1
- package/dist/types/popover/Popover.d.ts +21 -0
- package/dist/types/popover/Popover.d.ts.map +1 -0
- package/dist/types/popover/index.d.ts +3 -0
- package/dist/types/popover/index.d.ts.map +1 -0
- package/dist/types/segmented-control/SegmentedControl.d.ts.map +1 -1
- package/dist/types/segmented-control/SegmentedControlCard.d.ts.map +1 -1
- package/dist/types/skeleton/Skeleton.d.ts +9 -0
- package/dist/types/skeleton/Skeleton.d.ts.map +1 -0
- package/dist/types/skeleton/index.d.ts +2 -0
- package/dist/types/skeleton/index.d.ts.map +1 -0
- package/dist/types/small-card/SmallCard.d.ts.map +1 -1
- package/dist/types/stack/Stack.d.ts +25 -0
- package/dist/types/stack/Stack.d.ts.map +1 -0
- package/dist/types/stack/index.d.ts +3 -0
- package/dist/types/stack/index.d.ts.map +1 -0
- package/dist/types/tabs/Tabs.d.ts.map +1 -1
- package/dist/types/tag/Tag.d.ts.map +1 -1
- package/dist/types/text-link/TextLink.d.ts.map +1 -1
- package/dist/types/theme-switcher/ThemeSwitcher.d.ts +5 -0
- package/dist/types/theme-switcher/ThemeSwitcher.d.ts.map +1 -0
- package/dist/types/theme-switcher/index.d.ts +3 -0
- package/dist/types/theme-switcher/index.d.ts.map +1 -0
- package/dist/types/tooltip/Tooltip.d.ts.map +1 -1
- package/dist/types/utils/ActionElement.d.ts +10 -0
- package/dist/types/utils/ActionElement.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +5 -0
- package/dist/types/utils/index.d.ts.map +1 -0
- package/dist/types/utils/responsive.d.ts +27 -0
- package/dist/types/utils/responsive.d.ts.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,39 @@
|
|
|
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 GridItem_module = require('./GridItem.module.css.cjs');
|
|
8
|
+
const jsxRuntime = require('react/jsx-runtime');
|
|
9
|
+
const responsive = require('../utils/responsive.cjs');
|
|
10
|
+
|
|
11
|
+
const spanToCss = span => span === 'full' ? '1 / -1' : `span ${span} / span ${span}`;
|
|
12
|
+
|
|
13
|
+
/** Grid child that can span columns or sit in a named area. */
|
|
14
|
+
const GridItem = /*#__PURE__*/react.forwardRef((_ref, ref) => {
|
|
15
|
+
let {
|
|
16
|
+
as: Component = 'div',
|
|
17
|
+
span,
|
|
18
|
+
area,
|
|
19
|
+
className,
|
|
20
|
+
style,
|
|
21
|
+
...rest
|
|
22
|
+
} = _ref;
|
|
23
|
+
return /*#__PURE__*/jsxRuntime.jsx(Component, {
|
|
24
|
+
ref: ref,
|
|
25
|
+
className: cn(GridItem_module.root, className),
|
|
26
|
+
style: {
|
|
27
|
+
...responsive.responsiveVars('span', span, spanToCss),
|
|
28
|
+
...(area !== undefined && {
|
|
29
|
+
gridArea: area
|
|
30
|
+
}),
|
|
31
|
+
...style
|
|
32
|
+
},
|
|
33
|
+
...rest
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
GridItem.displayName = 'GridItem';
|
|
37
|
+
|
|
38
|
+
exports.GridItem = GridItem;
|
|
39
|
+
//# sourceMappingURL=GridItem.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GridItem.cjs","sources":["../../../src/grid/GridItem.tsx"],"sourcesContent":["import { forwardRef, type ElementType, type HTMLAttributes } from 'react'\n\nimport cn from 'classnames'\n\nimport { responsiveVars, type Responsive } from '../utils'\nimport styles from './GridItem.module.css'\n\nexport type GridItemProps = HTMLAttributes<HTMLElement> & {\n as?: ElementType\n /** Number of columns to span; `'full'` spans every column. */\n span?: Responsive<number | 'full'>\n area?: string\n}\n\nconst spanToCss = (span: number | 'full') =>\n span === 'full' ? '1 / -1' : `span ${span} / span ${span}`\n\n/** Grid child that can span columns or sit in a named area. */\nexport const GridItem = forwardRef<HTMLElement, GridItemProps>(\n ({ as: Component = 'div', span, area, className, style, ...rest }, ref) => {\n return (\n <Component\n ref={ref}\n className={cn(styles.root, className)}\n style={{\n ...responsiveVars('span', span, spanToCss),\n ...(area !== undefined && { gridArea: area }),\n ...style,\n }}\n {...rest}\n />\n )\n },\n)\n\nGridItem.displayName = 'GridItem'\n"],"names":["spanToCss","span","GridItem","forwardRef","_ref","ref","as","Component","area","className","style","rest","_jsx","cn","styles","root","responsiveVars","undefined","gridArea","displayName"],"mappings":";;;;;;;;;;AAcA,MAAMA,SAAS,GAAIC,IAAqB,IACtCA,IAAI,KAAK,MAAM,GAAG,QAAQ,GAAG,CAAA,KAAA,EAAQA,IAAI,CAAA,QAAA,EAAWA,IAAI,CAAE,CAAA,CAAA;;AAE5D;AACO,MAAMC,QAAQ,gBAAGC,gBAAU,CAChC,CAAAC,IAAA,EAAmEC,GAAG,KAAK;EAAA,IAA1E;IAAEC,EAAE,EAAEC,SAAS,GAAG,KAAK;IAAEN,IAAI;IAAEO,IAAI;IAAEC,SAAS;IAAEC,KAAK;IAAE,GAAGC,IAAAA;AAAK,GAAC,GAAAP,IAAA,CAAA;EAC/D,oBACEQ,cAAA,CAACL,SAAS,EAAA;AACRF,IAAAA,GAAG,EAAEA,GAAI;IACTI,SAAS,EAAEI,EAAE,CAACC,eAAM,CAACC,IAAI,EAAEN,SAAS,CAAE;AACtCC,IAAAA,KAAK,EAAE;AACL,MAAA,GAAGM,yBAAc,CAAC,MAAM,EAAEf,IAAI,EAAED,SAAS,CAAC;MAC1C,IAAIQ,IAAI,KAAKS,SAAS,IAAI;AAAEC,QAAAA,QAAQ,EAAEV,IAAAA;AAAK,OAAC,CAAC;MAC7C,GAAGE,KAAAA;KACH;IAAA,GACEC,IAAAA;AAAI,GACT,CAAC,CAAA;AAEN,CACF,EAAC;AAEDT,QAAQ,CAACiB,WAAW,GAAG,UAAU;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GridItem.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
const cn = require('classnames');
|
|
6
|
+
const Header_module = require('./Header.module.css.cjs');
|
|
7
|
+
const jsxRuntime = require('react/jsx-runtime');
|
|
8
|
+
|
|
9
|
+
const Header = _ref => {
|
|
10
|
+
let {
|
|
11
|
+
children,
|
|
12
|
+
actions,
|
|
13
|
+
sticky,
|
|
14
|
+
className,
|
|
15
|
+
...rest
|
|
16
|
+
} = _ref;
|
|
17
|
+
return /*#__PURE__*/jsxRuntime.jsxs("header", {
|
|
18
|
+
className: cn(Header_module.header, sticky && Header_module.sticky, className),
|
|
19
|
+
...rest,
|
|
20
|
+
children: [/*#__PURE__*/jsxRuntime.jsx("div", {
|
|
21
|
+
className: Header_module.content,
|
|
22
|
+
children: children
|
|
23
|
+
}), actions != null ? /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
24
|
+
className: Header_module.actions,
|
|
25
|
+
children: actions
|
|
26
|
+
}) : null]
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
exports.Header = Header;
|
|
31
|
+
//# sourceMappingURL=Header.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.cjs","sources":["../../../src/header/Header.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef, ReactNode } from 'react'\n\nimport cn from 'classnames'\n\nimport styles from './Header.module.css'\n\nexport type HeaderProps = ComponentPropsWithoutRef<'header'> & {\n /** Right control group. */\n actions?: ReactNode\n /** Sticks to the top of the viewport while scrolling. */\n sticky?: boolean\n}\n\nexport const Header = ({\n children,\n actions,\n sticky,\n className,\n ...rest\n}: HeaderProps) => (\n <header\n className={cn(styles.header, sticky && styles.sticky, className)}\n {...rest}\n >\n <div className={styles.content}>{children}</div>\n {actions != null ? <div className={styles.actions}>{actions}</div> : null}\n </header>\n)\n"],"names":["Header","_ref","children","actions","sticky","className","rest","_jsxs","cn","styles","header","_jsx","content"],"mappings":";;;;;;;;AAaO,MAAMA,MAAM,GAAGC,IAAA,IAAA;EAAA,IAAC;IACrBC,QAAQ;IACRC,OAAO;IACPC,MAAM;IACNC,SAAS;IACT,GAAGC,IAAAA;AACQ,GAAC,GAAAL,IAAA,CAAA;AAAA,EAAA,oBACZM,eAAA,CAAA,QAAA,EAAA;AACEF,IAAAA,SAAS,EAAEG,EAAE,CAACC,aAAM,CAACC,MAAM,EAAEN,MAAM,IAAIK,aAAM,CAACL,MAAM,EAAEC,SAAS,CAAE;AAAA,IAAA,GAC7DC,IAAI;AAAAJ,IAAAA,QAAA,gBAERS,cAAA,CAAA,KAAA,EAAA;MAAKN,SAAS,EAAEI,aAAM,CAACG,OAAQ;AAAAV,MAAAA,QAAA,EAAEA,QAAAA;AAAQ,KAAM,CAAC,EAC/CC,OAAO,IAAI,IAAI,gBAAGQ,cAAA,CAAA,KAAA,EAAA;MAAKN,SAAS,EAAEI,aAAM,CAACN,OAAQ;AAAAD,MAAAA,QAAA,EAAEC,OAAAA;KAAa,CAAC,GAAG,IAAI,CAAA;AAAA,GACnE,CAAC,CAAA;AAAA;;;;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const styles = {"header":"Header-module_header__BlKE6","sticky":"Header-module_sticky__ftIiS","content":"Header-module_content__P2dip","actions":"Header-module_actions__iRAGS"};
|
|
4
|
+
|
|
5
|
+
module.exports = styles;
|
|
6
|
+
//# sourceMappingURL=Header.module.css.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,69 @@
|
|
|
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 HeaderNav_module = require('./HeaderNav.module.css.cjs');
|
|
8
|
+
const jsxRuntime = require('react/jsx-runtime');
|
|
9
|
+
|
|
10
|
+
const syncFade = nav => {
|
|
11
|
+
nav.toggleAttribute('data-fade-start', nav.scrollLeft > 0);
|
|
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']");
|
|
16
|
+
if (!active) return;
|
|
17
|
+
const navRect = nav.getBoundingClientRect();
|
|
18
|
+
const activeRect = active.getBoundingClientRect();
|
|
19
|
+
nav.scrollLeft += activeRect.left - navRect.left - (nav.clientWidth - activeRect.width) / 2;
|
|
20
|
+
};
|
|
21
|
+
const HeaderNav = /*#__PURE__*/react.forwardRef((_ref, ref) => {
|
|
22
|
+
let {
|
|
23
|
+
'aria-label': ariaLabel = 'Main',
|
|
24
|
+
className,
|
|
25
|
+
onScroll,
|
|
26
|
+
...rest
|
|
27
|
+
} = _ref;
|
|
28
|
+
const navRef = react.useRef(null);
|
|
29
|
+
const setRef = react.useCallback(node => {
|
|
30
|
+
navRef.current = node;
|
|
31
|
+
if (typeof ref === 'function') ref(node);else if (ref) ref.current = node;
|
|
32
|
+
}, [ref]);
|
|
33
|
+
react.useEffect(() => {
|
|
34
|
+
const nav = navRef.current;
|
|
35
|
+
if (!nav) return;
|
|
36
|
+
const sync = () => {
|
|
37
|
+
scrollActiveIntoView(nav);
|
|
38
|
+
syncFade(nav);
|
|
39
|
+
};
|
|
40
|
+
sync();
|
|
41
|
+
const mutations = typeof MutationObserver === 'undefined' ? null : new MutationObserver(sync);
|
|
42
|
+
mutations?.observe(nav, {
|
|
43
|
+
childList: true,
|
|
44
|
+
subtree: true,
|
|
45
|
+
attributes: true,
|
|
46
|
+
attributeFilter: ['aria-current']
|
|
47
|
+
});
|
|
48
|
+
const resizes = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(() => syncFade(nav));
|
|
49
|
+
resizes?.observe(nav);
|
|
50
|
+
return () => {
|
|
51
|
+
mutations?.disconnect();
|
|
52
|
+
resizes?.disconnect();
|
|
53
|
+
};
|
|
54
|
+
}, []);
|
|
55
|
+
return /*#__PURE__*/jsxRuntime.jsx("nav", {
|
|
56
|
+
ref: setRef,
|
|
57
|
+
"aria-label": ariaLabel,
|
|
58
|
+
className: cn(HeaderNav_module.nav, className),
|
|
59
|
+
onScroll: e => {
|
|
60
|
+
syncFade(e.currentTarget);
|
|
61
|
+
onScroll?.(e);
|
|
62
|
+
},
|
|
63
|
+
...rest
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
HeaderNav.displayName = 'HeaderNav';
|
|
67
|
+
|
|
68
|
+
exports.HeaderNav = HeaderNav;
|
|
69
|
+
//# sourceMappingURL=HeaderNav.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeaderNav.cjs","sources":["../../../src/header/HeaderNav.tsx"],"sourcesContent":["import { forwardRef, useCallback, useEffect, useRef } from 'react'\nimport type { ComponentPropsWithoutRef } from 'react'\n\nimport cn from 'classnames'\n\nimport styles from './HeaderNav.module.css'\n\nexport type HeaderNavProps = ComponentPropsWithoutRef<'nav'>\n\nconst syncFade = (nav: HTMLElement) => {\n nav.toggleAttribute('data-fade-start', nav.scrollLeft > 0)\n nav.toggleAttribute(\n 'data-fade-end',\n nav.scrollLeft < nav.scrollWidth - nav.clientWidth - 1,\n )\n}\n\nconst scrollActiveIntoView = (nav: HTMLElement) => {\n const active = nav.querySelector<HTMLElement>(\"[aria-current='page']\")\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\nexport const HeaderNav = forwardRef<HTMLElement, HeaderNavProps>(\n ({ 'aria-label': ariaLabel = 'Main', className, onScroll, ...rest }, ref) => {\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 useEffect(() => {\n const nav = navRef.current\n if (!nav) return\n const sync = () => {\n scrollActiveIntoView(nav)\n syncFade(nav)\n }\n sync()\n const mutations =\n typeof MutationObserver === 'undefined'\n ? null\n : new MutationObserver(sync)\n mutations?.observe(nav, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['aria-current'],\n })\n const resizes =\n typeof ResizeObserver === 'undefined'\n ? null\n : new ResizeObserver(() => syncFade(nav))\n resizes?.observe(nav)\n return () => {\n mutations?.disconnect()\n resizes?.disconnect()\n }\n }, [])\n\n return (\n <nav\n ref={setRef}\n aria-label={ariaLabel}\n className={cn(styles.nav, className)}\n onScroll={(e) => {\n syncFade(e.currentTarget)\n onScroll?.(e)\n }}\n {...rest}\n />\n )\n },\n)\n\nHeaderNav.displayName = 'HeaderNav'\n"],"names":["syncFade","nav","toggleAttribute","scrollLeft","scrollWidth","clientWidth","scrollActiveIntoView","active","querySelector","navRect","getBoundingClientRect","activeRect","left","width","HeaderNav","forwardRef","_ref","ref","ariaLabel","className","onScroll","rest","navRef","useRef","setRef","useCallback","node","current","useEffect","sync","mutations","MutationObserver","observe","childList","subtree","attributes","attributeFilter","resizes","ResizeObserver","disconnect","_jsx","cn","styles","e","currentTarget","displayName"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeaderNav.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
const cn = require('classnames');
|
|
6
|
+
const Hidden_module = require('./Hidden.module.css.cjs');
|
|
7
|
+
const jsxRuntime = require('react/jsx-runtime');
|
|
8
|
+
const responsive = require('../utils/responsive.cjs');
|
|
9
|
+
|
|
10
|
+
/** CSS-only responsive visibility, safe for SSR. Wrapper is `display: contents` while visible. */
|
|
11
|
+
const Hidden = _ref => {
|
|
12
|
+
let {
|
|
13
|
+
below,
|
|
14
|
+
above,
|
|
15
|
+
className,
|
|
16
|
+
...rest
|
|
17
|
+
} = _ref;
|
|
18
|
+
return /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
19
|
+
className: cn(Hidden_module.root, below && Hidden_module[`below${responsive.capitalize(below)}`], above && Hidden_module[`above${responsive.capitalize(above)}`], className),
|
|
20
|
+
...rest
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
exports.Hidden = Hidden;
|
|
25
|
+
//# sourceMappingURL=Hidden.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Hidden.cjs","sources":["../../../src/hidden/Hidden.tsx"],"sourcesContent":["import 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 HiddenProps = HTMLAttributes<HTMLDivElement> & {\n /** Hides at this breakpoint's width and below. */\n below?: Breakpoint\n /** Hides at widths above this breakpoint. */\n above?: Breakpoint\n}\n\n/** CSS-only responsive visibility, safe for SSR. Wrapper is `display: contents` while visible. */\nexport const Hidden = ({ below, above, className, ...rest }: HiddenProps) => (\n <div\n className={cn(\n styles.root,\n below && styles[`below${capitalize(below)}`],\n above && styles[`above${capitalize(above)}`],\n className,\n )}\n {...rest}\n />\n)\n"],"names":["Hidden","_ref","below","above","className","rest","_jsx","cn","styles","root","capitalize"],"mappings":";;;;;;;;;AAcA;AACO,MAAMA,MAAM,GAAGC,IAAA,IAAA;EAAA,IAAC;IAAEC,KAAK;IAAEC,KAAK;IAAEC,SAAS;IAAE,GAAGC,IAAAA;AAAkB,GAAC,GAAAJ,IAAA,CAAA;AAAA,EAAA,oBACtEK,cAAA,CAAA,KAAA,EAAA;AACEF,IAAAA,SAAS,EAAEG,EAAE,CACXC,aAAM,CAACC,IAAI,EACXP,KAAK,IAAIM,aAAM,CAAC,CAAQE,KAAAA,EAAAA,qBAAU,CAACR,KAAK,CAAC,CAAE,CAAA,CAAC,EAC5CC,KAAK,IAAIK,aAAM,CAAC,CAAQE,KAAAA,EAAAA,qBAAU,CAACP,KAAK,CAAC,CAAA,CAAE,CAAC,EAC5CC,SACF,CAAE;IAAA,GACEC,IAAAA;AAAI,GACT,CAAC,CAAA;AAAA;;;;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const styles = {"root":"Hidden-module_root__9hkfD","belowLg":"Hidden-module_belowLg__zbI6R","belowMl":"Hidden-module_belowMl__vJPhT","belowMd":"Hidden-module_belowMd__lVH9f","belowSm":"Hidden-module_belowSm__cnb9B","belowXs":"Hidden-module_belowXs__ipzM-","belowXxs":"Hidden-module_belowXxs__BkbGR","aboveLg":"Hidden-module_aboveLg__G7kJk","aboveMl":"Hidden-module_aboveMl__QadhV","aboveMd":"Hidden-module_aboveMd__1yfOJ","aboveSm":"Hidden-module_aboveSm__6-6D8","aboveXs":"Hidden-module_aboveXs__TxT4e","aboveXxs":"Hidden-module_aboveXxs__gRrwE"};
|
|
4
|
+
|
|
5
|
+
module.exports = styles;
|
|
6
|
+
//# sourceMappingURL=Hidden.module.css.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Hidden.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
const react = require('react');
|
|
6
|
+
const reactDom = require('react-dom');
|
|
7
|
+
const jsxRuntime = require('react/jsx-runtime');
|
|
8
|
+
|
|
9
|
+
const THEME_ATTR = 'data-lido-theme';
|
|
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
|
+
*/
|
|
15
|
+
const Portal = _ref => {
|
|
16
|
+
let {
|
|
17
|
+
children,
|
|
18
|
+
container
|
|
19
|
+
} = _ref;
|
|
20
|
+
const markerRef = react.useRef(null);
|
|
21
|
+
const [target, setTarget] = react.useState(null);
|
|
22
|
+
react.useEffect(() => {
|
|
23
|
+
if (container) {
|
|
24
|
+
setTarget(container);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const scope = markerRef.current?.closest(`[${THEME_ATTR}]`);
|
|
28
|
+
if (!scope || scope === document.documentElement) {
|
|
29
|
+
setTarget(document.body);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const root = document.createElement('div');
|
|
33
|
+
root.style.display = 'contents';
|
|
34
|
+
const sync = () => root.setAttribute(THEME_ATTR, scope.getAttribute(THEME_ATTR) ?? '');
|
|
35
|
+
sync();
|
|
36
|
+
document.body.appendChild(root);
|
|
37
|
+
const observer = new MutationObserver(sync);
|
|
38
|
+
observer.observe(scope, {
|
|
39
|
+
attributes: true,
|
|
40
|
+
attributeFilter: [THEME_ATTR]
|
|
41
|
+
});
|
|
42
|
+
setTarget(root);
|
|
43
|
+
return () => {
|
|
44
|
+
observer.disconnect();
|
|
45
|
+
root.remove();
|
|
46
|
+
};
|
|
47
|
+
}, [container]);
|
|
48
|
+
return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
49
|
+
children: [/*#__PURE__*/jsxRuntime.jsx("span", {
|
|
50
|
+
ref: markerRef,
|
|
51
|
+
hidden: true
|
|
52
|
+
}), target ? /*#__PURE__*/reactDom.createPortal(children, target) : null]
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
exports.Portal = Portal;
|
|
57
|
+
//# sourceMappingURL=Portal.cjs.map
|
|
@@ -0,0 +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/**\n * Renders `null` until mounted so SSR and first client render match.\n * Without `container`, mirrors the nearest `data-lido-theme` scope onto the portal root so tokens still resolve.\n */\nexport const Portal = ({ children, container }: PortalProps) => {\n const markerRef = useRef<HTMLSpanElement>(null)\n const [target, setTarget] = useState<Element | null>(null)\n\n useEffect(() => {\n if (container) {\n setTarget(container)\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])\n\n return (\n <>\n <span ref={markerRef} hidden />\n {target ? createPortal(children, target) : null}\n </>\n )\n}\n"],"names":["THEME_ATTR","Portal","_ref","children","container","markerRef","useRef","target","setTarget","useState","useEffect","scope","current","closest","document","documentElement","body","root","createElement","style","display","sync","setAttribute","getAttribute","appendChild","observer","MutationObserver","observe","attributes","attributeFilter","disconnect","remove","_jsxs","_Fragment","_jsx","ref","hidden","createPortal"],"mappings":";;;;;;;;AASA,MAAMA,UAAU,GAAG,iBAAiB,CAAA;;AAEpC;AACA;AACA;AACA;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;AAE1DC,EAAAA,eAAS,CAAC,MAAM;AACd,IAAA,IAAIN,SAAS,EAAE;MACbI,SAAS,CAACJ,SAAS,CAAC,CAAA;AACpB,MAAA,OAAA;AACF,KAAA;IACA,MAAMO,KAAK,GAAGN,SAAS,CAACO,OAAO,EAAEC,OAAO,CAAC,CAAA,CAAA,EAAIb,UAAU,CAAA,CAAA,CAAG,CAAC,CAAA;IAC3D,IAAI,CAACW,KAAK,IAAIA,KAAK,KAAKG,QAAQ,CAACC,eAAe,EAAE;AAChDP,MAAAA,SAAS,CAACM,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,CAACtB,UAAU,EAAEW,KAAK,CAACY,YAAY,CAACvB,UAAU,CAAC,IAAI,EAAE,CAAC,CAAA;AACrEqB,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,CAAChB,KAAK,EAAE;AAAEiB,MAAAA,UAAU,EAAE,IAAI;MAAEC,eAAe,EAAE,CAAC7B,UAAU,CAAA;AAAE,KAAC,CAAC,CAAA;IAC5EQ,SAAS,CAACS,IAAI,CAAC,CAAA;AACf,IAAA,OAAO,MAAM;MACXQ,QAAQ,CAACK,UAAU,EAAE,CAAA;MACrBb,IAAI,CAACc,MAAM,EAAE,CAAA;KACd,CAAA;AACH,GAAC,EAAE,CAAC3B,SAAS,CAAC,CAAC,CAAA;EAEf,oBACE4B,eAAA,CAAAC,mBAAA,EAAA;AAAA9B,IAAAA,QAAA,gBACE+B,cAAA,CAAA,MAAA,EAAA;AAAMC,MAAAA,GAAG,EAAE9B,SAAU;MAAC+B,MAAM,EAAA,IAAA;KAAE,CAAC,EAC9B7B,MAAM,gBAAG8B,qBAAY,CAAClC,QAAQ,EAAEI,MAAM,CAAC,GAAG,IAAI,CAAA;AAAA,GAC/C,CAAC,CAAA;AAEP;;;;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
/** Each layer gets a document listener for `type` that only fires while it's the newest layer in its stack. */
|
|
6
|
+
const createLayerStack = function (type) {
|
|
7
|
+
let {
|
|
8
|
+
capture = false
|
|
9
|
+
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
10
|
+
const layers = [];
|
|
11
|
+
return onEvent => {
|
|
12
|
+
const layer = {};
|
|
13
|
+
layers.push(layer);
|
|
14
|
+
const listener = event => {
|
|
15
|
+
if (layers[layers.length - 1] === layer) onEvent(event);
|
|
16
|
+
};
|
|
17
|
+
document.addEventListener(type, listener, capture);
|
|
18
|
+
return () => {
|
|
19
|
+
document.removeEventListener(type, listener, capture);
|
|
20
|
+
layers.splice(layers.indexOf(layer), 1);
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
exports.createLayerStack = createLayerStack;
|
|
26
|
+
//# sourceMappingURL=overlayStack.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlayStack.cjs","sources":["../../../src/hooks/overlayStack.ts"],"sourcesContent":["type LayerOptions = { capture?: boolean }\n\n/** Each layer gets a document listener for `type` that only fires while it's the newest layer in its stack. */\nexport const createLayerStack = <K extends keyof DocumentEventMap>(\n type: K,\n { capture = false }: LayerOptions = {},\n) => {\n const layers: object[] = []\n return (onEvent: (event: DocumentEventMap[K]) => void) => {\n const layer = {}\n layers.push(layer)\n const listener = (event: DocumentEventMap[K]) => {\n if (layers[layers.length - 1] === layer) onEvent(event)\n }\n document.addEventListener(type, listener, capture)\n return () => {\n document.removeEventListener(type, listener, capture)\n layers.splice(layers.indexOf(layer), 1)\n }\n }\n}\n"],"names":["createLayerStack","type","capture","arguments","length","undefined","layers","onEvent","layer","push","listener","event","document","addEventListener","removeEventListener","splice","indexOf"],"mappings":";;;;AAEA;MACaA,gBAAgB,GAAG,UAC9BC,IAAO,EAEJ;EAAA,IADH;AAAEC,IAAAA,OAAO,GAAG,KAAA;AAAoB,GAAC,GAAAC,SAAA,CAAAC,MAAA,GAAAD,CAAAA,IAAAA,SAAA,CAAAE,CAAAA,CAAAA,KAAAA,SAAA,GAAAF,SAAA,CAAG,CAAA,CAAA,GAAA,EAAE,CAAA;EAEtC,MAAMG,MAAgB,GAAG,EAAE,CAAA;AAC3B,EAAA,OAAQC,OAA6C,IAAK;IACxD,MAAMC,KAAK,GAAG,EAAE,CAAA;AAChBF,IAAAA,MAAM,CAACG,IAAI,CAACD,KAAK,CAAC,CAAA;IAClB,MAAME,QAAQ,GAAIC,KAA0B,IAAK;AAC/C,MAAA,IAAIL,MAAM,CAACA,MAAM,CAACF,MAAM,GAAG,CAAC,CAAC,KAAKI,KAAK,EAAED,OAAO,CAACI,KAAK,CAAC,CAAA;KACxD,CAAA;IACDC,QAAQ,CAACC,gBAAgB,CAACZ,IAAI,EAAES,QAAQ,EAAER,OAAO,CAAC,CAAA;AAClD,IAAA,OAAO,MAAM;MACXU,QAAQ,CAACE,mBAAmB,CAACb,IAAI,EAAES,QAAQ,EAAER,OAAO,CAAC,CAAA;MACrDI,MAAM,CAACS,MAAM,CAACT,MAAM,CAACU,OAAO,CAACR,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;KACxC,CAAA;GACF,CAAA;AACH;;;;"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
const react = require('react');
|
|
6
|
+
|
|
7
|
+
// Ref-counted so stacked overlays only restore on the last unlock.
|
|
8
|
+
let lockCount = 0;
|
|
9
|
+
let saved = {
|
|
10
|
+
overflow: '',
|
|
11
|
+
paddingRight: ''
|
|
12
|
+
};
|
|
13
|
+
const lock = () => {
|
|
14
|
+
if (lockCount === 0) {
|
|
15
|
+
const {
|
|
16
|
+
body,
|
|
17
|
+
documentElement
|
|
18
|
+
} = document;
|
|
19
|
+
saved = {
|
|
20
|
+
overflow: body.style.overflow,
|
|
21
|
+
paddingRight: body.style.paddingRight
|
|
22
|
+
};
|
|
23
|
+
const scrollbarWidth = window.innerWidth - documentElement.clientWidth;
|
|
24
|
+
if (scrollbarWidth > 0) {
|
|
25
|
+
const current = parseFloat(getComputedStyle(body).paddingRight) || 0;
|
|
26
|
+
body.style.paddingRight = `${current + scrollbarWidth}px`;
|
|
27
|
+
}
|
|
28
|
+
body.style.overflow = 'hidden';
|
|
29
|
+
}
|
|
30
|
+
lockCount += 1;
|
|
31
|
+
};
|
|
32
|
+
const unlock = () => {
|
|
33
|
+
lockCount -= 1;
|
|
34
|
+
if (lockCount === 0) {
|
|
35
|
+
document.body.style.overflow = saved.overflow;
|
|
36
|
+
document.body.style.paddingRight = saved.paddingRight;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
/** Locks body scroll while `active`, compensating the scrollbar width. */
|
|
41
|
+
const useBodyScrollLock = active => {
|
|
42
|
+
react.useEffect(() => {
|
|
43
|
+
if (!active) return;
|
|
44
|
+
lock();
|
|
45
|
+
return unlock;
|
|
46
|
+
}, [active]);
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
exports.useBodyScrollLock = useBodyScrollLock;
|
|
50
|
+
//# sourceMappingURL=useBodyScrollLock.cjs.map
|
|
@@ -0,0 +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 = { overflow: '', paddingRight: '' }\n\nconst lock = () => {\n if (lockCount === 0) {\n const { body, documentElement } = document\n saved = {\n overflow: body.style.overflow,\n paddingRight: body.style.paddingRight,\n }\n const scrollbarWidth = window.innerWidth - documentElement.clientWidth\n if (scrollbarWidth > 0) {\n const current = parseFloat(getComputedStyle(body).paddingRight) || 0\n body.style.paddingRight = `${current + scrollbarWidth}px`\n }\n body.style.overflow = 'hidden'\n }\n lockCount += 1\n}\n\nconst unlock = () => {\n lockCount -= 1\n if (lockCount === 0) {\n document.body.style.overflow = saved.overflow\n document.body.style.paddingRight = saved.paddingRight\n }\n}\n\n/** Locks body scroll while `active`, compensating the scrollbar width. */\nexport const useBodyScrollLock = (active: boolean) => {\n useEffect(() => {\n if (!active) return\n lock()\n return unlock\n }, [active])\n}\n"],"names":["lockCount","saved","overflow","paddingRight","lock","body","documentElement","document","style","scrollbarWidth","window","innerWidth","clientWidth","current","parseFloat","getComputedStyle","unlock","useBodyScrollLock","active","useEffect"],"mappings":";;;;;;AAEA;AACA,IAAIA,SAAS,GAAG,CAAC,CAAA;AACjB,IAAIC,KAAK,GAAG;AAAEC,EAAAA,QAAQ,EAAE,EAAE;AAAEC,EAAAA,YAAY,EAAE,EAAA;AAAG,CAAC,CAAA;AAE9C,MAAMC,IAAI,GAAGA,MAAM;EACjB,IAAIJ,SAAS,KAAK,CAAC,EAAE;IACnB,MAAM;MAAEK,IAAI;AAAEC,MAAAA,eAAAA;AAAgB,KAAC,GAAGC,QAAQ,CAAA;AAC1CN,IAAAA,KAAK,GAAG;AACNC,MAAAA,QAAQ,EAAEG,IAAI,CAACG,KAAK,CAACN,QAAQ;AAC7BC,MAAAA,YAAY,EAAEE,IAAI,CAACG,KAAK,CAACL,YAAAA;KAC1B,CAAA;IACD,MAAMM,cAAc,GAAGC,MAAM,CAACC,UAAU,GAAGL,eAAe,CAACM,WAAW,CAAA;IACtE,IAAIH,cAAc,GAAG,CAAC,EAAE;AACtB,MAAA,MAAMI,OAAO,GAAGC,UAAU,CAACC,gBAAgB,CAACV,IAAI,CAAC,CAACF,YAAY,CAAC,IAAI,CAAC,CAAA;MACpEE,IAAI,CAACG,KAAK,CAACL,YAAY,GAAG,CAAGU,EAAAA,OAAO,GAAGJ,cAAc,CAAI,EAAA,CAAA,CAAA;AAC3D,KAAA;AACAJ,IAAAA,IAAI,CAACG,KAAK,CAACN,QAAQ,GAAG,QAAQ,CAAA;AAChC,GAAA;AACAF,EAAAA,SAAS,IAAI,CAAC,CAAA;AAChB,CAAC,CAAA;AAED,MAAMgB,MAAM,GAAGA,MAAM;AACnBhB,EAAAA,SAAS,IAAI,CAAC,CAAA;EACd,IAAIA,SAAS,KAAK,CAAC,EAAE;IACnBO,QAAQ,CAACF,IAAI,CAACG,KAAK,CAACN,QAAQ,GAAGD,KAAK,CAACC,QAAQ,CAAA;IAC7CK,QAAQ,CAACF,IAAI,CAACG,KAAK,CAACL,YAAY,GAAGF,KAAK,CAACE,YAAY,CAAA;AACvD,GAAA;AACF,CAAC,CAAA;;AAED;AACac,MAAAA,iBAAiB,GAAIC,MAAe,IAAK;AACpDC,EAAAA,eAAS,CAAC,MAAM;IACd,IAAI,CAACD,MAAM,EAAE,OAAA;AACbd,IAAAA,IAAI,EAAE,CAAA;AACN,IAAA,OAAOY,MAAM,CAAA;AACf,GAAC,EAAE,CAACE,MAAM,CAAC,CAAC,CAAA;AACd;;;;"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
const react = require('react');
|
|
6
|
+
const overlayStack = require('./overlayStack.cjs');
|
|
7
|
+
|
|
8
|
+
const listenEscapeLayer = overlayStack.createLayerStack('keydown');
|
|
9
|
+
|
|
10
|
+
/** Calls `handler` on Escape while `active`; with nested overlays only the newest one handles it. */
|
|
11
|
+
const useEscape = (active, handler) => {
|
|
12
|
+
const handlerRef = react.useRef(handler);
|
|
13
|
+
handlerRef.current = handler;
|
|
14
|
+
react.useEffect(() => {
|
|
15
|
+
if (!active) return;
|
|
16
|
+
return listenEscapeLayer(event => {
|
|
17
|
+
if (event.key !== 'Escape' || event.defaultPrevented) return;
|
|
18
|
+
event.preventDefault();
|
|
19
|
+
handlerRef.current(event);
|
|
20
|
+
});
|
|
21
|
+
}, [active]);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
exports.useEscape = useEscape;
|
|
25
|
+
//# sourceMappingURL=useEscape.cjs.map
|
|
@@ -0,0 +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 `active`; with nested overlays only the newest one handles it. */\nexport const useEscape = (\n active: boolean,\n handler: (event: KeyboardEvent) => void,\n) => {\n const handlerRef = useRef(handler)\n handlerRef.current = handler\n\n useEffect(() => {\n if (!active) return\n\n return listenEscapeLayer((event) => {\n if (event.key !== 'Escape' || event.defaultPrevented) return\n event.preventDefault()\n handlerRef.current(event)\n })\n }, [active])\n}\n"],"names":["listenEscapeLayer","createLayerStack","useEscape","active","handler","handlerRef","useRef","current","useEffect","event","key","defaultPrevented","preventDefault"],"mappings":";;;;;;;AAIA,MAAMA,iBAAiB,GAAGC,6BAAgB,CAAC,SAAS,CAAC,CAAA;;AAErD;MACaC,SAAS,GAAGA,CACvBC,MAAe,EACfC,OAAuC,KACpC;AACH,EAAA,MAAMC,UAAU,GAAGC,YAAM,CAACF,OAAO,CAAC,CAAA;EAClCC,UAAU,CAACE,OAAO,GAAGH,OAAO,CAAA;AAE5BI,EAAAA,eAAS,CAAC,MAAM;IACd,IAAI,CAACL,MAAM,EAAE,OAAA;IAEb,OAAOH,iBAAiB,CAAES,KAAK,IAAK;MAClC,IAAIA,KAAK,CAACC,GAAG,KAAK,QAAQ,IAAID,KAAK,CAACE,gBAAgB,EAAE,OAAA;MACtDF,KAAK,CAACG,cAAc,EAAE,CAAA;AACtBP,MAAAA,UAAU,CAACE,OAAO,CAACE,KAAK,CAAC,CAAA;AAC3B,KAAC,CAAC,CAAA;AACJ,GAAC,EAAE,CAACN,MAAM,CAAC,CAAC,CAAA;AACd;;;;"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
const react = require('react');
|
|
6
|
+
const overlayStack = require('./overlayStack.cjs');
|
|
7
|
+
|
|
8
|
+
const listenTrapLayer = overlayStack.createLayerStack('keydown');
|
|
9
|
+
const TABBABLE = 'a[href],button,input:not([type="hidden"]),select,textarea,[tabindex]:not([tabindex="-1"]),[contenteditable="true"]';
|
|
10
|
+
const isRendered = el => {
|
|
11
|
+
const style = getComputedStyle(el);
|
|
12
|
+
return style.visibility !== 'hidden' && style.display !== 'none';
|
|
13
|
+
};
|
|
14
|
+
const getTabbable = container => Array.from(container.querySelectorAll(TABBABLE)).filter(el => !el.matches(':disabled') && el.getAttribute('aria-hidden') !== 'true' && isRendered(el));
|
|
15
|
+
/** Keeps Tab / Shift+Tab inside `element` while `active`; with nested traps only the newest one handles Tab. */
|
|
16
|
+
const useFocusTrap = function (element, active) {
|
|
17
|
+
let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
18
|
+
const optionsRef = react.useRef(options);
|
|
19
|
+
optionsRef.current = options;
|
|
20
|
+
react.useEffect(() => {
|
|
21
|
+
const container = element;
|
|
22
|
+
if (!active || !container) return;
|
|
23
|
+
const previous = document.activeElement;
|
|
24
|
+
const target = optionsRef.current.initialFocus?.current ?? getTabbable(container)[0] ?? container;
|
|
25
|
+
if (target === container && !container.hasAttribute('tabindex')) {
|
|
26
|
+
container.setAttribute('tabindex', '-1');
|
|
27
|
+
}
|
|
28
|
+
target.focus({
|
|
29
|
+
preventScroll: true
|
|
30
|
+
});
|
|
31
|
+
const onKeyDown = event => {
|
|
32
|
+
if (event.key !== 'Tab') return;
|
|
33
|
+
const items = getTabbable(container);
|
|
34
|
+
if (items.length === 0) {
|
|
35
|
+
event.preventDefault();
|
|
36
|
+
container.focus();
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const first = items[0];
|
|
40
|
+
const last = items[items.length - 1];
|
|
41
|
+
const current = document.activeElement;
|
|
42
|
+
if (!container.contains(current)) {
|
|
43
|
+
event.preventDefault();
|
|
44
|
+
(event.shiftKey ? last : first).focus();
|
|
45
|
+
} else if (event.shiftKey && (current === first || current === container)) {
|
|
46
|
+
event.preventDefault();
|
|
47
|
+
last.focus();
|
|
48
|
+
} else if (!event.shiftKey && current === last) {
|
|
49
|
+
event.preventDefault();
|
|
50
|
+
first.focus();
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
const stopListening = listenTrapLayer(onKeyDown);
|
|
54
|
+
return () => {
|
|
55
|
+
stopListening();
|
|
56
|
+
if ((optionsRef.current.restoreFocus ?? true) && previous && document.contains(previous)) {
|
|
57
|
+
previous.focus({
|
|
58
|
+
preventScroll: true
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
}, [element, active]);
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
exports.useFocusTrap = useFocusTrap;
|
|
66
|
+
//# sourceMappingURL=useFocusTrap.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFocusTrap.cjs","sources":["../../../src/hooks/useFocusTrap.ts"],"sourcesContent":["import { useEffect, useRef, type RefObject } from 'react'\n\nimport { createLayerStack } from './overlayStack'\n\nconst listenTrapLayer = createLayerStack('keydown')\n\nconst TABBABLE =\n 'a[href],button,input:not([type=\"hidden\"]),select,textarea,[tabindex]:not([tabindex=\"-1\"]),[contenteditable=\"true\"]'\n\nconst isRendered = (el: HTMLElement) => {\n const style = getComputedStyle(el)\n return style.visibility !== 'hidden' && style.display !== 'none'\n}\n\nconst getTabbable = (container: HTMLElement) =>\n Array.from(container.querySelectorAll<HTMLElement>(TABBABLE)).filter(\n (el) =>\n !el.matches(':disabled') &&\n el.getAttribute('aria-hidden') !== 'true' &&\n isRendered(el),\n )\n\nexport type FocusTrapOptions = {\n /** Element to focus on activate; defaults to first tabbable, then the container. */\n initialFocus?: RefObject<HTMLElement | null>\n /** Return focus to the previously focused element on deactivate. Default true. */\n restoreFocus?: boolean\n}\n\n/** Keeps Tab / Shift+Tab inside `element` while `active`; with nested traps only the newest one handles Tab. */\nexport const useFocusTrap = (\n element: HTMLElement | null,\n active: boolean,\n options: FocusTrapOptions = {},\n) => {\n const optionsRef = useRef(options)\n optionsRef.current = options\n\n useEffect(() => {\n const container = element\n if (!active || !container) return\n\n const previous = document.activeElement as HTMLElement | null\n\n const target =\n optionsRef.current.initialFocus?.current ??\n getTabbable(container)[0] ??\n container\n if (target === container && !container.hasAttribute('tabindex')) {\n container.setAttribute('tabindex', '-1')\n }\n target.focus({ preventScroll: true })\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Tab') return\n const items = getTabbable(container)\n if (items.length === 0) {\n event.preventDefault()\n container.focus()\n return\n }\n const first = items[0]\n const last = items[items.length - 1]\n const current = document.activeElement\n if (!container.contains(current)) {\n event.preventDefault()\n ;(event.shiftKey ? last : first).focus()\n } else if (\n event.shiftKey &&\n (current === first || current === container)\n ) {\n event.preventDefault()\n last.focus()\n } else if (!event.shiftKey && current === last) {\n event.preventDefault()\n first.focus()\n }\n }\n\n const stopListening = listenTrapLayer(onKeyDown)\n return () => {\n stopListening()\n if (\n (optionsRef.current.restoreFocus ?? true) &&\n previous &&\n document.contains(previous)\n ) {\n previous.focus({ preventScroll: true })\n }\n }\n }, [element, active])\n}\n"],"names":["listenTrapLayer","createLayerStack","TABBABLE","isRendered","el","style","getComputedStyle","visibility","display","getTabbable","container","Array","from","querySelectorAll","filter","matches","getAttribute","useFocusTrap","element","active","options","arguments","length","undefined","optionsRef","useRef","current","useEffect","previous","document","activeElement","target","initialFocus","hasAttribute","setAttribute","focus","preventScroll","onKeyDown","event","key","items","preventDefault","first","last","contains","shiftKey","stopListening","restoreFocus"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
const react = require('react');
|
|
6
|
+
|
|
7
|
+
const useIsomorphicLayoutEffect = typeof window === 'undefined' ? react.useEffect : react.useLayoutEffect;
|
|
8
|
+
|
|
9
|
+
exports.useIsomorphicLayoutEffect = useIsomorphicLayoutEffect;
|
|
10
|
+
//# sourceMappingURL=useIsomorphicLayoutEffect.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useIsomorphicLayoutEffect.cjs","sources":["../../../src/hooks/useIsomorphicLayoutEffect.ts"],"sourcesContent":["import { useEffect, useLayoutEffect } from 'react'\n\nexport const useIsomorphicLayoutEffect =\n typeof window === 'undefined' ? useEffect : useLayoutEffect\n"],"names":["useIsomorphicLayoutEffect","window","useEffect","useLayoutEffect"],"mappings":";;;;;;AAEO,MAAMA,yBAAyB,GACpC,OAAOC,MAAM,KAAK,WAAW,GAAGC,eAAS,GAAGC;;;;"}
|
|
@@ -3,21 +3,23 @@
|
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
4
|
|
|
5
5
|
const react = require('react');
|
|
6
|
+
const overlayStack = require('./overlayStack.cjs');
|
|
6
7
|
|
|
7
|
-
const
|
|
8
|
+
const listenOutsideLayer = overlayStack.createLayerStack('pointerdown', {
|
|
9
|
+
capture: true
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
/** Calls `onOutside` on pointerdown outside `element` while `enabled`; with nested overlays only the newest one handles outside clicks. */
|
|
13
|
+
const useOutsideClick = (element, onOutside, enabled) => {
|
|
14
|
+
const handlerRef = react.useRef(onOutside);
|
|
15
|
+
handlerRef.current = onOutside;
|
|
8
16
|
react.useEffect(() => {
|
|
9
|
-
if (!enabled) return;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
onOutside();
|
|
17
|
-
};
|
|
18
|
-
document.addEventListener('pointerdown', handlePointerDown, true);
|
|
19
|
-
return () => document.removeEventListener('pointerdown', handlePointerDown, true);
|
|
20
|
-
}, [ref, onOutside, enabled]);
|
|
17
|
+
if (!enabled || !element) return;
|
|
18
|
+
return listenOutsideLayer(event => {
|
|
19
|
+
if (event.target instanceof Node && element.contains(event.target)) return;
|
|
20
|
+
handlerRef.current(event);
|
|
21
|
+
});
|
|
22
|
+
}, [element, enabled]);
|
|
21
23
|
};
|
|
22
24
|
|
|
23
25
|
exports.useOutsideClick = useOutsideClick;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOutsideClick.cjs","sources":["../../../src/hooks/useOutsideClick.ts"],"sourcesContent":["import { useEffect,
|
|
1
|
+
{"version":3,"file":"useOutsideClick.cjs","sources":["../../../src/hooks/useOutsideClick.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\n\nimport { createLayerStack } from './overlayStack'\n\nconst listenOutsideLayer = createLayerStack('pointerdown', { capture: true })\n\n/** Calls `onOutside` on pointerdown outside `element` while `enabled`; with nested overlays only the newest one handles outside clicks. */\nexport const useOutsideClick = (\n element: HTMLElement | null,\n onOutside: (event: PointerEvent) => void,\n enabled: boolean,\n) => {\n const handlerRef = useRef(onOutside)\n handlerRef.current = onOutside\n\n useEffect(() => {\n if (!enabled || !element) return\n\n return listenOutsideLayer((event) => {\n if (event.target instanceof Node && element.contains(event.target)) return\n handlerRef.current(event)\n })\n }, [element, enabled])\n}\n"],"names":["listenOutsideLayer","createLayerStack","capture","useOutsideClick","element","onOutside","enabled","handlerRef","useRef","current","useEffect","event","target","Node","contains"],"mappings":";;;;;;;AAIA,MAAMA,kBAAkB,GAAGC,6BAAgB,CAAC,aAAa,EAAE;AAAEC,EAAAA,OAAO,EAAE,IAAA;AAAK,CAAC,CAAC,CAAA;;AAE7E;AACO,MAAMC,eAAe,GAAGA,CAC7BC,OAA2B,EAC3BC,SAAwC,EACxCC,OAAgB,KACb;AACH,EAAA,MAAMC,UAAU,GAAGC,YAAM,CAACH,SAAS,CAAC,CAAA;EACpCE,UAAU,CAACE,OAAO,GAAGJ,SAAS,CAAA;AAE9BK,EAAAA,eAAS,CAAC,MAAM;AACd,IAAA,IAAI,CAACJ,OAAO,IAAI,CAACF,OAAO,EAAE,OAAA;IAE1B,OAAOJ,kBAAkB,CAAEW,KAAK,IAAK;AACnC,MAAA,IAAIA,KAAK,CAACC,MAAM,YAAYC,IAAI,IAAIT,OAAO,CAACU,QAAQ,CAACH,KAAK,CAACC,MAAM,CAAC,EAAE,OAAA;AACpEL,MAAAA,UAAU,CAACE,OAAO,CAACE,KAAK,CAAC,CAAA;AAC3B,KAAC,CAAC,CAAA;AACJ,GAAC,EAAE,CAACP,OAAO,EAAEE,OAAO,CAAC,CAAC,CAAA;AACxB;;;;"}
|