{
  "version": 3,
  "sources": ["../../../src/components/collaborators-overlay/use-debounced-recompute.ts"],
  "sourcesContent": ["import { useCallback, useEffect, useRef, useState } from '@wordpress/element';\n\n/**\n * Returns a recompute token and a debounced callback that bumps it.\n * Rapid successive calls cancel the previous pending timeout so only one\n * recompute fires, `delayMs` after the last call.\n *\n * @param delayMs - Milliseconds to wait before bumping the recompute token.\n * @return A tuple of [recomputeToken, rerenderAfterDelay].\n */\nexport function useDebouncedRecompute(\n\tdelayMs: number\n): [ number, () => () => void ] {\n\tconst [ recomputeToken, setRecomputeToken ] = useState( 0 );\n\tconst timeoutRef = useRef< ReturnType< typeof setTimeout > | null >( null );\n\n\tconst rerenderAfterDelay = useCallback( () => {\n\t\tif ( timeoutRef.current ) {\n\t\t\tclearTimeout( timeoutRef.current );\n\t\t}\n\t\ttimeoutRef.current = setTimeout( () => {\n\t\t\tsetRecomputeToken( ( t ) => t + 1 );\n\t\t}, delayMs );\n\t\treturn () => {\n\t\t\tif ( timeoutRef.current ) {\n\t\t\t\tclearTimeout( timeoutRef.current );\n\t\t\t}\n\t\t};\n\t}, [ delayMs ] );\n\n\treturn [ recomputeToken, rerenderAfterDelay ];\n}\n\n/**\n * Returns a recompute token and a callback that bumps it on the next\n * animation frame. Successive calls within the same frame are coalesced.\n * Use this for resize-triggered recomputes so the DOM is measured after\n * the browser has finished layout, without an arbitrary fixed delay.\n *\n * @return A tuple of [recomputeToken, rerenderOnNextFrame].\n */\nexport function useRequestAnimationFrameRecompute(): [ number, () => void ] {\n\tconst [ recomputeToken, setRecomputeToken ] = useState( 0 );\n\tconst requestAnimationFrameRef = useRef< number | null >( null );\n\n\tuseEffect( () => {\n\t\treturn () => {\n\t\t\tif ( requestAnimationFrameRef.current !== null ) {\n\t\t\t\tcancelAnimationFrame( requestAnimationFrameRef.current );\n\t\t\t}\n\t\t};\n\t}, [] );\n\n\tconst rerenderOnNextFrame = useCallback( () => {\n\t\tif ( requestAnimationFrameRef.current !== null ) {\n\t\t\tcancelAnimationFrame( requestAnimationFrameRef.current );\n\t\t}\n\t\trequestAnimationFrameRef.current = requestAnimationFrame( () => {\n\t\t\trequestAnimationFrameRef.current = null;\n\t\t\tsetRecomputeToken( ( t ) => t + 1 );\n\t\t} );\n\t}, [] );\n\n\treturn [ recomputeToken, rerenderOnNextFrame ];\n}\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAyD;AAUlD,SAAS,sBACf,SAC+B;AAC/B,QAAM,CAAE,gBAAgB,iBAAkB,QAAI,yBAAU,CAAE;AAC1D,QAAM,iBAAa,uBAAkD,IAAK;AAE1E,QAAM,yBAAqB,4BAAa,MAAM;AAC7C,QAAK,WAAW,SAAU;AACzB,mBAAc,WAAW,OAAQ;AAAA,IAClC;AACA,eAAW,UAAU,WAAY,MAAM;AACtC,wBAAmB,CAAE,MAAO,IAAI,CAAE;AAAA,IACnC,GAAG,OAAQ;AACX,WAAO,MAAM;AACZ,UAAK,WAAW,SAAU;AACzB,qBAAc,WAAW,OAAQ;AAAA,MAClC;AAAA,IACD;AAAA,EACD,GAAG,CAAE,OAAQ,CAAE;AAEf,SAAO,CAAE,gBAAgB,kBAAmB;AAC7C;AAUO,SAAS,oCAA4D;AAC3E,QAAM,CAAE,gBAAgB,iBAAkB,QAAI,yBAAU,CAAE;AAC1D,QAAM,+BAA2B,uBAAyB,IAAK;AAE/D,gCAAW,MAAM;AAChB,WAAO,MAAM;AACZ,UAAK,yBAAyB,YAAY,MAAO;AAChD,6BAAsB,yBAAyB,OAAQ;AAAA,MACxD;AAAA,IACD;AAAA,EACD,GAAG,CAAC,CAAE;AAEN,QAAM,0BAAsB,4BAAa,MAAM;AAC9C,QAAK,yBAAyB,YAAY,MAAO;AAChD,2BAAsB,yBAAyB,OAAQ;AAAA,IACxD;AACA,6BAAyB,UAAU,sBAAuB,MAAM;AAC/D,+BAAyB,UAAU;AACnC,wBAAmB,CAAE,MAAO,IAAI,CAAE;AAAA,IACnC,CAAE;AAAA,EACH,GAAG,CAAC,CAAE;AAEN,SAAO,CAAE,gBAAgB,mBAAoB;AAC9C;",
  "names": []
}
