{"version":3,"file":"stickygum.cjs","sources":["../src/defaults.ts","../src/utils/math.ts","../src/utils/helpers.ts","../src/utils/events.ts","../src/utils/dom.ts","../src/utils/css.ts","../src/core/Layout.ts","../src/core/Sidebar.ts","../src/core/Position.ts","../src/core/Scroll.ts","../src/observers/ResizeObserver.ts","../src/StickySidebar.ts"],"sourcesContent":["export type ElementInput = string | HTMLElement | HTMLElement[];\r\n\r\nexport interface Options {\r\n  elements: ElementInput;\r\n  containerSelector: string;\r\n  containerElement: HTMLElement | null;\r\n  additionalMarginTop: number;\r\n  additionalMarginBottom: number;\r\n  updateSidebarHeight: boolean;\r\n  minWidth: number;\r\n  disableOnResponsiveLayouts: boolean;\r\n  sidebarBehavior: string;\r\n  defaultPosition: string;\r\n  verbose: boolean;\r\n}\r\n\r\nexport type StickyGumOptions = Partial<Options> & {\r\n  container?: string | HTMLElement;\r\n  sidebar?: ElementInput;\r\n  offsetTop?: number;\r\n  offsetBottom?: number;\r\n};\r\n\r\nexport const DEFAULTS: Options = {\r\n  elements: '',\r\n  containerSelector: '',\r\n  containerElement: null,\r\n  additionalMarginTop: 0,\r\n  additionalMarginBottom: 0,\r\n  updateSidebarHeight: true,\r\n  minWidth: 0,\r\n  disableOnResponsiveLayouts: true,\r\n  sidebarBehavior: 'modern',\r\n  defaultPosition: 'relative',\r\n  verbose: false,\r\n};\r\n","export function clamp(value: number, min: number, max: number): number {\r\n  return Math.max(min, Math.min(max, value));\r\n}\r\n\r\nexport function floor(value: number): number {\r\n  return Math.floor(value);\r\n}\r\n","import type { ElementInput, Options, StickyGumOptions } from '../defaults.js';\r\nimport { DEFAULTS } from '../defaults.js';\r\nimport { floor } from './math.js';\r\n\r\nexport function resolveElements(elements: ElementInput): HTMLElement[] {\r\n  if (elements instanceof HTMLElement) {\r\n    return [elements];\r\n  }\r\n  if (Array.isArray(elements)) {\r\n    return elements;\r\n  }\r\n  return Array.from(document.querySelectorAll<HTMLElement>(elements));\r\n}\r\n\r\nexport function mergeOptions(options: StickyGumOptions): Options {\r\n  const merged: Options = { ...DEFAULTS, ...options };\r\n\r\n  if (options.sidebar !== undefined) {\r\n    merged.elements = options.sidebar;\r\n  }\r\n\r\n  if (typeof options.container === 'string') {\r\n    merged.containerSelector = options.container;\r\n    merged.containerElement = null;\r\n  } else if (options.container instanceof HTMLElement) {\r\n    merged.containerSelector = '';\r\n    merged.containerElement = options.container;\r\n  }\r\n\r\n  merged.additionalMarginTop = floor(options.offsetTop ?? options.additionalMarginTop ?? 0);\r\n  merged.additionalMarginBottom = floor(options.offsetBottom ?? options.additionalMarginBottom ?? 0);\r\n  return merged;\r\n}\r\n\r\nexport function injectStylesheet(id: string, css: string): void {\r\n  if (!document.querySelector(`#${id}`)) {\r\n    const style = document.createElement('style');\r\n    style.id = id;\r\n    style.textContent = css;\r\n    document.head.appendChild(style);\r\n  }\r\n}\r\n\r\nexport function removeScriptTags(container: HTMLElement): void {\r\n  const scriptMIMETypes = /(?:text|application)\\/(?:x-)?(?:javascript|ecmascript)/i;\r\n  const scripts = container.querySelectorAll('script');\r\n  for (const script of scripts) {\r\n    if (script.type.length === 0 || script.type.match(scriptMIMETypes)) {\r\n      script.remove();\r\n    }\r\n  }\r\n}\r\n","export function on(target: EventTarget, type: string, listener: EventListenerOrEventListenerObject): void {\r\n  target.addEventListener(type, listener);\r\n}\r\n\r\nexport function off(target: EventTarget, type: string, listener: EventListenerOrEventListenerObject): void {\r\n  target.removeEventListener(type, listener);\r\n}\r\n","export function getOffset(element: HTMLElement): { top: number; left: number } {\r\n  const rect = element.getBoundingClientRect();\r\n  return {\r\n    top: rect.top + window.scrollY - document.documentElement.clientTop,\r\n    left: rect.left + window.scrollX - document.documentElement.clientLeft,\r\n  };\r\n}\r\n\r\nexport function isVisible(element: HTMLElement): boolean {\r\n  return !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length);\r\n}\r\n\r\nexport function getOuterWidth(element: HTMLElement): number {\r\n  const style = getComputedStyle(element);\r\n  return element.getBoundingClientRect().width + parseFloat(style.marginLeft) + parseFloat(style.marginRight);\r\n}\r\n\r\nexport function getClearedHeight(element: HTMLElement): number {\r\n  let height = element.getBoundingClientRect().height;\r\n  for (const child of element.children) {\r\n    height = Math.max(height, child.getBoundingClientRect().height);\r\n  }\r\n  return height;\r\n}\r\n","export function setStyles(element: HTMLElement, styles: Partial<CSSStyleDeclaration>): void {\r\n  Object.assign(element.style, styles);\r\n}\r\n\r\nexport function getComputedNumber(element: HTMLElement, property: string): number {\r\n  return parseFloat(getComputedStyle(element).getPropertyValue(property));\r\n}\r\n\r\nexport function getPosition(element: HTMLElement): string {\r\n  return getComputedStyle(element).position;\r\n}\r\n\r\nexport function getFloat(element: HTMLElement): string {\r\n  return getComputedStyle(element).float;\r\n}\r\n","import { getClearedHeight } from '../utils/dom.js';\r\n\r\nexport interface LayoutDimensions {\r\n  sidebarOffset: { top: number; left: number };\r\n  containerTop: number;\r\n  containerBottom: number;\r\n  containerHeight: number;\r\n  sidebarHeight: number;\r\n  stickyHeight: number;\r\n}\r\n\r\nexport class Layout {\r\n  static measure(sidebar: HTMLElement, container: HTMLElement, stickySidebar: HTMLElement): LayoutDimensions {\r\n    const sidebarRect = sidebar.getBoundingClientRect();\r\n    const containerRect = container.getBoundingClientRect();\r\n    const stickyRect = stickySidebar.getBoundingClientRect();\r\n\r\n    return {\r\n      sidebarOffset: {\r\n        top: sidebarRect.top + window.scrollY,\r\n        left: sidebarRect.left + window.scrollX,\r\n      },\r\n      containerTop: sidebarRect.top,\r\n      containerBottom: containerRect.top + window.scrollY + getClearedHeight(container),\r\n      containerHeight: containerRect.height,\r\n      sidebarHeight: sidebarRect.height,\r\n      stickyHeight: stickyRect.height,\r\n    };\r\n  }\r\n\r\n  static updateSidebarMinHeight(sidebar: HTMLElement, stickySidebar: HTMLElement, paddingBottom: number): void {\r\n    const offsetTop = stickySidebar.getBoundingClientRect().top + window.scrollY;\r\n    const sidebarOffsetTop = sidebar.getBoundingClientRect().top + window.scrollY;\r\n    sidebar.style.minHeight = `${stickySidebar.offsetHeight + offsetTop - sidebarOffsetTop + paddingBottom}px`;\r\n  }\r\n\r\n  static resetSidebarMinHeight(sidebar: HTMLElement): void {\r\n    sidebar.style.minHeight = '1px';\r\n  }\r\n}\r\n","import type { Options } from '../defaults.js';\r\nimport { getOffset } from '../utils/dom.js';\r\nimport { setStyles } from '../utils/css.js';\r\nimport { removeScriptTags } from '../utils/helpers.js';\r\nimport { SidebarResizeObserver } from '../observers/ResizeObserver.js';\r\nimport type { PositionResult } from './Position.js';\r\nimport { Layout } from './Layout.js';\r\nexport interface SidebarState {\r\n  sidebar: HTMLElement;\r\n  stickySidebar: HTMLElement;\r\n  container: HTMLElement;\r\n  options: Options;\r\n  onScroll: () => void;\r\n  previousScrollTop: number;\r\n  fixedScrollTop: number;\r\n  stickySidebarPaddingTop: number;\r\n  stickySidebarPaddingBottom: number;\r\n  marginBottom: number;\r\n  paddingTop: number;\r\n  paddingBottom: number;\r\n  resizeObserver: SidebarResizeObserver;\r\n}\r\n\r\nexport class Sidebar {\r\n  static create(element: HTMLElement, options: Options): SidebarState {\r\n    const state = {} as SidebarState;\r\n    state.sidebar = element;\r\n    state.options = options;\r\n\r\n    const matchedContainer = options.containerElement ?? (options.containerSelector\r\n      ? document.querySelector<HTMLElement>(options.containerSelector)\r\n      : null);\r\n    state.container = matchedContainer ?? (state.sidebar.parentNode as HTMLElement);\r\n\r\n    setStyles(state.sidebar, {\r\n      position: options.defaultPosition as CSSStyleDeclaration['position'],\r\n      overflow: 'visible',\r\n      boxSizing: 'border-box',\r\n    });\r\n\r\n    state.stickySidebar = state.sidebar.querySelector<HTMLElement>('.stickySidebar')!;\n    if (!state.stickySidebar) {\n      removeScriptTags(state.sidebar);\n      state.stickySidebar = document.createElement('div');\n      state.stickySidebar.classList.add('stickySidebar');\n      state.stickySidebar.append(...state.sidebar.children);\n      state.sidebar.append(state.stickySidebar);\n    } else {\n      state.stickySidebar.classList.add('stickySidebar');\n    }\n\r\n    const computedStyle = getComputedStyle(state.sidebar);\r\n    state.marginBottom = parseFloat(computedStyle.marginBottom);\r\n    state.paddingTop = parseFloat(computedStyle.paddingTop);\r\n    state.paddingBottom = parseFloat(computedStyle.paddingBottom);\r\n\r\n    let collapsedTopHeight = getOffset(state.stickySidebar).top;\r\n    let collapsedBottomHeight = state.stickySidebar.offsetHeight;\r\n    state.stickySidebar.style.paddingTop = '1px';\r\n    state.stickySidebar.style.paddingBottom = '1px';\r\n    collapsedTopHeight -= getOffset(state.stickySidebar).top;\r\n    collapsedBottomHeight = state.stickySidebar.offsetHeight - collapsedBottomHeight - collapsedTopHeight;\r\n    state.stickySidebarPaddingTop = collapsedTopHeight === 0 ? 0 : 1;\r\n    state.stickySidebarPaddingBottom = collapsedBottomHeight === 0 ? 0 : 1;\r\n    if (collapsedTopHeight === 0) {\r\n      state.stickySidebar.style.paddingTop = '0px';\r\n    }\r\n    if (collapsedBottomHeight === 0) {\r\n      state.stickySidebar.style.paddingBottom = '0px';\r\n    }\r\n\r\n    state.previousScrollTop = 0;\r\n    state.fixedScrollTop = 0;\r\n    Sidebar.reset(state);\r\n\r\n    return state;\r\n  }\r\n\r\n  static applyPosition(state: SidebarState, result: PositionResult, sidebarOffset: { top: number; left: number }): void {\r\n    const scrollTop = window.scrollY;\r\n\r\n    if (result.position === 'fixed') {\r\n      setStyles(state.stickySidebar, {\r\n        position: 'fixed',\r\n        width: `${state.stickySidebar.getBoundingClientRect().width}px`,\r\n        transform: `translateY(${result.top}px)`,\r\n        left: `${sidebarOffset.left + parseFloat(getComputedStyle(state.sidebar).paddingLeft) - window.scrollX}px`,\r\n        top: '0px',\r\n      });\r\n    } else if (result.position === 'absolute') {\r\n      const css: Partial<CSSStyleDeclaration> = {};\r\n\r\n      if (getComputedStyle(state.stickySidebar).position !== 'absolute') {\r\n        css.position = 'absolute';\r\n        css.transform = `translateY(${scrollTop + result.top - sidebarOffset.top - state.stickySidebarPaddingTop - state.stickySidebarPaddingBottom}px)`;\r\n        css.top = '0px';\r\n      }\r\n\r\n      css.width = `${state.stickySidebar.getBoundingClientRect().width}px`;\r\n      css.left = '';\r\n\r\n      setStyles(state.stickySidebar, css);\r\n    } else {\r\n      Sidebar.reset(state);\r\n    }\r\n\r\n    if (result.position !== 'static') {\r\n      if (state.options.updateSidebarHeight) {\r\n        Layout.updateSidebarMinHeight(state.sidebar, state.stickySidebar, state.paddingBottom);\r\n      }\r\n    }\r\n\r\n    state.previousScrollTop = scrollTop;\r\n  }\r\n\r\n  static reset(state: SidebarState): void {\r\n    state.fixedScrollTop = 0;\r\n    Layout.resetSidebarMinHeight(state.sidebar);\r\n    setStyles(state.stickySidebar, {\r\n      position: 'static',\r\n      width: '',\r\n      transform: 'none',\r\n    });\r\n  }\r\n\r\n  static cleanup(state: SidebarState): void {\r\n    state.resizeObserver.disconnect();\r\n  }\r\n}\r\n\r\n","import type { Options } from '../defaults.js';\r\nimport { getOffset, getOuterWidth } from '../utils/dom.js';\r\nimport { getFloat } from '../utils/css.js';\r\n\r\nexport type PositionType = 'static' | 'fixed' | 'absolute';\r\n\r\nexport interface PositionResult {\r\n  position: PositionType;\r\n  top: number;\r\n}\r\n\r\nexport class Position {\r\n  static calculate(\r\n    sidebar: HTMLElement,\r\n    container: HTMLElement,\r\n    stickySidebar: HTMLElement,\r\n    options: Options,\r\n    paddingTop: number,\r\n    paddingBottom: number,\r\n    marginBottom: number,\r\n    previousScrollTop: number,\r\n  ): PositionResult {\r\n    const scrollTop = window.scrollY;\r\n    let position: PositionType = 'static';\r\n    const sidebarOffset = getOffset(sidebar);\r\n    let top = 0;\r\n\r\n    if (scrollTop >= sidebarOffset.top + (paddingTop - options.additionalMarginTop)) {\r\n      const offsetTop = paddingTop + options.additionalMarginTop;\r\n      const offsetBottom = paddingBottom + marginBottom + options.additionalMarginBottom;\r\n\r\n      const containerTop = sidebarOffset.top;\r\n      const containerBottom = sidebarOffset.top + Position.getClearedContainerHeight(container);\r\n\r\n      const windowOffsetTop = options.additionalMarginTop;\r\n      let windowOffsetBottom: number;\r\n\r\n      const sidebarSmallerThanWindow = (stickySidebar.offsetHeight + offsetTop + offsetBottom) < window.innerHeight;\r\n      if (sidebarSmallerThanWindow) {\r\n        windowOffsetBottom = windowOffsetTop + stickySidebar.offsetHeight;\r\n      } else {\r\n        windowOffsetBottom = window.innerHeight - marginBottom - paddingBottom - options.additionalMarginBottom;\r\n      }\r\n\r\n      const staticLimitTop = containerTop - scrollTop + paddingTop;\r\n      const staticLimitBottom = containerBottom - scrollTop - paddingBottom - marginBottom;\r\n\r\n      top = getOffset(stickySidebar).top - scrollTop;\r\n      const scrollTopDiff = previousScrollTop - scrollTop;\r\n\r\n      if (getComputedStyle(stickySidebar).position === 'fixed') {\r\n        if (options.sidebarBehavior === 'modern') {\r\n          top += scrollTopDiff;\r\n        }\r\n      }\r\n\r\n      if (options.sidebarBehavior === 'stick-to-top') {\r\n        top = options.additionalMarginTop;\r\n      }\r\n\r\n      if (options.sidebarBehavior === 'stick-to-bottom') {\r\n        top = windowOffsetBottom - stickySidebar.offsetHeight;\r\n      }\r\n\r\n      if (scrollTopDiff > 0) {\r\n        top = Math.min(top, windowOffsetTop);\r\n      } else {\r\n        top = Math.max(top, windowOffsetBottom - stickySidebar.offsetHeight);\r\n      }\r\n\r\n      top = Math.max(top, staticLimitTop);\r\n      top = Math.min(top, staticLimitBottom - stickySidebar.offsetHeight);\r\n\r\n      const sidebarSameHeightAsContainer = container.getBoundingClientRect().height === stickySidebar.offsetHeight;\r\n\r\n      if (!sidebarSameHeightAsContainer && top === windowOffsetTop) {\r\n        position = 'fixed';\r\n      } else if (!sidebarSameHeightAsContainer && top === windowOffsetBottom - stickySidebar.offsetHeight) {\r\n        position = 'fixed';\r\n      } else if (scrollTop + top - sidebarOffset.top - paddingTop <= options.additionalMarginTop) {\r\n        position = 'static';\r\n      } else {\r\n        position = 'absolute';\r\n      }\r\n    }\r\n\r\n    return { position, top };\r\n  }\r\n\r\n  static shouldDisableOnResponsive(sidebar: HTMLElement, container: HTMLElement, options: Options): boolean {\r\n    if (!options.disableOnResponsiveLayouts) return false;\r\n    const sidebarWidth = getFloat(sidebar) === 'none' ? getOuterWidth(sidebar) : sidebar.offsetWidth;\r\n    return sidebarWidth + 50 > container.getBoundingClientRect().width;\r\n  }\r\n\r\n  static shouldSkip(scrollTop: number, sidebarOffsetTop: number, paddingTop: number, additionalMarginTop: number): boolean {\r\n    return scrollTop < sidebarOffsetTop + (paddingTop - additionalMarginTop);\r\n  }\r\n\r\n  private static getClearedContainerHeight(container: HTMLElement): number {\r\n    let height = container.getBoundingClientRect().height;\r\n    for (const child of container.children) {\r\n      height = Math.max(height, child.getBoundingClientRect().height);\r\n    }\r\n    return height;\r\n  }\r\n}\r\n\r\n","import { isVisible, getOffset } from '../utils/dom.js';\r\nimport { Position } from './Position.js';\r\nimport { Sidebar, type SidebarState } from './Sidebar.js';\r\n\r\nexport class Scroll {\r\n  private state: SidebarState;\r\n\r\n  constructor(state: SidebarState) {\r\n    this.state = state;\r\n  }\r\n\r\n  handle(): void {\r\n    const o = this.state;\r\n\r\n    if (!isVisible(o.stickySidebar)) return;\r\n\r\n    if (document.body.getBoundingClientRect().width < o.options.minWidth) {\r\n      Sidebar.reset(o);\r\n      return;\r\n    }\r\n\r\n    if (Position.shouldDisableOnResponsive(o.sidebar, o.container, o.options)) {\r\n      Sidebar.reset(o);\r\n      return;\r\n    }\r\n\r\n    const sidebarOffset = getOffset(o.sidebar);\r\n    const result = Position.calculate(\r\n      o.sidebar,\r\n      o.container,\r\n      o.stickySidebar,\r\n      o.options,\r\n      o.paddingTop,\r\n      o.paddingBottom,\r\n      o.marginBottom,\r\n      o.previousScrollTop,\r\n    );\r\n\r\n    Sidebar.applyPosition(o, result, sidebarOffset);\r\n  }\r\n}\r\n","export class SidebarResizeObserver {\r\n  private observer: ResizeObserver | null = null;\r\n  private callback: () => void;\r\n\r\n  constructor(callback: () => void) {\r\n    this.callback = callback;\r\n  }\r\n\r\n  observe(target: HTMLElement): void {\r\n    if (typeof ResizeObserver === 'undefined') return;\r\n\r\n    this.observer = new ResizeObserver(() => {\r\n      this.callback();\r\n    });\r\n    this.observer.observe(target);\r\n  }\r\n\r\n  disconnect(): void {\r\n    if (this.observer) {\r\n      this.observer.disconnect();\r\n      this.observer = null;\r\n    }\r\n  }\r\n}\r\n\r\n\r\n","import type { Options, StickyGumOptions } from './defaults.js';\r\nimport { mergeOptions, resolveElements, injectStylesheet } from './utils/helpers.js';\r\nimport { on, off } from './utils/events.js';\r\nimport { Sidebar, type SidebarState } from './core/Sidebar.js';\r\nimport { Scroll } from './core/Scroll.js';\r\nimport { SidebarResizeObserver } from './observers/ResizeObserver.js';\r\n\r\nconst STYLESHEET_ID = 'codehemu-sticky-sidebar-stylesheet';\r\nconst STYLESHEET_CONTENT = '.stickySidebar:after {content: \"\"; display: table; clear: both;}';\n\r\nexport default class StickyGum {\r\n  private options: Options;\r\n  private elements: HTMLElement[];\r\n  private initialized = false;\r\n  private sidebarStates: SidebarState[] = [];\r\n\r\n  constructor(options: StickyGumOptions) {\r\n    this.options = mergeOptions(options);\r\n    this.elements = resolveElements(this.options.elements);\r\n    this.tryInitOrHookIntoEvents();\r\n  }\r\n\r\n  private tryInitOrHookIntoEvents(): void {\r\n    if (this.tryInit()) return;\r\n\r\n    if (this.options.verbose) {\r\n      console.warn('StickyGum: Body width smaller than options.minWidth. Init is delayed.');\r\n    }\r\n\r\n    on(document, 'scroll', this.delayedInit);\r\n    on(window, 'resize', this.delayedInit);\r\n  }\r\n\r\n  private delayedInit = (): void => {\r\n    if (this.tryInit()) {\r\n      off(document, 'scroll', this.delayedInit);\r\n      off(window, 'resize', this.delayedInit);\r\n    }\r\n  };\r\n\r\n  private tryInit(): boolean {\r\n    if (this.initialized) return true;\r\n    if (document.body.getBoundingClientRect().width < this.options.minWidth) return false;\r\n    this.init();\r\n    return true;\r\n  }\r\n\r\n  private init(): void {\r\n    this.initialized = true;\r\n    injectStylesheet(STYLESHEET_ID, STYLESHEET_CONTENT);\r\n\r\n    for (const element of this.elements) {\r\n      const state = Sidebar.create(element, this.options);\r\n      const scroll = new Scroll(state);\r\n\r\n      state.onScroll = () => scroll.handle();\r\n      state.resizeObserver = new SidebarResizeObserver(state.onScroll);\r\n\r\n      state.onScroll();\r\n      on(document, 'scroll', state.onScroll);\r\n      on(window, 'resize', state.onScroll);\r\n      state.resizeObserver.observe(state.stickySidebar);\r\n\r\n      this.sidebarStates.push(state);\r\n    }\r\n  }\r\n\r\n  unbind(): void {\r\n    off(document, 'scroll', this.delayedInit);\r\n    off(window, 'resize', this.delayedInit);\r\n\r\n    for (const state of this.sidebarStates) {\r\n      off(document, 'scroll', state.onScroll);\r\n      off(window, 'resize', state.onScroll);\r\n      Sidebar.cleanup(state);\r\n    }\r\n\r\n    this.sidebarStates = [];\r\n    this.initialized = false;\r\n  }\r\n}\r\n\r\nexport { StickyGum as CodehemuStickySidebar };\r\n"],"names":[],"mappings":"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"}