Repository URL to install this package:
import {
getRowInitialHeight,
getRowStickyHeight,
computeLinearScale,
clamp,
} from './shrink-utils'
let logoShrinkCache = null
export const clearLogoShrinkCache = () => {
logoShrinkCache = null
}
const getLogoShrinkData = ({ logo, row }) => {
if (logoShrinkCache) {
return logoShrinkCache
}
let initialHeight = parseFloat(
getComputedStyle(logo).getPropertyValue('--logo-max-height') || 50
)
const stickyShrink = parseFloat(
getComputedStyle(logo)
.getPropertyValue('--logo-sticky-shrink')
.toString()
.replace(',', '.') || 1
)
let rowInitialHeight = getRowInitialHeight(row)
let rowStickyHeight = getRowStickyHeight(row)
logoShrinkCache = {
initialHeight,
stickyShrink,
rowInitialHeight,
rowStickyHeight,
}
return logoShrinkCache
}
export const shrinkHandleLogo = ({ stickyContainer, startPosition }) => {
;[...stickyContainer.querySelectorAll('[data-row*="middle"]')].map(
(row) => {
if (!row.querySelector('[data-id="logo"] .site-logo-container')) {
return
}
const logo = row.querySelector(
'[data-id="logo"] .site-logo-container'
)
let {
initialHeight,
stickyShrink,
rowInitialHeight,
rowStickyHeight,
} = getLogoShrinkData({ logo, row })
const stickyHeight = initialHeight * stickyShrink
if (stickyShrink === 1) {
return
}
logo.style.setProperty(
'--logo-shrink-height',
`${
computeLinearScale(
[
startPosition,
startPosition +
Math.abs(
rowInitialHeight === rowStickyHeight
? initialHeight - stickyHeight
: rowInitialHeight - rowStickyHeight
),
],
[1, stickyShrink],
clamp(
startPosition,
startPosition +
Math.abs(
rowInitialHeight === rowStickyHeight
? initialHeight - stickyHeight
: rowInitialHeight - rowStickyHeight
),
scrollY
)
) * initialHeight
}px`
)
}
)
}