@gravity-ui/navigation 5.0.0-beta.3 → 5.0.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/assets/icons/divider-collapsed-compact.svg.js +41 -0
- package/build/cjs/assets/icons/divider-collapsed-compact.svg.js.map +1 -0
- package/build/cjs/components/AsideHeader/AsideHeader.css +1 -1
- package/build/cjs/components/AsideHeader/AsideHeader.js +3 -3
- 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 +17 -4
- package/build/cjs/components/AsideHeader/AsideHeaderContext.js +10 -8
- package/build/cjs/components/AsideHeader/AsideHeaderContext.js.map +1 -1
- package/build/cjs/components/AsideHeader/FooterLayoutContext.d.ts +7 -0
- package/build/cjs/components/AsideHeader/FooterLayoutContext.js +10 -0
- package/build/cjs/components/AsideHeader/FooterLayoutContext.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.css +1 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.js +23 -15
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.module.scss.js +1 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.js +10 -5
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getExpandedIndexForSortableIndex.d.ts +9 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getExpandedIndexForSortableIndex.js +27 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getExpandedIndexForSortableIndex.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getRealIndexInGroup.d.ts +71 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getRealIndexInGroup.js +122 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getRealIndexInGroup.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItemsWithDividers.d.ts +3 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItemsWithDividers.js +23 -22
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItemsWithDividers.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/CollapseButton/CollapseButton.css +1 -1
- package/build/cjs/components/AsideHeader/components/CollapseButton/CollapseButton.d.ts +2 -1
- package/build/cjs/components/AsideHeader/components/CollapseButton/CollapseButton.js +13 -13
- 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/CompositeBar/CompositeBar.css +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/CompositeBar.d.ts +11 -5
- package/build/cjs/components/AsideHeader/components/CompositeBar/CompositeBar.js +63 -165
- 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/Item/Item.css +25 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.d.ts +7 -2
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.js +26 -8
- 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/ScrollableWithScrollbar/ScrollableWithScrollbar.css +1 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.d.ts +8 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.js +27 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.module.scss.js +8 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.module.scss.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/index.d.ts +1 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollbar.d.ts +21 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollbar.js +146 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollbar.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/utils.d.ts +4 -2
- package/build/cjs/components/AsideHeader/components/CompositeBar/utils.js +57 -7
- package/build/cjs/components/AsideHeader/components/CompositeBar/utils.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/FirstPanel.js +29 -9
- package/build/cjs/components/AsideHeader/components/FirstPanel.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/FooterBar/FooterBar.css +1 -0
- package/build/cjs/components/AsideHeader/components/FooterBar/FooterBar.d.ts +19 -0
- package/build/cjs/components/AsideHeader/components/FooterBar/FooterBar.js +95 -0
- package/build/cjs/components/AsideHeader/components/FooterBar/FooterBar.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/FooterBar/FooterBar.module.scss.js +8 -0
- package/build/cjs/components/AsideHeader/components/FooterBar/FooterBar.module.scss.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/FooterBar/constants.d.ts +1 -0
- package/build/cjs/components/AsideHeader/components/FooterBar/constants.js +6 -0
- package/build/cjs/components/AsideHeader/components/FooterBar/constants.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/FooterBar/index.d.ts +1 -0
- package/build/cjs/components/AsideHeader/components/FooterItem/FooterItem.css +1 -1
- package/build/cjs/components/AsideHeader/components/FooterItem/FooterItem.d.ts +2 -0
- package/build/cjs/components/AsideHeader/components/FooterItem/FooterItem.js +12 -1
- 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 +9 -6
- package/build/cjs/components/AsideHeader/components/Header.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/PageLayout/AsideFallback.css +2 -0
- package/build/cjs/components/AsideHeader/components/PageLayout/AsideFallback.js +4 -3
- package/build/cjs/components/AsideHeader/components/PageLayout/AsideFallback.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayout.css +2 -0
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayout.d.ts +4 -2
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayout.js +12 -9
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayout.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayoutAside.css +2 -0
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayoutAside.d.ts +1 -1
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayoutAside.js +5 -3
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayoutAside.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/Panels.js +6 -3
- package/build/cjs/components/AsideHeader/components/Panels.js.map +1 -1
- package/build/cjs/components/AsideHeader/hooks/useIsExpanded.d.ts +3 -1
- package/build/cjs/components/AsideHeader/hooks/useIsExpanded.js +34 -11
- package/build/cjs/components/AsideHeader/hooks/useIsExpanded.js.map +1 -1
- package/build/cjs/components/AsideHeader/i18n/en.json.js +4 -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 +4 -1
- package/build/cjs/components/AsideHeader/i18n/ru.json.js.map +1 -1
- package/build/cjs/components/AsideHeader/index.d.ts +3 -2
- package/build/cjs/components/AsideHeader/types.d.ts +30 -14
- package/build/cjs/components/AsideHeader/types.js.map +1 -1
- package/build/cjs/components/AsideHeader/useAsideHeaderInnerContextValue.d.ts +3 -2
- package/build/cjs/components/AsideHeader/useAsideHeaderInnerContextValue.js +31 -9
- package/build/cjs/components/AsideHeader/useAsideHeaderInnerContextValue.js.map +1 -1
- package/build/cjs/components/AsideHeader/utils/getGroupHeight.d.ts +1 -1
- package/build/cjs/components/AsideHeader/utils/getGroupHeight.js +5 -5
- package/build/cjs/components/AsideHeader/utils/getGroupHeight.js.map +1 -1
- package/build/cjs/components/Footer/desktop/Footer.js +1 -1
- package/build/cjs/components/Footer/desktop/Footer.js.map +1 -1
- package/build/cjs/components/Footer/mobile/Footer.js +1 -1
- package/build/cjs/components/Footer/mobile/Footer.js.map +1 -1
- package/build/cjs/components/HotkeysPanel/HotkeysPanel.d.ts +6 -4
- package/build/cjs/components/HotkeysPanel/HotkeysPanel.js +4 -7
- package/build/cjs/components/HotkeysPanel/HotkeysPanel.js.map +1 -1
- package/build/cjs/components/Logo/Logo.css +1 -1
- package/build/cjs/components/Logo/Logo.d.ts +7 -3
- package/build/cjs/components/Logo/Logo.js +9 -6
- package/build/cjs/components/Logo/Logo.js.map +1 -1
- package/build/cjs/components/Logo/Logo.module.scss.js +1 -1
- package/build/cjs/components/MobileHeader/MobileHeader.d.ts +4 -8
- package/build/cjs/components/MobileHeader/MobileHeader.js +24 -20
- package/build/cjs/components/MobileHeader/MobileHeader.js.map +1 -1
- package/build/cjs/components/MobileHeader/OverlapPanel/OverlapPanel.d.ts +2 -2
- package/build/cjs/components/MobileHeader/OverlapPanel/OverlapPanel.js +2 -2
- package/build/cjs/components/MobileHeader/OverlapPanel/OverlapPanel.js.map +1 -1
- package/build/cjs/components/MobileLogo/MobileLogo.d.ts +1 -1
- package/build/cjs/components/MobileLogo/MobileLogo.js +2 -2
- package/build/cjs/components/MobileLogo/MobileLogo.js.map +1 -1
- package/build/cjs/components/Settings/Settings.css +1 -1
- package/build/cjs/components/Settings/SettingsMenu/SettingsMenu.css +1 -1
- package/build/cjs/components/Settings/SettingsMenu/SettingsMenu.js +5 -1
- package/build/cjs/components/Settings/SettingsMenu/SettingsMenu.js.map +1 -1
- package/build/cjs/components/Settings/SettingsMenu/SettingsMenu.module.scss.js +1 -1
- package/build/cjs/components/constants.d.ts +6 -2
- package/build/cjs/components/constants.js +11 -3
- package/build/cjs/components/constants.js.map +1 -1
- package/build/cjs/components/types.d.ts +11 -6
- package/build/cjs/components/utils/getCollapsedWidth.d.ts +1 -0
- package/build/cjs/components/utils/getCollapsedWidth.js +10 -0
- package/build/cjs/components/utils/getCollapsedWidth.js.map +1 -0
- package/build/cjs/index.js +4 -0
- package/build/cjs/index.js.map +1 -1
- package/build/esm/assets/icons/divider-collapsed-compact.svg.js +18 -0
- package/build/esm/assets/icons/divider-collapsed-compact.svg.js.map +1 -0
- package/build/esm/components/AsideHeader/AsideHeader.css +1 -1
- package/build/esm/components/AsideHeader/AsideHeader.js +3 -3
- 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 +17 -4
- package/build/esm/components/AsideHeader/AsideHeaderContext.js +10 -9
- package/build/esm/components/AsideHeader/AsideHeaderContext.js.map +1 -1
- package/build/esm/components/AsideHeader/FooterLayoutContext.d.ts +7 -0
- package/build/esm/components/AsideHeader/FooterLayoutContext.js +7 -0
- package/build/esm/components/AsideHeader/FooterLayoutContext.js.map +1 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.css +1 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.js +24 -16
- package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.js.map +1 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.module.scss.js +1 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.js +10 -5
- package/build/esm/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.js.map +1 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getExpandedIndexForSortableIndex.d.ts +9 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getExpandedIndexForSortableIndex.js +25 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getExpandedIndexForSortableIndex.js.map +1 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getRealIndexInGroup.d.ts +71 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getRealIndexInGroup.js +117 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getRealIndexInGroup.js.map +1 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItemsWithDividers.d.ts +3 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItemsWithDividers.js +23 -22
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItemsWithDividers.js.map +1 -1
- package/build/esm/components/AsideHeader/components/CollapseButton/CollapseButton.css +1 -1
- package/build/esm/components/AsideHeader/components/CollapseButton/CollapseButton.d.ts +2 -1
- package/build/esm/components/AsideHeader/components/CollapseButton/CollapseButton.js +13 -13
- 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/CompositeBar/CompositeBar.css +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/CompositeBar.d.ts +11 -5
- package/build/esm/components/AsideHeader/components/CompositeBar/CompositeBar.js +62 -164
- 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/Item/Item.css +25 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.d.ts +7 -2
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.js +26 -8
- 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/ScrollableWithScrollbar/ScrollableWithScrollbar.css +1 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.d.ts +8 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.js +25 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.js.map +1 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.module.scss.js +4 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.module.scss.js.map +1 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/index.d.ts +1 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollbar.d.ts +21 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollbar.js +144 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollbar.js.map +1 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/utils.d.ts +4 -2
- package/build/esm/components/AsideHeader/components/CompositeBar/utils.js +57 -9
- package/build/esm/components/AsideHeader/components/CompositeBar/utils.js.map +1 -1
- package/build/esm/components/AsideHeader/components/FirstPanel.js +30 -10
- package/build/esm/components/AsideHeader/components/FirstPanel.js.map +1 -1
- package/build/esm/components/AsideHeader/components/FooterBar/FooterBar.css +1 -0
- package/build/esm/components/AsideHeader/components/FooterBar/FooterBar.d.ts +19 -0
- package/build/esm/components/AsideHeader/components/FooterBar/FooterBar.js +93 -0
- package/build/esm/components/AsideHeader/components/FooterBar/FooterBar.js.map +1 -0
- package/build/esm/components/AsideHeader/components/FooterBar/FooterBar.module.scss.js +4 -0
- package/build/esm/components/AsideHeader/components/FooterBar/FooterBar.module.scss.js.map +1 -0
- package/build/esm/components/AsideHeader/components/FooterBar/constants.d.ts +1 -0
- package/build/esm/components/AsideHeader/components/FooterBar/constants.js +4 -0
- package/build/esm/components/AsideHeader/components/FooterBar/constants.js.map +1 -0
- package/build/esm/components/AsideHeader/components/FooterBar/index.d.ts +1 -0
- package/build/esm/components/AsideHeader/components/FooterItem/FooterItem.css +1 -1
- package/build/esm/components/AsideHeader/components/FooterItem/FooterItem.d.ts +2 -0
- package/build/esm/components/AsideHeader/components/FooterItem/FooterItem.js +12 -1
- 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 +10 -7
- package/build/esm/components/AsideHeader/components/Header.js.map +1 -1
- package/build/esm/components/AsideHeader/components/PageLayout/AsideFallback.css +2 -0
- package/build/esm/components/AsideHeader/components/PageLayout/AsideFallback.js +5 -4
- package/build/esm/components/AsideHeader/components/PageLayout/AsideFallback.js.map +1 -1
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayout.css +2 -0
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayout.d.ts +4 -2
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayout.js +13 -10
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayout.js.map +1 -1
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayoutAside.css +2 -0
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayoutAside.d.ts +1 -1
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayoutAside.js +5 -3
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayoutAside.js.map +1 -1
- package/build/esm/components/AsideHeader/components/Panels.js +6 -3
- package/build/esm/components/AsideHeader/components/Panels.js.map +1 -1
- package/build/esm/components/AsideHeader/hooks/useIsExpanded.d.ts +3 -1
- package/build/esm/components/AsideHeader/hooks/useIsExpanded.js +35 -12
- package/build/esm/components/AsideHeader/hooks/useIsExpanded.js.map +1 -1
- package/build/esm/components/AsideHeader/i18n/en.json.js +4 -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 +4 -2
- package/build/esm/components/AsideHeader/i18n/ru.json.js.map +1 -1
- package/build/esm/components/AsideHeader/index.d.ts +3 -2
- package/build/esm/components/AsideHeader/types.d.ts +30 -14
- package/build/esm/components/AsideHeader/types.js.map +1 -1
- package/build/esm/components/AsideHeader/useAsideHeaderInnerContextValue.d.ts +3 -2
- package/build/esm/components/AsideHeader/useAsideHeaderInnerContextValue.js +31 -9
- package/build/esm/components/AsideHeader/useAsideHeaderInnerContextValue.js.map +1 -1
- package/build/esm/components/AsideHeader/utils/getGroupHeight.d.ts +1 -1
- package/build/esm/components/AsideHeader/utils/getGroupHeight.js +6 -6
- package/build/esm/components/AsideHeader/utils/getGroupHeight.js.map +1 -1
- package/build/esm/components/Footer/desktop/Footer.js +1 -1
- package/build/esm/components/Footer/desktop/Footer.js.map +1 -1
- package/build/esm/components/Footer/mobile/Footer.js +1 -1
- package/build/esm/components/Footer/mobile/Footer.js.map +1 -1
- package/build/esm/components/HotkeysPanel/HotkeysPanel.d.ts +6 -4
- package/build/esm/components/HotkeysPanel/HotkeysPanel.js +4 -7
- package/build/esm/components/HotkeysPanel/HotkeysPanel.js.map +1 -1
- package/build/esm/components/Logo/Logo.css +1 -1
- package/build/esm/components/Logo/Logo.d.ts +7 -3
- package/build/esm/components/Logo/Logo.js +9 -6
- package/build/esm/components/Logo/Logo.js.map +1 -1
- package/build/esm/components/Logo/Logo.module.scss.js +1 -1
- package/build/esm/components/MobileHeader/MobileHeader.d.ts +4 -8
- package/build/esm/components/MobileHeader/MobileHeader.js +25 -21
- package/build/esm/components/MobileHeader/MobileHeader.js.map +1 -1
- package/build/esm/components/MobileHeader/OverlapPanel/OverlapPanel.d.ts +2 -2
- package/build/esm/components/MobileHeader/OverlapPanel/OverlapPanel.js +2 -2
- package/build/esm/components/MobileHeader/OverlapPanel/OverlapPanel.js.map +1 -1
- package/build/esm/components/MobileLogo/MobileLogo.d.ts +1 -1
- package/build/esm/components/MobileLogo/MobileLogo.js +2 -2
- package/build/esm/components/MobileLogo/MobileLogo.js.map +1 -1
- package/build/esm/components/Settings/Settings.css +1 -1
- package/build/esm/components/Settings/SettingsMenu/SettingsMenu.css +1 -1
- package/build/esm/components/Settings/SettingsMenu/SettingsMenu.js +5 -1
- package/build/esm/components/Settings/SettingsMenu/SettingsMenu.js.map +1 -1
- package/build/esm/components/Settings/SettingsMenu/SettingsMenu.module.scss.js +1 -1
- package/build/esm/components/constants.d.ts +6 -2
- package/build/esm/components/constants.js +7 -3
- package/build/esm/components/constants.js.map +1 -1
- package/build/esm/components/types.d.ts +11 -6
- package/build/esm/components/utils/getCollapsedWidth.d.ts +1 -0
- package/build/esm/components/utils/getCollapsedWidth.js +8 -0
- package/build/esm/components/utils/getCollapsedWidth.js.map +1 -0
- package/build/esm/index.js +2 -1
- package/build/esm/index.js.map +1 -1
- package/codemods/bin/cli.js +19 -6
- package/codemods/transforms/compactToIsExpanded.ts +345 -0
- package/codemods/transforms/compactToPinned.ts +135 -0
- package/codemods/transforms/v5.ts +36 -0
- package/package.json +2 -2
- package/build/cjs/components/ActionBar/__stories__/ActionBar.stories.d.ts +0 -20
- package/build/cjs/components/ActionBar/__stories__/ActionBarShowcase.d.ts +0 -2
- package/build/cjs/components/ActionBar/__stories__/ActionBarSingleSection.d.ts +0 -2
- package/build/cjs/components/ActionBar/__stories__/ActionBarStretchGroupShowcase.d.ts +0 -2
- package/build/cjs/components/ActionBar/__tests__/helpersPlaywright.d.ts +0 -5
- package/build/cjs/components/AsideHeader/__stories__/AsideHeader.stories.d.ts +0 -23
- package/build/cjs/components/AsideHeader/__stories__/AsideHeaderShowcase.d.ts +0 -13
- package/build/cjs/components/AsideHeader/__stories__/getAsideHeaderWrapper.d.ts +0 -3
- package/build/cjs/components/AsideHeader/__stories__/moc.d.ts +0 -17
- package/build/cjs/components/AsideHeader/__tests__/helpersPlaywright.d.ts +0 -2
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItems.d.ts +0 -2
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItems.js +0 -16
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItems.js.map +0 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.css +0 -9
- package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.d.ts +0 -9
- package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.js +0 -34
- package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.js.map +0 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.module.scss.js +0 -8
- package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.module.scss.js.map +0 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltipContext.d.ts +0 -24
- package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltipContext.js +0 -29
- package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltipContext.js.map +0 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/index.d.ts +0 -2
- package/build/cjs/components/AsideHeader/components/FooterItem/__stories__/FooterItem.stories.d.ts +0 -6
- package/build/cjs/components/AsideHeader/components/FooterItem/__tests__/helpersPlaywright.d.ts +0 -2
- package/build/cjs/components/Footer/desktop/__stories__/Footer.stories.d.ts +0 -8
- package/build/cjs/components/Footer/desktop/__stories__/FooterShowcase.d.ts +0 -4
- package/build/cjs/components/Footer/desktop/__stories__/moc.d.ts +0 -3
- package/build/cjs/components/Footer/desktop/__tests__/helpersPlaywright.d.ts +0 -2
- package/build/cjs/components/Footer/mobile/__stories__/MobileFooter.stories.d.ts +0 -8
- package/build/cjs/components/Footer/mobile/__stories__/MobileFooterShowcase.d.ts +0 -4
- package/build/cjs/components/Footer/mobile/__stories__/moc.d.ts +0 -3
- package/build/cjs/components/Footer/mobile/__tests__/helpersPlaywright.d.ts +0 -2
- package/build/cjs/components/HotkeysPanel/__stories__/HotkeysPanel.stories.d.ts +0 -5
- package/build/cjs/components/HotkeysPanel/__stories__/HotkeysPanelShowcase.d.ts +0 -6
- package/build/cjs/components/HotkeysPanel/__stories__/moc.d.ts +0 -2
- package/build/cjs/components/HotkeysPanel/__tests__/helpersPlaywright.d.ts +0 -2
- package/build/cjs/components/Logo/__stories__/Logo.stories.d.ts +0 -7
- package/build/cjs/components/Logo/__tests__/helpersPlaywright.d.ts +0 -2
- package/build/cjs/components/MobileHeader/BurgerMenu/__stories__/BurgerMenu.stories.d.ts +0 -6
- package/build/cjs/components/MobileHeader/BurgerMenu/__stories__/moc.d.ts +0 -2
- package/build/cjs/components/MobileHeader/BurgerMenu/__tests__/helpersPlaywright.d.ts +0 -2
- package/build/cjs/components/MobileHeader/OverlapPanel/__stories__/OverlapPanel.stories.d.ts +0 -6
- package/build/cjs/components/MobileHeader/OverlapPanel/__stories__/moc.d.ts +0 -2
- package/build/cjs/components/MobileHeader/OverlapPanel/__tests__/helpersPlaywright.d.ts +0 -2
- package/build/cjs/components/MobileHeader/__stories__/MobileHeader.stories.d.ts +0 -4
- package/build/cjs/components/MobileHeader/__stories__/MobileHeaderShowcase.d.ts +0 -3
- package/build/cjs/components/MobileHeader/__stories__/moc.d.ts +0 -1
- package/build/cjs/components/MobileHeader/__tests__/helpersPlaywright.d.ts +0 -2
- package/build/cjs/components/MobileLogo/__stories__/MobileLogo.stories.d.ts +0 -6
- package/build/cjs/components/MobileLogo/__tests__/helpersPlaywright.d.ts +0 -2
- package/build/cjs/components/Settings/__stories__/Settings.stories.d.ts +0 -5
- package/build/cjs/components/Settings/__stories__/SettingsDemo.d.ts +0 -14
- package/build/cjs/components/Settings/__stories__/SettingsMobileDemo.d.ts +0 -8
- package/build/cjs/components/Settings/__tests__/helpersPlaywright.d.ts +0 -2
- package/build/esm/components/ActionBar/__stories__/ActionBar.stories.d.ts +0 -20
- package/build/esm/components/ActionBar/__stories__/ActionBarShowcase.d.ts +0 -2
- package/build/esm/components/ActionBar/__stories__/ActionBarSingleSection.d.ts +0 -2
- package/build/esm/components/ActionBar/__stories__/ActionBarStretchGroupShowcase.d.ts +0 -2
- package/build/esm/components/ActionBar/__tests__/helpersPlaywright.d.ts +0 -5
- package/build/esm/components/AsideHeader/__stories__/AsideHeader.stories.d.ts +0 -23
- package/build/esm/components/AsideHeader/__stories__/AsideHeaderShowcase.d.ts +0 -13
- package/build/esm/components/AsideHeader/__stories__/getAsideHeaderWrapper.d.ts +0 -3
- package/build/esm/components/AsideHeader/__stories__/moc.d.ts +0 -17
- package/build/esm/components/AsideHeader/__tests__/helpersPlaywright.d.ts +0 -2
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItems.d.ts +0 -2
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItems.js +0 -14
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItems.js.map +0 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.css +0 -9
- package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.d.ts +0 -9
- package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.js +0 -32
- package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.js.map +0 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.module.scss.js +0 -4
- package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.module.scss.js.map +0 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltipContext.d.ts +0 -24
- package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltipContext.js +0 -26
- package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltipContext.js.map +0 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/index.d.ts +0 -2
- package/build/esm/components/AsideHeader/components/FooterItem/__stories__/FooterItem.stories.d.ts +0 -6
- package/build/esm/components/AsideHeader/components/FooterItem/__tests__/helpersPlaywright.d.ts +0 -2
- package/build/esm/components/Footer/desktop/__stories__/Footer.stories.d.ts +0 -8
- package/build/esm/components/Footer/desktop/__stories__/FooterShowcase.d.ts +0 -4
- package/build/esm/components/Footer/desktop/__stories__/moc.d.ts +0 -3
- package/build/esm/components/Footer/desktop/__tests__/helpersPlaywright.d.ts +0 -2
- package/build/esm/components/Footer/mobile/__stories__/MobileFooter.stories.d.ts +0 -8
- package/build/esm/components/Footer/mobile/__stories__/MobileFooterShowcase.d.ts +0 -4
- package/build/esm/components/Footer/mobile/__stories__/moc.d.ts +0 -3
- package/build/esm/components/Footer/mobile/__tests__/helpersPlaywright.d.ts +0 -2
- package/build/esm/components/HotkeysPanel/__stories__/HotkeysPanel.stories.d.ts +0 -5
- package/build/esm/components/HotkeysPanel/__stories__/HotkeysPanelShowcase.d.ts +0 -6
- package/build/esm/components/HotkeysPanel/__stories__/moc.d.ts +0 -2
- package/build/esm/components/HotkeysPanel/__tests__/helpersPlaywright.d.ts +0 -2
- package/build/esm/components/Logo/__stories__/Logo.stories.d.ts +0 -7
- package/build/esm/components/Logo/__tests__/helpersPlaywright.d.ts +0 -2
- package/build/esm/components/MobileHeader/BurgerMenu/__stories__/BurgerMenu.stories.d.ts +0 -6
- package/build/esm/components/MobileHeader/BurgerMenu/__stories__/moc.d.ts +0 -2
- package/build/esm/components/MobileHeader/BurgerMenu/__tests__/helpersPlaywright.d.ts +0 -2
- package/build/esm/components/MobileHeader/OverlapPanel/__stories__/OverlapPanel.stories.d.ts +0 -6
- package/build/esm/components/MobileHeader/OverlapPanel/__stories__/moc.d.ts +0 -2
- package/build/esm/components/MobileHeader/OverlapPanel/__tests__/helpersPlaywright.d.ts +0 -2
- package/build/esm/components/MobileHeader/__stories__/MobileHeader.stories.d.ts +0 -4
- package/build/esm/components/MobileHeader/__stories__/MobileHeaderShowcase.d.ts +0 -3
- package/build/esm/components/MobileHeader/__stories__/moc.d.ts +0 -1
- package/build/esm/components/MobileHeader/__tests__/helpersPlaywright.d.ts +0 -2
- package/build/esm/components/MobileLogo/__stories__/MobileLogo.stories.d.ts +0 -6
- package/build/esm/components/MobileLogo/__tests__/helpersPlaywright.d.ts +0 -2
- package/build/esm/components/Settings/__stories__/Settings.stories.d.ts +0 -5
- package/build/esm/components/Settings/__stories__/SettingsDemo.d.ts +0 -14
- package/build/esm/components/Settings/__stories__/SettingsMobileDemo.d.ts +0 -8
- package/build/esm/components/Settings/__tests__/helpersPlaywright.d.ts +0 -2
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { useRef, useState, useCallback, useEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
const DEFAULT_SCROLLBAR_THUMB_HEIGHT = 20;
|
|
4
|
+
const EMPTY_DEPS = [];
|
|
5
|
+
function useScrollbar(options = {}) {
|
|
6
|
+
const { recalcDeps = EMPTY_DEPS } = options;
|
|
7
|
+
const scrollRef = useRef(null);
|
|
8
|
+
const [scrollState, setScrollState] = useState({
|
|
9
|
+
scrollTop: 0,
|
|
10
|
+
scrollHeight: 0,
|
|
11
|
+
clientHeight: 0,
|
|
12
|
+
});
|
|
13
|
+
const thumbDragRef = useRef({ isDragging: false, startY: 0, startScrollTop: 0 });
|
|
14
|
+
const dragCleanupRef = useRef(null);
|
|
15
|
+
const updateScrollState = useCallback(() => {
|
|
16
|
+
const el = scrollRef.current;
|
|
17
|
+
if (!el)
|
|
18
|
+
return;
|
|
19
|
+
setScrollState({
|
|
20
|
+
scrollTop: el.scrollTop,
|
|
21
|
+
scrollHeight: el.scrollHeight,
|
|
22
|
+
clientHeight: el.clientHeight,
|
|
23
|
+
});
|
|
24
|
+
}, []);
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
const el = scrollRef.current;
|
|
27
|
+
if (!el)
|
|
28
|
+
return;
|
|
29
|
+
updateScrollState();
|
|
30
|
+
const observer = new ResizeObserver(updateScrollState);
|
|
31
|
+
observer.observe(el);
|
|
32
|
+
return () => observer.disconnect();
|
|
33
|
+
}, [updateScrollState, ...recalcDeps]);
|
|
34
|
+
const handleThumbMouseDown = useCallback((e) => {
|
|
35
|
+
e.preventDefault();
|
|
36
|
+
if (!scrollRef.current)
|
|
37
|
+
return;
|
|
38
|
+
thumbDragRef.current = {
|
|
39
|
+
isDragging: true,
|
|
40
|
+
startY: e.clientY,
|
|
41
|
+
startScrollTop: scrollRef.current.scrollTop,
|
|
42
|
+
};
|
|
43
|
+
const onMouseMove = (moveEvent) => {
|
|
44
|
+
if (!thumbDragRef.current.isDragging || !scrollRef.current)
|
|
45
|
+
return;
|
|
46
|
+
const { scrollHeight, clientHeight } = scrollRef.current;
|
|
47
|
+
const trackHeight = clientHeight;
|
|
48
|
+
const maxScroll = scrollHeight - clientHeight;
|
|
49
|
+
if (maxScroll <= 0)
|
|
50
|
+
return;
|
|
51
|
+
const deltaY = moveEvent.clientY - thumbDragRef.current.startY;
|
|
52
|
+
const thumbRatio = trackHeight / scrollHeight;
|
|
53
|
+
const scrollDelta = deltaY / thumbRatio;
|
|
54
|
+
scrollRef.current.scrollTop = Math.min(maxScroll, Math.max(0, thumbDragRef.current.startScrollTop + scrollDelta));
|
|
55
|
+
thumbDragRef.current.startY = moveEvent.clientY;
|
|
56
|
+
thumbDragRef.current.startScrollTop = scrollRef.current.scrollTop;
|
|
57
|
+
};
|
|
58
|
+
const removeListeners = () => {
|
|
59
|
+
document.removeEventListener('mousemove', onMouseMove);
|
|
60
|
+
document.removeEventListener('mouseup', onMouseUp);
|
|
61
|
+
dragCleanupRef.current = null;
|
|
62
|
+
};
|
|
63
|
+
const onMouseUp = () => {
|
|
64
|
+
thumbDragRef.current.isDragging = false;
|
|
65
|
+
removeListeners();
|
|
66
|
+
};
|
|
67
|
+
dragCleanupRef.current = removeListeners;
|
|
68
|
+
document.addEventListener('mousemove', onMouseMove);
|
|
69
|
+
document.addEventListener('mouseup', onMouseUp);
|
|
70
|
+
}, []);
|
|
71
|
+
useEffect(() => {
|
|
72
|
+
return () => {
|
|
73
|
+
var _a;
|
|
74
|
+
(_a = dragCleanupRef.current) === null || _a === undefined ? undefined : _a.call(dragCleanupRef);
|
|
75
|
+
};
|
|
76
|
+
}, []);
|
|
77
|
+
const handleTrackClick = useCallback((e) => {
|
|
78
|
+
if (!scrollRef.current || e.target !== e.currentTarget)
|
|
79
|
+
return;
|
|
80
|
+
const { scrollHeight, clientHeight } = scrollRef.current;
|
|
81
|
+
const maxScroll = scrollHeight - clientHeight;
|
|
82
|
+
if (maxScroll <= 0)
|
|
83
|
+
return;
|
|
84
|
+
const rect = e.currentTarget.getBoundingClientRect();
|
|
85
|
+
const ratio = (e.clientY - rect.top) / rect.height;
|
|
86
|
+
scrollRef.current.scrollTop = ratio * maxScroll;
|
|
87
|
+
}, []);
|
|
88
|
+
const handleScrollbarKeyDown = useCallback((e) => {
|
|
89
|
+
const el = scrollRef.current;
|
|
90
|
+
if (!el)
|
|
91
|
+
return;
|
|
92
|
+
const { scrollHeight, clientHeight } = el;
|
|
93
|
+
const maxScroll = scrollHeight - clientHeight;
|
|
94
|
+
if (maxScroll <= 0)
|
|
95
|
+
return;
|
|
96
|
+
const step = Math.max(20, clientHeight * 0.2);
|
|
97
|
+
let newScrollTop = el.scrollTop;
|
|
98
|
+
switch (e.key) {
|
|
99
|
+
case 'ArrowDown':
|
|
100
|
+
e.preventDefault();
|
|
101
|
+
newScrollTop = Math.min(maxScroll, el.scrollTop + step);
|
|
102
|
+
break;
|
|
103
|
+
case 'ArrowUp':
|
|
104
|
+
e.preventDefault();
|
|
105
|
+
newScrollTop = Math.max(0, el.scrollTop - step);
|
|
106
|
+
break;
|
|
107
|
+
case 'End':
|
|
108
|
+
e.preventDefault();
|
|
109
|
+
newScrollTop = maxScroll;
|
|
110
|
+
break;
|
|
111
|
+
case 'Home':
|
|
112
|
+
e.preventDefault();
|
|
113
|
+
newScrollTop = 0;
|
|
114
|
+
break;
|
|
115
|
+
default:
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
el.scrollTop = newScrollTop;
|
|
119
|
+
updateScrollState();
|
|
120
|
+
}, [updateScrollState]);
|
|
121
|
+
const showScrollbar = scrollState.scrollHeight > scrollState.clientHeight && scrollState.scrollHeight > 0;
|
|
122
|
+
const thumbRatio = scrollState.scrollHeight > 0 ? scrollState.clientHeight / scrollState.scrollHeight : 0;
|
|
123
|
+
const thumbHeight = Math.max(DEFAULT_SCROLLBAR_THUMB_HEIGHT, scrollState.clientHeight * thumbRatio);
|
|
124
|
+
const trackHeight = scrollState.clientHeight;
|
|
125
|
+
const thumbMaxTop = trackHeight - thumbHeight;
|
|
126
|
+
const thumbTop = trackHeight > thumbHeight && scrollState.scrollHeight > scrollState.clientHeight
|
|
127
|
+
? (scrollState.scrollTop / (scrollState.scrollHeight - scrollState.clientHeight)) *
|
|
128
|
+
thumbMaxTop
|
|
129
|
+
: 0;
|
|
130
|
+
return {
|
|
131
|
+
scrollRef,
|
|
132
|
+
scrollState,
|
|
133
|
+
updateScrollState,
|
|
134
|
+
showScrollbar,
|
|
135
|
+
thumbHeight,
|
|
136
|
+
thumbTop,
|
|
137
|
+
handleThumbMouseDown,
|
|
138
|
+
handleTrackClick,
|
|
139
|
+
handleScrollbarKeyDown,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export { useScrollbar };
|
|
144
|
+
//# sourceMappingURL=useScrollbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useScrollbar.js","sources":["../../../../../../../../src/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollbar.ts"],"sourcesContent":["import React, {useCallback, useEffect, useRef, useState} from 'react';\n\ntype ScrollbarState = {\n scrollTop: number;\n scrollHeight: number;\n clientHeight: number;\n};\n\ntype UseScrollbarOptions = {\n recalcDeps?: React.DependencyList;\n};\n\nconst DEFAULT_SCROLLBAR_THUMB_HEIGHT = 20;\n\nconst EMPTY_DEPS: React.DependencyList = [];\n\nexport function useScrollbar(options: UseScrollbarOptions = {}) {\n const {recalcDeps = EMPTY_DEPS} = options;\n const scrollRef = useRef<HTMLDivElement>(null);\n const [scrollState, setScrollState] = useState<ScrollbarState>({\n scrollTop: 0,\n scrollHeight: 0,\n clientHeight: 0,\n });\n const thumbDragRef = useRef({isDragging: false, startY: 0, startScrollTop: 0});\n const dragCleanupRef = useRef<(() => void) | null>(null);\n\n const updateScrollState = useCallback(() => {\n const el = scrollRef.current;\n\n if (!el) return;\n\n setScrollState({\n scrollTop: el.scrollTop,\n scrollHeight: el.scrollHeight,\n clientHeight: el.clientHeight,\n });\n }, []);\n\n useEffect(() => {\n const el = scrollRef.current;\n\n if (!el) return;\n\n updateScrollState();\n\n const observer = new ResizeObserver(updateScrollState);\n observer.observe(el);\n\n return () => observer.disconnect();\n }, [updateScrollState, ...recalcDeps]);\n\n const handleThumbMouseDown = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n\n if (!scrollRef.current) return;\n\n thumbDragRef.current = {\n isDragging: true,\n startY: e.clientY,\n startScrollTop: scrollRef.current.scrollTop,\n };\n\n const onMouseMove = (moveEvent: MouseEvent) => {\n if (!thumbDragRef.current.isDragging || !scrollRef.current) return;\n const {scrollHeight, clientHeight} = scrollRef.current;\n const trackHeight = clientHeight;\n const maxScroll = scrollHeight - clientHeight;\n\n if (maxScroll <= 0) return;\n\n const deltaY = moveEvent.clientY - thumbDragRef.current.startY;\n const thumbRatio = trackHeight / scrollHeight;\n const scrollDelta = deltaY / thumbRatio;\n\n scrollRef.current.scrollTop = Math.min(\n maxScroll,\n Math.max(0, thumbDragRef.current.startScrollTop + scrollDelta),\n );\n\n thumbDragRef.current.startY = moveEvent.clientY;\n thumbDragRef.current.startScrollTop = scrollRef.current.scrollTop;\n };\n\n const removeListeners = () => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n dragCleanupRef.current = null;\n };\n\n const onMouseUp = () => {\n thumbDragRef.current.isDragging = false;\n removeListeners();\n };\n\n dragCleanupRef.current = removeListeners;\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n }, []);\n\n useEffect(() => {\n return () => {\n dragCleanupRef.current?.();\n };\n }, []);\n\n const handleTrackClick = useCallback((e: React.MouseEvent<HTMLDivElement>) => {\n if (!scrollRef.current || e.target !== e.currentTarget) return;\n\n const {scrollHeight, clientHeight} = scrollRef.current;\n const maxScroll = scrollHeight - clientHeight;\n\n if (maxScroll <= 0) return;\n\n const rect = e.currentTarget.getBoundingClientRect();\n const ratio = (e.clientY - rect.top) / rect.height;\n\n scrollRef.current.scrollTop = ratio * maxScroll;\n }, []);\n\n const handleScrollbarKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n const el = scrollRef.current;\n if (!el) return;\n\n const {scrollHeight, clientHeight} = el;\n const maxScroll = scrollHeight - clientHeight;\n if (maxScroll <= 0) return;\n\n const step = Math.max(20, clientHeight * 0.2);\n let newScrollTop = el.scrollTop;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n newScrollTop = Math.min(maxScroll, el.scrollTop + step);\n break;\n case 'ArrowUp':\n e.preventDefault();\n newScrollTop = Math.max(0, el.scrollTop - step);\n break;\n case 'End':\n e.preventDefault();\n newScrollTop = maxScroll;\n break;\n case 'Home':\n e.preventDefault();\n newScrollTop = 0;\n break;\n default:\n return;\n }\n\n el.scrollTop = newScrollTop;\n updateScrollState();\n },\n [updateScrollState],\n );\n\n const showScrollbar =\n scrollState.scrollHeight > scrollState.clientHeight && scrollState.scrollHeight > 0;\n const thumbRatio =\n scrollState.scrollHeight > 0 ? scrollState.clientHeight / scrollState.scrollHeight : 0;\n const thumbHeight = Math.max(\n DEFAULT_SCROLLBAR_THUMB_HEIGHT,\n scrollState.clientHeight * thumbRatio,\n );\n const trackHeight = scrollState.clientHeight;\n const thumbMaxTop = trackHeight - thumbHeight;\n const thumbTop =\n trackHeight > thumbHeight && scrollState.scrollHeight > scrollState.clientHeight\n ? (scrollState.scrollTop / (scrollState.scrollHeight - scrollState.clientHeight)) *\n thumbMaxTop\n : 0;\n\n return {\n scrollRef,\n scrollState,\n updateScrollState,\n showScrollbar,\n thumbHeight,\n thumbTop,\n handleThumbMouseDown,\n handleTrackClick,\n handleScrollbarKeyDown,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { AsideHeaderItem, MenuItemsWithGroups } from '../../types';
|
|
2
|
-
export declare function getItemHeight(compositeItem: MenuItemsWithGroups): number;
|
|
3
|
-
export declare function getItemsHeight<T extends AsideHeaderItem>(items: T[]): number;
|
|
2
|
+
export declare function getItemHeight(compositeItem: MenuItemsWithGroups, isCompactMode?: boolean): number;
|
|
3
|
+
export declare function getItemsHeight<T extends AsideHeaderItem>(items: T[], isCompactMode?: boolean): number;
|
|
4
4
|
export declare function getSelectedItemIndex(compositeItems: AsideHeaderItem[]): number | undefined;
|
|
5
|
+
export declare function getVisibleItemsWithFilteredDividers(items: MenuItemsWithGroups[], allPagesId?: string): MenuItemsWithGroups[];
|
|
6
|
+
export declare function filterRedundantDividers<T extends MenuItemsWithGroups>(items: T[], allPagesId?: string): T[];
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { ITEM_HEIGHT } from '../../../constants.js';
|
|
1
|
+
import { ITEM_HEIGHT_COMPACT, ITEM_HEIGHT, ITEM_GAP } from '../../../constants.js';
|
|
2
2
|
import { getGroupBlockHeight } from '../../utils/getGroupHeight.js';
|
|
3
3
|
|
|
4
|
-
function getGroupHeight(compositeItem) {
|
|
4
|
+
function getGroupHeight(compositeItem, isCompactMode) {
|
|
5
5
|
const visibleGroupItems = compositeItem.isCollapsed ? [] : compositeItem.items;
|
|
6
|
-
return getGroupBlockHeight(visibleGroupItems);
|
|
6
|
+
return getGroupBlockHeight(visibleGroupItems, isCompactMode);
|
|
7
7
|
}
|
|
8
|
-
function getItemHeight(compositeItem) {
|
|
8
|
+
function getItemHeight(compositeItem, isCompactMode) {
|
|
9
9
|
var _a;
|
|
10
10
|
if ('items' in compositeItem && compositeItem.items && ((_a = compositeItem.items) === null || _a === undefined ? undefined : _a.length) > 0) {
|
|
11
|
-
return getGroupHeight(compositeItem);
|
|
11
|
+
return getGroupHeight(compositeItem, isCompactMode);
|
|
12
12
|
}
|
|
13
13
|
switch (compositeItem.type) {
|
|
14
14
|
case 'action':
|
|
@@ -16,16 +16,64 @@ function getItemHeight(compositeItem) {
|
|
|
16
16
|
case 'divider':
|
|
17
17
|
return 15;
|
|
18
18
|
default:
|
|
19
|
-
return ITEM_HEIGHT;
|
|
19
|
+
return isCompactMode ? ITEM_HEIGHT_COMPACT : ITEM_HEIGHT;
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
|
-
function getItemsHeight(items) {
|
|
23
|
-
|
|
22
|
+
function getItemsHeight(items, isCompactMode) {
|
|
23
|
+
const gaps = items.length > 1 ? (items.length - 1) * ITEM_GAP : 0;
|
|
24
|
+
return items.reduce((sum, item) => sum + getItemHeight(item, isCompactMode), 0) + gaps;
|
|
24
25
|
}
|
|
25
26
|
function getSelectedItemIndex(compositeItems) {
|
|
26
27
|
const index = compositeItems.findIndex(({ current }) => Boolean(current));
|
|
27
28
|
return index === -1 ? undefined : index;
|
|
28
29
|
}
|
|
30
|
+
/** Removes consecutive dividers so that at most one divider is shown between other items. */
|
|
31
|
+
function filterConsecutiveDividers(items) {
|
|
32
|
+
return items.filter((item, index) => {
|
|
33
|
+
if (item.type !== 'divider') {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
const prev = items[index - 1];
|
|
37
|
+
return (prev === null || prev === undefined ? undefined : prev.type) !== 'divider';
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/** Removes dividers from the start and end of the list. */
|
|
41
|
+
function filterLeadingAndTrailingDividers(items) {
|
|
42
|
+
const firstNonDividerIndex = items.findIndex((item) => item.type !== 'divider');
|
|
43
|
+
if (firstNonDividerIndex === -1) {
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
let lastNonDividerIndex = items.length - 1;
|
|
47
|
+
while (lastNonDividerIndex >= firstNonDividerIndex &&
|
|
48
|
+
items[lastNonDividerIndex].type === 'divider') {
|
|
49
|
+
lastNonDividerIndex--;
|
|
50
|
+
}
|
|
51
|
+
if (lastNonDividerIndex < firstNonDividerIndex) {
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
return items.slice(firstNonDividerIndex, lastNonDividerIndex + 1);
|
|
55
|
+
}
|
|
56
|
+
function getVisibleItemsWithFilteredDividers(items, allPagesId) {
|
|
57
|
+
const visible = items
|
|
58
|
+
.filter((item) => !item.hidden)
|
|
59
|
+
.map((item) => {
|
|
60
|
+
if ('items' in item && item.items) {
|
|
61
|
+
return Object.assign(Object.assign({}, item), { items: filterRedundantDividers(item.items.filter((nested) => !nested.hidden), allPagesId) });
|
|
62
|
+
}
|
|
63
|
+
return item;
|
|
64
|
+
});
|
|
65
|
+
return filterRedundantDividers(visible, allPagesId);
|
|
66
|
+
}
|
|
67
|
+
function filterRedundantDividers(items, allPagesId) {
|
|
68
|
+
const nonDividers = items.filter((item) => item.type !== 'divider');
|
|
69
|
+
const hasNoNonDividers = nonDividers.length === 0;
|
|
70
|
+
const isOnlyAllPagesItem = nonDividers.length === 1 && allPagesId !== undefined && nonDividers[0].id === allPagesId;
|
|
71
|
+
const hasNoRealContent = hasNoNonDividers || isOnlyAllPagesItem;
|
|
72
|
+
if (hasNoRealContent) {
|
|
73
|
+
return nonDividers;
|
|
74
|
+
}
|
|
75
|
+
return filterLeadingAndTrailingDividers(filterConsecutiveDividers(items));
|
|
76
|
+
}
|
|
29
77
|
|
|
30
|
-
export { getItemHeight, getItemsHeight, getSelectedItemIndex };
|
|
78
|
+
export { filterRedundantDividers, getItemHeight, getItemsHeight, getSelectedItemIndex, getVisibleItemsWithFilteredDividers };
|
|
31
79
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../../../../src/components/AsideHeader/components/CompositeBar/utils.ts"],"sourcesContent":["import {ITEM_HEIGHT} from '../../../constants';\nimport {AsideHeaderItem, GroupedMenuItem, MenuItemsWithGroups} from '../../types';\nimport {getGroupBlockHeight} from '../../utils/getGroupHeight';\n\nfunction getGroupHeight(compositeItem: GroupedMenuItem) {\n const visibleGroupItems = compositeItem.isCollapsed ? [] : compositeItem.items;\n\n return getGroupBlockHeight(visibleGroupItems);\n}\n\nexport function getItemHeight(compositeItem: MenuItemsWithGroups) {\n if ('items' in compositeItem && compositeItem.items && compositeItem.items?.length > 0) {\n return getGroupHeight(compositeItem);\n }\n\n switch (compositeItem.type) {\n case 'action':\n return 50;\n case 'divider':\n return 15;\n\n default:\n return ITEM_HEIGHT;\n }\n}\n\nexport function getItemsHeight<T extends AsideHeaderItem>(items: T[]) {\n return items.reduce((sum, item) => sum + getItemHeight(item), 0);\n}\n\nexport function getSelectedItemIndex(compositeItems: AsideHeaderItem[]) {\n const index = compositeItems.findIndex(({current}) => Boolean(current));\n return index === -1 ? undefined : index;\n}\n"],"names":[],"mappings":";;;AAIA,SAAS,cAAc,CAAC,aAA8B,EAAA;
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../../../../src/components/AsideHeader/components/CompositeBar/utils.ts"],"sourcesContent":["import {ITEM_GAP, ITEM_HEIGHT, ITEM_HEIGHT_COMPACT} from '../../../constants';\nimport {AsideHeaderItem, GroupedMenuItem, MenuItemsWithGroups} from '../../types';\nimport {getGroupBlockHeight} from '../../utils/getGroupHeight';\n\nfunction getGroupHeight(compositeItem: GroupedMenuItem, isCompactMode?: boolean) {\n const visibleGroupItems = compositeItem.isCollapsed ? [] : compositeItem.items;\n\n return getGroupBlockHeight(visibleGroupItems, isCompactMode);\n}\n\nexport function getItemHeight(compositeItem: MenuItemsWithGroups, isCompactMode?: boolean) {\n if ('items' in compositeItem && compositeItem.items && compositeItem.items?.length > 0) {\n return getGroupHeight(compositeItem, isCompactMode);\n }\n\n switch (compositeItem.type) {\n case 'action':\n return 50;\n case 'divider':\n return 15;\n\n default:\n return isCompactMode ? ITEM_HEIGHT_COMPACT : ITEM_HEIGHT;\n }\n}\n\nexport function getItemsHeight<T extends AsideHeaderItem>(items: T[], isCompactMode?: boolean) {\n const gaps = items.length > 1 ? (items.length - 1) * ITEM_GAP : 0;\n\n return items.reduce((sum, item) => sum + getItemHeight(item, isCompactMode), 0) + gaps;\n}\n\nexport function getSelectedItemIndex(compositeItems: AsideHeaderItem[]) {\n const index = compositeItems.findIndex(({current}) => Boolean(current));\n return index === -1 ? undefined : index;\n}\n\n/** Removes consecutive dividers so that at most one divider is shown between other items. */\nfunction filterConsecutiveDividers<T extends AsideHeaderItem>(items: T[]): T[] {\n return items.filter((item, index) => {\n if (item.type !== 'divider') {\n return true;\n }\n\n const prev = items[index - 1];\n\n return prev?.type !== 'divider';\n });\n}\n\n/** Removes dividers from the start and end of the list. */\nfunction filterLeadingAndTrailingDividers<T extends MenuItemsWithGroups>(items: T[]): T[] {\n const firstNonDividerIndex = items.findIndex((item) => item.type !== 'divider');\n\n if (firstNonDividerIndex === -1) {\n return [];\n }\n\n let lastNonDividerIndex = items.length - 1;\n\n while (\n lastNonDividerIndex >= firstNonDividerIndex &&\n items[lastNonDividerIndex].type === 'divider'\n ) {\n lastNonDividerIndex--;\n }\n\n if (lastNonDividerIndex < firstNonDividerIndex) {\n return [];\n }\n return items.slice(firstNonDividerIndex, lastNonDividerIndex + 1);\n}\n\nexport function getVisibleItemsWithFilteredDividers(\n items: MenuItemsWithGroups[],\n allPagesId?: string,\n) {\n const visible = items\n .filter((item) => !item.hidden)\n .map((item) => {\n if ('items' in item && item.items) {\n return {\n ...item,\n items: filterRedundantDividers(\n item.items.filter((nested) => !nested.hidden),\n allPagesId,\n ),\n };\n }\n return item;\n });\n\n return filterRedundantDividers(visible, allPagesId);\n}\n\nexport function filterRedundantDividers<T extends MenuItemsWithGroups>(\n items: T[],\n allPagesId?: string,\n) {\n const nonDividers = items.filter((item) => item.type !== 'divider');\n const hasNoNonDividers = nonDividers.length === 0;\n const isOnlyAllPagesItem =\n nonDividers.length === 1 && allPagesId !== undefined && nonDividers[0].id === allPagesId;\n const hasNoRealContent = hasNoNonDividers || isOnlyAllPagesItem;\n\n if (hasNoRealContent) {\n return nonDividers;\n }\n\n return filterLeadingAndTrailingDividers(filterConsecutiveDividers(items));\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React__default, { useRef } from 'react';
|
|
1
|
+
import React__default, { useRef, useCallback } from 'react';
|
|
2
2
|
import { setRef } from '@gravity-ui/uikit';
|
|
3
3
|
import { CSSTransition } from 'react-transition-group';
|
|
4
4
|
import { ASIDE_HEADER_EXPAND_TRANSITION_DELAY } from '../../constants.js';
|
|
@@ -6,6 +6,7 @@ import { useAsideHeaderInnerContext } from '../AsideHeaderContext.js';
|
|
|
6
6
|
import { b } from '../utils.js';
|
|
7
7
|
import { useGroupedMenuItems } from './AllPagesPanel/useGroupedMenuItems.js';
|
|
8
8
|
import { CompositeBar } from './CompositeBar/CompositeBar.js';
|
|
9
|
+
import { FooterBar } from './FooterBar/FooterBar.js';
|
|
9
10
|
import { Header } from './Header.js';
|
|
10
11
|
import { Panels } from './Panels.js';
|
|
11
12
|
|
|
@@ -18,26 +19,45 @@ const asideTransitionClassNames = {
|
|
|
18
19
|
exitActive: b('aside-transition-exit-active'),
|
|
19
20
|
};
|
|
20
21
|
const FirstPanel = React__default.forwardRef((_props, ref) => {
|
|
21
|
-
const { size, onItemClick, headerDecoration,
|
|
22
|
+
const { size, onItemClick, headerDecoration, onMenuMoreClick, renderFooter, onToggleGroupCollapsed, renderFooterAfter, pinned, customBackground, customBackgroundClassName, className, menuItems, menuGroups, qa, onExpand, onFold, setCollapseBlocker, isExpanded, isCompactMode, } = useAsideHeaderInnerContext();
|
|
22
23
|
const flatListItems = useGroupedMenuItems(menuItems, menuGroups);
|
|
23
24
|
const asideRef = useRef(null);
|
|
24
25
|
React__default.useEffect(() => {
|
|
25
26
|
setRef(ref, asideRef.current);
|
|
26
27
|
}, [ref]);
|
|
27
|
-
const isExpandedByHover =
|
|
28
|
+
const isExpandedByHover = !pinned && isExpanded;
|
|
29
|
+
const footerResult = renderFooter === null || renderFooter === undefined ? undefined : renderFooter({
|
|
30
|
+
size,
|
|
31
|
+
isExpanded,
|
|
32
|
+
isPinned: pinned,
|
|
33
|
+
asideRef,
|
|
34
|
+
isCompactMode,
|
|
35
|
+
});
|
|
36
|
+
const canRenderFooterInHorizontalMode = Array.isArray(footerResult) && footerResult.length > 1;
|
|
37
|
+
const renderFooterContent = useCallback(() => {
|
|
38
|
+
if (canRenderFooterInHorizontalMode) {
|
|
39
|
+
return (React__default.createElement(FooterBar, { isPinned: pinned, isExpanded: isExpanded, renderAfter: renderFooterAfter, setCollapseBlocker: setCollapseBlocker }, footerResult));
|
|
40
|
+
}
|
|
41
|
+
return footerResult;
|
|
42
|
+
}, [
|
|
43
|
+
footerResult,
|
|
44
|
+
pinned,
|
|
45
|
+
isExpanded,
|
|
46
|
+
canRenderFooterInHorizontalMode,
|
|
47
|
+
setCollapseBlocker,
|
|
48
|
+
renderFooterAfter,
|
|
49
|
+
]);
|
|
28
50
|
return (React__default.createElement(React__default.Fragment, null,
|
|
29
51
|
React__default.createElement(CSSTransition, { in: isExpandedByHover, timeout: ASIDE_HEADER_EXPAND_TRANSITION_DELAY, classNames: asideTransitionClassNames },
|
|
30
|
-
React__default.createElement("div", { className: b('aside', className), style: { width: size }, "data-qa": qa, onMouseEnter: onExpand, onMouseLeave: onFold },
|
|
52
|
+
React__default.createElement("div", { className: b('aside', { ['compact-mode']: isCompactMode }, className), style: { width: size }, "data-qa": qa, onMouseEnter: onExpand, onMouseLeave: onFold },
|
|
31
53
|
React__default.createElement("div", { className: b('aside-popup-anchor'), ref: asideRef }),
|
|
32
54
|
customBackground && (React__default.createElement("div", { className: b('aside-custom-background', customBackgroundClassName) }, customBackground)),
|
|
33
55
|
React__default.createElement("div", { className: b('aside-content', { ['with-decoration']: headerDecoration }) },
|
|
34
56
|
React__default.createElement(Header, null),
|
|
35
|
-
(flatListItems === null || flatListItems === undefined ? undefined : flatListItems.length) ? (React__default.createElement(CompositeBar, { compositeId: MENU_ITEMS_COMPOSITE_ID, className: b('menu-items'),
|
|
36
|
-
React__default.createElement("div", { className: b('footer'
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
asideRef,
|
|
40
|
-
}))))),
|
|
57
|
+
(flatListItems === null || flatListItems === undefined ? undefined : flatListItems.length) ? (React__default.createElement(CompositeBar, { compositeId: MENU_ITEMS_COMPOSITE_ID, className: b('menu-items'), menuItemClassName: b('menu-item'), isExpanded: isExpanded, type: "menu", items: flatListItems, onItemClick: onItemClick, onMoreClick: onMenuMoreClick, onToggleGroupCollapsed: onToggleGroupCollapsed, isCompactMode: isCompactMode, setCollapseBlocker: setCollapseBlocker })) : (React__default.createElement("div", { className: b('menu-items') })),
|
|
58
|
+
React__default.createElement("div", { className: b('footer', {
|
|
59
|
+
horizontal: canRenderFooterInHorizontalMode && pinned,
|
|
60
|
+
}) }, renderFooterContent())))),
|
|
41
61
|
React__default.createElement(Panels, null)));
|
|
42
62
|
});
|
|
43
63
|
FirstPanel.displayName = 'FirstPanel';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FirstPanel.js","sources":["../../../../../../src/components/AsideHeader/components/FirstPanel.tsx"],"sourcesContent":["import React, {useRef} from 'react';\n\nimport {setRef} from '@gravity-ui/uikit';\nimport {CSSTransition} from 'react-transition-group';\n\nimport {ASIDE_HEADER_EXPAND_TRANSITION_DELAY} from '../../constants';\nimport {useAsideHeaderInnerContext} from '../AsideHeaderContext';\nimport {b} from '../utils';\n\nimport {useGroupedMenuItems} from './AllPagesPanel/useGroupedMenuItems';\nimport {CompositeBar} from './CompositeBar';\nimport {Header} from './Header';\nimport {Panels} from './Panels';\n\nconst MENU_ITEMS_COMPOSITE_ID = 'gravity-ui/navigation-menu-items-composite-bar';\n\nconst asideTransitionClassNames = {\n enter: b('aside-transition-enter'),\n enterActive: b('aside-transition-enter-active'),\n enterDone: b('aside-transition-enter-done'),\n exit: b('aside-transition-exit'),\n exitActive: b('aside-transition-exit-active'),\n};\n\nexport const FirstPanel = React.forwardRef<HTMLDivElement>((_props, ref) => {\n const {\n size,\n onItemClick,\n headerDecoration,\n
|
|
1
|
+
{"version":3,"file":"FirstPanel.js","sources":["../../../../../../src/components/AsideHeader/components/FirstPanel.tsx"],"sourcesContent":["import React, {useCallback, useRef} from 'react';\n\nimport {setRef} from '@gravity-ui/uikit';\nimport {CSSTransition} from 'react-transition-group';\n\nimport {ASIDE_HEADER_EXPAND_TRANSITION_DELAY} from '../../constants';\nimport {useAsideHeaderInnerContext} from '../AsideHeaderContext';\nimport {b} from '../utils';\n\nimport {useGroupedMenuItems} from './AllPagesPanel/useGroupedMenuItems';\nimport {CompositeBar} from './CompositeBar';\nimport {FooterBar} from './FooterBar';\nimport {Header} from './Header';\nimport {Panels} from './Panels';\n\nconst MENU_ITEMS_COMPOSITE_ID = 'gravity-ui/navigation-menu-items-composite-bar';\n\nconst asideTransitionClassNames = {\n enter: b('aside-transition-enter'),\n enterActive: b('aside-transition-enter-active'),\n enterDone: b('aside-transition-enter-done'),\n exit: b('aside-transition-exit'),\n exitActive: b('aside-transition-exit-active'),\n};\n\nexport const FirstPanel = React.forwardRef<HTMLDivElement>((_props, ref) => {\n const {\n size,\n onItemClick,\n headerDecoration,\n onMenuMoreClick,\n renderFooter,\n onToggleGroupCollapsed,\n renderFooterAfter,\n pinned,\n customBackground,\n customBackgroundClassName,\n className,\n menuItems,\n menuGroups,\n qa,\n onExpand,\n onFold,\n setCollapseBlocker,\n isExpanded,\n isCompactMode,\n } = useAsideHeaderInnerContext();\n\n const flatListItems = useGroupedMenuItems(menuItems, menuGroups);\n\n const asideRef = useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n setRef<HTMLDivElement>(ref, asideRef.current);\n }, [ref]);\n\n const isExpandedByHover = !pinned && isExpanded;\n const footerResult = renderFooter?.({\n size,\n isExpanded,\n isPinned: pinned,\n asideRef,\n isCompactMode,\n });\n const canRenderFooterInHorizontalMode = Array.isArray(footerResult) && footerResult.length > 1;\n\n const renderFooterContent = useCallback(() => {\n if (canRenderFooterInHorizontalMode) {\n return (\n <FooterBar\n isPinned={pinned}\n isExpanded={isExpanded}\n renderAfter={renderFooterAfter}\n setCollapseBlocker={setCollapseBlocker}\n >\n {footerResult}\n </FooterBar>\n );\n }\n\n return footerResult;\n }, [\n footerResult,\n pinned,\n isExpanded,\n canRenderFooterInHorizontalMode,\n setCollapseBlocker,\n renderFooterAfter,\n ]);\n\n return (\n <React.Fragment>\n <CSSTransition\n in={isExpandedByHover}\n timeout={ASIDE_HEADER_EXPAND_TRANSITION_DELAY}\n classNames={asideTransitionClassNames}\n >\n <div\n className={b('aside', {['compact-mode']: isCompactMode}, className)}\n style={{width: size}}\n data-qa={qa}\n onMouseEnter={onExpand}\n onMouseLeave={onFold}\n >\n <div className={b('aside-popup-anchor')} ref={asideRef} />\n {customBackground && (\n <div className={b('aside-custom-background', customBackgroundClassName)}>\n {customBackground}\n </div>\n )}\n\n <div className={b('aside-content', {['with-decoration']: headerDecoration})}>\n <Header />\n\n {flatListItems?.length ? (\n <CompositeBar\n compositeId={MENU_ITEMS_COMPOSITE_ID}\n className={b('menu-items')}\n menuItemClassName={b('menu-item')}\n isExpanded={isExpanded}\n type=\"menu\"\n items={flatListItems}\n onItemClick={onItemClick}\n onMoreClick={onMenuMoreClick}\n onToggleGroupCollapsed={onToggleGroupCollapsed}\n isCompactMode={isCompactMode}\n setCollapseBlocker={setCollapseBlocker}\n />\n ) : (\n <div className={b('menu-items')} />\n )}\n\n <div\n className={b('footer', {\n horizontal: canRenderFooterInHorizontalMode && pinned,\n })}\n >\n {renderFooterContent()}\n </div>\n </div>\n </div>\n </CSSTransition>\n <Panels />\n </React.Fragment>\n );\n});\n\nFirstPanel.displayName = 'FirstPanel';\n"],"names":["React"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.FooterBar-module__gn-footer-bar___dunXC, .FooterBar-module__gn-footer-bar__items___xBsUq{display:flex;flex-direction:column;width:100%}.FooterBar-module__gn-footer-bar__items_horizontal___DEeK6{border-bottom:1px solid var(--gn-aside-bottom-divider-color,var(--g-color-line-generic));border-top:1px solid var(--gn-aside-bottom-divider-color,var(--g-color-line-generic));flex-direction:row;height:var(--_--item-height)}.FooterBar-module__gn-footer-bar__item___KAJSe{align-items:center;display:flex;justify-content:center}.FooterBar-module__gn-footer-bar__items_horizontal___DEeK6 .FooterBar-module__gn-footer-bar__item___KAJSe{flex:1 1 0;height:100%;min-width:0}.FooterBar-module__gn-footer-bar__items_horizontal___DEeK6 .FooterBar-module__gn-footer-bar__item___KAJSe:not(:last-child){border-right:1px solid var(--gn-aside-bottom-divider-color,var(--g-color-line-generic))}.FooterBar-module__gn-footer-bar__items_vertical___3A7jw .FooterBar-module__gn-footer-bar__item___KAJSe:not(:last-child){margin-bottom:2px}.FooterBar-module__gn-footer-bar__items___xBsUq:not(.FooterBar-module__gn-footer-bar__items_horizontal___DEeK6) .FooterBar-module__gn-footer-bar__item___KAJSe{height:var(--_--item-height);margin-bottom:2px;width:100%}.FooterBar-module__gn-footer-bar__items___xBsUq:not(.FooterBar-module__gn-footer-bar__items_horizontal___DEeK6) .FooterBar-module__gn-footer-bar__item___KAJSe:last-child{margin-bottom:0}.FooterBar-module__gn-footer-bar__after___yB8To{height:var(--_--item-height);width:100%}.FooterBar-module__gn-footer-bar__after_horizontal___t4KyN{box-sizing:border-box;margin-block:var(--g-spacing-2);padding-inline:var(--_--item-margin-inline)}.FooterBar-module__gn-footer-bar__dropdown-switcher___Czw-L{width:100%}.FooterBar-module__gn-footer-bar__dropdown-popup___nWoMR{--_--item-height:36px;padding:var(--g-spacing-1)}.FooterBar-module__gn-footer-bar__dropdown-popup___nWoMR .g-menu .g-menu__list-item .g-menu__item{height:var(--_--item-height);padding:0}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { SetCollapseBlocker } from '../../types';
|
|
3
|
+
export interface FooterBarProps {
|
|
4
|
+
/** Array of footer elements (ReactNode[]) */
|
|
5
|
+
children: React.ReactNode[];
|
|
6
|
+
/** Render function for additional content after items (e.g., user profile). Receives options with setCollapseBlocker. */
|
|
7
|
+
renderAfter?: (options?: {
|
|
8
|
+
setCollapseBlocker?: SetCollapseBlocker;
|
|
9
|
+
}) => React.ReactNode;
|
|
10
|
+
/** Registers a temporary block on collapse (e.g. while dropdown is open). Returns release function. */
|
|
11
|
+
setCollapseBlocker?: SetCollapseBlocker;
|
|
12
|
+
/** When `true`, the navigation is pinned (expanded). Items render horizontally. */
|
|
13
|
+
isPinned: boolean;
|
|
14
|
+
/** When `true`, the navigation is expanded (hover or pinned). */
|
|
15
|
+
isExpanded: boolean;
|
|
16
|
+
/** Maximum number of visible items before showing "more" button. Default: 5 */
|
|
17
|
+
maxVisibleItems?: number;
|
|
18
|
+
}
|
|
19
|
+
export declare const FooterBar: React.NamedExoticComponent<FooterBarProps>;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import './FooterBar.css';
|
|
2
|
+
import React__default, { memo, useCallback, useMemo } from 'react';
|
|
3
|
+
import { Ellipsis } from '@gravity-ui/icons';
|
|
4
|
+
import { Tooltip, DropdownMenu } from '@gravity-ui/uikit';
|
|
5
|
+
import { ASIDE_HEADER_EXPAND_DELAY } from '../../../constants.js';
|
|
6
|
+
import { createBlock } from '../../../utils/cn.js';
|
|
7
|
+
import { FooterLayoutContext } from '../../FooterLayoutContext.js';
|
|
8
|
+
import i18n from '../../i18n/index.js';
|
|
9
|
+
import { FooterItem } from '../FooterItem/FooterItem.js';
|
|
10
|
+
import { MAX_VISIBLE_ITEMS } from './constants.js';
|
|
11
|
+
import styles from './FooterBar.module.scss.js';
|
|
12
|
+
|
|
13
|
+
const isValidFooterElement = (child) => {
|
|
14
|
+
return React__default.isValidElement(child) && child.type === FooterItem;
|
|
15
|
+
};
|
|
16
|
+
const getChildKey = (child, fallbackIndex) => {
|
|
17
|
+
if (React__default.isValidElement(child) && child.key) {
|
|
18
|
+
return child.key;
|
|
19
|
+
}
|
|
20
|
+
return fallbackIndex;
|
|
21
|
+
};
|
|
22
|
+
// Get title from child props for tooltip
|
|
23
|
+
const getChildTitle = (child) => {
|
|
24
|
+
if (React__default.isValidElement(child) && child.props) {
|
|
25
|
+
return child.props.title;
|
|
26
|
+
}
|
|
27
|
+
return undefined;
|
|
28
|
+
};
|
|
29
|
+
const b = createBlock('footer-bar', styles);
|
|
30
|
+
const FooterBar = memo(({ children, renderAfter, setCollapseBlocker, isPinned, isExpanded, maxVisibleItems = MAX_VISIBLE_ITEMS, }) => {
|
|
31
|
+
const childArray = React__default.Children.toArray(children).filter(Boolean);
|
|
32
|
+
// If only 1 element, render in vertical mode regardless of isPinned
|
|
33
|
+
const isHorizontal = isPinned && childArray.length > 1;
|
|
34
|
+
const handleDropdownOpenToggle = useCallback((isOpened) => {
|
|
35
|
+
setCollapseBlocker === null || setCollapseBlocker === undefined ? undefined : setCollapseBlocker(isOpened);
|
|
36
|
+
}, [setCollapseBlocker]);
|
|
37
|
+
const renderDropdownChild = useCallback((child) => {
|
|
38
|
+
if (!isValidFooterElement(child)) {
|
|
39
|
+
return child;
|
|
40
|
+
}
|
|
41
|
+
// In dropdown, always show text
|
|
42
|
+
return React__default.cloneElement(child, {
|
|
43
|
+
isExpanded: true,
|
|
44
|
+
layout: 'vertical',
|
|
45
|
+
});
|
|
46
|
+
}, []);
|
|
47
|
+
const { visibleChildren, hiddenChildren } = useMemo(() => {
|
|
48
|
+
if (childArray.length <= maxVisibleItems) {
|
|
49
|
+
return {
|
|
50
|
+
visibleChildren: childArray,
|
|
51
|
+
hiddenChildren: [],
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
// Reserve one slot for "more" button
|
|
55
|
+
const visibleCount = maxVisibleItems - 1;
|
|
56
|
+
return {
|
|
57
|
+
visibleChildren: childArray.slice(0, visibleCount),
|
|
58
|
+
hiddenChildren: childArray.slice(visibleCount),
|
|
59
|
+
};
|
|
60
|
+
}, [childArray, maxVisibleItems]);
|
|
61
|
+
const value = useMemo(() => ({
|
|
62
|
+
layout: isHorizontal ? 'horizontal' : 'vertical',
|
|
63
|
+
isExpanded,
|
|
64
|
+
}), [isHorizontal, isExpanded]);
|
|
65
|
+
const dropdownItems = useMemo(() => hiddenChildren.map((child) => ({
|
|
66
|
+
text: renderDropdownChild(child),
|
|
67
|
+
action: () => { }, // clicks are handled by the child itself
|
|
68
|
+
})), [hiddenChildren, renderDropdownChild]);
|
|
69
|
+
const afterContent = React__default.useMemo(() => (renderAfter ? renderAfter({ setCollapseBlocker }) : null), [renderAfter, setCollapseBlocker]);
|
|
70
|
+
return (React__default.createElement("div", { className: b() },
|
|
71
|
+
React__default.createElement("div", { className: b('items', { horizontal: isHorizontal }) },
|
|
72
|
+
React__default.createElement(FooterLayoutContext.Provider, { value: value }, visibleChildren.map((child, index) => {
|
|
73
|
+
const title = getChildTitle(child);
|
|
74
|
+
// In horizontal mode, wrap in Tooltip to show title on hover
|
|
75
|
+
if (isHorizontal && title) {
|
|
76
|
+
return (React__default.createElement(Tooltip, { key: getChildKey(child, index), content: title, placement: "top", openDelay: ASIDE_HEADER_EXPAND_DELAY },
|
|
77
|
+
React__default.createElement("div", { className: b('item') }, child)));
|
|
78
|
+
}
|
|
79
|
+
return (React__default.createElement("div", { key: getChildKey(child, index), className: b('item') }, child));
|
|
80
|
+
})),
|
|
81
|
+
hiddenChildren.length > 0 && (React__default.createElement("div", { className: b('item', { more: true }) },
|
|
82
|
+
React__default.createElement(DropdownMenu, { onOpenToggle: handleDropdownOpenToggle, items: dropdownItems, popupProps: {
|
|
83
|
+
placement: isHorizontal ? 'top' : 'right',
|
|
84
|
+
className: b('dropdown-popup'),
|
|
85
|
+
}, switcherWrapperClassName: b('dropdown-switcher'), renderSwitcher: ({ onClick }) => (React__default.createElement(FooterItem, { id: "more", title: i18n('label_others'), icon: Ellipsis, isExpanded: !isHorizontal && isExpanded, layout: isHorizontal ? 'horizontal' : 'vertical', onItemClick: (_, __, event) => {
|
|
86
|
+
onClick(event);
|
|
87
|
+
} })) })))),
|
|
88
|
+
afterContent && (React__default.createElement("div", { className: b('after', { horizontal: isHorizontal }) }, afterContent))));
|
|
89
|
+
});
|
|
90
|
+
FooterBar.displayName = 'FooterBar';
|
|
91
|
+
|
|
92
|
+
export { FooterBar };
|
|
93
|
+
//# sourceMappingURL=FooterBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FooterBar.js","sources":["../../../../../../../src/components/AsideHeader/components/FooterBar/FooterBar.tsx"],"sourcesContent":["import React, {memo, useCallback, useMemo} from 'react';\n\nimport {Ellipsis} from '@gravity-ui/icons';\nimport type {DropdownMenuItem} from '@gravity-ui/uikit';\nimport {DropdownMenu, Tooltip} from '@gravity-ui/uikit';\n\nimport {ASIDE_HEADER_EXPAND_DELAY} from '../../../constants';\nimport {createBlock} from '../../../utils/cn';\nimport {FooterLayoutContext, FooterLayoutContextValue} from '../../FooterLayoutContext';\nimport i18n from '../../i18n';\nimport {SetCollapseBlocker} from '../../types';\nimport {FooterItem} from '../FooterItem/FooterItem';\n\nimport {MAX_VISIBLE_ITEMS} from './constants';\n\nimport styles from './FooterBar.module.scss';\n\nconst isValidFooterElement = (child: React.ReactNode): child is React.ReactElement => {\n return React.isValidElement(child) && child.type === FooterItem;\n};\n\nconst getChildKey = (child: React.ReactNode, fallbackIndex: number): string | number => {\n if (React.isValidElement(child) && child.key) {\n return child.key;\n }\n return fallbackIndex;\n};\n\n// Get title from child props for tooltip\nconst getChildTitle = (child: React.ReactNode): React.ReactNode => {\n if (React.isValidElement(child) && child.props) {\n return (child.props as {title?: React.ReactNode}).title;\n }\n return undefined;\n};\n\nconst b = createBlock('footer-bar', styles);\n\nexport interface FooterBarProps {\n /** Array of footer elements (ReactNode[]) */\n children: React.ReactNode[];\n /** Render function for additional content after items (e.g., user profile). Receives options with setCollapseBlocker. */\n renderAfter?: (options?: {setCollapseBlocker?: SetCollapseBlocker}) => React.ReactNode;\n /** Registers a temporary block on collapse (e.g. while dropdown is open). Returns release function. */\n setCollapseBlocker?: SetCollapseBlocker;\n /** When `true`, the navigation is pinned (expanded). Items render horizontally. */\n isPinned: boolean;\n /** When `true`, the navigation is expanded (hover or pinned). */\n isExpanded: boolean;\n /** Maximum number of visible items before showing \"more\" button. Default: 5 */\n maxVisibleItems?: number;\n}\n\nexport const FooterBar = memo<FooterBarProps>(\n ({\n children,\n renderAfter,\n setCollapseBlocker,\n isPinned,\n isExpanded,\n maxVisibleItems = MAX_VISIBLE_ITEMS,\n }) => {\n const childArray = React.Children.toArray(children).filter(Boolean);\n\n // If only 1 element, render in vertical mode regardless of isPinned\n const isHorizontal = isPinned && childArray.length > 1;\n\n const handleDropdownOpenToggle = useCallback(\n (isOpened: boolean) => {\n setCollapseBlocker?.(isOpened);\n },\n [setCollapseBlocker],\n );\n\n const renderDropdownChild = useCallback((child: React.ReactNode): React.ReactNode => {\n if (!isValidFooterElement(child)) {\n return child;\n }\n\n // In dropdown, always show text\n return React.cloneElement(child, {\n isExpanded: true,\n layout: 'vertical',\n });\n }, []);\n\n const {visibleChildren, hiddenChildren} = useMemo(() => {\n if (childArray.length <= maxVisibleItems) {\n return {\n visibleChildren: childArray,\n hiddenChildren: [],\n };\n }\n\n // Reserve one slot for \"more\" button\n const visibleCount = maxVisibleItems - 1;\n return {\n visibleChildren: childArray.slice(0, visibleCount),\n hiddenChildren: childArray.slice(visibleCount),\n };\n }, [childArray, maxVisibleItems]);\n\n const value: FooterLayoutContextValue = useMemo(\n () => ({\n layout: isHorizontal ? 'horizontal' : 'vertical',\n isExpanded,\n }),\n [isHorizontal, isExpanded],\n );\n\n const dropdownItems: DropdownMenuItem[] = useMemo(\n () =>\n hiddenChildren.map((child) => ({\n text: renderDropdownChild(child),\n action: () => {}, // clicks are handled by the child itself\n })),\n [hiddenChildren, renderDropdownChild],\n );\n\n const afterContent = React.useMemo(\n () => (renderAfter ? renderAfter({setCollapseBlocker}) : null),\n [renderAfter, setCollapseBlocker],\n );\n\n return (\n <div className={b()}>\n <div className={b('items', {horizontal: isHorizontal})}>\n <FooterLayoutContext.Provider value={value}>\n {visibleChildren.map((child, index) => {\n const title = getChildTitle(child);\n\n // In horizontal mode, wrap in Tooltip to show title on hover\n if (isHorizontal && title) {\n return (\n <Tooltip\n key={getChildKey(child, index)}\n content={title}\n placement=\"top\"\n openDelay={ASIDE_HEADER_EXPAND_DELAY}\n >\n <div className={b('item')}>{child}</div>\n </Tooltip>\n );\n }\n\n return (\n <div key={getChildKey(child, index)} className={b('item')}>\n {child}\n </div>\n );\n })}\n </FooterLayoutContext.Provider>\n\n {hiddenChildren.length > 0 && (\n <div className={b('item', {more: true})}>\n <DropdownMenu\n onOpenToggle={handleDropdownOpenToggle}\n items={dropdownItems}\n popupProps={{\n placement: isHorizontal ? 'top' : 'right',\n className: b('dropdown-popup'),\n }}\n switcherWrapperClassName={b('dropdown-switcher')}\n renderSwitcher={({onClick}) => (\n <FooterItem\n id=\"more\"\n title={i18n('label_others')}\n icon={Ellipsis}\n isExpanded={!isHorizontal && isExpanded}\n layout={isHorizontal ? 'horizontal' : 'vertical'}\n onItemClick={(_, __, event) => {\n onClick(event as React.MouseEvent<HTMLElement>);\n }}\n />\n )}\n />\n </div>\n )}\n </div>\n\n {afterContent && (\n <div className={b('after', {horizontal: isHorizontal})}>{afterContent}</div>\n )}\n </div>\n );\n },\n);\n\nFooterBar.displayName = 'FooterBar';\n"],"names":["React"],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var styles = {"gn-footer-bar":"FooterBar-module__gn-footer-bar___dunXC","gnFooterBar":"FooterBar-module__gn-footer-bar___dunXC","gn-footer-bar__items":"FooterBar-module__gn-footer-bar__items___xBsUq","gnFooterBarItems":"FooterBar-module__gn-footer-bar__items___xBsUq","gn-footer-bar__items_horizontal":"FooterBar-module__gn-footer-bar__items_horizontal___DEeK6","gnFooterBarItemsHorizontal":"FooterBar-module__gn-footer-bar__items_horizontal___DEeK6","gn-footer-bar__item":"FooterBar-module__gn-footer-bar__item___KAJSe","gnFooterBarItem":"FooterBar-module__gn-footer-bar__item___KAJSe","gn-footer-bar__items_vertical":"FooterBar-module__gn-footer-bar__items_vertical___3A7jw","gnFooterBarItemsVertical":"FooterBar-module__gn-footer-bar__items_vertical___3A7jw","gn-footer-bar__after":"FooterBar-module__gn-footer-bar__after___yB8To","gnFooterBarAfter":"FooterBar-module__gn-footer-bar__after___yB8To","gn-footer-bar__after_horizontal":"FooterBar-module__gn-footer-bar__after_horizontal___t4KyN","gnFooterBarAfterHorizontal":"FooterBar-module__gn-footer-bar__after_horizontal___t4KyN","gn-footer-bar__dropdown-switcher":"FooterBar-module__gn-footer-bar__dropdown-switcher___Czw-L","gnFooterBarDropdownSwitcher":"FooterBar-module__gn-footer-bar__dropdown-switcher___Czw-L","gn-footer-bar__dropdown-popup":"FooterBar-module__gn-footer-bar__dropdown-popup___nWoMR","gnFooterBarDropdownPopup":"FooterBar-module__gn-footer-bar__dropdown-popup___nWoMR"};
|
|
2
|
+
|
|
3
|
+
export { styles as default };
|
|
4
|
+
//# sourceMappingURL=FooterBar.module.scss.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FooterBar.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const MAX_VISIBLE_ITEMS = 5;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sources":["../../../../../../../src/components/AsideHeader/components/FooterBar/constants.ts"],"sourcesContent":["export const MAX_VISIBLE_ITEMS = 5;\n"],"names":[],"mappings":"AAAO,MAAM,iBAAiB,GAAG;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { FooterBar } from './FooterBar';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
.FooterItem-module__gn-footer-item___Hi7NH{--
|
|
1
|
+
.FooterItem-module__gn-footer-item___Hi7NH{height:var(--_--item-height)}.FooterItem-module__gn-footer-item_layout_horizontal___WaBU0{display:flex;justify-content:center}.FooterItem-module__gn-footer-item_layout_vertical___SjEa5{border-radius:var(--gn-aside-header-item-expanded-radius);width:100%}.FooterItem-module__gn-footer-item_layout_vertical___SjEa5:not(.FooterItem-module__gn-footer-item_footer-bar___zcMtA){margin-bottom:2px}.FooterItem-module__gn-footer-item___Hi7NH:last-child{margin-bottom:0}
|
|
2
2
|
.FooterItem-module__gn-mobile-header-footer-item___dk-Wo{flex-grow:1;position:relative}.FooterItem-module__gn-mobile-header-footer-item__button___KSu25{align-items:center;background:none;border:none;box-sizing:border-box;color:inherit;cursor:pointer;display:flex;font-family:var(--g-text-body-font-family);font-size:inherit;font-weight:var(--g-text-body-font-weight);justify-content:center;outline:none;padding:13px 10px;width:100%}.FooterItem-module__gn-mobile-header-footer-item___dk-Wo .FooterItem-module__gn-mobile-header-footer-item__icon___Spltd{color:var(--g-color-text-misc)}.FooterItem-module__gn-mobile-header-footer-item___dk-Wo+.FooterItem-module__gn-mobile-header-footer-item___dk-Wo:before{border-left:1px solid var(--g-color-base-generic);bottom:8px;content:"";left:0;position:absolute;top:8px}.FooterItem-module__gn-mobile-header-footer-item___dk-Wo:empty{display:none}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { AsideHeaderItem } from '../../types';
|
|
3
3
|
export interface FooterItemProps extends AsideHeaderItem {
|
|
4
|
+
/** Layout mode: 'horizontal' shows icon only, 'vertical' shows icon and title. Used by FooterBar. */
|
|
5
|
+
layout?: 'horizontal' | 'vertical';
|
|
4
6
|
}
|
|
5
7
|
export declare function FooterItem(props: FooterItemProps): React.JSX.Element;
|