{"version":3,"file":"createCorrector.helper.cjs","sources":["../../../../src/hooks/use-viewport-shift/helpers/createCorrector.helper.ts"],"sourcesContent":["import { OFFSCREEN_SENTINEL } from '@hooks/use-viewport-shift/constants'\r\nimport type { NormalizedPadding } from '@hooks/use-viewport-shift/types'\r\n\r\n/** `true` while Radix keeps the popper wrapper off-screen for measurement. */\r\nconst isAwaitingPosition = (wrapper: HTMLElement) =>\r\n    wrapper.style.transform.includes(OFFSCREEN_SENTINEL)\r\n\r\n/**\r\n * Pure geometry: the `translate` string needed to pull `rect` back inside the\r\n * viewport (minus `pad`), or `''` when it already fits. Right/bottom overflow\r\n * takes priority over left/top.\r\n */\r\nconst computeTranslate = (rect: DOMRect, pad: NormalizedPadding): string => {\r\n    let dx = 0\r\n    let dy = 0\r\n\r\n    if (rect.right > window.innerWidth - pad.right) {\r\n        dx = window.innerWidth - pad.right - rect.right\r\n    } else if (rect.left < pad.left) {\r\n        dx = pad.left - rect.left\r\n    }\r\n\r\n    if (rect.bottom > window.innerHeight - pad.bottom) {\r\n        dy = window.innerHeight - pad.bottom - rect.bottom\r\n    } else if (rect.top < pad.top) {\r\n        dy = pad.top - rect.top\r\n    }\r\n\r\n    return (dx !== 0 || dy !== 0) ? `${Math.round(dx)}px ${Math.round(dy)}px` : ''\r\n}\r\n\r\n/**\r\n * Builds the idempotent correction pass. It **measures the wrapper** (stable\r\n * final geometry, immune to the content's entrance `transform` animation) and\r\n * **writes `translate` to the content** (composing with — not overriding — that\r\n * animation). Reading the wrapper is unaffected by our content write, so the\r\n * result is absolute and re-running never accumulates.\r\n */\r\nexport const createCorrector = (\r\n    content: HTMLElement,\r\n    wrapper: HTMLElement,\r\n    padRef: { current: NormalizedPadding },\r\n) => () => {\r\n    if (isAwaitingPosition(wrapper)) { return }\r\n    content.style.translate = computeTranslate(wrapper.getBoundingClientRect(), padRef.current)\r\n}\r\n"],"names":["isAwaitingPosition","wrapper","OFFSCREEN_SENTINEL","computeTranslate","rect","pad","dx","dy","createCorrector","content","padRef"],"mappings":"0HAIMA,EAAsBC,GACxBA,EAAQ,MAAM,UAAU,SAASC,oBAAkB,EAOjDC,EAAmB,CAACC,EAAeC,IAAmC,CACxE,IAAIC,EAAK,EACLC,EAAK,EAET,OAAIH,EAAK,MAAQ,OAAO,WAAaC,EAAI,MACrCC,EAAK,OAAO,WAAaD,EAAI,MAAQD,EAAK,MACnCA,EAAK,KAAOC,EAAI,OACvBC,EAAKD,EAAI,KAAOD,EAAK,MAGrBA,EAAK,OAAS,OAAO,YAAcC,EAAI,OACvCE,EAAK,OAAO,YAAcF,EAAI,OAASD,EAAK,OACrCA,EAAK,IAAMC,EAAI,MACtBE,EAAKF,EAAI,IAAMD,EAAK,KAGhBE,IAAO,GAAKC,IAAO,EAAK,GAAG,KAAK,MAAMD,CAAE,CAAC,MAAM,KAAK,MAAMC,CAAE,CAAC,KAAO,EAChF,EASaC,EAAkB,CAC3BC,EACAR,EACAS,IACC,IAAM,CACHV,EAAmBC,CAAO,IAC9BQ,EAAQ,MAAM,UAAYN,EAAiBF,EAAQ,sBAAA,EAAyBS,EAAO,OAAO,EAC9F"}