Files
medusa-store/www/packages/docs-ui/src/utils/check-sidebar-item-visibility.ts
Shahed Nasser b4f3b8a79d docs: redesign sidebar (#8408)
* initial changes

* redesign the sidebar + nav drawer

* changes to sidebar items

* finish up sidebar redesign

* support new sidebar in resources

* general fixes

* integrate in ui

* support api reference

* refactor

* integrate in user guide

* docs: fix build errors

* fix user guide build

* more refactoring

* added banner

* added bottom logo + icon

* fix up sidebar

* fix up paddings

* fix shadow bottom

* docs: add table of content (#8445)

* add toc types

* implement toc functionality

* finished toc redesign

* redesigned table of content

* mobile fixes

* truncate text in toc

* mobile fixes

* merge fixes

* implement redesign

* add hide sidebar

* add menu action item

* finish up hide sidebar design

* implement redesign in resources

* integrate in api reference

* integrate changes in ui

* fixes to api reference scrolling

* fix build error

* fix build errors

* fixes

* fixes to sidebar

* general fixes

* fix active category not closing

* fix long titles
2024-08-15 12:13:13 +03:00

48 lines
1.3 KiB
TypeScript

export function checkSidebarItemVisibility(
item: HTMLElement,
withTransition = false,
topMargin = 0
) {
return withTransition
? checkSidebarItemVisibilityTransition(item, topMargin)
: checkSidebarItemVisibilityRelative(item, topMargin)
}
function checkSidebarItemVisibilityRelative(
item: HTMLElement,
topMargin: number
) {
const sidebar = document.getElementById("sidebar")
if (!sidebar) {
return false
}
const sidebarBoundingRect = sidebar.getBoundingClientRect()
const sidebarTop = sidebarBoundingRect.top - topMargin
const sidebarBottom = sidebarTop + sidebarBoundingRect.height
const itemBoundingRect = item.getBoundingClientRect()
const itemTop =
item.offsetParent === sidebar ? item.offsetTop : itemBoundingRect.top
const itemBottom = itemTop + itemBoundingRect.height
return itemTop >= sidebarTop && itemBottom <= sidebarBottom
}
function checkSidebarItemVisibilityTransition(
item: HTMLElement,
topMargin: number
) {
const sidebar = document.getElementById("sidebar")
if (!sidebar) {
return false
}
const sidebarBoundingRect = sidebar.getBoundingClientRect()
const activeItemBoundingRect = item.getBoundingClientRect()
return (
activeItemBoundingRect.top >= topMargin &&
activeItemBoundingRect.top - sidebarBoundingRect.height + topMargin < 0 &&
activeItemBoundingRect.bottom > 0
)
}