lisn.js
Version:
Simply handle user gestures and actions. Includes widgets.
1 lines • 11.6 kB
Source Map (JSON)
{"version":3,"file":"x-resize-observer.cjs","names":["MH","_interopRequireWildcard","require","_log","_debug","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_defineProperty","_toPropertyKey","value","enumerable","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","XResizeObserver","constructor","callback","debounceWindow","logger","debug","Logger","name","buffer","newMap","targetsToSkip","newWeakMap","observedTargets","newWeakSet","timer","resizeHandler","entries","entry","target","targetOf","skipNum","undefined","logError","bugError","deleteKey","debug9","length","size","sizeOf","setTimer","arrayFrom","values","clear","borderObserver","newResizeObserver","contentObserver","logWarn","observeTarget","add","observe","box","targets","debug10","observeLater","unobserve","disconnect","exports"],"sources":["../../../src/ts/modules/x-resize-observer.ts"],"sourcesContent":["/**\n * @module Modules/XResizeObserver\n */\n\nimport * as MH from \"@lisn/globals/minification-helpers\";\n\nimport { logWarn, logError } from \"@lisn/utils/log\";\n\nimport debug from \"@lisn/debug/debug\";\n\nexport type XResizeObserverCallback = (\n entries: ResizeObserverEntry[],\n observer: XResizeObserver,\n) => void;\n\n/**\n * {@link XResizeObserver} is an extension of\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver | ResizeObserver}\n * - observes both border box and content box size changes\n * - can skip the initial callback that happens shortly after setting up via\n * {@link observeLater}\n * - can debounce the callback\n */\nexport class XResizeObserver {\n /**\n * Like {@link https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver/observe | ResizeObserver:observe} except it accepts multiple targets.\n */\n readonly observe: (...targets: Element[]) => void;\n\n /**\n * Like {@link observe} but it ignores the initial almost immediate callback\n * and only calls the callback on a subsequent resize.\n *\n * If the target is already being observed, nothing is done.\n */\n readonly observeLater: (...targets: Element[]) => void;\n\n /**\n * Like {@link https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver/unobserve | ResizeObserver:unobserve} except it accepts multiple targets.\n */\n readonly unobserve: (...targets: Element[]) => void;\n\n /**\n * Like {@link https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver/disconnect | ResizeObserver:disconnect}.\n */\n readonly disconnect: () => void;\n\n /**\n * @param debounceWindow Debounce the handler so that it's called at most\n * every `debounceWindow` ms.\n */\n constructor(callback: XResizeObserverCallback, debounceWindow?: number) {\n const logger = debug ? new debug.Logger({ name: \"XResizeObserver\" }) : null;\n\n // Keep the latest ResizeObserverEntry for each target during the\n // debounceWindow. Short-lived, so ok to use a Map.\n const buffer = MH.newMap<Element, ResizeObserverEntry>();\n\n // Since internally we have two observers, one for border box, one for\n // content box, we will get called initially twice for a target. So we keep\n // a counter of 1 or 2 for how many more calls to ignore.\n const targetsToSkip = MH.newWeakMap<Element, 1 | 2>();\n\n let observedTargets = MH.newWeakSet<Element>();\n\n debounceWindow ??= 0;\n\n let timer: ReturnType<typeof setTimeout> | null = null;\n const resizeHandler = (entries: ResizeObserverEntry[]) => {\n // Override entries for previous targets, but keep entries whose targets\n // were not resized in this round\n for (const entry of entries) {\n const target = MH.targetOf(entry);\n const skipNum = targetsToSkip.get(target);\n if (skipNum !== undefined) {\n if (skipNum === 2) {\n // expect one more call\n targetsToSkip.set(target, 1);\n } else {\n // done\n /* istanbul ignore next */\n if (skipNum !== 1) {\n logError(MH.bugError(`# targetsToSkip is ${skipNum}`));\n }\n MH.deleteKey(targetsToSkip, target);\n }\n\n continue;\n }\n\n buffer.set(target, entry);\n }\n\n debug: logger?.debug9(\n `Got ${entries.length} new entries. ` +\n `Have ${buffer.size} unique-target entries`,\n entries,\n );\n\n if (!timer && MH.sizeOf(buffer)) {\n timer = MH.setTimer(() => {\n if (MH.sizeOf(buffer)) {\n callback(MH.arrayFrom(buffer.values()), this);\n buffer.clear();\n }\n\n timer = null;\n }, debounceWindow);\n }\n };\n\n const borderObserver = MH.newResizeObserver(resizeHandler);\n const contentObserver = MH.newResizeObserver(resizeHandler);\n if (!borderObserver || !contentObserver) {\n logWarn(\n \"This browser does not support ResizeObserver. Some features won't work.\",\n );\n }\n\n const observeTarget = (target: Element) => {\n observedTargets.add(target);\n borderObserver?.observe(target, { box: \"border-box\" });\n contentObserver?.observe(target);\n };\n\n // --------------------\n\n this.observe = (...targets) => {\n debug: logger?.debug10(\"Observing targets\", targets);\n\n for (const target of targets) {\n observeTarget(target);\n }\n };\n\n this.observeLater = (...targets) => {\n debug: logger?.debug10(\"Observing targets (later)\", targets);\n for (const target of targets) {\n // Only skip them if not already observed, otherwise the initial\n // (almost) immediate callback won't happen anyway.\n if (observedTargets.has(target)) {\n continue;\n }\n\n targetsToSkip.set(target, 2);\n observeTarget(target);\n }\n };\n\n this.unobserve = (...targets) => {\n debug: logger?.debug10(\"Unobserving targets\", targets);\n\n for (const target of targets) {\n MH.deleteKey(observedTargets, target);\n borderObserver?.unobserve(target);\n contentObserver?.unobserve(target);\n }\n };\n\n this.disconnect = () => {\n debug: logger?.debug10(\"Disconnecting\");\n observedTargets = MH.newWeakSet();\n borderObserver?.disconnect();\n contentObserver?.disconnect();\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}