{"version":3,"sources":["../src/constants.ts","../src/dom.ts","../src/state.ts","../src/observer.ts","../src/index.ts"],"names":["CONFIG","defaultPaddingConfig","getRelativeShift","config","edge","offset","injectAnimationBeacon","style","getContainerPadding","container","applyTransform","state","targetX","targetY","element","applySticky","applyStatic","cachedConfig","shift","measureViewportSize","parent","isVertical","getScrollPosition","isWindow","getScrollParent","node","overflowY","measureRelativeRect","target","ancestor","tRect","aRectTop","aRectLeft","scrollTop","scrollLeft","clientTop","clientLeft","aRect","top","left","measureConstraintRect","width","height","measureNaturalRect","isManaged","prevPosition","prevTransform","prevTop","prevLeft","prevRight","prevBottom","rect","readConfigFromDOM","edges","foundEdge","foundOffset","map","val","value","getFrameContext","lastScrollPos","naturalRect","viewportSize","directParentRect","cachedViewportPadding","cssOffset","isStartAnchor","currentScroll","scrollDelta","layoutStart","dimension","implicitShift","constraintEnd","constraintStart","isParentOutOfView","ctx","viewportEnd","isNaturalPosSafe","processScrollAway","translation","finalTransform","currentVisualPos","isHidden","processScrollToward","isNaturallyPassed","visualStart","targetVisual","maxPos","minPos","shouldStick","stickyThreshold","updateElementState","isScrollingAway","isScrollingToward","stateRegistry","cleanupRegistry","resizeTickMap","refreshState","directParent","scheduleRefresh","handleResizeObserver","entries","changedNodes","e","handleVisualViewport","resizeObserver","mountElement","attributeObserver","mutations","_a","mutation","scrollTick","onScroll","scrollTarget","parentInUse","directParentInUse","el","s","handleMutations","checkRemovals","type","addedNodes","removedNodes","handleAnimationStart","event","initPoliteSticky","index_default"],"mappings":"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","file":"index.cjs","sourcesContent":["export const CONFIG = {\r\n  className: \"sticky-polite\",\r\n  attrName: \"data-polite-state\",\r\n  epsilon: 1,\r\n};\r\n","// dom.ts\r\n\r\nimport { CONFIG } from \"./constants\";\r\nimport { Config, Edge, ElementState, paddingConfig } from \"./types\";\r\n\r\nexport const defaultPaddingConfig = { top: 0, bottom: 0, left: 0, right: 0 };\r\n\r\nconst getRelativeShift = (config: Config): { x: number; y: number } => {\r\n  if (!config.valid) return { x: 0, y: 0 };\r\n  const { edge, offset } = config;\r\n\r\n  switch (edge) {\r\n    case \"top\":\r\n      return { x: 0, y: offset };\r\n    case \"bottom\":\r\n      return { x: 0, y: -offset };\r\n    case \"left\":\r\n      return { x: offset, y: 0 };\r\n    case \"right\":\r\n      return { x: -offset, y: 0 };\r\n  }\r\n};\r\n\r\nexport const injectAnimationBeacon = () => {\r\n  if (document.getElementById(\"sticky-polite-beacon\")) return;\r\n\r\n  const style = document.createElement(\"style\");\r\n  style.id = \"sticky-polite-beacon\";\r\n  style.innerHTML = `\r\n    @keyframes sticky-polite-announce { \r\n      from { opacity: 0.999; } \r\n      to { opacity: 1; } \r\n    }\r\n    .${CONFIG.className} { \r\n      animation-duration: 1ms; \r\n      animation-name: sticky-polite-announce; \r\n    }\r\n  `;\r\n  document.head.appendChild(style);\r\n};\r\n\r\nexport const getContainerPadding = (container: HTMLElement | Window): paddingConfig => {\r\n  if (container instanceof Window || container === document.documentElement || container === document.body) {\r\n    return defaultPaddingConfig;\r\n  }\r\n\r\n  const style = getComputedStyle(container);\r\n  return {\r\n    top: parseInt(style.paddingTop, 10) || 0,\r\n    bottom: parseInt(style.paddingBottom, 10) || 0,\r\n    left: parseInt(style.paddingLeft, 10) || 0,\r\n    right: parseInt(style.paddingRight, 10) || 0,\r\n  };\r\n};\r\n\r\nexport const applyTransform = (state: ElementState, targetX: number, targetY: number) => {\r\n  const { element } = state;\r\n  element.style.position = \"relative\";\r\n  element.style.transform = `translate3d(${targetX}px, ${targetY}px, 0)`;\r\n  element.setAttribute(CONFIG.attrName, \"intersect\");\r\n\r\n  state.currentTranslation = targetX !== 0 ? targetX : targetY;\r\n};\r\n\r\nexport const applySticky = (element: HTMLElement) => {\r\n  element.style.position = \"sticky\";\r\n  element.style.transform = \"\";\r\n  element.setAttribute(CONFIG.attrName, \"sticky\");\r\n};\r\n\r\nexport const applyStatic = (state: ElementState) => {\r\n  const { element, cachedConfig } = state;\r\n  const shift = getRelativeShift(cachedConfig);\r\n\r\n  element.style.position = \"relative\";\r\n  element.style.transform = `translate3d(${-shift.x}px, ${-shift.y}px, 0)`;\r\n  element.setAttribute(CONFIG.attrName, \"static\");\r\n};\r\n\r\nexport const measureViewportSize = (parent: HTMLElement, edge: Edge): number => {\r\n  const isVertical = edge === \"top\" || edge === \"bottom\";\r\n  if (parent === document.documentElement) {\r\n    if (window.visualViewport) {\r\n      return isVertical ? window.visualViewport.height : window.visualViewport.width;\r\n    }\r\n    return isVertical ? window.innerHeight : window.innerWidth;\r\n  }\r\n  return isVertical ? parent.clientHeight : parent.clientWidth;\r\n};\r\n\r\nexport const getScrollPosition = (parent: HTMLElement, edge: Edge): number => {\r\n  const isWindow = parent === document.documentElement;\r\n  if (edge === \"left\" || edge === \"right\") return isWindow ? window.scrollX : parent.scrollLeft;\r\n  return isWindow ? window.scrollY : parent.scrollTop;\r\n};\r\n\r\nexport const getScrollParent = (node: HTMLElement): HTMLElement => {\r\n  if (!node || node === document.body) return document.documentElement;\r\n  const style = getComputedStyle(node);\r\n  const overflowY = style.overflowY;\r\n  const isScrollable = overflowY !== \"visible\" && overflowY !== \"hidden\";\r\n  if (isScrollable && node.scrollHeight >= node.clientHeight) return node;\r\n  return getScrollParent(node.parentElement as HTMLElement);\r\n};\r\n\r\nexport const measureRelativeRect = (target: HTMLElement, ancestor: HTMLElement): DOMRect => {\r\n  const tRect = target.getBoundingClientRect();\r\n\r\n  let aRectTop = 0;\r\n  let aRectLeft = 0;\r\n  let scrollTop = 0;\r\n  let scrollLeft = 0;\r\n  let clientTop = 0;\r\n  let clientLeft = 0;\r\n\r\n  if (ancestor === document.documentElement) {\r\n    scrollTop = window.scrollY;\r\n    scrollLeft = window.scrollX;\r\n  } else {\r\n    const aRect = ancestor.getBoundingClientRect();\r\n    aRectTop = aRect.top;\r\n    aRectLeft = aRect.left;\r\n    scrollTop = ancestor.scrollTop;\r\n    scrollLeft = ancestor.scrollLeft;\r\n    clientTop = ancestor.clientTop || 0;\r\n    clientLeft = ancestor.clientLeft || 0;\r\n  }\r\n\r\n  const top = tRect.top - aRectTop + scrollTop - clientTop;\r\n  const left = tRect.left - aRectLeft + scrollLeft - clientLeft;\r\n\r\n  return {\r\n    top,\r\n    left,\r\n    width: tRect.width,\r\n    height: tRect.height,\r\n    bottom: top + tRect.height,\r\n    right: left + tRect.width,\r\n    x: left,\r\n    y: top,\r\n    toJSON: () => {},\r\n  };\r\n};\r\n\r\nexport const measureConstraintRect = (target: HTMLElement, ancestor: HTMLElement): DOMRect => {\r\n  // Fix for Issue 3 (Nested Scroll):\r\n  // If the direct parent IS the scrolling container, the constraint is the\r\n  // CONTENT size (scrollHeight), not the VIEWPORT size (getBoundingClientRect).\r\n  if (target === ancestor) {\r\n    const width = ancestor.scrollWidth;\r\n    const height = ancestor.scrollHeight;\r\n    return {\r\n      top: 0,\r\n      left: 0,\r\n      width,\r\n      height,\r\n      bottom: height,\r\n      right: width,\r\n      x: 0,\r\n      y: 0,\r\n      toJSON: () => {},\r\n    };\r\n  }\r\n\r\n  return measureRelativeRect(target, ancestor);\r\n};\r\n\r\nexport const measureNaturalRect = (element: HTMLElement, parent: HTMLElement): DOMRect => {\r\n  const isManaged = element.hasAttribute(CONFIG.attrName);\r\n\r\n  const prevPosition = element.style.position;\r\n  const prevTransform = element.style.transform;\r\n  const prevTop = element.style.top;\r\n  const prevLeft = element.style.left;\r\n  const prevRight = element.style.right;\r\n  const prevBottom = element.style.bottom;\r\n\r\n  if (isManaged) {\r\n    element.style.position = \"relative\";\r\n    element.style.transform = \"\";\r\n    element.style.top = \"auto\";\r\n    element.style.left = \"auto\";\r\n    element.style.right = \"auto\";\r\n    element.style.bottom = \"auto\";\r\n  }\r\n\r\n  const rect = measureRelativeRect(element, parent);\r\n\r\n  if (isManaged) {\r\n    element.style.position = prevPosition;\r\n    element.style.transform = prevTransform;\r\n    element.style.top = prevTop;\r\n    element.style.left = prevLeft;\r\n    element.style.right = prevRight;\r\n    element.style.bottom = prevBottom;\r\n  }\r\n\r\n  return rect;\r\n};\r\n\r\nexport const isCompletelyOutOfView = (element: HTMLElement, parent: HTMLElement): boolean => {\r\n  const rect = element.getBoundingClientRect();\r\n\r\n  let parentRect;\r\n  if (parent === document.documentElement) {\r\n    if (window.visualViewport) {\r\n      parentRect = {\r\n        top: 0,\r\n        left: 0,\r\n        bottom: window.visualViewport.height,\r\n        right: window.visualViewport.width,\r\n      };\r\n    } else {\r\n      parentRect = {\r\n        top: 0,\r\n        left: 0,\r\n        bottom: window.innerHeight,\r\n        right: window.innerWidth,\r\n      };\r\n    }\r\n  } else {\r\n    parentRect = parent.getBoundingClientRect();\r\n  }\r\n\r\n  return rect.bottom < parentRect.top || rect.top > parentRect.bottom || rect.right < parentRect.left || rect.left > parentRect.right;\r\n};\r\n\r\nexport const readConfigFromDOM = (element: HTMLElement): Config => {\r\n  const prevPosition = element.style.position;\r\n  const isManaged = element.hasAttribute(CONFIG.attrName);\r\n\r\n  if (isManaged) {\r\n    element.style.position = \"\";\r\n  }\r\n\r\n  const edges: Edge[] = [\"top\", \"bottom\", \"left\", \"right\"];\r\n  let foundEdge: Edge | null = null;\r\n  let foundOffset = 0;\r\n\r\n  if (\"computedStyleMap\" in element) {\r\n    try {\r\n      const map = element.computedStyleMap();\r\n      for (const edge of edges) {\r\n        const val = map.get(edge);\r\n        if (val && \"value\" in val && typeof val.value === \"number\") {\r\n          if (foundEdge) {\r\n            if (isManaged) element.style.position = prevPosition;\r\n            return { valid: false, edge: \"top\", offset: 0 };\r\n          }\r\n          foundEdge = edge;\r\n          foundOffset = val.value;\r\n        }\r\n      }\r\n    } catch (e) {}\r\n  }\r\n\r\n  if (!foundEdge) {\r\n    const style = getComputedStyle(element);\r\n    for (const edge of edges) {\r\n      const value = style.getPropertyValue(edge);\r\n      if (value && value !== \"auto\" && value !== \"\") {\r\n        if (foundEdge) {\r\n          if (isManaged) element.style.position = prevPosition;\r\n          return { valid: false, edge: \"top\", offset: 0 };\r\n        }\r\n        foundEdge = edge;\r\n        foundOffset = parseFloat(value) || 0;\r\n      }\r\n    }\r\n  }\r\n\r\n  if (isManaged) {\r\n    element.style.position = prevPosition;\r\n  }\r\n\r\n  return foundEdge ? { valid: true, edge: foundEdge, offset: foundOffset } : { valid: false, edge: \"top\", offset: 0 };\r\n};\r\n","// state.ts\r\n\r\nimport { CONFIG } from \"./constants\";\r\nimport { applyStatic, applySticky, applyTransform, getScrollPosition } from \"./dom\";\r\nimport { ElementState } from \"./types\";\r\n\r\n// --- Types & Context ---\r\n// a junk-drawer of boundaries and measurements we'll need to dermine what to do\r\ninterface FrameContext {\r\n  isVertical: boolean;\r\n  isStartAnchor: boolean; // top/left = true.  bottom/right = false;\r\n  currentScroll: number;\r\n  viewportSize: number;\r\n  scrollDelta: number;\r\n  offset: number; // CSS edge offset + container Padding)\r\n  implicitShift: number; // Visual shift from relative positioning\r\n  layoutStart: number;\r\n  dimension: number;\r\n  constraintStart: number;\r\n  constraintEnd: number;\r\n}\r\n\r\n// --- Helpers ---\r\n\r\nconst getFrameContext = (state: ElementState): FrameContext => {\r\n  const {\r\n    parent,\r\n    lastScrollPos,\r\n    naturalRect,\r\n    cachedConfig: config,\r\n    cachedViewportSize: viewportSize,\r\n    directParentRect,\r\n    cachedViewportPadding,\r\n  } = state;\r\n  const { edge, offset: cssOffset } = config;\r\n\r\n  const isVertical = edge === \"top\" || edge === \"bottom\";\r\n  const isStartAnchor = edge === \"top\" || edge === \"left\";\r\n\r\n  const currentScroll = getScrollPosition(parent, edge);\r\n  const scrollDelta = currentScroll - lastScrollPos;\r\n\r\n  const offset = cssOffset + cachedViewportPadding[edge];\r\n\r\n  // Dimensions\r\n  const layoutStart = isVertical ? naturalRect.top : naturalRect.left;\r\n  const dimension = isVertical ? naturalRect.height : naturalRect.width;\r\n\r\n  // Implicit Shift & Visual Start\r\n  const implicitShift = isStartAnchor ? cssOffset : -cssOffset;\r\n  const visualStart = layoutStart + implicitShift;\r\n\r\n  // Constraints\r\n  const constraintEnd = isVertical ? directParentRect.bottom : directParentRect.right;\r\n  const constraintStart = isVertical ? directParentRect.top : directParentRect.left;\r\n\r\n  return {\r\n    isVertical,\r\n    isStartAnchor,\r\n    currentScroll,\r\n    viewportSize,\r\n    scrollDelta,\r\n    offset,\r\n    implicitShift,\r\n    layoutStart,\r\n    dimension,\r\n    constraintStart,\r\n    constraintEnd,\r\n  };\r\n};\r\n\r\nconst isParentOutOfView = (ctx: FrameContext): boolean => {\r\n  const viewportEnd = ctx.currentScroll + ctx.viewportSize;\r\n  return ctx.constraintEnd < ctx.currentScroll || ctx.constraintStart > viewportEnd;\r\n};\r\n\r\nconst isNaturalPosSafe = (ctx: FrameContext): boolean => {\r\n  if (ctx.isStartAnchor) {\r\n    return ctx.layoutStart >= ctx.currentScroll + ctx.offset - CONFIG.epsilon;\r\n  }\r\n  return ctx.layoutStart + ctx.dimension <= ctx.currentScroll + ctx.viewportSize - ctx.offset + CONFIG.epsilon;\r\n};\r\n\r\nconst processScrollAway = (ctx: FrameContext, state: ElementState) => {\r\n  // Logic B: Scroll Away (Hide)\r\n  if (state.isSticky) {\r\n    let translation = 0;\r\n\r\n    if (ctx.isStartAnchor) {\r\n      // Visual Pos = Sticky Position = currentScroll + Offset\r\n      // Translation = TargetVisual - LayoutStart\r\n      const targetVisual = ctx.currentScroll + ctx.offset;\r\n      translation = targetVisual - ctx.layoutStart;\r\n    } else {\r\n      const targetVisual = ctx.currentScroll + ctx.viewportSize - ctx.offset - ctx.dimension;\r\n      translation = targetVisual - ctx.layoutStart;\r\n    }\r\n\r\n    // Adjust for Implicit Shift\r\n    const finalTransform = translation - ctx.implicitShift;\r\n\r\n    if (ctx.isVertical) applyTransform(state, 0, finalTransform);\r\n    else applyTransform(state, finalTransform, 0);\r\n\r\n    state.isSticky = false;\r\n    state.isTransforming = true;\r\n  }\r\n\r\n  // Optimization: Math-based Visibility Check (No DOM Read)\r\n  if (state.isTransforming) {\r\n    const currentVisualPos = ctx.layoutStart + state.currentTranslation + ctx.implicitShift;\r\n\r\n    let isHidden = false;\r\n    if (ctx.isStartAnchor) {\r\n      // Hidden if bottom of element is above scroll top\r\n      isHidden = currentVisualPos + ctx.dimension < ctx.currentScroll;\r\n    } else {\r\n      // Hidden if top of element is below scroll bottom\r\n      isHidden = currentVisualPos > ctx.currentScroll + ctx.viewportSize;\r\n    }\r\n\r\n    if (isHidden) {\r\n      applyStatic(state);\r\n      state.isTransforming = false;\r\n    }\r\n  }\r\n};\r\n\r\nconst processScrollToward = (ctx: FrameContext, state: ElementState) => {\r\n  // Logic C: Scroll Toward (Reveal)\r\n\r\n  // 1. Check if we have physically passed the element\r\n  let isNaturallyPassed = false;\r\n  const visualStart = ctx.layoutStart + ctx.implicitShift;\r\n\r\n  if (ctx.isStartAnchor) {\r\n    isNaturallyPassed = visualStart + ctx.dimension < ctx.currentScroll;\r\n  } else {\r\n    isNaturallyPassed = visualStart > ctx.currentScroll + ctx.viewportSize;\r\n  }\r\n\r\n  // 2. Trigger: Place Element for Reveal\r\n  if (!state.isSticky && !state.isTransforming && isNaturallyPassed) {\r\n    let targetVisual = 0;\r\n\r\n    if (ctx.isStartAnchor) {\r\n      // Place bottom of element at top of viewport\r\n      targetVisual = ctx.currentScroll - ctx.dimension;\r\n\r\n      // Clamp\r\n      const maxPos = ctx.constraintEnd - ctx.dimension;\r\n      if (targetVisual > maxPos) targetVisual = maxPos;\r\n    } else {\r\n      // Place top of element at bottom of viewport\r\n      targetVisual = ctx.currentScroll + ctx.viewportSize;\r\n\r\n      // Clamp\r\n      const minPos = ctx.constraintStart;\r\n      if (targetVisual < minPos) targetVisual = minPos;\r\n    }\r\n\r\n    const translation = targetVisual - ctx.layoutStart;\r\n    const finalTransform = translation - ctx.implicitShift;\r\n\r\n    // Check for \"Effectively Static\"\r\n    if (Math.abs(finalTransform - -ctx.implicitShift) < CONFIG.epsilon) {\r\n      applyStatic(state);\r\n      state.isTransforming = false;\r\n    } else {\r\n      if (ctx.isVertical) applyTransform(state, 0, finalTransform);\r\n      else applyTransform(state, finalTransform, 0);\r\n      state.isTransforming = true;\r\n    }\r\n  }\r\n\r\n  // 3. Docking Check\r\n  if (state.isTransforming) {\r\n    const currentVisualPos = ctx.layoutStart + state.currentTranslation + ctx.implicitShift;\r\n    let shouldStick = false;\r\n\r\n    if (ctx.isStartAnchor) {\r\n      const stickyThreshold = ctx.currentScroll + ctx.offset;\r\n      if (currentVisualPos >= stickyThreshold - CONFIG.epsilon) {\r\n        shouldStick = true;\r\n      }\r\n    } else {\r\n      const stickyThreshold = ctx.currentScroll + ctx.viewportSize - ctx.offset;\r\n      if (currentVisualPos + ctx.dimension <= stickyThreshold + CONFIG.epsilon) {\r\n        shouldStick = true;\r\n      }\r\n    }\r\n\r\n    if (shouldStick) {\r\n      applySticky(state.element);\r\n      state.isSticky = true;\r\n      state.isTransforming = false;\r\n    }\r\n  }\r\n};\r\n\r\nexport const updateElementState = (state: ElementState) => {\r\n  if (!state.cachedConfig.valid) {\r\n    if (state.isSticky || state.isTransforming) {\r\n      state.element.style.position = \"static\";\r\n      state.element.style.transform = \"\";\r\n      state.isSticky = false;\r\n      state.isTransforming = false;\r\n    }\r\n    return;\r\n  }\r\n\r\n  // 1. Prepare Context (Derived Variables)\r\n  const ctx = getFrameContext(state);\r\n  state.lastScrollPos = ctx.currentScroll;\r\n\r\n  // 2. Guard: Constraint Visibility\r\n  if (isParentOutOfView(ctx)) {\r\n    if (state.isSticky || state.isTransforming) {\r\n      applyStatic(state);\r\n      state.isSticky = false;\r\n      state.isTransforming = false;\r\n    }\r\n    return;\r\n  }\r\n\r\n  // 3. Safety Check: Are we naturally below the fold?\r\n  if (isNaturalPosSafe(ctx)) {\r\n    if (state.isSticky || state.isTransforming) {\r\n      applyStatic(state);\r\n      state.isSticky = false;\r\n      state.isTransforming = false;\r\n    }\r\n    return;\r\n  }\r\n\r\n  const isScrollingAway = ctx.isStartAnchor ? ctx.scrollDelta > 0 : ctx.scrollDelta < 0;\r\n  const isScrollingToward = ctx.isStartAnchor ? ctx.scrollDelta < 0 : ctx.scrollDelta > 0;\r\n\r\n  // 4. Directional Logic\r\n  if (isScrollingAway) {\r\n    processScrollAway(ctx, state);\r\n  } else if (isScrollingToward) {\r\n    processScrollToward(ctx, state);\r\n  }\r\n};\r\n","// observer.ts\r\n\r\nimport { CONFIG } from \"./constants\";\r\nimport {\r\n  applyStatic,\r\n  applySticky,\r\n  defaultPaddingConfig,\r\n  getContainerPadding,\r\n  getScrollParent,\r\n  injectAnimationBeacon,\r\n  measureConstraintRect, // New Import\r\n  measureNaturalRect,\r\n  measureViewportSize,\r\n  readConfigFromDOM,\r\n} from \"./dom\";\r\nimport { updateElementState } from \"./state\";\r\nimport { ElementState } from \"./types\";\r\n\r\nconst stateRegistry = new Map<HTMLElement, ElementState>();\r\nconst cleanupRegistry = new Map<HTMLElement, () => void>();\r\n\r\nconst resizeTickMap = new WeakMap<ElementState, boolean>();\r\n\r\nconst refreshState = (state: ElementState) => {\r\n  const { element, parent, directParent } = state;\r\n  state.cachedConfig = readConfigFromDOM(element);\r\n  state.naturalRect = measureNaturalRect(element, parent);\r\n\r\n  // Change: Use measureConstraintRect to handle scroll containers correctly\r\n  state.directParentRect = measureConstraintRect(directParent, parent);\r\n\r\n  state.cachedViewportSize = measureViewportSize(parent, state.cachedConfig.edge);\r\n  state.cachedViewportPadding = getContainerPadding(parent);\r\n\r\n  if (state.isSticky) {\r\n    applySticky(element);\r\n  } else {\r\n    applyStatic(state);\r\n    state.isTransforming = false;\r\n  }\r\n\r\n  updateElementState(state);\r\n};\r\n\r\nconst scheduleRefresh = (state: ElementState) => {\r\n  if (resizeTickMap.get(state)) return;\r\n\r\n  window.requestAnimationFrame(() => {\r\n    refreshState(state);\r\n    resizeTickMap.set(state, false);\r\n  });\r\n  resizeTickMap.set(state, true);\r\n};\r\n\r\nconst handleResizeObserver = (entries: ResizeObserverEntry[]) => {\r\n  const changedNodes = new Set(entries.map((e) => e.target));\r\n\r\n  for (const state of stateRegistry.values()) {\r\n    if (changedNodes.has(state.element) || changedNodes.has(state.parent) || changedNodes.has(state.directParent)) {\r\n      scheduleRefresh(state);\r\n    }\r\n  }\r\n};\r\n\r\nconst handleVisualViewport = () => {\r\n  for (const state of stateRegistry.values()) {\r\n    if (state.parent === document.documentElement || state.parent === document.body) {\r\n      scheduleRefresh(state);\r\n    }\r\n  }\r\n};\r\n\r\nconst resizeObserver = new ResizeObserver(handleResizeObserver);\r\n\r\nexport const mountElement = (element: HTMLElement) => {\r\n  if (stateRegistry.has(element)) return;\r\n\r\n  const parent = getScrollParent(element);\r\n  const directParent = element.parentElement || parent;\r\n\r\n  const attributeObserver = new MutationObserver((mutations) => {\r\n    for (const mutation of mutations) {\r\n      if (mutation.type === \"attributes\" && mutation.attributeName === \"class\") {\r\n        if (!element.classList.contains(CONFIG.className)) {\r\n          cleanupRegistry.get(element)?.();\r\n        }\r\n      }\r\n    }\r\n  });\r\n\r\n  attributeObserver.observe(element, {\r\n    attributes: true,\r\n    attributeFilter: [\"class\"],\r\n  });\r\n\r\n  const state: ElementState = {\r\n    element,\r\n    parent,\r\n    directParent,\r\n    directParentRect: { top: 0, left: 0, width: 0, height: 0, bottom: 0, right: 0, x: 0, y: 0, toJSON: () => {} },\r\n    naturalRect: { top: 0, left: 0, height: 0, width: 0 } as DOMRect,\r\n    lastScrollPos: 0,\r\n    isSticky: false,\r\n    isTransforming: false,\r\n    currentTranslation: 0,\r\n    cachedConfig: { valid: false, edge: \"top\", offset: 0 },\r\n    cachedViewportSize: 0,\r\n    cachedViewportPadding: defaultPaddingConfig,\r\n    attributeObserver,\r\n  };\r\n\r\n  element.setAttribute(CONFIG.attrName, \"static\");\r\n  stateRegistry.set(element, state);\r\n\r\n  refreshState(state);\r\n\r\n  resizeObserver.observe(element);\r\n  resizeObserver.observe(parent);\r\n\r\n  if (directParent !== parent) {\r\n    resizeObserver.observe(directParent);\r\n  }\r\n\r\n  let scrollTick = false;\r\n  const onScroll = () => {\r\n    if (scrollTick) return;\r\n    window.requestAnimationFrame(() => {\r\n      updateElementState(state);\r\n      scrollTick = false;\r\n    });\r\n    scrollTick = true;\r\n  };\r\n\r\n  const scrollTarget = parent === document.documentElement ? window : parent;\r\n  scrollTarget.addEventListener(\"scroll\", onScroll, { passive: true });\r\n\r\n  cleanupRegistry.set(element, () => {\r\n    scrollTarget.removeEventListener(\"scroll\", onScroll);\r\n    attributeObserver.disconnect();\r\n\r\n    resizeObserver.unobserve(element);\r\n\r\n    let parentInUse = false;\r\n    let directParentInUse = false;\r\n\r\n    for (const [el, s] of stateRegistry.entries()) {\r\n      if (el === element) continue;\r\n\r\n      if (s.parent === parent) parentInUse = true;\r\n      if (s.directParent === directParent) directParentInUse = true;\r\n    }\r\n\r\n    if (!parentInUse) {\r\n      resizeObserver.unobserve(parent);\r\n    }\r\n\r\n    if (!directParentInUse && directParent !== parent) {\r\n      resizeObserver.unobserve(directParent);\r\n    }\r\n\r\n    stateRegistry.delete(element);\r\n    cleanupRegistry.delete(element);\r\n  });\r\n};\r\n\r\nexport const handleMutations = (mutations: MutationRecord[]) => {\r\n  let checkRemovals = false;\r\n\r\n  for (const { type, addedNodes, removedNodes } of mutations) {\r\n    if (type === \"childList\") {\r\n      addedNodes.forEach((node) => {\r\n        if (node instanceof HTMLElement) {\r\n          if (node.classList.contains(CONFIG.className)) mountElement(node);\r\n          node.querySelectorAll(`.${CONFIG.className}`).forEach((el) => mountElement(el as HTMLElement));\r\n        }\r\n      });\r\n      checkRemovals = checkRemovals || Boolean(removedNodes.length);\r\n    }\r\n  }\r\n\r\n  if (checkRemovals) {\r\n    Array.from(cleanupRegistry.keys()).forEach((node) => {\r\n      if (!document.contains(node)) cleanupRegistry.get(node)?.();\r\n    });\r\n  }\r\n};\r\n\r\nconst handleAnimationStart = (event: AnimationEvent) => {\r\n  if (event.animationName === \"sticky-polite-announce\") {\r\n    const node = event.target as HTMLElement;\r\n    if (!cleanupRegistry.has(node)) {\r\n      mountElement(node);\r\n    }\r\n  }\r\n};\r\n\r\nexport const initPoliteSticky = () => {\r\n  injectAnimationBeacon();\r\n  document.addEventListener(\"animationstart\", handleAnimationStart);\r\n\r\n  if (window.visualViewport) {\r\n    window.visualViewport.addEventListener(\"resize\", handleVisualViewport);\r\n  } else {\r\n    window.addEventListener(\"resize\", handleVisualViewport);\r\n  }\r\n\r\n  document.querySelectorAll(`.${CONFIG.className}`).forEach((el) => mountElement(el as HTMLElement));\r\n\r\n  new MutationObserver(handleMutations).observe(document.body, {\r\n    childList: true,\r\n    subtree: true,\r\n  });\r\n};\r\n","/**\r\n * Polite Sticky (Directional Reveal) Utility\r\n */\r\n\r\nimport { initPoliteSticky } from \"./observer\";\r\n\r\nif (typeof window !== \"undefined\") {\r\n  if (document.readyState === \"loading\") {\r\n    document.addEventListener(\"DOMContentLoaded\", initPoliteSticky);\r\n  } else {\r\n    initPoliteSticky();\r\n  }\r\n}\r\n\r\nexport default initPoliteSticky;\r\n"]}