@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
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
|
|
3
|
+
const CollapseAnchorContext = React__default.createContext(undefined);
|
|
4
|
+
// offset geometry deliberately excludes the coordinator's in-flight transforms.
|
|
5
|
+
function layoutTop(element, panel) {
|
|
6
|
+
let top = 0;
|
|
7
|
+
let current = element;
|
|
8
|
+
while (current && current !== panel) {
|
|
9
|
+
top += current.offsetTop;
|
|
10
|
+
current = current.offsetParent;
|
|
11
|
+
}
|
|
12
|
+
// Fixed-position descendants can leave this offset chain. Never treat their
|
|
13
|
+
// partial viewport-relative offset as a position inside the aside.
|
|
14
|
+
return current === panel ? top : null;
|
|
15
|
+
}
|
|
16
|
+
function visible(element, footer) {
|
|
17
|
+
for (let current = element; current; current = current.parentElement) {
|
|
18
|
+
const style = getComputedStyle(current);
|
|
19
|
+
if (current.hidden ||
|
|
20
|
+
style.display === 'none' ||
|
|
21
|
+
style.visibility === 'hidden' ||
|
|
22
|
+
style.visibility === 'collapse')
|
|
23
|
+
return false;
|
|
24
|
+
if (current === footer)
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
function useCollapseAnchor(enabled, compact) {
|
|
30
|
+
var _a;
|
|
31
|
+
const panelRef = React__default.useRef(null);
|
|
32
|
+
const footerRef = React__default.useRef(null);
|
|
33
|
+
const slotRef = React__default.useRef(null);
|
|
34
|
+
const fallbackRef = React__default.useRef(null);
|
|
35
|
+
const rows = React__default.useRef(new Map());
|
|
36
|
+
const reconcileRef = React__default.useRef();
|
|
37
|
+
const [selection, setSelection] = React__default.useState(null);
|
|
38
|
+
const selectionRef = React__default.useRef(null);
|
|
39
|
+
const register = React__default.useCallback((element, id) => {
|
|
40
|
+
var _a;
|
|
41
|
+
rows.current.set(element, id);
|
|
42
|
+
(_a = reconcileRef.current) === null || _a === undefined ? undefined : _a.call(reconcileRef);
|
|
43
|
+
return () => {
|
|
44
|
+
var _a;
|
|
45
|
+
rows.current.delete(element);
|
|
46
|
+
(_a = reconcileRef.current) === null || _a === undefined ? undefined : _a.call(reconcileRef);
|
|
47
|
+
};
|
|
48
|
+
}, []);
|
|
49
|
+
React__default.useLayoutEffect(() => {
|
|
50
|
+
if (!enabled || !panelRef.current || !footerRef.current) {
|
|
51
|
+
setSelection(null);
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
const panel = panelRef.current;
|
|
55
|
+
const footer = footerRef.current;
|
|
56
|
+
const heights = new WeakMap();
|
|
57
|
+
const resize = typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(handleResize);
|
|
58
|
+
const measure = () => {
|
|
59
|
+
var _a, _b;
|
|
60
|
+
const row = (_b = (_a = selectionRef.current) === null || _a === undefined ? undefined : _a.element) !== null && _b !== undefined ? _b : fallbackRef.current;
|
|
61
|
+
const slot = slotRef.current;
|
|
62
|
+
if (!row || !slot)
|
|
63
|
+
return;
|
|
64
|
+
const rowTop = layoutTop(row, panel);
|
|
65
|
+
if (rowTop === null) {
|
|
66
|
+
slot.style.removeProperty('top');
|
|
67
|
+
slot.style.removeProperty('bottom');
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const top = rowTop + (row.offsetHeight - slot.offsetHeight) / 2;
|
|
71
|
+
slot.style.top = `${top}px`;
|
|
72
|
+
slot.style.bottom = 'auto';
|
|
73
|
+
};
|
|
74
|
+
function reconcile() {
|
|
75
|
+
var _a, _b, _c, _d, _e;
|
|
76
|
+
let last = null;
|
|
77
|
+
rows.current.forEach((_id, row) => {
|
|
78
|
+
if (!footer.contains(row) || !visible(row, footer))
|
|
79
|
+
return;
|
|
80
|
+
// DOM order can change without registration order changing.
|
|
81
|
+
// eslint-disable-next-line no-bitwise
|
|
82
|
+
if (!last || last.compareDocumentPosition(row) & Node.DOCUMENT_POSITION_FOLLOWING)
|
|
83
|
+
last = row;
|
|
84
|
+
});
|
|
85
|
+
const id = last ? rows.current.get(last) : undefined;
|
|
86
|
+
if (last !== ((_b = (_a = selectionRef.current) === null || _a === undefined ? undefined : _a.element) !== null && _b !== undefined ? _b : null) ||
|
|
87
|
+
id !== ((_c = selectionRef.current) === null || _c === undefined ? undefined : _c.id)) {
|
|
88
|
+
if (selectionRef.current) {
|
|
89
|
+
resize === null || resize === undefined ? undefined : resize.unobserve(selectionRef.current.element);
|
|
90
|
+
selectionRef.current.element.removeAttribute('data-gn-collapse-anchor');
|
|
91
|
+
}
|
|
92
|
+
// Changing the anchor invalidates only the slot's Y effect.
|
|
93
|
+
(_e = (_d = slotRef.current) === null || _d === undefined ? undefined : _d.getAnimations) === null || _e === undefined ? undefined : _e.call(_d).forEach((animation) => {
|
|
94
|
+
if (!('transitionProperty' in animation))
|
|
95
|
+
animation.cancel();
|
|
96
|
+
});
|
|
97
|
+
const next = last && id ? { element: last, id } : null;
|
|
98
|
+
selectionRef.current = next;
|
|
99
|
+
if (next) {
|
|
100
|
+
next.element.setAttribute('data-gn-collapse-anchor', '');
|
|
101
|
+
resize === null || resize === undefined ? undefined : resize.observe(next.element);
|
|
102
|
+
}
|
|
103
|
+
setSelection(next);
|
|
104
|
+
}
|
|
105
|
+
measure();
|
|
106
|
+
}
|
|
107
|
+
function handleResize(entries) {
|
|
108
|
+
let heightChanged = false;
|
|
109
|
+
entries.forEach(({ target, contentRect }) => {
|
|
110
|
+
if (heights.get(target) !== contentRect.height)
|
|
111
|
+
heightChanged = true;
|
|
112
|
+
heights.set(target, contentRect.height);
|
|
113
|
+
});
|
|
114
|
+
// The flex layout tracks horizontal movement. Only a height change
|
|
115
|
+
// requires vertical measurement during the compact width transition.
|
|
116
|
+
if (entries.length && !heightChanged && panel.hasAttribute('data-gn-aside-animating'))
|
|
117
|
+
return;
|
|
118
|
+
// Idle resizes may change CSS visibility without a DOM mutation.
|
|
119
|
+
reconcile();
|
|
120
|
+
}
|
|
121
|
+
resize === null || resize === undefined ? undefined : resize.observe(panel);
|
|
122
|
+
resize === null || resize === undefined ? undefined : resize.observe(footer);
|
|
123
|
+
reconcileRef.current = reconcile;
|
|
124
|
+
reconcile();
|
|
125
|
+
const finishWidthTransition = (event) => {
|
|
126
|
+
if (event.target === panel && event.propertyName === 'width')
|
|
127
|
+
reconcile();
|
|
128
|
+
};
|
|
129
|
+
// Recheck CSS-only visibility after the width-only notifications skipped
|
|
130
|
+
// above, even when the last resize precedes the coordinator's cleanup.
|
|
131
|
+
panel.addEventListener('transitionend', finishWidthTransition);
|
|
132
|
+
panel.addEventListener('transitioncancel', finishWidthTransition);
|
|
133
|
+
const mutations = new MutationObserver(reconcile);
|
|
134
|
+
mutations.observe(footer, {
|
|
135
|
+
subtree: true,
|
|
136
|
+
childList: true,
|
|
137
|
+
attributes: true,
|
|
138
|
+
attributeFilter: ['hidden', 'style', 'class'],
|
|
139
|
+
});
|
|
140
|
+
return () => {
|
|
141
|
+
var _a;
|
|
142
|
+
reconcileRef.current = undefined;
|
|
143
|
+
resize === null || resize === undefined ? undefined : resize.disconnect();
|
|
144
|
+
mutations.disconnect();
|
|
145
|
+
panel.removeEventListener('transitionend', finishWidthTransition);
|
|
146
|
+
panel.removeEventListener('transitioncancel', finishWidthTransition);
|
|
147
|
+
(_a = selectionRef.current) === null || _a === undefined ? undefined : _a.element.removeAttribute('data-gn-collapse-anchor');
|
|
148
|
+
selectionRef.current = null;
|
|
149
|
+
};
|
|
150
|
+
}, [enabled]);
|
|
151
|
+
React__default.useLayoutEffect(() => {
|
|
152
|
+
var _a;
|
|
153
|
+
(_a = reconcileRef.current) === null || _a === undefined ? undefined : _a.call(reconcileRef);
|
|
154
|
+
});
|
|
155
|
+
const context = React__default.useMemo(() => (enabled ? { register, selectedId: selection === null || selection === undefined ? undefined : selection.id, compact } : undefined), [enabled, register, selection, compact]);
|
|
156
|
+
return {
|
|
157
|
+
panelRef,
|
|
158
|
+
footerRef,
|
|
159
|
+
slotRef,
|
|
160
|
+
fallbackRef,
|
|
161
|
+
selected: (_a = selection === null || selection === undefined ? undefined : selection.element) !== null && _a !== undefined ? _a : null,
|
|
162
|
+
context,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export { CollapseAnchorContext, useCollapseAnchor };
|
|
167
|
+
//# sourceMappingURL=useCollapseAnchor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCollapseAnchor.js","sources":["../../../../../../../src/components/AsideHeader/components/CollapseButton/useCollapseAnchor.tsx"],"sourcesContent":["import React from 'react';\n\ninterface Registration {\n register: (element: HTMLElement, id: symbol) => () => void;\n selectedId: symbol | undefined;\n compact: boolean;\n}\n\ninterface Selection {\n element: HTMLElement;\n id: symbol;\n}\n\nexport const CollapseAnchorContext = React.createContext<Registration | undefined>(undefined);\n\n// offset geometry deliberately excludes the coordinator's in-flight transforms.\nfunction layoutTop(element: HTMLElement, panel: HTMLElement) {\n let top = 0;\n let current: HTMLElement | null = element;\n while (current && current !== panel) {\n top += current.offsetTop;\n current = current.offsetParent as HTMLElement | null;\n }\n // Fixed-position descendants can leave this offset chain. Never treat their\n // partial viewport-relative offset as a position inside the aside.\n return current === panel ? top : null;\n}\n\nfunction visible(element: HTMLElement, footer: HTMLElement) {\n for (let current: HTMLElement | null = element; current; current = current.parentElement) {\n const style = getComputedStyle(current);\n if (\n current.hidden ||\n style.display === 'none' ||\n style.visibility === 'hidden' ||\n style.visibility === 'collapse'\n )\n return false;\n if (current === footer) return true;\n }\n return false;\n}\n\nexport function useCollapseAnchor(enabled: boolean, compact: boolean) {\n const panelRef = React.useRef<HTMLDivElement>(null);\n const footerRef = React.useRef<HTMLDivElement>(null);\n const slotRef = React.useRef<HTMLDivElement>(null);\n const fallbackRef = React.useRef<HTMLDivElement>(null);\n const rows = React.useRef(new Map<HTMLElement, symbol>());\n const reconcileRef = React.useRef<() => void>();\n const [selection, setSelection] = React.useState<Selection | null>(null);\n const selectionRef = React.useRef<Selection | null>(null);\n const register = React.useCallback((element: HTMLElement, id: symbol) => {\n rows.current.set(element, id);\n reconcileRef.current?.();\n return () => {\n rows.current.delete(element);\n reconcileRef.current?.();\n };\n }, []);\n\n React.useLayoutEffect(() => {\n if (!enabled || !panelRef.current || !footerRef.current) {\n setSelection(null);\n return undefined;\n }\n const panel = panelRef.current;\n const footer = footerRef.current;\n const heights = new WeakMap<Element, number>();\n const resize =\n typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(handleResize);\n const measure = () => {\n const row = selectionRef.current?.element ?? fallbackRef.current;\n const slot = slotRef.current;\n if (!row || !slot) return;\n const rowTop = layoutTop(row, panel);\n if (rowTop === null) {\n slot.style.removeProperty('top');\n slot.style.removeProperty('bottom');\n return;\n }\n const top = rowTop + (row.offsetHeight - slot.offsetHeight) / 2;\n slot.style.top = `${top}px`;\n slot.style.bottom = 'auto';\n };\n function reconcile() {\n let last: HTMLElement | null = null;\n rows.current.forEach((_id, row) => {\n if (!footer.contains(row) || !visible(row, footer)) return;\n // DOM order can change without registration order changing.\n // eslint-disable-next-line no-bitwise\n if (!last || last.compareDocumentPosition(row) & Node.DOCUMENT_POSITION_FOLLOWING)\n last = row;\n });\n const id = last ? rows.current.get(last) : undefined;\n if (\n last !== (selectionRef.current?.element ?? null) ||\n id !== selectionRef.current?.id\n ) {\n if (selectionRef.current) {\n resize?.unobserve(selectionRef.current.element);\n selectionRef.current.element.removeAttribute('data-gn-collapse-anchor');\n }\n // Changing the anchor invalidates only the slot's Y effect.\n slotRef.current?.getAnimations?.().forEach((animation) => {\n if (!('transitionProperty' in animation)) animation.cancel();\n });\n const next: Selection | null = last && id ? {element: last, id} : null;\n selectionRef.current = next;\n if (next) {\n next.element.setAttribute('data-gn-collapse-anchor', '');\n resize?.observe(next.element);\n }\n setSelection(next);\n }\n measure();\n }\n function handleResize(entries: ResizeObserverEntry[]) {\n let heightChanged = false;\n entries.forEach(({target, contentRect}) => {\n if (heights.get(target) !== contentRect.height) heightChanged = true;\n heights.set(target, contentRect.height);\n });\n // The flex layout tracks horizontal movement. Only a height change\n // requires vertical measurement during the compact width transition.\n if (entries.length && !heightChanged && panel.hasAttribute('data-gn-aside-animating'))\n return;\n // Idle resizes may change CSS visibility without a DOM mutation.\n reconcile();\n }\n resize?.observe(panel);\n resize?.observe(footer);\n reconcileRef.current = reconcile;\n reconcile();\n const finishWidthTransition = (event: TransitionEvent) => {\n if (event.target === panel && event.propertyName === 'width') reconcile();\n };\n // Recheck CSS-only visibility after the width-only notifications skipped\n // above, even when the last resize precedes the coordinator's cleanup.\n panel.addEventListener('transitionend', finishWidthTransition);\n panel.addEventListener('transitioncancel', finishWidthTransition);\n const mutations = new MutationObserver(reconcile);\n mutations.observe(footer, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: ['hidden', 'style', 'class'],\n });\n return () => {\n reconcileRef.current = undefined;\n resize?.disconnect();\n mutations.disconnect();\n panel.removeEventListener('transitionend', finishWidthTransition);\n panel.removeEventListener('transitioncancel', finishWidthTransition);\n selectionRef.current?.element.removeAttribute('data-gn-collapse-anchor');\n selectionRef.current = null;\n };\n }, [enabled]);\n React.useLayoutEffect(() => {\n reconcileRef.current?.();\n });\n const context = React.useMemo(\n () => (enabled ? {register, selectedId: selection?.id, compact} : undefined),\n [enabled, register, selection, compact],\n );\n return {\n panelRef,\n footerRef,\n slotRef,\n fallbackRef,\n selected: selection?.element ?? null,\n context,\n };\n}\n"],"names":["React"],"mappings":"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"}
|
|
@@ -1 +1,3 @@
|
|
|
1
|
-
.CompositeBar-module__gn-composite-bar___WoCDY{flex:1 0 auto;min-height:40px;width:100%}.CompositeBar-module__gn-composite-bar___WoCDY .CompositeBar-module__gn-composite-bar__root-menu-item___oxCuF[class]{background-color:transparent}.CompositeBar-module__gn-composite-
|
|
1
|
+
.CompositeBar-module__gn-composite-bar___WoCDY{--_--menu-group-tree-connector-width:16px;--_--menu-item-gap:0px;flex:1 0 auto;min-height:var(--_--gn-aside-header-density-item-height,40px);width:100%}.CompositeBar-module__gn-composite-bar___WoCDY .CompositeBar-module__gn-composite-bar__root-menu-item___oxCuF[class]{background-color:transparent}.CompositeBar-module__gn-composite-bar_inline-groups___BsraQ .CompositeBar-module__gn-composite-bar__root-menu-item___oxCuF[class], .CompositeBar-module__gn-composite-bar_quick-access___zNlSe .CompositeBar-module__gn-composite-bar__root-menu-item___oxCuF[class]{background:none;box-sizing:border-box;overflow:visible;padding-block-end:var(--_--menu-item-gap);position:relative}.CompositeBar-module__gn-composite-bar_inline-groups___BsraQ .CompositeBar-module__gn-composite-bar__root-menu-item___oxCuF[class].g-list__item_active, .CompositeBar-module__gn-composite-bar_inline-groups___BsraQ .CompositeBar-module__gn-composite-bar__root-menu-item___oxCuF[class].g-list__item_active.g-list__item_selected, .CompositeBar-module__gn-composite-bar_inline-groups___BsraQ .CompositeBar-module__gn-composite-bar__root-menu-item___oxCuF[class].g-list__item_selected, .CompositeBar-module__gn-composite-bar_quick-access___zNlSe .CompositeBar-module__gn-composite-bar__root-menu-item___oxCuF[class].g-list__item_active, .CompositeBar-module__gn-composite-bar_quick-access___zNlSe .CompositeBar-module__gn-composite-bar__root-menu-item___oxCuF[class].g-list__item_active.g-list__item_selected, .CompositeBar-module__gn-composite-bar_quick-access___zNlSe .CompositeBar-module__gn-composite-bar__root-menu-item___oxCuF[class].g-list__item_selected{background:none}.CompositeBar-module__gn-composite-bar_inline-groups___BsraQ{--_--menu-item-gap:1px}.CompositeBar-module__gn-composite-bar_quick-access___zNlSe{--_--menu-item-gap:1px;--gn-aside-header-item-icon-color:var(
|
|
2
|
+
--gn-aside-header-general-item-icon-color,var(--g-color-text-primary)
|
|
3
|
+
);flex:none}.CompositeBar-module__gn-composite-bar__menu-group___3hCzS{display:flex;flex-direction:column;width:100%}.CompositeBar-module__gn-composite-bar__menu-group-header___Yvr21[class]{box-sizing:border-box;flex:0 0 auto;min-height:var(--_--gn-aside-header-density-item-height,40px);width:100%}.CompositeBar-module__gn-composite-bar__menu-group-nested-item___9gea-[class]{position:relative}.CompositeBar-module__gn-composite-bar__menu-group-nested-item___9gea-[class] .CompositeBar-module__gn-composite-bar__menu-group-nested-connector___uiegb{inset-block:0;inset-inline-start:calc(var(--_--gn-aside-header-density-item-height, 40px)/2 - 8px);position:absolute}.CompositeBar-module__gn-composite-bar__menu-group-nested-list-item___-IygH[class]>.g-list__item-content{overflow:visible}.CompositeBar-module__gn-composite-bar__menu-group-nested-list-item___-IygH[class]{background-color:transparent;box-sizing:border-box;overflow:visible;padding-block-end:var(--_--menu-item-gap);position:relative}.CompositeBar-module__gn-composite-bar__menu-group-nested-list-item___-IygH[class].g-list__item_active, .CompositeBar-module__gn-composite-bar__menu-group-nested-list-item___-IygH[class].g-list__item_active.g-list__item_selected, .CompositeBar-module__gn-composite-bar__menu-group-nested-list-item___-IygH[class].g-list__item_selected{background-color:transparent}.CompositeBar-module__gn-composite-bar__menu-group-nested-list-item___-IygH:not(:last-child) .CompositeBar-module__gn-composite-bar__menu-group-nested-connector___uiegb:after{background:var(--gn-aside-header-menu-group-tree-line-color,#c1c3c7);bottom:calc(var(--_--menu-item-gap)*-1);content:"";inset-inline-start:calc(50% - .5px);pointer-events:none;position:absolute;top:0;width:1px;z-index:-1}.CompositeBar-module__gn-composite-bar__menu-group-nested-connector___uiegb{box-sizing:content-box;display:flex;isolation:isolate;overflow:visible;pointer-events:none;position:relative;width:16px}.CompositeBar-module__gn-composite-bar__menu-group-nested-connector_spine-active___qVoAX:before{background:var(--gn-aside-header-menu-group-tree-line-active-color,var(--g-color-base-brand));bottom:calc(var(--_--menu-item-gap)*-1);content:"";inset-inline-start:calc(50% - .5px);pointer-events:none;position:absolute;top:0;width:1px;z-index:1}.CompositeBar-module__gn-composite-bar__menu-group-nested-tree-svg___FJny7{fill:none;stroke:var(--gn-aside-header-menu-group-tree-line-color,#c1c3c7);display:block;flex-shrink:0;height:var(--_--gn-aside-header-density-item-height,40px);inset-block-start:calc(var(--_--menu-group-tree-connector-hook-inset-block, 50%) - var(--_--gn-aside-header-density-item-height, 40px)/2);inset-inline-start:0;max-width:16px;min-width:16px;position:absolute}.CompositeBar-module__gn-composite-bar__menu-group-nested-tree-svg_active___Gmthf{stroke:var(--gn-aside-header-menu-group-tree-line-active-color,var(--g-color-base-brand))}[dir=rtl] .CompositeBar-module__gn-composite-bar__menu-group-nested-tree-svg___FJny7{transform:scaleX(-1)}.CompositeBar-module__gn-composite-bar__menu-group-nested-row-inner___jJLTe{height:100%;min-width:0;width:100%}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import React, { FC } from 'react';
|
|
2
2
|
import { MenuGroup } from '../../../types';
|
|
3
3
|
import { AsideHeaderItem, AsideHeaderMenuOverflow } from '../../types';
|
|
4
|
+
import { QuickAccessToggleHandler } from './Item/Item.types';
|
|
4
5
|
type CompositeBarProps = {
|
|
5
|
-
type: 'menu' | 'subheader';
|
|
6
|
+
type: 'menu' | 'subheader' | 'quick-access';
|
|
6
7
|
items: AsideHeaderItem[];
|
|
7
|
-
className?: string;
|
|
8
8
|
menuGroups?: MenuGroup[];
|
|
9
9
|
onItemClick?: (item: AsideHeaderItem, collapsed: boolean, event: React.MouseEvent<HTMLElement, MouseEvent>) => void;
|
|
10
10
|
menuMoreTitle?: string;
|
|
@@ -12,6 +12,13 @@ type CompositeBarProps = {
|
|
|
12
12
|
compact: boolean;
|
|
13
13
|
compositeId?: string;
|
|
14
14
|
menuItemClassName?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Target width of the autosized menu content, used before AutoSizer catches
|
|
17
|
+
* up with a layout transition. FirstPanel passes the aside width because
|
|
18
|
+
* the menu container spans it fully and horizontal spacing belongs to rows.
|
|
19
|
+
* If the container gains horizontal insets, pass its available content width.
|
|
20
|
+
*/
|
|
21
|
+
layoutWidth?: number;
|
|
15
22
|
/**
|
|
16
23
|
* @see AsideHeaderMenuOverflow
|
|
17
24
|
*/
|
|
@@ -19,6 +26,10 @@ type CompositeBarProps = {
|
|
|
19
26
|
collapsedMenuGroupIds?: Record<string, boolean>;
|
|
20
27
|
defaultCollapsedMenuGroupIds?: Record<string, boolean>;
|
|
21
28
|
onToggleMenuGroupCollapsed?: (groupId: string) => void;
|
|
29
|
+
enableQuickAccessPin?: boolean;
|
|
30
|
+
onToggleQuickAccess?: QuickAccessToggleHandler;
|
|
31
|
+
suppressCurrentItemIds?: ReadonlySet<string>;
|
|
32
|
+
menuGroupNestedIcons?: boolean;
|
|
22
33
|
};
|
|
23
34
|
export declare const CompositeBar: FC<CompositeBarProps>;
|
|
24
35
|
export {};
|
|
@@ -3,24 +3,32 @@ import React__default, { useMemo, useState, useCallback, useRef } from 'react';
|
|
|
3
3
|
import { List } from '@gravity-ui/uikit';
|
|
4
4
|
import AutoSizer from 'react-virtualized-auto-sizer';
|
|
5
5
|
import { createBlock } from '../../../utils/cn.js';
|
|
6
|
+
import { useAsideHeaderContext } from '../../AsideHeaderContext.js';
|
|
6
7
|
import { Item } from './Item/Item.js';
|
|
7
|
-
import { ScrollableWithScrollbar } from './ScrollableWithScrollbar/ScrollableWithScrollbar.js';
|
|
8
8
|
import { COLLAPSE_ITEM_ID } from './constants.js';
|
|
9
9
|
import { buildCompositeBarRows } from './grouping.js';
|
|
10
|
-
import {
|
|
10
|
+
import { isItemPresentationCurrent } from './presentationCurrent.js';
|
|
11
|
+
import { getReorderedCompositeBarRows, getCompositeBarRowsMinHeight, getAutosizeCompositeBarRows, getItemHeight, makeGroupHeaderAsideItem, getItemsHeight, getSelectedCompositeBarRowIndex, getMoreButtonItem } from './utils.js';
|
|
11
12
|
import styles from './CompositeBar.module.scss.js';
|
|
12
13
|
|
|
13
14
|
const b = createBlock('composite-bar', styles);
|
|
14
15
|
/** Row L-connector: vertical segment + rounded hook. viewBox matches `variables.$item-height`. */
|
|
15
16
|
const MENU_GROUP_NESTED_TREE_CONNECTOR_PATH = 'M8.03125 0V10.07935C8.03125 15.558375 11.5846 20 15.9678 20';
|
|
16
|
-
const CompositeBarView = ({ type, rows, onItemClick, onMoreClick, collapseItems, compact, compositeId, menuItemClassName, inlineGroupChildren, isGroupCollapsed, onToggleGroupCollapsed, }) => {
|
|
17
|
+
const CompositeBarView = ({ type, rows, onItemClick, onMoreClick, collapseItems, compact, compositeId, menuItemClassName, inlineGroupChildren, isGroupCollapsed, onToggleGroupCollapsed, enableQuickAccessPin, onToggleQuickAccess, suppressCurrentItemIds, menuGroupNestedIcons = true, }) => {
|
|
17
18
|
const ref = useRef(null);
|
|
19
|
+
const { menuDensity } = useAsideHeaderContext();
|
|
20
|
+
const hideNestedIcons = !menuGroupNestedIcons;
|
|
21
|
+
const itemLayout = useMemo(() => (compact ? { sidebarCompact: true } : undefined), [compact]);
|
|
18
22
|
const onMouseLeave = useCallback(() => {
|
|
19
23
|
var _a;
|
|
20
24
|
if (compact && document.hasFocus()) {
|
|
21
|
-
(_a = ref.current) === null || _a === undefined ? undefined : _a.activateItem(
|
|
25
|
+
(_a = ref.current) === null || _a === undefined ? undefined : _a.activateItem();
|
|
22
26
|
}
|
|
23
27
|
}, [compact]);
|
|
28
|
+
const deactivateParentListItem = useCallback(() => {
|
|
29
|
+
var _a;
|
|
30
|
+
(_a = ref.current) === null || _a === undefined ? undefined : _a.activateItem();
|
|
31
|
+
}, []);
|
|
24
32
|
const onPopupItemClick = useCallback((item, collapsed, event) => {
|
|
25
33
|
onItemClick === null || onItemClick === undefined ? undefined : onItemClick(item, collapsed, event);
|
|
26
34
|
}, [onItemClick]);
|
|
@@ -34,16 +42,24 @@ const CompositeBarView = ({ type, rows, onItemClick, onMoreClick, collapseItems,
|
|
|
34
42
|
}, [onItemClick, onMoreClick]);
|
|
35
43
|
const itemHeight = useCallback((row) => {
|
|
36
44
|
if (row.kind === 'item') {
|
|
37
|
-
return getItemHeight(row.item);
|
|
45
|
+
return getItemHeight(row.item, menuDensity, itemLayout);
|
|
38
46
|
}
|
|
39
|
-
const headerH = getItemHeight(makeGroupHeaderAsideItem(row.group));
|
|
47
|
+
const headerH = getItemHeight(makeGroupHeaderAsideItem(row.group), menuDensity, itemLayout);
|
|
40
48
|
if (!inlineGroupChildren || isGroupCollapsed(row.group.id)) {
|
|
41
49
|
return headerH;
|
|
42
50
|
}
|
|
43
|
-
return headerH + getItemsHeight(row.items);
|
|
44
|
-
}, [inlineGroupChildren, isGroupCollapsed]);
|
|
51
|
+
return headerH + getItemsHeight(row.items, menuDensity, itemLayout);
|
|
52
|
+
}, [inlineGroupChildren, isGroupCollapsed, itemLayout, menuDensity]);
|
|
53
|
+
const nestedItemHeight = useCallback((item) => getItemHeight(item, menuDensity, itemLayout), [itemLayout, menuDensity]);
|
|
54
|
+
const nestedItemsHeight = useCallback((listItems) => getItemsHeight(listItems, menuDensity, itemLayout), [itemLayout, menuDensity]);
|
|
45
55
|
const itemsHeight = useCallback((listRows) => listRows.reduce((sum, row) => sum + itemHeight(row), 0), [itemHeight]);
|
|
46
|
-
|
|
56
|
+
const selectedRootItemIndex = useMemo(() => {
|
|
57
|
+
if (type !== 'menu') {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
return getSelectedCompositeBarRowIndex(rows, suppressCurrentItemIds);
|
|
61
|
+
}, [rows, suppressCurrentItemIds, type]);
|
|
62
|
+
return (React__default.createElement(List, { id: compositeId, ref: ref, className: inlineGroupChildren ? b({ 'inline-groups': true }) : undefined, items: rows, selectedItemIndex: selectedRootItemIndex, itemHeight: itemHeight, itemsHeight: itemsHeight, itemClassName: b('root-menu-item', menuItemClassName), virtualized: false, filterable: false, sortable: false, renderItem: (row) => {
|
|
47
63
|
if (row.kind === 'item') {
|
|
48
64
|
const item = row.item;
|
|
49
65
|
let menuPopupItems;
|
|
@@ -55,48 +71,50 @@ const CompositeBarView = ({ type, rows, onItemClick, onMoreClick, collapseItems,
|
|
|
55
71
|
menuPopupItems = item.compositeBarMenuPopupItems;
|
|
56
72
|
menuPopupTitle = item.compositeBarMenuPopupTitle;
|
|
57
73
|
}
|
|
58
|
-
return (React__default.createElement(Item, Object.assign({}, item, { compact: compact, popupItemClassName: menuItemClassName, menuPopupItems: menuPopupItems, menuPopupTitle: menuPopupTitle, onMouseLeave: onMouseLeave, onPopupItemClick: onPopupItemClick, onItemClick: onItemClickByIndex(item.onItemClick) })));
|
|
74
|
+
return (React__default.createElement(Item, Object.assign({}, item, { compact: compact, popupItemClassName: menuItemClassName, menuPopupItems: menuPopupItems, menuPopupTitle: menuPopupTitle, menuPopupNestedHideIcon: hideNestedIcons, onMouseLeave: onMouseLeave, onPopupItemClick: onPopupItemClick, onItemClick: onItemClickByIndex(item.onItemClick), suppressCurrentItemIds: suppressCurrentItemIds, enableQuickAccessPin: enableQuickAccessPin, quickAccessPinItem: item, onToggleQuickAccess: onToggleQuickAccess })));
|
|
59
75
|
}
|
|
60
76
|
const headerItem = makeGroupHeaderAsideItem(row.group);
|
|
61
77
|
const groupIsCollapsed = isGroupCollapsed(row.group.id);
|
|
62
78
|
const groupHasOwnAction = Boolean(row.group.onItemClick || row.group.href);
|
|
63
79
|
const onHeaderItemClick = onItemClickByIndex(row.group.onItemClick);
|
|
64
80
|
if (!inlineGroupChildren) {
|
|
65
|
-
return (React__default.createElement(Item, Object.assign({}, headerItem, { href: row.group.href, compact: compact, popupItemClassName: menuItemClassName, menuPopupItems: row.items, menuPopupTitle: row.group.popupTitle, className: b('menu-group-header'),
|
|
81
|
+
return (React__default.createElement(Item, Object.assign({}, headerItem, { href: row.group.href, compact: compact, popupItemClassName: menuItemClassName, menuPopupItems: row.items, menuPopupTitle: row.group.popupTitle, menuPopupHideIcon: hideNestedIcons, className: b('menu-group-header'), onMouseLeave: onMouseLeave, onPopupItemClick: onPopupItemClick, onItemClick: onHeaderItemClick, suppressCurrentItemIds: suppressCurrentItemIds, enableQuickAccessPin: enableQuickAccessPin, onToggleQuickAccess: onToggleQuickAccess })));
|
|
66
82
|
}
|
|
67
|
-
const selectedItemIndex =
|
|
68
|
-
|
|
83
|
+
const selectedItemIndex = row.items.findIndex((item) => isItemPresentationCurrent(item, { suppressCurrentItemIds }));
|
|
84
|
+
const normalizedSelectedItemIndex = selectedItemIndex === -1 ? undefined : selectedItemIndex;
|
|
85
|
+
return (React__default.createElement("div", { "data-gn-aside-group": row.group.id, className: b('menu-group', {
|
|
69
86
|
expanded: !groupIsCollapsed,
|
|
70
87
|
collapsed: groupIsCollapsed,
|
|
71
|
-
}) },
|
|
72
|
-
React__default.createElement(Item, Object.assign({}, headerItem, { href: row.group.href, compact: compact, popupItemClassName: menuItemClassName, className: b('menu-group-header'), groupHeaderExpanded: !groupIsCollapsed, onMouseLeave: onMouseLeave, onGroupHeaderChevronClick: groupHasOwnAction
|
|
88
|
+
}), onMouseEnter: deactivateParentListItem },
|
|
89
|
+
React__default.createElement(Item, Object.assign({}, headerItem, { href: row.group.href, compact: compact, popupItemClassName: menuItemClassName, className: b('menu-group-header'), groupHeaderExpanded: !groupIsCollapsed, menuPopupItems: groupIsCollapsed ? row.items : undefined, menuPopupTitle: groupIsCollapsed ? row.group.popupTitle : undefined, menuPopupHideIcon: hideNestedIcons, onMouseLeave: onMouseLeave, onPopupItemClick: onPopupItemClick, onGroupHeaderChevronClick: groupHasOwnAction
|
|
73
90
|
? () => onToggleGroupCollapsed(row.group.id)
|
|
74
91
|
: undefined, onItemClick: (item, isItemCollapsed, event) => {
|
|
75
92
|
if (!groupHasOwnAction) {
|
|
76
93
|
onToggleGroupCollapsed(row.group.id);
|
|
77
94
|
}
|
|
78
95
|
onHeaderItemClick(item, isItemCollapsed, event);
|
|
79
|
-
} })),
|
|
80
|
-
!groupIsCollapsed && (React__default.createElement(List, { items: row.items, selectedItemIndex:
|
|
81
|
-
const spineActive =
|
|
82
|
-
groupItemIndex <
|
|
96
|
+
}, suppressCurrentItemIds: suppressCurrentItemIds, enableQuickAccessPin: enableQuickAccessPin, onToggleQuickAccess: onToggleQuickAccess })),
|
|
97
|
+
!groupIsCollapsed && (React__default.createElement(List, { items: row.items, selectedItemIndex: normalizedSelectedItemIndex, itemHeight: nestedItemHeight, itemsHeight: nestedItemsHeight, itemClassName: b('menu-group-nested-list-item'), virtualized: false, filterable: false, sortable: false, renderItem: (nestedItem, _isActive, groupItemIndex) => {
|
|
98
|
+
const spineActive = normalizedSelectedItemIndex !== undefined &&
|
|
99
|
+
groupItemIndex < normalizedSelectedItemIndex;
|
|
83
100
|
return (React__default.createElement("div", { className: b('menu-group-nested-row-inner') },
|
|
84
101
|
React__default.createElement(Item, Object.assign({}, nestedItem, { className: [
|
|
85
102
|
nestedItem.className,
|
|
86
103
|
b('menu-group-nested-item'),
|
|
87
104
|
]
|
|
88
105
|
.filter(Boolean)
|
|
89
|
-
.join(' '), compact: compact, menuGroupNestedTreeConnector: React__default.createElement("span", { className: b('menu-group-nested-connector', { 'spine-active': spineActive }), "aria-hidden": true },
|
|
106
|
+
.join(' '), compact: compact, hideIcon: hideNestedIcons, menuGroupNested: true, menuGroupNestedTreeConnector: React__default.createElement("span", { className: b('menu-group-nested-connector', { 'spine-active': spineActive }), "aria-hidden": true },
|
|
90
107
|
React__default.createElement("svg", { className: b('menu-group-nested-tree-svg', {
|
|
91
|
-
active:
|
|
108
|
+
active: normalizedSelectedItemIndex ===
|
|
92
109
|
groupItemIndex,
|
|
93
110
|
}), viewBox: "0 0 16 40", xmlns: "http://www.w3.org/2000/svg" },
|
|
94
|
-
React__default.createElement("path", { d: MENU_GROUP_NESTED_TREE_CONNECTOR_PATH, fill: "none", strokeLinecap: "butt", strokeWidth: "1.3", vectorEffect: "non-scaling-stroke" }))), onMouseLeave: onMouseLeave, onItemClick: onItemClickByIndex(nestedItem.onItemClick) }))));
|
|
111
|
+
React__default.createElement("path", { d: MENU_GROUP_NESTED_TREE_CONNECTOR_PATH, fill: "none", strokeLinecap: "butt", strokeWidth: "1.3", vectorEffect: "non-scaling-stroke" }))), onMouseLeave: onMouseLeave, onItemClick: onItemClickByIndex(nestedItem.onItemClick), suppressCurrentItemIds: suppressCurrentItemIds, enableQuickAccessPin: enableQuickAccessPin, quickAccessPinItem: nestedItem, onToggleQuickAccess: onToggleQuickAccess }))));
|
|
95
112
|
} }))));
|
|
96
113
|
} }));
|
|
97
114
|
};
|
|
98
|
-
const CompositeBar = ({ type,
|
|
115
|
+
const CompositeBar = ({ type, items, menuGroups, menuMoreTitle, onItemClick, onMoreClick, compact, compositeId, menuItemClassName, layoutWidth, menuOverflow = 'collapse', collapsedMenuGroupIds: collapsedMenuGroupIdsProp, defaultCollapsedMenuGroupIds, onToggleMenuGroupCollapsed, enableQuickAccessPin, onToggleQuickAccess, suppressCurrentItemIds, menuGroupNestedIcons = true, }) => {
|
|
99
116
|
const rows = useMemo(() => buildCompositeBarRows(items, menuGroups), [items, menuGroups]);
|
|
117
|
+
const { menuDensity } = useAsideHeaderContext();
|
|
100
118
|
const isCollapsedControlled = collapsedMenuGroupIdsProp !== undefined;
|
|
101
119
|
const [uncontrolledCollapsed, setUncontrolledCollapsed] = useState(() => defaultCollapsedMenuGroupIds !== null && defaultCollapsedMenuGroupIds !== undefined ? defaultCollapsedMenuGroupIds : {});
|
|
102
120
|
const collapsedMap = isCollapsedControlled ? collapsedMenuGroupIdsProp : uncontrolledCollapsed;
|
|
@@ -109,39 +127,35 @@ const CompositeBar = ({ type, className, items, menuGroups, menuMoreTitle, onIte
|
|
|
109
127
|
const isGroupCollapsed = useCallback((groupId) => Boolean(collapsedMap[groupId]), [collapsedMap]);
|
|
110
128
|
const inlineGroupChildren = !compact && menuOverflow === 'scroll' && type === 'menu' && Boolean(menuGroups === null || menuGroups === undefined ? undefined : menuGroups.length);
|
|
111
129
|
const scrollableRows = useMemo(() => getReorderedCompositeBarRows(rows), [rows]);
|
|
112
|
-
const scrollRecalcKey = useMemo(() => {
|
|
113
|
-
var _a;
|
|
114
|
-
return `${items.length}:${(_a = menuGroups === null || menuGroups === undefined ? undefined : menuGroups.length) !== null && _a !== undefined ? _a : 0}:${JSON.stringify(Object.keys(collapsedMap)
|
|
115
|
-
.sort()
|
|
116
|
-
.reduce((acc, k) => {
|
|
117
|
-
acc[k] = Boolean(collapsedMap[k]);
|
|
118
|
-
return acc;
|
|
119
|
-
}, {}))}`;
|
|
120
|
-
}, [items.length, menuGroups === null || menuGroups === undefined ? undefined : menuGroups.length, collapsedMap]);
|
|
121
130
|
if (rows.length === 0) {
|
|
122
131
|
return null;
|
|
123
132
|
}
|
|
124
133
|
let node;
|
|
125
134
|
if (type === 'menu') {
|
|
126
135
|
if (menuOverflow === 'scroll' && !compact) {
|
|
127
|
-
|
|
128
|
-
|
|
136
|
+
const menuView = (React__default.createElement(CompositeBarView, { compositeId: compositeId, type: "menu", compact: compact, rows: scrollableRows, onItemClick: onItemClick, onMoreClick: onMoreClick, menuItemClassName: menuItemClassName, inlineGroupChildren: inlineGroupChildren, isGroupCollapsed: isGroupCollapsed, onToggleGroupCollapsed: onToggleGroupCollapsed, enableQuickAccessPin: enableQuickAccessPin, onToggleQuickAccess: onToggleQuickAccess, suppressCurrentItemIds: suppressCurrentItemIds, menuGroupNestedIcons: menuGroupNestedIcons }));
|
|
137
|
+
node = menuView;
|
|
129
138
|
}
|
|
130
139
|
else {
|
|
131
|
-
const
|
|
132
|
-
const
|
|
140
|
+
const itemLayout = compact ? { sidebarCompact: true } : undefined;
|
|
141
|
+
const minHeight = getCompositeBarRowsMinHeight(rows, menuDensity, itemLayout);
|
|
142
|
+
const collapseItem = getMoreButtonItem(menuMoreTitle, menuDensity);
|
|
133
143
|
node = (React__default.createElement("div", { className: b({ autosizer: true }), style: { minHeight } }, rows.length !== 0 && (React__default.createElement(AutoSizer, null, (size) => {
|
|
134
|
-
const width = Number.isNaN(size.width) ? 0 : size.width;
|
|
144
|
+
const width = layoutWidth !== null && layoutWidth !== undefined ? layoutWidth : (Number.isNaN(size.width) ? 0 : size.width);
|
|
135
145
|
const height = Number.isNaN(size.height) ? 0 : size.height;
|
|
136
|
-
const { listRows, collapseItems } = getAutosizeCompositeBarRows(rows, height, collapseItem);
|
|
146
|
+
const { listRows, collapseItems } = getAutosizeCompositeBarRows(rows, height, collapseItem, menuDensity, itemLayout);
|
|
137
147
|
return (React__default.createElement("div", { style: { width, height } },
|
|
138
|
-
React__default.createElement(CompositeBarView, { compositeId: compositeId, type: "menu", compact: compact, rows: listRows, onItemClick: onItemClick, onMoreClick: onMoreClick, menuItemClassName: menuItemClassName, collapseItems: collapseItems, inlineGroupChildren: false, isGroupCollapsed: isGroupCollapsed, onToggleGroupCollapsed: onToggleGroupCollapsed })));
|
|
148
|
+
React__default.createElement(CompositeBarView, { compositeId: compositeId, type: "menu", compact: compact, rows: listRows, onItemClick: onItemClick, onMoreClick: onMoreClick, menuItemClassName: menuItemClassName, collapseItems: collapseItems, inlineGroupChildren: false, isGroupCollapsed: isGroupCollapsed, onToggleGroupCollapsed: onToggleGroupCollapsed, enableQuickAccessPin: enableQuickAccessPin, onToggleQuickAccess: onToggleQuickAccess, suppressCurrentItemIds: suppressCurrentItemIds, menuGroupNestedIcons: menuGroupNestedIcons })));
|
|
139
149
|
}))));
|
|
140
150
|
}
|
|
141
151
|
}
|
|
152
|
+
else if (type === 'quick-access') {
|
|
153
|
+
node = (React__default.createElement("div", { className: b({ 'quick-access': true }) },
|
|
154
|
+
React__default.createElement(CompositeBarView, { compositeId: compositeId, type: "quick-access", menuItemClassName: menuItemClassName, compact: compact, rows: rows, onItemClick: onItemClick, inlineGroupChildren: false, isGroupCollapsed: isGroupCollapsed, onToggleGroupCollapsed: onToggleGroupCollapsed, enableQuickAccessPin: enableQuickAccessPin, onToggleQuickAccess: onToggleQuickAccess })));
|
|
155
|
+
}
|
|
142
156
|
else {
|
|
143
157
|
node = (React__default.createElement("div", { className: b({ subheader: true }) },
|
|
144
|
-
React__default.createElement(CompositeBarView, { type: "subheader", menuItemClassName: menuItemClassName, compact: compact, rows: rows, onItemClick: onItemClick, inlineGroupChildren: false, isGroupCollapsed: isGroupCollapsed, onToggleGroupCollapsed: onToggleGroupCollapsed })));
|
|
158
|
+
React__default.createElement(CompositeBarView, { compositeId: compositeId, type: "subheader", menuItemClassName: menuItemClassName, compact: compact, rows: rows, onItemClick: onItemClick, inlineGroupChildren: false, isGroupCollapsed: isGroupCollapsed, onToggleGroupCollapsed: onToggleGroupCollapsed, menuGroupNestedIcons: menuGroupNestedIcons })));
|
|
145
159
|
}
|
|
146
160
|
return node;
|
|
147
161
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompositeBar.js","sources":["../../../../../../../src/components/AsideHeader/components/CompositeBar/CompositeBar.tsx"],"sourcesContent":["import React, {FC, ReactNode, useCallback, useMemo, useRef, useState} from 'react';\n\nimport {List} from '@gravity-ui/uikit';\nimport AutoSizer, {Size} from 'react-virtualized-auto-sizer';\n\nimport {MenuGroup} from '../../../types';\nimport {createBlock} from '../../../utils/cn';\nimport {AsideHeaderItem, AsideHeaderMenuOverflow} from '../../types';\n\nimport {Item} from './Item/Item';\nimport {ItemProps} from './Item/Item.types';\nimport {ScrollableWithScrollbar} from './ScrollableWithScrollbar';\nimport {COLLAPSE_ITEM_ID} from './constants';\nimport {buildCompositeBarRows} from './grouping';\nimport type {CompositeBarRow} from './grouping';\nimport {\n getAutosizeCompositeBarRows,\n getCompositeBarRowsMinHeight,\n getItemHeight,\n getItemsHeight,\n getMoreButtonItem,\n getReorderedCompositeBarRows,\n getSelectedCompositeBarRowIndex,\n getSelectedItemIndex,\n makeGroupHeaderAsideItem,\n} from './utils';\n\nimport styles from './CompositeBar.module.scss';\n\nconst b = createBlock('composite-bar', styles);\n\n/** Row L-connector: vertical segment + rounded hook. viewBox matches `variables.$item-height`. */\nconst MENU_GROUP_NESTED_TREE_CONNECTOR_PATH =\n 'M8.03125 0V10.07935C8.03125 15.558375 11.5846 20 15.9678 20';\n\ntype CompositeBarProps = {\n type: 'menu' | 'subheader';\n items: AsideHeaderItem[];\n className?: string;\n menuGroups?: MenuGroup[];\n onItemClick?: (\n item: AsideHeaderItem,\n collapsed: boolean,\n event: React.MouseEvent<HTMLElement, MouseEvent>,\n ) => void;\n menuMoreTitle?: string;\n onMoreClick?: () => void;\n compact: boolean;\n compositeId?: string;\n menuItemClassName?: string;\n /**\n * @see AsideHeaderMenuOverflow\n */\n menuOverflow?: AsideHeaderMenuOverflow;\n collapsedMenuGroupIds?: Record<string, boolean>;\n defaultCollapsedMenuGroupIds?: Record<string, boolean>;\n onToggleMenuGroupCollapsed?: (groupId: string) => void;\n};\n\ntype CompositeBarViewProps = {\n type: 'menu' | 'subheader';\n compositeId?: string;\n compact: boolean;\n menuItemClassName?: string;\n rows: CompositeBarRow[];\n onItemClick?: CompositeBarProps['onItemClick'];\n onMoreClick?: () => void;\n collapseItems?: AsideHeaderItem[];\n /** Nested group list + tree connectors (expanded menu + scroll overflow only). */\n inlineGroupChildren: boolean;\n isGroupCollapsed: (groupId: string) => boolean;\n onToggleGroupCollapsed: (groupId: string) => void;\n};\n\nconst CompositeBarView: FC<CompositeBarViewProps> = ({\n type,\n rows,\n onItemClick,\n onMoreClick,\n collapseItems,\n compact,\n compositeId,\n menuItemClassName,\n inlineGroupChildren,\n isGroupCollapsed,\n onToggleGroupCollapsed,\n}) => {\n const ref = useRef<List<CompositeBarRow>>(null);\n\n const onMouseLeave = useCallback(() => {\n if (compact && document.hasFocus()) {\n ref.current?.activateItem(undefined as unknown as number);\n }\n }, [compact]);\n\n const onPopupItemClick = useCallback(\n (\n item: AsideHeaderItem,\n collapsed: boolean,\n event: React.MouseEvent<HTMLElement, MouseEvent>,\n ) => {\n onItemClick?.(item, collapsed, event);\n },\n [onItemClick],\n );\n\n const onItemClickByIndex = useCallback(\n (orginalItemClick: AsideHeaderItem['onItemClick']): ItemProps['onItemClick'] =>\n (item, collapsed, event) => {\n if (item.id === COLLAPSE_ITEM_ID && collapsed) {\n onMoreClick?.();\n } else {\n onItemClick?.(\n {\n ...item,\n onItemClick: orginalItemClick,\n },\n collapsed,\n event,\n );\n }\n },\n [onItemClick, onMoreClick],\n );\n\n const itemHeight = useCallback(\n (row: CompositeBarRow) => {\n if (row.kind === 'item') {\n return getItemHeight(row.item);\n }\n const headerH = getItemHeight(makeGroupHeaderAsideItem(row.group));\n if (!inlineGroupChildren || isGroupCollapsed(row.group.id)) {\n return headerH;\n }\n return headerH + getItemsHeight(row.items);\n },\n [inlineGroupChildren, isGroupCollapsed],\n );\n\n const itemsHeight = useCallback(\n (listRows: CompositeBarRow[]) => listRows.reduce((sum, row) => sum + itemHeight(row), 0),\n [itemHeight],\n );\n\n return (\n <List<CompositeBarRow>\n id={compositeId}\n ref={ref}\n items={rows}\n selectedItemIndex={type === 'menu' ? getSelectedCompositeBarRowIndex(rows) : undefined}\n itemHeight={itemHeight}\n itemsHeight={itemsHeight}\n itemClassName={b('root-menu-item', menuItemClassName)}\n virtualized={false}\n filterable={false}\n sortable={false}\n renderItem={(row) => {\n if (row.kind === 'item') {\n const item = row.item;\n let menuPopupItems: AsideHeaderItem[] | undefined;\n let menuPopupTitle: string | undefined;\n\n if (item.id === COLLAPSE_ITEM_ID) {\n menuPopupItems = collapseItems;\n } else {\n menuPopupItems = item.compositeBarMenuPopupItems;\n menuPopupTitle = item.compositeBarMenuPopupTitle;\n }\n\n return (\n <Item\n {...item}\n compact={compact}\n popupItemClassName={menuItemClassName}\n menuPopupItems={menuPopupItems}\n menuPopupTitle={menuPopupTitle}\n onMouseLeave={onMouseLeave}\n onPopupItemClick={onPopupItemClick}\n onItemClick={onItemClickByIndex(item.onItemClick)}\n />\n );\n }\n\n const headerItem = makeGroupHeaderAsideItem(row.group);\n const groupIsCollapsed = isGroupCollapsed(row.group.id);\n const groupHasOwnAction = Boolean(row.group.onItemClick || row.group.href);\n const onHeaderItemClick = onItemClickByIndex(row.group.onItemClick) as NonNullable<\n ItemProps['onItemClick']\n >;\n\n if (!inlineGroupChildren) {\n return (\n <Item\n {...headerItem}\n href={row.group.href}\n compact={compact}\n popupItemClassName={menuItemClassName}\n menuPopupItems={row.items}\n menuPopupTitle={row.group.popupTitle}\n className={b('menu-group-header')}\n hideCompactChevron={row.group.hideCompactChevron}\n onMouseLeave={onMouseLeave}\n onPopupItemClick={onPopupItemClick}\n onItemClick={onHeaderItemClick}\n />\n );\n }\n\n const selectedItemIndex = getSelectedItemIndex(row.items);\n\n return (\n <div\n className={b('menu-group', {\n expanded: !groupIsCollapsed,\n collapsed: groupIsCollapsed,\n })}\n >\n <Item\n {...headerItem}\n href={row.group.href}\n compact={compact}\n popupItemClassName={menuItemClassName}\n className={b('menu-group-header')}\n groupHeaderExpanded={!groupIsCollapsed}\n onMouseLeave={onMouseLeave}\n onGroupHeaderChevronClick={\n groupHasOwnAction\n ? () => onToggleGroupCollapsed(row.group.id)\n : undefined\n }\n onItemClick={(item, isItemCollapsed, event) => {\n if (!groupHasOwnAction) {\n onToggleGroupCollapsed(row.group.id);\n }\n onHeaderItemClick(item, isItemCollapsed, event);\n }}\n />\n {!groupIsCollapsed && (\n <List<AsideHeaderItem>\n items={row.items}\n selectedItemIndex={selectedItemIndex}\n itemHeight={getItemHeight}\n itemsHeight={getItemsHeight}\n itemClassName={b('menu-group-nested-list-item')}\n virtualized={false}\n filterable={false}\n sortable={false}\n renderItem={(nestedItem, _isActive, groupItemIndex) => {\n const spineActive =\n selectedItemIndex !== undefined &&\n groupItemIndex < selectedItemIndex;\n\n return (\n <div className={b('menu-group-nested-row-inner')}>\n <Item\n {...nestedItem}\n className={[\n nestedItem.className,\n b('menu-group-nested-item'),\n ]\n .filter(Boolean)\n .join(' ')}\n compact={compact}\n menuGroupNestedTreeConnector={\n <span\n className={b(\n 'menu-group-nested-connector',\n {'spine-active': spineActive},\n )}\n aria-hidden\n >\n <svg\n className={b(\n 'menu-group-nested-tree-svg',\n {\n active:\n selectedItemIndex ===\n groupItemIndex,\n },\n )}\n viewBox=\"0 0 16 40\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d={\n MENU_GROUP_NESTED_TREE_CONNECTOR_PATH\n }\n fill=\"none\"\n strokeLinecap=\"butt\"\n strokeWidth=\"1.3\"\n vectorEffect=\"non-scaling-stroke\"\n />\n </svg>\n </span>\n }\n onMouseLeave={onMouseLeave}\n onItemClick={onItemClickByIndex(\n nestedItem.onItemClick,\n )}\n />\n </div>\n );\n }}\n />\n )}\n </div>\n );\n }}\n />\n );\n};\n\nexport const CompositeBar: FC<CompositeBarProps> = ({\n type,\n className,\n items,\n menuGroups,\n menuMoreTitle,\n onItemClick,\n onMoreClick,\n compact,\n compositeId,\n menuItemClassName,\n menuOverflow = 'collapse',\n collapsedMenuGroupIds: collapsedMenuGroupIdsProp,\n defaultCollapsedMenuGroupIds,\n onToggleMenuGroupCollapsed,\n}) => {\n const rows = useMemo(() => buildCompositeBarRows(items, menuGroups), [items, menuGroups]);\n\n const isCollapsedControlled = collapsedMenuGroupIdsProp !== undefined;\n const [uncontrolledCollapsed, setUncontrolledCollapsed] = useState<Record<string, boolean>>(\n () => defaultCollapsedMenuGroupIds ?? {},\n );\n\n const collapsedMap = isCollapsedControlled ? collapsedMenuGroupIdsProp : uncontrolledCollapsed;\n\n const onToggleGroupCollapsed = useCallback(\n (groupId: string) => {\n onToggleMenuGroupCollapsed?.(groupId);\n if (!isCollapsedControlled) {\n setUncontrolledCollapsed((prev) => ({...prev, [groupId]: !prev[groupId]}));\n }\n },\n [isCollapsedControlled, onToggleMenuGroupCollapsed],\n );\n\n const isGroupCollapsed = useCallback(\n (groupId: string) => Boolean(collapsedMap[groupId]),\n [collapsedMap],\n );\n\n const inlineGroupChildren =\n !compact && menuOverflow === 'scroll' && type === 'menu' && Boolean(menuGroups?.length);\n\n const scrollableRows = useMemo(() => getReorderedCompositeBarRows(rows), [rows]);\n\n const scrollRecalcKey = useMemo(\n () =>\n `${items.length}:${menuGroups?.length ?? 0}:${JSON.stringify(\n Object.keys(collapsedMap)\n .sort()\n .reduce<Record<string, boolean>>((acc, k) => {\n acc[k] = Boolean(collapsedMap[k]);\n return acc;\n }, {}),\n )}`,\n [items.length, menuGroups?.length, collapsedMap],\n );\n\n if (rows.length === 0) {\n return null;\n }\n\n let node: ReactNode;\n\n if (type === 'menu') {\n if (menuOverflow === 'scroll' && !compact) {\n node = (\n <ScrollableWithScrollbar className={className} recalcDeps={[scrollRecalcKey]}>\n <CompositeBarView\n compositeId={compositeId}\n type=\"menu\"\n compact={compact}\n rows={scrollableRows}\n onItemClick={onItemClick}\n onMoreClick={onMoreClick}\n menuItemClassName={menuItemClassName}\n inlineGroupChildren={inlineGroupChildren}\n isGroupCollapsed={isGroupCollapsed}\n onToggleGroupCollapsed={onToggleGroupCollapsed}\n />\n </ScrollableWithScrollbar>\n );\n } else {\n const minHeight = getCompositeBarRowsMinHeight(rows);\n const collapseItem = getMoreButtonItem(menuMoreTitle);\n node = (\n <div className={b({autosizer: true})} style={{minHeight}}>\n {rows.length !== 0 && (\n <AutoSizer>\n {(size: Size) => {\n const width = Number.isNaN(size.width) ? 0 : size.width;\n const height = Number.isNaN(size.height) ? 0 : size.height;\n\n const {listRows, collapseItems} = getAutosizeCompositeBarRows(\n rows,\n height,\n collapseItem,\n );\n return (\n <div style={{width, height}}>\n <CompositeBarView\n compositeId={compositeId}\n type=\"menu\"\n compact={compact}\n rows={listRows}\n onItemClick={onItemClick}\n onMoreClick={onMoreClick}\n menuItemClassName={menuItemClassName}\n collapseItems={collapseItems}\n inlineGroupChildren={false}\n isGroupCollapsed={isGroupCollapsed}\n onToggleGroupCollapsed={onToggleGroupCollapsed}\n />\n </div>\n );\n }}\n </AutoSizer>\n )}\n </div>\n );\n }\n } else {\n node = (\n <div className={b({subheader: true})}>\n <CompositeBarView\n type=\"subheader\"\n menuItemClassName={menuItemClassName}\n compact={compact}\n rows={rows}\n onItemClick={onItemClick}\n inlineGroupChildren={false}\n isGroupCollapsed={isGroupCollapsed}\n onToggleGroupCollapsed={onToggleGroupCollapsed}\n />\n </div>\n );\n }\n return node;\n};\n"],"names":["React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CompositeBar.js","sources":["../../../../../../../src/components/AsideHeader/components/CompositeBar/CompositeBar.tsx"],"sourcesContent":["import React, {FC, ReactNode, useCallback, useMemo, useRef, useState} from 'react';\n\nimport {List} from '@gravity-ui/uikit';\nimport AutoSizer, {Size} from 'react-virtualized-auto-sizer';\n\nimport {MenuGroup} from '../../../types';\nimport {createBlock} from '../../../utils/cn';\nimport {useAsideHeaderContext} from '../../AsideHeaderContext';\nimport {AsideHeaderItem, AsideHeaderMenuOverflow} from '../../types';\n\nimport {Item} from './Item/Item';\nimport {ItemProps, QuickAccessToggleHandler} from './Item/Item.types';\nimport {COLLAPSE_ITEM_ID} from './constants';\nimport {buildCompositeBarRows} from './grouping';\nimport type {CompositeBarRow} from './grouping';\nimport {isItemPresentationCurrent} from './presentationCurrent';\nimport {\n getAutosizeCompositeBarRows,\n getCompositeBarRowsMinHeight,\n getItemHeight,\n getItemsHeight,\n getMoreButtonItem,\n getReorderedCompositeBarRows,\n getSelectedCompositeBarRowIndex,\n makeGroupHeaderAsideItem,\n} from './utils';\n\nimport styles from './CompositeBar.module.scss';\n\nconst b = createBlock('composite-bar', styles);\n\n/** Row L-connector: vertical segment + rounded hook. viewBox matches `variables.$item-height`. */\nconst MENU_GROUP_NESTED_TREE_CONNECTOR_PATH =\n 'M8.03125 0V10.07935C8.03125 15.558375 11.5846 20 15.9678 20';\n\ntype CompositeBarProps = {\n type: 'menu' | 'subheader' | 'quick-access';\n items: AsideHeaderItem[];\n menuGroups?: MenuGroup[];\n onItemClick?: (\n item: AsideHeaderItem,\n collapsed: boolean,\n event: React.MouseEvent<HTMLElement, MouseEvent>,\n ) => void;\n menuMoreTitle?: string;\n onMoreClick?: () => void;\n compact: boolean;\n compositeId?: string;\n menuItemClassName?: string;\n /**\n * Target width of the autosized menu content, used before AutoSizer catches\n * up with a layout transition. FirstPanel passes the aside width because\n * the menu container spans it fully and horizontal spacing belongs to rows.\n * If the container gains horizontal insets, pass its available content width.\n */\n layoutWidth?: number;\n /**\n * @see AsideHeaderMenuOverflow\n */\n menuOverflow?: AsideHeaderMenuOverflow;\n collapsedMenuGroupIds?: Record<string, boolean>;\n defaultCollapsedMenuGroupIds?: Record<string, boolean>;\n onToggleMenuGroupCollapsed?: (groupId: string) => void;\n enableQuickAccessPin?: boolean;\n onToggleQuickAccess?: QuickAccessToggleHandler;\n suppressCurrentItemIds?: ReadonlySet<string>;\n menuGroupNestedIcons?: boolean;\n};\n\ntype CompositeBarViewProps = {\n type: 'menu' | 'subheader' | 'quick-access';\n compositeId?: string;\n compact: boolean;\n menuItemClassName?: string;\n rows: CompositeBarRow[];\n onItemClick?: CompositeBarProps['onItemClick'];\n onMoreClick?: () => void;\n collapseItems?: AsideHeaderItem[];\n /** Nested group list + tree connectors (expanded menu + scroll overflow only). */\n inlineGroupChildren: boolean;\n isGroupCollapsed: (groupId: string) => boolean;\n onToggleGroupCollapsed: (groupId: string) => void;\n enableQuickAccessPin?: boolean;\n onToggleQuickAccess?: QuickAccessToggleHandler;\n suppressCurrentItemIds?: ReadonlySet<string>;\n menuGroupNestedIcons?: boolean;\n};\n\nconst CompositeBarView: FC<CompositeBarViewProps> = ({\n type,\n rows,\n onItemClick,\n onMoreClick,\n collapseItems,\n compact,\n compositeId,\n menuItemClassName,\n inlineGroupChildren,\n isGroupCollapsed,\n onToggleGroupCollapsed,\n enableQuickAccessPin,\n onToggleQuickAccess,\n suppressCurrentItemIds,\n menuGroupNestedIcons = true,\n}) => {\n const ref = useRef<List<CompositeBarRow>>(null);\n const {menuDensity} = useAsideHeaderContext();\n const hideNestedIcons = !menuGroupNestedIcons;\n const itemLayout = useMemo(\n () => (compact ? {sidebarCompact: true as const} : undefined),\n [compact],\n );\n\n const onMouseLeave = useCallback(() => {\n if (compact && document.hasFocus()) {\n ref.current?.activateItem();\n }\n }, [compact]);\n\n const deactivateParentListItem = useCallback(() => {\n ref.current?.activateItem();\n }, []);\n\n const onPopupItemClick = useCallback(\n (\n item: AsideHeaderItem,\n collapsed: boolean,\n event: React.MouseEvent<HTMLElement, MouseEvent>,\n ) => {\n onItemClick?.(item, collapsed, event);\n },\n [onItemClick],\n );\n\n const onItemClickByIndex = useCallback(\n (orginalItemClick: AsideHeaderItem['onItemClick']): ItemProps['onItemClick'] =>\n (item, collapsed, event) => {\n if (item.id === COLLAPSE_ITEM_ID && collapsed) {\n onMoreClick?.();\n } else {\n onItemClick?.(\n {\n ...item,\n onItemClick: orginalItemClick,\n },\n collapsed,\n event,\n );\n }\n },\n [onItemClick, onMoreClick],\n );\n\n const itemHeight = useCallback(\n (row: CompositeBarRow) => {\n if (row.kind === 'item') {\n return getItemHeight(row.item, menuDensity, itemLayout);\n }\n const headerH = getItemHeight(\n makeGroupHeaderAsideItem(row.group),\n menuDensity,\n itemLayout,\n );\n if (!inlineGroupChildren || isGroupCollapsed(row.group.id)) {\n return headerH;\n }\n return headerH + getItemsHeight(row.items, menuDensity, itemLayout);\n },\n [inlineGroupChildren, isGroupCollapsed, itemLayout, menuDensity],\n );\n\n const nestedItemHeight = useCallback(\n (item: AsideHeaderItem) => getItemHeight(item, menuDensity, itemLayout),\n [itemLayout, menuDensity],\n );\n\n const nestedItemsHeight = useCallback(\n (listItems: AsideHeaderItem[]) => getItemsHeight(listItems, menuDensity, itemLayout),\n [itemLayout, menuDensity],\n );\n\n const itemsHeight = useCallback(\n (listRows: CompositeBarRow[]) => listRows.reduce((sum, row) => sum + itemHeight(row), 0),\n [itemHeight],\n );\n\n const selectedRootItemIndex = useMemo(() => {\n if (type !== 'menu') {\n return undefined;\n }\n\n return getSelectedCompositeBarRowIndex(rows, suppressCurrentItemIds);\n }, [rows, suppressCurrentItemIds, type]);\n\n return (\n <List<CompositeBarRow>\n id={compositeId}\n ref={ref}\n className={inlineGroupChildren ? b({'inline-groups': true}) : undefined}\n items={rows}\n selectedItemIndex={selectedRootItemIndex}\n itemHeight={itemHeight}\n itemsHeight={itemsHeight}\n itemClassName={b('root-menu-item', menuItemClassName)}\n virtualized={false}\n filterable={false}\n sortable={false}\n renderItem={(row) => {\n if (row.kind === 'item') {\n const item = row.item;\n let menuPopupItems: AsideHeaderItem[] | undefined;\n let menuPopupTitle: string | undefined;\n\n if (item.id === COLLAPSE_ITEM_ID) {\n menuPopupItems = collapseItems;\n } else {\n menuPopupItems = item.compositeBarMenuPopupItems;\n menuPopupTitle = item.compositeBarMenuPopupTitle;\n }\n\n return (\n <Item\n {...item}\n compact={compact}\n popupItemClassName={menuItemClassName}\n menuPopupItems={menuPopupItems}\n menuPopupTitle={menuPopupTitle}\n menuPopupNestedHideIcon={hideNestedIcons}\n onMouseLeave={onMouseLeave}\n onPopupItemClick={onPopupItemClick}\n onItemClick={onItemClickByIndex(item.onItemClick)}\n suppressCurrentItemIds={suppressCurrentItemIds}\n enableQuickAccessPin={enableQuickAccessPin}\n quickAccessPinItem={item}\n onToggleQuickAccess={onToggleQuickAccess}\n />\n );\n }\n\n const headerItem = makeGroupHeaderAsideItem(row.group);\n const groupIsCollapsed = isGroupCollapsed(row.group.id);\n const groupHasOwnAction = Boolean(row.group.onItemClick || row.group.href);\n const onHeaderItemClick = onItemClickByIndex(row.group.onItemClick) as NonNullable<\n ItemProps['onItemClick']\n >;\n\n if (!inlineGroupChildren) {\n return (\n <Item\n {...headerItem}\n href={row.group.href}\n compact={compact}\n popupItemClassName={menuItemClassName}\n menuPopupItems={row.items}\n menuPopupTitle={row.group.popupTitle}\n menuPopupHideIcon={hideNestedIcons}\n className={b('menu-group-header')}\n onMouseLeave={onMouseLeave}\n onPopupItemClick={onPopupItemClick}\n onItemClick={onHeaderItemClick}\n suppressCurrentItemIds={suppressCurrentItemIds}\n enableQuickAccessPin={enableQuickAccessPin}\n onToggleQuickAccess={onToggleQuickAccess}\n />\n );\n }\n\n const selectedItemIndex = row.items.findIndex((item) =>\n isItemPresentationCurrent(item, {suppressCurrentItemIds}),\n );\n const normalizedSelectedItemIndex =\n selectedItemIndex === -1 ? undefined : selectedItemIndex;\n\n return (\n <div\n data-gn-aside-group={row.group.id}\n className={b('menu-group', {\n expanded: !groupIsCollapsed,\n collapsed: groupIsCollapsed,\n })}\n onMouseEnter={deactivateParentListItem}\n >\n <Item\n {...headerItem}\n href={row.group.href}\n compact={compact}\n popupItemClassName={menuItemClassName}\n className={b('menu-group-header')}\n groupHeaderExpanded={!groupIsCollapsed}\n menuPopupItems={groupIsCollapsed ? row.items : undefined}\n menuPopupTitle={groupIsCollapsed ? row.group.popupTitle : undefined}\n menuPopupHideIcon={hideNestedIcons}\n onMouseLeave={onMouseLeave}\n onPopupItemClick={onPopupItemClick}\n onGroupHeaderChevronClick={\n groupHasOwnAction\n ? () => onToggleGroupCollapsed(row.group.id)\n : undefined\n }\n onItemClick={(item, isItemCollapsed, event) => {\n if (!groupHasOwnAction) {\n onToggleGroupCollapsed(row.group.id);\n }\n onHeaderItemClick(item, isItemCollapsed, event);\n }}\n suppressCurrentItemIds={suppressCurrentItemIds}\n enableQuickAccessPin={enableQuickAccessPin}\n onToggleQuickAccess={onToggleQuickAccess}\n />\n {!groupIsCollapsed && (\n <List<AsideHeaderItem>\n items={row.items}\n selectedItemIndex={normalizedSelectedItemIndex}\n itemHeight={nestedItemHeight}\n itemsHeight={nestedItemsHeight}\n itemClassName={b('menu-group-nested-list-item')}\n virtualized={false}\n filterable={false}\n sortable={false}\n renderItem={(nestedItem, _isActive, groupItemIndex) => {\n const spineActive =\n normalizedSelectedItemIndex !== undefined &&\n groupItemIndex < normalizedSelectedItemIndex;\n\n return (\n <div className={b('menu-group-nested-row-inner')}>\n <Item\n {...nestedItem}\n className={[\n nestedItem.className,\n b('menu-group-nested-item'),\n ]\n .filter(Boolean)\n .join(' ')}\n compact={compact}\n hideIcon={hideNestedIcons}\n menuGroupNested\n menuGroupNestedTreeConnector={\n <span\n className={b(\n 'menu-group-nested-connector',\n {'spine-active': spineActive},\n )}\n aria-hidden\n >\n <svg\n className={b(\n 'menu-group-nested-tree-svg',\n {\n active:\n normalizedSelectedItemIndex ===\n groupItemIndex,\n },\n )}\n viewBox=\"0 0 16 40\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d={\n MENU_GROUP_NESTED_TREE_CONNECTOR_PATH\n }\n fill=\"none\"\n strokeLinecap=\"butt\"\n strokeWidth=\"1.3\"\n vectorEffect=\"non-scaling-stroke\"\n />\n </svg>\n </span>\n }\n onMouseLeave={onMouseLeave}\n onItemClick={onItemClickByIndex(\n nestedItem.onItemClick,\n )}\n suppressCurrentItemIds={suppressCurrentItemIds}\n enableQuickAccessPin={enableQuickAccessPin}\n quickAccessPinItem={nestedItem}\n onToggleQuickAccess={onToggleQuickAccess}\n />\n </div>\n );\n }}\n />\n )}\n </div>\n );\n }}\n />\n );\n};\n\nexport const CompositeBar: FC<CompositeBarProps> = ({\n type,\n items,\n menuGroups,\n menuMoreTitle,\n onItemClick,\n onMoreClick,\n compact,\n compositeId,\n menuItemClassName,\n layoutWidth,\n menuOverflow = 'collapse',\n collapsedMenuGroupIds: collapsedMenuGroupIdsProp,\n defaultCollapsedMenuGroupIds,\n onToggleMenuGroupCollapsed,\n enableQuickAccessPin,\n onToggleQuickAccess,\n suppressCurrentItemIds,\n menuGroupNestedIcons = true,\n}) => {\n const rows = useMemo(() => buildCompositeBarRows(items, menuGroups), [items, menuGroups]);\n const {menuDensity} = useAsideHeaderContext();\n\n const isCollapsedControlled = collapsedMenuGroupIdsProp !== undefined;\n const [uncontrolledCollapsed, setUncontrolledCollapsed] = useState<Record<string, boolean>>(\n () => defaultCollapsedMenuGroupIds ?? {},\n );\n\n const collapsedMap = isCollapsedControlled ? collapsedMenuGroupIdsProp : uncontrolledCollapsed;\n\n const onToggleGroupCollapsed = useCallback(\n (groupId: string) => {\n onToggleMenuGroupCollapsed?.(groupId);\n if (!isCollapsedControlled) {\n setUncontrolledCollapsed((prev) => ({...prev, [groupId]: !prev[groupId]}));\n }\n },\n [isCollapsedControlled, onToggleMenuGroupCollapsed],\n );\n\n const isGroupCollapsed = useCallback(\n (groupId: string) => Boolean(collapsedMap[groupId]),\n [collapsedMap],\n );\n\n const inlineGroupChildren =\n !compact && menuOverflow === 'scroll' && type === 'menu' && Boolean(menuGroups?.length);\n\n const scrollableRows = useMemo(() => getReorderedCompositeBarRows(rows), [rows]);\n\n if (rows.length === 0) {\n return null;\n }\n\n let node: ReactNode;\n\n if (type === 'menu') {\n if (menuOverflow === 'scroll' && !compact) {\n const menuView = (\n <CompositeBarView\n compositeId={compositeId}\n type=\"menu\"\n compact={compact}\n rows={scrollableRows}\n onItemClick={onItemClick}\n onMoreClick={onMoreClick}\n menuItemClassName={menuItemClassName}\n inlineGroupChildren={inlineGroupChildren}\n isGroupCollapsed={isGroupCollapsed}\n onToggleGroupCollapsed={onToggleGroupCollapsed}\n enableQuickAccessPin={enableQuickAccessPin}\n onToggleQuickAccess={onToggleQuickAccess}\n suppressCurrentItemIds={suppressCurrentItemIds}\n menuGroupNestedIcons={menuGroupNestedIcons}\n />\n );\n\n node = menuView;\n } else {\n const itemLayout = compact ? {sidebarCompact: true as const} : undefined;\n const minHeight = getCompositeBarRowsMinHeight(rows, menuDensity, itemLayout);\n const collapseItem = getMoreButtonItem(menuMoreTitle, menuDensity);\n node = (\n <div className={b({autosizer: true})} style={{minHeight}}>\n {rows.length !== 0 && (\n <AutoSizer>\n {(size: Size) => {\n const width =\n layoutWidth ?? (Number.isNaN(size.width) ? 0 : size.width);\n const height = Number.isNaN(size.height) ? 0 : size.height;\n\n const {listRows, collapseItems} = getAutosizeCompositeBarRows(\n rows,\n height,\n collapseItem,\n menuDensity,\n itemLayout,\n );\n return (\n <div style={{width, height}}>\n <CompositeBarView\n compositeId={compositeId}\n type=\"menu\"\n compact={compact}\n rows={listRows}\n onItemClick={onItemClick}\n onMoreClick={onMoreClick}\n menuItemClassName={menuItemClassName}\n collapseItems={collapseItems}\n inlineGroupChildren={false}\n isGroupCollapsed={isGroupCollapsed}\n onToggleGroupCollapsed={onToggleGroupCollapsed}\n enableQuickAccessPin={enableQuickAccessPin}\n onToggleQuickAccess={onToggleQuickAccess}\n suppressCurrentItemIds={suppressCurrentItemIds}\n menuGroupNestedIcons={menuGroupNestedIcons}\n />\n </div>\n );\n }}\n </AutoSizer>\n )}\n </div>\n );\n }\n } else if (type === 'quick-access') {\n node = (\n <div className={b({'quick-access': true})}>\n <CompositeBarView\n compositeId={compositeId}\n type=\"quick-access\"\n menuItemClassName={menuItemClassName}\n compact={compact}\n rows={rows}\n onItemClick={onItemClick}\n inlineGroupChildren={false}\n isGroupCollapsed={isGroupCollapsed}\n onToggleGroupCollapsed={onToggleGroupCollapsed}\n enableQuickAccessPin={enableQuickAccessPin}\n onToggleQuickAccess={onToggleQuickAccess}\n />\n </div>\n );\n } else {\n node = (\n <div className={b({subheader: true})}>\n <CompositeBarView\n compositeId={compositeId}\n type=\"subheader\"\n menuItemClassName={menuItemClassName}\n compact={compact}\n rows={rows}\n onItemClick={onItemClick}\n inlineGroupChildren={false}\n isGroupCollapsed={isGroupCollapsed}\n onToggleGroupCollapsed={onToggleGroupCollapsed}\n menuGroupNestedIcons={menuGroupNestedIcons}\n />\n </div>\n );\n }\n return node;\n};\n"],"names":["React"],"mappings":";;;;;;;;;;;;AA6BA,MAAM,CAAC,GAAG,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC;AAE9C;AACA,MAAM,qCAAqC,GACvC,6DAA6D;AAuDjE,MAAM,gBAAgB,GAA8B,CAAC,EACjD,IAAI,EACJ,IAAI,EACJ,WAAW,EACX,WAAW,EACX,aAAa,EACb,OAAO,EACP,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,GAAG,IAAI,GAC9B,KAAI;AACD,IAAA,MAAM,GAAG,GAAG,MAAM,CAAwB,IAAI,CAAC;AAC/C,IAAA,MAAM,EAAC,WAAW,EAAC,GAAG,qBAAqB,EAAE;AAC7C,IAAA,MAAM,eAAe,GAAG,CAAC,oBAAoB;IAC7C,MAAM,UAAU,GAAG,OAAO,CACtB,OAAO,OAAO,GAAG,EAAC,cAAc,EAAE,IAAa,EAAC,GAAG,SAAS,CAAC,EAC7D,CAAC,OAAO,CAAC,CACZ;AAED,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;;AAClC,QAAA,IAAI,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE;AAChC,YAAA,CAAA,EAAA,GAAA,GAAG,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,SAAA,GAAA,SAAA,GAAA,EAAA,CAAA,YAAY,EAAE;;AAEnC,KAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AAEb,IAAA,MAAM,wBAAwB,GAAG,WAAW,CAAC,MAAK;;AAC9C,QAAA,CAAA,EAAA,GAAA,GAAG,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,SAAA,GAAA,SAAA,GAAA,EAAA,CAAA,YAAY,EAAE;KAC9B,EAAE,EAAE,CAAC;IAEN,MAAM,gBAAgB,GAAG,WAAW,CAChC,CACI,IAAqB,EACrB,SAAkB,EAClB,KAAgD,KAChD;QACA,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,SAAA,GAAA,SAAA,GAAX,WAAW,CAAG,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC;AACzC,KAAC,EACD,CAAC,WAAW,CAAC,CAChB;AAED,IAAA,MAAM,kBAAkB,GAAG,WAAW,CAClC,CAAC,gBAAgD,KAC7C,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,KAAI;QACvB,IAAI,IAAI,CAAC,EAAE,KAAK,gBAAgB,IAAI,SAAS,EAAE;AAC3C,YAAA,WAAW,KAAX,IAAA,IAAA,WAAW,KAAX,SAAA,GAAA,SAAA,GAAA,WAAW,EAAI;;aACZ;AACH,YAAA,WAAW,KAAX,IAAA,IAAA,WAAW,KAAX,SAAA,GAAA,SAAA,GAAA,WAAW,iCAEA,IAAI,CAAA,EAAA,EACP,WAAW,EAAE,gBAAgB,EAEjC,CAAA,EAAA,SAAS,EACT,KAAK,CACR;;AAET,KAAC,EACL,CAAC,WAAW,EAAE,WAAW,CAAC,CAC7B;AAED,IAAA,MAAM,UAAU,GAAG,WAAW,CAC1B,CAAC,GAAoB,KAAI;AACrB,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;YACrB,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC;;AAE3D,QAAA,MAAM,OAAO,GAAG,aAAa,CACzB,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,EACnC,WAAW,EACX,UAAU,CACb;AACD,QAAA,IAAI,CAAC,mBAAmB,IAAI,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;AACxD,YAAA,OAAO,OAAO;;AAElB,QAAA,OAAO,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC;KACtE,EACD,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,UAAU,EAAE,WAAW,CAAC,CACnE;IAED,MAAM,gBAAgB,GAAG,WAAW,CAChC,CAAC,IAAqB,KAAK,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC,EACvE,CAAC,UAAU,EAAE,WAAW,CAAC,CAC5B;IAED,MAAM,iBAAiB,GAAG,WAAW,CACjC,CAAC,SAA4B,KAAK,cAAc,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC,EACpF,CAAC,UAAU,EAAE,WAAW,CAAC,CAC5B;AAED,IAAA,MAAM,WAAW,GAAG,WAAW,CAC3B,CAAC,QAA2B,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EACxF,CAAC,UAAU,CAAC,CACf;AAED,IAAA,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAK;AACvC,QAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AACjB,YAAA,OAAO,SAAS;;AAGpB,QAAA,OAAO,+BAA+B,CAAC,IAAI,EAAE,sBAAsB,CAAC;KACvE,EAAE,CAAC,IAAI,EAAE,sBAAsB,EAAE,IAAI,CAAC,CAAC;AAExC,IAAA,QACIA,cAAA,CAAA,aAAA,CAAC,IAAI,EAAA,EACD,EAAE,EAAE,WAAW,EACf,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,mBAAmB,GAAG,CAAC,CAAC,EAAC,eAAe,EAAE,IAAI,EAAC,CAAC,GAAG,SAAS,EACvE,KAAK,EAAE,IAAI,EACX,iBAAiB,EAAE,qBAAqB,EACxC,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,CAAC,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,EACrD,WAAW,EAAE,KAAK,EAClB,UAAU,EAAE,KAAK,EACjB,QAAQ,EAAE,KAAK,EACf,UAAU,EAAE,CAAC,GAAG,KAAI;AAChB,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;AACrB,gBAAA,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI;AACrB,gBAAA,IAAI,cAA6C;AACjD,gBAAA,IAAI,cAAkC;AAEtC,gBAAA,IAAI,IAAI,CAAC,EAAE,KAAK,gBAAgB,EAAE;oBAC9B,cAAc,GAAG,aAAa;;qBAC3B;AACH,oBAAA,cAAc,GAAG,IAAI,CAAC,0BAA0B;AAChD,oBAAA,cAAc,GAAG,IAAI,CAAC,0BAA0B;;AAGpD,gBAAA,QACIA,cAAA,CAAA,aAAA,CAAC,IAAI,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACG,IAAI,EAAA,EACR,OAAO,EAAE,OAAO,EAChB,kBAAkB,EAAE,iBAAiB,EACrC,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,EAC9B,uBAAuB,EAAE,eAAe,EACxC,YAAY,EAAE,YAAY,EAC1B,gBAAgB,EAAE,gBAAgB,EAClC,WAAW,EAAE,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,EACjD,sBAAsB,EAAE,sBAAsB,EAC9C,oBAAoB,EAAE,oBAAoB,EAC1C,kBAAkB,EAAE,IAAI,EACxB,mBAAmB,EAAE,mBAAmB,EAC1C,CAAA,CAAA;;YAIV,MAAM,UAAU,GAAG,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC;YACtD,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AACvD,YAAA,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAC1E,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAEjE;YAED,IAAI,CAAC,mBAAmB,EAAE;AACtB,gBAAA,QACIA,cAAA,CAAA,aAAA,CAAC,IAAI,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACG,UAAU,EACd,EAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,EACpB,OAAO,EAAE,OAAO,EAChB,kBAAkB,EAAE,iBAAiB,EACrC,cAAc,EAAE,GAAG,CAAC,KAAK,EACzB,cAAc,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,EACpC,iBAAiB,EAAE,eAAe,EAClC,SAAS,EAAE,CAAC,CAAC,mBAAmB,CAAC,EACjC,YAAY,EAAE,YAAY,EAC1B,gBAAgB,EAAE,gBAAgB,EAClC,WAAW,EAAE,iBAAiB,EAC9B,sBAAsB,EAAE,sBAAsB,EAC9C,oBAAoB,EAAE,oBAAoB,EAC1C,mBAAmB,EAAE,mBAAmB,EAAA,CAAA,CAC1C;;YAIV,MAAM,iBAAiB,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAC/C,yBAAyB,CAAC,IAAI,EAAE,EAAC,sBAAsB,EAAC,CAAC,CAC5D;AACD,YAAA,MAAM,2BAA2B,GAC7B,iBAAiB,KAAK,EAAE,GAAG,SAAS,GAAG,iBAAiB;AAE5D,YAAA,QACIA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,qBAAA,EACyB,GAAG,CAAC,KAAK,CAAC,EAAE,EACjC,SAAS,EAAE,CAAC,CAAC,YAAY,EAAE;oBACvB,QAAQ,EAAE,CAAC,gBAAgB;AAC3B,oBAAA,SAAS,EAAE,gBAAgB;iBAC9B,CAAC,EACF,YAAY,EAAE,wBAAwB,EAAA;AAEtC,gBAAAA,cAAA,CAAA,aAAA,CAAC,IAAI,EACG,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,UAAU,EACd,EAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,EACpB,OAAO,EAAE,OAAO,EAChB,kBAAkB,EAAE,iBAAiB,EACrC,SAAS,EAAE,CAAC,CAAC,mBAAmB,CAAC,EACjC,mBAAmB,EAAE,CAAC,gBAAgB,EACtC,cAAc,EAAE,gBAAgB,GAAG,GAAG,CAAC,KAAK,GAAG,SAAS,EACxD,cAAc,EAAE,gBAAgB,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,EACnE,iBAAiB,EAAE,eAAe,EAClC,YAAY,EAAE,YAAY,EAC1B,gBAAgB,EAAE,gBAAgB,EAClC,yBAAyB,EACrB;0BACM,MAAM,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC3C,0BAAE,SAAS,EAEnB,WAAW,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,KAAI;wBAC1C,IAAI,CAAC,iBAAiB,EAAE;AACpB,4BAAA,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;;AAExC,wBAAA,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,CAAC;AACnD,qBAAC,EACD,sBAAsB,EAAE,sBAAsB,EAC9C,oBAAoB,EAAE,oBAAoB,EAC1C,mBAAmB,EAAE,mBAAmB,EAC1C,CAAA,CAAA;gBACD,CAAC,gBAAgB,KACdA,cAAC,CAAA,aAAA,CAAA,IAAI,IACD,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,iBAAiB,EAAE,2BAA2B,EAC9C,UAAU,EAAE,gBAAgB,EAC5B,WAAW,EAAE,iBAAiB,EAC9B,aAAa,EAAE,CAAC,CAAC,6BAA6B,CAAC,EAC/C,WAAW,EAAE,KAAK,EAClB,UAAU,EAAE,KAAK,EACjB,QAAQ,EAAE,KAAK,EACf,UAAU,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,cAAc,KAAI;AAClD,wBAAA,MAAM,WAAW,GACb,2BAA2B,KAAK,SAAS;4BACzC,cAAc,GAAG,2BAA2B;AAEhD,wBAAA,QACIA,cAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAE,CAAC,CAAC,6BAA6B,CAAC,EAAA;AAC5C,4BAAAA,cAAA,CAAA,aAAA,CAAC,IAAI,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACG,UAAU,EAAA,EACd,SAAS,EAAE;AACP,oCAAA,UAAU,CAAC,SAAS;oCACpB,CAAC,CAAC,wBAAwB,CAAC;AAC9B;qCACI,MAAM,CAAC,OAAO;AACd,qCAAA,IAAI,CAAC,GAAG,CAAC,EACd,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,eAAe,EACzB,eAAe,EAAA,IAAA,EACf,4BAA4B,EACxBA,cACI,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,SAAS,EAAE,CAAC,CACR,6BAA6B,EAC7B,EAAC,cAAc,EAAE,WAAW,EAAC,CAChC,EAAA,aAAA,EAAA,IAAA,EAAA;AAGD,oCAAAA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACI,SAAS,EAAE,CAAC,CACR,4BAA4B,EAC5B;AACI,4CAAA,MAAM,EACF,2BAA2B;gDAC3B,cAAc;AACrB,yCAAA,CACJ,EACD,OAAO,EAAC,WAAW,EACnB,KAAK,EAAC,4BAA4B,EAAA;wCAElCA,cACI,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,CAAC,EACG,qCAAqC,EAEzC,IAAI,EAAC,MAAM,EACX,aAAa,EAAC,MAAM,EACpB,WAAW,EAAC,KAAK,EACjB,YAAY,EAAC,oBAAoB,EACnC,CAAA,CACA,CACH,EAEX,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,kBAAkB,CAC3B,UAAU,CAAC,WAAW,CACzB,EACD,sBAAsB,EAAE,sBAAsB,EAC9C,oBAAoB,EAAE,oBAAoB,EAC1C,kBAAkB,EAAE,UAAU,EAC9B,mBAAmB,EAAE,mBAAmB,EAAA,CAAA,CAC1C,CACA;AAEd,qBAAC,EACH,CAAA,CACL,CACC;SAEb,EAAA,CACH;AAEV,CAAC;MAEY,YAAY,GAA0B,CAAC,EAChD,IAAI,EACJ,KAAK,EACL,UAAU,EACV,aAAa,EACb,WAAW,EACX,WAAW,EACX,OAAO,EACP,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,YAAY,GAAG,UAAU,EACzB,qBAAqB,EAAE,yBAAyB,EAChD,4BAA4B,EAC5B,0BAA0B,EAC1B,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,GAAG,IAAI,GAC9B,KAAI;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACzF,IAAA,MAAM,EAAC,WAAW,EAAC,GAAG,qBAAqB,EAAE;AAE7C,IAAA,MAAM,qBAAqB,GAAG,yBAAyB,KAAK,SAAS;AACrE,IAAA,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,GAAG,QAAQ,CAC9D,MAAM,4BAA4B,aAA5B,4BAA4B,KAAA,SAAA,GAA5B,4BAA4B,GAAI,EAAE,CAC3C;IAED,MAAM,YAAY,GAAG,qBAAqB,GAAG,yBAAyB,GAAG,qBAAqB;AAE9F,IAAA,MAAM,sBAAsB,GAAG,WAAW,CACtC,CAAC,OAAe,KAAI;AAChB,QAAA,0BAA0B,aAA1B,0BAA0B,KAAA,SAAA,GAAA,SAAA,GAA1B,0BAA0B,CAAG,OAAO,CAAC;QACrC,IAAI,CAAC,qBAAqB,EAAE;YACxB,wBAAwB,CAAC,CAAC,IAAI,MAAK,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAK,IAAI,CAAE,EAAA,EAAA,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAA,CAAA,CAAE,CAAC;;AAElF,KAAC,EACD,CAAC,qBAAqB,EAAE,0BAA0B,CAAC,CACtD;IAED,MAAM,gBAAgB,GAAG,WAAW,CAChC,CAAC,OAAe,KAAK,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,EACnD,CAAC,YAAY,CAAC,CACjB;IAED,MAAM,mBAAmB,GACrB,CAAC,OAAO,IAAI,YAAY,KAAK,QAAQ,IAAI,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,UAAU,KAAV,IAAA,IAAA,UAAU,6BAAV,UAAU,CAAE,MAAM,CAAC;AAE3F,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,4BAA4B,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AAEhF,IAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACnB,QAAA,OAAO,IAAI;;AAGf,IAAA,IAAI,IAAe;AAEnB,IAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AACjB,QAAA,IAAI,YAAY,KAAK,QAAQ,IAAI,CAAC,OAAO,EAAE;AACvC,YAAA,MAAM,QAAQ,IACVA,cAAA,CAAA,aAAA,CAAC,gBAAgB,EAAA,EACb,WAAW,EAAE,WAAW,EACxB,IAAI,EAAC,MAAM,EACX,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,cAAc,EACpB,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,iBAAiB,EAAE,iBAAiB,EACpC,mBAAmB,EAAE,mBAAmB,EACxC,gBAAgB,EAAE,gBAAgB,EAClC,sBAAsB,EAAE,sBAAsB,EAC9C,oBAAoB,EAAE,oBAAoB,EAC1C,mBAAmB,EAAE,mBAAmB,EACxC,sBAAsB,EAAE,sBAAsB,EAC9C,oBAAoB,EAAE,oBAAoB,EAAA,CAC5C,CACL;YAED,IAAI,GAAG,QAAQ;;aACZ;AACH,YAAA,MAAM,UAAU,GAAG,OAAO,GAAG,EAAC,cAAc,EAAE,IAAa,EAAC,GAAG,SAAS;YACxE,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC;YAC7E,MAAM,YAAY,GAAG,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC;AAClE,YAAA,IAAI,IACAA,cAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAE,CAAC,CAAC,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,EAAE,KAAK,EAAE,EAAC,SAAS,EAAC,EAAA,EACnD,IAAI,CAAC,MAAM,KAAK,CAAC,KACdA,6BAAC,SAAS,EAAA,IAAA,EACL,CAAC,IAAU,KAAI;AACZ,gBAAA,MAAM,KAAK,GACP,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,SAAA,GAAX,WAAW,IAAK,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC9D,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;AAE1D,gBAAA,MAAM,EAAC,QAAQ,EAAE,aAAa,EAAC,GAAG,2BAA2B,CACzD,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,WAAW,EACX,UAAU,CACb;gBACD,QACIA,sCAAK,KAAK,EAAE,EAAC,KAAK,EAAE,MAAM,EAAC,EAAA;AACvB,oBAAAA,cAAA,CAAA,aAAA,CAAC,gBAAgB,EAAA,EACb,WAAW,EAAE,WAAW,EACxB,IAAI,EAAC,MAAM,EACX,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,QAAQ,EACd,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,iBAAiB,EAAE,iBAAiB,EACpC,aAAa,EAAE,aAAa,EAC5B,mBAAmB,EAAE,KAAK,EAC1B,gBAAgB,EAAE,gBAAgB,EAClC,sBAAsB,EAAE,sBAAsB,EAC9C,oBAAoB,EAAE,oBAAoB,EAC1C,mBAAmB,EAAE,mBAAmB,EACxC,sBAAsB,EAAE,sBAAsB,EAC9C,oBAAoB,EAAE,oBAAoB,EAC5C,CAAA,CACA;AAEd,aAAC,CACO,CACf,CACC,CACT;;;AAEF,SAAA,IAAI,IAAI,KAAK,cAAc,EAAE;AAChC,QAAA,IAAI,IACAA,cAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAE,CAAC,CAAC,EAAC,cAAc,EAAE,IAAI,EAAC,CAAC,EAAA;YACrCA,cAAC,CAAA,aAAA,CAAA,gBAAgB,IACb,WAAW,EAAE,WAAW,EACxB,IAAI,EAAC,cAAc,EACnB,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,WAAW,EACxB,mBAAmB,EAAE,KAAK,EAC1B,gBAAgB,EAAE,gBAAgB,EAClC,sBAAsB,EAAE,sBAAsB,EAC9C,oBAAoB,EAAE,oBAAoB,EAC1C,mBAAmB,EAAE,mBAAmB,EAAA,CAC1C,CACA,CACT;;SACE;AACH,QAAA,IAAI,IACAA,cAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAE,CAAC,CAAC,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,EAAA;YAChCA,cAAC,CAAA,aAAA,CAAA,gBAAgB,IACb,WAAW,EAAE,WAAW,EACxB,IAAI,EAAC,WAAW,EAChB,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,WAAW,EACxB,mBAAmB,EAAE,KAAK,EAC1B,gBAAgB,EAAE,gBAAgB,EAClC,sBAAsB,EAAE,sBAAsB,EAC9C,oBAAoB,EAAE,oBAAoB,EAC5C,CAAA,CACA,CACT;;AAEL,IAAA,OAAO,IAAI;AACf;;;;"}
|