@gravity-ui/navigation 6.6.0 → 7.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/components/AsideHeader/AsideHeader.css +9 -1
- package/build/cjs/components/AsideHeader/AsideHeader.js +2 -2
- package/build/cjs/components/AsideHeader/AsideHeader.js.map +1 -1
- package/build/cjs/components/AsideHeader/AsideHeader.module.scss.js +1 -1
- package/build/cjs/components/AsideHeader/AsideHeaderContext.d.ts +5 -0
- package/build/cjs/components/AsideHeader/AsideHeaderContext.js +2 -0
- package/build/cjs/components/AsideHeader/AsideHeaderContext.js.map +1 -1
- package/build/cjs/components/AsideHeader/__playwright__/AsideTransitionExample.d.ts +8 -0
- package/build/cjs/components/AsideHeader/__playwright__/CollapseButtonExample.d.ts +14 -0
- package/build/cjs/components/AsideHeader/__playwright__/CompactTransitionExample.d.ts +12 -0
- package/build/cjs/components/AsideHeader/__playwright__/CurrentIndicatorExample.d.ts +20 -0
- package/build/cjs/components/AsideHeader/__playwright__/QuickAccessOverflowExample.d.ts +8 -0
- package/build/cjs/components/AsideHeader/__playwright__/currentIndicatorPaint.d.ts +21 -0
- package/build/cjs/components/AsideHeader/__playwright__/transitionTestUtils.d.ts +4 -0
- package/build/cjs/components/AsideHeader/__stories__/fullNavigationMoc.d.ts +6 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.js +2 -4
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/i18n/en.json.js +1 -3
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/i18n/en.json.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/i18n/index.d.ts +4 -4
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/i18n/ru.json.js +2 -4
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/i18n/ru.json.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/AsideDivider.d.ts +7 -0
- package/build/cjs/components/AsideHeader/components/AsideDivider.js +13 -0
- package/build/cjs/components/AsideHeader/components/AsideDivider.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/CollapseButton/CollapseButton.css +1 -1
- package/build/cjs/components/AsideHeader/components/CollapseButton/CollapseButton.d.ts +3 -1
- package/build/cjs/components/AsideHeader/components/CollapseButton/CollapseButton.js +12 -8
- package/build/cjs/components/AsideHeader/components/CollapseButton/CollapseButton.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/CollapseButton/CollapseButton.module.scss.js +1 -1
- package/build/cjs/components/AsideHeader/components/CollapseButton/useCollapseAnchor.d.ts +20 -0
- package/build/cjs/components/AsideHeader/components/CollapseButton/useCollapseAnchor.js +170 -0
- package/build/cjs/components/AsideHeader/components/CollapseButton/useCollapseAnchor.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/CompositeBar.css +3 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/CompositeBar.d.ts +13 -2
- package/build/cjs/components/AsideHeader/components/CompositeBar/CompositeBar.js +53 -39
- package/build/cjs/components/AsideHeader/components/CompositeBar/CompositeBar.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/CompositeBar.module.scss.js +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/HighlightedItem/HighlightedItem.css +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/HighlightedItem/HighlightedItem.js +4 -2
- package/build/cjs/components/AsideHeader/components/CompositeBar/HighlightedItem/HighlightedItem.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.css +33 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.js +158 -43
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.module.scss.js +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.types.d.ts +22 -4
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/ItemPopup.d.ts +19 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/ItemPopup.js +137 -20
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/ItemPopup.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/ItemQuickAccessPin.d.ts +7 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/ItemQuickAccessPin.js +25 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/ItemQuickAccessPin.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/renderItemTitle.d.ts +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/renderItemTitle.js +5 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/renderItemTitle.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.css +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.d.ts +4 -6
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.js +14 -5
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.module.scss.js +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollableScrollbarSync.d.ts +8 -8
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollableScrollbarSync.js +68 -33
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollableScrollbarSync.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/constants.d.ts +1 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/constants.js +2 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/constants.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/presentationCurrent.d.ts +24 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/presentationCurrent.js +39 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/presentationCurrent.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/utils.d.ts +12 -7
- package/build/cjs/components/AsideHeader/components/CompositeBar/utils.js +42 -35
- package/build/cjs/components/AsideHeader/components/CompositeBar/utils.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/FirstPanel.js +129 -10
- package/build/cjs/components/AsideHeader/components/FirstPanel.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/FooterItem/FooterItem.css +1 -1
- package/build/cjs/components/AsideHeader/components/FooterItem/FooterItem.js +18 -2
- package/build/cjs/components/AsideHeader/components/FooterItem/FooterItem.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/FooterItem/FooterItem.module.scss.js +1 -1
- package/build/cjs/components/AsideHeader/components/Header.js +7 -3
- package/build/cjs/components/AsideHeader/components/Header.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/PageLayout/AsideFallback.css +9 -1
- package/build/cjs/components/AsideHeader/components/PageLayout/AsideFallback.d.ts +1 -0
- package/build/cjs/components/AsideHeader/components/PageLayout/AsideFallback.js +13 -6
- package/build/cjs/components/AsideHeader/components/PageLayout/AsideFallback.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/PageLayout/AsideLayoutTransition.d.ts +80 -0
- package/build/cjs/components/AsideHeader/components/PageLayout/AsideLayoutTransition.js +600 -0
- package/build/cjs/components/AsideHeader/components/PageLayout/AsideLayoutTransition.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/PageLayout/CurrentIndicatorTransition.d.ts +14 -0
- package/build/cjs/components/AsideHeader/components/PageLayout/CurrentIndicatorTransition.js +164 -0
- package/build/cjs/components/AsideHeader/components/PageLayout/CurrentIndicatorTransition.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/PageLayout/CurrentPresentationObserver.d.ts +14 -0
- package/build/cjs/components/AsideHeader/components/PageLayout/CurrentPresentationObserver.js +94 -0
- package/build/cjs/components/AsideHeader/components/PageLayout/CurrentPresentationObserver.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayout.css +9 -1
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayout.d.ts +1 -1
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayout.js +14 -5
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayout.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayoutAside.css +9 -1
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayoutAside.d.ts +1 -1
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayoutAside.js +5 -2
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayoutAside.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/PageLayout/currentIndicatorDom.d.ts +7 -0
- package/build/cjs/components/AsideHeader/components/PageLayout/currentIndicatorDom.js +25 -0
- package/build/cjs/components/AsideHeader/components/PageLayout/currentIndicatorDom.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/PageLayout/currentIndicatorModel.d.ts +25 -0
- package/build/cjs/components/AsideHeader/components/PageLayout/currentIndicatorModel.js +89 -0
- package/build/cjs/components/AsideHeader/components/PageLayout/currentIndicatorModel.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/Panels.js +2 -2
- package/build/cjs/components/AsideHeader/components/Panels.js.map +1 -1
- package/build/cjs/components/AsideHeader/density.d.ts +21 -0
- package/build/cjs/components/AsideHeader/density.js +61 -0
- package/build/cjs/components/AsideHeader/density.js.map +1 -0
- package/build/cjs/components/AsideHeader/i18n/__mocks__/index.d.ts +1 -0
- package/build/cjs/components/AsideHeader/i18n/en.json.js +10 -1
- package/build/cjs/components/AsideHeader/i18n/en.json.js.map +1 -1
- package/build/cjs/components/AsideHeader/i18n/index.d.ts +4 -4
- package/build/cjs/components/AsideHeader/i18n/ru.json.js +10 -1
- package/build/cjs/components/AsideHeader/i18n/ru.json.js.map +1 -1
- package/build/cjs/components/AsideHeader/index.d.ts +1 -0
- package/build/cjs/components/AsideHeader/quickAccess.d.ts +9 -0
- package/build/cjs/components/AsideHeader/quickAccess.js +31 -0
- package/build/cjs/components/AsideHeader/quickAccess.js.map +1 -0
- package/build/cjs/components/AsideHeader/types.d.ts +50 -5
- package/build/cjs/components/AsideHeader/types.js.map +1 -1
- package/build/cjs/components/AsideHeader/useAsideHeaderInnerContextValue.js +18 -3
- package/build/cjs/components/AsideHeader/useAsideHeaderInnerContextValue.js.map +1 -1
- package/build/cjs/components/AsideHeader/utils.d.ts +1 -0
- package/build/cjs/components/AsideHeader/utils.js +2 -0
- package/build/cjs/components/AsideHeader/utils.js.map +1 -1
- package/build/cjs/components/Footer/desktop/Footer.css +1 -1
- package/build/cjs/components/Footer/mobile/Footer.css +1 -1
- package/build/cjs/components/HotkeysPanel/HotkeysPanel.css +1 -1
- package/build/cjs/components/HotkeysPanel/HotkeysPanel.js +1 -1
- package/build/cjs/components/HotkeysPanel/HotkeysPanel.js.map +1 -1
- package/build/cjs/components/HotkeysPanel/HotkeysPanel.module.scss.js +1 -1
- package/build/cjs/components/Logo/Logo.css +1 -1
- package/build/cjs/components/Logo/Logo.d.ts +1 -0
- package/build/cjs/components/Logo/Logo.js +4 -4
- package/build/cjs/components/Logo/Logo.js.map +1 -1
- package/build/cjs/components/constants.d.ts +5 -0
- package/build/cjs/components/constants.js +6 -0
- package/build/cjs/components/constants.js.map +1 -1
- package/build/cjs/components/types.d.ts +4 -4
- package/build/docs/components/AsideHeader.md +234 -42
- package/build/esm/components/AsideHeader/AsideHeader.css +9 -1
- package/build/esm/components/AsideHeader/AsideHeader.js +2 -2
- package/build/esm/components/AsideHeader/AsideHeader.js.map +1 -1
- package/build/esm/components/AsideHeader/AsideHeader.module.scss.js +1 -1
- package/build/esm/components/AsideHeader/AsideHeaderContext.d.ts +5 -0
- package/build/esm/components/AsideHeader/AsideHeaderContext.js +2 -0
- package/build/esm/components/AsideHeader/AsideHeaderContext.js.map +1 -1
- package/build/esm/components/AsideHeader/__playwright__/AsideTransitionExample.d.ts +8 -0
- package/build/esm/components/AsideHeader/__playwright__/CollapseButtonExample.d.ts +14 -0
- package/build/esm/components/AsideHeader/__playwright__/CompactTransitionExample.d.ts +12 -0
- package/build/esm/components/AsideHeader/__playwright__/CurrentIndicatorExample.d.ts +20 -0
- package/build/esm/components/AsideHeader/__playwright__/QuickAccessOverflowExample.d.ts +8 -0
- package/build/esm/components/AsideHeader/__playwright__/currentIndicatorPaint.d.ts +21 -0
- package/build/esm/components/AsideHeader/__playwright__/transitionTestUtils.d.ts +4 -0
- package/build/esm/components/AsideHeader/__stories__/fullNavigationMoc.d.ts +6 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.js +3 -5
- package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.js.map +1 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/i18n/en.json.js +1 -3
- package/build/esm/components/AsideHeader/components/AllPagesPanel/i18n/en.json.js.map +1 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/i18n/index.d.ts +4 -4
- package/build/esm/components/AsideHeader/components/AllPagesPanel/i18n/ru.json.js +2 -4
- package/build/esm/components/AsideHeader/components/AllPagesPanel/i18n/ru.json.js.map +1 -1
- package/build/esm/components/AsideHeader/components/AsideDivider.d.ts +7 -0
- package/build/esm/components/AsideHeader/components/AsideDivider.js +11 -0
- package/build/esm/components/AsideHeader/components/AsideDivider.js.map +1 -0
- package/build/esm/components/AsideHeader/components/CollapseButton/CollapseButton.css +1 -1
- package/build/esm/components/AsideHeader/components/CollapseButton/CollapseButton.d.ts +3 -1
- package/build/esm/components/AsideHeader/components/CollapseButton/CollapseButton.js +12 -8
- package/build/esm/components/AsideHeader/components/CollapseButton/CollapseButton.js.map +1 -1
- package/build/esm/components/AsideHeader/components/CollapseButton/CollapseButton.module.scss.js +1 -1
- package/build/esm/components/AsideHeader/components/CollapseButton/useCollapseAnchor.d.ts +20 -0
- package/build/esm/components/AsideHeader/components/CollapseButton/useCollapseAnchor.js +167 -0
- package/build/esm/components/AsideHeader/components/CollapseButton/useCollapseAnchor.js.map +1 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/CompositeBar.css +3 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/CompositeBar.d.ts +13 -2
- package/build/esm/components/AsideHeader/components/CompositeBar/CompositeBar.js +54 -40
- package/build/esm/components/AsideHeader/components/CompositeBar/CompositeBar.js.map +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/CompositeBar.module.scss.js +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/HighlightedItem/HighlightedItem.css +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/HighlightedItem/HighlightedItem.js +4 -2
- package/build/esm/components/AsideHeader/components/CompositeBar/HighlightedItem/HighlightedItem.js.map +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.css +33 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.js +161 -46
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.js.map +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.module.scss.js +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.types.d.ts +22 -4
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/ItemPopup.d.ts +19 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/ItemPopup.js +139 -23
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/ItemPopup.js.map +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/ItemQuickAccessPin.d.ts +7 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/ItemQuickAccessPin.js +23 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/ItemQuickAccessPin.js.map +1 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/renderItemTitle.d.ts +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/renderItemTitle.js +5 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/renderItemTitle.js.map +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.css +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.d.ts +4 -6
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.js +15 -6
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.js.map +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.module.scss.js +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollableScrollbarSync.d.ts +8 -8
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollableScrollbarSync.js +68 -33
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollableScrollbarSync.js.map +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/constants.d.ts +1 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/constants.js +2 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/constants.js.map +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/presentationCurrent.d.ts +24 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/presentationCurrent.js +36 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/presentationCurrent.js.map +1 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/utils.d.ts +12 -7
- package/build/esm/components/AsideHeader/components/CompositeBar/utils.js +44 -35
- package/build/esm/components/AsideHeader/components/CompositeBar/utils.js.map +1 -1
- package/build/esm/components/AsideHeader/components/FirstPanel.js +131 -12
- package/build/esm/components/AsideHeader/components/FirstPanel.js.map +1 -1
- package/build/esm/components/AsideHeader/components/FooterItem/FooterItem.css +1 -1
- package/build/esm/components/AsideHeader/components/FooterItem/FooterItem.js +18 -2
- package/build/esm/components/AsideHeader/components/FooterItem/FooterItem.js.map +1 -1
- package/build/esm/components/AsideHeader/components/FooterItem/FooterItem.module.scss.js +1 -1
- package/build/esm/components/AsideHeader/components/Header.js +8 -4
- package/build/esm/components/AsideHeader/components/Header.js.map +1 -1
- package/build/esm/components/AsideHeader/components/PageLayout/AsideFallback.css +9 -1
- package/build/esm/components/AsideHeader/components/PageLayout/AsideFallback.d.ts +1 -0
- package/build/esm/components/AsideHeader/components/PageLayout/AsideFallback.js +14 -7
- package/build/esm/components/AsideHeader/components/PageLayout/AsideFallback.js.map +1 -1
- package/build/esm/components/AsideHeader/components/PageLayout/AsideLayoutTransition.d.ts +80 -0
- package/build/esm/components/AsideHeader/components/PageLayout/AsideLayoutTransition.js +598 -0
- package/build/esm/components/AsideHeader/components/PageLayout/AsideLayoutTransition.js.map +1 -0
- package/build/esm/components/AsideHeader/components/PageLayout/CurrentIndicatorTransition.d.ts +14 -0
- package/build/esm/components/AsideHeader/components/PageLayout/CurrentIndicatorTransition.js +162 -0
- package/build/esm/components/AsideHeader/components/PageLayout/CurrentIndicatorTransition.js.map +1 -0
- package/build/esm/components/AsideHeader/components/PageLayout/CurrentPresentationObserver.d.ts +14 -0
- package/build/esm/components/AsideHeader/components/PageLayout/CurrentPresentationObserver.js +92 -0
- package/build/esm/components/AsideHeader/components/PageLayout/CurrentPresentationObserver.js.map +1 -0
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayout.css +9 -1
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayout.d.ts +1 -1
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayout.js +15 -6
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayout.js.map +1 -1
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayoutAside.css +9 -1
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayoutAside.d.ts +1 -1
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayoutAside.js +5 -2
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayoutAside.js.map +1 -1
- package/build/esm/components/AsideHeader/components/PageLayout/currentIndicatorDom.d.ts +7 -0
- package/build/esm/components/AsideHeader/components/PageLayout/currentIndicatorDom.js +17 -0
- package/build/esm/components/AsideHeader/components/PageLayout/currentIndicatorDom.js.map +1 -0
- package/build/esm/components/AsideHeader/components/PageLayout/currentIndicatorModel.d.ts +25 -0
- package/build/esm/components/AsideHeader/components/PageLayout/currentIndicatorModel.js +84 -0
- package/build/esm/components/AsideHeader/components/PageLayout/currentIndicatorModel.js.map +1 -0
- package/build/esm/components/AsideHeader/components/Panels.js +3 -3
- package/build/esm/components/AsideHeader/components/Panels.js.map +1 -1
- package/build/esm/components/AsideHeader/density.d.ts +21 -0
- package/build/esm/components/AsideHeader/density.js +58 -0
- package/build/esm/components/AsideHeader/density.js.map +1 -0
- package/build/esm/components/AsideHeader/i18n/__mocks__/index.d.ts +1 -0
- package/build/esm/components/AsideHeader/i18n/en.json.js +8 -2
- package/build/esm/components/AsideHeader/i18n/en.json.js.map +1 -1
- package/build/esm/components/AsideHeader/i18n/index.d.ts +4 -4
- package/build/esm/components/AsideHeader/i18n/ru.json.js +8 -2
- package/build/esm/components/AsideHeader/i18n/ru.json.js.map +1 -1
- package/build/esm/components/AsideHeader/index.d.ts +1 -0
- package/build/esm/components/AsideHeader/quickAccess.d.ts +9 -0
- package/build/esm/components/AsideHeader/quickAccess.js +27 -0
- package/build/esm/components/AsideHeader/quickAccess.js.map +1 -0
- package/build/esm/components/AsideHeader/types.d.ts +50 -5
- package/build/esm/components/AsideHeader/types.js.map +1 -1
- package/build/esm/components/AsideHeader/useAsideHeaderInnerContextValue.js +18 -3
- package/build/esm/components/AsideHeader/useAsideHeaderInnerContextValue.js.map +1 -1
- package/build/esm/components/AsideHeader/utils.d.ts +1 -0
- package/build/esm/components/AsideHeader/utils.js +2 -1
- package/build/esm/components/AsideHeader/utils.js.map +1 -1
- package/build/esm/components/Footer/desktop/Footer.css +1 -1
- package/build/esm/components/Footer/mobile/Footer.css +1 -1
- package/build/esm/components/HotkeysPanel/HotkeysPanel.css +1 -1
- package/build/esm/components/HotkeysPanel/HotkeysPanel.js +1 -1
- package/build/esm/components/HotkeysPanel/HotkeysPanel.js.map +1 -1
- package/build/esm/components/HotkeysPanel/HotkeysPanel.module.scss.js +1 -1
- package/build/esm/components/Logo/Logo.css +1 -1
- package/build/esm/components/Logo/Logo.d.ts +1 -0
- package/build/esm/components/Logo/Logo.js +4 -4
- package/build/esm/components/Logo/Logo.js.map +1 -1
- package/build/esm/components/constants.d.ts +5 -0
- package/build/esm/components/constants.js +6 -1
- package/build/esm/components/constants.js.map +1 -1
- package/build/esm/components/types.d.ts +4 -4
- package/package.json +1 -1
- package/build/cjs/assets/icons/control-menu-button.svg.js +0 -41
- package/build/cjs/assets/icons/control-menu-button.svg.js.map +0 -1
- package/build/esm/assets/icons/control-menu-button.svg.js +0 -18
- package/build/esm/assets/icons/control-menu-button.svg.js.map +0 -1
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { PopupProps } from '@gravity-ui/uikit';
|
|
2
3
|
import { AsideHeaderItem } from '../../../types';
|
|
4
|
+
import type { QuickAccessToggleHandler } from './Item.types';
|
|
5
|
+
export declare function getItemPopoverOffset({ isSingleLabel, itemHeight, popupRowHeight, titleHeight, nested, }: {
|
|
6
|
+
isSingleLabel: boolean;
|
|
7
|
+
itemHeight: number;
|
|
8
|
+
popupRowHeight: number;
|
|
9
|
+
titleHeight?: number;
|
|
10
|
+
/** The popup opens from a row inside another popup. */
|
|
11
|
+
nested?: boolean;
|
|
12
|
+
}): NonNullable<PopupProps['offset']>;
|
|
3
13
|
interface Props {
|
|
4
14
|
items: AsideHeaderItem[];
|
|
15
|
+
/** `label` is the minimal popup used by one compact leaf item. */
|
|
16
|
+
variant?: 'menu' | 'label';
|
|
5
17
|
/** Optional title rendered at the top of the popup. */
|
|
6
18
|
title?: string;
|
|
7
19
|
open?: boolean;
|
|
@@ -9,11 +21,18 @@ interface Props {
|
|
|
9
21
|
type?: string;
|
|
10
22
|
collapsed?: boolean;
|
|
11
23
|
hideIcon?: boolean;
|
|
24
|
+
/** Icon visibility for a child popup opened from a row in this popup. */
|
|
25
|
+
nestedPopupHideIcon?: boolean;
|
|
12
26
|
itemClassName?: string;
|
|
13
27
|
children: React.ReactElement;
|
|
14
28
|
onOpenChange?: (open: boolean) => void;
|
|
15
29
|
onPopupItemClick?: AsideHeaderItem['onItemClick'];
|
|
16
30
|
onItemClick?: AsideHeaderItem['onItemClick'];
|
|
31
|
+
/** Controls selected styling without altering the source items passed to callbacks. */
|
|
32
|
+
highlightCurrentItem?: boolean;
|
|
33
|
+
enableQuickAccessPin?: boolean;
|
|
34
|
+
onToggleQuickAccess?: QuickAccessToggleHandler;
|
|
35
|
+
suppressCurrentItemIds?: ReadonlySet<string>;
|
|
17
36
|
}
|
|
18
37
|
export declare const ItemPopup: React.FC<Props>;
|
|
19
38
|
export {};
|
|
@@ -2,62 +2,179 @@
|
|
|
2
2
|
|
|
3
3
|
var React = require('react');
|
|
4
4
|
var uikit = require('@gravity-ui/uikit');
|
|
5
|
+
var constants = require('../../../../constants.js');
|
|
5
6
|
var cn = require('../../../../utils/cn.js');
|
|
7
|
+
var AsideHeaderContext = require('../../../AsideHeaderContext.js');
|
|
8
|
+
var density = require('../../../density.js');
|
|
9
|
+
var presentationCurrent = require('../presentationCurrent.js');
|
|
6
10
|
var utils = require('../utils.js');
|
|
7
11
|
var Item = require('./Item.js');
|
|
8
12
|
var ItemPopupNestContext = require('./ItemPopupNestContext.js');
|
|
9
13
|
var Item_module = require('./Item.module.scss.js');
|
|
10
14
|
|
|
11
15
|
const b = cn.createBlock('composite-bar-item', Item_module.default);
|
|
16
|
+
const POPUP_PADDING = 4;
|
|
12
17
|
const POPUP_MAIN_AXIS_OFFSET = 14;
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
const
|
|
18
|
+
/** Whitespace between the painted borders of two chained popups. */
|
|
19
|
+
const NESTED_POPUP_GAP = 4;
|
|
20
|
+
/** `.g-popup` paints its border as a 1px shadow spread outside the border box. */
|
|
21
|
+
const POPUP_SHADOW_RING = 1;
|
|
22
|
+
const SOLO_LABEL_POPUP_ITEM_HEIGHT = 28;
|
|
23
|
+
const SOLO_LABEL_POPUP_BORDER_RADIUS = 4;
|
|
24
|
+
const POPUP_TITLE_BLOCK_HEIGHT = 30;
|
|
25
|
+
const DEFAULT_POPUP_DELAY = 0;
|
|
26
|
+
function getItemPopoverOffset({ isSingleLabel, itemHeight, popupRowHeight, titleHeight = 0, nested = false, }) {
|
|
27
|
+
if (isSingleLabel) {
|
|
28
|
+
return { mainAxis: POPUP_MAIN_AXIS_OFFSET, crossAxis: 0 };
|
|
29
|
+
}
|
|
30
|
+
// A nested popup anchors to a row that sits `POPUP_PADDING` inside the parent popup
|
|
31
|
+
// border box, and both popups paint a shadow ring outside that box. Compensate for
|
|
32
|
+
// both so chained popups keep `NESTED_POPUP_GAP` of whitespace at any density.
|
|
33
|
+
const mainAxis = nested
|
|
34
|
+
? NESTED_POPUP_GAP + 2 * POPUP_SHADOW_RING + POPUP_PADDING
|
|
35
|
+
: POPUP_MAIN_AXIS_OFFSET;
|
|
36
|
+
const firstRowOffsetInAnchor = (itemHeight - popupRowHeight) / 2;
|
|
37
|
+
return {
|
|
38
|
+
mainAxis,
|
|
39
|
+
crossAxis: firstRowOffsetInAnchor - POPUP_PADDING - titleHeight,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
const ItemPopup = ({ items, variant = 'menu', itemClassName, title, open, disabled, type, collapsed = false, hideIcon = false, nestedPopupHideIcon, children, onPopupItemClick, onItemClick, onOpenChange, highlightCurrentItem = true, enableQuickAccessPin, onToggleQuickAccess, suppressCurrentItemIds, }) => {
|
|
43
|
+
const asideHeaderContext = AsideHeaderContext.useSafeAsideHeaderContext();
|
|
44
|
+
const parentPopupNest = React.useContext(ItemPopupNestContext.ItemPopupNestContext);
|
|
45
|
+
const theme = uikit.useThemeValue();
|
|
46
|
+
const densityConfig = density.getAsideHeaderDensityConfig(asideHeaderContext === null || asideHeaderContext === undefined ? undefined : asideHeaderContext.menuDensity);
|
|
17
47
|
const nestedOpenCountRef = React.useRef(0);
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const
|
|
48
|
+
// A nested portaled popup temporarily blocks the parent's hover-close. Remember that close
|
|
49
|
+
// request and replay it after the child closes, unless the pointer/focus returned to the parent.
|
|
50
|
+
const deferredCloseRef = React.useRef(false);
|
|
51
|
+
const interactionInsideRef = React.useRef(false);
|
|
52
|
+
const popupContentRef = React.useRef(null);
|
|
53
|
+
const triggerElementRef = React.useRef(null);
|
|
54
|
+
const onOpenChangeRef = React.useRef(onOpenChange);
|
|
55
|
+
const densityCssProperties = density.getAsideHeaderDensityCssProperties(asideHeaderContext === null || asideHeaderContext === undefined ? undefined : asideHeaderContext.menuDensity);
|
|
56
|
+
const isSingleLabel = variant === 'label';
|
|
57
|
+
const soloPopupTheme = theme.endsWith('-hc') ? 'dark-hc' : 'dark';
|
|
58
|
+
React.useEffect(() => {
|
|
59
|
+
onOpenChangeRef.current = onOpenChange;
|
|
60
|
+
}, [onOpenChange]);
|
|
61
|
+
const popoverStyle = React.useMemo(() => {
|
|
62
|
+
const popupPadding = isSingleLabel ? 0 : POPUP_PADDING;
|
|
63
|
+
const popupBorderRadius = isSingleLabel
|
|
64
|
+
? SOLO_LABEL_POPUP_BORDER_RADIUS
|
|
65
|
+
: densityConfig.itemExpandedRadius + popupPadding;
|
|
66
|
+
return Object.assign(Object.assign({}, densityCssProperties), { '--_--popup-padding': `${popupPadding}px`, '--_--popup-border-radius': `${popupBorderRadius}px`, '--_--popup-title-height': `${POPUP_TITLE_BLOCK_HEIGHT}px`, '--g-popup-border-radius': `${popupBorderRadius}px`,
|
|
67
|
+
// Popovers must appear instantly. `PopoverProps` does not expose Popup's
|
|
68
|
+
// `disableTransition`, so the enter/exit animation is disabled here; the
|
|
69
|
+
// style lands on the same `.g-popup` element that owns the transition.
|
|
70
|
+
transition: 'none' });
|
|
71
|
+
}, [densityConfig.itemExpandedRadius, densityCssProperties, isSingleLabel]);
|
|
72
|
+
const popupItemHeight = React.useCallback((item) => isSingleLabel ? SOLO_LABEL_POPUP_ITEM_HEIGHT : utils.getPopupItemHeight(item), [isSingleLabel]);
|
|
73
|
+
const popupItemsHeight = React.useCallback((listItems) => listItems.reduce((sum, item) => sum + popupItemHeight(item), 0), [popupItemHeight]);
|
|
74
|
+
const popoverOffset = React.useMemo(() => getItemPopoverOffset({
|
|
75
|
+
isSingleLabel,
|
|
76
|
+
itemHeight: densityConfig.itemHeight,
|
|
77
|
+
popupRowHeight: constants.POPUP_REGULAR_ITEM_HEIGHT,
|
|
78
|
+
titleHeight: title ? POPUP_TITLE_BLOCK_HEIGHT : 0,
|
|
79
|
+
nested: Boolean(parentPopupNest),
|
|
80
|
+
}), [densityConfig.itemHeight, isSingleLabel, parentPopupNest, title]);
|
|
25
81
|
const registerNestedOpen = React.useCallback((delta) => {
|
|
82
|
+
var _a;
|
|
26
83
|
nestedOpenCountRef.current = Math.max(0, nestedOpenCountRef.current + delta);
|
|
84
|
+
if (nestedOpenCountRef.current === 0 &&
|
|
85
|
+
deferredCloseRef.current &&
|
|
86
|
+
!interactionInsideRef.current) {
|
|
87
|
+
deferredCloseRef.current = false;
|
|
88
|
+
(_a = onOpenChangeRef.current) === null || _a === undefined ? undefined : _a.call(onOpenChangeRef, false);
|
|
89
|
+
}
|
|
27
90
|
}, []);
|
|
28
91
|
const nestContextValue = React.useMemo(() => ({ registerNestedOpen }), [registerNestedOpen]);
|
|
29
92
|
const wrappedOnOpenChange = React.useCallback((next) => {
|
|
30
93
|
if (!next && nestedOpenCountRef.current > 0) {
|
|
94
|
+
deferredCloseRef.current = true;
|
|
31
95
|
return;
|
|
32
96
|
}
|
|
97
|
+
deferredCloseRef.current = false;
|
|
33
98
|
onOpenChange === null || onOpenChange === undefined ? undefined : onOpenChange(next);
|
|
34
99
|
}, [onOpenChange]);
|
|
100
|
+
const markInteractionRegionEntered = React.useCallback(() => {
|
|
101
|
+
interactionInsideRef.current = true;
|
|
102
|
+
deferredCloseRef.current = false;
|
|
103
|
+
}, []);
|
|
104
|
+
const markInteractionRegionLeft = React.useCallback((relatedTarget) => {
|
|
105
|
+
var _a, _b;
|
|
106
|
+
const nextTarget = relatedTarget instanceof Node ? relatedTarget : null;
|
|
107
|
+
const remainsInside = Boolean(nextTarget &&
|
|
108
|
+
(((_a = triggerElementRef.current) === null || _a === undefined ? undefined : _a.contains(nextTarget)) ||
|
|
109
|
+
((_b = popupContentRef.current) === null || _b === undefined ? undefined : _b.contains(nextTarget))));
|
|
110
|
+
if (!remainsInside) {
|
|
111
|
+
interactionInsideRef.current = false;
|
|
112
|
+
}
|
|
113
|
+
}, []);
|
|
35
114
|
const handlePopupContentClick = React.useCallback((event) => {
|
|
36
115
|
event.stopPropagation();
|
|
37
116
|
}, []);
|
|
38
117
|
// Inside a popup list, action items must look like regular menu rows, not floating
|
|
39
118
|
// action buttons (e.g. when an `action` item overflows into the "More" popup).
|
|
40
119
|
const popupItems = React.useMemo(() => items.map((item) => item.type === 'action' ? Object.assign(Object.assign({}, item), { type: 'regular' }) : item), [items]);
|
|
120
|
+
const sourceItemsById = React.useMemo(() => new Map(items.map((item) => [item.id, item])), [items]);
|
|
121
|
+
const selectedPopupItemIndex = React.useMemo(() => {
|
|
122
|
+
if (!highlightCurrentItem) {
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
const index = popupItems.findIndex((item) => presentationCurrent.isItemPresentationCurrent(item, { suppressCurrentItemIds }));
|
|
126
|
+
return index === -1 ? undefined : index;
|
|
127
|
+
}, [highlightCurrentItem, popupItems, suppressCurrentItemIds]);
|
|
41
128
|
if (!popupItems.length) {
|
|
42
129
|
return children;
|
|
43
130
|
}
|
|
44
131
|
const content = (React.createElement(ItemPopupNestContext.ItemPopupNestContext.Provider, { value: nestContextValue },
|
|
45
|
-
React.createElement("div", { className: b('popup-content', { collapsed }), onClick: handlePopupContentClick },
|
|
132
|
+
React.createElement("div", { ref: popupContentRef, className: b('popup-content', { collapsed, 'single-label': isSingleLabel }), onClick: handlePopupContentClick, onMouseEnter: markInteractionRegionEntered, onMouseLeave: (event) => markInteractionRegionLeft(event.relatedTarget), onFocusCapture: markInteractionRegionEntered, onBlurCapture: (event) => markInteractionRegionLeft(event.relatedTarget) },
|
|
46
133
|
title && React.createElement("div", { className: b('popup-title') }, title),
|
|
47
|
-
React.createElement(uikit.List, { items: popupItems, selectedItemIndex:
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
134
|
+
React.createElement(uikit.List, { items: popupItems, selectedItemIndex: selectedPopupItemIndex, itemHeight: popupItemHeight, itemsHeight: popupItemsHeight, itemClassName: b('root-menu-item', itemClassName), virtualized: false, filterable: false, sortable: false, renderItem: (item) => {
|
|
135
|
+
var _a;
|
|
136
|
+
const sourceItem = (_a = sourceItemsById.get(item.id)) !== null && _a !== undefined ? _a : item;
|
|
137
|
+
return (React.createElement(Item.Item, Object.assign({}, item, { rowRef: undefined, qa: undefined, compact: false, menuPopupRow: true, suppressCurrentHighlight: !highlightCurrentItem, suppressCurrentItemIds: suppressCurrentItemIds, className: b('popup-item'), hideIcon: hideIcon, menuPopupHideIcon: nestedPopupHideIcon, stopClickPropagation: !sourceItem.itemWrapper, enableTooltip: false, bringForward: false, popupVisible: false, renderPopupContent: undefined, onOpenChangePopup: undefined, popupRef: undefined, enableQuickAccessPin: !isSingleLabel && enableQuickAccessPin, quickAccessPinItem: sourceItem, onToggleQuickAccess: isSingleLabel ? undefined : onToggleQuickAccess, onItemClick: (_innerItem, _innerCollapsed, event) => {
|
|
138
|
+
var _a;
|
|
139
|
+
if (!sourceItem.current) {
|
|
140
|
+
onOpenChange === null || onOpenChange === undefined ? undefined : onOpenChange(false);
|
|
141
|
+
}
|
|
142
|
+
(_a = (onPopupItemClick !== null && onPopupItemClick !== undefined ? onPopupItemClick : onItemClick)) === null || _a === undefined ? undefined : _a(sourceItem, collapsed, event);
|
|
143
|
+
} })));
|
|
144
|
+
} }))));
|
|
145
|
+
const triggerProps = children.props;
|
|
146
|
+
const trigger = React.cloneElement(children, {
|
|
147
|
+
onMouseEnter: (event) => {
|
|
148
|
+
var _a;
|
|
149
|
+
triggerElementRef.current = event.currentTarget;
|
|
150
|
+
markInteractionRegionEntered();
|
|
151
|
+
(_a = triggerProps.onMouseEnter) === null || _a === undefined ? undefined : _a.call(triggerProps, event);
|
|
152
|
+
},
|
|
153
|
+
onMouseLeave: (event) => {
|
|
154
|
+
var _a;
|
|
155
|
+
markInteractionRegionLeft(event.relatedTarget);
|
|
156
|
+
(_a = triggerProps.onMouseLeave) === null || _a === undefined ? undefined : _a.call(triggerProps, event);
|
|
157
|
+
},
|
|
158
|
+
onFocus: (event) => {
|
|
159
|
+
var _a;
|
|
160
|
+
triggerElementRef.current = event.currentTarget;
|
|
161
|
+
markInteractionRegionEntered();
|
|
162
|
+
(_a = triggerProps.onFocus) === null || _a === undefined ? undefined : _a.call(triggerProps, event);
|
|
163
|
+
},
|
|
164
|
+
onBlur: (event) => {
|
|
165
|
+
var _a;
|
|
166
|
+
markInteractionRegionLeft(event.relatedTarget);
|
|
167
|
+
(_a = triggerProps.onBlur) === null || _a === undefined ? undefined : _a.call(triggerProps, event);
|
|
168
|
+
},
|
|
169
|
+
});
|
|
54
170
|
return (React.createElement(uikit.Popover, { disabled: disabled, open: open, onOpenChange: (nextOpen) => {
|
|
55
171
|
if (nextOpen && disabled)
|
|
56
172
|
return;
|
|
57
173
|
wrappedOnOpenChange(nextOpen);
|
|
58
|
-
}, placement: isSingleLabel ? 'right' : 'right-start', strategy: "fixed", openDelay: DEFAULT_POPUP_DELAY, closeDelay: DEFAULT_POPUP_DELAY, offset: popoverOffset, enableSafePolygon: true, className: b('icon-popover', { 'item-type': type }), content: content },
|
|
174
|
+
}, placement: isSingleLabel ? 'right' : 'right-start', strategy: "fixed", openDelay: DEFAULT_POPUP_DELAY, closeDelay: DEFAULT_POPUP_DELAY, offset: popoverOffset, enableSafePolygon: true, className: b('icon-popover', { 'item-type': type, 'single-label': isSingleLabel }, isSingleLabel ? `g-root g-root_theme_${soloPopupTheme}` : undefined), style: popoverStyle, content: content }, trigger));
|
|
59
175
|
};
|
|
60
176
|
ItemPopup.displayName = 'ItemPopup';
|
|
61
177
|
|
|
62
178
|
exports.ItemPopup = ItemPopup;
|
|
179
|
+
exports.getItemPopoverOffset = getItemPopoverOffset;
|
|
63
180
|
//# sourceMappingURL=ItemPopup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ItemPopup.js","sources":["../../../../../../../../src/components/AsideHeader/components/CompositeBar/Item/ItemPopup.tsx"],"sourcesContent":["import React from 'react';\n\nimport {List, Popover, PopupProps} from '@gravity-ui/uikit';\n\nimport {createBlock} from '../../../../utils/cn';\nimport {AsideHeaderItem} from '../../../types';\nimport {getPopupItemHeight, getPopupItemsHeight, getSelectedItemIndex} from '../utils';\n\nimport {Item} from './Item';\nimport {ItemPopupNestContext} from './ItemPopupNestContext';\n\nimport styles from './Item.module.scss';\n\nconst b = createBlock('composite-bar-item', styles);\n\nconst POPUP_MAIN_AXIS_OFFSET = 14;\nconst POPUP_CROSS_AXIS_OFFSET_WITH_TITLE = -30;\nconst POPUP_CROSS_AXIS_OFFSET_WITHOUT_TITLE = 0;\n\nconst DEFAULT_POPUP_DELAY = 100;\n\ninterface Props {\n items: AsideHeaderItem[];\n /** Optional title rendered at the top of the popup. */\n title?: string;\n open?: boolean;\n disabled?: boolean;\n type?: string;\n collapsed?: boolean;\n hideIcon?: boolean;\n itemClassName?: string;\n children: React.ReactElement;\n onOpenChange?: (open: boolean) => void;\n onPopupItemClick?: AsideHeaderItem['onItemClick'];\n onItemClick?: AsideHeaderItem['onItemClick'];\n}\n\nexport const ItemPopup: React.FC<Props> = ({\n items,\n itemClassName,\n title,\n open,\n disabled,\n type,\n collapsed = false,\n hideIcon = false,\n children,\n onPopupItemClick,\n onItemClick,\n onOpenChange,\n}) => {\n const nestedOpenCountRef = React.useRef(0);\n\n const popoverOffset = React.useMemo<NonNullable<PopupProps['offset']>>(\n () => ({\n mainAxis: POPUP_MAIN_AXIS_OFFSET,\n crossAxis: title\n ? POPUP_CROSS_AXIS_OFFSET_WITH_TITLE\n : POPUP_CROSS_AXIS_OFFSET_WITHOUT_TITLE,\n }),\n [title],\n );\n\n const isSingleLabel = !title && items.length === 1;\n\n const registerNestedOpen = React.useCallback((delta: number) => {\n nestedOpenCountRef.current = Math.max(0, nestedOpenCountRef.current + delta);\n }, []);\n\n const nestContextValue = React.useMemo(() => ({registerNestedOpen}), [registerNestedOpen]);\n\n const wrappedOnOpenChange = React.useCallback(\n (next: boolean) => {\n if (!next && nestedOpenCountRef.current > 0) {\n return;\n }\n\n onOpenChange?.(next);\n },\n [onOpenChange],\n );\n\n const handlePopupContentClick = React.useCallback((event: React.MouseEvent<HTMLDivElement>) => {\n event.stopPropagation();\n }, []);\n\n // Inside a popup list, action items must look like regular menu rows, not floating\n // action buttons (e.g. when an `action` item overflows into the \"More\" popup).\n const popupItems = React.useMemo(\n () =>\n items.map((item) =>\n item.type === 'action' ? {...item, type: 'regular' as const} : item,\n ),\n [items],\n );\n\n if (!popupItems.length) {\n return children;\n }\n\n const content = (\n <ItemPopupNestContext.Provider value={nestContextValue}>\n <div className={b('popup-content', {collapsed})} onClick={handlePopupContentClick}>\n {title && <div className={b('popup-title')}>{title}</div>}\n <List\n items={popupItems}\n selectedItemIndex={getSelectedItemIndex(popupItems)}\n itemHeight={getPopupItemHeight}\n itemsHeight={getPopupItemsHeight}\n itemClassName={b('root-menu-item', itemClassName)}\n virtualized={false}\n filterable={false}\n sortable={false}\n renderItem={(item) => (\n <Item\n {...item}\n qa={undefined}\n compact={false}\n className={b('popup-item')}\n hideIcon={hideIcon}\n stopClickPropagation={!item.itemWrapper}\n enableTooltip={false}\n bringForward={false}\n popupVisible={false}\n renderPopupContent={undefined}\n onOpenChangePopup={undefined}\n popupRef={undefined}\n onItemClick={(_innerItem, _innerCollapsed, event) => {\n if (!item.current) {\n onOpenChange?.(false);\n }\n\n (onPopupItemClick ?? onItemClick)?.(item, collapsed, event);\n }}\n />\n )}\n />\n </div>\n </ItemPopupNestContext.Provider>\n );\n\n return (\n <Popover\n disabled={disabled}\n open={open}\n onOpenChange={(nextOpen) => {\n if (nextOpen && disabled) return;\n wrappedOnOpenChange(nextOpen);\n }}\n placement={isSingleLabel ? 'right' : 'right-start'}\n strategy=\"fixed\"\n openDelay={DEFAULT_POPUP_DELAY}\n closeDelay={DEFAULT_POPUP_DELAY}\n offset={popoverOffset}\n enableSafePolygon\n className={b('icon-popover', {'item-type': type})}\n content={content}\n >\n {children}\n </Popover>\n );\n};\n\nItemPopup.displayName = 'ItemPopup';\n"],"names":["createBlock","styles","ItemPopupNestContext","List","getSelectedItemIndex","getPopupItemHeight","getPopupItemsHeight","Item","Popover"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ItemPopup.js","sources":["../../../../../../../../src/components/AsideHeader/components/CompositeBar/Item/ItemPopup.tsx"],"sourcesContent":["import React from 'react';\n\nimport {List, Popover, PopupProps, useThemeValue} from '@gravity-ui/uikit';\n\nimport {POPUP_REGULAR_ITEM_HEIGHT} from '../../../../constants';\nimport {createBlock} from '../../../../utils/cn';\nimport {useSafeAsideHeaderContext} from '../../../AsideHeaderContext';\nimport {getAsideHeaderDensityConfig, getAsideHeaderDensityCssProperties} from '../../../density';\nimport {AsideHeaderItem} from '../../../types';\nimport {isItemPresentationCurrent} from '../presentationCurrent';\nimport {getPopupItemHeight} from '../utils';\n\nimport {Item} from './Item';\nimport type {QuickAccessToggleHandler} from './Item.types';\nimport {ItemPopupNestContext} from './ItemPopupNestContext';\n\nimport styles from './Item.module.scss';\n\nconst b = createBlock('composite-bar-item', styles);\n\nconst POPUP_PADDING = 4;\nconst POPUP_MAIN_AXIS_OFFSET = 14;\n/** Whitespace between the painted borders of two chained popups. */\nconst NESTED_POPUP_GAP = 4;\n/** `.g-popup` paints its border as a 1px shadow spread outside the border box. */\nconst POPUP_SHADOW_RING = 1;\nconst SOLO_LABEL_POPUP_ITEM_HEIGHT = 28;\nconst SOLO_LABEL_POPUP_BORDER_RADIUS = 4;\nconst POPUP_TITLE_BLOCK_HEIGHT = 30;\nconst DEFAULT_POPUP_DELAY = 0;\n\nexport function getItemPopoverOffset({\n isSingleLabel,\n itemHeight,\n popupRowHeight,\n titleHeight = 0,\n nested = false,\n}: {\n isSingleLabel: boolean;\n itemHeight: number;\n popupRowHeight: number;\n titleHeight?: number;\n /** The popup opens from a row inside another popup. */\n nested?: boolean;\n}): NonNullable<PopupProps['offset']> {\n if (isSingleLabel) {\n return {mainAxis: POPUP_MAIN_AXIS_OFFSET, crossAxis: 0};\n }\n\n // A nested popup anchors to a row that sits `POPUP_PADDING` inside the parent popup\n // border box, and both popups paint a shadow ring outside that box. Compensate for\n // both so chained popups keep `NESTED_POPUP_GAP` of whitespace at any density.\n const mainAxis = nested\n ? NESTED_POPUP_GAP + 2 * POPUP_SHADOW_RING + POPUP_PADDING\n : POPUP_MAIN_AXIS_OFFSET;\n const firstRowOffsetInAnchor = (itemHeight - popupRowHeight) / 2;\n\n return {\n mainAxis,\n crossAxis: firstRowOffsetInAnchor - POPUP_PADDING - titleHeight,\n };\n}\n\ninterface Props {\n items: AsideHeaderItem[];\n /** `label` is the minimal popup used by one compact leaf item. */\n variant?: 'menu' | 'label';\n /** Optional title rendered at the top of the popup. */\n title?: string;\n open?: boolean;\n disabled?: boolean;\n type?: string;\n collapsed?: boolean;\n hideIcon?: boolean;\n /** Icon visibility for a child popup opened from a row in this popup. */\n nestedPopupHideIcon?: boolean;\n itemClassName?: string;\n children: React.ReactElement;\n onOpenChange?: (open: boolean) => void;\n onPopupItemClick?: AsideHeaderItem['onItemClick'];\n onItemClick?: AsideHeaderItem['onItemClick'];\n /** Controls selected styling without altering the source items passed to callbacks. */\n highlightCurrentItem?: boolean;\n enableQuickAccessPin?: boolean;\n onToggleQuickAccess?: QuickAccessToggleHandler;\n suppressCurrentItemIds?: ReadonlySet<string>;\n}\n\ntype PopupTriggerInteractionProps = {\n onMouseEnter?: React.MouseEventHandler<HTMLElement>;\n onMouseLeave?: React.MouseEventHandler<HTMLElement>;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n};\n\nexport const ItemPopup: React.FC<Props> = ({\n items,\n variant = 'menu',\n itemClassName,\n title,\n open,\n disabled,\n type,\n collapsed = false,\n hideIcon = false,\n nestedPopupHideIcon,\n children,\n onPopupItemClick,\n onItemClick,\n onOpenChange,\n highlightCurrentItem = true,\n enableQuickAccessPin,\n onToggleQuickAccess,\n suppressCurrentItemIds,\n}) => {\n const asideHeaderContext = useSafeAsideHeaderContext();\n const parentPopupNest = React.useContext(ItemPopupNestContext);\n const theme = useThemeValue();\n const densityConfig = getAsideHeaderDensityConfig(asideHeaderContext?.menuDensity);\n const nestedOpenCountRef = React.useRef(0);\n // A nested portaled popup temporarily blocks the parent's hover-close. Remember that close\n // request and replay it after the child closes, unless the pointer/focus returned to the parent.\n const deferredCloseRef = React.useRef(false);\n const interactionInsideRef = React.useRef(false);\n const popupContentRef = React.useRef<HTMLDivElement>(null);\n const triggerElementRef = React.useRef<HTMLElement | null>(null);\n const onOpenChangeRef = React.useRef(onOpenChange);\n const densityCssProperties = getAsideHeaderDensityCssProperties(\n asideHeaderContext?.menuDensity,\n );\n\n const isSingleLabel = variant === 'label';\n const soloPopupTheme = theme.endsWith('-hc') ? 'dark-hc' : 'dark';\n\n React.useEffect(() => {\n onOpenChangeRef.current = onOpenChange;\n }, [onOpenChange]);\n\n const popoverStyle = React.useMemo(() => {\n const popupPadding = isSingleLabel ? 0 : POPUP_PADDING;\n const popupBorderRadius = isSingleLabel\n ? SOLO_LABEL_POPUP_BORDER_RADIUS\n : densityConfig.itemExpandedRadius + popupPadding;\n\n return {\n ...densityCssProperties,\n '--_--popup-padding': `${popupPadding}px`,\n '--_--popup-border-radius': `${popupBorderRadius}px`,\n '--_--popup-title-height': `${POPUP_TITLE_BLOCK_HEIGHT}px`,\n '--g-popup-border-radius': `${popupBorderRadius}px`,\n // Popovers must appear instantly. `PopoverProps` does not expose Popup's\n // `disableTransition`, so the enter/exit animation is disabled here; the\n // style lands on the same `.g-popup` element that owns the transition.\n transition: 'none',\n } as React.CSSProperties;\n }, [densityConfig.itemExpandedRadius, densityCssProperties, isSingleLabel]);\n\n const popupItemHeight = React.useCallback(\n (item: AsideHeaderItem) =>\n isSingleLabel ? SOLO_LABEL_POPUP_ITEM_HEIGHT : getPopupItemHeight(item),\n [isSingleLabel],\n );\n\n const popupItemsHeight = React.useCallback(\n (listItems: AsideHeaderItem[]) =>\n listItems.reduce((sum, item) => sum + popupItemHeight(item), 0),\n [popupItemHeight],\n );\n\n const popoverOffset = React.useMemo<NonNullable<PopupProps['offset']>>(\n () =>\n getItemPopoverOffset({\n isSingleLabel,\n itemHeight: densityConfig.itemHeight,\n popupRowHeight: POPUP_REGULAR_ITEM_HEIGHT,\n titleHeight: title ? POPUP_TITLE_BLOCK_HEIGHT : 0,\n nested: Boolean(parentPopupNest),\n }),\n [densityConfig.itemHeight, isSingleLabel, parentPopupNest, title],\n );\n\n const registerNestedOpen = React.useCallback((delta: number) => {\n nestedOpenCountRef.current = Math.max(0, nestedOpenCountRef.current + delta);\n\n if (\n nestedOpenCountRef.current === 0 &&\n deferredCloseRef.current &&\n !interactionInsideRef.current\n ) {\n deferredCloseRef.current = false;\n onOpenChangeRef.current?.(false);\n }\n }, []);\n\n const nestContextValue = React.useMemo(() => ({registerNestedOpen}), [registerNestedOpen]);\n\n const wrappedOnOpenChange = React.useCallback(\n (next: boolean) => {\n if (!next && nestedOpenCountRef.current > 0) {\n deferredCloseRef.current = true;\n return;\n }\n\n deferredCloseRef.current = false;\n onOpenChange?.(next);\n },\n [onOpenChange],\n );\n\n const markInteractionRegionEntered = React.useCallback(() => {\n interactionInsideRef.current = true;\n deferredCloseRef.current = false;\n }, []);\n\n const markInteractionRegionLeft = React.useCallback((relatedTarget: EventTarget | null) => {\n const nextTarget = relatedTarget instanceof Node ? relatedTarget : null;\n const remainsInside = Boolean(\n nextTarget &&\n (triggerElementRef.current?.contains(nextTarget) ||\n popupContentRef.current?.contains(nextTarget)),\n );\n\n if (!remainsInside) {\n interactionInsideRef.current = false;\n }\n }, []);\n\n const handlePopupContentClick = React.useCallback((event: React.MouseEvent<HTMLDivElement>) => {\n event.stopPropagation();\n }, []);\n\n // Inside a popup list, action items must look like regular menu rows, not floating\n // action buttons (e.g. when an `action` item overflows into the \"More\" popup).\n const popupItems = React.useMemo(\n () =>\n items.map((item) =>\n item.type === 'action' ? {...item, type: 'regular' as const} : item,\n ),\n [items],\n );\n const sourceItemsById = React.useMemo(\n () => new Map(items.map((item) => [item.id, item])),\n [items],\n );\n const selectedPopupItemIndex = React.useMemo(() => {\n if (!highlightCurrentItem) {\n return undefined;\n }\n\n const index = popupItems.findIndex((item) =>\n isItemPresentationCurrent(item, {suppressCurrentItemIds}),\n );\n\n return index === -1 ? undefined : index;\n }, [highlightCurrentItem, popupItems, suppressCurrentItemIds]);\n\n if (!popupItems.length) {\n return children;\n }\n\n const content = (\n <ItemPopupNestContext.Provider value={nestContextValue}>\n <div\n ref={popupContentRef}\n className={b('popup-content', {collapsed, 'single-label': isSingleLabel})}\n onClick={handlePopupContentClick}\n onMouseEnter={markInteractionRegionEntered}\n onMouseLeave={(event) => markInteractionRegionLeft(event.relatedTarget)}\n onFocusCapture={markInteractionRegionEntered}\n onBlurCapture={(event) => markInteractionRegionLeft(event.relatedTarget)}\n >\n {title && <div className={b('popup-title')}>{title}</div>}\n <List\n items={popupItems}\n selectedItemIndex={selectedPopupItemIndex}\n itemHeight={popupItemHeight}\n itemsHeight={popupItemsHeight}\n itemClassName={b('root-menu-item', itemClassName)}\n virtualized={false}\n filterable={false}\n sortable={false}\n renderItem={(item) => {\n const sourceItem = sourceItemsById.get(item.id) ?? item;\n\n return (\n <Item\n {...item}\n rowRef={undefined}\n qa={undefined}\n compact={false}\n menuPopupRow\n suppressCurrentHighlight={!highlightCurrentItem}\n suppressCurrentItemIds={suppressCurrentItemIds}\n className={b('popup-item')}\n hideIcon={hideIcon}\n menuPopupHideIcon={nestedPopupHideIcon}\n stopClickPropagation={!sourceItem.itemWrapper}\n enableTooltip={false}\n bringForward={false}\n popupVisible={false}\n renderPopupContent={undefined}\n onOpenChangePopup={undefined}\n popupRef={undefined}\n enableQuickAccessPin={!isSingleLabel && enableQuickAccessPin}\n quickAccessPinItem={sourceItem}\n onToggleQuickAccess={\n isSingleLabel ? undefined : onToggleQuickAccess\n }\n onItemClick={(_innerItem, _innerCollapsed, event) => {\n if (!sourceItem.current) {\n onOpenChange?.(false);\n }\n\n (onPopupItemClick ?? onItemClick)?.(\n sourceItem,\n collapsed,\n event,\n );\n }}\n />\n );\n }}\n />\n </div>\n </ItemPopupNestContext.Provider>\n );\n\n const triggerProps = children.props as PopupTriggerInteractionProps;\n const trigger = React.cloneElement(\n children as React.ReactElement<PopupTriggerInteractionProps>,\n {\n onMouseEnter: (event) => {\n triggerElementRef.current = event.currentTarget;\n markInteractionRegionEntered();\n triggerProps.onMouseEnter?.(event);\n },\n onMouseLeave: (event) => {\n markInteractionRegionLeft(event.relatedTarget);\n triggerProps.onMouseLeave?.(event);\n },\n onFocus: (event) => {\n triggerElementRef.current = event.currentTarget;\n markInteractionRegionEntered();\n triggerProps.onFocus?.(event);\n },\n onBlur: (event) => {\n markInteractionRegionLeft(event.relatedTarget);\n triggerProps.onBlur?.(event);\n },\n },\n );\n\n return (\n <Popover\n disabled={disabled}\n open={open}\n onOpenChange={(nextOpen) => {\n if (nextOpen && disabled) return;\n wrappedOnOpenChange(nextOpen);\n }}\n placement={isSingleLabel ? 'right' : 'right-start'}\n strategy=\"fixed\"\n openDelay={DEFAULT_POPUP_DELAY}\n closeDelay={DEFAULT_POPUP_DELAY}\n offset={popoverOffset}\n enableSafePolygon\n className={b(\n 'icon-popover',\n {'item-type': type, 'single-label': isSingleLabel},\n isSingleLabel ? `g-root g-root_theme_${soloPopupTheme}` : undefined,\n )}\n style={popoverStyle}\n content={content}\n >\n {trigger}\n </Popover>\n );\n};\n\nItemPopup.displayName = 'ItemPopup';\n"],"names":["createBlock","styles","useSafeAsideHeaderContext","ItemPopupNestContext","useThemeValue","getAsideHeaderDensityConfig","getAsideHeaderDensityCssProperties","getPopupItemHeight","POPUP_REGULAR_ITEM_HEIGHT","isItemPresentationCurrent","List","Item","Popover"],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var icons = require('@gravity-ui/icons');
|
|
5
|
+
var uikit = require('@gravity-ui/uikit');
|
|
6
|
+
var cn = require('../../../../utils/cn.js');
|
|
7
|
+
var index = require('../../../i18n/index.js');
|
|
8
|
+
var Item_module = require('./Item.module.scss.js');
|
|
9
|
+
|
|
10
|
+
const b = cn.createBlock('composite-bar-item', Item_module.default);
|
|
11
|
+
const ItemQuickAccessPin = ({ quickAccess, onToggle }) => {
|
|
12
|
+
const label = quickAccess ? index.default('quick_access_unpin') : index.default('quick_access_pin');
|
|
13
|
+
const handleClick = React.useCallback((event) => {
|
|
14
|
+
event.preventDefault();
|
|
15
|
+
event.stopPropagation();
|
|
16
|
+
onToggle(event);
|
|
17
|
+
}, [onToggle]);
|
|
18
|
+
return (React.createElement(uikit.Button, { className: b('quick-access-pin', { pinned: quickAccess }), view: "flat-secondary", size: "s", onClick: handleClick, "aria-label": label, title: label },
|
|
19
|
+
React.createElement(uikit.Button.Icon, null,
|
|
20
|
+
React.createElement(uikit.Icon, { data: quickAccess ? icons.PinFill : icons.Pin }))));
|
|
21
|
+
};
|
|
22
|
+
ItemQuickAccessPin.displayName = 'ItemQuickAccessPin';
|
|
23
|
+
|
|
24
|
+
exports.ItemQuickAccessPin = ItemQuickAccessPin;
|
|
25
|
+
//# sourceMappingURL=ItemQuickAccessPin.js.map
|
package/build/cjs/components/AsideHeader/components/CompositeBar/Item/ItemQuickAccessPin.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ItemQuickAccessPin.js","sources":["../../../../../../../../src/components/AsideHeader/components/CompositeBar/Item/ItemQuickAccessPin.tsx"],"sourcesContent":["import React from 'react';\n\nimport {Pin, PinFill} from '@gravity-ui/icons';\nimport {Button, Icon} from '@gravity-ui/uikit';\n\nimport {createBlock} from '../../../../utils/cn';\nimport i18n from '../../../i18n';\n\nimport styles from './Item.module.scss';\n\nconst b = createBlock('composite-bar-item', styles);\n\ntype ItemQuickAccessPinProps = {\n quickAccess?: boolean;\n onToggle: (event: React.MouseEvent<HTMLButtonElement>) => void;\n};\n\nexport const ItemQuickAccessPin: React.FC<ItemQuickAccessPinProps> = ({quickAccess, onToggle}) => {\n const label = quickAccess ? i18n('quick_access_unpin') : i18n('quick_access_pin');\n const handleClick = React.useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n onToggle(event);\n },\n [onToggle],\n );\n\n return (\n <Button\n className={b('quick-access-pin', {pinned: quickAccess})}\n view=\"flat-secondary\"\n size=\"s\"\n onClick={handleClick}\n aria-label={label}\n title={label}\n >\n <Button.Icon>\n <Icon data={quickAccess ? PinFill : Pin} />\n </Button.Icon>\n </Button>\n );\n};\n\nItemQuickAccessPin.displayName = 'ItemQuickAccessPin';\n"],"names":["createBlock","styles","i18n","Button","Icon","PinFill","Pin"],"mappings":";;;;;;;;;AAUA,MAAM,CAAC,GAAGA,cAAW,CAAC,oBAAoB,EAAEC,mBAAM,CAAC;AAOtC,MAAA,kBAAkB,GAAsC,CAAC,EAAC,WAAW,EAAE,QAAQ,EAAC,KAAI;AAC7F,IAAA,MAAM,KAAK,GAAG,WAAW,GAAGC,aAAI,CAAC,oBAAoB,CAAC,GAAGA,aAAI,CAAC,kBAAkB,CAAC;IACjF,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CACjC,CAAC,KAA0C,KAAI;QAC3C,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;QACvB,QAAQ,CAAC,KAAK,CAAC;AACnB,KAAC,EACD,CAAC,QAAQ,CAAC,CACb;AAED,IAAA,QACI,KAAA,CAAA,aAAA,CAACC,YAAM,EAAA,EACH,SAAS,EAAE,CAAC,CAAC,kBAAkB,EAAE,EAAC,MAAM,EAAE,WAAW,EAAC,CAAC,EACvD,IAAI,EAAC,gBAAgB,EACrB,IAAI,EAAC,GAAG,EACR,OAAO,EAAE,WAAW,EACR,YAAA,EAAA,KAAK,EACjB,KAAK,EAAE,KAAK,EAAA;QAEZ,KAAC,CAAA,aAAA,CAAAA,YAAM,CAAC,IAAI,EAAA,IAAA;AACR,YAAA,KAAA,CAAA,aAAA,CAACC,UAAI,EAAC,EAAA,IAAI,EAAE,WAAW,GAAGC,aAAO,GAAGC,SAAG,GAAI,CACjC,CACT;AAEjB;AAEA,kBAAkB,CAAC,WAAW,GAAG,oBAAoB;;;;"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { AsideHeaderItem } from 'src/components/AsideHeader/types';
|
|
3
|
-
export declare function renderItemTitle(params: Pick<AsideHeaderItem, 'title' | 'rightAdornment'>): React.JSX.Element;
|
|
3
|
+
export declare function renderItemTitle(params: Pick<AsideHeaderItem, 'title' | 'rightAdornment' | 'titleLines'>): React.JSX.Element;
|
|
@@ -6,7 +6,11 @@ var Item_module = require('./Item.module.scss.js');
|
|
|
6
6
|
|
|
7
7
|
const b = cn.createBlock('composite-bar-item', Item_module.default);
|
|
8
8
|
function renderItemTitle(params) {
|
|
9
|
-
|
|
9
|
+
var _a;
|
|
10
|
+
// Preserve the pre-v7 two-line fallback. Consumers opt into the new
|
|
11
|
+
// single-line presentation explicitly with `titleLines: 1`.
|
|
12
|
+
const titleLines = (_a = params.titleLines) !== null && _a !== undefined ? _a : 2;
|
|
13
|
+
let titleNode = (React.createElement("div", { className: b('title-text', { lines: titleLines === 2 ? '2' : undefined }) }, params.title));
|
|
10
14
|
if (params.rightAdornment) {
|
|
11
15
|
titleNode = (React.createElement(React.Fragment, null,
|
|
12
16
|
titleNode,
|
package/build/cjs/components/AsideHeader/components/CompositeBar/Item/renderItemTitle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderItemTitle.js","sources":["../../../../../../../../src/components/AsideHeader/components/CompositeBar/Item/renderItemTitle.tsx"],"sourcesContent":["import React from 'react';\n\nimport {AsideHeaderItem} from 'src/components/AsideHeader/types';\n\nimport {createBlock} from '../../../../utils/cn';\n\nimport styles from './Item.module.scss';\n\nconst b = createBlock('composite-bar-item', styles);\n\nexport function renderItemTitle(params: Pick<AsideHeaderItem, 'title' | 'rightAdornment'
|
|
1
|
+
{"version":3,"file":"renderItemTitle.js","sources":["../../../../../../../../src/components/AsideHeader/components/CompositeBar/Item/renderItemTitle.tsx"],"sourcesContent":["import React from 'react';\n\nimport {AsideHeaderItem} from 'src/components/AsideHeader/types';\n\nimport {createBlock} from '../../../../utils/cn';\n\nimport styles from './Item.module.scss';\n\nconst b = createBlock('composite-bar-item', styles);\n\nexport function renderItemTitle(\n params: Pick<AsideHeaderItem, 'title' | 'rightAdornment' | 'titleLines'>,\n) {\n // Preserve the pre-v7 two-line fallback. Consumers opt into the new\n // single-line presentation explicitly with `titleLines: 1`.\n const titleLines = params.titleLines ?? 2;\n let titleNode = (\n <div className={b('title-text', {lines: titleLines === 2 ? '2' : undefined})}>\n {params.title}\n </div>\n );\n\n if (params.rightAdornment) {\n titleNode = (\n <React.Fragment>\n {titleNode}\n <div className={b('title-adornment')}>{params.rightAdornment}</div>\n </React.Fragment>\n );\n }\n\n return titleNode;\n}\n"],"names":["createBlock","styles"],"mappings":";;;;;;AAQA,MAAM,CAAC,GAAGA,cAAW,CAAC,oBAAoB,EAAEC,mBAAM,CAAC;AAE7C,SAAU,eAAe,CAC3B,MAAwE,EAAA;;;;IAIxE,MAAM,UAAU,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,SAAA,GAAA,EAAA,GAAI,CAAC;AACzC,IAAA,IAAI,SAAS,IACT,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,CAAC,CAAC,YAAY,EAAE,EAAC,KAAK,EAAE,UAAU,KAAK,CAAC,GAAG,GAAG,GAAG,SAAS,EAAC,CAAC,EAAA,EACvE,MAAM,CAAC,KAAK,CACX,CACT;AAED,IAAA,IAAI,MAAM,CAAC,cAAc,EAAE;AACvB,QAAA,SAAS,IACL,KAAC,CAAA,aAAA,CAAA,KAAK,CAAC,QAAQ,EAAA,IAAA;YACV,SAAS;AACV,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,CAAC,CAAC,iBAAiB,CAAC,EAAG,EAAA,MAAM,CAAC,cAAc,CAAO,CACtD,CACpB;;AAGL,IAAA,OAAO,SAAS;AACpB;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar___S-GKS{--_--scrollbar-width:var(--gn-aside-scrollbar-width,8px);--_--scrollbar-thumb-width:var(--gn-aside-scrollbar-thumb-width,4px);flex:1 1 auto;min-height:0;position:relative;width:100%}.ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar___S-GKS:
|
|
1
|
+
.ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar___S-GKS{--_--scrollbar-width:var(--gn-aside-scrollbar-width,8px);--_--scrollbar-thumb-width:var(--gn-aside-scrollbar-thumb-width,4px);flex:1 1 auto;min-height:0;position:relative;width:100%}.ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar___S-GKS:after, .ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar___S-GKS:before{content:"";height:12px;inset-inline:0;opacity:0;pointer-events:none;position:absolute;transition:opacity .3s ease-in-out;z-index:2}.ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar___S-GKS:before{background:linear-gradient(to bottom,var(--g-color-sfx-shadow),transparent);inset-block-start:0}.ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar___S-GKS:after{background:linear-gradient(to top,var(--g-color-sfx-shadow),transparent);inset-block-end:0}.ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar_shadow-end___WH4ZY:after, .ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar_shadow-start___dQ8Jw:before{opacity:.7}.ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar__scrollable-inner___yRIza{-ms-overflow-style:none;height:100%;overflow-y:auto;scrollbar-width:none;width:100%}.ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar__scrollable-inner___yRIza::-webkit-scrollbar{display:none;height:0;width:0}.ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar__scroll-divider___QV96G{background-color:var(--gn-aside-header-divider-horizontal-color,var(--g-color-line-generic));height:1px;inset-inline:0;opacity:0;pointer-events:none;position:absolute;transition:opacity .3s ease-in-out;z-index:2}.ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar__scroll-divider_start___jneED{inset-block-start:0}.ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar__scroll-divider_end___YqNPa{inset-block-end:0}.ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar__scroll-divider_visible___B7td6{opacity:1}.ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar__scrollbar-track___u6MVN{background:var(--gn-aside-scrollbar-track-color,transparent);bottom:0;pointer-events:auto;position:absolute;right:0;top:0;width:var(--_--scrollbar-width);z-index:3}.ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar__scrollbar-thumb___bLf6h{background:var(--gn-aside-scrollbar-handle-color,var(--g-color-base-simple-hover));border-radius:calc(var(--_--scrollbar-thumb-width)/2);opacity:0;position:absolute;right:calc((var(--_--scrollbar-width) - var(--_--scrollbar-thumb-width))/2);top:0;touch-action:none;transition:opacity .15s ease-in-out;width:var(--_--scrollbar-thumb-width)}.ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar___S-GKS:hover .ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar__scrollbar-thumb___bLf6h{opacity:1}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { FC, ReactNode } from 'react';
|
|
2
2
|
type ScrollableWithScrollbarProps = {
|
|
3
3
|
children: ReactNode;
|
|
4
4
|
className?: string;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
*/
|
|
9
|
-
recalcDeps?: React.DependencyList;
|
|
5
|
+
showScrollDividers?: boolean;
|
|
6
|
+
/** Called when scrollable content overflows the allocated height. */
|
|
7
|
+
onOverflowChange?: (overflows: boolean) => void;
|
|
10
8
|
};
|
|
11
9
|
export declare const ScrollableWithScrollbar: FC<ScrollableWithScrollbarProps>;
|
|
12
10
|
export {};
|
|
@@ -3,19 +3,28 @@ import './ScrollableWithScrollbar.css';
|
|
|
3
3
|
|
|
4
4
|
var React = require('react');
|
|
5
5
|
var cn = require('../../../../utils/cn.js');
|
|
6
|
+
var AsideDivider = require('../../AsideDivider.js');
|
|
6
7
|
var useScrollableScrollbarSync = require('./useScrollableScrollbarSync.js');
|
|
7
8
|
var ScrollableWithScrollbar_module = require('./ScrollableWithScrollbar.module.scss.js');
|
|
8
9
|
|
|
9
10
|
const b = cn.createBlock('scrollable-with-scrollbar', ScrollableWithScrollbar_module.default);
|
|
10
|
-
const EMPTY_DEPS = [];
|
|
11
11
|
// Hides the native scrollbar and renders a custom thumb synced with the
|
|
12
12
|
// underlying scroll position. The scroll itself stays native (wheel / touch /
|
|
13
13
|
// keyboard) — only the visual indicator and drag handling are custom, so the
|
|
14
14
|
// reserved gutter width is identical across OS / browser scrollbar settings.
|
|
15
|
-
const ScrollableWithScrollbar = ({ children, className,
|
|
16
|
-
const { scrollRef, trackRef, thumbRef,
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
const ScrollableWithScrollbar = ({ children, className, showScrollDividers = false, onOverflowChange, }) => {
|
|
16
|
+
const { scrollRef, trackRef, thumbRef, overflows, canScrollUp, canScrollDown, thumb, scheduleUpdate, handleThumbPointerDown, handleTrackPointerDown, } = useScrollableScrollbarSync.useScrollableScrollbarSync();
|
|
17
|
+
React.useEffect(() => {
|
|
18
|
+
onOverflowChange === null || onOverflowChange === undefined ? undefined : onOverflowChange(overflows);
|
|
19
|
+
}, [onOverflowChange, overflows]);
|
|
20
|
+
React.useEffect(() => {
|
|
21
|
+
return () => onOverflowChange === null || onOverflowChange === undefined ? undefined : onOverflowChange(false);
|
|
22
|
+
}, [onOverflowChange]);
|
|
23
|
+
return (React.createElement("div", { className: b({ 'shadow-start': canScrollUp, 'shadow-end': canScrollDown }, className) },
|
|
24
|
+
React.createElement("div", { ref: scrollRef, className: b('scrollable-inner'), onScroll: scheduleUpdate, "data-gn-aside-scrollport": true }, children),
|
|
25
|
+
showScrollDividers && (React.createElement(React.Fragment, null,
|
|
26
|
+
React.createElement(AsideDivider.AsideDivider, { transitionId: "scroll-start", className: b('scroll-divider', { start: true, visible: canScrollUp }) }),
|
|
27
|
+
React.createElement(AsideDivider.AsideDivider, { transitionId: "scroll-end", className: b('scroll-divider', { end: true, visible: canScrollDown }) }))),
|
|
19
28
|
overflows ? (React.createElement("div", { ref: trackRef, className: b('scrollbar-track'), onPointerDown: handleTrackPointerDown, "aria-hidden": "true" },
|
|
20
29
|
React.createElement("div", { ref: thumbRef, className: b('scrollbar-thumb'), style: { transform: `translateY(${thumb.top}px)`, height: thumb.height }, onPointerDown: handleThumbPointerDown }))) : null));
|
|
21
30
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollableWithScrollbar.js","sources":["../../../../../../../../src/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.tsx"],"sourcesContent":["import React, {FC, ReactNode} from 'react';\n\nimport {createBlock} from '../../../../utils/cn';\n\nimport {useScrollableScrollbarSync} from './useScrollableScrollbarSync';\n\nimport styles from './ScrollableWithScrollbar.module.scss';\n\nconst b = createBlock('scrollable-with-scrollbar', styles);\n\
|
|
1
|
+
{"version":3,"file":"ScrollableWithScrollbar.js","sources":["../../../../../../../../src/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.tsx"],"sourcesContent":["import React, {FC, ReactNode, useEffect} from 'react';\n\nimport {createBlock} from '../../../../utils/cn';\nimport {AsideDivider} from '../../AsideDivider';\n\nimport {useScrollableScrollbarSync} from './useScrollableScrollbarSync';\n\nimport styles from './ScrollableWithScrollbar.module.scss';\n\nconst b = createBlock('scrollable-with-scrollbar', styles);\n\ntype ScrollableWithScrollbarProps = {\n children: ReactNode;\n className?: string;\n showScrollDividers?: boolean;\n /** Called when scrollable content overflows the allocated height. */\n onOverflowChange?: (overflows: boolean) => void;\n};\n\n// Hides the native scrollbar and renders a custom thumb synced with the\n// underlying scroll position. The scroll itself stays native (wheel / touch /\n// keyboard) — only the visual indicator and drag handling are custom, so the\n// reserved gutter width is identical across OS / browser scrollbar settings.\nexport const ScrollableWithScrollbar: FC<ScrollableWithScrollbarProps> = ({\n children,\n className,\n showScrollDividers = false,\n onOverflowChange,\n}) => {\n const {\n scrollRef,\n trackRef,\n thumbRef,\n overflows,\n canScrollUp,\n canScrollDown,\n thumb,\n scheduleUpdate,\n handleThumbPointerDown,\n handleTrackPointerDown,\n } = useScrollableScrollbarSync();\n\n useEffect(() => {\n onOverflowChange?.(overflows);\n }, [onOverflowChange, overflows]);\n\n useEffect(() => {\n return () => onOverflowChange?.(false);\n }, [onOverflowChange]);\n\n return (\n <div className={b({'shadow-start': canScrollUp, 'shadow-end': canScrollDown}, className)}>\n <div\n ref={scrollRef}\n className={b('scrollable-inner')}\n onScroll={scheduleUpdate}\n data-gn-aside-scrollport\n >\n {children}\n </div>\n\n {showScrollDividers && (\n <React.Fragment>\n <AsideDivider\n transitionId=\"scroll-start\"\n className={b('scroll-divider', {start: true, visible: canScrollUp})}\n />\n <AsideDivider\n transitionId=\"scroll-end\"\n className={b('scroll-divider', {end: true, visible: canScrollDown})}\n />\n </React.Fragment>\n )}\n {overflows ? (\n <div\n ref={trackRef}\n className={b('scrollbar-track')}\n onPointerDown={handleTrackPointerDown}\n aria-hidden=\"true\"\n >\n <div\n ref={thumbRef}\n className={b('scrollbar-thumb')}\n style={{transform: `translateY(${thumb.top}px)`, height: thumb.height}}\n onPointerDown={handleThumbPointerDown}\n />\n </div>\n ) : null}\n </div>\n );\n};\n"],"names":["createBlock","styles","useScrollableScrollbarSync","useEffect","AsideDivider"],"mappings":";;;;;;;;AASA,MAAM,CAAC,GAAGA,cAAW,CAAC,2BAA2B,EAAEC,sCAAM,CAAC;AAU1D;AACA;AACA;AACA;AACa,MAAA,uBAAuB,GAAqC,CAAC,EACtE,QAAQ,EACR,SAAS,EACT,kBAAkB,GAAG,KAAK,EAC1B,gBAAgB,GACnB,KAAI;IACD,MAAM,EACF,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,WAAW,EACX,aAAa,EACb,KAAK,EACL,cAAc,EACd,sBAAsB,EACtB,sBAAsB,GACzB,GAAGC,qDAA0B,EAAE;IAEhCC,eAAS,CAAC,MAAK;AACX,QAAA,gBAAgB,aAAhB,gBAAgB,KAAA,SAAA,GAAA,SAAA,GAAhB,gBAAgB,CAAG,SAAS,CAAC;AACjC,KAAC,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;IAEjCA,eAAS,CAAC,MAAK;QACX,OAAO,MAAM,gBAAgB,KAAA,IAAA,IAAhB,gBAAgB,KAAA,SAAA,GAAA,SAAA,GAAhB,gBAAgB,CAAG,KAAK,CAAC;AAC1C,KAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC;AAEtB,IAAA,QACI,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAE,CAAC,CAAC,EAAC,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAC,EAAE,SAAS,CAAC,EAAA;AACpF,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACI,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,CAAC,CAAC,kBAAkB,CAAC,EAChC,QAAQ,EAAE,cAAc,EAAA,0BAAA,EAAA,IAAA,EAAA,EAGvB,QAAQ,CACP;AAEL,QAAA,kBAAkB,KACf,KAAC,CAAA,aAAA,CAAA,KAAK,CAAC,QAAQ,EAAA,IAAA;YACX,KAAC,CAAA,aAAA,CAAAC,yBAAY,IACT,YAAY,EAAC,cAAc,EAC3B,SAAS,EAAE,CAAC,CAAC,gBAAgB,EAAE,EAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAC,CAAC,EACrE,CAAA;YACF,KAAC,CAAA,aAAA,CAAAA,yBAAY,EACT,EAAA,YAAY,EAAC,YAAY,EACzB,SAAS,EAAE,CAAC,CAAC,gBAAgB,EAAE,EAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAC,CAAC,EACrE,CAAA,CACW,CACpB;QACA,SAAS,IACN,6BACI,GAAG,EAAE,QAAQ,EACb,SAAS,EAAE,CAAC,CAAC,iBAAiB,CAAC,EAC/B,aAAa,EAAE,sBAAsB,iBACzB,MAAM,EAAA;AAElB,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACI,GAAG,EAAE,QAAQ,EACb,SAAS,EAAE,CAAC,CAAC,iBAAiB,CAAC,EAC/B,KAAK,EAAE,EAAC,SAAS,EAAE,CAAA,WAAA,EAAc,KAAK,CAAC,GAAG,CAAK,GAAA,CAAA,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAC,EACtE,aAAa,EAAE,sBAAsB,EACvC,CAAA,CACA,IACN,IAAI,CACN;AAEd;;;;"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var styles = {"gn-scrollable-with-scrollbar":"ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar___S-GKS","gnScrollableWithScrollbar":"ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar___S-GKS","gn-scrollable-with-
|
|
5
|
+
var styles = {"gn-scrollable-with-scrollbar":"ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar___S-GKS","gnScrollableWithScrollbar":"ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar___S-GKS","gn-scrollable-with-scrollbar_shadow-start":"ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar_shadow-start___dQ8Jw","gnScrollableWithScrollbarShadowStart":"ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar_shadow-start___dQ8Jw","gn-scrollable-with-scrollbar_shadow-end":"ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar_shadow-end___WH4ZY","gnScrollableWithScrollbarShadowEnd":"ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar_shadow-end___WH4ZY","gn-scrollable-with-scrollbar__scrollable-inner":"ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar__scrollable-inner___yRIza","gnScrollableWithScrollbarScrollableInner":"ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar__scrollable-inner___yRIza","gn-scrollable-with-scrollbar__scroll-divider":"ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar__scroll-divider___QV96G","gnScrollableWithScrollbarScrollDivider":"ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar__scroll-divider___QV96G","gn-scrollable-with-scrollbar__scroll-divider_start":"ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar__scroll-divider_start___jneED","gnScrollableWithScrollbarScrollDividerStart":"ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar__scroll-divider_start___jneED","gn-scrollable-with-scrollbar__scroll-divider_end":"ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar__scroll-divider_end___YqNPa","gnScrollableWithScrollbarScrollDividerEnd":"ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar__scroll-divider_end___YqNPa","gn-scrollable-with-scrollbar__scroll-divider_visible":"ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar__scroll-divider_visible___B7td6","gnScrollableWithScrollbarScrollDividerVisible":"ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar__scroll-divider_visible___B7td6","gn-scrollable-with-scrollbar__scrollbar-track":"ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar__scrollbar-track___u6MVN","gnScrollableWithScrollbarScrollbarTrack":"ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar__scrollbar-track___u6MVN","gn-scrollable-with-scrollbar__scrollbar-thumb":"ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar__scrollbar-thumb___bLf6h","gnScrollableWithScrollbarScrollbarThumb":"ScrollableWithScrollbar-module__gn-scrollable-with-scrollbar__scrollbar-thumb___bLf6h"};
|
|
6
6
|
|
|
7
7
|
exports.default = styles;
|
|
8
8
|
//# sourceMappingURL=ScrollableWithScrollbar.module.scss.js.map
|
|
@@ -7,22 +7,22 @@ type UseScrollableScrollbarSyncResult = {
|
|
|
7
7
|
scrollRef: React.RefObject<HTMLDivElement>;
|
|
8
8
|
trackRef: React.RefObject<HTMLDivElement>;
|
|
9
9
|
thumbRef: React.RefObject<HTMLDivElement>;
|
|
10
|
-
hasContentBelow: boolean;
|
|
11
10
|
overflows: boolean;
|
|
11
|
+
canScrollUp: boolean;
|
|
12
|
+
canScrollDown: boolean;
|
|
12
13
|
thumb: ThumbGeometry;
|
|
13
14
|
scheduleUpdate: () => void;
|
|
14
15
|
handleThumbPointerDown: (event: React.PointerEvent<HTMLDivElement>) => void;
|
|
15
16
|
handleTrackPointerDown: (event: React.PointerEvent<HTMLDivElement>) => void;
|
|
16
17
|
};
|
|
17
18
|
/**
|
|
18
|
-
* Keeps a custom scrollbar thumb
|
|
19
|
-
* scroll
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
19
|
+
* Keeps a custom scrollbar thumb in sync with a native scroll layer. The
|
|
20
|
+
* scroll element handles touch/keyboard; wheel events on the overlay track are
|
|
21
|
+
* forwarded to it (the track sits above the scroller, so they would not scroll
|
|
22
|
+
* otherwise). Wheel, touch, and keyboard on the scrollable area itself are
|
|
23
|
+
* unchanged.
|
|
23
24
|
*
|
|
24
|
-
* @param recalcDeps - extra deps that should trigger thumb/shadow recalculation
|
|
25
25
|
* @returns refs, scroll state, thumb geometry, and pointer handlers for the UI
|
|
26
26
|
*/
|
|
27
|
-
export declare function useScrollableScrollbarSync(
|
|
27
|
+
export declare function useScrollableScrollbarSync(): UseScrollableScrollbarSyncResult;
|
|
28
28
|
export {};
|