@gravity-ui/navigation 5.0.0 → 6.0.0-beta.1
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 → control-menu-button.svg.js} +7 -7
- package/build/cjs/assets/icons/control-menu-button.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 +4 -28
- package/build/cjs/components/AsideHeader/AsideHeaderContext.js +8 -9
- package/build/cjs/components/AsideHeader/AsideHeaderContext.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.css +1 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.d.ts +12 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.js +44 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.module.scss.js +8 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.module.scss.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/index.d.ts +1 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.css +1 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.js +45 -103
- 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/constants.d.ts +0 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/constants.js +0 -2
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/constants.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/i18n/en.json.js +1 -0
- 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 +1 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/i18n/ru.json.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/index.d.ts +1 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.d.ts +4 -3
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.js +15 -67
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/useVisibleMenuItems.d.ts +2 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/useVisibleMenuItems.js +29 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/useVisibleMenuItems.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 +1 -2
- package/build/cjs/components/AsideHeader/components/CollapseButton/CollapseButton.js +11 -16
- 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 +10 -34
- package/build/cjs/components/AsideHeader/components/CompositeBar/CompositeBar.js +51 -75
- 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 +1 -25
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.d.ts +1 -17
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.js +73 -60
- 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 +20 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/ItemPopup.d.ts +18 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/ItemPopup.js +45 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/ItemPopup.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/ItemPopupNestContext.d.ts +5 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/ItemPopupNestContext.js +8 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/ItemPopupNestContext.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/renderItemTitle.d.ts +3 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/renderItemTitle.js +19 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/renderItemTitle.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.css +1 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.d.ts +4 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.js +9 -12
- 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 +27 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollableScrollbarSync.js +171 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollableScrollbarSync.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/grouping.d.ts +11 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/grouping.js +68 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/grouping.js.map +1 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/utils.d.ts +21 -5
- package/build/cjs/components/AsideHeader/components/CompositeBar/utils.js +104 -55
- package/build/cjs/components/AsideHeader/components/CompositeBar/utils.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/FirstPanel.js +20 -45
- 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.d.ts +0 -2
- package/build/cjs/components/AsideHeader/components/FooterItem/FooterItem.js +1 -12
- 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 +4 -13
- package/build/cjs/components/AsideHeader/components/Header.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/PageLayout/AsideFallback.css +1 -1
- package/build/cjs/components/AsideHeader/components/PageLayout/AsideFallback.js +3 -3
- package/build/cjs/components/AsideHeader/components/PageLayout/AsideFallback.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayout.css +1 -1
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayout.d.ts +1 -4
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayout.js +6 -18
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayout.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayoutAside.css +1 -1
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayoutAside.d.ts +1 -1
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayoutAside.js +2 -7
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayoutAside.js.map +1 -1
- package/build/cjs/components/AsideHeader/components/Panels.d.ts +1 -1
- package/build/cjs/components/AsideHeader/components/Panels.js +3 -17
- package/build/cjs/components/AsideHeader/components/Panels.js.map +1 -1
- package/build/cjs/components/AsideHeader/i18n/en.json.js +1 -4
- 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 +1 -4
- package/build/cjs/components/AsideHeader/i18n/ru.json.js.map +1 -1
- package/build/cjs/components/AsideHeader/index.d.ts +3 -3
- package/build/cjs/components/AsideHeader/types.d.ts +22 -39
- package/build/cjs/components/AsideHeader/types.js.map +1 -1
- package/build/cjs/components/AsideHeader/useAsideHeaderInnerContextValue.d.ts +1 -6
- package/build/cjs/components/AsideHeader/useAsideHeaderInnerContextValue.js +6 -41
- package/build/cjs/components/AsideHeader/useAsideHeaderInnerContextValue.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 +4 -2
- package/build/cjs/components/HotkeysPanel/HotkeysPanel.js +13 -2
- 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 +3 -7
- package/build/cjs/components/Logo/Logo.js +6 -19
- 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/BurgerMenu/BurgerCompositeBar/BurgerCompositeBar.css +1 -1
- package/build/cjs/components/MobileHeader/BurgerMenu/BurgerCompositeBar/BurgerCompositeBar.module.scss.js +1 -1
- package/build/cjs/components/MobileHeader/MobileHeader.d.ts +1 -1
- package/build/cjs/components/MobileHeader/MobileHeader.js +7 -7
- package/build/cjs/components/MobileHeader/MobileHeader.js.map +1 -1
- package/build/cjs/components/MobileHeader/types.d.ts +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/constants.d.ts +5 -10
- package/build/cjs/components/constants.js +7 -17
- package/build/cjs/components/constants.js.map +1 -1
- package/build/cjs/components/types.d.ts +19 -15
- package/build/cjs/index.js +0 -4
- package/build/cjs/index.js.map +1 -1
- package/build/esm/assets/icons/{divider-collapsed-compact.svg.js → control-menu-button.svg.js} +7 -7
- package/build/esm/assets/icons/control-menu-button.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 +4 -28
- package/build/esm/components/AsideHeader/AsideHeaderContext.js +8 -9
- package/build/esm/components/AsideHeader/AsideHeaderContext.js.map +1 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.css +1 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.d.ts +12 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.js +42 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.js.map +1 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.module.scss.js +4 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/AllPagesListItem.module.scss.js.map +1 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesListItem/index.d.ts +1 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.css +1 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesPanel.js +46 -104
- 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/constants.d.ts +0 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/constants.js +1 -2
- package/build/esm/components/AsideHeader/components/AllPagesPanel/constants.js.map +1 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/i18n/en.json.js +1 -0
- 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 +1 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/i18n/ru.json.js.map +1 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/index.d.ts +1 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.d.ts +4 -3
- package/build/esm/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.js +15 -67
- package/build/esm/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.js.map +1 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/useVisibleMenuItems.d.ts +2 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/useVisibleMenuItems.js +27 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/useVisibleMenuItems.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 +1 -2
- package/build/esm/components/AsideHeader/components/CollapseButton/CollapseButton.js +13 -18
- 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 +10 -34
- package/build/esm/components/AsideHeader/components/CompositeBar/CompositeBar.js +55 -78
- 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 +1 -25
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.d.ts +1 -17
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.js +76 -63
- 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 +20 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/ItemPopup.d.ts +18 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/ItemPopup.js +43 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/ItemPopup.js.map +1 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/ItemPopupNestContext.d.ts +5 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/ItemPopupNestContext.js +6 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/ItemPopupNestContext.js.map +1 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/renderItemTitle.d.ts +3 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/renderItemTitle.js +17 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/renderItemTitle.js.map +1 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.css +1 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.d.ts +4 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/ScrollableWithScrollbar.js +10 -13
- 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 +27 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollableScrollbarSync.js +169 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollableScrollbarSync.js.map +1 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/grouping.d.ts +11 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/grouping.js +65 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/grouping.js.map +1 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/utils.d.ts +21 -5
- package/build/esm/components/AsideHeader/components/CompositeBar/utils.js +100 -55
- package/build/esm/components/AsideHeader/components/CompositeBar/utils.js.map +1 -1
- package/build/esm/components/AsideHeader/components/FirstPanel.js +21 -46
- 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.d.ts +0 -2
- package/build/esm/components/AsideHeader/components/FooterItem/FooterItem.js +1 -12
- 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 +5 -14
- package/build/esm/components/AsideHeader/components/Header.js.map +1 -1
- package/build/esm/components/AsideHeader/components/PageLayout/AsideFallback.css +1 -1
- package/build/esm/components/AsideHeader/components/PageLayout/AsideFallback.js +4 -4
- package/build/esm/components/AsideHeader/components/PageLayout/AsideFallback.js.map +1 -1
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayout.css +1 -1
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayout.d.ts +1 -4
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayout.js +7 -19
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayout.js.map +1 -1
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayoutAside.css +1 -1
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayoutAside.d.ts +1 -1
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayoutAside.js +2 -7
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayoutAside.js.map +1 -1
- package/build/esm/components/AsideHeader/components/Panels.d.ts +1 -1
- package/build/esm/components/AsideHeader/components/Panels.js +4 -18
- package/build/esm/components/AsideHeader/components/Panels.js.map +1 -1
- package/build/esm/components/AsideHeader/i18n/en.json.js +2 -4
- 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 +2 -4
- package/build/esm/components/AsideHeader/i18n/ru.json.js.map +1 -1
- package/build/esm/components/AsideHeader/index.d.ts +3 -3
- package/build/esm/components/AsideHeader/types.d.ts +22 -39
- package/build/esm/components/AsideHeader/types.js.map +1 -1
- package/build/esm/components/AsideHeader/useAsideHeaderInnerContextValue.d.ts +1 -6
- package/build/esm/components/AsideHeader/useAsideHeaderInnerContextValue.js +6 -41
- package/build/esm/components/AsideHeader/useAsideHeaderInnerContextValue.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 +4 -2
- package/build/esm/components/HotkeysPanel/HotkeysPanel.js +13 -2
- 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 +3 -7
- package/build/esm/components/Logo/Logo.js +6 -19
- 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/BurgerMenu/BurgerCompositeBar/BurgerCompositeBar.css +1 -1
- package/build/esm/components/MobileHeader/BurgerMenu/BurgerCompositeBar/BurgerCompositeBar.module.scss.js +1 -1
- package/build/esm/components/MobileHeader/MobileHeader.d.ts +1 -1
- package/build/esm/components/MobileHeader/MobileHeader.js +8 -8
- package/build/esm/components/MobileHeader/MobileHeader.js.map +1 -1
- package/build/esm/components/MobileHeader/types.d.ts +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/constants.d.ts +5 -10
- package/build/esm/components/constants.js +6 -11
- package/build/esm/components/constants.js.map +1 -1
- package/build/esm/components/types.d.ts +19 -15
- package/build/esm/index.js +1 -2
- package/build/esm/index.js.map +1 -1
- package/codemods/bin/cli.js +6 -19
- package/codemods/transforms/unifyInterfaces.ts +0 -1
- package/package.json +4 -3
- package/build/cjs/assets/icons/divider-collapsed-compact.svg.js.map +0 -1
- package/build/cjs/components/AsideHeader/FooterLayoutContext.d.ts +0 -7
- package/build/cjs/components/AsideHeader/FooterLayoutContext.js +0 -10
- package/build/cjs/components/AsideHeader/FooterLayoutContext.js.map +0 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/buildExpandedFromFlatList.d.ts +0 -3
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/buildExpandedFromFlatList.js +0 -17
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/buildExpandedFromFlatList.js.map +0 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getExpandedIndexForSortableIndex.d.ts +0 -9
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getExpandedIndexForSortableIndex.js +0 -27
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getExpandedIndexForSortableIndex.js.map +0 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getIsMenuItem.d.ts +0 -2
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getIsMenuItem.js +0 -13
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getIsMenuItem.js.map +0 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getRealIndexInGroup.d.ts +0 -73
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getRealIndexInGroup.js +0 -144
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getRealIndexInGroup.js.map +0 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItemsWithDividers.d.ts +0 -5
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItemsWithDividers.js +0 -45
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItemsWithDividers.js.map +0 -1
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollbar.d.ts +0 -21
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollbar.js +0 -146
- package/build/cjs/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollbar.js.map +0 -1
- package/build/cjs/components/AsideHeader/components/FooterBar/FooterBar.css +0 -1
- package/build/cjs/components/AsideHeader/components/FooterBar/FooterBar.d.ts +0 -19
- package/build/cjs/components/AsideHeader/components/FooterBar/FooterBar.js +0 -95
- package/build/cjs/components/AsideHeader/components/FooterBar/FooterBar.js.map +0 -1
- package/build/cjs/components/AsideHeader/components/FooterBar/FooterBar.module.scss.js +0 -8
- package/build/cjs/components/AsideHeader/components/FooterBar/FooterBar.module.scss.js.map +0 -1
- package/build/cjs/components/AsideHeader/components/FooterBar/constants.d.ts +0 -1
- package/build/cjs/components/AsideHeader/components/FooterBar/constants.js +0 -6
- package/build/cjs/components/AsideHeader/components/FooterBar/constants.js.map +0 -1
- package/build/cjs/components/AsideHeader/components/FooterBar/index.d.ts +0 -1
- package/build/cjs/components/AsideHeader/hooks/useDelayedToggle.d.ts +0 -6
- package/build/cjs/components/AsideHeader/hooks/useDelayedToggle.js +0 -57
- package/build/cjs/components/AsideHeader/hooks/useDelayedToggle.js.map +0 -1
- package/build/cjs/components/AsideHeader/hooks/useIsExpanded.d.ts +0 -9
- package/build/cjs/components/AsideHeader/hooks/useIsExpanded.js +0 -67
- package/build/cjs/components/AsideHeader/hooks/useIsExpanded.js.map +0 -1
- package/build/cjs/components/AsideHeader/utils/getGroupHeight.d.ts +0 -2
- package/build/cjs/components/AsideHeader/utils/getGroupHeight.js +0 -16
- package/build/cjs/components/AsideHeader/utils/getGroupHeight.js.map +0 -1
- package/build/cjs/components/utils/getCollapsedWidth.d.ts +0 -1
- package/build/cjs/components/utils/getCollapsedWidth.js +0 -10
- package/build/cjs/components/utils/getCollapsedWidth.js.map +0 -1
- package/build/esm/assets/icons/divider-collapsed-compact.svg.js.map +0 -1
- package/build/esm/components/AsideHeader/FooterLayoutContext.d.ts +0 -7
- package/build/esm/components/AsideHeader/FooterLayoutContext.js +0 -7
- package/build/esm/components/AsideHeader/FooterLayoutContext.js.map +0 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/buildExpandedFromFlatList.d.ts +0 -3
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/buildExpandedFromFlatList.js +0 -15
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/buildExpandedFromFlatList.js.map +0 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getExpandedIndexForSortableIndex.d.ts +0 -9
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getExpandedIndexForSortableIndex.js +0 -25
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getExpandedIndexForSortableIndex.js.map +0 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getIsMenuItem.d.ts +0 -2
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getIsMenuItem.js +0 -11
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getIsMenuItem.js.map +0 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getRealIndexInGroup.d.ts +0 -73
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getRealIndexInGroup.js +0 -136
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getRealIndexInGroup.js.map +0 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItemsWithDividers.d.ts +0 -5
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItemsWithDividers.js +0 -43
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItemsWithDividers.js.map +0 -1
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollbar.d.ts +0 -21
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollbar.js +0 -144
- package/build/esm/components/AsideHeader/components/CompositeBar/ScrollableWithScrollbar/useScrollbar.js.map +0 -1
- package/build/esm/components/AsideHeader/components/FooterBar/FooterBar.css +0 -1
- package/build/esm/components/AsideHeader/components/FooterBar/FooterBar.d.ts +0 -19
- package/build/esm/components/AsideHeader/components/FooterBar/FooterBar.js +0 -93
- package/build/esm/components/AsideHeader/components/FooterBar/FooterBar.js.map +0 -1
- package/build/esm/components/AsideHeader/components/FooterBar/FooterBar.module.scss.js +0 -4
- package/build/esm/components/AsideHeader/components/FooterBar/FooterBar.module.scss.js.map +0 -1
- package/build/esm/components/AsideHeader/components/FooterBar/constants.d.ts +0 -1
- package/build/esm/components/AsideHeader/components/FooterBar/constants.js +0 -4
- package/build/esm/components/AsideHeader/components/FooterBar/constants.js.map +0 -1
- package/build/esm/components/AsideHeader/components/FooterBar/index.d.ts +0 -1
- package/build/esm/components/AsideHeader/hooks/useDelayedToggle.d.ts +0 -6
- package/build/esm/components/AsideHeader/hooks/useDelayedToggle.js +0 -55
- package/build/esm/components/AsideHeader/hooks/useDelayedToggle.js.map +0 -1
- package/build/esm/components/AsideHeader/hooks/useIsExpanded.d.ts +0 -9
- package/build/esm/components/AsideHeader/hooks/useIsExpanded.js +0 -65
- package/build/esm/components/AsideHeader/hooks/useIsExpanded.js.map +0 -1
- package/build/esm/components/AsideHeader/utils/getGroupHeight.d.ts +0 -2
- package/build/esm/components/AsideHeader/utils/getGroupHeight.js +0 -14
- package/build/esm/components/AsideHeader/utils/getGroupHeight.js.map +0 -1
- package/build/esm/components/utils/getCollapsedWidth.d.ts +0 -1
- package/build/esm/components/utils/getCollapsedWidth.js +0 -8
- package/build/esm/components/utils/getCollapsedWidth.js.map +0 -1
- package/codemods/transforms/compactToIsExpanded.ts +0 -345
- package/codemods/transforms/compactToPinned.ts +0 -135
- package/codemods/transforms/v5.ts +0 -36
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var React = require('react');
|
|
4
|
-
|
|
5
|
-
const DEFAULT_SCROLLBAR_THUMB_HEIGHT = 20;
|
|
6
|
-
const EMPTY_DEPS = [];
|
|
7
|
-
function useScrollbar(options = {}) {
|
|
8
|
-
const { recalcDeps = EMPTY_DEPS } = options;
|
|
9
|
-
const scrollRef = React.useRef(null);
|
|
10
|
-
const [scrollState, setScrollState] = React.useState({
|
|
11
|
-
scrollTop: 0,
|
|
12
|
-
scrollHeight: 0,
|
|
13
|
-
clientHeight: 0,
|
|
14
|
-
});
|
|
15
|
-
const thumbDragRef = React.useRef({ isDragging: false, startY: 0, startScrollTop: 0 });
|
|
16
|
-
const dragCleanupRef = React.useRef(null);
|
|
17
|
-
const updateScrollState = React.useCallback(() => {
|
|
18
|
-
const el = scrollRef.current;
|
|
19
|
-
if (!el)
|
|
20
|
-
return;
|
|
21
|
-
setScrollState({
|
|
22
|
-
scrollTop: el.scrollTop,
|
|
23
|
-
scrollHeight: el.scrollHeight,
|
|
24
|
-
clientHeight: el.clientHeight,
|
|
25
|
-
});
|
|
26
|
-
}, []);
|
|
27
|
-
React.useEffect(() => {
|
|
28
|
-
const el = scrollRef.current;
|
|
29
|
-
if (!el)
|
|
30
|
-
return;
|
|
31
|
-
updateScrollState();
|
|
32
|
-
const observer = new ResizeObserver(updateScrollState);
|
|
33
|
-
observer.observe(el);
|
|
34
|
-
return () => observer.disconnect();
|
|
35
|
-
}, [updateScrollState, ...recalcDeps]);
|
|
36
|
-
const handleThumbMouseDown = React.useCallback((e) => {
|
|
37
|
-
e.preventDefault();
|
|
38
|
-
if (!scrollRef.current)
|
|
39
|
-
return;
|
|
40
|
-
thumbDragRef.current = {
|
|
41
|
-
isDragging: true,
|
|
42
|
-
startY: e.clientY,
|
|
43
|
-
startScrollTop: scrollRef.current.scrollTop,
|
|
44
|
-
};
|
|
45
|
-
const onMouseMove = (moveEvent) => {
|
|
46
|
-
if (!thumbDragRef.current.isDragging || !scrollRef.current)
|
|
47
|
-
return;
|
|
48
|
-
const { scrollHeight, clientHeight } = scrollRef.current;
|
|
49
|
-
const trackHeight = clientHeight;
|
|
50
|
-
const maxScroll = scrollHeight - clientHeight;
|
|
51
|
-
if (maxScroll <= 0)
|
|
52
|
-
return;
|
|
53
|
-
const deltaY = moveEvent.clientY - thumbDragRef.current.startY;
|
|
54
|
-
const thumbRatio = trackHeight / scrollHeight;
|
|
55
|
-
const scrollDelta = deltaY / thumbRatio;
|
|
56
|
-
scrollRef.current.scrollTop = Math.min(maxScroll, Math.max(0, thumbDragRef.current.startScrollTop + scrollDelta));
|
|
57
|
-
thumbDragRef.current.startY = moveEvent.clientY;
|
|
58
|
-
thumbDragRef.current.startScrollTop = scrollRef.current.scrollTop;
|
|
59
|
-
};
|
|
60
|
-
const removeListeners = () => {
|
|
61
|
-
document.removeEventListener('mousemove', onMouseMove);
|
|
62
|
-
document.removeEventListener('mouseup', onMouseUp);
|
|
63
|
-
dragCleanupRef.current = null;
|
|
64
|
-
};
|
|
65
|
-
const onMouseUp = () => {
|
|
66
|
-
thumbDragRef.current.isDragging = false;
|
|
67
|
-
removeListeners();
|
|
68
|
-
};
|
|
69
|
-
dragCleanupRef.current = removeListeners;
|
|
70
|
-
document.addEventListener('mousemove', onMouseMove);
|
|
71
|
-
document.addEventListener('mouseup', onMouseUp);
|
|
72
|
-
}, []);
|
|
73
|
-
React.useEffect(() => {
|
|
74
|
-
return () => {
|
|
75
|
-
var _a;
|
|
76
|
-
(_a = dragCleanupRef.current) === null || _a === undefined ? undefined : _a.call(dragCleanupRef);
|
|
77
|
-
};
|
|
78
|
-
}, []);
|
|
79
|
-
const handleTrackClick = React.useCallback((e) => {
|
|
80
|
-
if (!scrollRef.current || e.target !== e.currentTarget)
|
|
81
|
-
return;
|
|
82
|
-
const { scrollHeight, clientHeight } = scrollRef.current;
|
|
83
|
-
const maxScroll = scrollHeight - clientHeight;
|
|
84
|
-
if (maxScroll <= 0)
|
|
85
|
-
return;
|
|
86
|
-
const rect = e.currentTarget.getBoundingClientRect();
|
|
87
|
-
const ratio = (e.clientY - rect.top) / rect.height;
|
|
88
|
-
scrollRef.current.scrollTop = ratio * maxScroll;
|
|
89
|
-
}, []);
|
|
90
|
-
const handleScrollbarKeyDown = React.useCallback((e) => {
|
|
91
|
-
const el = scrollRef.current;
|
|
92
|
-
if (!el)
|
|
93
|
-
return;
|
|
94
|
-
const { scrollHeight, clientHeight } = el;
|
|
95
|
-
const maxScroll = scrollHeight - clientHeight;
|
|
96
|
-
if (maxScroll <= 0)
|
|
97
|
-
return;
|
|
98
|
-
const step = Math.max(20, clientHeight * 0.2);
|
|
99
|
-
let newScrollTop = el.scrollTop;
|
|
100
|
-
switch (e.key) {
|
|
101
|
-
case 'ArrowDown':
|
|
102
|
-
e.preventDefault();
|
|
103
|
-
newScrollTop = Math.min(maxScroll, el.scrollTop + step);
|
|
104
|
-
break;
|
|
105
|
-
case 'ArrowUp':
|
|
106
|
-
e.preventDefault();
|
|
107
|
-
newScrollTop = Math.max(0, el.scrollTop - step);
|
|
108
|
-
break;
|
|
109
|
-
case 'End':
|
|
110
|
-
e.preventDefault();
|
|
111
|
-
newScrollTop = maxScroll;
|
|
112
|
-
break;
|
|
113
|
-
case 'Home':
|
|
114
|
-
e.preventDefault();
|
|
115
|
-
newScrollTop = 0;
|
|
116
|
-
break;
|
|
117
|
-
default:
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
el.scrollTop = newScrollTop;
|
|
121
|
-
updateScrollState();
|
|
122
|
-
}, [updateScrollState]);
|
|
123
|
-
const showScrollbar = scrollState.scrollHeight > scrollState.clientHeight && scrollState.scrollHeight > 0;
|
|
124
|
-
const thumbRatio = scrollState.scrollHeight > 0 ? scrollState.clientHeight / scrollState.scrollHeight : 0;
|
|
125
|
-
const thumbHeight = Math.max(DEFAULT_SCROLLBAR_THUMB_HEIGHT, scrollState.clientHeight * thumbRatio);
|
|
126
|
-
const trackHeight = scrollState.clientHeight;
|
|
127
|
-
const thumbMaxTop = trackHeight - thumbHeight;
|
|
128
|
-
const thumbTop = trackHeight > thumbHeight && scrollState.scrollHeight > scrollState.clientHeight
|
|
129
|
-
? (scrollState.scrollTop / (scrollState.scrollHeight - scrollState.clientHeight)) *
|
|
130
|
-
thumbMaxTop
|
|
131
|
-
: 0;
|
|
132
|
-
return {
|
|
133
|
-
scrollRef,
|
|
134
|
-
scrollState,
|
|
135
|
-
updateScrollState,
|
|
136
|
-
showScrollbar,
|
|
137
|
-
thumbHeight,
|
|
138
|
-
thumbTop,
|
|
139
|
-
handleThumbMouseDown,
|
|
140
|
-
handleTrackClick,
|
|
141
|
-
handleScrollbarKeyDown,
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
exports.useScrollbar = useScrollbar;
|
|
146
|
-
//# sourceMappingURL=useScrollbar.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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":["useRef","useState","useCallback","useEffect"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
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}
|
|
@@ -1,19 +0,0 @@
|
|
|
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>;
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import './FooterBar.css';
|
|
2
|
-
'use strict';
|
|
3
|
-
|
|
4
|
-
var React = require('react');
|
|
5
|
-
var icons = require('@gravity-ui/icons');
|
|
6
|
-
var uikit = require('@gravity-ui/uikit');
|
|
7
|
-
var constants = require('../../../constants.js');
|
|
8
|
-
var cn = require('../../../utils/cn.js');
|
|
9
|
-
var FooterLayoutContext = require('../../FooterLayoutContext.js');
|
|
10
|
-
var index = require('../../i18n/index.js');
|
|
11
|
-
var FooterItem = require('../FooterItem/FooterItem.js');
|
|
12
|
-
var constants$1 = require('./constants.js');
|
|
13
|
-
var FooterBar_module = require('./FooterBar.module.scss.js');
|
|
14
|
-
|
|
15
|
-
const isValidFooterElement = (child) => {
|
|
16
|
-
return React.isValidElement(child) && child.type === FooterItem.FooterItem;
|
|
17
|
-
};
|
|
18
|
-
const getChildKey = (child, fallbackIndex) => {
|
|
19
|
-
if (React.isValidElement(child) && child.key) {
|
|
20
|
-
return child.key;
|
|
21
|
-
}
|
|
22
|
-
return fallbackIndex;
|
|
23
|
-
};
|
|
24
|
-
// Get title from child props for tooltip
|
|
25
|
-
const getChildTitle = (child) => {
|
|
26
|
-
if (React.isValidElement(child) && child.props) {
|
|
27
|
-
return child.props.title;
|
|
28
|
-
}
|
|
29
|
-
return undefined;
|
|
30
|
-
};
|
|
31
|
-
const b = cn.createBlock('footer-bar', FooterBar_module.default);
|
|
32
|
-
const FooterBar = React.memo(({ children, renderAfter, setCollapseBlocker, isPinned, isExpanded, maxVisibleItems = constants$1.MAX_VISIBLE_ITEMS, }) => {
|
|
33
|
-
const childArray = React.Children.toArray(children).filter(Boolean);
|
|
34
|
-
// If only 1 element, render in vertical mode regardless of isPinned
|
|
35
|
-
const isHorizontal = isPinned && childArray.length > 1;
|
|
36
|
-
const handleDropdownOpenToggle = React.useCallback((isOpened) => {
|
|
37
|
-
setCollapseBlocker === null || setCollapseBlocker === undefined ? undefined : setCollapseBlocker(isOpened);
|
|
38
|
-
}, [setCollapseBlocker]);
|
|
39
|
-
const renderDropdownChild = React.useCallback((child) => {
|
|
40
|
-
if (!isValidFooterElement(child)) {
|
|
41
|
-
return child;
|
|
42
|
-
}
|
|
43
|
-
// In dropdown, always show text
|
|
44
|
-
return React.cloneElement(child, {
|
|
45
|
-
isExpanded: true,
|
|
46
|
-
layout: 'vertical',
|
|
47
|
-
});
|
|
48
|
-
}, []);
|
|
49
|
-
const { visibleChildren, hiddenChildren } = React.useMemo(() => {
|
|
50
|
-
if (childArray.length <= maxVisibleItems) {
|
|
51
|
-
return {
|
|
52
|
-
visibleChildren: childArray,
|
|
53
|
-
hiddenChildren: [],
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
// Reserve one slot for "more" button
|
|
57
|
-
const visibleCount = maxVisibleItems - 1;
|
|
58
|
-
return {
|
|
59
|
-
visibleChildren: childArray.slice(0, visibleCount),
|
|
60
|
-
hiddenChildren: childArray.slice(visibleCount),
|
|
61
|
-
};
|
|
62
|
-
}, [childArray, maxVisibleItems]);
|
|
63
|
-
const value = React.useMemo(() => ({
|
|
64
|
-
layout: isHorizontal ? 'horizontal' : 'vertical',
|
|
65
|
-
isExpanded,
|
|
66
|
-
}), [isHorizontal, isExpanded]);
|
|
67
|
-
const dropdownItems = React.useMemo(() => hiddenChildren.map((child) => ({
|
|
68
|
-
text: renderDropdownChild(child),
|
|
69
|
-
action: () => { }, // clicks are handled by the child itself
|
|
70
|
-
})), [hiddenChildren, renderDropdownChild]);
|
|
71
|
-
const afterContent = React.useMemo(() => (renderAfter ? renderAfter({ setCollapseBlocker }) : null), [renderAfter, setCollapseBlocker]);
|
|
72
|
-
return (React.createElement("div", { className: b() },
|
|
73
|
-
React.createElement("div", { className: b('items', { horizontal: isHorizontal }) },
|
|
74
|
-
React.createElement(FooterLayoutContext.FooterLayoutContext.Provider, { value: value }, visibleChildren.map((child, index) => {
|
|
75
|
-
const title = getChildTitle(child);
|
|
76
|
-
// In horizontal mode, wrap in Tooltip to show title on hover
|
|
77
|
-
if (isHorizontal && title) {
|
|
78
|
-
return (React.createElement(uikit.Tooltip, { key: getChildKey(child, index), content: title, placement: "top", openDelay: constants.ASIDE_HEADER_EXPAND_DELAY },
|
|
79
|
-
React.createElement("div", { className: b('item') }, child)));
|
|
80
|
-
}
|
|
81
|
-
return (React.createElement("div", { key: getChildKey(child, index), className: b('item') }, child));
|
|
82
|
-
})),
|
|
83
|
-
hiddenChildren.length > 0 && (React.createElement("div", { className: b('item', { more: true }) },
|
|
84
|
-
React.createElement(uikit.DropdownMenu, { onOpenToggle: handleDropdownOpenToggle, items: dropdownItems, popupProps: {
|
|
85
|
-
placement: isHorizontal ? 'top' : 'right',
|
|
86
|
-
className: b('dropdown-popup'),
|
|
87
|
-
}, switcherWrapperClassName: b('dropdown-switcher'), renderSwitcher: ({ onClick }) => (React.createElement(FooterItem.FooterItem, { id: "more", title: index.default('label_others'), icon: icons.Ellipsis, isExpanded: !isHorizontal && isExpanded, layout: isHorizontal ? 'horizontal' : 'vertical', onItemClick: (_, __, event) => {
|
|
88
|
-
onClick(event);
|
|
89
|
-
} })) })))),
|
|
90
|
-
afterContent && (React.createElement("div", { className: b('after', { horizontal: isHorizontal }) }, afterContent))));
|
|
91
|
-
});
|
|
92
|
-
FooterBar.displayName = 'FooterBar';
|
|
93
|
-
|
|
94
|
-
exports.FooterBar = FooterBar;
|
|
95
|
-
//# sourceMappingURL=FooterBar.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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":["FooterItem","createBlock","styles","memo","MAX_VISIBLE_ITEMS","useCallback","useMemo","FooterLayoutContext","Tooltip","ASIDE_HEADER_EXPAND_DELAY","DropdownMenu","i18n","Ellipsis"],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
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"};
|
|
6
|
-
|
|
7
|
-
exports.default = styles;
|
|
8
|
-
//# sourceMappingURL=FooterBar.module.scss.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FooterBar.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const MAX_VISIBLE_ITEMS = 5;
|
|
@@ -1 +0,0 @@
|
|
|
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;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { FooterBar } from './FooterBar';
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
interface ToggleDelayConfig {
|
|
2
|
-
enableDelay: number;
|
|
3
|
-
disableDelay: number;
|
|
4
|
-
}
|
|
5
|
-
export declare function useDelayedToggle(currentValue: boolean, config?: ToggleDelayConfig, maybeShouldThrottleFn?: (value: boolean, previousValue: boolean) => boolean): boolean;
|
|
6
|
-
export {};
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var React = require('react');
|
|
4
|
-
|
|
5
|
-
function defaultComparator(value, previousValue) {
|
|
6
|
-
return value !== previousValue;
|
|
7
|
-
}
|
|
8
|
-
function isTogglingOn(currentValue, previousValue) {
|
|
9
|
-
return !previousValue && Boolean(currentValue);
|
|
10
|
-
}
|
|
11
|
-
function isTogglingOff(currentValue, previousValue) {
|
|
12
|
-
return Boolean(previousValue) && !currentValue;
|
|
13
|
-
}
|
|
14
|
-
function useDelayedToggle(currentValue, config, maybeShouldThrottleFn) {
|
|
15
|
-
const shouldThrottleFn = defaultComparator;
|
|
16
|
-
const timerRef = React.useRef(null);
|
|
17
|
-
const valueCacheRef = React.useRef(currentValue);
|
|
18
|
-
const [value, setValue] = React.useState(currentValue);
|
|
19
|
-
const delayConfig = config;
|
|
20
|
-
React.useEffect(() => {
|
|
21
|
-
function clear() {
|
|
22
|
-
if (timerRef.current) {
|
|
23
|
-
clearTimeout(timerRef.current);
|
|
24
|
-
timerRef.current = null;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
if (currentValue !== valueCacheRef.current) {
|
|
28
|
-
clear();
|
|
29
|
-
const shouldThrottle = shouldThrottleFn(currentValue, valueCacheRef.current);
|
|
30
|
-
const previousValue = valueCacheRef.current;
|
|
31
|
-
valueCacheRef.current = currentValue;
|
|
32
|
-
if (shouldThrottle) {
|
|
33
|
-
let delay;
|
|
34
|
-
if (isTogglingOn(currentValue, previousValue)) {
|
|
35
|
-
delay = delayConfig.enableDelay;
|
|
36
|
-
}
|
|
37
|
-
else if (isTogglingOff(currentValue, previousValue)) {
|
|
38
|
-
delay = delayConfig.disableDelay;
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
delay = delayConfig.enableDelay;
|
|
42
|
-
}
|
|
43
|
-
timerRef.current = setTimeout(() => {
|
|
44
|
-
setValue(currentValue);
|
|
45
|
-
}, delay);
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
setValue(currentValue);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return clear;
|
|
52
|
-
}, [currentValue, delayConfig.enableDelay, delayConfig.disableDelay, shouldThrottleFn]);
|
|
53
|
-
return value;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
exports.useDelayedToggle = useDelayedToggle;
|
|
57
|
-
//# sourceMappingURL=useDelayedToggle.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useDelayedToggle.js","sources":["../../../../../../src/components/AsideHeader/hooks/useDelayedToggle.ts"],"sourcesContent":["import {useEffect, useRef, useState} from 'react';\n\ninterface ToggleDelayConfig {\n enableDelay: number;\n disableDelay: number;\n}\n\nconst DEFAULT_CONFIG: ToggleDelayConfig = {\n enableDelay: 500,\n disableDelay: 200,\n};\n\nfunction defaultComparator(value: boolean, previousValue: boolean): boolean {\n return value !== previousValue;\n}\n\nfunction isTogglingOn(currentValue: boolean, previousValue: boolean): boolean {\n return !previousValue && Boolean(currentValue);\n}\n\nfunction isTogglingOff(currentValue: boolean, previousValue: boolean): boolean {\n return Boolean(previousValue) && !currentValue;\n}\n\nexport function useDelayedToggle(\n currentValue: boolean,\n config?: ToggleDelayConfig,\n maybeShouldThrottleFn?: (value: boolean, previousValue: boolean) => boolean,\n): boolean {\n const shouldThrottleFn = maybeShouldThrottleFn || defaultComparator;\n const timerRef = useRef<NodeJS.Timeout | null>(null);\n const valueCacheRef = useRef(currentValue);\n const [value, setValue] = useState(currentValue);\n\n const delayConfig = config || DEFAULT_CONFIG;\n\n useEffect(() => {\n function clear() {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n }\n\n if (currentValue !== valueCacheRef.current) {\n clear();\n\n const shouldThrottle = shouldThrottleFn(currentValue, valueCacheRef.current);\n const previousValue = valueCacheRef.current;\n\n valueCacheRef.current = currentValue;\n\n if (shouldThrottle) {\n let delay: number;\n\n if (isTogglingOn(currentValue, previousValue)) {\n delay = delayConfig.enableDelay;\n } else if (isTogglingOff(currentValue, previousValue)) {\n delay = delayConfig.disableDelay;\n } else {\n delay = delayConfig.enableDelay;\n }\n\n timerRef.current = setTimeout(() => {\n setValue(currentValue);\n }, delay);\n } else {\n setValue(currentValue);\n }\n }\n\n return clear;\n }, [currentValue, delayConfig.enableDelay, delayConfig.disableDelay, shouldThrottleFn]);\n\n return value;\n}\n"],"names":["useRef","useState","useEffect"],"mappings":";;;;AAYA,SAAS,iBAAiB,CAAC,KAAc,EAAE,aAAsB,EAAA;IAC7D,OAAO,KAAK,KAAK,aAAa;AAClC;AAEA,SAAS,YAAY,CAAC,YAAqB,EAAE,aAAsB,EAAA;AAC/D,IAAA,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,YAAY,CAAC;AAClD;AAEA,SAAS,aAAa,CAAC,YAAqB,EAAE,aAAsB,EAAA;AAChE,IAAA,OAAO,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY;AAClD;SAEgB,gBAAgB,CAC5B,YAAqB,EACrB,MAA0B,EAC1B,qBAA2E,EAAA;AAE3E,IAAA,MAAM,gBAAgB,GAA4B,iBAAiB;AACnE,IAAA,MAAM,QAAQ,GAAGA,YAAM,CAAwB,IAAI,CAAC;AACpD,IAAA,MAAM,aAAa,GAAGA,YAAM,CAAC,YAAY,CAAC;IAC1C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGC,cAAQ,CAAC,YAAY,CAAC;AAEhD,IAAA,MAAM,WAAW,GAAG,MAAwB;IAE5CC,eAAS,CAAC,MAAK;AACX,QAAA,SAAS,KAAK,GAAA;AACV,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AAClB,gBAAA,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC9B,gBAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;;;AAI/B,QAAA,IAAI,YAAY,KAAK,aAAa,CAAC,OAAO,EAAE;AACxC,YAAA,KAAK,EAAE;YAEP,MAAM,cAAc,GAAG,gBAAgB,CAAC,YAAY,EAAE,aAAa,CAAC,OAAO,CAAC;AAC5E,YAAA,MAAM,aAAa,GAAG,aAAa,CAAC,OAAO;AAE3C,YAAA,aAAa,CAAC,OAAO,GAAG,YAAY;YAEpC,IAAI,cAAc,EAAE;AAChB,gBAAA,IAAI,KAAa;AAEjB,gBAAA,IAAI,YAAY,CAAC,YAAY,EAAE,aAAa,CAAC,EAAE;AAC3C,oBAAA,KAAK,GAAG,WAAW,CAAC,WAAW;;AAC5B,qBAAA,IAAI,aAAa,CAAC,YAAY,EAAE,aAAa,CAAC,EAAE;AACnD,oBAAA,KAAK,GAAG,WAAW,CAAC,YAAY;;qBAC7B;AACH,oBAAA,KAAK,GAAG,WAAW,CAAC,WAAW;;AAGnC,gBAAA,QAAQ,CAAC,OAAO,GAAG,UAAU,CAAC,MAAK;oBAC/B,QAAQ,CAAC,YAAY,CAAC;iBACzB,EAAE,KAAK,CAAC;;iBACN;gBACH,QAAQ,CAAC,YAAY,CAAC;;;AAI9B,QAAA,OAAO,KAAK;AAChB,KAAC,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;AAEvF,IAAA,OAAO,KAAK;AAChB;;;;"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { SetCollapseBlocker } from '../types';
|
|
2
|
-
interface UseIsExpandedResult {
|
|
3
|
-
isExpanded: boolean;
|
|
4
|
-
onExpand: () => void;
|
|
5
|
-
onFold: () => void;
|
|
6
|
-
setCollapseBlocker: SetCollapseBlocker;
|
|
7
|
-
}
|
|
8
|
-
export declare const useIsExpanded: (externalPinned: boolean) => UseIsExpandedResult;
|
|
9
|
-
export {};
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var React = require('react');
|
|
4
|
-
var constants = require('../../constants.js');
|
|
5
|
-
var useDelayedToggle = require('./useDelayedToggle.js');
|
|
6
|
-
|
|
7
|
-
const useIsExpanded = (externalPinned) => {
|
|
8
|
-
const [isExpanded, setIsExpanded] = React.useState(externalPinned);
|
|
9
|
-
const [isMouseInside, setIsMouseInside] = React.useState(false);
|
|
10
|
-
const collapseBlockerCountRef = React.useRef(0);
|
|
11
|
-
const pendingFoldRef = React.useRef(false);
|
|
12
|
-
React.useEffect(() => {
|
|
13
|
-
if (!externalPinned && isExpanded) {
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
setIsExpanded(externalPinned);
|
|
17
|
-
// We need to run this effect only when externalPinned changes
|
|
18
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
19
|
-
}, [externalPinned]);
|
|
20
|
-
const delayedShouldExpand = useDelayedToggle.useDelayedToggle(isMouseInside, {
|
|
21
|
-
enableDelay: constants.ASIDE_HEADER_EXPAND_DELAY,
|
|
22
|
-
disableDelay: constants.ASIDE_HEADER_EXPAND_TRANSITION_DELAY,
|
|
23
|
-
});
|
|
24
|
-
// Update isExpanded based on hover
|
|
25
|
-
React.useEffect(() => {
|
|
26
|
-
if (!externalPinned) {
|
|
27
|
-
setIsExpanded(delayedShouldExpand);
|
|
28
|
-
}
|
|
29
|
-
// Re-run when externalPinned changes so we sync to hover state after pin/unpin
|
|
30
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
31
|
-
}, [delayedShouldExpand, externalPinned]);
|
|
32
|
-
const performFold = React.useCallback(() => {
|
|
33
|
-
setIsMouseInside(false);
|
|
34
|
-
}, []);
|
|
35
|
-
const handleExpand = React.useCallback(() => {
|
|
36
|
-
pendingFoldRef.current = false;
|
|
37
|
-
setIsMouseInside(true);
|
|
38
|
-
}, []);
|
|
39
|
-
const handleFold = React.useCallback(() => {
|
|
40
|
-
if (collapseBlockerCountRef.current > 0) {
|
|
41
|
-
pendingFoldRef.current = true;
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
performFold();
|
|
45
|
-
}, [performFold]);
|
|
46
|
-
const setCollapseBlocker = React.useCallback((isBlocked) => {
|
|
47
|
-
if (isBlocked) {
|
|
48
|
-
collapseBlockerCountRef.current += 1;
|
|
49
|
-
}
|
|
50
|
-
else if (collapseBlockerCountRef.current > 0) {
|
|
51
|
-
collapseBlockerCountRef.current -= 1;
|
|
52
|
-
if (collapseBlockerCountRef.current === 0 && pendingFoldRef.current) {
|
|
53
|
-
pendingFoldRef.current = false;
|
|
54
|
-
performFold();
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}, [performFold]);
|
|
58
|
-
return {
|
|
59
|
-
isExpanded,
|
|
60
|
-
onExpand: handleExpand,
|
|
61
|
-
onFold: handleFold,
|
|
62
|
-
setCollapseBlocker,
|
|
63
|
-
};
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
exports.useIsExpanded = useIsExpanded;
|
|
67
|
-
//# sourceMappingURL=useIsExpanded.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useIsExpanded.js","sources":["../../../../../../src/components/AsideHeader/hooks/useIsExpanded.ts"],"sourcesContent":["import {useCallback, useEffect, useRef, useState} from 'react';\n\nimport {ASIDE_HEADER_EXPAND_DELAY, ASIDE_HEADER_EXPAND_TRANSITION_DELAY} from '../../constants';\nimport {SetCollapseBlocker} from '../types';\n\nimport {useDelayedToggle} from './useDelayedToggle';\n\ninterface UseIsExpandedResult {\n isExpanded: boolean;\n onExpand: () => void;\n onFold: () => void;\n setCollapseBlocker: SetCollapseBlocker;\n}\n\nexport const useIsExpanded = (externalPinned: boolean): UseIsExpandedResult => {\n const [isExpanded, setIsExpanded] = useState(externalPinned);\n const [isMouseInside, setIsMouseInside] = useState(false);\n const collapseBlockerCountRef = useRef(0);\n const pendingFoldRef = useRef(false);\n\n useEffect(() => {\n if (!externalPinned && isExpanded) {\n return;\n }\n\n setIsExpanded(externalPinned);\n // We need to run this effect only when externalPinned changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [externalPinned]);\n\n const delayedShouldExpand = useDelayedToggle(isMouseInside, {\n enableDelay: ASIDE_HEADER_EXPAND_DELAY,\n disableDelay: ASIDE_HEADER_EXPAND_TRANSITION_DELAY,\n });\n\n // Update isExpanded based on hover\n useEffect(() => {\n if (!externalPinned) {\n setIsExpanded(delayedShouldExpand);\n }\n // Re-run when externalPinned changes so we sync to hover state after pin/unpin\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [delayedShouldExpand, externalPinned]);\n\n const performFold = useCallback(() => {\n setIsMouseInside(false);\n }, []);\n\n const handleExpand = useCallback(() => {\n pendingFoldRef.current = false;\n\n setIsMouseInside(true);\n }, []);\n\n const handleFold = useCallback(() => {\n if (collapseBlockerCountRef.current > 0) {\n pendingFoldRef.current = true;\n\n return;\n }\n\n performFold();\n }, [performFold]);\n\n const setCollapseBlocker = useCallback(\n (isBlocked: boolean) => {\n if (isBlocked) {\n collapseBlockerCountRef.current += 1;\n } else if (collapseBlockerCountRef.current > 0) {\n collapseBlockerCountRef.current -= 1;\n\n if (collapseBlockerCountRef.current === 0 && pendingFoldRef.current) {\n pendingFoldRef.current = false;\n performFold();\n }\n }\n },\n [performFold],\n );\n\n return {\n isExpanded,\n onExpand: handleExpand,\n onFold: handleFold,\n setCollapseBlocker,\n };\n};\n"],"names":["useState","useRef","useEffect","useDelayedToggle","ASIDE_HEADER_EXPAND_DELAY","ASIDE_HEADER_EXPAND_TRANSITION_DELAY","useCallback"],"mappings":";;;;;;AAca,MAAA,aAAa,GAAG,CAAC,cAAuB,KAAyB;IAC1E,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAGA,cAAQ,CAAC,cAAc,CAAC;IAC5D,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC;AACzD,IAAA,MAAM,uBAAuB,GAAGC,YAAM,CAAC,CAAC,CAAC;AACzC,IAAA,MAAM,cAAc,GAAGA,YAAM,CAAC,KAAK,CAAC;IAEpCC,eAAS,CAAC,MAAK;AACX,QAAA,IAAI,CAAC,cAAc,IAAI,UAAU,EAAE;YAC/B;;QAGJ,aAAa,CAAC,cAAc,CAAC;;;AAGjC,KAAC,EAAE,CAAC,cAAc,CAAC,CAAC;AAEpB,IAAA,MAAM,mBAAmB,GAAGC,iCAAgB,CAAC,aAAa,EAAE;AACxD,QAAA,WAAW,EAAEC,mCAAyB;AACtC,QAAA,YAAY,EAAEC,8CAAoC;AACrD,KAAA,CAAC;;IAGFH,eAAS,CAAC,MAAK;QACX,IAAI,CAAC,cAAc,EAAE;YACjB,aAAa,CAAC,mBAAmB,CAAC;;;;AAI1C,KAAC,EAAE,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;AAEzC,IAAA,MAAM,WAAW,GAAGI,iBAAW,CAAC,MAAK;QACjC,gBAAgB,CAAC,KAAK,CAAC;KAC1B,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,YAAY,GAAGA,iBAAW,CAAC,MAAK;AAClC,QAAA,cAAc,CAAC,OAAO,GAAG,KAAK;QAE9B,gBAAgB,CAAC,IAAI,CAAC;KACzB,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,UAAU,GAAGA,iBAAW,CAAC,MAAK;AAChC,QAAA,IAAI,uBAAuB,CAAC,OAAO,GAAG,CAAC,EAAE;AACrC,YAAA,cAAc,CAAC,OAAO,GAAG,IAAI;YAE7B;;AAGJ,QAAA,WAAW,EAAE;AACjB,KAAC,EAAE,CAAC,WAAW,CAAC,CAAC;AAEjB,IAAA,MAAM,kBAAkB,GAAGA,iBAAW,CAClC,CAAC,SAAkB,KAAI;QACnB,IAAI,SAAS,EAAE;AACX,YAAA,uBAAuB,CAAC,OAAO,IAAI,CAAC;;AACjC,aAAA,IAAI,uBAAuB,CAAC,OAAO,GAAG,CAAC,EAAE;AAC5C,YAAA,uBAAuB,CAAC,OAAO,IAAI,CAAC;YAEpC,IAAI,uBAAuB,CAAC,OAAO,KAAK,CAAC,IAAI,cAAc,CAAC,OAAO,EAAE;AACjE,gBAAA,cAAc,CAAC,OAAO,GAAG,KAAK;AAC9B,gBAAA,WAAW,EAAE;;;AAGzB,KAAC,EACD,CAAC,WAAW,CAAC,CAChB;IAED,OAAO;QACH,UAAU;AACV,QAAA,QAAQ,EAAE,YAAY;AACtB,QAAA,MAAM,EAAE,UAAU;QAClB,kBAAkB;KACrB;AACL;;;;"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var constants = require('../../constants.js');
|
|
4
|
-
|
|
5
|
-
function getGroupBlockHeight(items, isCompactMode) {
|
|
6
|
-
const itemHeight = isCompactMode ? constants.ITEM_HEIGHT_COMPACT : constants.ITEM_HEIGHT;
|
|
7
|
-
if (items.length === 0) {
|
|
8
|
-
return itemHeight;
|
|
9
|
-
}
|
|
10
|
-
const gaps = items.length * constants.ITEM_GAP;
|
|
11
|
-
// +1 accounts for the group header item in addition to the menu items
|
|
12
|
-
return (items.length + 1) * itemHeight + gaps;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
exports.getGroupBlockHeight = getGroupBlockHeight;
|
|
16
|
-
//# sourceMappingURL=getGroupHeight.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getGroupHeight.js","sources":["../../../../../../src/components/AsideHeader/utils/getGroupHeight.ts"],"sourcesContent":["import {ITEM_GAP, ITEM_HEIGHT, ITEM_HEIGHT_COMPACT} from '../../constants';\nimport {MenuItemsWithGroups} from '../types';\n\nexport function getGroupBlockHeight(items: MenuItemsWithGroups[], isCompactMode?: boolean) {\n const itemHeight = isCompactMode ? ITEM_HEIGHT_COMPACT : ITEM_HEIGHT;\n\n if (items.length === 0) {\n return itemHeight;\n }\n\n const gaps = items.length * ITEM_GAP;\n\n // +1 accounts for the group header item in addition to the menu items\n return (items.length + 1) * itemHeight + gaps;\n}\n"],"names":["ITEM_HEIGHT_COMPACT","ITEM_HEIGHT","ITEM_GAP"],"mappings":";;;;AAGgB,SAAA,mBAAmB,CAAC,KAA4B,EAAE,aAAuB,EAAA;IACrF,MAAM,UAAU,GAAG,aAAa,GAAGA,6BAAmB,GAAGC,qBAAW;AAEpE,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACpB,QAAA,OAAO,UAAU;;AAGrB,IAAA,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAGC,kBAAQ;;IAGpC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,GAAG,IAAI;AACjD;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function getCollapsedWidth(isCompactMode?: boolean): number;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var constants = require('../constants.js');
|
|
4
|
-
|
|
5
|
-
function getCollapsedWidth(isCompactMode) {
|
|
6
|
-
return isCompactMode ? constants.ASIDE_HEADER_COLLAPSED_WIDTH_COMPACT_MODE : constants.ASIDE_HEADER_COLLAPSED_WIDTH;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
exports.getCollapsedWidth = getCollapsedWidth;
|
|
10
|
-
//# sourceMappingURL=getCollapsedWidth.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getCollapsedWidth.js","sources":["../../../../../src/components/utils/getCollapsedWidth.ts"],"sourcesContent":["import {\n ASIDE_HEADER_COLLAPSED_WIDTH,\n ASIDE_HEADER_COLLAPSED_WIDTH_COMPACT_MODE,\n} from '../constants';\n\nexport function getCollapsedWidth(isCompactMode?: boolean): number {\n return isCompactMode ? ASIDE_HEADER_COLLAPSED_WIDTH_COMPACT_MODE : ASIDE_HEADER_COLLAPSED_WIDTH;\n}\n"],"names":["ASIDE_HEADER_COLLAPSED_WIDTH_COMPACT_MODE","ASIDE_HEADER_COLLAPSED_WIDTH"],"mappings":";;;;AAKM,SAAU,iBAAiB,CAAC,aAAuB,EAAA;IACrD,OAAO,aAAa,GAAGA,mDAAyC,GAAGC,sCAA4B;AACnG;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"divider-collapsed-compact.svg.js","sources":["../../../../assets/icons/divider-collapsed-compact.svg"],"sourcesContent":["<svg width=\"40\" height=\"22\" viewBox=\"0 0 40 22\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M40 0v22c-.6-.8-5-4.6-12.6-6.4L9.3 11.9A11.4 11.4 0 0 1 0 0Z\"/></svg>\n"],"names":[],"mappings":";;AAAA,IAAI,KAAK;AACT,SAAS,QAAQ,GAAG,EAAE,OAAO,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,UAAU,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAE/Q,IAAC,0BAA0B,GAAG,SAAS,0BAA0B,CAAC,KAAK,EAAE;AAC5E,EAAE,oBAAoB,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC;AAC1D,IAAI,KAAK,EAAE,4BAA4B;AACvC,IAAI,KAAK,EAAE,EAAE;AACb,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,IAAI,EAAE,cAAc;AACxB,IAAI,OAAO,EAAE;AACb,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,KAAK,KAAK,gBAAgB,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE;AACxE,IAAI,CAAC,EAAE;AACP,GAAG,CAAC,CAAC,CAAC;AACN;;;;"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
export interface FooterLayoutContextValue {
|
|
3
|
-
layout: 'horizontal' | 'vertical';
|
|
4
|
-
isExpanded: boolean;
|
|
5
|
-
}
|
|
6
|
-
export declare const FooterLayoutContext: React.Context<FooterLayoutContextValue | undefined>;
|
|
7
|
-
export declare const useFooterLayout: () => FooterLayoutContextValue | undefined;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import React__default from 'react';
|
|
2
|
-
|
|
3
|
-
const FooterLayoutContext = React__default.createContext(undefined);
|
|
4
|
-
const useFooterLayout = () => React__default.useContext(FooterLayoutContext);
|
|
5
|
-
|
|
6
|
-
export { FooterLayoutContext, useFooterLayout };
|
|
7
|
-
//# sourceMappingURL=FooterLayoutContext.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FooterLayoutContext.js","sources":["../../../../../src/components/AsideHeader/FooterLayoutContext.ts"],"sourcesContent":["import React from 'react';\n\nexport interface FooterLayoutContextValue {\n layout: 'horizontal' | 'vertical';\n isExpanded: boolean;\n}\n\nexport const FooterLayoutContext = React.createContext<FooterLayoutContextValue | undefined>(\n undefined,\n);\n\nexport const useFooterLayout = (): FooterLayoutContextValue | undefined =>\n React.useContext(FooterLayoutContext);\n"],"names":["React"],"mappings":";;AAOa,MAAA,mBAAmB,GAAGA,cAAK,CAAC,aAAa,CAClD,SAAS;AAGN,MAAM,eAAe,GAAG,MAC3BA,cAAK,CAAC,UAAU,CAAC,mBAAmB;;;;"}
|
package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/buildExpandedFromFlatList.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
function buildExpandedFromFlatList(flatList) {
|
|
2
|
-
const expanded = [];
|
|
3
|
-
flatList.forEach((item) => {
|
|
4
|
-
if ('items' in item && item.items && item.items.length > 0) {
|
|
5
|
-
expanded.push(...item.items);
|
|
6
|
-
}
|
|
7
|
-
else {
|
|
8
|
-
expanded.push(item);
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
return expanded;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export { buildExpandedFromFlatList };
|
|
15
|
-
//# sourceMappingURL=buildExpandedFromFlatList.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"buildExpandedFromFlatList.js","sources":["../../../../../../../../src/components/AsideHeader/components/AllPagesPanel/utils/buildExpandedFromFlatList.ts"],"sourcesContent":["import {MenuItem} from '../../../../types';\nimport {MenuItemsWithGroups} from '../../../types';\n\nexport function buildExpandedFromFlatList(flatList: MenuItemsWithGroups[]): MenuItem[] {\n const expanded: MenuItem[] = [];\n\n flatList.forEach((item) => {\n if ('items' in item && item.items && item.items.length > 0) {\n expanded.push(...item.items);\n } else {\n expanded.push(item);\n }\n });\n\n return expanded;\n}\n"],"names":[],"mappings":"AAGM,SAAU,yBAAyB,CAAC,QAA+B,EAAA;IACrE,MAAM,QAAQ,GAAe,EAAE;AAE/B,IAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACtB,QAAA,IAAI,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACxD,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;;aACzB;AACH,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;;AAE3B,KAAC,CAAC;AAEF,IAAA,OAAO,QAAQ;AACnB;;;;"}
|