@gravity-ui/navigation 6.5.1 → 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/allPagesEditDisplay.d.ts +2 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/allPagesEditDisplay.js +5 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/allPagesEditDisplay.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 +11 -4
- package/build/docs/components/AsideHeader.md +244 -51
- 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/allPagesEditDisplay.d.ts +2 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/allPagesEditDisplay.js +5 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/allPagesEditDisplay.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 +11 -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
|
@@ -2,25 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
var React = require('react');
|
|
4
4
|
|
|
5
|
-
const EMPTY_DEPS = [];
|
|
6
5
|
const MIN_THUMB_HEIGHT = 24;
|
|
7
6
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
* A fractional container height can make the integer scrollHeight exceed clientHeight
|
|
8
|
+
* by this many pixels. Such a delta is sub-pixel rounding, not meaningfully scrollable
|
|
9
|
+
* content, so it is not reported as overflow.
|
|
10
|
+
*/
|
|
11
|
+
const SUBPIXEL_OVERFLOW_PX = 1;
|
|
12
|
+
/**
|
|
13
|
+
* Keeps a custom scrollbar thumb in sync with a native scroll layer. The
|
|
14
|
+
* scroll element handles touch/keyboard; wheel events on the overlay track are
|
|
15
|
+
* forwarded to it (the track sits above the scroller, so they would not scroll
|
|
16
|
+
* otherwise). Wheel, touch, and keyboard on the scrollable area itself are
|
|
17
|
+
* unchanged.
|
|
13
18
|
*
|
|
14
|
-
* @param recalcDeps - extra deps that should trigger thumb/shadow recalculation
|
|
15
19
|
* @returns refs, scroll state, thumb geometry, and pointer handlers for the UI
|
|
16
20
|
*/
|
|
17
|
-
function useScrollableScrollbarSync(
|
|
21
|
+
function useScrollableScrollbarSync() {
|
|
18
22
|
const scrollRef = React.useRef(null);
|
|
19
23
|
const trackRef = React.useRef(null);
|
|
20
24
|
const thumbRef = React.useRef(null);
|
|
21
|
-
const [hasContentBelow, setHasContentBelow] = React.useState(false);
|
|
22
25
|
const [overflows, setOverflows] = React.useState(false);
|
|
23
|
-
const [
|
|
26
|
+
const [geometry, setGeometry] = React.useState({
|
|
27
|
+
thumb: { top: 0, height: 0 },
|
|
28
|
+
canScrollUp: false,
|
|
29
|
+
canScrollDown: false,
|
|
30
|
+
});
|
|
31
|
+
const updateGeometry = React.useCallback((next) => {
|
|
32
|
+
setGeometry((previous) => previous.thumb.top === next.thumb.top &&
|
|
33
|
+
previous.thumb.height === next.thumb.height &&
|
|
34
|
+
previous.canScrollUp === next.canScrollUp &&
|
|
35
|
+
previous.canScrollDown === next.canScrollDown
|
|
36
|
+
? previous
|
|
37
|
+
: next);
|
|
38
|
+
}, []);
|
|
24
39
|
const rafIdRef = React.useRef(null);
|
|
25
40
|
const scheduleUpdate = React.useCallback(() => {
|
|
26
41
|
if (rafIdRef.current !== null) {
|
|
@@ -32,39 +47,64 @@ function useScrollableScrollbarSync(recalcDeps = EMPTY_DEPS) {
|
|
|
32
47
|
if (!el) {
|
|
33
48
|
return;
|
|
34
49
|
}
|
|
35
|
-
const {
|
|
36
|
-
const isOverflowing = scrollHeight >
|
|
37
|
-
// `-1` guards against subpixel rounding at the bottom.
|
|
38
|
-
const notAtBottom = scrollTop + clientHeight < scrollHeight - 1;
|
|
50
|
+
const { scrollHeight, clientHeight } = el;
|
|
51
|
+
const isOverflowing = scrollHeight - clientHeight > SUBPIXEL_OVERFLOW_PX;
|
|
39
52
|
setOverflows(isOverflowing);
|
|
40
|
-
setHasContentBelow(isOverflowing && notAtBottom);
|
|
41
53
|
if (!isOverflowing) {
|
|
42
|
-
|
|
54
|
+
updateGeometry({
|
|
55
|
+
thumb: { top: 0, height: 0 },
|
|
56
|
+
canScrollUp: false,
|
|
57
|
+
canScrollDown: false,
|
|
58
|
+
});
|
|
43
59
|
return;
|
|
44
60
|
}
|
|
45
61
|
const ratio = clientHeight / scrollHeight;
|
|
46
62
|
const rawHeight = clientHeight * ratio;
|
|
47
63
|
const height = Math.max(rawHeight, MIN_THUMB_HEIGHT);
|
|
48
64
|
const maxTop = clientHeight - height;
|
|
65
|
+
const { scrollTop } = el;
|
|
49
66
|
const scrollRatio = scrollHeight - clientHeight > 0 ? scrollTop / (scrollHeight - clientHeight) : 0;
|
|
50
67
|
const top = maxTop * scrollRatio;
|
|
51
|
-
|
|
68
|
+
updateGeometry({
|
|
69
|
+
thumb: { top, height },
|
|
70
|
+
canScrollUp: isOverflowing && scrollTop > SUBPIXEL_OVERFLOW_PX,
|
|
71
|
+
canScrollDown: isOverflowing && scrollHeight - clientHeight - scrollTop > SUBPIXEL_OVERFLOW_PX,
|
|
72
|
+
});
|
|
52
73
|
});
|
|
53
|
-
}, []);
|
|
74
|
+
}, [updateGeometry]);
|
|
54
75
|
React.useEffect(() => {
|
|
55
76
|
const el = scrollRef.current;
|
|
56
77
|
if (!el) {
|
|
57
78
|
return undefined;
|
|
58
79
|
}
|
|
59
80
|
scheduleUpdate();
|
|
60
|
-
|
|
61
|
-
|
|
81
|
+
// `ResizeObserver` is missing in jsdom, so keep it optional: the mutation
|
|
82
|
+
// observer below is set up either way.
|
|
83
|
+
const observer = typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(scheduleUpdate);
|
|
84
|
+
observer === null || observer === undefined ? undefined : observer.observe(el);
|
|
85
|
+
// Observe the direct content child as well: its content-box changes whenever
|
|
86
|
+
// the rendered content changes (rows, titles, adornments, groups, density).
|
|
87
|
+
const contentEl = el.firstElementChild;
|
|
88
|
+
if (contentEl) {
|
|
89
|
+
observer === null || observer === undefined ? undefined : observer.observe(contentEl);
|
|
62
90
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
//
|
|
67
|
-
|
|
91
|
+
// Content can also change without resizing any observed box: the collapse-mode
|
|
92
|
+
// menu resizes its content wrapper via an inline style (AutoSizer), which
|
|
93
|
+
// changes scrollHeight while every observed box stays the same, leaving the
|
|
94
|
+
// overflow state stale. Re-measure on content mutations too (rAF-throttled
|
|
95
|
+
// by scheduleUpdate).
|
|
96
|
+
const mutationObserver = new MutationObserver(scheduleUpdate);
|
|
97
|
+
mutationObserver.observe(el, {
|
|
98
|
+
childList: true,
|
|
99
|
+
subtree: true,
|
|
100
|
+
characterData: true,
|
|
101
|
+
attributes: true,
|
|
102
|
+
});
|
|
103
|
+
return () => {
|
|
104
|
+
observer === null || observer === undefined ? undefined : observer.disconnect();
|
|
105
|
+
mutationObserver.disconnect();
|
|
106
|
+
};
|
|
107
|
+
}, [scheduleUpdate]);
|
|
68
108
|
React.useEffect(() => {
|
|
69
109
|
return () => {
|
|
70
110
|
if (rafIdRef.current !== null) {
|
|
@@ -155,17 +195,12 @@ function useScrollableScrollbarSync(recalcDeps = EMPTY_DEPS) {
|
|
|
155
195
|
behavior: 'auto',
|
|
156
196
|
});
|
|
157
197
|
}, [cancelProgrammaticSmoothScroll]);
|
|
158
|
-
return {
|
|
159
|
-
scrollRef,
|
|
198
|
+
return Object.assign(Object.assign({ scrollRef,
|
|
160
199
|
trackRef,
|
|
161
200
|
thumbRef,
|
|
162
|
-
|
|
163
|
-
overflows,
|
|
164
|
-
thumb,
|
|
165
|
-
scheduleUpdate,
|
|
201
|
+
overflows }, geometry), { scheduleUpdate,
|
|
166
202
|
handleThumbPointerDown,
|
|
167
|
-
handleTrackPointerDown
|
|
168
|
-
};
|
|
203
|
+
handleTrackPointerDown });
|
|
169
204
|
}
|
|
170
205
|
|
|
171
206
|
exports.useScrollableScrollbarSync = useScrollableScrollbarSync;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useScrollableScrollbarSync.js","sources":["../../../../../../../../src/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollableScrollbarSync.ts"],"sourcesContent":["import React, {useCallback, useEffect, useLayoutEffect, useRef, useState} from 'react';\n\nconst EMPTY_DEPS: React.DependencyList = [];\n\nconst MIN_THUMB_HEIGHT = 24;\n\ntype ThumbGeometry = {\n top: number;\n height: number;\n};\n\ntype UseScrollableScrollbarSyncResult = {\n scrollRef: React.RefObject<HTMLDivElement>;\n trackRef: React.RefObject<HTMLDivElement>;\n thumbRef: React.RefObject<HTMLDivElement>;\n hasContentBelow: boolean;\n overflows: boolean;\n thumb: ThumbGeometry;\n scheduleUpdate: () => void;\n handleThumbPointerDown: (event: React.PointerEvent<HTMLDivElement>) => void;\n handleTrackPointerDown: (event: React.PointerEvent<HTMLDivElement>) => void;\n};\n\n/**\n * Keeps a custom scrollbar thumb and bottom shadow in sync with a native\n * scroll layer. The scroll element handles touch/keyboard; wheel events on the\n * overlay track are forwarded to it (the track sits above the scroller, so\n * they would not scroll otherwise). Wheel, touch, and keyboard on the\n * scrollable area itself are unchanged.\n *\n * @param recalcDeps - extra deps that should trigger thumb/shadow recalculation\n * @returns refs, scroll state, thumb geometry, and pointer handlers for the UI\n */\nexport function useScrollableScrollbarSync(\n recalcDeps: React.DependencyList = EMPTY_DEPS,\n): UseScrollableScrollbarSyncResult {\n const scrollRef = useRef<HTMLDivElement>(null);\n const trackRef = useRef<HTMLDivElement>(null);\n const thumbRef = useRef<HTMLDivElement>(null);\n\n const [hasContentBelow, setHasContentBelow] = useState(false);\n const [overflows, setOverflows] = useState(false);\n const [thumb, setThumb] = useState<ThumbGeometry>({top: 0, height: 0});\n\n const rafIdRef = useRef<number | null>(null);\n const scheduleUpdate = useCallback(() => {\n if (rafIdRef.current !== null) {\n return;\n }\n\n rafIdRef.current = requestAnimationFrame(() => {\n rafIdRef.current = null;\n\n const el = scrollRef.current;\n\n if (!el) {\n return;\n }\n\n const {scrollTop, scrollHeight, clientHeight} = el;\n const isOverflowing = scrollHeight > clientHeight;\n // `-1` guards against subpixel rounding at the bottom.\n const notAtBottom = scrollTop + clientHeight < scrollHeight - 1;\n\n setOverflows(isOverflowing);\n setHasContentBelow(isOverflowing && notAtBottom);\n\n if (!isOverflowing) {\n setThumb({top: 0, height: 0});\n return;\n }\n\n const ratio = clientHeight / scrollHeight;\n const rawHeight = clientHeight * ratio;\n const height = Math.max(rawHeight, MIN_THUMB_HEIGHT);\n const maxTop = clientHeight - height;\n const scrollRatio =\n scrollHeight - clientHeight > 0 ? scrollTop / (scrollHeight - clientHeight) : 0;\n const top = maxTop * scrollRatio;\n\n setThumb({top, height});\n });\n }, []);\n\n useEffect(() => {\n const el = scrollRef.current;\n\n if (!el) {\n return undefined;\n }\n\n scheduleUpdate();\n\n if (typeof ResizeObserver === 'undefined') {\n return undefined;\n }\n\n const observer = new ResizeObserver(scheduleUpdate);\n observer.observe(el);\n return () => observer.disconnect();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [scheduleUpdate, ...recalcDeps]);\n\n useEffect(() => {\n return () => {\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n rafIdRef.current = null;\n }\n };\n }, []);\n\n // Wheel events do not reach the native scroll layer when the cursor is over\n // the overlay track — forward them explicitly. `passive: false` is required\n // so `preventDefault` works in all browsers.\n useLayoutEffect(() => {\n if (!overflows) {\n return undefined;\n }\n\n const track = trackRef.current;\n const scrollEl = scrollRef.current;\n\n if (!track || !scrollEl) {\n return undefined;\n }\n\n const onWheel = (e: WheelEvent) => {\n e.preventDefault();\n scrollEl.scrollTop += e.deltaY;\n };\n\n track.addEventListener('wheel', onWheel, {passive: false});\n return () => track.removeEventListener('wheel', onWheel);\n }, [overflows]);\n\n const cancelProgrammaticSmoothScroll = useCallback((scrollEl: HTMLDivElement) => {\n const top = scrollEl.scrollTop;\n scrollEl.scrollTo({top, behavior: 'auto'});\n }, []);\n\n const handleThumbPointerDown = useCallback(\n (event: React.PointerEvent<HTMLDivElement>) => {\n const scrollEl = scrollRef.current;\n const thumbEl = thumbRef.current;\n\n if (!scrollEl || !thumbEl || event.button !== 0) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n cancelProgrammaticSmoothScroll(scrollEl);\n\n const startY = event.clientY;\n const startScrollTop = scrollEl.scrollTop;\n const {scrollHeight, clientHeight} = scrollEl;\n const thumbHeight = thumbEl.getBoundingClientRect().height;\n const trackHeight = clientHeight;\n const maxThumbTop = trackHeight - thumbHeight;\n const maxScrollTop = scrollHeight - clientHeight;\n\n if (maxThumbTop <= 0 || maxScrollTop <= 0) {\n return;\n }\n\n const handlePointerMove = (moveEvent: PointerEvent) => {\n const deltaY = moveEvent.clientY - startY;\n const deltaScroll = (deltaY / maxThumbTop) * maxScrollTop;\n scrollEl.scrollTop = startScrollTop + deltaScroll;\n };\n\n const handlePointerUp = () => {\n window.removeEventListener('pointermove', handlePointerMove);\n window.removeEventListener('pointerup', handlePointerUp);\n window.removeEventListener('pointercancel', handlePointerUp);\n };\n\n window.addEventListener('pointermove', handlePointerMove);\n window.addEventListener('pointerup', handlePointerUp);\n window.addEventListener('pointercancel', handlePointerUp);\n },\n [cancelProgrammaticSmoothScroll],\n );\n\n const handleTrackPointerDown = useCallback(\n (event: React.PointerEvent<HTMLDivElement>) => {\n const scrollEl = scrollRef.current;\n const thumbEl = thumbRef.current;\n\n if (\n !scrollEl ||\n !thumbEl ||\n event.button !== 0 ||\n event.target !== event.currentTarget\n ) {\n return;\n }\n\n cancelProgrammaticSmoothScroll(scrollEl);\n\n const trackRect = event.currentTarget.getBoundingClientRect();\n const thumbHeight = thumbEl.getBoundingClientRect().height;\n const clickY = event.clientY - trackRect.top;\n const targetThumbTop = Math.max(\n 0,\n Math.min(clickY - thumbHeight / 2, trackRect.height - thumbHeight),\n );\n const maxThumbTop = trackRect.height - thumbHeight;\n const maxScrollTop = scrollEl.scrollHeight - scrollEl.clientHeight;\n\n if (maxThumbTop <= 0 || maxScrollTop <= 0) {\n return;\n }\n\n // `auto` avoids racing with a subsequent thumb drag (smooth scroll would\n // still animate while pointer handlers update `scrollTop`).\n scrollEl.scrollTo({\n top: (targetThumbTop / maxThumbTop) * maxScrollTop,\n behavior: 'auto',\n });\n },\n [cancelProgrammaticSmoothScroll],\n );\n\n return {\n scrollRef,\n trackRef,\n thumbRef,\n hasContentBelow,\n overflows,\n thumb,\n scheduleUpdate,\n handleThumbPointerDown,\n handleTrackPointerDown,\n };\n}\n"],"names":["useRef","useState","useCallback","useEffect","useLayoutEffect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useScrollableScrollbarSync.js","sources":["../../../../../../../../src/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollableScrollbarSync.ts"],"sourcesContent":["import React, {useCallback, useEffect, useLayoutEffect, useRef, useState} from 'react';\n\nconst MIN_THUMB_HEIGHT = 24;\n\n/**\n * A fractional container height can make the integer scrollHeight exceed clientHeight\n * by this many pixels. Such a delta is sub-pixel rounding, not meaningfully scrollable\n * content, so it is not reported as overflow.\n */\nconst SUBPIXEL_OVERFLOW_PX = 1;\n\ntype ThumbGeometry = {\n top: number;\n height: number;\n};\n\ntype UseScrollableScrollbarSyncResult = {\n scrollRef: React.RefObject<HTMLDivElement>;\n trackRef: React.RefObject<HTMLDivElement>;\n thumbRef: React.RefObject<HTMLDivElement>;\n overflows: boolean;\n canScrollUp: boolean;\n canScrollDown: boolean;\n thumb: ThumbGeometry;\n scheduleUpdate: () => void;\n handleThumbPointerDown: (event: React.PointerEvent<HTMLDivElement>) => void;\n handleTrackPointerDown: (event: React.PointerEvent<HTMLDivElement>) => void;\n};\n\n/**\n * Keeps a custom scrollbar thumb in sync with a native scroll layer. The\n * scroll element handles touch/keyboard; wheel events on the overlay track are\n * forwarded to it (the track sits above the scroller, so they would not scroll\n * otherwise). Wheel, touch, and keyboard on the scrollable area itself are\n * unchanged.\n *\n * @returns refs, scroll state, thumb geometry, and pointer handlers for the UI\n */\nexport function useScrollableScrollbarSync(): UseScrollableScrollbarSyncResult {\n const scrollRef = useRef<HTMLDivElement>(null);\n const trackRef = useRef<HTMLDivElement>(null);\n const thumbRef = useRef<HTMLDivElement>(null);\n\n const [overflows, setOverflows] = useState(false);\n const [geometry, setGeometry] = useState({\n thumb: {top: 0, height: 0} as ThumbGeometry,\n canScrollUp: false,\n canScrollDown: false,\n });\n\n const updateGeometry = useCallback((next: typeof geometry) => {\n setGeometry((previous) =>\n previous.thumb.top === next.thumb.top &&\n previous.thumb.height === next.thumb.height &&\n previous.canScrollUp === next.canScrollUp &&\n previous.canScrollDown === next.canScrollDown\n ? previous\n : next,\n );\n }, []);\n\n const rafIdRef = useRef<number | null>(null);\n const scheduleUpdate = useCallback(() => {\n if (rafIdRef.current !== null) {\n return;\n }\n\n rafIdRef.current = requestAnimationFrame(() => {\n rafIdRef.current = null;\n\n const el = scrollRef.current;\n\n if (!el) {\n return;\n }\n\n const {scrollHeight, clientHeight} = el;\n const isOverflowing = scrollHeight - clientHeight > SUBPIXEL_OVERFLOW_PX;\n\n setOverflows(isOverflowing);\n\n if (!isOverflowing) {\n updateGeometry({\n thumb: {top: 0, height: 0},\n canScrollUp: false,\n canScrollDown: false,\n });\n return;\n }\n\n const ratio = clientHeight / scrollHeight;\n const rawHeight = clientHeight * ratio;\n const height = Math.max(rawHeight, MIN_THUMB_HEIGHT);\n const maxTop = clientHeight - height;\n const {scrollTop} = el;\n const scrollRatio =\n scrollHeight - clientHeight > 0 ? scrollTop / (scrollHeight - clientHeight) : 0;\n const top = maxTop * scrollRatio;\n\n updateGeometry({\n thumb: {top, height},\n canScrollUp: isOverflowing && scrollTop > SUBPIXEL_OVERFLOW_PX,\n canScrollDown:\n isOverflowing && scrollHeight - clientHeight - scrollTop > SUBPIXEL_OVERFLOW_PX,\n });\n });\n }, [updateGeometry]);\n\n useEffect(() => {\n const el = scrollRef.current;\n\n if (!el) {\n return undefined;\n }\n\n scheduleUpdate();\n\n // `ResizeObserver` is missing in jsdom, so keep it optional: the mutation\n // observer below is set up either way.\n const observer =\n typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(scheduleUpdate);\n observer?.observe(el);\n // Observe the direct content child as well: its content-box changes whenever\n // the rendered content changes (rows, titles, adornments, groups, density).\n const contentEl = el.firstElementChild;\n if (contentEl) {\n observer?.observe(contentEl);\n }\n\n // Content can also change without resizing any observed box: the collapse-mode\n // menu resizes its content wrapper via an inline style (AutoSizer), which\n // changes scrollHeight while every observed box stays the same, leaving the\n // overflow state stale. Re-measure on content mutations too (rAF-throttled\n // by scheduleUpdate).\n const mutationObserver = new MutationObserver(scheduleUpdate);\n mutationObserver.observe(el, {\n childList: true,\n subtree: true,\n characterData: true,\n attributes: true,\n });\n\n return () => {\n observer?.disconnect();\n mutationObserver.disconnect();\n };\n }, [scheduleUpdate]);\n\n useEffect(() => {\n return () => {\n if (rafIdRef.current !== null) {\n cancelAnimationFrame(rafIdRef.current);\n rafIdRef.current = null;\n }\n };\n }, []);\n\n // Wheel events do not reach the native scroll layer when the cursor is over\n // the overlay track — forward them explicitly. `passive: false` is required\n // so `preventDefault` works in all browsers.\n useLayoutEffect(() => {\n if (!overflows) {\n return undefined;\n }\n\n const track = trackRef.current;\n const scrollEl = scrollRef.current;\n\n if (!track || !scrollEl) {\n return undefined;\n }\n\n const onWheel = (e: WheelEvent) => {\n e.preventDefault();\n scrollEl.scrollTop += e.deltaY;\n };\n\n track.addEventListener('wheel', onWheel, {passive: false});\n return () => track.removeEventListener('wheel', onWheel);\n }, [overflows]);\n\n const cancelProgrammaticSmoothScroll = useCallback((scrollEl: HTMLDivElement) => {\n const top = scrollEl.scrollTop;\n scrollEl.scrollTo({top, behavior: 'auto'});\n }, []);\n\n const handleThumbPointerDown = useCallback(\n (event: React.PointerEvent<HTMLDivElement>) => {\n const scrollEl = scrollRef.current;\n const thumbEl = thumbRef.current;\n\n if (!scrollEl || !thumbEl || event.button !== 0) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n cancelProgrammaticSmoothScroll(scrollEl);\n\n const startY = event.clientY;\n const startScrollTop = scrollEl.scrollTop;\n const {scrollHeight, clientHeight} = scrollEl;\n const thumbHeight = thumbEl.getBoundingClientRect().height;\n const trackHeight = clientHeight;\n const maxThumbTop = trackHeight - thumbHeight;\n const maxScrollTop = scrollHeight - clientHeight;\n\n if (maxThumbTop <= 0 || maxScrollTop <= 0) {\n return;\n }\n\n const handlePointerMove = (moveEvent: PointerEvent) => {\n const deltaY = moveEvent.clientY - startY;\n const deltaScroll = (deltaY / maxThumbTop) * maxScrollTop;\n scrollEl.scrollTop = startScrollTop + deltaScroll;\n };\n\n const handlePointerUp = () => {\n window.removeEventListener('pointermove', handlePointerMove);\n window.removeEventListener('pointerup', handlePointerUp);\n window.removeEventListener('pointercancel', handlePointerUp);\n };\n\n window.addEventListener('pointermove', handlePointerMove);\n window.addEventListener('pointerup', handlePointerUp);\n window.addEventListener('pointercancel', handlePointerUp);\n },\n [cancelProgrammaticSmoothScroll],\n );\n\n const handleTrackPointerDown = useCallback(\n (event: React.PointerEvent<HTMLDivElement>) => {\n const scrollEl = scrollRef.current;\n const thumbEl = thumbRef.current;\n\n if (\n !scrollEl ||\n !thumbEl ||\n event.button !== 0 ||\n event.target !== event.currentTarget\n ) {\n return;\n }\n\n cancelProgrammaticSmoothScroll(scrollEl);\n\n const trackRect = event.currentTarget.getBoundingClientRect();\n const thumbHeight = thumbEl.getBoundingClientRect().height;\n const clickY = event.clientY - trackRect.top;\n const targetThumbTop = Math.max(\n 0,\n Math.min(clickY - thumbHeight / 2, trackRect.height - thumbHeight),\n );\n const maxThumbTop = trackRect.height - thumbHeight;\n const maxScrollTop = scrollEl.scrollHeight - scrollEl.clientHeight;\n\n if (maxThumbTop <= 0 || maxScrollTop <= 0) {\n return;\n }\n\n // `auto` avoids racing with a subsequent thumb drag (smooth scroll would\n // still animate while pointer handlers update `scrollTop`).\n scrollEl.scrollTo({\n top: (targetThumbTop / maxThumbTop) * maxScrollTop,\n behavior: 'auto',\n });\n },\n [cancelProgrammaticSmoothScroll],\n );\n\n return {\n scrollRef,\n trackRef,\n thumbRef,\n overflows,\n ...geometry,\n scheduleUpdate,\n handleThumbPointerDown,\n handleTrackPointerDown,\n };\n}\n"],"names":["useRef","useState","useCallback","useEffect","useLayoutEffect"],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export declare const ITEM_TYPE_REGULAR = "regular";
|
|
2
2
|
export declare const COLLAPSE_ITEM_ID = "collapse-item-id";
|
|
3
|
+
export declare const COMPOSITE_BAR_ITEM_ID_ATTRIBUTE = "data-gn-composite-bar-item-id";
|
|
3
4
|
/** Prefix for synthetic CompositeBar row ids for grouped section headers ({@link makeGroupHeaderAsideItem}). */
|
|
4
5
|
export declare const COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX: "__gn-composite-bar__group-header__";
|
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
const ITEM_TYPE_REGULAR = 'regular';
|
|
4
4
|
const COLLAPSE_ITEM_ID = 'collapse-item-id';
|
|
5
|
+
const COMPOSITE_BAR_ITEM_ID_ATTRIBUTE = 'data-gn-composite-bar-item-id';
|
|
5
6
|
/** Prefix for synthetic CompositeBar row ids for grouped section headers ({@link makeGroupHeaderAsideItem}). */
|
|
6
7
|
const COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX = '__gn-composite-bar__group-header__';
|
|
7
8
|
|
|
8
9
|
exports.COLLAPSE_ITEM_ID = COLLAPSE_ITEM_ID;
|
|
9
10
|
exports.COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX = COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX;
|
|
11
|
+
exports.COMPOSITE_BAR_ITEM_ID_ATTRIBUTE = COMPOSITE_BAR_ITEM_ID_ATTRIBUTE;
|
|
10
12
|
exports.ITEM_TYPE_REGULAR = ITEM_TYPE_REGULAR;
|
|
11
13
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sources":["../../../../../../../src/components/AsideHeader/components/CompositeBar/constants.ts"],"sourcesContent":["export const ITEM_TYPE_REGULAR = 'regular';\nexport const COLLAPSE_ITEM_ID = 'collapse-item-id';\n\n/** Prefix for synthetic CompositeBar row ids for grouped section headers ({@link makeGroupHeaderAsideItem}). */\nexport const COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX = '__gn-composite-bar__group-header__' as const;\n"],"names":[],"mappings":";;AAAO,MAAM,iBAAiB,GAAG;AAC1B,MAAM,gBAAgB,GAAG;
|
|
1
|
+
{"version":3,"file":"constants.js","sources":["../../../../../../../src/components/AsideHeader/components/CompositeBar/constants.ts"],"sourcesContent":["export const ITEM_TYPE_REGULAR = 'regular';\nexport const COLLAPSE_ITEM_ID = 'collapse-item-id';\nexport const COMPOSITE_BAR_ITEM_ID_ATTRIBUTE = 'data-gn-composite-bar-item-id';\n\n/** Prefix for synthetic CompositeBar row ids for grouped section headers ({@link makeGroupHeaderAsideItem}). */\nexport const COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX = '__gn-composite-bar__group-header__' as const;\n"],"names":[],"mappings":";;AAAO,MAAM,iBAAiB,GAAG;AAC1B,MAAM,gBAAgB,GAAG;AACzB,MAAM,+BAA+B,GAAG;AAE/C;AACO,MAAM,oCAAoC,GAAG;;;;;;;"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { AsideHeaderItem } from '../../types';
|
|
2
|
+
type PresentationCurrentOptions = {
|
|
3
|
+
suppressCurrentItemIds?: ReadonlySet<string>;
|
|
4
|
+
popupItems?: AsideHeaderItem[];
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Resolves the semantic ids represented by a visually current row. Popup parents aggregate the
|
|
8
|
+
* ids recursively, while synthetic group and More rows contribute only their current descendants.
|
|
9
|
+
*
|
|
10
|
+
* @param item - The row item whose presentation state is being resolved.
|
|
11
|
+
* @param options - Suppression and optional popup children resolved by the caller.
|
|
12
|
+
* @returns Sorted unique ids of unsuppressed current items represented by the row.
|
|
13
|
+
*/
|
|
14
|
+
export declare function getItemPresentationCurrentIds(item: AsideHeaderItem, options?: PresentationCurrentOptions): string[];
|
|
15
|
+
/**
|
|
16
|
+
* Resolves the visual current state without changing the public item. Popup parents aggregate the
|
|
17
|
+
* state recursively, so group and More rows follow the same suppression rules as leaf rows.
|
|
18
|
+
*
|
|
19
|
+
* @param item - The row item whose presentation state is being resolved.
|
|
20
|
+
* @param options - Suppression and optional popup children resolved by the caller.
|
|
21
|
+
* @returns Whether the row or one of its popup descendants should look current.
|
|
22
|
+
*/
|
|
23
|
+
export declare function isItemPresentationCurrent(item: AsideHeaderItem, options?: PresentationCurrentOptions): boolean;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
function collectItemPresentationCurrentIds(item, suppressCurrentItemIds, popupItems, currentIds) {
|
|
4
|
+
if (item.current && !(suppressCurrentItemIds === null || suppressCurrentItemIds === undefined ? undefined : suppressCurrentItemIds.has(item.id))) {
|
|
5
|
+
currentIds.add(item.id);
|
|
6
|
+
}
|
|
7
|
+
popupItems === null || popupItems === undefined ? undefined : popupItems.forEach((popupItem) => {
|
|
8
|
+
collectItemPresentationCurrentIds(popupItem, suppressCurrentItemIds, popupItem.compositeBarMenuPopupItems, currentIds);
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Resolves the semantic ids represented by a visually current row. Popup parents aggregate the
|
|
13
|
+
* ids recursively, while synthetic group and More rows contribute only their current descendants.
|
|
14
|
+
*
|
|
15
|
+
* @param item - The row item whose presentation state is being resolved.
|
|
16
|
+
* @param options - Suppression and optional popup children resolved by the caller.
|
|
17
|
+
* @returns Sorted unique ids of unsuppressed current items represented by the row.
|
|
18
|
+
*/
|
|
19
|
+
function getItemPresentationCurrentIds(item, options = {}) {
|
|
20
|
+
const { suppressCurrentItemIds, popupItems = item.compositeBarMenuPopupItems } = options;
|
|
21
|
+
const currentIds = new Set();
|
|
22
|
+
collectItemPresentationCurrentIds(item, suppressCurrentItemIds, popupItems, currentIds);
|
|
23
|
+
return Array.from(currentIds).sort();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Resolves the visual current state without changing the public item. Popup parents aggregate the
|
|
27
|
+
* state recursively, so group and More rows follow the same suppression rules as leaf rows.
|
|
28
|
+
*
|
|
29
|
+
* @param item - The row item whose presentation state is being resolved.
|
|
30
|
+
* @param options - Suppression and optional popup children resolved by the caller.
|
|
31
|
+
* @returns Whether the row or one of its popup descendants should look current.
|
|
32
|
+
*/
|
|
33
|
+
function isItemPresentationCurrent(item, options = {}) {
|
|
34
|
+
return getItemPresentationCurrentIds(item, options).length > 0;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
exports.getItemPresentationCurrentIds = getItemPresentationCurrentIds;
|
|
38
|
+
exports.isItemPresentationCurrent = isItemPresentationCurrent;
|
|
39
|
+
//# sourceMappingURL=presentationCurrent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentationCurrent.js","sources":["../../../../../../../src/components/AsideHeader/components/CompositeBar/presentationCurrent.ts"],"sourcesContent":["import type {AsideHeaderItem} from '../../types';\n\ntype PresentationCurrentOptions = {\n suppressCurrentItemIds?: ReadonlySet<string>;\n popupItems?: AsideHeaderItem[];\n};\n\nfunction collectItemPresentationCurrentIds(\n item: AsideHeaderItem,\n suppressCurrentItemIds: ReadonlySet<string> | undefined,\n popupItems: AsideHeaderItem[] | undefined,\n currentIds: Set<string>,\n) {\n if (item.current && !suppressCurrentItemIds?.has(item.id)) {\n currentIds.add(item.id);\n }\n\n popupItems?.forEach((popupItem) => {\n collectItemPresentationCurrentIds(\n popupItem,\n suppressCurrentItemIds,\n popupItem.compositeBarMenuPopupItems,\n currentIds,\n );\n });\n}\n\n/**\n * Resolves the semantic ids represented by a visually current row. Popup parents aggregate the\n * ids recursively, while synthetic group and More rows contribute only their current descendants.\n *\n * @param item - The row item whose presentation state is being resolved.\n * @param options - Suppression and optional popup children resolved by the caller.\n * @returns Sorted unique ids of unsuppressed current items represented by the row.\n */\nexport function getItemPresentationCurrentIds(\n item: AsideHeaderItem,\n options: PresentationCurrentOptions = {},\n): string[] {\n const {suppressCurrentItemIds, popupItems = item.compositeBarMenuPopupItems} = options;\n const currentIds = new Set<string>();\n\n collectItemPresentationCurrentIds(item, suppressCurrentItemIds, popupItems, currentIds);\n\n return Array.from(currentIds).sort();\n}\n\n/**\n * Resolves the visual current state without changing the public item. Popup parents aggregate the\n * state recursively, so group and More rows follow the same suppression rules as leaf rows.\n *\n * @param item - The row item whose presentation state is being resolved.\n * @param options - Suppression and optional popup children resolved by the caller.\n * @returns Whether the row or one of its popup descendants should look current.\n */\nexport function isItemPresentationCurrent(\n item: AsideHeaderItem,\n options: PresentationCurrentOptions = {},\n): boolean {\n return getItemPresentationCurrentIds(item, options).length > 0;\n}\n"],"names":[],"mappings":";;AAOA,SAAS,iCAAiC,CACtC,IAAqB,EACrB,sBAAuD,EACvD,UAAyC,EACzC,UAAuB,EAAA;IAEvB,IAAI,IAAI,CAAC,OAAO,IAAI,EAAC,sBAAsB,aAAtB,sBAAsB,KAAA,SAAA,GAAA,SAAA,GAAtB,sBAAsB,CAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,EAAE;AACvD,QAAA,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;;IAG3B,UAAU,KAAA,IAAA,IAAV,UAAU,KAAA,SAAA,GAAA,SAAA,GAAV,UAAU,CAAE,OAAO,CAAC,CAAC,SAAS,KAAI;QAC9B,iCAAiC,CAC7B,SAAS,EACT,sBAAsB,EACtB,SAAS,CAAC,0BAA0B,EACpC,UAAU,CACb;AACL,KAAC,CAAC;AACN;AAEA;;;;;;;AAOG;SACa,6BAA6B,CACzC,IAAqB,EACrB,UAAsC,EAAE,EAAA;IAExC,MAAM,EAAC,sBAAsB,EAAE,UAAU,GAAG,IAAI,CAAC,0BAA0B,EAAC,GAAG,OAAO;AACtF,IAAA,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU;IAEpC,iCAAiC,CAAC,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,UAAU,CAAC;IAEvF,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE;AACxC;AAEA;;;;;;;AAOG;SACa,yBAAyB,CACrC,IAAqB,EACrB,UAAsC,EAAE,EAAA;IAExC,OAAO,6BAA6B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC;AAClE;;;;;"}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { MenuGroup } from '../../../types';
|
|
2
|
+
import { AsideHeaderMenuDensity } from '../../density';
|
|
2
3
|
import { AsideHeaderItem } from '../../types';
|
|
3
4
|
import type { CompositeBarRow } from './grouping';
|
|
4
|
-
|
|
5
|
+
type CompositeBarItemLayoutOptions = {
|
|
6
|
+
/** Collapsed sidebar (icon-only rows): multi-line titles use the regular row height. */
|
|
7
|
+
sidebarCompact?: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare function getItemHeight(compositeItem: AsideHeaderItem, menuDensity?: AsideHeaderMenuDensity, layout?: CompositeBarItemLayoutOptions): number;
|
|
5
10
|
export declare function getPopupItemHeight(compositeItem: AsideHeaderItem): 32 | 50 | 15;
|
|
6
|
-
export declare function getItemsHeight<T extends AsideHeaderItem>(items: T[]): number;
|
|
11
|
+
export declare function getItemsHeight<T extends AsideHeaderItem>(items: T[], menuDensity?: AsideHeaderMenuDensity, layout?: CompositeBarItemLayoutOptions): number;
|
|
7
12
|
export declare function getPopupItemsHeight<T extends AsideHeaderItem>(items: T[]): number;
|
|
8
|
-
export declare function
|
|
9
|
-
export declare function getMoreButtonItem(menuMoreTitle?: string): AsideHeaderItem;
|
|
13
|
+
export declare function getMoreButtonItem(menuMoreTitle?: string, menuDensity?: AsideHeaderMenuDensity): AsideHeaderItem;
|
|
10
14
|
export declare function makeGroupHeaderAsideItem(group: MenuGroup): AsideHeaderItem;
|
|
11
15
|
/**
|
|
12
16
|
* Moves rows whose item has `afterMoreButton` to the end (parity with scroll vs collapse DOM order).
|
|
@@ -15,9 +19,10 @@ export declare function makeGroupHeaderAsideItem(group: MenuGroup): AsideHeaderI
|
|
|
15
19
|
* @returns Rows with `afterMoreButton` item rows last, or the same array reference when none.
|
|
16
20
|
*/
|
|
17
21
|
export declare function getReorderedCompositeBarRows(rows: CompositeBarRow[]): CompositeBarRow[];
|
|
18
|
-
export declare function getCompositeBarRowsMinHeight(rows: CompositeBarRow[]): number;
|
|
19
|
-
export declare function getSelectedCompositeBarRowIndex(rows: CompositeBarRow[]): number | undefined;
|
|
20
|
-
export declare function getAutosizeCompositeBarRows(rows: CompositeBarRow[], height: number, collapseItem: AsideHeaderItem): {
|
|
22
|
+
export declare function getCompositeBarRowsMinHeight(rows: CompositeBarRow[], menuDensity?: AsideHeaderMenuDensity, layout?: CompositeBarItemLayoutOptions): number;
|
|
23
|
+
export declare function getSelectedCompositeBarRowIndex(rows: CompositeBarRow[], suppressCurrentItemIds?: ReadonlySet<string>): number | undefined;
|
|
24
|
+
export declare function getAutosizeCompositeBarRows(rows: CompositeBarRow[], height: number, collapseItem: AsideHeaderItem, menuDensity?: AsideHeaderMenuDensity, layout?: CompositeBarItemLayoutOptions): {
|
|
21
25
|
listRows: CompositeBarRow[];
|
|
22
26
|
collapseItems: AsideHeaderItem[];
|
|
23
27
|
};
|
|
28
|
+
export {};
|
|
@@ -2,16 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
var icons = require('@gravity-ui/icons');
|
|
4
4
|
var constants$1 = require('../../../constants.js');
|
|
5
|
+
var density = require('../../density.js');
|
|
5
6
|
var constants = require('./constants.js');
|
|
7
|
+
var presentationCurrent = require('./presentationCurrent.js');
|
|
6
8
|
|
|
7
|
-
function
|
|
9
|
+
function getRegularItemHeight(compositeItem, menuDensity, layout) {
|
|
10
|
+
const config = density.getAsideHeaderDensityConfig(menuDensity);
|
|
11
|
+
return compositeItem.titleLines === 2 && !(layout === null || layout === undefined ? undefined : layout.sidebarCompact)
|
|
12
|
+
? config.twoLineItemHeight
|
|
13
|
+
: config.itemHeight;
|
|
14
|
+
}
|
|
15
|
+
function getItemHeight(compositeItem, menuDensity = 'default', layout) {
|
|
8
16
|
switch (compositeItem.type) {
|
|
9
17
|
case 'action':
|
|
10
|
-
return
|
|
18
|
+
return density.getAsideHeaderDensityConfig(menuDensity).actionItemHeight;
|
|
11
19
|
case 'divider':
|
|
12
20
|
return 15;
|
|
13
21
|
default:
|
|
14
|
-
return
|
|
22
|
+
return getRegularItemHeight(compositeItem, menuDensity, layout);
|
|
15
23
|
}
|
|
16
24
|
}
|
|
17
25
|
function getPopupItemHeight(compositeItem) {
|
|
@@ -24,15 +32,8 @@ function getPopupItemHeight(compositeItem) {
|
|
|
24
32
|
return constants$1.POPUP_REGULAR_ITEM_HEIGHT;
|
|
25
33
|
}
|
|
26
34
|
}
|
|
27
|
-
function getItemsHeight(items) {
|
|
28
|
-
return items.reduce((sum, item) => sum + getItemHeight(item), 0);
|
|
29
|
-
}
|
|
30
|
-
function getPopupItemsHeight(items) {
|
|
31
|
-
return items.reduce((sum, item) => sum + getPopupItemHeight(item), 0);
|
|
32
|
-
}
|
|
33
|
-
function getSelectedItemIndex(compositeItems) {
|
|
34
|
-
const index = compositeItems.findIndex(({ current }) => Boolean(current));
|
|
35
|
-
return index === -1 ? undefined : index;
|
|
35
|
+
function getItemsHeight(items, menuDensity = 'default', layout) {
|
|
36
|
+
return items.reduce((sum, item) => sum + getItemHeight(item, menuDensity, layout), 0);
|
|
36
37
|
}
|
|
37
38
|
function getPinnedItems(compositeItems) {
|
|
38
39
|
const pinnedItems = [];
|
|
@@ -48,19 +49,21 @@ function getPinnedItems(compositeItems) {
|
|
|
48
49
|
}
|
|
49
50
|
return pinnedItems;
|
|
50
51
|
}
|
|
51
|
-
function getItemsMinHeight(compositeItems) {
|
|
52
|
+
function getItemsMinHeight(compositeItems, menuDensity = 'default', layout) {
|
|
52
53
|
const pinnedItems = getPinnedItems(compositeItems);
|
|
53
54
|
const afterMoreButtonItems = compositeItems.filter(({ afterMoreButton }) => afterMoreButton);
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
(
|
|
55
|
+
const { itemHeight } = density.getAsideHeaderDensityConfig(menuDensity);
|
|
56
|
+
return (getItemsHeight(pinnedItems, menuDensity, layout) +
|
|
57
|
+
getItemsHeight(afterMoreButtonItems, menuDensity, layout) +
|
|
58
|
+
(pinnedItems.length === compositeItems.length ? 0 : itemHeight));
|
|
57
59
|
}
|
|
58
|
-
function getMoreButtonItem(menuMoreTitle) {
|
|
60
|
+
function getMoreButtonItem(menuMoreTitle, menuDensity = 'default') {
|
|
61
|
+
const { iconSize } = density.getAsideHeaderDensityConfig(menuDensity);
|
|
59
62
|
return {
|
|
60
63
|
id: constants.COLLAPSE_ITEM_ID,
|
|
61
64
|
title: menuMoreTitle,
|
|
62
65
|
icon: icons.Ellipsis,
|
|
63
|
-
iconSize
|
|
66
|
+
iconSize,
|
|
64
67
|
};
|
|
65
68
|
}
|
|
66
69
|
function makeGroupHeaderAsideItem(group) {
|
|
@@ -69,8 +72,10 @@ function makeGroupHeaderAsideItem(group) {
|
|
|
69
72
|
title: group.title,
|
|
70
73
|
icon: group.icon,
|
|
71
74
|
iconSize: group.iconSize,
|
|
72
|
-
//
|
|
73
|
-
//
|
|
75
|
+
// `current` comes only from the group itself (its own page), never from
|
|
76
|
+
// children: nested items show their own selection, and the root List row
|
|
77
|
+
// must not highlight the whole group block.
|
|
78
|
+
current: group.current,
|
|
74
79
|
};
|
|
75
80
|
}
|
|
76
81
|
function makeOverflowGroupAsideItem(group, children) {
|
|
@@ -78,15 +83,19 @@ function makeOverflowGroupAsideItem(group, children) {
|
|
|
78
83
|
id: `__gn-composite-bar__group-overflow__${group.id}`,
|
|
79
84
|
title: group.title,
|
|
80
85
|
icon: group.icon,
|
|
86
|
+
iconSize: group.iconSize,
|
|
87
|
+
current: group.current,
|
|
88
|
+
href: group.href,
|
|
89
|
+
onItemClick: group.onItemClick,
|
|
81
90
|
compositeBarMenuPopupItems: children,
|
|
82
91
|
compositeBarMenuPopupTitle: group.popupTitle,
|
|
83
92
|
};
|
|
84
93
|
}
|
|
85
|
-
function getCompositeBarRowLayoutHeight(row) {
|
|
94
|
+
function getCompositeBarRowLayoutHeight(row, menuDensity = 'default', layout) {
|
|
86
95
|
if (row.kind === 'item') {
|
|
87
|
-
return getItemHeight(row.item);
|
|
96
|
+
return getItemHeight(row.item, menuDensity, layout);
|
|
88
97
|
}
|
|
89
|
-
return getItemHeight(makeGroupHeaderAsideItem(row.group));
|
|
98
|
+
return getItemHeight(makeGroupHeaderAsideItem(row.group), menuDensity, layout);
|
|
90
99
|
}
|
|
91
100
|
/**
|
|
92
101
|
* Moves rows whose item has `afterMoreButton` to the end (parity with scroll vs collapse DOM order).
|
|
@@ -114,29 +123,29 @@ function compositeBarRowsToFlatForMinHeight(rows) {
|
|
|
114
123
|
}
|
|
115
124
|
return out;
|
|
116
125
|
}
|
|
117
|
-
function getCompositeBarRowsMinHeight(rows) {
|
|
118
|
-
return getItemsMinHeight(compositeBarRowsToFlatForMinHeight(rows));
|
|
126
|
+
function getCompositeBarRowsMinHeight(rows, menuDensity = 'default', layout) {
|
|
127
|
+
return getItemsMinHeight(compositeBarRowsToFlatForMinHeight(rows), menuDensity, layout);
|
|
119
128
|
}
|
|
120
|
-
function getSelectedCompositeBarRowIndex(rows) {
|
|
129
|
+
function getSelectedCompositeBarRowIndex(rows, suppressCurrentItemIds) {
|
|
121
130
|
const index = rows.findIndex((row) => {
|
|
122
131
|
if (row.kind === 'item') {
|
|
123
|
-
return
|
|
132
|
+
return presentationCurrent.isItemPresentationCurrent(row.item, { suppressCurrentItemIds });
|
|
124
133
|
}
|
|
125
134
|
// Group rows embed their own List; selection is on nested items, not this root row.
|
|
126
135
|
return false;
|
|
127
136
|
});
|
|
128
137
|
return index === -1 ? undefined : index;
|
|
129
138
|
}
|
|
130
|
-
function getAutosizeCompositeBarRows(rows, height, collapseItem) {
|
|
139
|
+
function getAutosizeCompositeBarRows(rows, height, collapseItem, menuDensity = 'default', layout) {
|
|
131
140
|
const ordered = getReorderedCompositeBarRows(rows);
|
|
132
141
|
const afterMoreRows = ordered.filter((r) => r.kind === 'item' && r.item.afterMoreButton);
|
|
133
142
|
const regularRows = ordered.filter((r) => !(r.kind === 'item' && r.item.afterMoreButton));
|
|
134
143
|
const listRows = [...regularRows, ...afterMoreRows];
|
|
135
|
-
const allRowsHeight = listRows.reduce((sum, row) => sum + getCompositeBarRowLayoutHeight(row), 0);
|
|
144
|
+
const allRowsHeight = listRows.reduce((sum, row) => sum + getCompositeBarRowLayoutHeight(row, menuDensity, layout), 0);
|
|
136
145
|
if (allRowsHeight <= height) {
|
|
137
146
|
return { listRows, collapseItems: [] };
|
|
138
147
|
}
|
|
139
|
-
const collapseItemHeight = getItemHeight(collapseItem);
|
|
148
|
+
const collapseItemHeight = getItemHeight(collapseItem, menuDensity, layout);
|
|
140
149
|
listRows.splice(regularRows.length, 0, { kind: 'item', item: collapseItem });
|
|
141
150
|
const collapseItems = [];
|
|
142
151
|
let listHeight = allRowsHeight + collapseItemHeight;
|
|
@@ -159,18 +168,18 @@ function getAutosizeCompositeBarRows(rows, height, collapseItem) {
|
|
|
159
168
|
if (index + 1 < listRows.length &&
|
|
160
169
|
(nextRow === null || nextRow === undefined ? undefined : nextRow.kind) === 'item' &&
|
|
161
170
|
nextRow.item.type === 'divider') {
|
|
162
|
-
listHeight -= getItemHeight(compositeItem);
|
|
171
|
+
listHeight -= getItemHeight(compositeItem, menuDensity, layout);
|
|
163
172
|
listRows.splice(index, 1);
|
|
164
173
|
}
|
|
165
174
|
continue;
|
|
166
175
|
}
|
|
167
|
-
listHeight -= getItemHeight(compositeItem);
|
|
176
|
+
listHeight -= getItemHeight(compositeItem, menuDensity, layout);
|
|
168
177
|
collapseItems.unshift(...listRows
|
|
169
178
|
.splice(index, 1)
|
|
170
179
|
.map((r) => r.item));
|
|
171
180
|
}
|
|
172
181
|
else {
|
|
173
|
-
listHeight -= getCompositeBarRowLayoutHeight(row);
|
|
182
|
+
listHeight -= getCompositeBarRowLayoutHeight(row, menuDensity, layout);
|
|
174
183
|
const [removed] = listRows.splice(index, 1);
|
|
175
184
|
if ((removed === null || removed === undefined ? undefined : removed.kind) === 'group') {
|
|
176
185
|
collapseItems.unshift(makeOverflowGroupAsideItem(removed.group, removed.items));
|
|
@@ -193,9 +202,7 @@ exports.getItemHeight = getItemHeight;
|
|
|
193
202
|
exports.getItemsHeight = getItemsHeight;
|
|
194
203
|
exports.getMoreButtonItem = getMoreButtonItem;
|
|
195
204
|
exports.getPopupItemHeight = getPopupItemHeight;
|
|
196
|
-
exports.getPopupItemsHeight = getPopupItemsHeight;
|
|
197
205
|
exports.getReorderedCompositeBarRows = getReorderedCompositeBarRows;
|
|
198
206
|
exports.getSelectedCompositeBarRowIndex = getSelectedCompositeBarRowIndex;
|
|
199
|
-
exports.getSelectedItemIndex = getSelectedItemIndex;
|
|
200
207
|
exports.makeGroupHeaderAsideItem = makeGroupHeaderAsideItem;
|
|
201
208
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../../../../src/components/AsideHeader/components/CompositeBar/utils.ts"],"sourcesContent":["import {Ellipsis} from '@gravity-ui/icons';\n\nimport {ITEM_HEIGHT, POPUP_REGULAR_ITEM_HEIGHT} from '../../../constants';\nimport {MenuGroup} from '../../../types';\nimport {AsideHeaderItem} from '../../types';\n\nimport {COLLAPSE_ITEM_ID, COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX} from './constants';\nimport type {CompositeBarRow} from './grouping';\n\nexport function getItemHeight(compositeItem: AsideHeaderItem) {\n switch (compositeItem.type) {\n case 'action':\n return 50;\n case 'divider':\n return 15;\n\n default:\n return ITEM_HEIGHT;\n }\n}\n\nexport function getPopupItemHeight(compositeItem: AsideHeaderItem) {\n switch (compositeItem.type) {\n case 'action':\n return 50;\n case 'divider':\n return 15;\n\n default:\n return POPUP_REGULAR_ITEM_HEIGHT;\n }\n}\n\nexport function getItemsHeight<T extends AsideHeaderItem>(items: T[]) {\n return items.reduce((sum, item) => sum + getItemHeight(item), 0);\n}\n\nexport function getPopupItemsHeight<T extends AsideHeaderItem>(items: T[]) {\n return items.reduce((sum, item) => sum + getPopupItemHeight(item), 0);\n}\n\nexport function getSelectedItemIndex(compositeItems: AsideHeaderItem[]) {\n const index = compositeItems.findIndex(({current}) => Boolean(current));\n return index === -1 ? undefined : index;\n}\n\nfunction getPinnedItems(compositeItems: AsideHeaderItem[]) {\n const pinnedItems: AsideHeaderItem[] = [];\n for (const compositeItem of compositeItems) {\n if (compositeItem.pinned) {\n pinnedItems.push(compositeItem);\n } else if (compositeItem.type === 'divider') {\n if (pinnedItems.length > 0 && pinnedItems[pinnedItems.length - 1].type !== 'divider') {\n pinnedItems.push(compositeItem);\n }\n }\n }\n return pinnedItems;\n}\n\nfunction getItemsMinHeight(compositeItems: AsideHeaderItem[]) {\n const pinnedItems = getPinnedItems(compositeItems);\n const afterMoreButtonItems = compositeItems.filter(({afterMoreButton}) => afterMoreButton);\n\n return (\n getItemsHeight(pinnedItems) +\n getItemsHeight(afterMoreButtonItems) +\n (pinnedItems.length === compositeItems.length ? 0 : ITEM_HEIGHT)\n );\n}\n\nexport function getMoreButtonItem(menuMoreTitle?: string): AsideHeaderItem {\n return {\n id: COLLAPSE_ITEM_ID,\n title: menuMoreTitle,\n icon: Ellipsis,\n iconSize: 18,\n };\n}\n\nexport function makeGroupHeaderAsideItem(group: MenuGroup): AsideHeaderItem {\n return {\n id: `${COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX}${group.id}`,\n title: group.title,\n icon: group.icon,\n iconSize: group.iconSize,\n // Do not set `current` from children: only nested items should show selection;\n // otherwise the group header and root List row highlight the whole group block.\n };\n}\n\nfunction makeOverflowGroupAsideItem(\n group: MenuGroup,\n children: AsideHeaderItem[],\n): AsideHeaderItem {\n return {\n id: `__gn-composite-bar__group-overflow__${group.id}`,\n title: group.title,\n icon: group.icon,\n compositeBarMenuPopupItems: children,\n compositeBarMenuPopupTitle: group.popupTitle,\n };\n}\n\nfunction getCompositeBarRowLayoutHeight(row: CompositeBarRow): number {\n if (row.kind === 'item') {\n return getItemHeight(row.item);\n }\n return getItemHeight(makeGroupHeaderAsideItem(row.group));\n}\n\n/**\n * Moves rows whose item has `afterMoreButton` to the end (parity with scroll vs collapse DOM order).\n *\n * @param rows Composite bar rows before ordering.\n * @returns Rows with `afterMoreButton` item rows last, or the same array reference when none.\n */\nexport function getReorderedCompositeBarRows(rows: CompositeBarRow[]): CompositeBarRow[] {\n const afterMoreRows = rows.filter((r) => r.kind === 'item' && r.item.afterMoreButton);\n\n if (afterMoreRows.length === 0) {\n return rows;\n }\n\n const regularRows = rows.filter((r) => !(r.kind === 'item' && r.item.afterMoreButton));\n\n return [...regularRows, ...afterMoreRows];\n}\n\nfunction compositeBarRowsToFlatForMinHeight(rows: CompositeBarRow[]): AsideHeaderItem[] {\n const out: AsideHeaderItem[] = [];\n for (const row of rows) {\n if (row.kind === 'item') {\n out.push(row.item);\n } else {\n out.push(makeGroupHeaderAsideItem(row.group));\n }\n }\n return out;\n}\n\nexport function getCompositeBarRowsMinHeight(rows: CompositeBarRow[]): number {\n return getItemsMinHeight(compositeBarRowsToFlatForMinHeight(rows));\n}\n\nexport function getSelectedCompositeBarRowIndex(rows: CompositeBarRow[]): number | undefined {\n const index = rows.findIndex((row) => {\n if (row.kind === 'item') {\n return Boolean(row.item.current);\n }\n // Group rows embed their own List; selection is on nested items, not this root row.\n return false;\n });\n return index === -1 ? undefined : index;\n}\n\nexport function getAutosizeCompositeBarRows(\n rows: CompositeBarRow[],\n height: number,\n collapseItem: AsideHeaderItem,\n): {\n listRows: CompositeBarRow[];\n collapseItems: AsideHeaderItem[];\n} {\n const ordered = getReorderedCompositeBarRows(rows);\n const afterMoreRows = ordered.filter((r) => r.kind === 'item' && r.item.afterMoreButton);\n const regularRows = ordered.filter((r) => !(r.kind === 'item' && r.item.afterMoreButton));\n const listRows: CompositeBarRow[] = [...regularRows, ...afterMoreRows];\n\n const allRowsHeight = listRows.reduce(\n (sum, row) => sum + getCompositeBarRowLayoutHeight(row),\n 0,\n );\n if (allRowsHeight <= height) {\n return {listRows, collapseItems: []};\n }\n\n const collapseItemHeight = getItemHeight(collapseItem);\n\n listRows.splice(regularRows.length, 0, {kind: 'item', item: collapseItem});\n const collapseItems: AsideHeaderItem[] = [];\n\n let listHeight = allRowsHeight + collapseItemHeight;\n let index = listRows.length;\n while (listHeight > height) {\n if (index === 0) {\n break;\n }\n index--;\n\n const row = listRows[index];\n if (row.kind === 'item') {\n const compositeItem = row.item;\n if (\n compositeItem.pinned ||\n compositeItem.id === COLLAPSE_ITEM_ID ||\n compositeItem.afterMoreButton\n ) {\n continue;\n }\n if (compositeItem.type === 'divider') {\n const nextRow = listRows[index + 1];\n if (\n index + 1 < listRows.length &&\n nextRow?.kind === 'item' &&\n nextRow.item.type === 'divider'\n ) {\n listHeight -= getItemHeight(compositeItem);\n listRows.splice(index, 1);\n }\n continue;\n }\n listHeight -= getItemHeight(compositeItem);\n collapseItems.unshift(\n ...listRows\n .splice(index, 1)\n .map((r) => (r as Extract<CompositeBarRow, {kind: 'item'}>).item),\n );\n } else {\n listHeight -= getCompositeBarRowLayoutHeight(row);\n const [removed] = listRows.splice(index, 1);\n if (removed?.kind === 'group') {\n collapseItems.unshift(makeOverflowGroupAsideItem(removed.group, removed.items));\n }\n }\n }\n const at = listRows[index];\n const prev = listRows[index - 1];\n if (\n at?.kind === 'item' &&\n at.item.type === 'divider' &&\n (index === 0 || (prev?.kind === 'item' && prev.item.type === 'divider'))\n ) {\n listRows.splice(index, 1);\n }\n\n return {listRows, collapseItems};\n}\n"],"names":["ITEM_HEIGHT","POPUP_REGULAR_ITEM_HEIGHT","COLLAPSE_ITEM_ID","Ellipsis","COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../../../../src/components/AsideHeader/components/CompositeBar/utils.ts"],"sourcesContent":["import {Ellipsis} from '@gravity-ui/icons';\n\nimport {POPUP_REGULAR_ITEM_HEIGHT} from '../../../constants';\nimport {MenuGroup} from '../../../types';\nimport {AsideHeaderMenuDensity, getAsideHeaderDensityConfig} from '../../density';\nimport {AsideHeaderItem} from '../../types';\n\nimport {COLLAPSE_ITEM_ID, COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX} from './constants';\nimport type {CompositeBarRow} from './grouping';\nimport {isItemPresentationCurrent} from './presentationCurrent';\n\ntype CompositeBarItemLayoutOptions = {\n /** Collapsed sidebar (icon-only rows): multi-line titles use the regular row height. */\n sidebarCompact?: boolean;\n};\n\nfunction getRegularItemHeight(\n compositeItem: AsideHeaderItem,\n menuDensity: AsideHeaderMenuDensity,\n layout?: CompositeBarItemLayoutOptions,\n) {\n const config = getAsideHeaderDensityConfig(menuDensity);\n\n return compositeItem.titleLines === 2 && !layout?.sidebarCompact\n ? config.twoLineItemHeight\n : config.itemHeight;\n}\n\nexport function getItemHeight(\n compositeItem: AsideHeaderItem,\n menuDensity: AsideHeaderMenuDensity = 'default',\n layout?: CompositeBarItemLayoutOptions,\n) {\n switch (compositeItem.type) {\n case 'action':\n return getAsideHeaderDensityConfig(menuDensity).actionItemHeight;\n case 'divider':\n return 15;\n\n default:\n return getRegularItemHeight(compositeItem, menuDensity, layout);\n }\n}\n\nexport function getPopupItemHeight(compositeItem: AsideHeaderItem) {\n switch (compositeItem.type) {\n case 'action':\n return 50;\n case 'divider':\n return 15;\n\n default:\n return POPUP_REGULAR_ITEM_HEIGHT;\n }\n}\n\nexport function getItemsHeight<T extends AsideHeaderItem>(\n items: T[],\n menuDensity: AsideHeaderMenuDensity = 'default',\n layout?: CompositeBarItemLayoutOptions,\n) {\n return items.reduce((sum, item) => sum + getItemHeight(item, menuDensity, layout), 0);\n}\n\nexport function getPopupItemsHeight<T extends AsideHeaderItem>(items: T[]) {\n return items.reduce((sum, item) => sum + getPopupItemHeight(item), 0);\n}\n\nfunction getPinnedItems(compositeItems: AsideHeaderItem[]) {\n const pinnedItems: AsideHeaderItem[] = [];\n for (const compositeItem of compositeItems) {\n if (compositeItem.pinned) {\n pinnedItems.push(compositeItem);\n } else if (compositeItem.type === 'divider') {\n if (pinnedItems.length > 0 && pinnedItems[pinnedItems.length - 1].type !== 'divider') {\n pinnedItems.push(compositeItem);\n }\n }\n }\n return pinnedItems;\n}\n\nfunction getItemsMinHeight(\n compositeItems: AsideHeaderItem[],\n menuDensity: AsideHeaderMenuDensity = 'default',\n layout?: CompositeBarItemLayoutOptions,\n) {\n const pinnedItems = getPinnedItems(compositeItems);\n const afterMoreButtonItems = compositeItems.filter(({afterMoreButton}) => afterMoreButton);\n const {itemHeight} = getAsideHeaderDensityConfig(menuDensity);\n\n return (\n getItemsHeight(pinnedItems, menuDensity, layout) +\n getItemsHeight(afterMoreButtonItems, menuDensity, layout) +\n (pinnedItems.length === compositeItems.length ? 0 : itemHeight)\n );\n}\n\nexport function getMoreButtonItem(\n menuMoreTitle?: string,\n menuDensity: AsideHeaderMenuDensity = 'default',\n): AsideHeaderItem {\n const {iconSize} = getAsideHeaderDensityConfig(menuDensity);\n\n return {\n id: COLLAPSE_ITEM_ID,\n title: menuMoreTitle,\n icon: Ellipsis,\n iconSize,\n };\n}\n\nexport function makeGroupHeaderAsideItem(group: MenuGroup): AsideHeaderItem {\n return {\n id: `${COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX}${group.id}`,\n title: group.title,\n icon: group.icon,\n iconSize: group.iconSize,\n // `current` comes only from the group itself (its own page), never from\n // children: nested items show their own selection, and the root List row\n // must not highlight the whole group block.\n current: group.current,\n };\n}\n\nfunction makeOverflowGroupAsideItem(\n group: MenuGroup,\n children: AsideHeaderItem[],\n): AsideHeaderItem {\n return {\n id: `__gn-composite-bar__group-overflow__${group.id}`,\n title: group.title,\n icon: group.icon,\n iconSize: group.iconSize,\n current: group.current,\n href: group.href,\n onItemClick: group.onItemClick,\n compositeBarMenuPopupItems: children,\n compositeBarMenuPopupTitle: group.popupTitle,\n };\n}\n\nfunction getCompositeBarRowLayoutHeight(\n row: CompositeBarRow,\n menuDensity: AsideHeaderMenuDensity = 'default',\n layout?: CompositeBarItemLayoutOptions,\n): number {\n if (row.kind === 'item') {\n return getItemHeight(row.item, menuDensity, layout);\n }\n return getItemHeight(makeGroupHeaderAsideItem(row.group), menuDensity, layout);\n}\n\n/**\n * Moves rows whose item has `afterMoreButton` to the end (parity with scroll vs collapse DOM order).\n *\n * @param rows Composite bar rows before ordering.\n * @returns Rows with `afterMoreButton` item rows last, or the same array reference when none.\n */\nexport function getReorderedCompositeBarRows(rows: CompositeBarRow[]): CompositeBarRow[] {\n const afterMoreRows = rows.filter((r) => r.kind === 'item' && r.item.afterMoreButton);\n\n if (afterMoreRows.length === 0) {\n return rows;\n }\n\n const regularRows = rows.filter((r) => !(r.kind === 'item' && r.item.afterMoreButton));\n\n return [...regularRows, ...afterMoreRows];\n}\n\nfunction compositeBarRowsToFlatForMinHeight(rows: CompositeBarRow[]): AsideHeaderItem[] {\n const out: AsideHeaderItem[] = [];\n for (const row of rows) {\n if (row.kind === 'item') {\n out.push(row.item);\n } else {\n out.push(makeGroupHeaderAsideItem(row.group));\n }\n }\n return out;\n}\n\nexport function getCompositeBarRowsMinHeight(\n rows: CompositeBarRow[],\n menuDensity: AsideHeaderMenuDensity = 'default',\n layout?: CompositeBarItemLayoutOptions,\n): number {\n return getItemsMinHeight(compositeBarRowsToFlatForMinHeight(rows), menuDensity, layout);\n}\n\nexport function getSelectedCompositeBarRowIndex(\n rows: CompositeBarRow[],\n suppressCurrentItemIds?: ReadonlySet<string>,\n): number | undefined {\n const index = rows.findIndex((row) => {\n if (row.kind === 'item') {\n return isItemPresentationCurrent(row.item, {suppressCurrentItemIds});\n }\n // Group rows embed their own List; selection is on nested items, not this root row.\n return false;\n });\n return index === -1 ? undefined : index;\n}\n\nexport function getAutosizeCompositeBarRows(\n rows: CompositeBarRow[],\n height: number,\n collapseItem: AsideHeaderItem,\n menuDensity: AsideHeaderMenuDensity = 'default',\n layout?: CompositeBarItemLayoutOptions,\n): {\n listRows: CompositeBarRow[];\n collapseItems: AsideHeaderItem[];\n} {\n const ordered = getReorderedCompositeBarRows(rows);\n const afterMoreRows = ordered.filter((r) => r.kind === 'item' && r.item.afterMoreButton);\n const regularRows = ordered.filter((r) => !(r.kind === 'item' && r.item.afterMoreButton));\n const listRows: CompositeBarRow[] = [...regularRows, ...afterMoreRows];\n\n const allRowsHeight = listRows.reduce(\n (sum, row) => sum + getCompositeBarRowLayoutHeight(row, menuDensity, layout),\n 0,\n );\n if (allRowsHeight <= height) {\n return {listRows, collapseItems: []};\n }\n\n const collapseItemHeight = getItemHeight(collapseItem, menuDensity, layout);\n\n listRows.splice(regularRows.length, 0, {kind: 'item', item: collapseItem});\n const collapseItems: AsideHeaderItem[] = [];\n\n let listHeight = allRowsHeight + collapseItemHeight;\n let index = listRows.length;\n while (listHeight > height) {\n if (index === 0) {\n break;\n }\n index--;\n\n const row = listRows[index];\n if (row.kind === 'item') {\n const compositeItem = row.item;\n if (\n compositeItem.pinned ||\n compositeItem.id === COLLAPSE_ITEM_ID ||\n compositeItem.afterMoreButton\n ) {\n continue;\n }\n if (compositeItem.type === 'divider') {\n const nextRow = listRows[index + 1];\n if (\n index + 1 < listRows.length &&\n nextRow?.kind === 'item' &&\n nextRow.item.type === 'divider'\n ) {\n listHeight -= getItemHeight(compositeItem, menuDensity, layout);\n listRows.splice(index, 1);\n }\n continue;\n }\n listHeight -= getItemHeight(compositeItem, menuDensity, layout);\n collapseItems.unshift(\n ...listRows\n .splice(index, 1)\n .map((r) => (r as Extract<CompositeBarRow, {kind: 'item'}>).item),\n );\n } else {\n listHeight -= getCompositeBarRowLayoutHeight(row, menuDensity, layout);\n const [removed] = listRows.splice(index, 1);\n if (removed?.kind === 'group') {\n collapseItems.unshift(makeOverflowGroupAsideItem(removed.group, removed.items));\n }\n }\n }\n const at = listRows[index];\n const prev = listRows[index - 1];\n if (\n at?.kind === 'item' &&\n at.item.type === 'divider' &&\n (index === 0 || (prev?.kind === 'item' && prev.item.type === 'divider'))\n ) {\n listRows.splice(index, 1);\n }\n\n return {listRows, collapseItems};\n}\n"],"names":["getAsideHeaderDensityConfig","POPUP_REGULAR_ITEM_HEIGHT","COLLAPSE_ITEM_ID","Ellipsis","COMPOSITE_BAR_GROUP_HEADER_ID_PREFIX","isItemPresentationCurrent"],"mappings":"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"}
|