@lidofinance/lido-app-ui 1.9.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/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/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 +5 -2
- 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 +26 -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/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/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/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/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 +5 -2
- 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 +13 -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/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/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/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/colors/colorTokens.d.ts.map +1 -1
- 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/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 +11 -3
- package/dist/types/icon-button/IconButton.d.ts.map +1 -1
- package/dist/types/index.d.ts +12 -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/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/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
package/README.md
CHANGED
|
@@ -28,7 +28,36 @@ function Widget() {
|
|
|
28
28
|
}
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
-
Theme providers (`ThemeProvider`, `CookieThemeProvider`, `ThemeToggler`) are re-exported from `@lidofinance/lido-shared-ui`. The color tokens follow the `data-lido-theme` attribute they set, so switching to the dark theme restyles these components.
|
|
31
|
+
Theme providers (`ThemeProvider`, `CookieThemeProvider`, `ThemeToggler`) are re-exported from `@lidofinance/lido-shared-ui`. The color tokens follow the `data-lido-theme` attribute they set, so switching to the dark theme restyles these components. `ThemeSwitcher` is the app-ui-styled theme toggle, since the shared `ThemeToggler` relies on `--lido-ui-*` tokens that app-ui doesn't define.
|
|
32
|
+
|
|
33
|
+
## Router links
|
|
34
|
+
|
|
35
|
+
Link components (`TextLink`, `SmallCard`) render a plain `<a>` by default. Wrap the app in `LinkProvider` to route in-app hrefs through your router's link component; `externalComponent` does the same for absolute URLs. Hash links, `download` links and links with a non-`_self` `target` always stay a plain `<a>`.
|
|
36
|
+
|
|
37
|
+
Next.js 12 — `next/link` needs an `<a>` child, so wrap it once at module level:
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
import { forwardRef } from 'react'
|
|
41
|
+
import type { AppProps } from 'next/app'
|
|
42
|
+
import NextLink from 'next/link'
|
|
43
|
+
import { LinkProvider, type LinkComponentProps } from '@lidofinance/lido-app-ui'
|
|
44
|
+
|
|
45
|
+
const AppLink = forwardRef<HTMLAnchorElement, LinkComponentProps>(
|
|
46
|
+
({ href, ...rest }, ref) => (
|
|
47
|
+
<NextLink href={href}>
|
|
48
|
+
<a ref={ref} {...rest} />
|
|
49
|
+
</NextLink>
|
|
50
|
+
),
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
export default function App({ Component, pageProps }: AppProps) {
|
|
54
|
+
return (
|
|
55
|
+
<LinkProvider component={AppLink}>
|
|
56
|
+
<Component {...pageProps} />
|
|
57
|
+
</LinkProvider>
|
|
58
|
+
)
|
|
59
|
+
}
|
|
60
|
+
```
|
|
32
61
|
|
|
33
62
|
## Customization
|
|
34
63
|
|
package/dist/README.md
CHANGED
|
@@ -28,7 +28,36 @@ function Widget() {
|
|
|
28
28
|
}
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
-
Theme providers (`ThemeProvider`, `CookieThemeProvider`, `ThemeToggler`) are re-exported from `@lidofinance/lido-shared-ui`. The color tokens follow the `data-lido-theme` attribute they set, so switching to the dark theme restyles these components.
|
|
31
|
+
Theme providers (`ThemeProvider`, `CookieThemeProvider`, `ThemeToggler`) are re-exported from `@lidofinance/lido-shared-ui`. The color tokens follow the `data-lido-theme` attribute they set, so switching to the dark theme restyles these components. `ThemeSwitcher` is the app-ui-styled theme toggle, since the shared `ThemeToggler` relies on `--lido-ui-*` tokens that app-ui doesn't define.
|
|
32
|
+
|
|
33
|
+
## Router links
|
|
34
|
+
|
|
35
|
+
Link components (`TextLink`, `SmallCard`) render a plain `<a>` by default. Wrap the app in `LinkProvider` to route in-app hrefs through your router's link component; `externalComponent` does the same for absolute URLs. Hash links, `download` links and links with a non-`_self` `target` always stay a plain `<a>`.
|
|
36
|
+
|
|
37
|
+
Next.js 12 — `next/link` needs an `<a>` child, so wrap it once at module level:
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
import { forwardRef } from 'react'
|
|
41
|
+
import type { AppProps } from 'next/app'
|
|
42
|
+
import NextLink from 'next/link'
|
|
43
|
+
import { LinkProvider, type LinkComponentProps } from '@lidofinance/lido-app-ui'
|
|
44
|
+
|
|
45
|
+
const AppLink = forwardRef<HTMLAnchorElement, LinkComponentProps>(
|
|
46
|
+
({ href, ...rest }, ref) => (
|
|
47
|
+
<NextLink href={href}>
|
|
48
|
+
<a ref={ref} {...rest} />
|
|
49
|
+
</NextLink>
|
|
50
|
+
),
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
export default function App({ Component, pageProps }: AppProps) {
|
|
54
|
+
return (
|
|
55
|
+
<LinkProvider component={AppLink}>
|
|
56
|
+
<Component {...pageProps} />
|
|
57
|
+
</LinkProvider>
|
|
58
|
+
)
|
|
59
|
+
}
|
|
60
|
+
```
|
|
32
61
|
|
|
33
62
|
## Customization
|
|
34
63
|
|
|
@@ -0,0 +1,92 @@
|
|
|
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 Breadcrumbs_module = require('./Breadcrumbs.module.css.cjs');
|
|
8
|
+
const jsxRuntime = require('react/jsx-runtime');
|
|
9
|
+
const ActionElement = require('../utils/ActionElement.cjs');
|
|
10
|
+
const IconChevronRight = require('../icons/components/base/IconChevronRight.cjs');
|
|
11
|
+
|
|
12
|
+
const syncFade = list => {
|
|
13
|
+
list.toggleAttribute('data-fade-start', list.scrollLeft > 0);
|
|
14
|
+
list.toggleAttribute('data-fade-end', list.scrollLeft < list.scrollWidth - list.clientWidth - 1);
|
|
15
|
+
};
|
|
16
|
+
const syncTitle = e => {
|
|
17
|
+
const el = e.target.closest('[data-label]');
|
|
18
|
+
if (!el) return;
|
|
19
|
+
if (el.scrollWidth > el.clientWidth) el.setAttribute('title', el.textContent ?? '');else el.removeAttribute('title');
|
|
20
|
+
};
|
|
21
|
+
const Breadcrumbs = _ref => {
|
|
22
|
+
let {
|
|
23
|
+
items,
|
|
24
|
+
className,
|
|
25
|
+
...rest
|
|
26
|
+
} = _ref;
|
|
27
|
+
const listRef = react.useRef(null);
|
|
28
|
+
react.useLayoutEffect(() => {
|
|
29
|
+
const list = listRef.current;
|
|
30
|
+
if (!list) return;
|
|
31
|
+
list.scrollLeft = list.scrollWidth;
|
|
32
|
+
syncFade(list);
|
|
33
|
+
}, [items]);
|
|
34
|
+
react.useEffect(() => {
|
|
35
|
+
const list = listRef.current;
|
|
36
|
+
if (!list || typeof ResizeObserver === 'undefined') return;
|
|
37
|
+
const observer = new ResizeObserver(() => syncFade(list));
|
|
38
|
+
observer.observe(list);
|
|
39
|
+
return () => observer.disconnect();
|
|
40
|
+
}, []);
|
|
41
|
+
return /*#__PURE__*/jsxRuntime.jsx("nav", {
|
|
42
|
+
"aria-label": "Breadcrumb",
|
|
43
|
+
className: cn(Breadcrumbs_module.nav, className),
|
|
44
|
+
...rest,
|
|
45
|
+
children: /*#__PURE__*/jsxRuntime.jsx("ol", {
|
|
46
|
+
ref: listRef,
|
|
47
|
+
className: Breadcrumbs_module.list,
|
|
48
|
+
onScroll: e => syncFade(e.currentTarget),
|
|
49
|
+
onPointerOver: syncTitle,
|
|
50
|
+
children: items.map((_ref2, index) => {
|
|
51
|
+
let {
|
|
52
|
+
label,
|
|
53
|
+
...itemProps
|
|
54
|
+
} = _ref2;
|
|
55
|
+
const labelAttrs = itemProps.title === undefined ? {
|
|
56
|
+
'data-label': ''
|
|
57
|
+
} : {};
|
|
58
|
+
if (index === items.length - 1) {
|
|
59
|
+
return /*#__PURE__*/jsxRuntime.jsx("li", {
|
|
60
|
+
className: Breadcrumbs_module.item,
|
|
61
|
+
children: /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
62
|
+
"aria-current": "page",
|
|
63
|
+
className: cn(Breadcrumbs_module.label, Breadcrumbs_module.current),
|
|
64
|
+
...labelAttrs,
|
|
65
|
+
children: label
|
|
66
|
+
})
|
|
67
|
+
}, index);
|
|
68
|
+
}
|
|
69
|
+
const interactive = itemProps.href !== undefined || itemProps.onClick !== undefined;
|
|
70
|
+
return /*#__PURE__*/jsxRuntime.jsxs("li", {
|
|
71
|
+
className: Breadcrumbs_module.item,
|
|
72
|
+
children: [interactive ? /*#__PURE__*/jsxRuntime.jsx(ActionElement.ActionElement, {
|
|
73
|
+
...itemProps,
|
|
74
|
+
...labelAttrs,
|
|
75
|
+
className: cn(Breadcrumbs_module.label, Breadcrumbs_module.link, itemProps.className),
|
|
76
|
+
children: label
|
|
77
|
+
}) : /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
78
|
+
className: Breadcrumbs_module.label,
|
|
79
|
+
...labelAttrs,
|
|
80
|
+
children: label
|
|
81
|
+
}), /*#__PURE__*/jsxRuntime.jsx(IconChevronRight.IconChevronRight, {
|
|
82
|
+
className: Breadcrumbs_module.separator,
|
|
83
|
+
"aria-hidden": "true"
|
|
84
|
+
})]
|
|
85
|
+
}, index);
|
|
86
|
+
})
|
|
87
|
+
})
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
exports.Breadcrumbs = Breadcrumbs;
|
|
92
|
+
//# sourceMappingURL=Breadcrumbs.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Breadcrumbs.cjs","sources":["../../../src/breadcrumbs/Breadcrumbs.tsx"],"sourcesContent":["import { useEffect, useLayoutEffect, useRef } from 'react'\nimport type { HTMLAttributes, PointerEvent, ReactNode } from 'react'\n\nimport cn from 'classnames'\n\nimport { IconChevronRight } from '../icons'\nimport { ActionElement, type ActionElementProps } from '../utils'\nimport styles from './Breadcrumbs.module.css'\n\nexport type BreadcrumbItem = ActionElementProps & {\n label: ReactNode\n children?: never\n}\n\nexport type BreadcrumbsProps = HTMLAttributes<HTMLElement> & {\n items: BreadcrumbItem[]\n}\n\nconst syncFade = (list: HTMLElement) => {\n list.toggleAttribute('data-fade-start', list.scrollLeft > 0)\n list.toggleAttribute(\n 'data-fade-end',\n list.scrollLeft < list.scrollWidth - list.clientWidth - 1,\n )\n}\n\nconst syncTitle = (e: PointerEvent<HTMLElement>) => {\n const el = (e.target as Element).closest('[data-label]')\n if (!el) return\n if (el.scrollWidth > el.clientWidth)\n el.setAttribute('title', el.textContent ?? '')\n else el.removeAttribute('title')\n}\n\nexport const Breadcrumbs = ({\n items,\n className,\n ...rest\n}: BreadcrumbsProps) => {\n const listRef = useRef<HTMLOListElement>(null)\n\n useLayoutEffect(() => {\n const list = listRef.current\n if (!list) return\n list.scrollLeft = list.scrollWidth\n syncFade(list)\n }, [items])\n\n useEffect(() => {\n const list = listRef.current\n if (!list || typeof ResizeObserver === 'undefined') return\n const observer = new ResizeObserver(() => syncFade(list))\n observer.observe(list)\n return () => observer.disconnect()\n }, [])\n\n return (\n <nav\n aria-label='Breadcrumb'\n className={cn(styles.nav, className)}\n {...rest}\n >\n <ol\n ref={listRef}\n className={styles.list}\n onScroll={(e) => syncFade(e.currentTarget)}\n onPointerOver={syncTitle}\n >\n {items.map(({ label, ...itemProps }, index) => {\n const labelAttrs =\n itemProps.title === undefined ? { 'data-label': '' } : {}\n if (index === items.length - 1) {\n return (\n <li key={index} className={styles.item}>\n <span\n aria-current='page'\n className={cn(styles.label, styles.current)}\n {...labelAttrs}\n >\n {label}\n </span>\n </li>\n )\n }\n const interactive =\n itemProps.href !== undefined || itemProps.onClick !== undefined\n return (\n <li key={index} className={styles.item}>\n {interactive ? (\n <ActionElement\n {...itemProps}\n {...labelAttrs}\n className={cn(styles.label, styles.link, itemProps.className)}\n >\n {label}\n </ActionElement>\n ) : (\n <span className={styles.label} {...labelAttrs}>\n {label}\n </span>\n )}\n <IconChevronRight\n className={styles.separator}\n aria-hidden='true'\n />\n </li>\n )\n })}\n </ol>\n </nav>\n )\n}\n"],"names":["syncFade","list","toggleAttribute","scrollLeft","scrollWidth","clientWidth","syncTitle","e","el","target","closest","setAttribute","textContent","removeAttribute","Breadcrumbs","_ref","items","className","rest","listRef","useRef","useLayoutEffect","current","useEffect","ResizeObserver","observer","observe","disconnect","_jsx","cn","styles","nav","children","ref","onScroll","currentTarget","onPointerOver","map","_ref2","index","label","itemProps","labelAttrs","title","undefined","length","item","interactive","href","onClick","_jsxs","ActionElement","link","IconChevronRight","separator"],"mappings":";;;;;;;;;;;AAkBA,MAAMA,QAAQ,GAAIC,IAAiB,IAAK;EACtCA,IAAI,CAACC,eAAe,CAAC,iBAAiB,EAAED,IAAI,CAACE,UAAU,GAAG,CAAC,CAAC,CAAA;AAC5DF,EAAAA,IAAI,CAACC,eAAe,CAClB,eAAe,EACfD,IAAI,CAACE,UAAU,GAAGF,IAAI,CAACG,WAAW,GAAGH,IAAI,CAACI,WAAW,GAAG,CAC1D,CAAC,CAAA;AACH,CAAC,CAAA;AAED,MAAMC,SAAS,GAAIC,CAA4B,IAAK;EAClD,MAAMC,EAAE,GAAID,CAAC,CAACE,MAAM,CAAaC,OAAO,CAAC,cAAc,CAAC,CAAA;EACxD,IAAI,CAACF,EAAE,EAAE,OAAA;EACT,IAAIA,EAAE,CAACJ,WAAW,GAAGI,EAAE,CAACH,WAAW,EACjCG,EAAE,CAACG,YAAY,CAAC,OAAO,EAAEH,EAAE,CAACI,WAAW,IAAI,EAAE,CAAC,CAC3CJ,KAAAA,EAAE,CAACK,eAAe,CAAC,OAAO,CAAC,CAAA;AAClC,CAAC,CAAA;AAEYC,MAAAA,WAAW,GAAGC,IAAA,IAIH;EAAA,IAJI;IAC1BC,KAAK;IACLC,SAAS;IACT,GAAGC,IAAAA;AACa,GAAC,GAAAH,IAAA,CAAA;AACjB,EAAA,MAAMI,OAAO,GAAGC,YAAM,CAAmB,IAAI,CAAC,CAAA;AAE9CC,EAAAA,qBAAe,CAAC,MAAM;AACpB,IAAA,MAAMpB,IAAI,GAAGkB,OAAO,CAACG,OAAO,CAAA;IAC5B,IAAI,CAACrB,IAAI,EAAE,OAAA;AACXA,IAAAA,IAAI,CAACE,UAAU,GAAGF,IAAI,CAACG,WAAW,CAAA;IAClCJ,QAAQ,CAACC,IAAI,CAAC,CAAA;AAChB,GAAC,EAAE,CAACe,KAAK,CAAC,CAAC,CAAA;AAEXO,EAAAA,eAAS,CAAC,MAAM;AACd,IAAA,MAAMtB,IAAI,GAAGkB,OAAO,CAACG,OAAO,CAAA;AAC5B,IAAA,IAAI,CAACrB,IAAI,IAAI,OAAOuB,cAAc,KAAK,WAAW,EAAE,OAAA;IACpD,MAAMC,QAAQ,GAAG,IAAID,cAAc,CAAC,MAAMxB,QAAQ,CAACC,IAAI,CAAC,CAAC,CAAA;AACzDwB,IAAAA,QAAQ,CAACC,OAAO,CAACzB,IAAI,CAAC,CAAA;AACtB,IAAA,OAAO,MAAMwB,QAAQ,CAACE,UAAU,EAAE,CAAA;GACnC,EAAE,EAAE,CAAC,CAAA;AAEN,EAAA,oBACEC,cAAA,CAAA,KAAA,EAAA;AACE,IAAA,YAAA,EAAW,YAAY;IACvBX,SAAS,EAAEY,EAAE,CAACC,kBAAM,CAACC,GAAG,EAAEd,SAAS,CAAE;AAAA,IAAA,GACjCC,IAAI;AAAAc,IAAAA,QAAA,eAERJ,cAAA,CAAA,IAAA,EAAA;AACEK,MAAAA,GAAG,EAAEd,OAAQ;MACbF,SAAS,EAAEa,kBAAM,CAAC7B,IAAK;MACvBiC,QAAQ,EAAG3B,CAAC,IAAKP,QAAQ,CAACO,CAAC,CAAC4B,aAAa,CAAE;AAC3CC,MAAAA,aAAa,EAAE9B,SAAU;MAAA0B,QAAA,EAExBhB,KAAK,CAACqB,GAAG,CAAC,CAAAC,KAAA,EAA0BC,KAAK,KAAK;QAAA,IAAnC;UAAEC,KAAK;UAAE,GAAGC,SAAAA;AAAU,SAAC,GAAAH,KAAA,CAAA;AACjC,QAAA,MAAMI,UAAU,GACdD,SAAS,CAACE,KAAK,KAAKC,SAAS,GAAG;AAAE,UAAA,YAAY,EAAE,EAAA;SAAI,GAAG,EAAE,CAAA;AAC3D,QAAA,IAAIL,KAAK,KAAKvB,KAAK,CAAC6B,MAAM,GAAG,CAAC,EAAE;AAC9B,UAAA,oBACEjB,cAAA,CAAA,IAAA,EAAA;YAAgBX,SAAS,EAAEa,kBAAM,CAACgB,IAAK;AAAAd,YAAAA,QAAA,eACrCJ,cAAA,CAAA,MAAA,EAAA;AACE,cAAA,cAAA,EAAa,MAAM;cACnBX,SAAS,EAAEY,EAAE,CAACC,kBAAM,CAACU,KAAK,EAAEV,kBAAM,CAACR,OAAO,CAAE;AAAA,cAAA,GACxCoB,UAAU;AAAAV,cAAAA,QAAA,EAEbQ,KAAAA;aACG,CAAA;AAAC,WAAA,EAPAD,KAQL,CAAC,CAAA;AAET,SAAA;AACA,QAAA,MAAMQ,WAAW,GACfN,SAAS,CAACO,IAAI,KAAKJ,SAAS,IAAIH,SAAS,CAACQ,OAAO,KAAKL,SAAS,CAAA;AACjE,QAAA,oBACEM,eAAA,CAAA,IAAA,EAAA;UAAgBjC,SAAS,EAAEa,kBAAM,CAACgB,IAAK;AAAAd,UAAAA,QAAA,EACpCe,CAAAA,WAAW,gBACVnB,cAAA,CAACuB,2BAAa,EAAA;AAAA,YAAA,GACRV,SAAS;AAAA,YAAA,GACTC,UAAU;AACdzB,YAAAA,SAAS,EAAEY,EAAE,CAACC,kBAAM,CAACU,KAAK,EAAEV,kBAAM,CAACsB,IAAI,EAAEX,SAAS,CAACxB,SAAS,CAAE;AAAAe,YAAAA,QAAA,EAE7DQ,KAAAA;WACY,CAAC,gBAEhBZ,cAAA,CAAA,MAAA,EAAA;YAAMX,SAAS,EAAEa,kBAAM,CAACU,KAAM;AAAA,YAAA,GAAKE,UAAU;AAAAV,YAAAA,QAAA,EAC1CQ,KAAAA;AAAK,WACF,CACP,eACDZ,cAAA,CAACyB,iCAAgB,EAAA;YACfpC,SAAS,EAAEa,kBAAM,CAACwB,SAAU;YAC5B,aAAY,EAAA,MAAA;AAAM,WACnB,CAAC,CAAA;AAAA,SAAA,EAjBKf,KAkBL,CAAC,CAAA;OAER,CAAA;KACC,CAAA;AAAC,GACF,CAAC,CAAA;AAEV;;;;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const styles = {"nav":"Breadcrumbs-module_nav__cDuA5","list":"Breadcrumbs-module_list__A6dlB","item":"Breadcrumbs-module_item__3t-Zj","label":"Breadcrumbs-module_label__gVU35","link":"Breadcrumbs-module_link__KJ87-","current":"Breadcrumbs-module_current__XK0a2","separator":"Breadcrumbs-module_separator__k-Tmd"};
|
|
4
|
+
|
|
5
|
+
module.exports = styles;
|
|
6
|
+
//# sourceMappingURL=Breadcrumbs.module.css.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Breadcrumbs.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
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 Divider_module = require('./Divider.module.css.cjs');
|
|
8
|
+
const jsxRuntime = require('react/jsx-runtime');
|
|
9
|
+
|
|
10
|
+
/** Visual-only 1px line in the default border color; stretches along the cross axis of a flex parent. Pass role='separator' for semantics. */
|
|
11
|
+
const Divider = /*#__PURE__*/react.forwardRef((_ref, ref) => {
|
|
12
|
+
let {
|
|
13
|
+
orientation = 'horizontal',
|
|
14
|
+
className,
|
|
15
|
+
...rest
|
|
16
|
+
} = _ref;
|
|
17
|
+
return /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
18
|
+
ref: ref,
|
|
19
|
+
className: cn(Divider_module.root, Divider_module[orientation], className),
|
|
20
|
+
...rest
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
Divider.displayName = 'Divider';
|
|
24
|
+
|
|
25
|
+
exports.Divider = Divider;
|
|
26
|
+
//# sourceMappingURL=Divider.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Divider.cjs","sources":["../../../src/divider/Divider.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes } from 'react'\n\nimport cn from 'classnames'\n\nimport styles from './Divider.module.css'\n\nexport type DividerOrientation = 'horizontal' | 'vertical'\n\nexport type DividerProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {\n orientation?: DividerOrientation\n}\n\n/** Visual-only 1px line in the default border color; stretches along the cross axis of a flex parent. Pass role='separator' for semantics. */\nexport const Divider = forwardRef<HTMLDivElement, DividerProps>(\n ({ orientation = 'horizontal', className, ...rest }, ref) => (\n <div\n ref={ref}\n className={cn(styles.root, styles[orientation], className)}\n {...rest}\n />\n ),\n)\n\nDivider.displayName = 'Divider'\n"],"names":["Divider","forwardRef","_ref","ref","orientation","className","rest","_jsx","cn","styles","root","displayName"],"mappings":";;;;;;;;;AAYA;AACO,MAAMA,OAAO,gBAAGC,gBAAU,CAC/B,CAAAC,IAAA,EAAqDC,GAAG,KAAA;EAAA,IAAvD;AAAEC,IAAAA,WAAW,GAAG,YAAY;IAAEC,SAAS;IAAE,GAAGC,IAAAA;AAAK,GAAC,GAAAJ,IAAA,CAAA;AAAA,EAAA,oBACjDK,cAAA,CAAA,KAAA,EAAA;AACEJ,IAAAA,GAAG,EAAEA,GAAI;AACTE,IAAAA,SAAS,EAAEG,EAAE,CAACC,cAAM,CAACC,IAAI,EAAED,cAAM,CAACL,WAAW,CAAC,EAAEC,SAAS,CAAE;IAAA,GACvDC,IAAAA;AAAI,GACT,CAAC,CAAA;AAAA,CAEN,EAAC;AAEDN,OAAO,CAACW,WAAW,GAAG,SAAS;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Divider.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,47 @@
|
|
|
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 Grid_module = require('./Grid.module.css.cjs');
|
|
8
|
+
const jsxRuntime = require('react/jsx-runtime');
|
|
9
|
+
const responsive = require('../utils/responsive.cjs');
|
|
10
|
+
|
|
11
|
+
const columnsToCss = columns => typeof columns === 'number' ? `repeat(${columns}, minmax(0, 1fr))` : columns;
|
|
12
|
+
|
|
13
|
+
/** CSS grid container with equal, templated or auto-fit columns and a spacing scale. */
|
|
14
|
+
const Grid = /*#__PURE__*/react.forwardRef((_ref, ref) => {
|
|
15
|
+
let {
|
|
16
|
+
as: Component = 'div',
|
|
17
|
+
columns,
|
|
18
|
+
minItemWidth,
|
|
19
|
+
gap,
|
|
20
|
+
rowGap,
|
|
21
|
+
columnGap,
|
|
22
|
+
align,
|
|
23
|
+
className,
|
|
24
|
+
style,
|
|
25
|
+
...rest
|
|
26
|
+
} = _ref;
|
|
27
|
+
const minWidth = typeof minItemWidth === 'number' ? `${minItemWidth}px` : minItemWidth;
|
|
28
|
+
const template = minItemWidth !== undefined ? `repeat(auto-fit, minmax(min(${minWidth}, 100%), 1fr))` : columns;
|
|
29
|
+
const vars = {
|
|
30
|
+
...responsive.responsiveVars('columns', template, columnsToCss),
|
|
31
|
+
...responsive.responsiveVars('rowGap', responsive.mergeResponsive(gap, rowGap), responsive.spaceToCss),
|
|
32
|
+
...responsive.responsiveVars('columnGap', responsive.mergeResponsive(gap, columnGap), responsive.spaceToCss)
|
|
33
|
+
};
|
|
34
|
+
return /*#__PURE__*/jsxRuntime.jsx(Component, {
|
|
35
|
+
ref: ref,
|
|
36
|
+
className: cn(Grid_module.root, align && Grid_module[`align${responsive.capitalize(align)}`], className),
|
|
37
|
+
style: {
|
|
38
|
+
...vars,
|
|
39
|
+
...style
|
|
40
|
+
},
|
|
41
|
+
...rest
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
Grid.displayName = 'Grid';
|
|
45
|
+
|
|
46
|
+
exports.Grid = Grid;
|
|
47
|
+
//# sourceMappingURL=Grid.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Grid.cjs","sources":["../../../src/grid/Grid.tsx"],"sourcesContent":["import { forwardRef, type ElementType, type HTMLAttributes } from 'react'\n\nimport cn from 'classnames'\n\nimport {\n capitalize,\n mergeResponsive,\n responsiveVars,\n spaceToCss,\n type Responsive,\n type Space,\n} from '../utils'\nimport styles from './Grid.module.css'\n\nexport type GridAlign = 'start' | 'center' | 'end' | 'stretch'\n\nexport type GridProps = HTMLAttributes<HTMLElement> & {\n as?: ElementType\n /** A number makes equal columns; a string is used as raw `grid-template-columns`. */\n columns?: Responsive<number | string>\n /** Auto-fit columns of at least this width (number = px). Takes precedence over `columns`. */\n minItemWidth?: number | string\n gap?: Responsive<Space>\n /** Overrides `gap` for rows, per breakpoint. */\n rowGap?: Responsive<Space>\n /** Overrides `gap` for columns, per breakpoint. */\n columnGap?: Responsive<Space>\n align?: GridAlign\n}\n\nconst columnsToCss = (columns: number | string) =>\n typeof columns === 'number' ? `repeat(${columns}, minmax(0, 1fr))` : columns\n\n/** CSS grid container with equal, templated or auto-fit columns and a spacing scale. */\nexport const Grid = forwardRef<HTMLElement, GridProps>(\n (\n {\n as: Component = 'div',\n columns,\n minItemWidth,\n gap,\n rowGap,\n columnGap,\n align,\n className,\n style,\n ...rest\n },\n ref,\n ) => {\n const minWidth =\n typeof minItemWidth === 'number' ? `${minItemWidth}px` : minItemWidth\n const template =\n minItemWidth !== undefined\n ? `repeat(auto-fit, minmax(min(${minWidth}, 100%), 1fr))`\n : columns\n\n const vars = {\n ...responsiveVars('columns', template, columnsToCss),\n ...responsiveVars('rowGap', mergeResponsive(gap, rowGap), spaceToCss),\n ...responsiveVars(\n 'columnGap',\n mergeResponsive(gap, columnGap),\n spaceToCss,\n ),\n }\n\n return (\n <Component\n ref={ref}\n className={cn(\n styles.root,\n align && styles[`align${capitalize(align)}`],\n className,\n )}\n style={{ ...vars, ...style }}\n {...rest}\n />\n )\n },\n)\n\nGrid.displayName = 'Grid'\n"],"names":["columnsToCss","columns","Grid","forwardRef","_ref","ref","as","Component","minItemWidth","gap","rowGap","columnGap","align","className","style","rest","minWidth","template","undefined","vars","responsiveVars","mergeResponsive","spaceToCss","_jsx","cn","styles","root","capitalize","displayName"],"mappings":";;;;;;;;;;AA8BA,MAAMA,YAAY,GAAIC,OAAwB,IAC5C,OAAOA,OAAO,KAAK,QAAQ,GAAG,CAAA,OAAA,EAAUA,OAAO,CAAA,iBAAA,CAAmB,GAAGA,OAAO,CAAA;;AAE9E;AACO,MAAMC,IAAI,gBAAGC,gBAAU,CAC5B,CAAAC,IAAA,EAaEC,GAAG,KACA;EAAA,IAbH;IACEC,EAAE,EAAEC,SAAS,GAAG,KAAK;IACrBN,OAAO;IACPO,YAAY;IACZC,GAAG;IACHC,MAAM;IACNC,SAAS;IACTC,KAAK;IACLC,SAAS;IACTC,KAAK;IACL,GAAGC,IAAAA;AACL,GAAC,GAAAX,IAAA,CAAA;EAGD,MAAMY,QAAQ,GACZ,OAAOR,YAAY,KAAK,QAAQ,GAAG,CAAGA,EAAAA,YAAY,CAAI,EAAA,CAAA,GAAGA,YAAY,CAAA;EACvE,MAAMS,QAAQ,GACZT,YAAY,KAAKU,SAAS,GACtB,CAA+BF,4BAAAA,EAAAA,QAAQ,CAAgB,cAAA,CAAA,GACvDf,OAAO,CAAA;AAEb,EAAA,MAAMkB,IAAI,GAAG;AACX,IAAA,GAAGC,yBAAc,CAAC,SAAS,EAAEH,QAAQ,EAAEjB,YAAY,CAAC;AACpD,IAAA,GAAGoB,yBAAc,CAAC,QAAQ,EAAEC,0BAAe,CAACZ,GAAG,EAAEC,MAAM,CAAC,EAAEY,qBAAU,CAAC;IACrE,GAAGF,yBAAc,CACf,WAAW,EACXC,0BAAe,CAACZ,GAAG,EAAEE,SAAS,CAAC,EAC/BW,qBACF,CAAA;GACD,CAAA;EAED,oBACEC,cAAA,CAAChB,SAAS,EAAA;AACRF,IAAAA,GAAG,EAAEA,GAAI;IACTQ,SAAS,EAAEW,EAAE,CACXC,WAAM,CAACC,IAAI,EACXd,KAAK,IAAIa,WAAM,CAAC,CAAQE,KAAAA,EAAAA,qBAAU,CAACf,KAAK,CAAC,EAAE,CAAC,EAC5CC,SACF,CAAE;AACFC,IAAAA,KAAK,EAAE;AAAE,MAAA,GAAGK,IAAI;MAAE,GAAGL,KAAAA;KAAQ;IAAA,GACzBC,IAAAA;AAAI,GACT,CAAC,CAAA;AAEN,CACF,EAAC;AAEDb,IAAI,CAAC0B,WAAW,GAAG,MAAM;;;;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const styles = {"root":"Grid-module_root__WQ5eA","alignStart":"Grid-module_alignStart__tJzED","alignCenter":"Grid-module_alignCenter__Br-nr","alignEnd":"Grid-module_alignEnd__oWTV-","alignStretch":"Grid-module_alignStretch__v1rgi"};
|
|
4
|
+
|
|
5
|
+
module.exports = styles;
|
|
6
|
+
//# sourceMappingURL=Grid.module.css.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Grid.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -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;;;;"}
|