diff --git a/demo/index.html b/demo/index.html index 78a506d..8357298 100644 --- a/demo/index.html +++ b/demo/index.html @@ -32,6 +32,7 @@
  • Spreadsheet
  • Spreadsheet Graph
  • Spreadsheet Propagator
  • +
  • Wiggly
  • diff --git a/src/canvas/fc-geometry.ts b/src/canvas/fc-geometry.ts index ce34bb8..faaece3 100644 --- a/src/canvas/fc-geometry.ts +++ b/src/canvas/fc-geometry.ts @@ -1,45 +1,4 @@ -export type ResizeObserverEntryCallback = (entry: ResizeObserverEntry) => void; - -class ResizeObserverManager { - #elementMap = new WeakMap>(); - #elementEntry = new WeakMap(); - - #vo = new ResizeObserver((entries) => { - for (const entry of entries) { - this.#elementEntry.set(entry.target, entry); - this.#elementMap.get(entry.target)?.forEach((callback) => callback(entry)); - } - }); - - observe(target: Element, callback: ResizeObserverEntryCallback): void { - let callbacks = this.#elementMap.get(target); - - if (callbacks === undefined) { - this.#vo.observe(target); - this.#elementMap.set(target, (callbacks = new Set())); - } else { - const entry = this.#elementEntry.get(target); - if (entry) { - callback(entry); - } - } - - callbacks.add(callback); - } - - unobserve(target: Element, callback: ResizeObserverEntryCallback): void { - const callbacks = this.#elementMap.get(target); - - if (callbacks === undefined) return; - - callbacks.delete(callback); - - if (callbacks.size === 0) { - this.#vo.unobserve(target); - this.#elementMap.delete(target); - } - } -} +import { ResizeObserverManager } from '../resize-observer'; const resizeObserver = new ResizeObserverManager(); diff --git a/src/resize-observer.ts b/src/resize-observer.ts new file mode 100644 index 0000000..a721505 --- /dev/null +++ b/src/resize-observer.ts @@ -0,0 +1,42 @@ +export type ResizeObserverEntryCallback = (entry: ResizeObserverEntry) => void; + +export class ResizeObserverManager { + #elementMap = new WeakMap>(); + #elementEntry = new WeakMap(); + + #vo = new ResizeObserver((entries) => { + for (const entry of entries) { + this.#elementEntry.set(entry.target, entry); + this.#elementMap.get(entry.target)?.forEach((callback) => callback(entry)); + } + }); + + observe(target: Element, callback: ResizeObserverEntryCallback): void { + let callbacks = this.#elementMap.get(target); + + if (callbacks === undefined) { + this.#vo.observe(target); + this.#elementMap.set(target, (callbacks = new Set())); + } else { + const entry = this.#elementEntry.get(target); + if (entry) { + callback(entry); + } + } + + callbacks.add(callback); + } + + unobserve(target: Element, callback: ResizeObserverEntryCallback): void { + const callbacks = this.#elementMap.get(target); + + if (callbacks === undefined) return; + + callbacks.delete(callback); + + if (callbacks.size === 0) { + this.#vo.unobserve(target); + this.#elementMap.delete(target); + } + } +}