| 15 | type DisposableResizeObserver = Pick<ResizeObserver, 'observe' | 'unobserve' | 'disconnect'>; |
| 16 | |
| 17 | const attachCoalescedResizeObserver = (container: HTMLElement, chart: ChartGPUInstance): DisposableResizeObserver => { |
| 18 | let rafId: number | null = null; |
| 19 | const ro = new ResizeObserver(() => { |
| 20 | if (rafId !== null) return; |
| 21 | rafId = requestAnimationFrame(() => { |
| 22 | rafId = null; |
| 23 | chart.resize(); |
| 24 | }); |
| 25 | }); |
| 26 | ro.observe(container); |
| 27 | |
| 28 | return { |
| 29 | observe: ro.observe.bind(ro), |
| 30 | unobserve: ro.unobserve.bind(ro), |
| 31 | disconnect: () => { |
| 32 | if (rafId !== null) { |
| 33 | cancelAnimationFrame(rafId); |
| 34 | rafId = null; |
| 35 | } |
| 36 | ro.disconnect(); |
| 37 | }, |
| 38 | }; |
| 39 | }; |
| 40 | |
| 41 | const createModeToggle = (): { |
| 42 | readonly host: HTMLDivElement; |