{"version":3,"file":"createFrameResizeObserver.mjs","names":[],"sources":["../../../../../../../src/lib/dom/createFrameResizeObserver.ts"],"sourcesContent":["export interface FrameResizeObserver {\n  /**\n   * (Re-)observe exactly the given targets. Any previously observed element is\n   * dropped first, so this can be called repeatedly with a changed target set.\n   */\n  observe: (targets: Iterable<Element>) => void;\n  /**\n   * Queue a measurement on the next animation frame. Repeated calls before the\n   * frame runs coalesce into a single measurement.\n   */\n  schedule: () => void;\n  /** Stop observing and cancel any queued measurement. */\n  disconnect: () => void;\n}\n\n/**\n * Wraps a `ResizeObserver` whose measurements are deferred to the next\n * animation frame. Deferring serves two purposes: it coalesces bursts of resize\n * notifications into a single measurement, and it avoids \"ResizeObserver loop\"\n * errors when the measurement itself mutates the layout of observed elements.\n *\n * Lifecycle (creating the observer, when to (re-)observe, when to disconnect)\n * is left to the caller, because the consuming hooks drive it differently —\n * some from a ref callback, some from a layout effect.\n */\nexport const createFrameResizeObserver = (\n  measure: () => void,\n): FrameResizeObserver => {\n  let frame: number | null = null;\n\n  const schedule = () => {\n    if (frame !== null) {\n      cancelAnimationFrame(frame);\n    }\n    frame = requestAnimationFrame(() => {\n      frame = null;\n      measure();\n    });\n  };\n\n  const observer = new ResizeObserver(schedule);\n\n  return {\n    observe: (targets) => {\n      observer.disconnect();\n      for (const target of targets) {\n        observer.observe(target);\n      }\n    },\n    schedule,\n    disconnect: () => {\n      observer.disconnect();\n      if (frame !== null) {\n        cancelAnimationFrame(frame);\n        frame = null;\n      }\n    },\n  };\n};\n\nexport default createFrameResizeObserver;\n"],"mappings":";;;;;;;;;;;;;AAyBA,IAAa,6BACX,YACwB;CACxB,IAAI,QAAuB;CAE3B,MAAM,iBAAiB;EACrB,IAAI,UAAU,MACZ,qBAAqB,KAAK;EAE5B,QAAQ,4BAA4B;GAClC,QAAQ;GACR,QAAQ;EACV,CAAC;CACH;CAEA,MAAM,WAAW,IAAI,eAAe,QAAQ;CAE5C,OAAO;EACL,UAAU,YAAY;GACpB,SAAS,WAAW;GACpB,KAAK,MAAM,UAAU,SACnB,SAAS,QAAQ,MAAM;EAE3B;EACA;EACA,kBAAkB;GAChB,SAAS,WAAW;GACpB,IAAI,UAAU,MAAM;IAClB,qBAAqB,KAAK;IAC1B,QAAQ;GACV;EACF;CACF;AACF"}